geos-3.4.2/0000755000175000017500000000000012206417223012274 5ustar frankiefrankiegeos-3.4.2/AUTHORS0000644000175000017500000000324612206417150013350 0ustar frankiefrankie- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2003-11-06 Initial development of GEOS was funded by: Vivid Solutions Inc (www.vividsolutions.com) Refractions Research Inc (www.refractions.net) British Columbia Advanced Systems Institute (www.asi.bc.ca) GEOS is based on algorithms originally developed in Java by Martin Davis (mbdavis@refractions.net) in the JTS Topology Suite (www.vividsolutions.com/jts/jtshome.htm) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2004 to 2006 Continued development of GEOS funded by Refractions Research Inc. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2006 Continued development of GEOS funded by Refractions Research Inc. Inclusion of new JTS functionality in JTS 1.5 to 1.7 funded by Safe Software and Autodesk. Improved robustness of geometric operations for GEOS 3.0.0 funded by the Bavarian State Ministry of Agriculture and Forestry and the State Survey of Bavaria. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Developers: Active: Martin Davis (mbdavis@refractions.net) - Architecture Mateusz Loskot (mateusz@loskot.net) - Unit testing Regina Obe (lr@pcorp.us) - QA / Windows Paul Ramsey (pramsey@refractions.net) - Coordination / Build Sandro Santilli (strk@keybit.net) - Bug Fixing / Maintenance Frank Warmerdam (warmerdam@pobox.com) - VStudio porting In Active: Dave Blasby (dblasby@gmail.com) - PostGIS Connectivity Yury Bychkov (me@yury.ca) - Initial Porting Sean Gillies (sgillies@frii.com) - Scripting Interface Fernando Villa (fvilla@zoo.uvm.edu) - GNU Build System Norman Vine (nvine@cape.com) - Porting / C++ Expertise geos-3.4.2/CMakeLists.txt0000644000175000017500000003036712206417147015052 0ustar frankiefrankie################################################################################# # # Main GEOS build configuration file for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# project(geos) cmake_minimum_required(VERSION 2.6) if(NOT CMAKE_VERSION) set(CMAKE_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}") endif() # Location of custom CMake modules with macros used by GEOS set(CMAKE_MODULE_PATH "${geos_SOURCE_DIR}/cmake/modules") ################################################################################# # Setup GEOS version ################################################################################# # GEOS release version # GEOS C++ library SONAME will use these encoding ABI break at every release set(VERSION_MAJOR 3) set(VERSION_MINOR 4) set(VERSION_PATCH 2) set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") # JTS_PORT is the version of JTS this release is bound to set(JTS_PORT 1.12.0) message(STATUS "Setting GEOS version ${VERSION} as port of JTS ${JTS_PORT}") # GEOS C API version set(CAPI_INTERFACE_CURRENT 9) set(CAPI_INTERFACE_REVISION 2) set(CAPI_INTERFACE_AGE 8) math(EXPR CAPI_VERSION_MAJOR "${CAPI_INTERFACE_CURRENT} - ${CAPI_INTERFACE_AGE}") set(CAPI_VERSION_MINOR ${CAPI_INTERFACE_AGE}) set(CAPI_VERSION_PATCH ${CAPI_INTERFACE_REVISION}) set(CAPI_VERSION "${CAPI_VERSION_MAJOR}.${CAPI_VERSION_MINOR}.${CAPI_VERSION_PATCH}") message(STATUS "Setting GEOS C API version ${CAPI_VERSION}") if (NOT WIN32) set(CAPI_SOVERSION ${CAPI_VERSION_MAJOR}) message(STATUS "Setting GEOS C API soversion ${CAPI_SOVERSION}") endif() ################################################################################# # Check custom global options ################################################################################# option(GEOS_ENABLE_TESTS "Set to OFF|ON (default) to control build of GEOS tests package" ON) option(GEOS_ENABLE_INLINE "Set to OFF|ON (default) to control GEOS compilation with small functions inlining" ON) if(NOT MSVC) option(GEOS_ENABLE_ASSERT "Set to ON|OFF (default) to build GEOS with assert() macro enabled" OFF) endif() if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) option(GEOS_ENABLE_FLOATSTORE "Set to OFF|ON (default) to control IEEE754 conformance and remove extra precision" ON) endif() if(APPLE) option(GEOS_ENABLE_MACOSX_FRAMEWORK "Set to ON|OFF (default) to build GEOS as a Mac OS X framework" OFF) option(GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT "Set to ON|OFF (default) to add Unix compatibility to the Mac OS X framework" OFF) endif() ################################################################################# # Setup C/C++ compiler options ################################################################################# if(NOT MSVC_IDE) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build, options are: None Debug Release" FORCE) endif() message(STATUS "Setting GEOS build type - ${CMAKE_BUILD_TYPE}") endif() if(CMAKE_BUILD_TYPE STREQUAL Debug) add_definitions(-D_DEBUG) endif() if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) # General options set(CMAKE_CXX_FLAGS "-pedantic -ansi ${CMAKE_CXX_FLAGS}") # Numerical stability if(GEOS_ENABLE_FLOATSTORE) # Remove extra precision by forcing conformance to IEEE 754 rather than IEEE 854 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffloat-store") endif() message(STATUS "Forcing IEEE 754 using flag -ffloat-store - ${GEOS_ENABLE_FLOATSTORE}") # Warnings specification set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long") # Turn on Position Independent Code generation for GEOS C shared library set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") # Enable glibc ISO C99 features (macros isfinite, isnan) set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_ISOC99_SOURCE=1") elseif(MSVC) # Set pedantic mode by default #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") string(REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") if(MSVC80 OR MSVC90 OR MSVC10 OR MSVC11) # Option is to enable the /MP switch for Visual Studio 2005 or later option(GEOS_MSVC_ENABLE_MP "Set to ON to build GEOS with the /MP option (Visual Studio 2005 and above)." ON) mark_as_advanced(GEOS_MSVC_ENABLE_MP) if(GEOS_MSVC_ENABLE_MP) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") endif() message(STATUS "Setting Visual Studio 2005+ option /MP to ${GEOS_MSVC_ENABLE_MP}") add_definitions(-D_SCL_SECURE_NO_WARNINGS) add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-DNOMINMAX) endif() endif() if(GEOS_ENABLE_INLINE) add_definitions(-DGEOS_INLINE) endif() message(STATUS "Setting GEOS compilation with small functions inlining - ${GEOS_ENABLE_INLINE}") if(NOT MSVC) if(GEOS_ENABLE_ASSERT) string(REGEX REPLACE "[-/]D.*NDEBUG" "-U NDEBUG" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") endif() message(STATUS "Setting GEOS compilation with assert() macro enabled - ${GEOS_ENABLE_ASSERT}") endif() ################################################################################# # Setup C/C++ library features ################################################################################# # check header files include(CheckIncludeFiles) check_include_files(stdint.h HAVE_STDINT_H) check_include_files(inttypes.h HAVE_INTTYPES_H) check_include_files(ieeefp.h HAVE_IEEEFP_H) # check types and sizes include(CheckTypeSize) if(MSVC) check_type_size("__int64" HAVE_INT64_T_64) else() if(HAVE_STDINT_H OR HAVE_INTTYPES_H) check_type_size("int64_t" HAVE_INT64_T_64) else() check_type_size("long long int" HAVE_LONG_LONG_INT_64) endif() endif() # check functions and macros include(CheckPrototypeExists) include(CheckSymbolExists) check_prototype_exists(isnan cmath HAVE_STD_ISNAN) if(NOT HAVE_STD_ISNAN) if(MSVC) check_prototype_exists(_isnan float.h HAVE_ISNAN) elseif(APPLE) check_prototype_exists(__isnand math.h HAVE_ISNAND_XCODE) if(NOT HAVE_ISNAND_XCODE) check_prototype_exists(__inline_isnand math.h HAVE_INLINE_ISNAND_XCODE) endif() else() check_symbol_exists(isnan math.h HAVE_ISNAN) endif() endif() check_prototype_exists(isfinite cmath HAVE_STD_ISFINITE) if(NOT HAVE_STD_ISFINITE) if(MSVC) check_prototype_exists(_finite float.h HAVE_FINITE) else() #CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) check_symbol_exists(isfinite math.h HAVE_ISFINITE) endif() endif() ################################################################################ # Setup build directories ################################################################################# # Put the libaries and binaries that get built into directories at the # top of the build tree rather than in hard-to-find leaf # directories. This simplifies manual testing and the use of the build # tree rather than installed Boost libraries. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) ################################################################################ # Setup include directories ################################################################################# # for including GEOS C++ API headers include_directories(${geos_SOURCE_DIR}/include) # for including build-specific GEOS C API headers include_directories(${geos_BINARY_DIR}/capi) # for including build-specific version.h, platform.h and geos_c.h include_directories(${geos_BINARY_DIR}/include) ################################################################################# # Setup checks and generate config headers ################################################################################# ################################################################################# # MACRO: GET_SVN_REVISION # # DESCRIPTION: # MACRO FOR GETTING THE SVN revision for this build ################################################################################# MACRO (GET_SVN_REVISION) FIND_PACKAGE(Subversion) IF(SUBVERSION_FOUND) Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) # MESSAGE("Current revision is ${Project_WC_REVISION}") # Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project) # MESSAGE("Last changed log is ${Project_LAST_CHANGED_LOG}") ENDIF() ENDMACRO(GET_SVN_REVISION) # Determine SVN/Git revision if(EXISTS "${CMAKE_SOURCE_DIR}/.svn") GET_SVN_REVISION() endif() if ( NOT ${Project_WC_REVISION} EQUAL 0 ) set( GEOS_SVN_REVISION ${Project_WC_REVISION} ) configure_file ( "${PROJECT_SOURCE_DIR}/tools/geos_svn_revision_cmake.h.in" "${PROJECT_SOURCE_DIR}/geos_svn_revision.h" ) # "${geos_BINARY_DIR}/include/geos_svn_revision.h" ) else() message(STATUS "Generating revision header ${CMAKE_SOURCE_DIR}/geos_svn_revision.h") find_program(SH sh) if(SH) execute_process(COMMAND ${SH} -c "cd ${CMAKE_SOURCE_DIR} && ${CMAKE_SOURCE_DIR}/tools/svn_repo_revision.sh") file(RENAME "${CMAKE_SOURCE_DIR}/geos_svn_revision.h" "${CMAKE_BINARY_DIR}/geos_svn_revision.h") else() message("*** sh-compatible command not found, cannot create geos_svn_revision.h") message("*** Check SVN revision and create revision header manually:") message("*** echo '#define GEOS_SVN_REVISION XYZ' > ${CMAKE_SOURCE_DIR}/geos_svn_revision.h") endif() endif() # End: Determine SVN/Git revision if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h) message(STATUS "Disabling existing ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h") if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6) file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h) set(PH_RESULT "removed") else() file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h.disabled) set(PH_RESULT "renamed") endif() message(STATUS "Disabling existing ${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h - ${PH_RESULT}") endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/geos/platform.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/geos/platform.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/geos/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/geos/version.h @ONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/capi/geos_c.h.in ${CMAKE_CURRENT_BINARY_DIR}/capi/geos_c.h @ONLY) ################################################################################# # Configure tests ################################################################################# if(GEOS_ENABLE_TESTS) # Include CTest support include(CTest) enable_testing() # Define "make check" as alias for "make test" add_custom_target(check COMMAND ctest) endif() ################################################################################# # Configure subdirectories ################################################################################# add_subdirectory(include) add_subdirectory(src) add_subdirectory(capi) add_subdirectory(tests) add_subdirectory(tools) ################################################################################# # Install/Uninstall ################################################################################# configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake") ################################################################################# # DEBUG settings - TODO: make a summary message(STATUS "CMake ${CMAKE_VERSION} successfully configured ${PROJECT_NAME} using ${CMAKE_GENERATOR} generator") #message(STATUS "XXX: CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}") #message(STATUS "XXX: CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}") #message(STATUS "XXX: CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}") geos-3.4.2/COPYING0000644000175000017500000006347612206417150013346 0ustar frankiefrankie GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 License and to the absence of any warranty; and distribute a copy of this License along with the Library. 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. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! geos-3.4.2/ChangeLog0000644000175000017500000163745512206417150014072 0ustar frankiefrankie2013-08-22 07:44 Sandro Santilli * [r3915] .travis.yml, tools/ci, tools/ci/before_install.sh, tools/ci/before_install_autotools.sh, tools/ci/before_install_cmake.sh, tools/ci/common.sh, tools/ci/script.sh, tools/ci/script_autotools.sh, tools/ci/script_cmake.sh: Configure Travis CI for GEOS (#657) Configurations for GCC and clang with both Autotools and CMake. Enable IRC notifications Contributed by Mateusz Loskot 2013-08-22 06:35 Sandro Santilli * [r3911] tests/unit/capi/GEOSisValidDetailTest.cpp: Accept multiple NaN representations (#656) 2013-08-21 13:44 Sandro Santilli * [r3906] CMakeLists.txt, capi/geos_c.h.in, configure.in: Fix CAPI version to 1.8.2, and fix a missing c++ version too 2013-08-21 13:44 Sandro Santilli * [r3905] NEWS: Fill up 3.4.2 NEWS section so far 2013-08-21 13:44 Sandro Santilli * [r3904] include/geos/geom/BinaryOp.h: Use a double for PrecisionModel scale, avoiding overflows Fixes #652 2013-08-21 11:14 Regina Obe * [r3903] include/geos/platform.h.in: #650 isnan workaround OS detection missing NetBSD, DragonFly, Sun nuance 2013-08-19 15:39 Regina Obe * [r3897] include/geos/Makefile.am: #601 backport trunk fix -- do not include platform.h , version.h in tar ball, but install 2013-08-17 17:56 Regina Obe * [r3895] HOWTO_RELEASE, NEWS: update news release date and reminder to do so for future 2013-08-17 17:47 Regina Obe * [r3893] capi/geos_c.h.in, configure.in, include/geos/version.h.vc: bump versions to 3.4.2dev (3.4.2) 2013-08-17 14:06 Regina Obe * [r3891] CMakeLists.txt, configure.in: other changes in preparation for 3.4.1 release 2013-08-17 04:22 Regina Obe * [r3890] ChangeLog, NEWS: update news and changelog in preparation for geos 3.4.1 2013-08-17 03:09 Regina Obe * [r3888] CMakeLists.txt: #644 only do svn check if there is a .svn file in source folder to ensure it works with tar ball 2013-08-16 15:26 Sandro Santilli * [r3886] NEWS, src/operation/overlay/snap/LineStringSnapper.cpp, tests/unit/capi/GEOSSnapTest.cpp: Fix assertion failure in snapping code (#649) The bug affected attempts to snapping lines to the points of a rectangle with a side smaller than the tolerance. 2013-08-14 06:10 Regina Obe * [r3884] CMakeLists.txt, HOWTO_RELEASE: update HOWTO_RELEASE to include bumping revision numbrs in CMake and also bump numbers in CMake. 2013-08-14 05:28 Regina Obe * [r3882] configure.in, include/geos/version.h.vc: bump version numbers to 3.4.1dev and 3.4.1 in prep for next release 2013-08-11 11:42 Sandro Santilli * [r3880] include/geos/platform.h.in, tests/xmltester/testrunner.sh, tools/geos-config.in: Set correct eol-style for geos-config, platform.h and testrunner (#645) 2013-08-11 04:17 Regina Obe * [r3875] NEWS: update date on news 2013-08-11 03:47 Regina Obe * [r3872] .: Branch 3.4 2013-08-11 03:44 Regina Obe * [r3870] update version numbers to agree with configure.in - huh why are the version numbers all old in this file? 2013-08-11 03:41 Regina Obe * [r3869] get rid of dev in version# in prep for 3.4.0 release 2013-08-11 03:37 Regina Obe * [r3868] update change log in prep for 3.4.0 release 2013-08-08 04:25 Regina Obe * [r3867] update news and change log in prep for Aug 10 release of 3.4.0 2013-08-04 20:05 Regina Obe * [r3866] #601 do not incude platform.h in tar ball. 2013-08-04 12:27 Sandro Santilli * [r3864] Avoid Coordinate copies in DelaunayTriangulationBuilder::envelope 2013-08-04 12:23 Sandro Santilli * [r3863] Simplify testcase for DelaunayTriangulationBuilder::envelope 2013-08-04 11:58 Sandro Santilli * [r3862] envelope() method added to DelaunayTriangulationBuilder class Includes testcase. Patch by Vishal Tiwari 2013-08-03 15:37 Mateusz Loskot * [r3861] Add geos_svn_revision.h generator to CMake config Patch from David Burken attached to #643 2013-08-02 22:38 Regina Obe * [r3860] #607 Makefile.vc 'clean' step leaks obj files 2013-08-01 21:13 Regina Obe * [r3858] updates add some missing ticket items and add ticket numbers where missing 2013-07-31 21:25 Sean Gillies * [r3857] Print to stderr only in debug mode 2013-07-31 20:38 Regina Obe * [r3856] #641 - distinguish between active and inactive group and add Regina Obe to list. 2013-07-31 14:13 Regina Obe * [r3855] 2013-07-31 14:07 Regina Obe * [r3854] add myself to author list 2013-07-31 09:42 Sandro Santilli * [r3853] Improve overlay robustness - Validate CBR results before accepting them - Enable overlay node validator even for FIXED precision - Enable geometry-reduction policy - Bail out on exception from overlay if any input is invalid Fixes bug #459 2013-07-31 08:34 Sandro Santilli * [r3852] Do not expect invalid output from buffer The test verification code is tollerant, but better fix this 2013-07-31 08:30 Sandro Santilli * [r3851] Turn test for ticket 275 into an "area test". Area test checks that the area of the Union between two geometries is about the same as the sum of area of symdifference + area of intersection. 2013-07-25 21:00 Sandro Santilli * [r3850] Fix CoordinateList.closeRing() use of past-the-end operator 2013-07-25 20:51 Sandro Santilli * [r3849] closeRing() method added in CoordinateList class Patch by Vishal Tiwari 2013-07-23 11:01 Sandro Santilli * [r3848] Cosmetic changes into the CAPI code, by Mike Toews - Replace "reader" with "writer" in prototypes - describe "_r" functions - Function arguments with only one geometry changed from g1 to g - Rename nf -> ef for GEOSContext_setErrorHandler_rsetErrorHandler_r - Move GEOSBuffer* declaration to top of buffer related function section - Change char* mat to char *mat - Fix typos in comments - Clip trailing white space, and other white space consistencies - Other minor rearrangements for consistency 2013-07-17 16:07 Sandro Santilli * [r3846] Make GEOSOffsetCurve survive single-point input (with an exception) 2013-07-17 15:58 Sandro Santilli * [r3845] Fix OffsetCurve op in presence of duplicated vertices (#602) 2013-07-17 13:05 Sandro Santilli * [r3844] Fix LineSegmentVisitor copy ctor (#636) 2013-07-15 15:21 Sandro Santilli * [r3840] Drop SRID from geometrycollection elements (#583) 2013-07-12 12:37 Sandro Santilli * [r3839] Add test for #580 (successful) 2013-07-11 15:58 Sandro Santilli * [r3837] Fix memory leak in testcase 2013-07-11 15:54 Sandro Santilli * [r3836] Drop carriage returns 2013-07-11 15:34 Sandro Santilli * [r3835] Fix memory in QuadEdgeSubdivision (#604) 2013-07-11 08:21 Sandro Santilli * [r3834] Expose Delaunay triangulation to PHP API (#567) 2013-07-11 07:36 Sandro Santilli * [r3833] Fix test after changes in PointOnSurface 2013-07-11 05:49 Sandro Santilli * [r3832] Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497) 2013-07-11 05:46 Sandro Santilli * [r3831] Add 3.3.1 to 3.3.8 section 2013-07-11 05:42 Sandro Santilli * [r3830] Cleanup NEWS file confused in r3816 2013-07-05 14:56 Sandro Santilli * [r3829] Fix install location of linearref headers (#624) 2013-06-28 10:33 Mateusz Loskot * [r3827] Add NMAKE version from Visual Studio 2012 Update 3 RTM 2013-06-26 16:27 Sandro Santilli * [r3826] Fix typo in HotPixel corners initializer Patch by Mickael BORNE 2013-06-26 16:03 Mateusz Loskot * [r3824] Add another NMAKE version from Visual Studio 2012 2013-06-12 16:08 Mateusz Loskot * [r3823] Final clarification of BufferBuilder::bufferLineSingleSided behaviour (ticket #633) * Ignore BufferParameters::setSingleSided() parameter as it is specific to areal geometries. * Document semantic of input parameters. * Document order of coordinates in generated output (conforms to PostGIS behaviour). * Add test for coordinates order assumptions. 2013-06-12 14:06 Mateusz Loskot * [r3822] Update single side offset curve tests to check uniform coordinates order in output (ticket #633). We need to decide if BufferBuilder::bufferLineSingleSided should take care of reversing coordinates if necessary. 2013-06-12 13:22 Mateusz Loskot * [r3821] Add updated C++ API test case for the left/right offset curve (ticket #633) 2013-06-12 09:56 Mateusz Loskot * [r3820] Add comment missing from previous commit. 2013-06-12 09:50 Mateusz Loskot * [r3819] Add test case for #633 based on GEOSOffsetCurve from C-API. Passing negative distance for right-sided offset curve generates correct/expected output. Interestingly, equivalent test using BufferBuilder directly, from C++ API, does not pass. 2013-06-11 15:29 Mateusz Loskot * [r3818] Revert r3817 as partial or incorrect fix. See ticket #633 for details. 2013-06-11 14:19 Mateusz Loskot * [r3817] * Fix bug in OffsetCurveBuilder case for right-side offset curve used left-side flag to initialise the side segments. * Corresponding test case attached. 2013-06-11 12:42 Sandro Santilli * [r3816] Fix for mingw64 compile, by Regina Obe (#630) 2013-06-07 09:29 Sandro Santilli * [r3814] Simplify code looking for closer vertex snap 2013-06-07 09:21 Mateusz Loskot * [r3813] Fix incomplete type of Node at the point of destruction (by GeometryNoder) leading to never called destructor bug. 2013-06-07 09:13 Mateusz Loskot * [r3812] Correct int and std::size_t mismatch for 64-bit target. 2013-06-07 09:10 Mateusz Loskot * [r3811] * Disable copy constructor and assignment operator. * Correct int and std::size_t mismatch for 64-bit target. 2013-06-07 09:02 Mateusz Loskot * [r3810] Disable copy constructor and assignment operator 2013-06-07 08:30 Mateusz Loskot * [r3809] Correct return type of OffsetSegmentString::size() to be size_t 2013-06-06 20:18 Sandro Santilli * [r3808] Drop obsoleted files 2013-06-06 16:39 Sandro Santilli * [r3807] Drop commented out / disabled code 2013-06-05 22:18 Mateusz Loskot * [r3806] Implement generating geos_svn_revision.h using shell script. 2013-06-05 08:52 Mateusz Loskot * [r3805] Make Visual C++ 11.0 recognised by CMake configuration 2013-06-03 07:36 Sandro Santilli * [r3803] Short-circuit prepared polygon/point intersection Reduces memory fragmentation for area-puntal ops 2013-05-30 20:16 Sandro Santilli * [r3800] Improve snap algorithm reducing likelyhood of invalid output - Snap input vertices to closest snap point (#629) - Do not snap segments to external points (#501) - Never snap multiple vertices to the same snap point Work funded by Tuscany Region - SITA. Contract "Support to the use of GFOSS (Geographic Free and Open Source Software) Desktop tools" (CIG Z3B06FA6D7). 2013-05-23 17:21 Sandro Santilli * [r3799] Create geos_svn_revision.h in the source tree It's a generated source, should always be in the tarball anyway 2013-05-23 15:51 Sandro Santilli * [r3798] Distribute svn_repo_revision.sh 2013-05-10 08:40 Mateusz Loskot * [r3797] Add NMAKE option WIN64 to simplify x64 build configuration 2013-05-09 10:04 Mateusz Loskot * [r3796] Add NMAKE version from Visual Studio 2012 Update 3 2013-04-02 09:24 Mateusz Loskot * [r3795] Add missing directories 2013-04-02 09:20 Mateusz Loskot * [r3794] Add Visual Leak Detector (VLD) support to GEOS core * Add MSVC_VLD_DIR option to nmake.opt to enable/disable VLD * Add optional #include to Geometry.cpp 2013-03-15 18:48 Sandro Santilli * [r3793] Fix memory leaks in unit tests 2013-03-15 18:05 Sandro Santilli * [r3792] Add GEOSNearestPoints CAPI function Contributed by Richard Frith-Macdonald 2013-03-15 15:36 Mateusz Loskot * [r3791] Add x64 NMAKE version from Visual Studio 2012 Update 1 2013-03-12 16:20 Sandro Santilli * [r3790] Fix "puts puts" typo in ruby macro (#625) 2013-03-11 11:19 Sandro Santilli * [r3789] Port new RobustLineIntersection test from JTS 2013-03-08 17:51 Sandro Santilli * [r3787] Fix RobustLineIntersector handling of invalid intersection points (#622) Adds new testcases. Many of them fail, probably due to the lack of double double use, but one of them only fails with the old RobustLineIntersector heuristic handling invalid intersection points 2013-03-08 17:48 Mateusz Loskot * [r3786] Add algorithm/Centroid.obj 2013-03-08 17:41 Mateusz Loskot * [r3785] Untabify 2013-03-08 17:37 Mateusz Loskot * [r3784] Add NMAKE version from Visual Studio 2012 Update 1 2013-03-08 13:02 Sandro Santilli * [r3781] Fix GEOSPointOnSurface returning point on boundary (#623) Ports SafeBisector for InteriorPointArea from JTS 2013-03-05 14:46 Sandro Santilli * [r3779] Speedup GEOSWKBWriter_read_r (#621) Patch by Daniel Zeitlin 2013-03-01 11:58 Sandro Santilli * [r3778] Add wiki update and announce steps 2013-02-28 09:40 Sandro Santilli * [r3773] Fix centroid computation for collections with empty components Fixes bug #582 2013-02-25 11:41 Sandro Santilli * [r3772] Update macros/ruby.m4 for ruby 1.9.x Used RbConfig instead of obsolete and deprecated Config. Updated SWIG generated files. Patch by Kashif Rasul 2013-02-25 11:11 Sandro Santilli * [r3771] Fix build under cygwin (#595) Thanks Jason Huntley 2013-02-25 11:04 Sandro Santilli * [r3770] Deprecate WKTReader constructor taking GeometryFactory by pointer Add constructor taking it by reference, for consistency with WKBReader Closes #310 2013-02-25 10:37 Sandro Santilli * [r3769] New ::reserve(size_t) method for io::Writer class 2013-02-25 10:34 Sandro Santilli * [r3768] io::Writer: take and give strings by const ref, use .append, testcase 2013-02-21 10:29 Sandro Santilli * [r3767] WKTWriter::appendCoordinate optimisation Modified the WKTWriter::appendCoordinate method to not create an intermediate std::string, but instead write directly into the Writer object. The result is a small performance improvement. Patch by Mats Taraldsvik 2013-02-15 13:46 Mateusz Loskot * [r3765] Update svn:ignore property 2013-02-01 06:31 Sandro Santilli * [r3762] Add header guard to CLocalizer (#619) 2013-02-01 06:28 Sandro Santilli * [r3760] Fix header guard and port info in LocatioNIndexOfLine (#618) 2013-02-01 06:25 Sandro Santilli * [r3758] Fix header guard in GeometryExtracter (#617) 2013-01-25 17:19 Sandro Santilli * [r3755] IsValidOp: throw proper error on nested shells (#608) Thanks geomworx 2013-01-17 12:07 Sandro Santilli * [r3751] Only attempt to fix self-intersection between multiple components Doing this reduces the likelyhood of entering an infinite recursion whereas UnaryUnion (meant to fix that) would enter the self-intersection attempt again. Fixes #615 for which a test is added. This also gives us back an exception with the input of ticket #488, which is the same behavior JTS exposes. The (bogus) test for it is disabled by this commit. 2013-01-14 16:15 Sandro Santilli * [r3749] Fix EMPTY return from single-point lines and zero-length polygons This commit ports new Centroid class from JTS (#612) 2013-01-14 11:16 Sandro Santilli * [r3748] Fix EMPTY return from zero-area polygon (#613) 2013-01-14 11:12 Sandro Santilli * [r3747] Have XMLTester use POINT EMPTY for a null return from getInteriorPoint 2013-01-14 09:50 Sandro Santilli * [r3744] Move static class members of Interrupt out of header (#611) Patch by Mateusz Loskot 2013-01-11 17:15 Mateusz Loskot * [r3743] Missing QuadEdge.h causing incomplete types. 2013-01-11 17:11 Mateusz Loskot * [r3742] Report general and custom flags separately 2013-01-11 14:58 Sandro Santilli * [r3741] Fix GEOSPointOnSurface with zero-length linestring (#609) 2013-01-11 14:35 Mateusz Loskot * [r3740] Added test<7>() for the poorly reported bug ticket #610 - bug not reproducible. 2012-12-06 08:23 Sandro Santilli * [r3737] See if AC_CONFIG_HEADERS makes winnie happier ... and also how many other builds it breaks, if any 2012-12-06 08:04 Sandro Santilli * [r3736] Add missing classes to build script for evil compiler Curtesy of Geoff Evans 2012-12-05 09:06 Sandro Santilli * [r3734] Add note about rounding in fixed precision buffer op (#605) 2012-12-05 07:56 Sandro Santilli * [r3733] Do not reduce precision below 6 significant digits. Avoids gross results (preferring an exception) See http://trac.osgeo.org/geos/ticket/605 2012-12-04 21:50 Sandro Santilli * [r3731] Add note about BufferOp robustness improvement 2012-12-04 21:22 Sandro Santilli * [r3728] Reduce coordinates precision on robustness issues in BufferOp Fixes #605, adds test for it 2012-12-04 19:26 Sandro Santilli * [r3727] Fix an abort in Buffer op (RightmostEdgeFinder) Rather than abort we throw a TopologyException, because the problem seems to occur when noding isn't correct. See http://trac.osgeo.org/geos/ticket/605 2012-12-04 17:23 Sandro Santilli * [r3726] Add unit test for OrientedCoordinateArray 2012-11-15 15:55 Sandro Santilli * [r3720] Add automated test for #599 (succeeds) 2012-10-26 14:01 Sandro Santilli * [r3719] Fix building outside the source tree 2012-09-10 10:34 Sandro Santilli * [r3716] Add Z support in delaunay triangulation (#570) Thanks Benjamin Campbell 2012-09-10 09:23 Sandro Santilli * [r3715] Tweak the test for bug 586 to succeed while still being small 2012-09-10 08:00 Sandro Santilli * [r3712] Add test for bug #586 2012-09-10 07:56 Sandro Santilli * [r3711] Do not try to fix valid geometries (#586) 2012-09-07 12:01 Sandro Santilli * [r3710] Regenerate swig files with swig 2.0.4 2012-09-06 18:22 Sandro Santilli * [r3708] Add support for phpunit 3.6 (not loosing support for 3.4) I don't have phpunit-3.4 anymore so if anyone does please see if "make check" still works (with php enabled) NOTE: Ubuntu 10.04 ships phpunit 3.4 2012-07-27 08:09 Mateusz Loskot * [r3705] Updated NMAKE makefile with recently added source files (Ticket #574) 2012-07-26 22:43 Sandro Santilli * [r3704] Don't live triangulate includes out of build (#573) Thanks Sandro Furieri 2012-06-27 10:53 Sandro Santilli * [r3703] Add test for Delaunay triangulation with a tolerance 2012-06-27 10:43 Sandro Santilli * [r3702] Expose Delaunay triangulation to C-API (#565) 2012-06-27 10:43 Sandro Santilli * [r3701] Const-correct getTriangles / getEdges and move to proper namespace 2012-06-27 10:43 Sandro Santilli * [r3700] indent 2012-06-27 09:23 Sandro Santilli * [r3699] Indent and port info style 2012-06-26 20:41 Mateusz Loskot * [r3697] [CMake] Corrected description of default value for GEOS_ENABLE_MACOSX_FRAMEWORK option 2012-06-26 20:34 Mateusz Loskot * [r3696] Updated NEWS file with changes related to ticket #446 2012-06-26 20:29 Mateusz Loskot * [r3695] Updated svn:ignore for tests/perf 2012-06-26 17:17 Sandro Santilli * [r3694] typo 2012-06-26 17:11 Sandro Santilli * [r3693] Port Delaunay Triangulation API from JTS (#487) Work contributed by Benjamin Campbell 2012-06-25 23:31 Mateusz Loskot * [r3692] [CMake] Fixed incorrect SOVERSION value. The SOVERSION is now set with CAPI_VERSION_CURRENT - CAPI_VERSION_AGE (Ticket #446) 2012-06-25 15:17 Sandro Santilli * [r3691] Add tarball verification step 2012-06-25 10:19 Sandro Santilli * [r3684] Always return POINT from GEOSPointOnSurface, even for EMPTY (#561) 2012-06-24 22:22 Mateusz Loskot * [r3683] [CMake] Set SOVERSION property on C API shared library using CAPI_INTERFACE_* values (Ticket #446). 2012-06-22 15:44 Sandro Santilli * [r3680] Add note about handling of degenerate polygons 2012-06-22 15:32 Sandro Santilli * [r3679] Always return POINT from GEOSGetCentroid, even for EMPTY (#560) 2012-06-22 15:03 Sandro Santilli * [r3677] Port robustness fix to CentroidArea (#559) 2012-06-11 09:18 Sandro Santilli * [r3673] Retain GEOS_INLINE define while building XMLTester (#319, #472) 2012-06-07 15:11 Sandro Santilli * [r3672] Allow chaining interrupt callbacks, drop arg parameter 2012-06-07 15:10 Sandro Santilli * [r3671] Revert the interrupt request callback reset on initGEOS Once you set a callback why would you want it unregistered on initGEOS ? You will not want that.... 2012-06-07 14:41 Sandro Santilli * [r3670] Clear interruption request flag just before interrupting 2012-06-07 10:24 Sandro Santilli * [r3669] Drop orphaned custom allocation signatures from C-API header 2012-06-07 10:23 Sandro Santilli * [r3668] Test that initGEOS clears the interrupt callback Also explicitly cleanup the callback after each test. 2012-06-07 10:23 Sandro Santilli * [r3667] Unregister the interrupt request on initGEOS 2012-06-07 10:07 Sandro Santilli * [r3666] Add support for registering interruption-checking callback. This is to enhance flexibility of the interruption request model. 2012-06-06 14:15 Sandro Santilli * [r3665] Enable capi::GEOSConvexHull test, and fix it (#555) 2012-06-06 07:03 Sandro Santilli * [r3663] Clarify problems with linking against C++ api (#553) Path by Greg Troxel. 2012-05-29 19:23 Sandro Santilli * [r3657] No need to forward declare Coordinate (full definition included) 2012-05-29 19:23 Sandro Santilli * [r3656] Do not define an empty destructor for Coordinate 2012-05-29 16:41 Sandro Santilli * [r3655] Make sure to build geos_svn_config.h 2012-05-29 10:04 Sandro Santilli * [r3654] Include SVN revision in GEOSversion output 2012-05-29 10:04 Sandro Santilli * [r3653] Fix revision file path 2012-05-29 09:48 Sandro Santilli * [r3652] Fix test for directory existance 2012-05-29 09:45 Sandro Santilli * [r3651] Add script to fetch SVN revision from git or SVN 2012-05-29 08:42 Sandro Santilli * [r3650] Drop embedded RCS logs 2012-05-28 12:29 Sandro Santilli * [r3649] Install BufferInputLineSimplifier.h header (#548) Thanks ylan for the patch 2012-05-28 07:48 Sandro Santilli * [r3648] Rename interrupt request/cancel methods, cancel interrupt in init 2012-05-25 15:50 Sandro Santilli * [r3647] Revert the whole custom memory allocation work (#540) It wasn't well done. Pity. 2012-05-25 15:26 Sandro Santilli * [r3646] Expose interrupt request cancel to the C-API 2012-05-25 12:26 Sandro Santilli * [r3645] Add method to cancel an interruption request in util::Interrupt 2012-05-25 12:15 Sandro Santilli * [r3644] Add strategic check for interrupt in MCIndexNoder loop Greatly increases interruptability of buffer operations in presence of many polygons. 2012-05-25 10:54 Sandro Santilli * [r3643] Check for interruption in OverlayOp and BufferBuilder These are just two operations known to take a lot of time. It'll take a better analisys to find appropriate check point. The checks could as well be put within graph operation loops or Coordinate constructors... 2012-05-25 10:54 Sandro Santilli * [r3642] Initial support for an explicit mechanism to request interruption This commit provides a GEOS_CHECK_FOR_INTERRUPTS macro for internal use but adds no users. Early tests shows that registering a SIGINT handler is an effective way to request interruption of running GEOS operations. 2012-05-24 06:00 Sandro Santilli * [r3641] Don't call GeometryFactory::getDefaultInstance() at startup (#540) 2012-05-24 00:23 Mateusz Loskot * [r3640] Replaced static members/references to global boundary rule objects with static methods providing access to those objects. The previous implementation was troublesome for exports from Windows DLL. From POV, it is just syntactical change. Semantically nothing has changed. 2012-05-24 00:21 Mateusz Loskot * [r3639] [CMake] Link GEOS C-API library against geos.dll instead of static geos.lib to avoid breaking ODR for allocators. 2012-05-23 23:53 Mateusz Loskot * [r3638] Added missing GEOS_DLL directive to GeometryNoder and custom allocators. 2012-05-23 23:34 Mateusz Loskot * [r3637] Updated svn:ignore patterns 2012-05-23 23:03 Mateusz Loskot * [r3636] Renamed Freer to Deallocator 2012-05-23 22:57 Mateusz Loskot * [r3635] Missing namespace prevented Visual C++ compiler to find GEOSAllocator and GEOSFreer 2012-05-16 16:47 Sandro Santilli * [r3633] Fix CustomAllocators to really use the custom allocators Improve the unit test for it 2012-05-16 12:20 Sandro Santilli * [r3632] Lazily create default GeometryFactory instance (#540) Seems to fix a problem with mismatch of allocator and deallocator for the static object 2012-05-16 12:20 Sandro Santilli * [r3631] Allow passing custom memory managment functions (#540) This is both in the C++ library _and_ the C library. 2012-05-16 10:29 Mateusz Loskot * [r3630] New test for C-API convex hull func. 2012-05-14 19:03 Sandro Santilli * [r3629] Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545) 2012-05-09 18:02 Sandro Santilli * [r3627] Fix TopologyPreservingSimplifier invalid output on closed line (#508) 2012-05-09 16:28 Sandro Santilli * [r3625] Add support for PHP 5.4 (#513) -- thanks voxik 2012-05-08 18:41 Sandro Santilli * [r3623] Envelope-based short-circuit for Geometry->symDifference (#543) 2012-05-08 17:39 Sandro Santilli * [r3621] Geometry methods do use BinaryOp internally + shortcuts (#542) This commit changes both XMLTester and C-API to not use BinaryOp directly but rather rely on geometry methods to do that. 2012-05-04 14:51 Sandro Santilli * [r3619] Correct include directives for GeometryNoder (#538) 2012-05-04 08:24 Sandro Santilli * [r3618] Update PGAC_TYPE_64BIT_INT for better cross-compiler support (#534) 2012-05-03 10:08 Sandro Santilli * [r3616] Check size of "intt64" 2012-04-27 07:01 Sandro Santilli * [r3615] Expose GEOSNode to PHP api 2012-04-12 09:07 Sandro Santilli * [r3614] Throw an exception rather than aborting on NaN overlay input (#530) 2012-04-10 17:01 Sandro Santilli * [r3612] Abort if HotPixel is constructed with zero scale (#529) 2012-04-10 15:58 Sandro Santilli * [r3611] Add test for bug #527 2012-04-10 15:16 Sandro Santilli * [r3609] Have UnaryUnion use BinaryOp for the simple case See ticket #527 -- there's no infinite loop triggered by our testsuite... 2012-04-10 15:04 Sandro Santilli * [r3607] Reduce CommonBitsRemover harmful effects during overlay op (#527) 2012-04-10 08:38 Sandro Santilli * [r3605] Port GeometryPrecisionReducer, include testcase 2012-04-06 19:04 Sandro Santilli * [r3604] Deep copy Geometry with GeometryFactory.createGeometry() Uses the CoordinateSequenceFactory of the factory 2012-04-06 19:03 Sandro Santilli * [r3603] Add CoordinateSequence deep copy trhough CoordinateSequenceFactory 2012-04-05 17:07 Sandro Santilli * [r3602] Normalize noded geometry before comparing with expected value In this way we can change the noding implementation w/out breaking the tests. 2012-04-05 16:56 Sandro Santilli * [r3601] Regnerate geos wrapper with correct version for this branch 2012-04-05 16:47 Sandro Santilli * [r3599] Regenerate swig wrappers with SWIG 1.3.40 2012-04-05 14:53 Sandro Santilli * [r3598] Fix SimpleSnapRounder::getNodedSubstrings, fix leak on exception 2012-04-05 14:37 Sandro Santilli * [r3597] Clean memory on exception 2012-04-05 14:23 Sandro Santilli * [r3596] Generalize NodedSegmentString::getNodedSubstrings 2012-04-05 14:14 Sandro Santilli * [r3595] Ensure GEOSNode doesn't throw an exception with current tests 2012-04-05 13:43 Sandro Santilli * [r3594] Add note about GEOSNode 2012-04-05 13:40 Sandro Santilli * [r3593] Add GEOSNode C-API interface (#496) Includes a new GeometryNoder C++ class and regression testing. 2012-04-05 12:05 Sandro Santilli * [r3592] Fix memory leak with IteratedNoder 2012-04-05 11:07 Sandro Santilli * [r3591] Update port info and cleanup IteratedNoder 2012-04-05 10:30 Sandro Santilli * [r3590] Make OrientedCoordinateArray comparable 2012-04-05 10:30 Sandro Santilli * [r3589] Make OrientedCoordinateArray assignable 2012-04-03 14:23 Sandro Santilli * [r3588] Make OrientedCoordinateArray copyable 2012-04-03 12:59 Sandro Santilli * [r3587] Const-correct PrecisionModel use in MCIndexSnapRounder 2012-04-01 20:50 Paul Ramsey * [r3585] Update howto release 2012-04-01 20:45 Paul Ramsey * [r3583] Sync up versions advertised in capi to those in configure.in 2012-03-27 08:37 Sandro Santilli * [r3576] Indent.. 2012-03-22 08:39 Sandro Santilli * [r3575] Fix simplification of collections with empty items (#519) 2012-02-20 21:34 Paul Ramsey * [r3573] Synch patch level version with autoconf number 2012-02-16 18:19 Paul Ramsey * [r3568] Update provenance for Olivier Devillers. 2012-01-16 20:36 Paul Ramsey * [r3567] More info on provenance. 2012-01-16 20:15 Paul Ramsey * [r3566] Update provenenance 2012-01-16 18:00 Paul Ramsey * [r3565] Complete Note#1 in the http://wiki.osgeo.org/wiki/GEOS_Provenance_Review to get out of incubation. 2012-01-07 21:09 Mateusz Loskot * [r3563] Fixed (hopefully) CMake issues with std:: namespace detection (Ticket #493) 2012-01-07 21:08 Mateusz Loskot * [r3562] Missing header for toupper. Fixed Visual C++ warning. 2012-01-06 21:53 Sandro Santilli * [r3561] Forward port: Fix MSVC compilation of ambiguous log() call #506 2011-12-16 14:15 Sandro Santilli * [r3555] Make debugging output of LineStringSnapper more readable 2011-12-15 14:36 Sandro Santilli * [r3553] Check validity after snapping in BinaryOp. Fixes bug #488 Adds regression test. This is a GEOS-only approach. 2011-12-15 11:34 Sandro Santilli * [r3550] indent 2011-12-15 08:59 Sandro Santilli * [r3548] Fix build with CBR_BEFORE_SNAPPING undefined 2011-12-12 15:09 Howard Butler * [r3546] apply patch for #500 to fix clang's complaint about a missing default initialization 2011-12-12 10:10 Sandro Santilli * [r3544] Apply Shoelace formula for area calculation (#485) 2011-12-12 09:59 Sandro Santilli * [r3542] Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497) 2011-12-09 10:54 Sandro Santilli * [r3540] Fix C++11 build by avoiding std::pair (#491) 2011-12-09 10:04 Sandro Santilli * [r3536] Ignore built performance tests 2011-12-09 10:04 Sandro Santilli * [r3535] Improve buffer robustness by reverting to non snaprounding noder This commit fixes all cases reported in http://trac.osgeo.org/geos/wiki/BufferRobustness They include #495 and #494 2011-12-09 08:48 Sandro Santilli * [r3534] Fix CascadedPolygonUnion to discard non-polygonal components created during unioning This is to avoid failures and provide more desirable behaviour. Includes automated testing. Closes ticket #499. 2011-12-07 15:13 Sandro Santilli * [r3530] Update port info for MCIndexPointSnapper and MCIndexSnapRounder 2011-12-07 11:17 Sandro Santilli * [r3529] Add a simple test for MCIndexSnapRounderTest The test would fail before the fix in r3528 2011-12-06 17:26 Sandro Santilli * [r3528] HotPixel: do not invalidate reference to original point. Fixes #498. 2011-12-02 09:42 Sandro Santilli * [r3525] Add tag to make the test runnable with JTS 2011-11-30 09:45 Sandro Santilli * [r3523] Fix MCIndexSnapRounder use of provided precision model. Fixes bug #473 (RightmostEdgeFinder assertion failure). Includes regression test. 2011-11-29 14:01 Sandro Santilli * [r3522] Use 18 significant digits for TopologyException point coordinates 2011-11-28 08:53 Sandro Santilli * [r3520] BufferBuilder: fix handling of collapsed edges skipping. Fixes #494. Includes regression test, provided by SAFE. 2011-11-24 22:07 Sandro Santilli * [r3518] Fix to get swig/ruby compiling for ruby 1.9 Patch by Kashif Rasul 2011-11-06 03:25 Mateusz Loskot * [r3517] * GEOS builds with Visual C++ from Visual Studio 11(Developer Preview). * Added related _NMAKE_VER case to nmake.opt. 2011-11-04 20:41 Sandro Santilli * [r3515] Allow any case in NaN for testcase purposes (#486) 2011-11-04 17:59 Sandro Santilli * [r3514] Fix noding of self-intersecting lines through UnaryUnion (#482) Includes updated tests from JTS 2011-10-28 23:13 Mateusz Loskot * [r3511] Updated svn:ignore property 2011-10-27 07:04 Sandro Santilli * [r3510] Add JTS triangulation api item 2011-10-26 16:49 Mateusz Loskot * [r3509] * Test of two ways of executing buffer operation. * Test problems with BufferOp when using BufferParameters reported by Markus Meyer. * TODO: if possible, replace sample WKT with WKT from Markus. 2011-10-26 16:14 Sandro Santilli * [r3508] Add test for BufferParameters class 2011-10-26 14:16 Sandro Santilli * [r3505] Add missing entries in the author file. Order alphabetically. 2011-10-26 14:16 Sandro Santilli * [r3504] Add missing CAPI additions of 3.3.0 to NEWS file 2011-10-19 00:45 Mateusz Loskot * [r3502] Fixed CMAKE_CXX_FLAGS overridind -std=gnu++0x (#489) 2011-10-18 22:12 Mateusz Loskot * [r3501] Missing 3.4.0 versions update in CMake configuration 2011-10-05 23:24 Mateusz Loskot * [r3499] Removed redundant casts between integer types 2011-10-05 00:09 Howard Butler * [r3498] declare these functions static inline to silence unused-function warning 2011-10-04 20:46 Howard Butler * [r3497] remove extra ;'s to satisfy pedantic warning 2011-10-04 15:48 Howard Butler * [r3495] turn off framework building by default on APPLE 2011-10-04 15:43 Howard Butler * [r3494] propsets to svn:ignore CMake build junk 2011-10-04 15:42 Howard Butler * [r3493] fix up non-framework CMake builds on APPLE 2011-10-04 15:32 Howard Butler * [r3492] fix up order initialization 2011-09-28 17:23 Mateusz Loskot * [r3491] * Added interesting test<11> case to Douglas-Peucker unit * Visual C++ build on Windows x86-32 is all green and happy throwing ok:737 2011-09-23 12:14 Sandro Santilli * [r3484] Fixed handling of Linear Referencing over MultiLineStrings to always return lowest index, and to trim zero-length result components (#323) Includes test. This is a port of JTS changesets 463, 464 and 465 2011-09-23 12:14 Sandro Santilli * [r3483] Port updates to the LenghtIndexedLineTest testcase (see #323) Note that the test fails if the library isn't also fixed 2011-09-23 01:03 Mateusz Loskot * [r3482] Removed Subversion Id keyword from all text files (#480) 2011-09-23 00:16 Mateusz Loskot * [r3481] Removed Subversion svn:keywords property (#480) 2011-09-21 08:11 Sandro Santilli * [r3475] Fix out-of-place build for python binding (#332) 2011-09-20 14:35 Howard Butler * [r3472] mark concrete implementations as non-virtual for GeometryCollection::computeEnvelopInternal and GeometryCollection::compareToSameClass #478 2011-09-20 14:24 Howard Butler * [r3470] apply clang fix for #463 2011-09-19 15:07 Mateusz Loskot * [r3469] Disable unit test relying on C99 feature if GEOS built using Visual C++ 2011-09-17 15:53 Sandro Santilli * [r3468] Use the global isnan from math.h for Solaris (#461) 2011-09-12 07:47 Sandro Santilli * [r3465] Fix memory leak on invalid geometry in InteriorPointArea (#475) 2011-08-24 14:55 Sandro Santilli * [r3463] Fix warnings on MSVC 2008 64 Bit (#470) 2011-08-20 21:02 Sandro Santilli * [r3461] Forward port fix for #464 (Geometry.clone SRID copy) 2011-08-19 09:42 Sandro Santilli * [r3458] Fix missing return from DirectedEdge output operator 2011-08-19 09:41 Sandro Santilli * [r3457] Fix out-of-source builds 2011-08-06 09:10 Sandro Santilli * [r3456] Drop dangling references to SegmentString.inl (ticket #467) 2011-07-27 13:55 Sandro Santilli * [r3455] Add test file printing sizes of some classes 2011-07-27 13:29 Sandro Santilli * [r3454] Earlier release of input segment strings, earlier release of buffer subgraphs. 2011-07-27 08:12 Sandro Santilli * [r3453] Change Noder interface to transfer ownership of noded segment strings to caller. Delete them as soon as converted to Edges in BufferOp. 2011-07-26 16:36 Sandro Santilli * [r3452] Update class documentation and port info. Drop empty .inl file. 2011-07-26 16:23 Sandro Santilli * [r3451] Have NodedSegmentString take ownership of CoordinateSequence 2011-07-26 15:09 Sandro Santilli * [r3450] Use geomgraph::Label by value (less extra-heap), cleanups and port sync. 2011-07-21 09:54 Sandro Santilli * [r3449] Make geomgraph::Label non virtual, implement assignment operator, drop old logs, sync port info. 2011-07-21 09:54 Sandro Santilli * [r3448] Add assignment operator to TopologyLocation, drop old logs, sync port info 2011-07-20 15:40 Sandro Santilli * [r3444] Port JTS robustness fix for ConvexHull (ticket #457) 2011-07-20 14:32 Sandro Santilli * [r3443] Allow XML tests not to specify a precision model, defaulting to floating This allows running some JTS tests w/out touching them 2011-07-20 14:19 Sandro Santilli * [r3442] Add unit test for bug #337. 2011-07-20 14:04 Sandro Santilli * [r3441] Reset CXXFLAGS for building XMLTester, should fix bug #319 (non-c++98 tinyxml) 2011-07-20 11:45 Sandro Santilli * [r3439] Have GEOSOffsetCurve with distance 0 return the input (fixes bug #454) 2011-07-20 09:12 Sandro Santilli * [r3438] Add note about new BufferOp interface 2011-07-20 09:03 Sandro Santilli * [r3437] Add setSingleSided interface to BufferOp-accessible BufferParam setters Patch by Tai Meng 2011-07-20 08:46 Sandro Santilli * [r3436] Add output operator for planargraph::DirectedEdge class 2011-07-20 08:46 Sandro Santilli * [r3435] Drop unused variable 2011-07-20 08:46 Sandro Santilli * [r3434] Add port info 2011-07-20 08:46 Sandro Santilli * [r3433] Port JTS unit test for Polygonizer class (very light..) 2011-07-07 08:33 Sandro Santilli * [r3432] Include platform.h, fixing SOLARIS build. Patch by Tai Meng . 2011-07-06 07:02 Sandro Santilli * [r3429] Nodes always have labels (ported JTS fix to GeometryGraph::insertBoundaryPoint). Update port info. 2011-07-06 07:02 Sandro Santilli * [r3428] Update port info for geomgraph::Node after GEOS fix was ported to JTS 2011-07-05 13:59 Sandro Santilli * [r3427] svn update before running svn2cl 2011-07-05 11:07 Sandro Santilli * [r3425] Update port info for IndexedNestedRingTester class 2011-07-05 10:58 Sandro Santilli * [r3424] Changes of 3.3.1 do not belong in trunk (aimed at 3.4.0) 2011-07-05 10:56 Sandro Santilli * [r3423] Fix #449 (Assertion fails checking validity of polygon) the JTS way. 2011-07-05 10:56 Sandro Santilli * [r3422] Revert "When checking for validity, do not abort if every vertex of an hole is also a vertex of another one. Fixes bug #449, including regress testing." (will redo the JTS way) This reverts commit 7d2306c8dca2f0f1c5722640758578c1d59c7295. 2011-07-05 09:52 Sandro Santilli * [r3417] Initialize MinimumDiamiter::minPtIndex in the constructor, to make static analisys tools happier 2011-07-05 09:52 Sandro Santilli * [r3416] Initialize SweepLineIndex::indexBuilt in ctor 2011-07-05 09:52 Sandro Santilli * [r3415] Initialize LineIntersector::isProperVar in constructor (not really needed but makes less noise under static analisys tools) 2011-07-05 09:52 Sandro Santilli * [r3414] Fix bogus override of PreparedGeometry::intersect by PreparedPoint 2011-07-05 09:52 Sandro Santilli * [r3413] Assert that the variable used as array index is not negative before using it (quadtree) 2011-07-05 09:52 Sandro Santilli * [r3412] Avoid segfalting when an added node has no label in GeometryGraph::insertBoundaryPoint. See https://sourceforge.net/tracker/?func=detail&aid=3353879&group_id=128875&atid=713120 2011-07-05 09:52 Sandro Santilli * [r3411] Avoid segfaulting when Node.setLabelBoundary is called against a node with null label. See https://sourceforge.net/tracker/?func=detail&aid=3353871&group_id=128875&atid=713120 2011-07-05 09:52 Sandro Santilli * [r3410] Assert that the variable used as array index is not negative before using it. 2011-07-05 09:51 Sandro Santilli * [r3409] Do not dereference past-the-end iterator on invalid call 2011-07-01 08:22 Sandro Santilli * [r3398] Add test for ticket #455 (bad result from the deprecated GEOSSingleSidedBuffer). It passes here in trunk, good! 2011-07-01 08:22 Sandro Santilli * [r3397] NEWS item about #449 2011-06-27 11:45 Sandro Santilli * [r3394] Bump versions up assuming a new minor release will come out from trunk. Closes #453 2011-06-09 15:28 Sandro Santilli * [r3392] When checking for validity, do not abort if every vertex of an hole is also a vertex of another one. Fixes bug #449, including regress testing. 2011-06-02 20:18 Sandro Santilli * [r3390] Refine test for #448 2011-06-02 20:13 Sandro Santilli * [r3389] Add test for bug #448 2011-05-30 12:50 Sandro Santilli * [r3387] Update for release 2011-05-30 12:48 Sandro Santilli * [r3386] Set version to 3.3.0 (final) - Set release date to 2011-05-30 2011-05-30 10:49 Mateusz Loskot * [r3385] Applied William\'s patch capi_CMakeLists.txt.patch for OSX framework (Ticket #385) 2011-05-30 10:45 Mateusz Loskot * [r3384] Applied William\'s patch * src_CMakeLists.txt.patch Download added OSX framework (Ticket #385) 2011-05-30 10:30 Mateusz Loskot * [r3383] Applied William\'s patch with missing library versions for OSX framework (Ticket #385) 2011-05-30 09:41 Mateusz Loskot * [r3382] Applied supplementary tests.patch for 85 from William 2011-05-27 14:04 Sandro Santilli * [r3381] The mac framework info.plist.in from r3376 didn't make it into the rc2 tarball. 2011-05-23 10:04 Sandro Santilli * [r3378] updated for 3.3.0rc2 release 2011-05-23 09:58 Sandro Santilli * [r3377] Set version to 3.3.0rc2 2011-05-23 08:52 Mateusz Loskot * [r3376] Added src/info.plist.in file for OS X framework build option in CMake configuration (Ticket #385) 2011-05-22 23:34 Mateusz Loskot * [r3375] Added OS X framework build option to CMake configuration (Ticket #385) 2011-05-20 08:02 Sandro Santilli * [r3374] add missing return from main 2011-05-19 20:39 Frank Warmerdam * [r3373] shellCount checking should not be DEBUG only now that we throw an exception (#398) 2011-05-19 19:32 Frank Warmerdam * [r3372] Updates for Makefile.vc builds and issues when building NDEBUG and no inlining 2011-05-19 14:58 Sandro Santilli * [r3371] Fix build of prepared geoms memleak tester on system w/out geos installed 2011-05-18 19:59 Sandro Santilli * [r3370] Do not assume isfinite is in std:: namespace to fix #444; Have RobustDeterminant use a broad 'using namespace std' to fix #442 in another way. 2011-05-17 20:44 Sandro Santilli * [r3369] Distribute cmake build scripts. Fixes bug #441. 2011-05-17 17:04 Sandro Santilli * [r3368] Remove inlines machinery from MCIndexSnapRounder. Possibly fixes ticket #222. 2011-05-17 16:50 Sandro Santilli * [r3367] Remove disabled code and old logs. No functional change. 2011-05-16 14:17 Mateusz Loskot * [r3366] Fixed buggy self-assignment in SineStarFactory::setNumArms 2011-05-16 11:46 Sandro Santilli * [r3365] Quality ::finite and ::isfinite symbols, when available, into the std:: namespace. Fixes bug #442. 2011-05-13 16:22 Mateusz Loskot * [r3364] GEOS DLL exports are pretty much messed up. The same DLL declspec is used by both C++ and C DLLs. So, GEOS C DLL cannot import and link properly against GEOS C++ interface as the declspec(dllexport) is specified for the GEOS C++ DLL where declspec(dllimport) is expected. This commit fixes the issue (temporarily) by linking GEOS C DLL against GEOS C++ static library. 2011-05-13 16:17 Mateusz Loskot * [r3363] Added missing DLL decspec for Angle class 2011-05-13 15:53 Mateusz Loskot * [r3362] Removed std::isfinite as possibly non-existing on some platforms - rather fix platform.h if needed. 2011-05-12 10:11 Sandro Santilli * [r3361] Add note about #357 fix 2011-05-12 09:56 Sandro Santilli * [r3360] Have RobustDeterminant throw an IllegalArgument if passed any infinite or nan value. Fixes bug #357. Includes regress test. 2011-05-12 07:39 Sandro Santilli * [r3359] Add note about the memory usage reduction in prepared geoms (#342) 2011-05-12 07:21 Sandro Santilli * [r3358] Reserve vector space, use ::size_type for vector indices. 2011-05-12 07:18 Sandro Santilli * [r3357] Don't let MCIndexSegmentSetMutualIntersector grow in memory on every new ::process call. Fixes bug #342. 2011-05-12 07:14 Sandro Santilli * [r3356] Port info for MonotoneChainBuilder 2011-05-12 06:20 Sandro Santilli * [r3355] Fix a memory leak in PreparedLineStringIntersects::isAnyPointInRing 2011-05-12 06:16 Sandro Santilli * [r3354] Drop commented out code 2011-05-12 06:13 Sandro Santilli * [r3353] Port info for PreparedLineStringIntersects, and avoid polluting the global namespace 2011-05-12 06:10 Sandro Santilli * [r3352] Reduce heap allocations in AbstractPreparedPolygonContains 2011-05-11 17:59 Sandro Santilli * [r3351] Port info for FastSegmentSetIntersectionFinder 2011-05-11 17:59 Sandro Santilli * [r3350] Port info for MCIndexSegmentSetMutualIntersector 2011-05-11 17:25 Sandro Santilli * [r3349] Import test for bug #342. It is not automated as it's not general (requires bash) 2011-05-11 10:00 Sandro Santilli * [r3348] Producing a bzip2 tarball is easier than described 2011-05-11 09:54 Sandro Santilli * [r3346] Updated for 3.0.0rc1 release 2011-05-11 09:48 Sandro Santilli * [r3345] Add Geometry.offsetCurve to PHP binding 2011-05-11 09:47 Sandro Santilli * [r3344] Add single-sided buffering support in PHP binding 2011-05-11 09:15 Sandro Santilli * [r3343] Set version to 3.0.0rc1 2011-05-10 18:10 Sandro Santilli * [r3342] Have GEOSOffsetCurve return LINESTRING EMPTY for collapsing lines (right offset on right-turning curve can do that). Regress test one such case, taken from http://trac.osgeo.org/postgis/ticket/413. 2011-05-10 11:11 Sandro Santilli * [r3341] Add test for 357 (doesn't succeed at failing) 2011-05-10 09:51 Sandro Santilli * [r3340] Revert "Use long double to compute edge distance." (r3334). Simple double in HCoordinate made #350 pass anyway. 2011-05-10 09:51 Sandro Santilli * [r3339] Drop STORE_INTERMEDIATE_COMPUTATION_VALUES macro and protected non-unrolled computation, that is all paranoia aimed at making floats stored to match java IEEE. Since we get no failures in testsuite (our and postgis') I think it makes sense to have the code as close as possible to the JTS one. 2011-05-10 09:50 Sandro Santilli * [r3338] Update port info 2011-05-10 09:50 Sandro Santilli * [r3337] Expect the same results given by JTS 2011-05-10 09:50 Sandro Santilli * [r3336] Bring hcoordinate back to double precision (from long double) 2011-05-09 11:57 Sandro Santilli * [r3335] Automate test for bug350, change the expected result to match the one obtained by GEOS. It is not _exactly_ the same output obtained with JTS but close enough. Unfortunately both GEOS and JTS use an exact match for comparison so we won't be able to share this test. 2011-05-09 11:57 Sandro Santilli * [r3334] Use long double to compute edge distance. Makes noding more robust, fixes bug #350. 2011-05-06 18:51 Sandro Santilli * [r3333] Turn EdgeIntersection into a concrete, fully-inlined, C++ class. 2011-05-06 18:51 Sandro Santilli * [r3332] Describe MonotoneChain 2011-05-06 18:51 Sandro Santilli * [r3331] Make output operators for Edge, EdgeIntersection and EdgeIntersectionList closer to JTS, for easier comparison 2011-05-06 18:51 Sandro Santilli * [r3330] Output operator for EdgeIntersection and EdgeIntersectionList 2011-05-06 18:51 Sandro Santilli * [r3329] Drop book keeping of segment intersectors, as we're transferring their ownership to caller anyway 2011-05-06 08:57 Sandro Santilli * [r3328] Re-add also the original data in test for bug350, so nothing gets lost. 2011-05-06 08:57 Sandro Santilli * [r3327] Use logical (not bitwise) AND, use dynamic_cast to map JTS's instanceof operator 2011-05-06 08:57 Sandro Santilli * [r3326] Modify test for bug350 so to use pre-snapped geometries. Shows that the problem is not in snapping code, but after that (ie: JTS succeeds at fist shot on this new input) 2011-05-04 17:45 Sandro Santilli * [r3325] Fix regression accidentally introduced by commit r3322 (Sean's). Add automated test for it (was found trough PostGIS regression test) 2011-05-04 16:30 Sandro Santilli * [r3324] Drop useless and unavailable include 2011-05-03 02:30 Sean Gillies * [r3323] Damn these tabs 2011-05-03 02:27 Sean Gillies * [r3322] Add missing prepared geometry predicates to C API (#436) 2011-04-28 16:39 Sandro Santilli * [r3321] Improve performance of RectangleIntersects (of one order of magnitude). 2011-04-28 16:38 Sandro Santilli * [r3320] More concise output from performance tester 2011-04-28 15:09 Sandro Santilli * [r3319] Hush uncontrolled debugging prints 2011-04-28 15:08 Sandro Santilli * [r3318] Plug leak on exception in RelateComputer (exposed by running doc/example) 2011-04-28 15:08 Sandro Santilli * [r3317] Do not leak on exception during relational geometry predicates 2011-04-28 14:16 Sandro Santilli * [r3316] Port RectangleIntersects performance test from JTS-1.12 2011-04-28 14:16 Sandro Santilli * [r3315] Do not leak memory during rectangle intersects predicate 2011-04-28 14:16 Sandro Santilli * [r3314] Drop unneeded include 2011-04-28 10:04 Sandro Santilli * [r3313] Port geos::geom::util::SineStarFactory from JTS-1.12, useful for profile-test RectangleIntersects. 2011-04-28 10:04 Sandro Santilli * [r3312] Trim old embedded history log (from CVS times) 2011-04-27 16:42 Sandro Santilli * [r3311] Improve speed of Geometry.getArea, unit-test it. 2011-04-27 15:52 Sandro Santilli * [r3310] Match full class names, not partial. Allow specifying a package name. 2011-04-27 15:47 Sandro Santilli * [r3309] Sync linemerge package to JTS-1.12 (nothing changed) 2011-04-27 15:33 Sandro Santilli * [r3308] Utility script to help with editing all files of a class 2011-04-27 15:18 Sandro Santilli * [r3307] Sync Angle class to JTS-1.12, port unit testing for it. 2011-04-27 14:13 Sandro Santilli * [r3306] Add test for singlesided buffer (areal). Fix premature exit from OffsetCurveSetBuilder. 2011-04-27 13:38 Sandro Santilli * [r3305] Drop one argument from GEOSOffsetCurve. Tell right/left from width/distance sign (<0 for right side) 2011-04-27 13:06 Sandro Santilli * [r3304] Put OffsetCurveTest in its own file (old singleside test + a couple more tests) 2011-04-27 13:06 Sandro Santilli * [r3303] Add GEOSBufferParams type and GEOSBufferWithParams function to have an extensible buffer operation. Allows areal single sided buffer. 2011-04-27 11:13 Sandro Santilli * [r3302] Add GEOSOffsetCurve C-API interface deprecating GEOSSingleSidedBuffer 2011-04-27 09:42 Sandro Santilli * [r3301] Refactored offset curve generation (from JTS-1.12) 2011-04-27 09:42 Sandro Santilli * [r3300] Sync BufferParameters class to JTS r378 (isSingleSided property) 2011-04-27 09:42 Sandro Santilli * [r3299] Sync BufferOp class to JTS r378. Do not port the unused isSingleSided property. 2011-04-23 10:30 Sandro Santilli * [r3298] Add note about GEOSCascadedUnion deprecation 2011-04-23 10:28 Sandro Santilli * [r3297] Mark GEOSUnionCascaded as deprecated, GEOSUnaryUnion does the same thing w/out refusin to deal with lines, points, collections 2011-04-23 10:03 Sandro Santilli * [r3296] Generalize CascadedPolygonUnion into a CascadedUnion. Use the generalized class for unary union of lines, fixing bug #392. Automate testing of it, tweak expected results from other tests (output components reordered). 2011-04-22 22:26 Sandro Santilli * [r3295] Use equals() to compare expected/obtained results of "Union" operation. This matches JTS and prevents being too strict about equality. 2011-04-22 18:46 Sandro Santilli * [r3294] Put GeometryListHolder in its own header file. 2011-04-22 13:51 Sandro Santilli * [r3293] Use stringstream to format strings rather than printf-like statements. Simplifies things a lot. 2011-04-22 13:04 Sandro Santilli * [r3292] Sync PrecisionModel to JTS-1.12, add unit testing, fix getMaximumPrecisionDigit to behave as documented (JTS doesn't). 2011-04-20 17:13 Sandro Santilli * [r3291] Sync OffsetCurveSetBuilder::isErodedCompletely implementation to JTS, fixing bug #434 2011-04-20 15:55 Sandro Santilli * [r3290] Move per-ticket testcases under their own directory 2011-04-20 15:42 Sandro Santilli * [r3289] Set JTS port version to 1.12 2011-04-19 07:57 Sandro Santilli * [r3288] Add test for IsCCW against the two almost-collapsed rings resulting by GEOS or JTS during execution of the union described in ticket #398. This is done after confirmation of same results in JTS (1 bit makes the difference between CCW and CW orientation). 2011-04-18 21:45 Sandro Santilli * [r3287] Add the actual ->distance() call to the test for bug #367 2011-04-18 21:28 Sandro Santilli * [r3286] Throw a TopologyException, rather than aborting, when finding more than a shell in MinimalEdgeRing list. Fixes bug #398. Enables automated test for it. Note that JTS fails the test now, triggering the failed assertion. 2011-04-18 21:28 Sandro Santilli * [r3285] Expect a result with/out the collapsed ring in the test for bug 398. Funny enough, this makes JTS react by failing the assertion I was tracking... 2011-04-18 21:01 Sandro Santilli * [r3284] Avoid more heap allocations in PolygonBuilder 2011-04-18 15:08 Sandro Santilli * [r3283] Reduce heap allocations in PolygonBuilder, rewrite some private interfaces to deal with refs rather than pointers 2011-04-18 15:08 Sandro Santilli * [r3282] Use PlanarGraph::linkResultDirectedEdges rather than rewriting it inline 2011-04-18 15:08 Sandro Santilli * [r3281] Turn PlanarGraph::linkResultDirectedEdges into a templated method 2011-04-13 11:52 Sandro Santilli * [r3280] Add test for bug #435 2011-04-13 11:32 Sandro Santilli * [r3279] Fix path to CAPI includes for PHP binding 2011-04-13 10:44 Sandro Santilli * [r3278] Drop coordinate dimension cache after read-write filtering. Fixes ticket #435. 2011-04-13 08:26 Sandro Santilli * [r3277] Drop author.sh, add a rule to create authors.git instead 2011-04-13 07:37 Sandro Santilli * [r3276] Add script to be used with git-svn --authors-prog 2011-03-26 14:02 Sandro Santilli * [r3275] fix missing size_t with gcc 4.6 2011-03-26 14:02 Sandro Santilli * [r3274] fixed missing NULL with gcc 4.6 2011-03-26 14:02 Sandro Santilli * [r3273] fix uninitialized const caused by missing constructor 2011-03-24 17:54 Mateusz Loskot * [r3272] Added source_group properties to support source browsers in various IDEs 2011-03-16 22:29 Sandro Santilli * [r3271] Use GEOSVALID flag correctly, thanks Mat for spotting this. 2011-03-11 14:40 Sandro Santilli * [r3270] Add XML test for bug #350 2011-03-11 14:24 Sandro Santilli * [r3269] Add XML test for bug398 (not automatically run, as it fails) 2011-03-11 14:24 Sandro Santilli * [r3268] Tell more about XML loading failures 2011-03-08 09:04 Sandro Santilli * [r3267] Add test for invalid boundary node rule value 2011-03-04 17:05 Sandro Santilli * [r3266] PHP: add relateBoundaryNodeRule method to GEOSGeometry object 2011-03-04 16:38 Sandro Santilli * [r3265] Add note aboute GEOSRelateBoundaryNodeRule 2011-03-04 16:31 Sandro Santilli * [r3264] GEOSRelateBoundaryNodeRule test, ticket #399 [RT-SIGTA] 2011-03-04 16:30 Sandro Santilli * [r3263] GEOSRelateBoundaryNodeRule, ticket #399 [RT-SIGTA] 2011-03-04 16:30 Sandro Santilli * [r3262] Indenting.. 2011-03-02 13:45 Sandro Santilli * [r3261] Tweak unit test to expect distance 0 between an empty an anything else. Report the change in NEWS file. 2011-03-02 13:45 Sandro Santilli * [r3260] Add support for "distance" op in XMLTester, and import JTS TestDistance.xml 2011-03-02 13:45 Sandro Santilli * [r3259] Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs (JTS-1.11) 2011-03-02 13:13 Sandro Santilli * [r3258] Sync IsValidOp and related XML testcase to JTS-1.12 2011-03-02 12:46 Sandro Santilli * [r3257] Added check for illegal state in offsetPoint method 2011-03-02 09:24 Sandro Santilli * [r3256] Fix debug build 2011-03-01 17:56 Mateusz Loskot * [r3255] Fix DLL build using Visual C++: *) added missing exports; *) do not use static data members in inline methods - linker fails to find definition ; *) Clean up C4251 warning. 2011-03-01 17:53 Mateusz Loskot * [r3254] Check geometry against nullptr 2011-03-01 17:50 Mateusz Loskot * [r3253] Redefined ENDIAN_BIG and ENDIAN_LITTLE as enumerators instead of static non-const members - Visual C++ linker has mysterious problems with exporting them from DLL. 2011-02-28 14:36 Sandro Santilli * [r3252] Fix BufferOp::bufferFixedPrecision to use snap-rounding noder. Fixes bug #356. 2011-02-28 12:19 Sandro Santilli * [r3251] Cleanup debugging output. Previous version didn't really print the _noded_ output at all. 2011-02-28 11:43 Sandro Santilli * [r3250] Expose and test covers/coveredBy to PHP binding 2011-02-28 11:32 Sandro Santilli * [r3249] GEOSCovers and GEOSCoveredBy (ticket #396) by Alessandro Furieri 2011-02-25 16:05 Sandro Santilli * [r3248] be explicit about quadrant segments 2011-02-25 10:22 Sandro Santilli * [r3247] Add test for ticket #356 (not run, as it fails) 2011-02-23 17:13 Sandro Santilli * [r3246] JTS-1.12 sync 2011-02-23 16:46 Sandro Santilli * [r3245] Update port info 2011-02-23 16:21 Sandro Santilli * [r3244] Update port info 2011-02-23 16:21 Sandro Santilli * [r3243] Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly 2011-02-23 15:45 Sandro Santilli * [r3242] Don't bother adding ring if it is "flat" and will disappear in the output (from TS r261) 2011-02-23 15:45 Sandro Santilli * [r3241] Sync LinearRing to JTS-1.12: empty LinearRing are closed by definition now 2011-02-23 14:37 Sandro Santilli * [r3240] Update port info for MCIndexPointSnapper 2011-02-23 14:37 Sandro Santilli * [r3239] Update port info for SimpleSnapRounder 2011-02-23 14:37 Sandro Santilli * [r3238] Update port info for MCIndexSnapRounder (and remove testing-only check) 2011-02-23 14:37 Sandro Santilli * [r3237] Sync HotPixel to JTS-1.12 (doxygen + privatization of a method..) 2011-02-23 11:05 Sandro Santilli * [r3236] Run test for bug366 (succeeds) 2011-02-23 10:25 Sandro Santilli * [r3235] Port JTS unit tests for SegmentPointComparator 2011-02-23 10:25 Sandro Santilli * [r3234] Take SegmentPointComparator out of implelmentation file, to allow for unit-testing. 2011-02-23 09:37 Sandro Santilli * [r3233] Fix NodedSegmentString to handle zero-length line segments correctly (via safeOctant) 2011-02-22 21:22 Sandro Santilli * [r3232] Export Puntal, Lineal and Polygonal symbols 2011-02-22 17:53 Sandro Santilli * [r3231] Fix linemerge test (wrong initial copy) 2011-02-21 17:30 Sandro Santilli * [r3230] Add LineSequencer unit test, fix memory leaks in the class. 2011-02-21 17:30 Sandro Santilli * [r3229] Add templated geometry adder to LineSequencer class 2011-02-21 16:14 Sandro Santilli * [r3228] Sync linemerge namespace to JTS-1.12 fixing LineMerger to skip lines with only a single unique coordinate; reduce some heap allocations; add unit testing for Linemerger 2011-02-21 16:14 Sandro Santilli * [r3227] Sync linemerge::LineSequencer to JTS-1.12 2011-02-21 14:02 Sandro Santilli * [r3226] Add note about SnapIfNeededOverlayOp change 2011-02-21 14:02 Sandro Santilli * [r3225] Update port info 2011-02-21 12:03 Sandro Santilli * [r3224] Fix SnapIfNeededOverlayOp to throw the originating exception, which contains meaningful coordinates, and update port info. 2011-02-18 18:25 Mateusz Loskot * [r3223] Updated CMake configuration to use libgeos.lib for static library and geos.lib for import library. Define GEOS_DLL_EXPORT for GEOS DLL target. 2011-02-15 17:35 Mateusz Loskot * [r3222] gstrdup may throw since r3088 thus should no longer be declared as C function 2011-02-15 15:24 Sandro Santilli * [r3221] Allow passing NULL for "reason" and "location" arguments of GEOSisValidDetail [RT-SIGTA] 2011-02-15 15:15 Sandro Santilli * [r3220] Adapt PHP binding to the new GEOSisValidDetail interface 2011-02-15 15:15 Sandro Santilli * [r3219] Add a 'flags' parameter to GEOSisValidDetail. 2011-02-15 15:14 Sandro Santilli * [r3218] Make sure php binding are built _before_ the corresponding test is run 2011-02-13 22:31 Sandro Santilli * [r3217] Guard againts empty vectors before decrementing .end() 2011-02-13 22:30 Sandro Santilli * [r3216] Add an .empty() interface to CoordinateList 2011-02-13 21:29 Mateusz Loskot * [r3215] Added new ./configure option: --enable-glibcxx-debug which to enable libstdc++ debug mode (see Ticket #395). Added AC_MSG_CHECKING and AC_MSG_RESULT to existing options. 2011-02-13 20:14 Mateusz Loskot * [r3214] CRLF to LF 2011-02-13 20:14 Mateusz Loskot * [r3213] Added test case submitted with Ticket #367. No segmentation fault in distance() method observed under Visual C++ 10.0 2011-02-13 20:03 Sandro Santilli * [r3212] Always use BinaryOp for overlay operations accessible from Geometry 2011-02-13 19:54 Mateusz Loskot * [r3211] Explicitly disabled Visual C++ warning C4250 ('class1' : inherits 'class2::member' via dominance) - it is still unclear if caused by Visual C++ bug https://connect.microsoft.com/VisualStudio/feedback/details/101259/ - safe to disable anyway. 2011-02-13 19:51 Mateusz Loskot * [r3210] Return unset std::auto_otr from GeometryFactory, otherwise error condition causes no return 2011-02-13 19:50 Mateusz Loskot * [r3209] Declare PointGeometryUnion type as non-copyable 2011-02-13 19:25 Mateusz Loskot * [r3208] Renamed template parameters to more readable CamelCase and self-descriptive form. Declare Extracter type as non-copyable. Do not use names starting with underscore - they are reserved for C++ implementations. 2011-02-13 19:22 Mateusz Loskot * [r3207] Fixed missing or ambiguous declarations of TopologyException (Ticket #394) 2011-02-12 08:54 Sandro Santilli * [r3206] Have Geometry::Union use BinaryOp rather than SnapIfNeededOverlayOp. Improves robustness (fixes bug #360, test for which is enabled with this commit) 2011-02-11 15:59 Sandro Santilli * [r3205] Add description 2011-02-11 10:51 Sandro Santilli * [r3204] XML version of test for bug #360 2011-02-11 10:28 Sandro Santilli * [r3203] Optimize container->container copy, on Mat's suggestion 2011-02-11 09:58 Sandro Santilli * [r3202] PHP support or UnaryUnion 2011-02-11 09:58 Sandro Santilli * [r3201] GEOSUnaryUnion C-API interface (and test) 2011-02-10 21:05 Sandro Santilli * [r3200] Add support for UnaryUnion testing in XML format, import the JTS xml test for it 2011-02-10 21:05 Sandro Santilli * [r3199] Add test exposing the std::copy bug of two commits ago 2011-02-10 21:05 Sandro Santilli * [r3198] Expose unary union trought Geometry.Union() 2011-02-10 21:05 Sandro Santilli * [r3197] Can't just std::copy over an empty container. Need a back_inserter ! 2011-02-10 15:51 Sandro Santilli * [r3196] Add unit test for UnaryUnionOp (and fix interface bug) 2011-02-10 14:14 Sandro Santilli * [r3195] UnaryUnionOp port from JTS-1.12 2011-02-10 14:10 Sandro Santilli * [r3194] Oops, didn't want to commit this one. 2011-02-10 14:05 Sandro Santilli * [r3193] Fix dynamic cast 2011-02-10 13:48 Sandro Santilli * [r3192] Add a template interface to CascadedPolygonUnion to relax requirements on used container 2011-02-10 11:09 Sandro Santilli * [r3191] Introduce a templated version of GeometryFactory::buildGeometry, and test it. 2011-02-10 11:09 Sandro Santilli * [r3190] Include required GeometryFactory header (it's used) 2011-02-07 17:52 Sandro Santilli * [r3189] Port GeometryExtracter from JTS-1.12 2011-02-07 17:00 Sandro Santilli * [r3188] Fix casts 2011-02-07 15:41 Sandro Santilli * [r3187] PointGeometryUnion port 2011-02-07 15:39 Sandro Santilli * [r3186] Include definition of base class 2011-02-07 15:39 Sandro Santilli * [r3185] Turn Puntal, Lineal and Polygonal into Geometry derivates. This commit introduces virtual inheritance and 3 diamonds. 2011-02-04 12:27 Sandro Santilli * [r3184] dynamic_cast Polygon to Geometry before converting to void pointer. This is safer, altought the whole void pointer use should be dropped for real safety. 2011-02-04 12:26 Sandro Santilli * [r3183] Avoid useless reinterpret_cast 2011-02-04 10:12 Sandro Santilli * [r3182] Even more static casts drops 2011-02-04 08:50 Sandro Santilli * [r3181] Drop more static casts 2011-02-03 21:50 Sandro Santilli * [r3180] Don't downcast with static_cast 2011-02-03 19:59 Sandro Santilli * [r3179] reduce static casts 2011-02-03 19:58 Sandro Santilli * [r3178] provide standard strict weak ordering operator for Coordinate 2011-02-03 19:58 Sandro Santilli * [r3177] A step toward better const-correctness in GeometryCombiner interface 2011-02-03 19:58 Sandro Santilli * [r3176] Document ownerhips of GeometryCombiner inputs 2011-02-03 08:15 Sandro Santilli * [r3175] Oops.. fix the newly added interface to create MultiPoint from a vector of coordinates 2011-02-02 19:24 Sandro Santilli * [r3174] Check PointLocator sync with JTS-1.12 2011-02-02 19:23 Sandro Santilli * [r3173] Add interface to create MultiPoint from Coordinate vector 2011-02-02 17:57 Sandro Santilli * [r3172] Check GeometryCombiner against JTS-1.12 2011-02-02 17:41 Sandro Santilli * [r3171] Add Puntal, Lineal and Polygonal "interfaces" 2011-01-27 18:01 Sandro Santilli * [r3170] Add release date of 3.2.0 (more than an year ago..) 2011-01-27 10:16 Sandro Santilli * [r3169] Don't use is_null on unexistant array elements [#393] 2011-01-25 23:20 Mateusz Loskot * [r3168] Added tests/bigtest programs to CMake configuration 2011-01-25 23:08 Mateusz Loskot * [r3167] Updated CMake configuration to call xmltester from runtime output directory. 2010-12-26 21:20 Sandro Santilli * [r3166] remove warning in testcase 2010-12-26 20:32 Sandro Santilli * [r3165] Declare SharedPathsOp class as noncopyable. Hopefully fixes VC2008 warning. [RT-SIGTA] 2010-12-24 14:27 Sandro Santilli * [r3164] Record port info for InteriorPointLine 2010-12-22 16:28 Sandro Santilli * [r3163] Fix computation of shared path direction when path starts or ends on the first-last point of a closed line. Fixes ticket #391. Includes automated testing. 2010-12-22 09:42 Sandro Santilli * [r3162] Expose GEOSRelateMatch to PHP api. 2010-12-21 08:55 Sandro Santilli * [r3161] Add GEOSRelatePatternMatch C-API interface [RT-SIGTA] 2010-12-20 11:34 Sandro Santilli * [r3160] MinGW32 fixes by Sandro Furieri 2010-12-20 11:16 Mateusz Loskot * [r3159] Updated svn:ignore properties. 2010-12-06 15:00 Sandro Santilli * [r3158] typo 2010-12-03 17:26 Sandro Santilli * [r3157] Add test for src-vertex snapping allowance 2010-12-03 14:02 Sandro Santilli * [r3156] Update copyright 2010-12-03 13:57 Sandro Santilli * [r3155] Add method to insert coordinats into a CoordinateList w/out allowing duplicates (fixes issue #387) 2010-12-03 10:58 Sandro Santilli * [r3154] Another test for snapping (empty sequence vs. non-empty snaps) 2010-12-03 10:52 Sandro Santilli * [r3153] update dox 2010-12-03 10:49 Sandro Santilli * [r3152] Take the allowSnappingToSourceVertices support in 2010-12-03 08:36 Sandro Santilli * [r3151] Add test for GEOSSharedPaths C-API interface 2010-12-02 18:06 Sandro Santilli * [r3150] Another test, and a leak plug (in the test) 2010-12-02 16:49 Sandro Santilli * [r3149] Add GEOSSnap item 2010-12-02 16:48 Sandro Santilli * [r3148] Expose GEOSSnap to PHP interface 2010-12-02 16:44 Sandro Santilli * [r3147] Add test for C-API GEOSSnap interface 2010-12-02 15:07 Sandro Santilli * [r3146] OOps.. this one build 2010-12-02 14:52 Sandro Santilli * [r3145] Expose snapping to the C-API 2010-12-02 14:29 Sandro Santilli * [r3144] Allow testing snapping something different from a single polygon.. 2010-12-02 14:16 Sandro Santilli * [r3143] tab to 8 spaces 2010-12-02 10:32 Sandro Santilli * [r3142] Bring LineStringSnapper forward to r309 (JTS-1.11+): avoid snapping final point of closed rings. 2010-12-02 09:38 Sandro Santilli * [r3141] update copyright date 2010-12-02 09:36 Sandro Santilli * [r3140] Take GeometrySnapper forward to r309 (JTS-1.11+): add self-snapping 2010-11-30 08:31 Sandro Santilli * [r3139] Hope this is the last one... (RT credit tweaks) 2010-11-29 13:45 Sandro Santilli * [r3138] Full credit line [RT-SIGTA] 2010-11-29 11:08 Sandro Santilli * [r3137] SharedPaths in NEWS [RT-SIGTA] 2010-11-29 10:51 Sandro Santilli * [r3136] Merge branch 'rt' 2010-11-29 09:43 Sandro Santilli * [r3135] Write RT credit and NEWS itam 2010-11-29 09:34 Sandro Santilli * [r3134] drop unused include 2010-11-29 09:34 Sandro Santilli * [r3133] Test equal lines 2010-11-29 09:34 Sandro Santilli * [r3132] Have SharedPathsOp throw an exception on illegal (non-lineal) arg 2010-11-29 09:34 Sandro Santilli * [r3131] Add tests for multiline-multiline both single dir and mixed dirs 2010-11-29 09:34 Sandro Santilli * [r3130] Add two tests of mixed direction shared paths 2010-11-29 09:34 Sandro Santilli * [r3129] Document that the direction of the returned paths is the one these paths have on the first geometry given 2010-11-29 09:33 Sandro Santilli * [r3128] Initial tests for SharedPathsOp 2010-11-29 09:33 Sandro Santilli * [r3127] Paths are always LINESTRING types 2010-11-29 09:33 Sandro Santilli * [r3126] forgot aclocal.m4 2010-11-29 09:33 Sandro Santilli * [r3125] Complete implementation of SharedPathsOp 2010-11-29 09:33 Sandro Santilli * [r3124] more ignores 2010-11-29 09:33 Sandro Santilli * [r3123] Build sharedpaths lib/namespace 2010-11-29 09:32 Sandro Santilli * [r3122] Add support for 'maintainer mode' 2010-11-29 09:32 Sandro Santilli * [r3121] ignores 2010-11-29 09:32 Sandro Santilli * [r3120] Stub SharedPathsOp 2010-11-29 09:32 Sandro Santilli * [r3119] stub tet for SameDirection predicate 2010-11-24 09:00 Sandro Santilli * [r3118] typo 2010-10-25 15:12 Sandro Santilli * [r3117] Don't try to configure missing files (fixes bug #382) 2010-10-15 15:54 Mateusz Loskot * [r3116] Unified CMAKE_*_OUTPUT_DIRECTOR locations to simplify tests running and finding all binaries. 2010-10-15 15:20 Mateusz Loskot * [r3115] Visual C++ warnings cleanup 2010-10-15 15:19 Mateusz Loskot * [r3114] Missing DLL storage-class attributes for GEOSOrientationIndex 2010-10-15 14:55 Mateusz Loskot * [r3113] Cast toupper() result to char 2010-10-15 13:42 Mateusz Loskot * [r3112] Deprecate Visual Studio projects in trunk/build (#381). Long live the CMake. 2010-10-10 21:36 Mateusz Loskot * [r3111] Cleaned compiler warnings 2010-10-10 21:36 Mateusz Loskot * [r3110] Cleaned compiler warnings 2010-10-10 21:28 Mateusz Loskot * [r3109] Disable inline.obj if GEOS_INLINE defined while building with Visual C++ 2010-10-10 21:15 Mateusz Loskot * [r3108] Disable argument dependant lookup (Koenig) for min/max functions to make sure GEOS compiles in the presence of the min and max macros. 2010-10-10 21:07 Mateusz Loskot * [r3107] Added NOMINMAX define for Visual C++ 2010-10-10 20:50 Mateusz Loskot * [r3106] Do not set CMAKE_BUILD_TYPE for Visual Studio IDE generators - CMAKE_BUILD_TYPE is dedicated to single-configuration generators like Make or NMAKE. 2010-10-10 11:32 Mateusz Loskot * [r3105] Updated GEOS_HEADERS location. Thanks to Andrea Peri for reporting. 2010-08-27 18:23 Sandro Santilli * [r3104] Add test for 358 in the loop (now fixed). 2010-08-27 15:58 Sandro Santilli * [r3103] Drop duplicated testcase 2010-08-27 15:55 Sandro Santilli * [r3102] Check validity of CommonBitsOp return, as JTS does. Check output validity for all tests, do not run the now-throwing tests also known to be bogus in JTS. 2010-08-27 15:43 Sandro Santilli * [r3101] Found bug375.xml (==robustness-invalid-output.xml) to be the same of JTS's failure/TestOverlay.xml, so dropped the previous 2 and copied over the latter. Won't run that test for now, so to get in sync with JTS as next step. 2010-08-27 15:27 Sandro Santilli * [r3100] Add proper arg1 and arg2 attributes (for JTS support) 2010-08-27 14:13 Sandro Santilli * [r3099] Add code to check validity of CommonBits removal policy op (known as EnhancedPreicionOp in JTS). The check can be turned on at compile time. Currently defaults to off to avoid breaking a previously-almost-working test (robustness-invalid-output.xml). It'll need some discussion before going on with this as to whether we can accept to return invalid geometries or not.. 2010-08-27 13:53 Sandro Santilli * [r3098] Split tests that trigger invalid outputs from the rest. Test the sane ones with --test-invalid-output and the other ones with less strictness. Add (but dont run) tests for bugs 375 and 358 (to review for correct expected otuput) 2010-08-27 13:00 Sandro Santilli * [r3097] Have --test-valid-output influence test results 2010-08-27 10:22 Sandro Santilli * [r3096] Add note about configuring for php support 2010-08-27 09:04 Sandro Santilli * [r3095] const-correctness 2010-08-27 06:17 Sandro Santilli * [r3094] Have --test-valid-output test actual result, not the expected one (more useful) 2010-08-26 23:11 Sandro Santilli * [r3093] Fix name of the test to match ticket number 2010-08-23 16:37 Stephen Wong * [r3092] Fixed a filtering distance problem in bufferLineSingleSided. (#372) 2010-08-23 15:10 Sandro Santilli * [r3091] Add more debugging calls (for bug #358) 2010-08-23 13:38 Sandro Santilli * [r3090] Snapping heuristic was never really dropping common bits. Now it does. This is just to have code match documentation, and still passes 'make check' for GEOS. Wasn't tried against postgis, would be useful to do. 2010-08-17 18:57 Sean Gillies * [r3089] Use fully qualified std::runtime_error (#371) and fix indentation 2010-08-17 18:33 Sean Gillies * [r3088] Throw runtime_error if allocation fails in gstrdup_s 2010-07-26 22:21 Stephen Wong * [r3087] Fixed a bufferLineSingleSided crash and fixed OGC validation on rare cases. (#364) 2010-07-15 15:54 Sandro Santilli * [r3086] Updated 2010-07-15 09:15 Sandro Santilli * [r3085] Add item about the new PHP5 binding 2010-07-15 09:13 Sandro Santilli * [r3084] PHP: Drop debug lines from serialization code, add test for serialization 2010-07-15 09:07 Sandro Santilli * [r3083] Fix logic bug in phpunit check 2010-07-14 08:38 Sandro Santilli * [r3082] Serialization/deserialization support for GEOSGeometry type 2010-07-13 11:03 Sandro Santilli * [r3081] Cleanup PHP-specific dependency handling and reporting 2010-07-08 20:54 Sandro Santilli * [r3080] Object passed for ownership transfer in the constructor shouldn't be deleted when construction fails. Fixes bug #361 2010-07-01 21:49 Sandro Santilli * [r3079] Note the bugfix in news file 2010-07-01 21:44 Sandro Santilli * [r3078] Fix PolygonizeGraph::deleteDangles so it doesn't return duplicated LineStrings, as per JTS design. Fixes the Polygonizer Bug reported in list. This commit also takes the chance to reduce some heap allocations. 2010-07-01 20:49 Sandro Santilli * [r3077] Minor optimizations / strictnesses 2010-07-01 20:03 Sandro Santilli * [r3076] Drop useless heap-allocation in Polygonize op 2010-06-24 14:40 Frank Warmerdam * [r3075] fix memory leaks 2010-06-24 14:10 Sandro Santilli * [r3074] PHP: GEOSWKTWriter::getOutputDimension and test 2010-06-24 13:58 Frank Warmerdam * [r3073] added GEOSWKTWriter_getOutputDimension and test (#354) 2010-06-24 09:42 Sandro Santilli * [r3072] Update 2010-06-24 09:41 Sandro Santilli * [r3071] WKBReader: construct and readHEX; improve WKTReader test to include 'Z' label 2010-06-24 09:20 Sandro Santilli * [r3070] WKBWriter::{set,get}IncludeSRID (and test) 2010-06-24 09:07 Sandro Santilli * [r3069] WKBWriter::{get,set}ByteOrder, improve tests for writeHEX 2010-06-24 09:01 Sandro Santilli * [r3068] Make WKBWriter::setByteOrder check for argument and throw IllegalArgumentException when appropriate. Make sure C-API wrapper catches those. 2010-06-24 08:28 Sandro Santilli * [r3067] PHP: WKBWriter: ctor, getOutputDimension, setOutputDimension, writeHEX and tests 2010-06-24 08:27 Sandro Santilli * [r3066] Properly catch exceptions from WKTWriter::setOutputDimension and WKBWriter::setOutputDimension 2010-06-24 08:27 Sandro Santilli * [r3065] Make WKTWriter::setOutputDimensions check parameter validity (must be 2 or 3) to be consistent with WKBWriter already doing so in constructor; make WKBWriter::setOutputDimensions perform the check as well (like the constructor); Drop virtual methods from WKTWriter class, which wasn't meant to be a virtual class (no virtual dtor anyway) 2010-06-23 09:48 Sandro Santilli * [r3064] Log ABI change 2010-06-23 09:47 Sandro Santilli * [r3063] Const-correct Geometry::isWithinDistance. Thanks to Yabo, see ticket #349 2010-06-23 09:31 Sandro Santilli * [r3062] There's no point for GEOSisValidDetail to take output parameter as const pointer 2010-06-23 09:23 Sandro Santilli * [r3061] Fix for 4.4.3 builds, patch by Yabo (see ticket #351) 2010-06-21 14:31 Sandro Santilli * [r3060] Switch back to unchecked getGeometryN, getPointN and getInteriorRingN, check them at the PHP level, for performance sake in C-land. 2010-06-21 10:30 Sandro Santilli * [r3059] Rename getGeometryN to geometryN, for interface consistency 2010-06-21 10:21 Sandro Santilli * [r3058] area, length, distance, hausdorffDistance; fix leaks in pointN, startPoint and endPoint 2010-06-21 02:02 Sandro Santilli * [r3057] startPoint, endPoint 2010-06-21 01:58 Sandro Santilli * [r3056] pointN 2010-06-21 01:57 Sandro Santilli * [r3055] LineString::getPointN is part of the API, check before segfaulting.. 2010-06-21 01:49 Sandro Santilli * [r3054] coordinateDimension() 2010-06-21 01:46 Sandro Santilli * [r3053] dimension() [ spatial ] 2010-06-21 01:43 Sandro Santilli * [r3052] numCoordinates 2010-06-21 01:39 Sandro Santilli * [r3051] exteriorRing 2010-06-21 01:36 Sandro Santilli * [r3050] numPoints, getX, getY, interiorRingN 2010-06-21 01:34 Sandro Santilli * [r3049] Make getInteriorRingN checked (API) 2010-06-21 01:05 Sandro Santilli * [r3048] numInteriorRings 2010-06-21 00:56 Sandro Santilli * [r3047] Test null-return from unexistent offset 2010-06-21 00:53 Sandro Santilli * [r3046] Geometry::getGeometryN is an API function, so make it safe/checked 2010-06-21 00:44 Sandro Santilli * [r3045] getGeometryN 2010-06-21 00:06 Sandro Santilli * [r3044] Test numGeometries 2010-06-21 00:01 Sandro Santilli * [r3043] getSRID, setSRID 2010-06-20 23:53 Sandro Santilli * [r3042] typeName, typeId 2010-06-20 23:40 Sandro Santilli * [r3041] Geometry type constants 2010-06-20 23:35 Sandro Santilli * [r3040] isSimple, isRing, hasZ, isClosed 2010-06-20 22:59 Sandro Santilli * [r3039] checkValidity (isValid in disguise) 2010-06-20 21:10 Sandro Santilli * [r3038] isEmpty 2010-06-20 21:00 Sandro Santilli * [r3037] Relational operators + equalsExact 2010-06-20 19:05 Sandro Santilli * [r3036] Simplify (also topology-preserving), ExtractUniquePoints 2010-06-20 17:00 Sandro Santilli * [r3035] GEOSLineMerge 2010-06-20 09:13 Sandro Santilli * [r3034] Make GEOSPolygonize a free function rather than a method on GEOSGeometry. This is to allow extending it to accept differnet kind of args, like arrays of GEOSGeometry for example.. 2010-06-20 09:02 Sandro Santilli * [r3033] Add serialize/unserialize TODO item 2010-06-20 08:50 Sandro Santilli * [r3032] Geometry.__toString for easier debuggin 2010-06-20 08:32 Sandro Santilli * [r3031] Polygonize (testing need further review for a possible bug in core lib) 2010-06-19 21:38 Sandro Santilli * [r3030] Use the "T" char for IM9 pattern sometime (for fun and proof) 2010-06-19 21:36 Sandro Santilli * [r3029] relate, relatePattern 2010-06-19 18:27 Sandro Santilli * [r3028] Geometry->{pointOnSurface,centroid} 2010-06-19 18:13 Sandro Santilli * [r3027] More Geometry methods: envelope, intersection, convexHull, difference, symDifference, boundary, union (including cascaded) 2010-06-19 17:14 Sandro Santilli * [r3026] Export buffer costants and method 2010-06-19 13:27 Sandro Santilli * [r3025] Test typed empty geoms too for IO 2010-06-19 13:17 Sandro Santilli * [r3024] Add second optional argument to Geometry->project and Geometry->interpolate to request normalization 2010-06-19 13:08 Sandro Santilli * [r3023] Document GEOSInterpolate 2010-06-19 13:06 Sandro Santilli * [r3022] Add GEOSGeometry->interpolate() 2010-06-19 12:42 Sandro Santilli * [r3021] Handle exceptions in GEOSInterpolate 2010-06-19 12:30 Sandro Santilli * [r3020] Better automake integration of unit test 2010-06-19 12:28 Sandro Santilli * [r3019] Handle illegal argument to LinearLocation::getCoordinate 2010-06-19 12:20 Sandro Santilli * [r3018] document GEOSProject 2010-06-19 11:34 Sandro Santilli * [r3017] Complete implementation of WKTWriter interfaces, add phpunit-based testing, add .project interface to Geometry 2010-06-19 11:32 Sandro Santilli * [r3016] Check for PHP and PHPUNIT (for testing php bindings) 2010-06-19 11:25 Sandro Santilli * [r3015] Handle exceptions from LenghtIndexedLine::project 2010-06-19 11:23 Sandro Santilli * [r3014] The thrown error shall make sense... 2010-06-19 11:16 Sandro Santilli * [r3013] Throw an exception on first non-linestring component, rather than segfaulting la ter... (might be better to refuse non-lineal even earlier, but this way we *migh * be supporting collections with only linestrings) 2010-06-19 11:14 Sandro Santilli * [r3012] Dox cleanup 2010-06-18 16:15 Sandro Santilli * [r3011] WKTWriter::setTrim 2010-06-18 16:12 Sandro Santilli * [r3010] Ubuntu 8.10 version of gcc needs -std=gnu99 to digest Zend headers :( 2010-06-18 15:09 Sandro Santilli * [r3009] Add 'doxygen' rule (and 'apidoc' alias) to top-level Makefile.am 2010-06-18 14:43 Sandro Santilli * [r3008] tip for test 2010-06-18 14:20 Sandro Santilli * [r3007] Initial go at PHP5 bindings. Can only read and write WKT so far. 2010-06-18 10:29 Sandro Santilli * [r3006] Do not set user FLAGS, se project flags instead. For the whole story, see: http://www.gnu.org/software/hello/manual/automake/Flag-Variables-Ordering.html 2010-06-18 09:57 Sandro Santilli * [r3005] Fix automake override 2010-06-18 09:52 Sandro Santilli * [r3004] Add -Woverride option to automake invocation, to catch Makefile.am errors (there's one) 2010-06-16 10:39 Sandro Santilli * [r3003] Drop carriage returns 2010-06-16 09:45 Sandro Santilli * [r3002] OOps, tabs instead of spaces confuse automake 2010-06-16 09:31 Sandro Santilli * [r3001] Always distribute swig bindings, closes bug #352 2010-06-16 09:25 Sandro Santilli * [r3000] Fix swig macro so it doesn't think version 2.0.0 is < 1.3.37 2010-06-01 15:15 Frank Warmerdam * [r2999] make WKTReader keywords case insensitive 2010-05-31 16:25 Frank Warmerdam * [r2998] Attempt to make geometry dimension perform more smoothly. Modified CoordinateArraySequence to default to unknown dimension (0), which is determined at the point getDimension() is called by examination of the first coordinate Z (ISNAN test). The WKTWriter has also been altered to write 0.0 instead of nan, and to avoid writing "Z" for EMPTY geometries.(#348) 2010-05-31 02:57 Frank Warmerdam * [r2997] Addition of getCoordinateDimension() on GEOSGeom (#311) Addition of setOutputDimension, setOld3D on WKTWriter (#292) 2010-05-28 20:44 Frank Warmerdam * [r2996] added missing test that should have been in r2995 2010-05-28 20:38 Frank Warmerdam * [r2995] Implement getCoordinateDimension() for geometries (#331) WKTWriter now has setOutputDimension() method, and writes 3D geometries (#292) WKBWriter has fixes for writing 2D geometries from 3D geometry (#346) Minimal unit tests for the above. 2010-05-28 20:32 Frank Warmerdam * [r2994] add support for reading SF1.2 Z/M/ZM geometries (#347) 2010-05-19 05:22 Frank Warmerdam * [r2993] added setPrecision, setTrim support on WKTWriter and provided tests (#341) 2010-05-18 20:28 Frank Warmerdam * [r2992] expose several new accessor functions on geometries (#345) 2010-05-18 20:07 Frank Warmerdam * [r2991] disamiguate create args (#345) 2010-05-18 19:18 Frank Warmerdam * [r2990] preserve dimension as part of CoordinateArraySequence and while reading WKT (#345) 2010-05-15 12:47 Sandro Santilli * [r2989] Minor tweaks 2010-05-15 12:31 Sandro Santilli * [r2988] Move OffsetCurveVertexList.h to headers dir, add a .reset() method to reduce memory allocations, use the new interface. 2010-05-15 12:30 Sandro Santilli * [r2987] Add clear() method to CoordinateArraySequence, inline empty() 2010-05-04 21:29 Sandro Santilli * [r2986] Add 'ldconfig' step, seems to be a recurring issue with builders... 2010-05-02 09:35 Sandro Santilli * [r2985] Add a note about 2d nature of extractUniquePoints 2010-04-21 16:17 Mateusz Loskot * [r2982] * Updated nmake.opt with NMake version from Visual Studio 2010 release. 2010-04-17 22:16 Sandro Santilli * [r2977] Also set version for the systems not using autoconf, and update paths in HOWTO_RELEASE file 2010-04-17 22:14 Sandro Santilli * [r2976] As we're still maintaining 3.2 branch, and since new CAPI interface were added, bump CAPI lib interface version up. We'll be 1.7.0 there from now on. 2010-04-17 15:34 Sandro Santilli * [r2974] Have initGEOS(..) return a singleton, as used to be up to 3.0.0 2010-04-07 13:24 Mateusz Loskot * [r2968] Added ENABLE_INLINE=YES|NO option to nmake.opt for Visual C++ builds using NMake. The ENABLE_INLINE=YES does not link for me - to be fixed 2010-04-07 13:22 Mateusz Loskot * [r2967] Updated src/dirlist.mk (Ticket 337) 2010-03-29 17:44 Mateusz Loskot * [r2965] Added NMake 10.x version to be recognized by nmake.opt 2010-03-29 12:17 Mateusz Loskot * [r2961] Qualify size_t with std namespace in headers. 2010-03-29 12:13 Mateusz Loskot * [r2960] Updated svn:ignore property 2010-03-29 11:30 Mateusz Loskot * [r2959] Updated projects for Visual Studio 2008 and 2010 2010-03-29 11:29 Mateusz Loskot * [r2958] Added pragma to disable Visual C++ warning C4251 - safe to ignore (http://support.microsoft.com/kb/813810/) 2010-03-29 11:21 Mateusz Loskot * [r2957] No need to load the whole std namespace to use std::vector only. 2010-03-26 12:35 Mateusz Loskot * [r2955] platform.h.vc: disable min/max macros substitution 2010-03-26 12:06 Mateusz Loskot * [r2954] Added GEOS_DLL with Microsoft-specific __declspec attribute missing from CascadedPolygonUnion class (ported from branches/3.2) 2010-03-26 12:01 Mateusz Loskot * [r2952] geom\GeoemtryList.cpp: missing implementation of GeometryList::size() function (ported from branches/3.2) 2010-03-26 11:58 Mateusz Loskot * [r2950] src\Makefile.vc: added missing geom\GeometryList.cpp (ported from branches/3.2) 2010-03-26 11:55 Mateusz Loskot * [r2948] nmake.opt: Added missing GEOS_DLL_EXPORT to CPPFLAGS (ported from branches/3.2) 2010-03-19 15:13 Sandro Santilli * [r2946] Improve formatting for GEOSisValidReason_r (#329) 2010-03-18 18:39 Sandro Santilli * [r2944] Forw-port a better fix for #333 (false positive valid geoms) 2010-03-16 13:13 Sandro Santilli * [r2941] Fix ST_IsValidDetail (broke by last commit) 2010-03-16 12:32 Sandro Santilli * [r2940] Now that IsValidOp doesn't cache the 'checked' status it is better to trigger a single check rather than two (also fix leaks) 2010-03-14 10:13 Sandro Santilli * [r2939] Install Machine.h 2010-03-13 22:07 Sandro Santilli * [r2938] Fix GEOSOrientationIndex implementation and testcase. Closes ticket #335. 2010-03-12 07:54 Sandro Santilli * [r2937] Expose GEOSOrientationIndex to C-API 2010-03-10 09:34 Sandro Santilli * [r2936] Sync TestValid xml from JTS, review IsValidOp to be in sync with current JTS trunk. 2010-03-07 11:39 Sandro Santilli * [r2935] Apply slightly modified patch by mwtoews (#344) 2010-03-06 01:49 Mateusz Loskot * [r2934] Added cmake/cmake_uninstall.cmake.in script and configured make uninstall target for CMake configuration (#317) 2010-03-03 07:21 Sandro Santilli * [r2933] Improve documentation for GEOSPOlygonize_full 2010-03-02 21:04 Sandro Santilli * [r2932] Fix false positive return from IsValidOp (#333) 2010-02-28 19:01 Sandro Santilli * [r2931] Minor tweak 2010-02-28 18:55 Sandro Santilli * [r2930] Provide non-rehentrant version of empty geometries constructors 2010-02-28 17:02 Sandro Santilli * [r2929] extractUniquePoints comes in non-reentrant version too 2010-02-25 07:50 Sandro Santilli * [r2928] Update with GEOSPolygonize_full item 2010-02-23 20:00 Sandro Santilli * [r2927] GEOSPolygonize_full [RT-SIGTA] 2010-02-22 22:21 Sandro Santilli * [r2926] LineStringAdder heap-allocation removal 2010-02-22 22:17 Sandro Santilli * [r2925] Drop heap allocation of invalidRingLines vector 2010-02-22 22:06 Sandro Santilli * [r2924] More heap allocations bite the dust... 2010-02-22 21:51 Sandro Santilli * [r2923] Drop HEAP allocation for dangles vector too, and document all these API changes 2010-02-22 21:41 Sandro Santilli * [r2922] Avoid heap allocation of a vector for cut edges, bits of additional documentation 2010-02-22 21:29 Sandro Santilli * [r2921] Try to document current behaviour (very bad behaviour indeed...) 2010-02-21 17:11 Mateusz Loskot * [r2920] Another patch from Gavin Heavyside to enable GEOS as a dependency of a project with CMake 2010-02-21 17:05 Sandro Santilli * [r2919] Allow GEOSGetGeometryN calls against single geometries 2010-02-21 16:27 Sandro Santilli * [r2918] Expose the non-reentrant version too (I know, I was against, but it's too much work on the postgis side for that right now) 2010-02-21 15:03 Sandro Santilli * [r2917] GEOSGeom_extractUniquePoints [RT-SIGTA] 2010-02-21 14:50 Mateusz Loskot * [r2916] Patch from Gavin Heavyside that enables CMake to build GEOS as a dependency of user-defined project 2010-02-17 14:04 Sandro Santilli * [r2915] Throw an IllegalArgumentException when setOrdinate is called with unknown ordinate index 2010-02-14 14:01 Sandro Santilli * [r2913] Add GEOSPolygonizer_getCutEdges NEWS item where it belongs 2010-02-12 17:35 Mateusz Loskot * [r2912] Fixed but in CMake configuration which installed geos_c.h in incorrect location (#330) 2010-02-11 18:15 Sandro Santilli * [r2911] Update 2010-02-11 08:33 Sandro Santilli * [r2910] Complete set of typed-empty constructors and tests for them [RT-SIGTA] 2010-02-11 08:18 Sandro Santilli * [r2909] Go for consistency with reentrant interfaces [RT-SIGTA] 2010-02-11 00:10 Sandro Santilli * [r2908] GEOSContext_setNoticeHandler, GEOSContext_setErrorHandler, GEOSGeom_createEmptyPolygon_r (and test) 2010-02-09 17:52 Sandro Santilli * [r2907] Fix to match new layout 2010-02-06 04:07 Mateusz Loskot * [r2906] Ported list of SAVE_XMLTESTS to CMake configuration of XMLTester (#317) All tests pass on Ubuntu 9.10 2010-02-05 21:24 Mateusz Loskot * [r2905] Fixed CMake version comparison to disable platform.h (#317) 2010-02-05 14:54 Sandro Santilli * [r2904] Document ownership of created types 2010-02-05 14:39 Sandro Santilli * [r2903] New CAPI interface: GEOSisValidDetail ( tell state, reason & location apart ) 2010-02-04 23:35 Mateusz Loskot * [r2902] Fixed missing substitution of @libdir@ in geos-config generated by CMake #(317) 2010-02-02 18:14 Mateusz Loskot * [r2901] Fixed problem with use of new command with file() macro for older CMake versions (#327) 2010-01-31 03:06 Mateusz Loskot * [r2900] Added XMLTester to CTest configuration - work in progress (#317) 2010-01-31 03:05 Mateusz Loskot * [r2899] Added GEOS_ENABLE_FLOATSTORE option to CMake to control GCC flag -ffloat-store (#317) 2010-01-31 01:26 Mateusz Loskot * [r2898] Added platform.h.disabled to svn:ignore property 2010-01-31 01:22 Mateusz Loskot * [r2897] A minor fix to order of enable_testing() and add_subdirectories(tests) - it is important to include the former macro first so the tests are caught in 2010-01-30 23:45 Mateusz Loskot * [r2896] Updated configuration of GEOS_ENABLE_TESTS option for CMake (#317) 2010-01-30 22:48 Mateusz Loskot * [r2895] Configured 'make check' target for CMake as alias to 'make test' to mimic GNU Autotools manner of running tests (#317) 2010-01-29 20:30 Paul Ramsey * [r2894] Extend support of Apple ISNAN case to newer? compilers 2010-01-29 17:42 Mateusz Loskot * [r2893] Solved problem with repeated definition of getMachineByteOrder (#317). Added check if alternative platform.h is already present in the include/geos directory and deactivate it renaming to platform.h.disable, before generating CMake-specific platform.h. Tested on Windows with Visual C++ but with -DGEOS_ENABLE_INLINE=OFF otherwise DLL linking fails with many redefined symbols - to be checked. 2010-01-29 01:43 Mateusz Loskot * [r2892] Configured 'make test' target for CMake build (#317). Now only geos_unit is executed 2010-01-28 18:42 Mateusz Loskot * [r2891] Missing includes of platform.h and 2010-01-27 22:25 Mateusz Loskot * [r2890] Tidy up messy code in tests/unit/linearref 2010-01-27 22:09 Mateusz Loskot * [r2889] Fixed CMake configuration for the problem about unavailable C99 features if -std=c99 is not specified for GCC 4.3.3 on Ubuntu 9.04. This is inconsistent behaviour with GCC 4.4.1 (https://bugs.launchpad.net/ubuntu/+source/gcc-4.3/+bug/512741). 2010-01-23 02:43 Mateusz Loskot * [r2888] GEOS C++ static library was missing from installation targets (#317) 2010-01-23 02:36 Mateusz Loskot * [r2887] CMake configuration update (#317): * Configured shared library target for C++ API. * Added library version information and TODO comment about SOVERSION. 2010-01-23 01:38 Mateusz Loskot * [r2886] Small fix to latest commit (#317) 2010-01-23 01:32 Mateusz Loskot * [r2885] Disabled GEOS_ENABLE_ASSERT option for Visual Studio builds - not supported, no sense (#317) 2010-01-23 00:10 Mateusz Loskot * [r2884] Tweaked detection isfinite and isnan declared as functions in C++ (#317) 2010-01-22 23:52 Mateusz Loskot * [r2883] Added CheckPrototypeExists.cmake module - imported from KDE/kdelibs tree 2010-01-22 23:51 Mateusz Loskot * [r2882] Added trunk/cmake directory for custom CMake modules 2010-01-21 01:23 Mateusz Loskot * [r2881] CMake configuration update (#317): * Set default CMAKE_BUILD_TYPE to Debug * Added GEOS_ENABLE_ASSERT and GEOS_ENABLE_INLINE options. * Renamed option ENABLE_MSVC_MP to GEOS_MSVC_ENABLE_MP. 2010-01-20 23:42 Mateusz Loskot * [r2880] Fix for addd extra test for STL classes in std namespace to CMake configuration (#317) 2010-01-20 23:37 Mateusz Loskot * [r2879] Addd extra test for STL classes in std namespace to CMake configuration (#317) 2010-01-20 23:21 Mateusz Loskot * [r2878] Updated svn:keyword with Id for CMake files 2010-01-20 22:17 Mateusz Loskot * [r2877] Fixed bug with not setting proper permissions to geos-config while installing with CMake build configuration (#318). 2010-01-19 00:19 Mateusz Loskot * [r2876] #317: compiler flags can not be handled using CMake list type, reverted last change that sneaked in with Visual Studio related commit. 2010-01-19 00:03 Mateusz Loskot * [r2875] #317: Added CXX flags specific to Visual C++ compiler. Added ENABLE_MSVC_MP option to allow setting Visual C++ /MP flag that enables multi-process compilation. 2010-01-18 21:15 Mateusz Loskot * [r2874] Load elements of std namespace to scope of geos_ts_c.cpp file, so C99 functions are loaded even if hidden in std (non-standard extension in GCC). 2010-01-18 18:15 Mateusz Loskot * [r2873] Added missing headers platform.h and where ISNAN or FINITE macros are expanded 2010-01-18 18:14 Mateusz Loskot * [r2872] Updated svn:ignore patterns 2010-01-18 18:13 Mateusz Loskot * [r2871] Cleaned redundant include for cmath and math.h from platform.h.cmake (#317) 2010-01-18 18:12 Mateusz Loskot * [r2870] Updated svn:ignore patterns 2010-01-18 01:25 Mateusz Loskot * [r2869] Updated Windows elements of build configuration for CMake system (#317): * Added missing symbol GEOS_DLL_EXPORT to request generation of import library for GEOS C API DLL * All targets configured for CMake build system have been successfully built and tested using CMake. * CMake-based install target successfully tested on Windows 7 ** Default prefix for 32-bit build is "c:\Program Files (x86)\geos\" where bin, lib and include directories are created. 2010-01-18 00:59 Mateusz Loskot * [r2868] * Successfully tested CMake configuration with Visual Studio 2010 (#317). * Disable argument dependant lookup (Koenig) for min/max functions to make sure GEOS compiles in the presence of the min/max macros. * Some platform headers define min() and max() macros which cause some common C++ constructs to fail to compile. 2010-01-17 23:54 Mateusz Loskot * [r2867] Configured 'make install' for tools to install geos-config program on Unix platforms (#317). Fixed missing prefix nad exec_prefix variables substitution during geos-config generation. 2010-01-17 23:40 Mateusz Loskot * [r2866] Configured 'make install' target for GEOS C shared library and headers (#317). Install platform.h and version.h from build directory where they are installed, not from source tree. Added GEOS C API header location to include directories. 2010-01-17 23:06 Mateusz Loskot * [r2865] Configured 'make install' target for GEOS C++ static library archive and headers (#317) 2010-01-17 03:21 Mateusz Loskot * [r2864] Removed build/bjam directory with old and no longer maintained build configuration based on Boost.Build 2010-01-17 03:12 Mateusz Loskot * [r2863] Added simplewkttester and xmltester tests to CMake configuration (#317) 2010-01-17 03:00 Mateusz Loskot * [r2862] Updated CMake configuration (#317): CMake generates config headers in build tree. Added generation of geos-config script. Refined include directories settings. Added unit tests package to the configuration. Status: GEOS core + GEOS C library + unit tests build and run successfully. 2010-01-17 02:07 Mateusz Loskot * [r2861] Now CMake can generates geos_c.h (#317). Removed include/geos/version.h.cmake as no longer needed - CMake can subsitute variables of Autoconf-style @VAR@ very well. 2010-01-17 00:46 Mateusz Loskot * [r2860] Refined detection of isnan and isfinite features (#317) 2010-01-16 22:20 Mateusz Loskot * [r2859] Added checks of C/C++ headers and library features like 64-bit integer type (#317) 2010-01-16 21:45 Mateusz Loskot * [r2858] Added generation of build-specific platform.h file from platform.h.cmake (#317) 2010-01-16 21:25 Mateusz Loskot * [r2857] Set version numbers and generate version.h for CMake build (#317) 2010-01-16 20:41 Mateusz Loskot * [r2856] Added platform.h.cmake file used by build configuration for CMake build system (#317) 2010-01-16 20:40 Mateusz Loskot * [r2855] Removed definition of INT64_CONST_IS_I64 - it is not checked or used anywhere 2010-01-16 20:12 Mateusz Loskot * [r2854] Unified detection of math features to define FINITE and ISNAN macros 2010-01-16 18:14 Mateusz Loskot * [r2853] Moved getMachineByteOrder from include/geos/platform.h to include/geos/util/Machine.h. This function is universal for non-Windows and Windows platforms 2010-01-16 17:03 Mateusz Loskot * [r2852] Added first straps of configuration for CMake build system (#317) 2010-01-16 02:40 Mateusz Loskot * [r2851] Removed tests/geostest/.deps directory 2010-01-16 02:14 Mateusz Loskot * [r2850] Moved src/examples out of src directory (#315) 2010-01-14 00:01 Mateusz Loskot * [r2849] Updated Visual Studio 2010 projects in build/msvc10 with new location of include and src (#315) 2010-01-13 21:35 Mateusz Loskot * [r2848] * Successfully compiled with Visual C++ 8.0 after restructuring source tree. ** NodedSegmentString class; ** Use explicit self-describing two-step casts to indicate what's really happening - C-cast is evil and hides serious interface issues. ** Added missing and qualify size_t with std namespace. 2010-01-13 21:25 Mateusz Loskot * [r2847] Updated Visual Studio 2005 projects in build/msvc80 with new location of include and src (#315) 2010-01-13 18:07 Mateusz Loskot * [r2846] Updated Visual Studio 2008 projects in build/msvc90 with new location of include and src (#315) 2010-01-13 17:54 Mateusz Loskot * [r2845] Updated makefile.vc, nmake.opt, src/makefile.vc files with new location of include and src (#315) 2010-01-13 03:03 Mateusz Loskot * [r2844] Updated remaining directories doc, macros, tools, tests, swig, capi with new src and include location (#315). Fixed previous updates. Successfull build on Linux. 2010-01-13 02:08 Mateusz Loskot * [r2843] Updated Makefile.am files in capi subtree after moved to new location (#315) 2010-01-13 02:01 Mateusz Loskot * [r2842] Updated Makefile.am files in src subtree after moved to new location (#315) 2010-01-13 00:48 Mateusz Loskot * [r2841] Updated new source structure in configure.in and root Makefile.am - part 2 (#315) 2010-01-13 00:45 Mateusz Loskot * [r2840] Updated new source structure in configure.in and root Makefile.am (#315) 2010-01-13 00:43 Mateusz Loskot * [r2839] Updated Makefile.am files in headers subtree after moved to new location in include (#315) 2010-01-12 23:58 Mateusz Loskot * [r2838] Moved source directory to src (#315) 2010-01-12 23:55 Mateusz Loskot * [r2837] Moved source/headers directory to include (#315) 2009-12-23 12:37 Mateusz Loskot * [r2835] Removed GNU specific printf formatter 2009-12-22 11:38 Mateusz Loskot * [r2834] Fixed compiler warning about extra tokens at end of #endif directive in export.h 2009-12-15 17:29 Mateusz Loskot * [r2833] Fixed missing CoordinateSequenceFactory.cpp from makefile.vc (Ticket #313) 2009-12-15 14:44 Mateusz Loskot * [r2832] * Assert precision model scale must never be negative * Replaced use of operator== against float-point number with operator<= * Typos 2009-12-15 14:38 Mateusz Loskot * [r2831] In WKTWriter, initialise formatting buffer and avoid unnecessary calls to string constructor. 2009-12-14 19:18 Paul Ramsey * [r2828] Update version numbers on trunk to 3.3 series 2009-12-14 19:06 Sandro Santilli * [r2826] Updated 2009-12-14 18:58 Sandro Santilli * [r2825] Don't mention 'troubles' in documentation (some like it not) 2009-12-14 15:23 Mateusz Loskot * [r2824] * Fixed bug in WKTWriter that was dropping geometry tag in string representation of geometry * Improved message carried by TopologyException 2009-12-11 13:17 Sandro Santilli * [r2823] Updated 2009-12-11 13:10 Sandro Santilli * [r2822] Fix memory leak in BasicPreparedGeometry::isAnyTargetComponentInTest (issue #308) and drop Coordinate copies from it. 2009-12-09 11:10 Mateusz Loskot * [r2821] Fixed generation of platform.h as pre-build step of GEOS lib project for Visual C++ 2009-12-09 11:05 Mateusz Loskot * [r2820] * Fixed generation of platform.h as pre-build step of GEOS lib project for Visual C++ 2005 and 2008 * Added missing headers. 2009-12-08 22:47 Paul Ramsey * [r2817] Prepare for RC4 release. 2009-12-08 21:40 Mateusz Loskot * [r2816] Updated svn:ignore patterns 2009-12-08 21:39 Mateusz Loskot * [r2815] build/msvc10: fixed list of EXTRA_DIST files 2009-12-08 17:51 Sandro Santilli * [r2814] This shouldn't be in the repository ! 2009-12-08 17:50 Sandro Santilli * [r2813] Remove deprecated/unused files 2009-12-08 17:42 Sandro Santilli * [r2812] Drop useless (and leaking) heap allocation exposed by the new prepared linestring intersection test 2009-12-08 17:42 Sandro Santilli * [r2811] Add missing destructor of PreparedLineString (closes ticket #305) 2009-12-08 17:39 Sandro Santilli * [r2810] Add test with Prepared linestrings, for the sake of testing the leak reported in ticket #305 2009-12-06 01:05 Mateusz Loskot * [r2809] Updated source code files with svn:keywords property. 2009-12-06 01:01 Mateusz Loskot * [r2808] Updated svn:ignore patterns 2009-12-06 00:56 Mateusz Loskot * [r2807] Updated svn:ignore patterns 2009-12-06 00:51 Mateusz Loskot * [r2806] Updated configure.in after moved non-unit tests programs out of tests/unit (Tickets #240). 2009-12-06 00:47 Mateusz Loskot * [r2805] Moved non-unit tests programs out of tests/unit: geostest -> tests/geostest, threadtest -> tests/thread, badthreadtest -> tests/thread (Ticket #240). 2009-12-05 21:59 Mateusz Loskot * [r2804] Added build/msvc80/geos_xmltester to configure.in 2009-12-05 21:28 Mateusz Loskot * [r2803] Added geos_xmltester.vcproj project to build/msvc80 2009-12-05 21:20 Mateusz Loskot * [r2802] Added GEOS_DLL_EXPORT to preprocessor definitions in build/msvc80/geos_c_dll/geos_c_dll.vcproj 2009-12-05 20:30 Mateusz Loskot * [r2801] small cleanup 2009-12-05 20:23 Mateusz Loskot * [r2800] Updated solution for Visual C++ 8.0 (Visual Studio 2005) (Ticket #303) 2009-12-05 20:21 Mateusz Loskot * [r2799] Updated information in README about build/msvcXY solutions 2009-12-04 17:38 Mateusz Loskot * [r2798] Updated configure.in with msvc10 2009-12-04 17:05 Mateusz Loskot * [r2797] Added solution and projects for Visual Studio 2010 (note msvc90 denotes 9.0 however msvc10 is 10 not 1.0) 2009-12-04 15:58 Mateusz Loskot * [r2796] Missing svn keywords 2009-12-04 15:30 Mateusz Loskot * [r2795] Small fixes to TUT. 2009-12-04 15:20 Mateusz Loskot * [r2794] Replaced long with std::streampos 2009-12-04 15:07 Mateusz Loskot * [r2793] std::back_inserter requires in geom/CoordinateSequence.cpp 2009-12-04 13:57 Mateusz Loskot * [r2792] Updated Visual C++ 9.0 project 2009-12-03 22:51 Mateusz Loskot * [r2791] Yet another try to fix EOL in geos/export.h 2009-12-03 20:29 Mateusz Loskot * [r2790] Removed mysterious extra tokens (blanks) from geos/export.h 2009-12-03 20:16 Mateusz Loskot * [r2789] Removed mysterious extra tokens (blanks) from geos/export.h 2009-12-03 20:01 Mateusz Loskot * [r2788] Updated Visual C++ project geos_unit.vcproj 2009-12-03 19:59 Mateusz Loskot * [r2787] Part 26 of larger changeset - source/headers: * Refine FINITE macro - pseudo-POSIX layer in Visual C++ does not offer long double version of finite() * Tidy up. 2009-12-03 19:57 Mateusz Loskot * [r2786] Part 25 of larger changeset - source/headers/geos/util: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:55 Mateusz Loskot * [r2785] Part 24 of larger changeset - source/headers/geos/simplify: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:52 Mateusz Loskot * [r2784] Part 23 of larger changeset - source/headers/geos/planargraph * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:51 Mateusz Loskot * [r2783] Part 22 of larger changeset - source/headers/geos/planargraph/algorithm: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:50 Mateusz Loskot * [r2782] Part 21 of larger changeset - source/headers/geos/operation/valid: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:48 Mateusz Loskot * [r2781] Part 20 of larger changeset - source/headers/geos/operation/overlay: * Declare noncopyable types as such explicitly (Ticket #304). * Unified EOL and style. * Tidy up. 2009-12-03 19:46 Mateusz Loskot * [r2780] Part 19 of larger changeset - source/headers/geos/operation/overlay: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. * Unified EOL and style. 2009-12-03 19:45 Mateusz Loskot * [r2779] Part 18of larger changeset - source/headers/geos/operation/buffer: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. * Unified EOL and style. 2009-12-03 19:44 Mateusz Loskot * [r2778] Part 17 of larger changeset - source/headers/geos/noding/snapround: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. * Unified EOL and style. 2009-12-03 19:41 Mateusz Loskot * [r2777] Part 16 of larger changeset - source/headers/geos/noding/snapround: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. * Unified EOL and style. 2009-12-03 19:39 Mateusz Loskot * [r2776] Part 15 of larger changeset - source/headers/geos/linearref: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:38 Mateusz Loskot * [r2775] Part 14 of larger changeset - source/headers/geos/io: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:36 Mateusz Loskot * [r2774] Part 13 of larger changeset - source/headers/geos/index/chain: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:36 Mateusz Loskot * [r2773] Part 12 of larger changeset - source/headers/geos/geomgraph: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:30 Mateusz Loskot * [r2772] Part 11 of larger changeset - source/headers/geos/geom/util: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:29 Mateusz Loskot * [r2771] Part 10of larger changeset - source/headers/geos/geom/prep: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:27 Mateusz Loskot * [r2770] Part 9 of larger changeset - source/headers/geos/algorithm: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:24 Mateusz Loskot * [r2769] Part 7 of larger changeset - source/geomgraph: * Fixed incorrect int to string conversion. 2009-12-03 19:23 Mateusz Loskot * [r2768] Part 7 of larger changeset - source/index/intervalrtree: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:22 Mateusz Loskot * [r2767] Refined changeset r2766 - fix for nested classes required by GCC. 2009-12-03 19:14 Mateusz Loskot * [r2766] Part 6 of larger changeset - source/noding: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:11 Mateusz Loskot * [r2765] Part 5 of larger changeset - source/noding/snapround: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:03 Mateusz Loskot * [r2764] Part 4 of larger changeset - source/algorithm: * Declare noncopyable types as such explicitly (Ticket #304). * Added Visual C++ pragmas. * Tidy up. 2009-12-03 19:02 Mateusz Loskot * [r2763] Part 3 of larger changeset - source/operation: * Declare noncopyable types as such explicitly (Ticket #304). * Tidy up. 2009-12-03 19:01 Mateusz Loskot * [r2762] Part 2 of larger changeset - source/simplify: * Declare noncopyable types as such explicitly (Ticket #304). * Cleanup. * Unified EOL to LF. 2009-12-03 18:56 Mateusz Loskot * [r2761] Part 1 of larger changeset - tests/unit: * Declare noncopyable types as such explicitly (Ticket #304). * Cleanup. * Unified EOL to LF. 2009-12-03 14:48 Mateusz Loskot * [r2760] * Added Visual C++ pragmas. * Fixed implicit pointer tests for 0 (save typing is a myth, be explicit is bless). 2009-12-03 13:25 Mateusz Loskot * [r2759] Updated C++ TUT framework. 2009-12-01 16:16 Mateusz Loskot * [r2758] Improved WKBReader::readHEX to read WKB encoded with lower-case hex digits, useful if combined with SQL encode(geometry, 'hex') 2009-12-01 15:39 Mateusz Loskot * [r2757] * More fixes for incompleteness of types required by std::auto_ptr * Replaced utility macros with disappearing ignorance template trick. 2009-12-01 13:05 Mateusz Loskot * [r2756] Tweaked projects for Visual Studio 2008 2009-11-30 17:29 Mateusz Loskot * [r2755] * GEOSFree_r should check context handle even if its not used - nullptr may indicate logic error. 2009-11-30 13:55 Mateusz Loskot * [r2754] * Fixed incomplete types Geometry and TaggedLinesSimplifier in TopologyPreservingSimplifier.h - required by std::auto_ptr * Removed unreachable code. * Removed /Wp64 option from Visual Studio 2008 projects. 2009-11-30 12:25 Mateusz Loskot * [r2753] Missing log. 2009-11-30 10:48 Mateusz Loskot * [r2752] * Added missing tests to Visual Studio 2008 project * Replaced call to isnan() missing in Visual C++ with ISNAN macro 2009-11-29 10:09 Sandro Santilli * [r2749] updated 2009-11-26 21:42 Sandro Santilli * [r2748] Add ISNAN support in platform.h.in 2009-11-26 21:34 Sandro Santilli * [r2747] Remove unreferenced files from the repository 2009-11-26 21:28 Sandro Santilli * [r2746] Remove reference to files not needing to go in the dll 2009-11-26 21:21 Sandro Santilli * [r2745] Put destructor of the CoordinateSequenceFactory in an implementation file, hopefully reducing linker confusion about RTTI (see ticket #299) 2009-11-26 19:49 Paul Ramsey * [r2744] Add magic flags for OS/X Snow Leopard only. (#299) 2009-11-26 19:46 Paul Ramsey * [r2743] Add vc90 xmltester target to Makefile build 2009-11-26 18:29 Frank Warmerdam * [r2742] clarify ownership of returned buffer from wkbwriter 2009-11-26 16:32 Paul Ramsey * [r2741] Fix missing components in tarball (#300) 2009-11-24 18:05 Sandro Santilli * [r2736] updated 2009-11-23 18:17 Sandro Santilli * [r2735] Coordiante->Coordinate 2009-11-23 18:06 Sandro Santilli * [r2734] Avoid reallocations in Union short-circuit 2009-11-20 19:58 Sandro Santilli * [r2733] Don't force heap allocation of vectors for getting nodes of a NodeMap 2009-11-19 21:30 Sandro Santilli * [r2732] Don't heap-allocate std::vector in MCIndexSegmentSetMutualIntersector 2009-11-19 21:06 Sandro Santilli * [r2731] Don't force heap allocation when building edge rings for isValidOp 2009-11-19 20:29 Sandro Santilli * [r2730] Don't force heap allocation of std::vector in PolygonizeGraph when deleting dangles (moved allocation higher, in Polygonizer, so needs a second pass) 2009-11-19 20:20 Sandro Santilli * [r2729] don't heap-allocate vectors in findLabeledEdgeRings 2009-11-19 19:57 Sandro Santilli * [r2728] Move heap-allocation of vector used for 'cut-lines' containment out of PolygonizeGraph (but into Polygonizer) 2009-11-19 19:31 Sandro Santilli * [r2727] Don't force heap-allocation of vectors for finding/labeling edge rings 2009-11-19 19:19 Sandro Santilli * [r2726] Change PolygonizeGraph::getEdgeRings signature so not to force heap allocation of std::vector, update Polygonizer accordingly 2009-11-19 19:06 Sandro Santilli * [r2725] Do not heap-allocate vector of Node when finding intersections 2009-11-19 18:52 Sandro Santilli * [r2724] Don not allocate the container of STRtree node childs on the heap 2009-11-19 16:40 Paul Ramsey * [r2723] Apply patch for --disable-cassert compilation (#291) 2009-11-18 18:57 Paul Ramsey * [r2720] Reverse the upgrade process a bit, bump up revision numbers *after* release so that the repo version is always one higher than the release version. (#287) 2009-11-18 01:28 Mateusz Loskot * [r2717] Silent warning thrown by Visual C++ about mixed class and struct keyword (#269) 2009-11-17 20:29 Sandro Santilli * [r2716] Include capi::GEOSGeomFromWKB test in geos_unit build (should also distribute as side-effect) 2009-11-11 23:05 Sandro Santilli * [r2713] Change ChangeLog generation rule so it doesn't mess with make dist. Reflect in HOW_TO_RELEASE 2009-11-10 23:54 Sandro Santilli * [r2712] Make ChangeLog target non-phony to keep 'distcheck' happy. Reorganize HOW_TO_RELEASE steps. 2009-11-10 22:58 Sandro Santilli * [r2711] Package stuff for release 2009-10-29 21:06 Mateusz Loskot * [r2710] Testing linker problem with DEFAULT_QUADRANT_SEGMENT constant 2009-10-29 20:58 Mateusz Loskot * [r2709] Testing linker problem with DEFAULT_QUADRANT_SEGMENT constant 2009-10-29 20:55 Mateusz Loskot * [r2708] Fixed CRLF to LF in BufferOpTest.cpp 2009-10-29 20:47 Mateusz Loskot * [r2707] Missing include of BufferParameters.h header in BufferOpTest.cpp unit suite 2009-10-29 16:20 Mateusz Loskot * [r2706] Added more test cases for buffer calculation based on A (input) geometries from XMLTester's buffer.xml and TestBufferExternal2.xml tests. 2009-10-29 15:11 Mateusz Loskot * [r2705] Added test case for buffer of multipolygon from XMLTester's buffer.xml, case #25 but with custom quadrant segments 2009-10-29 14:24 Mateusz Loskot * [r2704] Added test case for buffer of POINT(0 0) with distance 1.0 and 32 quadrant segments. 2009-10-29 12:33 Mateusz Loskot * [r2703] * tests/unit/operation/buffer: added unit test case for BufferOp, * tests/unit/Makefile.am: added new test case source to Makefile, * build/msvc90/geos_unit/geos_unit.vcproj: updated Visual C++ project. 2009-10-28 12:09 Mateusz Loskot * [r2702] tests/xmltester/XMLTester.cpp: declare checkBufferSuccess function to take geometries by refernece to const 2009-10-25 18:48 Mateusz Loskot * [r2701] Fixed typo in getCentroid function comment in Geometry.h. 2009-10-23 13:04 Sandro Santilli * [r2700] Have LinearLocation::getSegment return by auto_ptr to encode ownership transfer. Fixes leak reported in #296. 2009-10-23 12:58 Sandro Santilli * [r2699] Fix port info, add standard protection notes 2009-10-23 10:21 Sandro Santilli * [r2698] Add destructor to LinearGeometryBuilder fixing memory leaks there. 2009-10-23 10:13 Sandro Santilli * [r2697] Fix memory access error (#283) 2009-10-23 10:03 Sandro Santilli * [r2696] Fix port info for LinearGeometryBuilder 2009-10-23 09:53 Sandro Santilli * [r2695] Cleanup LinearGeometrybuilder defs and impl to match common code style, add note about suspicious things (not written but noted that the class seems to lack a destructor..) 2009-10-23 09:43 Sandro Santilli * [r2694] Document ownership of return from LocationIndexOfLine::indicesOf, fix mismatch delete/delete[] in core and unit test 2009-10-23 09:34 Sandro Santilli * [r2693] Add virtual dtor to virtual class 2009-10-23 09:33 Sandro Santilli * [r2692] add some parens to hush gcc warning 2009-10-23 09:00 Sandro Santilli * [r2691] Fix static building of C-api demo/tests 2009-10-23 08:34 Sandro Santilli * [r2690] Run the last available-but-no-automatically-run test: test.xml 2009-10-22 18:18 Sandro Santilli * [r2689] Merge buffer_snapround.xml into buffer.xml 2009-10-22 17:13 Sandro Santilli * [r2688] A quick check reveals that the tests in buffer.xml are not really duplicated elsewhere so we run that test too now as part of make check 2009-10-22 17:07 Sandro Santilli * [r2687] Give buffer.xml cases a somewhat more helpful description, fix 4 expected results after eye-checking. This is still not automatically run case it might contain duplicated tests from elsewhere (to be checked). 2009-10-22 16:30 Sandro Santilli * [r2686] Don't segfault on EOF inside tag 2009-10-20 16:59 Sandro Santilli * [r2685] Commit MingW bug workaround provided by sanak in ticket #293 2009-10-19 13:38 Mateusz Loskot * [r2684] tests/xmltester/tests/buffer_snapround.xml: not well-formed XML, fixed missing attribute. 2009-10-17 14:47 Sandro Santilli * [r2683] updated 2009-10-17 14:43 Sandro Santilli * [r2682] updated 2009-10-17 14:35 Sandro Santilli * [r2681] Half the calls to the virtual CoordinateSequence::getAt when computing line distances 2009-10-17 13:40 Sandro Santilli * [r2680] Drop pointless asserts. We'd abort anyway if vector is null. For the out-of-range case the GNU c++ lib helps debugging with an environment variable 2009-10-17 13:04 Sandro Santilli * [r2679] Add note of private/static nature of implemented methods 2009-10-17 12:28 Sandro Santilli * [r2678] Expose a usable toVector method for CoordinateSequence (ie: no memory management issues). Use it from Polygon::getCoordinates. 2009-10-17 12:02 Sandro Santilli * [r2677] Don't allocate too much space for polygon points vector. Fixes bug #294. 2009-10-16 15:27 Mateusz Loskot * [r2676] xmltester/tests: missing double quotes around XML attribute value in fme.xml. 2009-10-14 20:42 Sandro Santilli * [r2675] regenerate ChangeLog 2009-10-14 15:32 Mateusz Loskot * [r2674] * Optional use of GEOS_DEBUG_MSVC_USE_VLD in XMLTester.cpp * Added xmltester/makefile.vc as port of testrunner.sh for Windows to be able to run all tests in batch: ** nmake /f makefile.vc XMLTESTER=C:\path\to\xmltester.exe 2009-10-14 12:05 Mateusz Loskot * [r2673] Added msvc90/geos_xmltester to solution for Visual Studio 2008. 2009-10-14 12:03 Mateusz Loskot * [r2672] Enable use of Stalkwalker only if building with Visual C++ and GEOS_TEST_USE_STACKWALKER is defined. 2009-10-13 16:25 Mateusz Loskot * [r2671] build/msvc90: added missing sources of linearref package. Builds with Visual C++ 9.0 (using both project and makefiles). 2009-10-13 14:20 Frank Warmerdam * [r2670] fix nmake dll export, and link test programs (#288) 2009-10-08 12:51 Frank Warmerdam * [r2669] add new directories and source (#288) 2009-10-08 08:56 Sandro Santilli * [r2668] regenerate ChangeLog now that we have all names in 2009-10-08 08:47 Sandro Santilli * [r2667] Add other missing names/addresses 2009-10-08 08:40 Sandro Santilli * [r2666] Automatically generate the ChangeLog file, forget ChangeLog.svn. 2009-10-08 08:38 Sandro Santilli * [r2665] Don't signal topology exception when it triggers snapping 2009-10-08 08:37 Sandro Santilli * [r2664] Add yury, fernando and sean 2009-10-08 08:17 Sandro Santilli * [r2663] Distribute all of TUT 2009-10-08 07:56 Sandro Santilli * [r2662] Properly set version for win target 2009-10-07 07:53 Sandro Santilli * [r2661] Expose single-sided buffering in C-API (see ticket #258) 2009-10-05 21:36 Sandro Santilli * [r2659] Drop use of static data in DistanceToPoint class (for thread-safety) 2009-10-05 19:29 Sandro Santilli * [r2658] release memory earlier, and closer to allocation 2009-10-05 19:04 Sandro Santilli * [r2657] Finish plugging leaks. Make check runs with no leaks. 2009-10-05 18:42 Sandro Santilli * [r2656] another memory management doc 2009-10-05 18:40 Sandro Santilli * [r2655] Document more memory management issues 2009-10-05 17:20 Sandro Santilli * [r2654] More memory leak fixes in single-sided buffering implementation 2009-10-05 16:58 Sandro Santilli * [r2653] Plug some memory leaks in single sided buffering implementation 2009-10-05 16:44 Sandro Santilli * [r2652] Document ownership of return from LineMerger::getMergedLineStrings 2009-10-05 16:40 Sandro Santilli * [r2651] Alright, there's no standard style yet so this file is made empty, but good to have for reference 2009-10-01 10:30 Sandro Santilli * [r2650] Throw an exception rather than returning NULL if input to single-sided buffer code is invalid 2009-10-01 09:10 Sandro Santilli * [r2649] Have single-sided buffer constructor return a simple LINESTRING when appropriate rather than forcing a MULTI; import 2 tests from the SAFE testsuite 2009-10-01 09:01 Sandro Santilli * [r2648] Better parse style parameter 2009-10-01 08:46 Sandro Santilli * [r2647] Add utility script to import tests from SAFE software 2009-10-01 08:42 Sandro Santilli * [r2646] Don't segfault on xml tests missing precision model specification 2009-10-01 07:24 Sandro Santilli * [r2645] Re-enable the now succeeding test for sharp edges line single sided buffering 2009-10-01 07:23 Sandro Santilli * [r2644] Use FLAT/BUTT endcaps when doing single sided buffering 2009-10-01 07:06 Sandro Santilli * [r2643] Fix trimming of left/right curves (ie: don't include the endcap) 2009-10-01 06:33 Sandro Santilli * [r2642] Use snapped intersection between full buffer boundary and single-sided offset curves 2009-09-30 22:18 Sandro Santilli * [r2641] Check hausdorff distance in both directions, or an expected output line longer than the obtained one would be found as correct 2009-09-30 20:27 Sandro Santilli * [r2640] Some debugging for single sided buffers 2009-09-30 19:18 Sandro Santilli * [r2639] Another simple test for single-sided buffer (horizontal line, both directions) 2009-09-30 19:07 Sandro Santilli * [r2638] Another simple test for a vertical line, opposite direction from previous 2009-09-30 19:05 Sandro Santilli * [r2637] Add test for single sided buffer on simple, vertical, line (this one succeeds both left and right) 2009-09-30 18:57 Sandro Santilli * [r2636] VIM setting for GEOS source code style (3-spaces tabs) 2009-09-30 14:14 Sandro Santilli * [r2635] Don't use non-standard escape sequences with 'echo' 2009-09-28 10:35 Sandro Santilli * [r2634] Replace no-commercial-use licenced MarkupSTL with tinyXML 2009-09-28 10:34 Sandro Santilli * [r2633] Temporarly disable failing single sided buffer test 2009-09-28 10:10 Sandro Santilli * [r2632] Oops, it seems I just don't want a test to fail ;) 2009-09-28 10:09 Sandro Santilli * [r2631] Don't give a false success if one of the expected/obtained geometry is empty 2009-09-28 09:03 Sandro Santilli * [r2630] Add offsets to PrecisionModel text output 2009-09-28 07:02 Sandro Santilli * [r2629] Add an hausdorff distance based result matcher for single-sided buffer tests. Enable the single sided buffer test provided by swong in ticket #215 with minor tweak (expect multilinestring). 2009-09-27 20:43 Sandro Santilli * [r2628] Re-introduce the singlesided buffer patch. Tests still need to be worked on. 2009-09-21 19:47 Paul Ramsey * [r2626] Polygon with empty ring causes a crash in WKBReader (from Tamas Szekeres) (#290) 2009-09-11 18:47 Paul Ramsey * [r2624] Patch for #285, C api for project and interpolate, from David Turner (novalis) 2009-08-21 09:54 Mateusz Loskot * [r2623] Updated svn:ignore property 2009-08-21 09:50 Mateusz Loskot * [r2622] Cleaned compilation warnings in unit tests. 2009-08-21 09:43 Mateusz Loskot * [r2621] Updated C++ TUT Framework to latest revision (147) of its SVN trunk 2009-08-15 13:26 Sandro Santilli * [r2620] Const correctness of LenghtIndexedLine port, by novalis (issue #284) 2009-08-12 19:01 Paul Ramsey * [r2619] Port of JTS linear referencing (from David Turner) (#283) 2009-08-02 23:39 Mateusz Loskot * [r2618] Removed incomplete GEOS_DEBUG message causing compilation error because Edge type is incomplete. 2009-08-02 23:15 Mateusz Loskot * [r2617] Fixed broken escape sequence in debug msg. 2009-07-17 22:23 Paul Ramsey * [r2616] Remove static string in WKB reader (#232) 2009-07-15 18:56 Paul Ramsey * [r2613] Add PreparedGeometry and STRtree support to SWIG (#279) Schuyler Erle 2009-07-15 18:55 Paul Ramsey * [r2612] Add STRtree support to the C API (#278) Schuyler Erle 2009-07-15 18:53 Paul Ramsey * [r2611] Add geos::index::strtree::AbstractSTRtree::iterate (#277) Schuyler Erle 2009-07-06 17:35 Sandro Santilli * [r2610] Add automated XML test for issue #275. Succeeds here. 2009-07-05 15:58 Sandro Santilli * [r2609] Apply fix-msvc90-only2.patch by Sanak from issue #273 2009-07-04 16:19 Sandro Santilli * [r2608] Apply fix-mingw.patch by Sanak (issue #273) 2009-06-29 16:40 Paul Ramsey * [r2607] Include nmake.opt in 'dist' target (#274) 2009-06-26 21:59 Sandro Santilli * [r2605] Fix typo reported in ticket #272 2009-06-24 21:43 Paul Ramsey * [r2604] Expose Hausdorf distance to CAPI (#264) from Vincent Picavet 2009-06-24 21:30 Paul Ramsey * [r2603] Fix stoopid syntax error. 2009-06-24 21:21 Paul Ramsey * [r2602] Remove old logging noise. 2009-06-24 21:19 Paul Ramsey * [r2601] Fix for #270, bad definition of isnan() in OS/X . This needs to be tested on other operating systems to make sure it doesn't break them instead. 2009-06-23 22:20 Paul Ramsey * [r2599] Fix clean target for VC build (#267) 2009-06-23 18:22 Howard Butler * [r2598] fix up syntax of the makefile related to the patch for #257 2009-06-22 19:14 Sandro Santilli * [r2597] Add tests for limited mitre join (now working) 2009-06-22 19:02 Sandro Santilli * [r2596] Fix bug in BufferParameters::setMitreLimit 2009-06-20 21:29 Sandro Santilli * [r2595] Bump versions (core 3.2.0, capi 1.6.0, port 1.10.0) 2009-06-20 08:53 Sandro Santilli * [r2594] Add tests for GEOSBufferWithStyle 2009-06-19 22:32 Sandro Santilli * [r2593] Extend the C-API interface to expose a GEOSBufferWithStyle (and corresponding thread-safe version) and related enums. 2009-06-16 15:49 Sandro Santilli * [r2592] Sync RobustDeterminant to JTS-1.10 (r1.15 was just commented-out code) 2009-06-16 15:46 Sandro Santilli * [r2591] Sync RobustDeterminant to revision 1.14 2009-06-16 15:43 Sandro Santilli * [r2590] Port info for RobustDeterminant 2009-06-16 15:33 Sandro Santilli * [r2589] Revert single-sided patch. Martin Davis is workin on it from the JTS side 2009-06-16 00:00 Paul Ramsey * [r2581] add reminders on bump versions in various places 2009-06-15 14:57 Paul Ramsey * [r2580] operation.h in Makefile.am twice. (#261) 2009-06-15 14:03 Sandro Santilli * [r2579] Port info in the geos::io namespace 2009-06-15 13:19 Sandro Santilli * [r2578] Put CLocalizer in the correct function. Fixes #260 for the writing part. 2009-06-15 10:13 Sandro Santilli * [r2577] Stop explicitly using the CLocalizer now that it is done within WKTReader and WKTWriter (see bug #260). Some deep testing about this would be good. Make check worked for me with comma-using locale. 2009-06-15 10:06 Sandro Santilli * [r2576] Use C locale while reading/writing WKT. Fixes bug #260. 2009-06-15 06:57 Sandro Santilli * [r2575] Add XML version of the testcase provided for bug #176 2009-06-08 22:10 Sandro Santilli * [r2572] JTS-1.10 port sync. The whole 'operation' namespace is complete on this. 2009-06-08 21:53 Sandro Santilli * [r2571] Port info for operation::union 2009-06-08 17:15 Sandro Santilli * [r2570] Sync to JTS-1.10 (port info in SegmentIntersectionTester was wrong, btw) 2009-06-08 17:12 Sandro Santilli * [r2569] Sync RectangleContains to JTS-1.10 2009-06-08 17:02 Sandro Santilli * [r2568] Port info for operation::predicate (we're at JTS-1.7 here) 2009-06-08 16:58 Sandro Santilli * [r2567] Port info for polygonize operation 2009-06-08 16:46 Sandro Santilli * [r2566] Port info and sync for operation::overlay::validate 2009-06-08 16:26 Sandro Santilli * [r2565] sync LineBuilder to JTS-1.10, completing overlay port 2009-06-08 16:09 Sandro Santilli * [r2564] Complete port info in overlay package 2009-06-08 15:43 Sandro Santilli * [r2563] Add missing setMarked static methods in GraphComponent and make use of them in LineMerger making it able to be called incrementally (JTS-1.10) 2009-06-08 15:28 Sandro Santilli * [r2562] Port info in operation::linemerge (a single class is still at JTS-1.7, needs changes in GeometryGraphComponent.h to go up) 2009-06-08 10:37 Sandro Santilli * [r2561] GeometryLocation sync to JTS-1.10 (docs) 2009-06-08 10:29 Sandro Santilli * [r2560] DistanceOp sync to JTS-1.10 (renames, docs...) 2009-06-08 10:07 Sandro Santilli * [r2559] Update port info for buffer package (it's really JTS-1.10) 2009-06-08 09:40 Sandro Santilli * [r2558] Warn at configure time if 64bit integer type isn't found. See bug #202. 2009-06-08 09:30 Sandro Santilli * [r2557] Install all C++ headers to reduce maintainance costs. C++ API is documented as being unstable after all so let's give users the power to hurt themselves :) 2009-06-06 22:22 Sandro Santilli * [r2556] Windows C++ exports by Ragi Y. Burhum. See http://lists.osgeo.org/pipermail/geos-devel/2009-June/004190.html 2009-06-06 22:17 Sandro Santilli * [r2555] fix headers inclusion warnings 2009-06-06 21:14 Sandro Santilli * [r2554] Use real NaNs rather than fake them. Applies patch in ticket #259. Adds autoconf checks for finite() and isfinite() and makes use of them for unix systems (platform.h) 2009-06-06 00:55 Sandro Santilli * [r2553] Complete port info and headers exposion for operation::distance package 2009-06-05 18:18 Sandro Santilli * [r2552] JTS-1.10 OverlayOp 2009-06-05 18:12 Sandro Santilli * [r2551] Add missing static function 2009-06-05 18:02 Sandro Santilli * [r2550] JTS-1.10 sync 2009-06-05 17:50 Sandro Santilli * [r2549] Boundary Node Rule support in relateOp. JTS-1.10. 2009-06-05 13:44 Sandro Santilli * [r2548] geomgraph package fully sync'ed to JTS-1.10 now 2009-06-05 13:41 Sandro Santilli * [r2547] added BoundaryNodeRule capability to EdgeEnds 2009-06-05 12:42 Sandro Santilli * [r2546] Add support for custom BoundaryNodeRule bringing GeometryGraph to JTS-1.10 2009-06-05 12:07 Sandro Santilli * [r2545] Complete port info in geomgraph package 2009-06-05 11:03 Sandro Santilli * [r2544] Port info in the geomgraph package (unfinished); fix compiler warning in GeometryGraph and make code more readable; 2009-06-05 10:23 Sandro Santilli * [r2543] Add port info and introduce header exposion info. Relate op results partially in JTS-1.7 still. 2009-06-05 09:36 Sandro Santilli * [r2542] typo in doxygen index page 2009-06-05 09:35 Sandro Santilli * [r2541] Fix doxygen link 2009-06-05 09:28 Sandro Santilli * [r2540] Fix deletion of void pointer in IntervalRTreeLeafNode, document ownership, fix callers tracking allocations to avoid leaks. Fixes bug #227. 2009-06-05 09:15 Sandro Santilli * [r2539] Allow generating ChangeLog from external build tree 2009-06-04 15:01 Mateusz Loskot * [r2538] * Applied patch for ticket #257. * Noticed that unit tests fail: 1>geos::util::UniqueCoordinateArrayFilter: . 1>---> group: geos::operation::valid::IsValidOp, test: test<1> 1> problem: assertion failed 2009-06-04 14:59 Mateusz Loskot * [r2537] Fixed bug of inaccessible constructor of incomplete type NodedSegmentString - header missing. 2009-06-04 13:59 Sandro Santilli * [r2536] Add support for testing single sided buffers 2009-06-01 03:34 Howard Butler * [r2534] #256 finishGEOS called multiple times will segfault 2009-05-28 14:38 Mateusz Loskot * [r2533] Fixed aclocal warnings for mixing cache-id's in configure.in. 2009-05-27 16:57 Paul Ramsey * [r2516] remove error 2009-05-27 16:57 Paul Ramsey * [r2515] Add single-sided item 2009-05-21 10:08 Sandro Santilli * [r2514] Add Mat's and Paul's entries, make ChangeLog.svn rule phony 2009-05-21 09:56 Sandro Santilli * [r2513] Add a rule to generate a ChangeLog using svn2cl. The authors.svn file will be used to map usernames and full names: please expand your own nick. The generated ChangeLog is added to repository to show you how it looks. If everybody agree we could rename this to ChangeLog and stop requiring manual edits (+1 from me:) 2009-05-13 11:29 Frank Warmerdam * [r2508] refer to GEOSFree() instead of free() 2009-05-13 11:26 Frank Warmerdam * [r2507] forward GEOSFree to GEOSFree_r, use std:: prefix on free() (#249) 2009-05-13 04:14 Frank Warmerdam * [r2506] Added GEOSFree() and GEOSFree_r() (#249) 2009-05-12 17:47 Sandro Santilli * [r2505] Add note about single-sided buffer 2009-05-12 16:49 Sandro Santilli * [r2504] Never fail bug #244 again (regression testcase added) 2009-05-12 16:48 Sandro Santilli * [r2503] Have DepthSegment hold a real LineSegment, not a reference. SubgraphDepthLocater was passing the same LineSegment reference to multiple DepthSegments, messing everything up. This fixes bug #244. 2009-05-12 15:38 Sandro Santilli * [r2502] Port info 2009-05-08 16:30 Sandro Santilli * [r2501] Update port info 2009-05-08 12:47 Sandro Santilli * [r2500] When included in a C++ environment, include and use std::size_t. Patch by Mateusz Loskot, ticket #252. 2009-05-08 12:46 Sandro Santilli * [r2499] Oops, forgot to update the static closedPoints signature.. 2009-05-08 12:29 Sandro Santilli * [r2498] Note the withinDistance addition to DistanceOp 2009-05-08 12:27 Sandro Santilli * [r2497] Add the complete set of tests for closedPoints 2009-05-08 12:11 Sandro Santilli * [r2496] Document semantic of a null return from closestPoints 2009-05-08 12:09 Sandro Santilli * [r2495] Don't wipe out closest locations after computing them (doh). Fixes bug #236. Takes the chance to make the GeometryLocation retrival function private as we don't install GeometryLocation.h header anyway (for future cleanups), and to rename a function to follow current JTS naming (more renames to come for proper sync) 2009-05-08 10:10 Sandro Santilli * [r2494] Add isWithinDistance() to DistanceOp, reaching rev 1.17 of JTS 2009-05-08 09:39 Sandro Santilli * [r2493] Port info for DistanceOp 2009-05-08 08:44 Sandro Santilli * [r2492] Always include stddef.h. Closes bug #213 2009-05-07 16:15 Sandro Santilli * [r2491] Add "thread-safe" version of GEOSGeom_setSRID. Closes bug #242. 2009-05-07 16:00 Sandro Santilli * [r2490] minor debug output improvement 2009-05-07 15:57 Sandro Santilli * [r2489] Skip empty components when building GeometryGraph. Fixes bug #234. Add non-automated test for it, and README file in the directory containing it... 2009-05-07 15:36 Sandro Santilli * [r2488] Add XML testcase for bug 188 2009-05-07 15:36 Sandro Santilli * [r2487] remove code duplication on buffer result validation 2009-05-07 08:52 Sandro Santilli * [r2486] Port info, doxygen cleanups 2009-05-07 08:45 Sandro Santilli * [r2485] Add test for creating a CoordinateSequence with at least 2 dimension 2009-05-06 20:47 Sandro Santilli * [r2484] Fix bug #135, give an hint about GEOSGeom_getDimensions being related to GEOSCoordSeq_getDimensions, fix signed vs. unsigned compiler warning. 2009-05-06 20:22 Sandro Santilli * [r2483] Fix compilation warnings thrown by GCC 4.3.x. Patch by Mateus, closes bug #92. 2009-05-06 20:12 Mateusz Loskot * [r2482] Updated svn:ignore property. 2009-05-06 17:54 Sandro Santilli * [r2481] findCollapsesFromExistingVertices: don't choke on sets of < 2 points. Fixes bug #219. 2009-05-06 17:52 Sandro Santilli * [r2480] minor indentation thing 2009-05-06 17:42 Sandro Santilli * [r2479] Cleanup MonotoneChainOverlapAction, reduce heap allocations. Cascade changes. 2009-05-06 17:14 Sandro Santilli * [r2478] Port info (to be worked on for heap allocations reduction) 2009-05-06 17:10 Sandro Santilli * [r2477] MonotoneChainSelectAction port review, heap allocation reduced, const-corrected. 2009-05-06 16:44 Sandro Santilli * [r2476] MonotoneChain const-correctness and interface cleanups, cascaded changes. Possibly discovered a leak in MCPointInRing algorithm, needs some unit testing. 2009-05-06 16:36 Sandro Santilli * [r2475] Const-correctness for bintree Interval 2009-05-06 15:47 Sandro Santilli * [r2474] Port MonotoneChain up to JTS-1.10, plus minor dox improvement (memory-oriented) 2009-05-06 15:31 Sandro Santilli * [r2473] Port MonotoneChainBuilder up to JTS-1.10. Tweak some signatures to use stricter signedness. 2009-05-06 14:55 Sandro Santilli * [r2472] Port to 1.9, fixing an out of boundary access in findEdgeEnd 2009-05-06 14:42 Sandro Santilli * [r2471] Add port info. We're 4 revision old (catching up next) 2009-05-05 14:28 Sandro Santilli * [r2470] Sync Envelope to JTS-1.10 2009-05-05 10:30 Sandro Santilli * [r2469] Add compile-time support to skip use of BinaryOp thus engaging SnapIfNeededOverlayOp used by Geometry methods. Shows that BinaryOp (GEOS-specific original work) gives better numerical stability. 2009-05-05 10:14 Sandro Santilli * [r2468] Found old GeometrySnapper/LineStringSnapper classes in an unexpected directory. Move them where they belong, sync with JTS-1.10. 2009-05-05 00:04 Sandro Santilli * [r2467] Fix memory leak on exception 2009-05-04 23:43 Sandro Santilli * [r2466] Fix memory bug 2009-05-04 23:23 Sandro Santilli * [r2465] Geometry up to 1.112 with a minor bugfix and performance improvement in Geometry::covers 2009-05-04 23:04 Sandro Santilli * [r2464] Bring Geometry port up a revision by having it use SnapIfNeededOp for overlay operations. Note that currently this doesn't affect the C-API nor the XMLTester codes, both using the BinaryOp original class (not JTS-ported) doing about the same thing as the SnapIfNeededOp class. 2009-05-04 22:03 Sandro Santilli * [r2463] Port SnapIfNeededOverlayOp 2009-05-04 21:28 Sandro Santilli * [r2462] Move overlay.validate package files where they belong 2009-05-04 21:02 Sandro Santilli * [r2461] Port overlay.snap.SnapOverlayOp, update GeometrySnapper to be more useful 2009-05-04 19:54 Sandro Santilli * [r2460] Port overlay.snap.GeometrySnapper 2009-05-04 19:51 Sandro Santilli * [r2459] Extend to accept a vector of const Coordinate pointers for snap pointers, fix typo making it clone snap points rather than source points on snapping... 2009-05-02 11:01 Sandro Santilli * [r2458] Port overlay.snap.LineStringSnapper from JTS-1.10 2009-05-02 10:59 Sandro Santilli * [r2457] Add an insert-like virtual method to CoordinateSequence. This comes from CoordinateList of JTS, historically bound to CoordinateSequence in GEOS. Add test for that interface. 2009-05-02 09:44 Sandro Santilli * [r2456] Copy last portable JTS general test, add a file with info about what's missing 2009-05-02 09:42 Sandro Santilli * [r2455] Drop test also found in TestFunctionPLPrec.xml 2009-05-02 09:40 Sandro Santilli * [r2454] Add support for testing within, covers and coveredby. Properly use 'arg1' and 'arg2' for these tests. 2009-05-02 09:25 Sandro Santilli * [r2453] Copy TestWithinDistance.xml test, drop duplicates from testLeaksBig.xml 2009-05-02 09:20 Sandro Santilli * [r2452] More tests from JTS (TestFunction*) 2009-05-02 09:17 Sandro Santilli * [r2451] Boundary test 2009-05-02 09:16 Sandro Santilli * [r2450] ConvexHull tests 2009-05-02 09:11 Sandro Santilli * [r2449] Add support for testing 'contains' in XMLTester, add all Relate tests from JTS 2009-05-02 09:01 Sandro Santilli * [r2448] More organization of xml tests: 'general' subdir following JTS 2009-05-02 08:44 Sandro Santilli * [r2447] Put stml testcases under their own dir (like in JTS) 2009-05-02 08:37 Sandro Santilli * [r2446] Add a 'split.xml' testcase to confirm 'difference' may be used to split linestrings; add TestRobustRelate.xml from JTS, organize robust-related tests as in JTS repository. 2009-04-30 12:42 Sandro Santilli * [r2444] drop duplicated (and old) port info 2009-04-30 12:33 Sandro Santilli * [r2443] Update port info 2009-04-30 12:17 Sandro Santilli * [r2442] Point full up to JTS-1.0 (rev 1.37) : adds reverse() 2009-04-30 12:07 Sandro Santilli * [r2441] LineString to rev 1.46 : don't override isSimple, always return MultiPoint as bondary 2009-04-30 11:47 Sandro Santilli * [r2440] Polygon to rev 1.50 (getBoundary always return MultiLineString) 2009-04-30 11:42 Sandro Santilli * [r2439] MultiPoint up to rev 1.30 (drop isSimple override) 2009-04-30 11:36 Sandro Santilli * [r2438] MultiLineString port info and sync to 1.40 (don't override isSimple) 2009-04-30 11:29 Sandro Santilli * [r2437] MultiPolygon up to rev 1.34 (getBoundary always returns a MultiLineString now) 2009-04-30 11:19 Sandro Santilli * [r2436] Oops, *now* we're at 1.14 (drop isSimple, rely on the one in base class) 2009-04-30 11:15 Sandro Santilli * [r2435] Port info. It's at 1.41 now, JTS is at 1.42 2009-04-30 11:03 Sandro Santilli * [r2434] Geometry class up to JTS rev 1.104 (need reach 1.127...) 2009-04-30 10:59 Sandro Santilli * [r2433] Add some info about things changed (might have missed something) 2009-04-30 10:51 Sandro Santilli * [r2432] Sync to rev 1.22 (JTS-1.10) 2009-04-30 10:47 Sandro Santilli * [r2431] EndpointInfo.h header is gone (it's always been private in JTS) 2009-04-30 10:46 Sandro Santilli * [r2430] Port revision 1.9 of IsSimplOp : allow inspecting non-simple location coordinate. 2009-04-30 10:43 Sandro Santilli * [r2429] Sync to revision 1.5 (JTS-1.10) : add accessors 2009-04-30 09:54 Sandro Santilli * [r2428] port to rev 1.8 (use of BoundaryNodeRule) 2009-04-30 09:49 Sandro Santilli * [r2427] Import TestSimple.xml from JTS, drop duplicated tests from testLeaksBig.xml 2009-04-30 09:26 Sandro Santilli * [r2426] Port algorithm::BoundaryNodeRule from JTS-1.10 (needed for IsSimpleOp sync) 2009-04-30 08:33 Sandro Santilli * [r2425] Port info, and sync from 1.14 to 1.17 (more to do, need more classes) 2009-04-29 23:52 Mateusz Loskot * [r2424] test/unit/capi: re-tab all .cpp files to use spaces. 2009-04-29 23:46 Mateusz Loskot * [r2423] Removed unused header from C API tests. 2009-04-29 23:44 Mateusz Loskot * [r2422] Added new unit tests for C API: GEOSWithinTest and GEOSContainsTest. This is check and response for problems reporting in Ticket #250. Running the new tests does not reproduce the problem, so it likely has been fixed or the bug is somewhere else (i.e. Django layers). 2009-04-29 09:44 Sandro Santilli * [r2421] Sync GeometricShapeFactory to JTS-1.10 (createArcPolygon added) 2009-04-29 08:56 Sandro Santilli * [r2420] Bring all geom::prep package in sync with JTS-1.10 2009-04-29 08:22 Sandro Santilli * [r2419] Sync BasicPreparedGeometry to JTS-1.10 (short-circuit in containsProperly) 2009-04-29 08:15 Sandro Santilli * [r2418] Add port information for geom::prep package. Next stop: sync to JTS-1.10. 2009-04-27 19:47 Sandro Santilli * [r2417] Plug last one. All heap blocks were freed -- no leaks are possible. 2009-04-27 19:42 Sandro Santilli * [r2416] Fix leak in testcase 2009-04-27 19:38 Sandro Santilli * [r2415] Refactor signatures to make ownership transfers more explicit. Fixed another leak in Node::insertNode. 2009-04-27 19:22 Sandro Santilli * [r2414] Fix memory leak in NodeBase::remove, exposed by unit testing 2009-04-27 15:52 Sandro Santilli * [r2413] Port info for quadtree::root 2009-04-27 15:47 Sandro Santilli * [r2412] Port info for quadtree::Node 2009-04-27 15:39 Sandro Santilli * [r2411] Port info and check, doxygen. 2009-04-27 15:30 Sandro Santilli * [r2410] Sync to JTS-1.10, reduce heap allocations and pointers usage. Includes a bugfix in collectStats. 2009-04-27 15:00 Sandro Santilli * [r2409] DoubleBits didn't change in JTS, update port info accordingly 2009-04-27 14:58 Sandro Santilli * [r2408] Quadtree's NodeBase: check port sync, add port info, drop unneeded pointers and virtuals, document objects ownership. 2009-04-25 00:23 Sandro Santilli * [r2407] Const-correctness, reduced heap allocations and port info for quadtree::Key class, a few more cleanups in user classes, to be continued. 2009-04-24 23:44 Sandro Santilli * [r2406] Fix memory leak in Quadtree::remove 2009-04-23 15:26 Sandro Santilli * [r2405] Apply Single-sided buffer patch, issue #215. UNTESTED. 2009-04-21 16:11 Sandro Santilli * [r2404] Port ValidSelfTouchingRingFormingHoleTest 2009-04-21 15:30 Sandro Santilli * [r2403] Port ValidClosedRingTest 2009-04-21 15:13 Sandro Santilli * [r2402] ::reverse returns a Geometry now (to be available up in base class) 2009-04-21 15:12 Sandro Santilli * [r2401] Sync LinearRing to JTS-1.10 (fixing a bug in isClosed) 2009-04-21 14:03 Sandro Santilli * [r2400] Port IsValidOp unit test 2009-04-21 11:14 Sandro Santilli * [r2399] Configure for CXX, not C. Should fix unknown tag and link issues on telascience. 2009-04-21 09:06 Sandro Santilli * [r2398] Add an AC_LIBTOOL_LANG_C_CONFIG call right before the AC_LIBTOOL_COMPILER_OPTION calls. Seems to fix compiler selection on telascience (whereas AC_LANG and AC_LANG_PUSH didn't work) 2009-04-20 20:32 Sandro Santilli * [r2397] Use JTS heuristic for distance-0 buffer checking 2009-04-20 11:04 Mateusz Loskot * [r2396] Updated svn:ignore patterns. 2009-04-20 10:37 Sandro Santilli * [r2395] Port IteratedBufferStessTest 2009-04-20 09:37 Sandro Santilli * [r2394] Add named constants, sync to JTS-1.10 2009-04-20 09:24 Mateusz Loskot * [r2393] Updated svn:ignore patterns. 2009-04-18 07:55 Sandro Santilli * [r2392] Use BufferResultMatcher for buffer operations. No failures. 2009-04-18 07:49 Sandro Santilli * [r2391] Imported cleaned-up version of fme.xml -- this one fails (the one we have is actually expecting a wrong result) 2009-04-18 07:46 Sandro Santilli * [r2390] Don't densify coordinates if buffer distance is 0 2009-04-17 16:50 Sandro Santilli * [r2389] comment out debugging lines 2009-04-17 16:49 Sandro Santilli * [r2388] Port DiscreteHausdorffDistance unit test 2009-04-17 16:47 Sandro Santilli * [r2387] Offline some more 2009-04-17 16:46 Sandro Santilli * [r2386] Fix typo 2009-04-17 16:26 Sandro Santilli * [r2385] Add missing implementation bits 2009-04-17 15:47 Sandro Santilli * [r2384] Port BufferResultMatcher. Gives 31 new failures !! 2009-04-17 15:37 Sandro Santilli * [r2383] proper inline check_valid source/headers/geos/geom/BinaryOp.h 2009-04-17 15:34 Sandro Santilli * [r2382] Header guard 2009-04-17 13:59 Sandro Santilli * [r2381] renamed intersection constants 2009-04-17 09:56 Sandro Santilli * [r2380] Add debugging output of variables used by AC_LIBTOOL_COMPILER_OPTION. Surprisingly, the buildbots try to use a fortran compiler there 2009-04-17 07:50 Sandro Santilli * [r2379] Differentiate variable used in AC_LIBTOOL_COMPILE_OPTION for proper use of configuration cache 2009-04-16 18:05 Sandro Santilli * [r2378] Use -ffloat-store flag when available. See http://lists.osgeo.org/pipermail/geos-devel/2009-April/004089.html 2009-04-16 12:56 Sandro Santilli * [r2377] Make enum values explicit, as JTS tests rely on those.. 2009-04-16 12:54 Sandro Santilli * [r2376] Port RobustLineIntersectorTest from JTS 2009-04-16 12:08 Sandro Santilli * [r2375] better isolation of test-specific functions 2009-04-16 10:48 Sandro Santilli * [r2374] Port RobustLineIntersectionTest (mostly failing, but reported by Martin Davis to be expected) 2009-04-15 15:58 Sandro Santilli * [r2373] New class rename, following JTS 2009-04-15 12:56 Sandro Santilli * [r2372] typo in disabled section 2009-04-15 11:17 Sandro Santilli * [r2371] Few more docs about memory management in quadtree indexing; fix a potential leak in quadtree::Key 2009-04-15 10:43 Sandro Santilli * [r2370] Document ownership of quadtree::NodeBase subnodes 2009-04-15 10:18 Sandro Santilli * [r2369] Fix memory leak in unit test 2009-04-15 10:02 Sandro Santilli * [r2368] Fix leak in SimpleGeometryPrecisionReducer, improve memory management docs where topic. 2009-04-15 09:29 Sandro Santilli * [r2367] Document ownership of DistanceOp::closestPoints return, fix leak in unit test. 2009-04-15 09:25 Sandro Santilli * [r2366] Fix leak in PolygonBuilder (overlay operation). The leak was exposed by the stmlf-cases-20061020.xml testcase. This commit also adds some doc-only throw specs related to the bug. 2009-04-15 07:52 Sandro Santilli * [r2365] Fix memory leaks in IsValid operation 2009-04-15 00:27 Sandro Santilli * [r2364] Explain why unrolled computation is turned off, and keep it off 2009-04-15 00:14 Sandro Santilli * [r2363] Fix typo in computing angleOrientation 2009-04-14 19:11 Sandro Santilli * [r2362] Temporarly revert the unrolled computation in HCoordinate::intersection. Added mitred join buffer test from JTS (failed with the unrolled comp, to be further inspected). 2009-04-14 16:43 Sandro Santilli * [r2361] Port the algorithm::distance package from JTS 1.9 2009-04-14 15:25 Sandro Santilli * [r2360] Add CoordinateSequenceFilter support, fix default GeometryComponentFilter moving the logic to the correct place (a Geometry private class). 2009-04-14 13:35 Sandro Santilli * [r2359] Sync (Robust)LineIntersector to JTS-1.9 2009-04-14 13:23 Sandro Santilli * [r2358] Sync CGAlgorithms with JTS-1.9 2009-04-14 12:55 Sandro Santilli * [r2357] Fix memory leak in RayCrossingCounter; update signatures to avoid pointers when unneeded; add a locatePointInRing taking a vector of coordinate pointers, for use by CGAlgorithms 2009-04-14 12:42 Sandro Santilli * [r2356] Update port info, checked against JTS-1.9 2009-04-14 11:03 Sandro Santilli * [r2355] Move XML tests under their own directory 2009-04-14 10:50 Sandro Santilli * [r2354] Fix memory leak in BufferBuilder (due to just-ported short-circuit) 2009-04-14 10:27 Sandro Santilli * [r2353] Add support for bufferMitredJoin tests 2009-04-14 09:53 Sandro Santilli * [r2352] Fix XML for Buffer testing to match jts layout (arg2 for distance, arg3 for quadrant segments); copy buffer-related tests from jts: they succeed w/out editing. 2009-04-14 09:22 Sandro Santilli * [r2351] Update port info of SubgraphDepthLocater 2009-04-14 09:19 Sandro Santilli * [r2350] Update port info for RightmostEdgeFinder (checked) 2009-04-14 09:14 Sandro Santilli * [r2349] Sync BufferSubgraph to JTS-1.9 2009-04-14 08:52 Sandro Santilli * [r2348] Port OffsetCurveBuilder from JTS-1.9. Twenty time faster completion of fme.xml testcase ! 2009-04-10 20:22 Sandro Santilli * [r2347] Port BufferInputLineSimplifier from JTS 1.9 2009-04-10 15:15 Mateusz Loskot * [r2346] Do not generate Makefile for tests/unit/tut. Fixed bug reported as #247. 2009-04-10 12:08 Sandro Santilli * [r2345] Sync LineSegment with JTS-1.9 2009-04-09 21:46 Mateusz Loskot * [r2344] Updated tests/unit package with latest relase of C++ TUT Framework from 2008-11-30. 2009-04-09 19:39 Mateusz Loskot * [r2343] Moved tests/tut to tests/unit/tut. Preparing for update to latest version of C++ TUT Framework. 2009-04-09 16:22 Sandro Santilli * [r2342] Port algorithm.Angle from JTS-1.9 2009-04-09 11:45 Sandro Santilli * [r2341] Sync BufferBuilder and BufferOp classes to JTS-1.9. Adapt OffsetCurveBuilder to use of BufferParameter (needs more work for JTS-sync). 2009-04-09 10:21 Sandro Santilli * [r2340] typo 2009-04-09 09:45 Sandro Santilli * [r2339] Port BufferParameters from JTS-1.9 2009-04-09 08:54 Sandro Santilli * [r2338] Sync port of OffsetCurveVertexList to JTS-1.9, improve memory management documentation (would need some refactoring/love) 2009-04-08 16:52 Sandro Santilli * [r2337] Improve duplicate edge detection performance (JTS-1.9 sync) - fme.xml runs 3 times as fast now. 2009-04-08 16:17 Sandro Santilli * [r2332] const correctness 2009-04-08 15:38 Sandro Santilli * [r2329] Fix documentation for GEOSPrepare, GEOSPrepare_r 2009-04-08 14:54 Sandro Santilli * [r2328] OrientedCoordinateArray ported from JTS 2009-04-08 14:41 Sandro Santilli * [r2327] Add increasingDirection static method, from JTS's CoordinateArray (GEOS puts all of them in CoordinateSequence for historical reasons) 2009-04-08 13:16 Sandro Santilli * [r2326] Complete porting of SimpleSnapRounder (refactoring for adding snapped nodes) 2009-04-08 13:02 Sandro Santilli * [r2325] Improve documentation about memory usage for SegmentStringUtil class 2009-04-08 12:58 Sandro Santilli * [r2324] Stub initial unit tests for C-API's GEOSPreparedGeometry operations. Helped fixing issue 147 of postgis 2009-04-08 12:55 Sandro Santilli * [r2323] Don't access deleted memory. Fixes issue 147. 2009-04-08 10:53 Sandro Santilli * [r2322] Fix typo 2009-04-08 10:06 Sandro Santilli * [r2321] Add a couple more tests to SegmentNode unit test 2009-04-08 09:42 Sandro Santilli * [r2320] Port SegmentNode to JTS-1.9 2009-04-07 19:00 Sandro Santilli * [r2319] Refactor SegmentString to be an abstract class, to be in sync with JTS-1.9. 2009-04-07 12:36 Sandro Santilli * [r2318] update copyright notice 2009-04-07 11:11 Sandro Santilli * [r2317] Sync HotPixel to JTS-1.9 (rev 1.3); fix a few bugs and use standard algorithms for min/max 2009-04-07 10:48 Sandro Santilli * [r2316] Fix signed vs. unsigned compiler warning 2009-04-07 10:18 Sandro Santilli * [r2315] Port info, indenting 2009-04-07 09:56 Sandro Santilli * [r2314] Port IndexedNestedRingTester and have IsValidOp use it, syncing the operation to JTS-1.9 2009-04-07 09:55 Sandro Santilli * [r2313] Update port info, minor tweaks to doxygen comments 2009-04-07 08:14 Sandro Santilli * [r2312] Sync HCoordinate class to JTS-1.9 (rev 1.18) 2009-04-03 15:27 Mateusz Loskot * [r2311] Added _NMAKE_VER 9.00.21022.08 to nmake.opt. Fixed bug with using BUILD_DEBUG instead of BUILD_BATCH in nmake.opt. 2009-03-27 02:39 Mateusz Loskot * [r2310] Updated build/msvc80. 2009-03-27 02:38 Mateusz Loskot * [r2309] Forgotten nmake.opt in last commit. 2009-03-26 21:52 Mateusz Loskot * [r2308] Refactored NMAKE makefiles. Added nmake.opt file - GDAL style. Added some auto-magic to determine version of Visual C++ compiler and set version specific compilation flags. No need to specify Visual C++ version in cmd line, but just run: nmake -f makefile.vc in root dir of the tree. 2009-03-26 21:07 Mateusz Loskot * [r2307] CascadedPolygonUnion.cpp: added missing std headers. 2009-03-26 01:53 Mateusz Loskot * [r2306] Dummy commit - testing buildbot resurection. 2009-03-24 16:49 Mateusz Loskot * [r2304] Fixed bug introduced in recent refactoring work (r2281). This is the reason of PostGIS regression test failing (Issue 143) 2009-03-24 15:58 Paul Ramsey * [r2303] Allow version test to work in glibtoolize 2009-03-24 00:48 Mateusz Loskot * [r2302] capi/geos_ts_c.cpp: refactoring, assert() to test against nullptr where it is forbidden. 2009-03-24 00:30 Mateusz Loskot * [r2301] REVERTED r2299: Fixed GEOSSetSRID_r missing, GEOSSetSRID duplicated (Ticket #242). A little of refactoring. 2009-03-24 00:19 Mateusz Loskot * [r2300] Fixed GEOSSetSRID_r missing, GEOSSetSRID duplicated (Ticket #242). A little of refactoring. 2009-03-23 23:50 Mateusz Loskot * [r2299] capi/geos_ts_c.cpp: refactoring, use single return expression per function, added assert() to test against nullptr where it is forbidden. 2009-03-23 23:29 Mateusz Loskot * [r2298] capi/geos_ts_c.cpp: refactoring, use single return expression per function, added assert() to test against nullptr where it is forbidden, addd some comments. 2009-03-23 22:19 Mateusz Loskot * [r2297] capi/geos_ts_c.cpp: refactoring, use single return expression per function, added assert() to test against nullptr where it is forbidden, addd some comments. 2009-03-23 21:07 Mateusz Loskot * [r2296] capi/geos_ts_c.cpp: refactoring, replace manual strdup with gstrdup, use single return expression per function, added some comments. 2009-03-23 20:31 Mateusz Loskot * [r2295] dummy commit 2009-03-23 20:03 Mateusz Loskot * [r2294] autogen.sh: Fixed typo in tab character. 2009-03-23 17:08 Mateusz Loskot * [r2293] autogen.sh: be more verbose about versions, check for autoconf, check if ./configure is really generated. 2009-03-23 16:28 Mateusz Loskot * [r2292] configure.in: mloskot made a stupid mistake, mloskot has fixed it. 2009-03-23 14:38 Mateusz Loskot * [r2291] configure.in: wrap macro arguments with proper M4 quote characters. 2009-03-23 14:08 Mateusz Loskot * [r2290] autogen.sh: Call libtool *before* aclocal and automake (see Automake manual,8.3.9.1). 2009-03-23 14:01 Mateusz Loskot * [r2289] autogen.sh: verbose check if autotools versions. 2009-03-22 20:29 Paul Ramsey * [r2288] Show what versions of things we're running 2009-03-21 02:17 Mateusz Loskot * [r2287] capi/geos_ts_c.cpp: refactoring - removed redundant return expressions, replaced bloated use of malloc + memcpy with single call to gstrdup, use of C++ cast operators, removed unnecessary allocation of std::string objects. 2009-03-21 01:37 Mateusz Loskot * [r2286] capi/geos_ts_c.cpp: added gstrdup and gstrdup_s helper functions to get rid of bloated code in future. Started eliminating redundant return expressions. 2009-03-21 01:10 Mateusz Loskot * [r2285] macros: Updated svn:ignore property. 2009-03-21 01:08 Mateusz Loskot * [r2284] capi/geos_ts_c.cpp: Use of spaces instead of tabs applied. 2009-03-21 01:05 Mateusz Loskot * [r2283] source/operation/polygonize/edgering.cpp: cleaned compiler warnings about mixed integral types. 2009-03-21 01:01 Mateusz Loskot * [r2282] Fixed deprecated conversion from string constant to char* in GEOSisValidReason_r. Small refactoring. 2009-03-21 00:47 Mateusz Loskot * [r2281] capi/geos_ts_c.cpp: refactoring, use c++ cast operators. 2009-03-20 23:37 Mateusz Loskot * [r2280] Updated svn:ignore property. 2009-03-20 23:35 Mateusz Loskot * [r2279] Updated build/msvc80 project. 2009-03-19 16:45 Paul Ramsey * [r2278] Fix spellingn mistake. 2009-03-19 16:19 Mateusz Loskot * [r2277] * tests/unit/capi: added GEOSGeomFromWKBTest with test cases (see comment) reported as a bug (See http://postgis.refractions.net/pipermail/postgis-devel/2009-March/005199.html). TODO: Reproduce and ask the reporter to submit a ticket if necessary. * test/unit/utility.h: Added helper class wkb_hex_decoder. * Updated build/msvc90 projects. 2009-03-11 12:51 Mateusz Loskot * [r2276] BUG in DistanceOp: * Test case and explanation of existing bug in DistanceOp::closestPoints() recently reported by Aya (Ticket #236). * Refactored closestPoints() method to clearly present where is the bug. Again, chain calls are evil! Bless clear code! * tests/unit/operation/distance/DistanceOpTest.cpp: see test case test<17>, read FIXME comments. Uncomment closestPoints() to run and reproduce the bug. * A dirty fix: if loc0 or loc1 are nullptr, return nullptr CoordinatesSequence from closestPoints(). 2009-03-11 12:18 Mateusz Loskot * [r2275] Number of assertions in CoordinateArraySequence class. 2009-03-10 17:29 Paul Ramsey * [r2274] svn:ignore 2009-03-10 17:28 Paul Ramsey * [r2273] svn:ignore 2009-03-10 17:18 Paul Ramsey * [r2272] Update NEWS for 3.1.0 2009-03-10 16:23 Paul Ramsey * [r2271] Update ChangeLog for 3.1.0 release 2009-02-07 23:29 Paul Ramsey * [r2269] Include GeometrySnapper.h in distribution package. 2009-02-02 22:58 Sean Gillies * [r2268] Note lack of Python support since 3.0 2009-02-02 22:53 Sean Gillies * [r2267] Notes on state of scripting language bindings 2009-01-30 20:01 Paul Ramsey * [r2266] Add new msvc targets to build 2009-01-29 19:22 Mateusz Loskot * [r2265] Added build/msvc90 with solution and project files for Microsoft Visual C++ 2009 (9.0). Successfully built and tested GEOS with Visual C++ 9.0. 2009-01-29 19:02 Paul Ramsey * [r2264] update autogen.bat ref 2009-01-29 18:56 Mateusz Loskot * [r2263] Fixed broken svn:keyword Id 2009-01-29 18:51 Mateusz Loskot * [r2262] Renamed bootstrap.bat to autogen.bat for easier guass of the script purpose. Wiki updated. 2009-01-28 01:06 Paul Ramsey * [r2261] Add to win32 instructions 2009-01-27 18:10 Paul Ramsey * [r2260] Add GeometryCombiner.h to include dist 2009-01-27 00:18 Paul Ramsey * [r2259] Revert some junk from an old commit, per issue #220 2009-01-26 20:44 Frank Warmerdam * [r2258] added two new files related to cascaded polygon union (#226) 2009-01-24 05:03 Paul Ramsey * [r2257] Update 2009-01-24 05:02 Paul Ramsey * [r2256] Update changelog 2009-01-24 01:33 Mateusz Loskot * [r2255] Fixed mixed signed/unsigned integral types in geos_ts_c.cpp, so no compilers should flood with warnings now. 2009-01-24 01:30 Mateusz Loskot * [r2254] Updated projects for Visual Studio 2005 adding new .h/.cpp files. 2009-01-23 23:58 Mateusz Loskot * [r2253] Updated svn:keywords property on C/C++ files. 2009-01-21 22:18 Paul Ramsey * [r2252] Remove geometryCollection protection from Union/Relate/Intersection/Difference. 2009-01-20 01:01 Paul Ramsey * [r2251] Add GEOSUnionCascaded(*GEOSGeometry) to CAPI in preparation for PostGIS hook-up. 2009-01-19 23:55 Paul Ramsey * [r2250] Formatting changes to function decls. 2009-01-19 20:41 Howard Butler * [r2249] fixes to allow building in msvc 2003 2009-01-19 20:00 Paul Ramsey * [r2248] Make warning flags conditional behind a compiler test... fix to bug #192 ? 2009-01-19 16:44 Paul Ramsey * [r2247] Added patch from hkaiser to allow cascadedunion to be run directly on a multipolygon. 2009-01-19 00:12 Paul Ramsey * [r2246] Fix error left behind from testing. 2009-01-18 23:28 Paul Ramsey * [r2245] Add some more info on missing tools. 2009-01-18 23:07 Paul Ramsey * [r2244] Add msvc files to distribution target, and update release notes to include updating version in .vc headers. 2009-01-18 22:35 Paul Ramsey * [r2243] Add a couple extra program checks. 2009-01-18 21:30 Paul Ramsey * [r2241] Add version test for aclocal and automake to allow OpenSolaris to work. 2009-01-18 20:34 Paul Ramsey * [r2240] Apply cascaded union patch, for issue #225 2009-01-15 01:00 Paul Ramsey * [r2239] Remove XMLTester from list of installed programs. 2009-01-14 20:25 Paul Ramsey * [r2238] Remove strdup use from code for compilation in mingw 2009-01-13 20:59 Paul Ramsey * [r2237] Add [macros] include to configure.in directly. Seems to make more recent aclocals happy 2009-01-13 20:43 Paul Ramsey * [r2236] Change AC_SUBST to one-per-line instead of one-line-for-all. Seems to make more recent autoconf's happier. 2009-01-13 19:23 Paul Ramsey * [r2235] Change return values for GEOSWKBWriter_getIncludeSRID_r to match function signature. 2009-01-13 17:04 Paul Ramsey * [r2234] More files missing from commit. 2009-01-13 15:47 Paul Ramsey * [r2233] Add missing file to SVN. 2009-01-13 01:21 Paul Ramsey * [r2232] Apply patch for issue #210 (thread safe c-api) submitted by Chuck Thibert. 2009-01-05 23:42 Stephen Wong * [r2231] Fixed memory leak in BufferBuilder (#218); added read-only coordinates function in OffsetCurveVertexList; explicity pass ownership in LineMerger. 2008-11-26 19:41 Paul Ramsey * [r2229] Octant.h error (#185) from Denise Macleod. 2008-11-26 19:27 Paul Ramsey * [r2228] Allow proper writing out of z ordinates. From Justin Bronn (#216) 2008-11-26 19:25 Paul Ramsey * [r2227] Allow readpoint to look at input dimension and fill higher ordinates. (#217) 2008-11-26 19:06 Paul Ramsey * [r2226] Expose GEOSIsValidReason to CAPI 2008-11-18 03:09 Paul Ramsey * [r2221] Cygwin build fix from MCA 2008-11-11 17:32 Paul Ramsey * [r2220] Memory leak on invalid polygons in intersection(). (#170) from Denise MacLeod. 2008-11-05 20:52 Paul Ramsey * [r2218] Another minor memory leak removed. 2008-10-28 15:47 Paul Ramsey * [r2217] Cygwin/Mingw patch from Mark Cave-Ayland 2008-10-23 17:33 Frank Warmerdam * [r2210] set isChecked flag after checking to fix memory leak (#169) 2008-10-16 00:40 Paul Ramsey * [r2203] change info to point to osgeo.org 2008-10-14 15:01 Paul Ramsey * [r2200] Consistent const declarations in c-api ($#209) 2008-10-13 22:40 Paul Ramsey * [r2199] Add CLocalizer.h to build so it gets packaged in make dist 2008-10-10 17:46 Paul Ramsey * [r2198] One last memory leak fix. 2008-10-09 16:39 Paul Ramsey * [r2197] Memory leak fix for for prepared intersects. (#207) 2008-10-04 18:14 Paul Ramsey * [r2196] Memory leak fix for prepared geometry, from Hartmut Kaiser. (#207) 2008-09-29 19:24 Paul Ramsey * [r2195] Put function sig on one line 2008-09-23 23:01 Mateusz Loskot * [r2194] Moved some ctor/dctor bodies from headers to translation units. Improved source code readability. TODO: We need to run a beast like AStyle on all GEOS code because many places are very hard to read. 2008-09-23 22:55 Mateusz Loskot * [r2193] MCIndexSegmentSetMutualIntersector::addToIndex: Completed BWJ's comment on memory leaks with important observations about objects relation & lifetime. The note is a diagnosis of roots of the problem. Improved source code readability. 2008-09-22 21:48 Mateusz Loskot * [r2192] Use conditional operators instead of cast bool to int. 2008-09-22 20:16 Mateusz Loskot * [r2191] Removed unnecessary std::endl from debug messages in TopologyPreservingSimplifier.cpp. 2008-09-21 21:32 Mateusz Loskot * [r2190] Patched NMAKE makefiles: replaced lib.exe with link.exe /lib command to enabled compilation using Microsoft Visual C++ Toolkit 2003 2008-09-16 21:09 Mateusz Loskot * [r2189] Patch fixing build problems on Solaris (Ticket #205). 2008-09-16 21:01 Mateusz Loskot * [r2188] Fixed EOL to LF. 2008-09-16 20:58 Mateusz Loskot * [r2187] Fixed crash of Prepared Geometry construction with nullptr to Geometry object (Ticket #197). 2008-09-16 20:55 Mateusz Loskot * [r2186] Added PreparedGeometryFactoryTest to geos_unit.vcproj. 2008-09-16 20:15 Mateusz Loskot * [r2185] Added CLocalizer to geos_lib.vcproj project for Visual C++ 2005/2008. 2008-09-16 20:13 Mateusz Loskot * [r2184] Include missing in isPointInRingTest.cpp 2008-09-16 20:05 Mateusz Loskot * [r2183] Fixed undeclared std::locale in CLocalizer when building using Visual C++ (Ticket #201) 2008-08-31 20:28 Mateusz Loskot * [r2182] Replaced incorrect with in geos_unit.cpp. 2008-08-31 20:23 Mateusz Loskot * [r2181] Added missing include in geos_unit.cpp. 2008-08-31 19:54 Mateusz Loskot * [r2180] Removed use of strdup function to fix compilation with GCC 4.3.1 (Ticket #204). 2008-08-29 18:17 Mateusz Loskot * [r2179] Removed redundant return expressions from geos_c.cpp. Testing changes notifications for buildbot. 2008-08-29 00:30 Mateusz Loskot * [r2176] Fixed execution paths and removed redundant return expr in some C API calls. 2008-08-29 00:29 Mateusz Loskot * [r2175] Added missing virtual destructor to WKBWriter class. 2008-08-28 22:20 Sean Gillies * [r2174] Added CLocalizer class that switches to C locale and restores to the outer context's locale when deleted (#201) 2008-08-28 21:35 Mateusz Loskot * [r2173] tests/unit: added GEOSGeomToWKTTest. 2008-08-28 19:16 Sean Gillies * [r2172] Switch to C locale while reading and writing WKT and restore to the original context's locale afterward (#201) 2008-08-22 17:25 Frank Warmerdam * [r2171] include cmath for std::pow() and std:log() on MSVC7.1 (#199) 2008-08-22 16:10 Mateusz Loskot * [r2170] Added build/bjam/README with status note. 2008-08-19 17:02 Mateusz Loskot * [r2169] LineStringTest: fixed memory leak. 2008-08-19 17:00 Mateusz Loskot * [r2168] geos/geom/util: Prefer strict static_cast than C-style cast. Commented ownership transfer of coordinates object. 2008-08-19 00:18 Mateusz Loskot * [r2167] tests/unit/algorithm/ConvexHullTest.cpp: Fixed memory leaks. 2008-08-19 00:05 Mateusz Loskot * [r2166] tests/unit/algorithm/CGAlgorithms: Fixed memory leaks. 2008-08-18 23:45 Mateusz Loskot * [r2165] tests/unit/algorithm/CGAlgorithms: Fixed number of memory leaks. 2008-08-18 23:30 Mateusz Loskot * [r2164] tests/unit/capi: Fixed number of memory leaks. 2008-08-18 16:32 Mateusz Loskot * [r2163] tests/bigtest: Pointed out number of memory leaks but not fixing them, waiting for comments. 2008-08-18 16:30 Mateusz Loskot * [r2162] tests/unit: added tests cases to PreparedGeometryFactoryTest, refactored casting utils and geometry comparators, small cleanup. 2008-08-18 16:29 Mateusz Loskot * [r2161] Fixed svn:keywords. 2008-08-18 16:27 Mateusz Loskot * [r2160] Fixed UNREFERENCED_PARAMETER macro. 2008-08-18 16:27 Mateusz Loskot * [r2159] Fixed svn:keywords. 2008-08-18 16:24 Mateusz Loskot * [r2158] geom/prep: Refactored kamikaze casts to more readable form. Fixed svn:keywords. 2008-08-12 00:25 Mateusz Loskot * [r2157] Fixed Id keywords. 2008-08-12 00:23 Mateusz Loskot * [r2156] Fixed EOL to LF in trunk/tests. 2008-08-12 00:09 Mateusz Loskot * [r2155] Updated svn:keywords property. 2008-08-12 00:03 Mateusz Loskot * [r2154] Updated svn:keywords property. 2008-08-11 23:54 Mateusz Loskot * [r2153] Refactored tabs vs spaces in PreparedGeometryFactoryTest. 2008-08-11 23:52 Mateusz Loskot * [r2152] PreparedGeometry must be a complete type where it is destroyed by the factory (Ticket #198). 2008-08-11 23:42 Mateusz Loskot * [r2151] Completed PreparedGeometryFactory class with missing named destructor for PreparedGeometry (Ticket #198) 2008-08-11 23:35 Mateusz Loskot * [r2150] Removed .PreparedGeometryFactoryTest.cpp.swp that must sneaked accidentally. 2008-08-11 22:48 Mateusz Loskot * [r2149] Added PreparedGeometryFactoryTest with first test cases included. FIXME: The test causes memory leak because we don't know how to destroy PreparedGeometry objects returned by the factory, discussing on the geos-devel list now. 2008-08-07 16:59 Paul Ramsey * [r2148] Added original author to main copyright block. 2008-08-07 16:57 Paul Ramsey * [r2147] Change to standard header, with (c) credit to author. 2008-08-01 23:23 Mateusz Loskot * [r2146] Updated ChangeLog with latest submissions. Hmm, should we stil maintain the ChangeLog file? 2008-07-31 17:08 Mateusz Loskot * [r2145] Fixed tabs, hopefully. Updated svn:keywords property. 2008-07-31 17:01 Mateusz Loskot * [r2144] Patch completing C API interface with wrapper on Polygonizer::getCutEdges (Ticket #195). Unit test included in tests/unit/capi/GEOSPolygonizer_getCutEdgeTest.cpp. Thanks to Jurgen E. Fischer for this patch. 2008-07-26 23:06 Mateusz Loskot * [r2143] Number of fixes enabling GEOS compilation with GCC 4.3 (Ticket #167). 2008-07-26 21:00 Mateusz Loskot * [r2142] Guarded version macros with #ifndef conditions to avoid redefinition errors (Ticket #167). 2008-07-26 20:47 Mateusz Loskot * [r2141] Guarded version macros with #ifndef conditions to avoid redefinition errors (Ticket #167). 2008-07-26 20:24 Mateusz Loskot * [r2140] Fixed problems with finding libpython on Mac Darwin (Ticket #191). 2008-07-26 19:57 Mateusz Loskot * [r2139] Updated svn:keywords property. 2008-07-26 19:56 Mateusz Loskot * [r2138] Fixed autogen.sh for OpenSolaris (Ticket #192). 2008-07-25 21:00 Mateusz Loskot * [r2137] Updated svn:keywords property 2008-07-25 20:56 Mateusz Loskot * [r2136] Updated svn:keywords property 2008-07-19 19:11 Frank Warmerdam * [r2135] added manifest handling for DLLs (#193) 2008-07-19 19:07 Frank Warmerdam * [r2134] added rules to create platform.h, version.h and geos_c.h from templates on win32 2008-07-15 22:04 Mateusz Loskot * [r2131] Fixed compilation on with Sun Studio compiler on Solaris x86 and Sparc (Ticket #189). Thanks to Magne Mahre for the patch. 2008-07-15 13:35 Mateusz Loskot * [r2130] For building with Visual C++, added new flag DEBUG=1 (see GEOS building instructions on GEOS Wiki). Added missing flags for Visual C++ compiler, in release and debug configuration. 2008-05-20 21:34 Mateusz Loskot * [r2129] Added missing subdirs to source/dirlist.mk 2008-05-20 21:31 Mateusz Loskot * [r2128] Updated svn:ignore patterns. 2008-05-20 21:25 Mateusz Loskot * [r2127] * source\headers\geos\util.h: Add UNREFERENCED_PARAMETER macro. * source\geom\PrecisionModel.cpp, source\geom\GeometryComponentFilter.cpp, source\geom\util\GeometryTransformer.cpp, source\precision\GeometrySnapper.cpp, source\precision\CommonBitsRemover.cpp, source\simplify\DouglasPeuckerSimplifier.cpp, source\operation\overlay\OverlayOp.cpp, source\operation\overlay\FuzzyPointLocator.cpp, source\index\quadtree\NodeBase.cpp, source\headers\geos\geom\BinaryOp.h, source\headers\geos\operation\overlay\PointBuilder.h, source\headers\geos\noding\MCIndexNoder.h, source\headers\geos\noding\ScaledNoder.h, source\headers\geos\noding\Octant.h, source\noding\ScaledNoder.cpp, source\noding\snapround\MCIndexPointSnapper.cpp, source\noding\SegmentString.cpp, tests\unit\geom\DimensionTest.cpp: Use UNREFERENCED_PARAMETER macro to get rid of C4100 warning when building with Visual C++. * build\msvc80\geos_lib\geos_lib.vcproj: Remove non-existing source files. 2008-05-20 20:45 Mateusz Loskot * [r2126] source/makefile.vc: Removed non-existing file entry: PreparedPolygonLineIntersects.obj. 2008-05-20 20:33 Mateusz Loskot * [r2125] * bootstrap.bat: Added script generating headers for use with Visual C++ compiler. DO NOT include this script in GEOS source distribution. * source/makefile.vc: Do not make copies of 3 dynamic headers but let users to use bootstrap.bat instead. 2008-02-07 22:59 Frank Warmerdam * [r2123] make sure makefile.vc gets distributed 2008-02-06 22:17 Frank Warmerdam * [r2122] try to fix up the files include in distribution, and remove unused files from Makefile.vc (#175) 2008-01-30 22:34 Ben Jubb * [r2120] Added documentation, for benefit of doxygen. 2008-01-30 22:30 Ben Jubb * [r2119] deleted out-commented line. 2008-01-30 22:29 Ben Jubb * [r2118] removed ref to PreparedPolygonLineIntersection 2008-01-30 22:18 Ben Jubb * [r2117] Removed refs to PreparedPolygonLineIntersection. 2008-01-30 22:17 Ben Jubb * [r2116] Deleted. not used, not needed. 2008-01-30 19:09 Ben Jubb * [r2115] Added for benefit of doxygen. 2008-01-29 17:55 Ben Jubb * [r2114] Some small changes to improve the memory management. These changes plug a few leaks, but not all. 2008-01-29 17:49 Ben Jubb * [r2113] Fix a bug in the shortcut test for containment in a rectangle. This test wasn't correctly testing for case of a point on the boundary. Was also a bug in JTS (now fixed). 2008-01-29 17:37 Ben Jubb * [r2112] Patch to fix bug in ticket #171 2008-01-22 19:34 Ben Jubb * [r2111] Updated for VC to give correct version (3.1.0-CAPI-1.5.0). 2008-01-18 00:37 Ben Jubb * [r2110] Added to CAPI interface, cleared CAPI_INTERFACE_REV, bumped AGE & CURRENT 2008-01-18 00:35 Ben Jubb * [r2109] Fixed a bug in the handling of line strings with repeated points. -This line, and those below, will be ignored-- M MonotoneChainBuilder.cpp 2008-01-17 19:15 Ben Jubb * [r2108] Fixed a misspelling, GEOSPreparedContainsProperty => GEOSPreparedContainsProperly 2008-01-16 18:36 Frank Warmerdam * [r2107] updated to include post 3.0 classes 2008-01-09 23:49 Ben Jubb * [r2106] Added support for prepared geometry 2008-01-09 23:48 Ben Jubb * [r2105] removed extraneous 'using namespace' 2008-01-03 21:11 Ben Jubb * [r2104] commented out some delete's in MCIndexSegmentSetMutualIntersector::addToIndex, to fix a bug in prepared contains() predicate. 2008-01-02 23:23 Sean Gillies * [r2102] Conditionally add swig/python,ruby to SUBDIRS 2007-12-22 00:04 Mateusz Loskot * [r2101] Updated configuration of experimental builder based on Boost.Build. GEOS compiles with bjam successfully as static library. 2007-12-21 23:50 Mateusz Loskot * [r2100] Updated Visual C++ makefiles with new submissions from Ben. Now, new GEOS features compiles with NMAKE too. 2007-12-21 23:31 Mateusz Loskot * [r2099] Removed SimplePointInAreaLocator.h from algorithm/Makefile.am (header migrated to algorithm/locate). 2007-12-21 23:26 Mateusz Loskot * [r2098] Added comment about deprecated translation units in source/algorithm. 2007-12-21 23:26 Paul Ramsey * [r2097] remove trailing backslash 2007-12-21 23:21 Mateusz Loskot * [r2096] Updated svn:ignore property. 2007-12-21 23:18 Mateusz Loskot * [r2095] Fixed extra qualifications in /geom/prep/PreparedPolygonContainsProperly. 2007-12-21 23:12 Mateusz Loskot * [r2094] Fixed extra qualifications in PreparedGeometryFactory class. 2007-12-21 22:57 Mateusz Loskot * [r2093] Fixed GeometryTypeId misused in geos/geom/util/ComponentCoordinateExtracter.h. 2007-12-21 22:49 Paul Ramsey * [r2092] remove .cpp files that weren't there before 2007-12-21 22:49 Mateusz Loskot * [r2091] Reverted changes appled in r2089 to three files from source/geom. 2007-12-21 22:47 Paul Ramsey * [r2090] type subdir typo 2007-12-21 22:43 Mateusz Loskot * [r2089] Updated svn:ignore property. 2007-12-21 22:41 Mateusz Loskot * [r2088] Added missing header to CustomPointCoordinateSequence.cpp. 2007-12-21 22:40 Mateusz Loskot * [r2087] Removed unused SimplePointInAreaLocator.cpp. This unit migrated to algorithm/locate module. 2007-12-21 22:21 Paul Ramsey * [r2086] Updated configure.in with new locations. 2007-12-21 22:14 Mateusz Loskot * [r2085] Updated configure.in with new locations. 2007-12-21 22:12 Mateusz Loskot * [r2084] Updated configure.in with new locations. 2007-12-21 22:09 Mateusz Loskot * [r2083] Updated configure.in with new locations. 2007-12-21 22:07 Mateusz Loskot * [r2082] Updated configure.in with new locations. 2007-12-21 22:02 Paul Ramsey * [r2081] Add headers/geos/algorithm/locate to automake 2007-12-21 22:01 Paul Ramsey * [r2080] Add files to automake 2007-12-21 21:57 Paul Ramsey * [r2079] Added headers/index/intervalrtree to automake 2007-12-21 21:55 Paul Ramsey * [r2078] Added headers/geom/prep headers/geom/util to automake 2007-12-21 21:47 Paul Ramsey * [r2077] Added index/intervalrtree to automake 2007-12-21 21:43 Paul Ramsey * [r2076] added geom/util/ComponentCoordinateExtracter.h 2007-12-21 21:40 Paul Ramsey * [r2075] Add geom/prep to automake 2007-12-21 21:36 Paul Ramsey * [r2074] Add algorithm/location to automake 2007-12-21 21:31 Paul Ramsey * [r2073] Added new files 2007-12-21 20:50 Ben Jubb * [r2072] 2007-12-21 20:48 Ben Jubb * [r2071] 2007-12-21 20:47 Ben Jubb * [r2070] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:47 Ben Jubb * [r2069] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:44 Ben Jubb * [r2068] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:44 Ben Jubb * [r2067] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:42 Ben Jubb * [r2066] modified because SimplePointInAreaLocator.h moved 2007-12-21 20:41 Ben Jubb * [r2065] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:41 Ben Jubb * [r2064] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:40 Ben Jubb * [r2063] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:39 Ben Jubb * [r2062] modified because SimplePointInAreaLocator.h moved 2007-12-21 20:38 Ben Jubb * [r2061] Moved into geos::algorithm::locate 2007-12-21 20:37 Ben Jubb * [r2060] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:35 Ben Jubb * [r2059] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:34 Ben Jubb * [r2058] Added from JTS 1.9 to support prepared geometry 2007-12-21 20:33 Ben Jubb * [r2057] changed destructor to be virtual 2007-12-21 20:31 Ben Jubb * [r2056] Added a covers() predicate, from JTS 1.9, to support prepared geometry 2007-12-21 20:30 Ben Jubb * [r2055] changed IsRectangle to be public 2007-12-21 20:03 Ben Jubb * [r2054] Added a covers() predicate, from JTS 1.9, to support prepared geometry 2007-12-21 20:00 Ben Jubb * [r2053] Moved from geos::algorithm as in JTS 1.9 2007-12-21 19:55 Ben Jubb * [r2052] New namaspace geos::algorithm::locate, as in JTS 1.9.. 2007-12-21 19:52 Ben Jubb * [r2051] Added a public constructor, and a method to bring in line with JTS 1.9. Changed namespace to geos::algorithm::locate 2007-12-21 18:44 Paul Ramsey * [r2050] version numbering for next release (3.1.0) 2007-12-21 18:41 Paul Ramsey * [r2046] 3.0.0 release 2007-12-19 20:18 Mateusz Loskot * [r2045] Improved warning message about using DEPRECATED headers 2007-12-17 23:09 Mateusz Loskot * [r2044] Fixed std::tolower usage in XMLTester.cpp (Ticket #163). 2007-12-17 23:05 Mateusz Loskot * [r2043] Replaced finite function with std::numeric_limits (Ticket #162). 2007-12-17 21:52 Mateusz Loskot * [r2042] source\Makefile.vc: Fixed MSVC_VER condition for Microsoft Visual C++ 2008 (9.0). 2007-12-13 16:11 Mateusz Loskot * [r2041] Added Id keyword at the top of ChangeLog file. 2007-12-13 16:09 Mateusz Loskot * [r2040] * build\msvc80\geos_unit\geos_unit.vcproj: fixed post-build event * source\geom\GeometryCollection.cpp: removed unreachable code, shorten exception message. * source\geom\Geometry.cpp: purified condition based on dynamic_cast * tests\unit\geom\GeometryFactoryTest.cpp: use std::size_t instead of int where unsigned integral type required. 2007-12-09 00:02 Mateusz Loskot * [r2038] Added test suite for class geos::precision::SimpleGeometryPrecisionReducer. 2007-12-08 22:59 Mateusz Loskot * [r2037] Updated svn:keyword property. 2007-11-26 16:26 Mateusz Loskot * [r2036] Added geos.vsprops - property sheet for Visual C++ projects. 2007-11-26 15:19 Mateusz Loskot * [r2035] Added common Property Sheet for Visual C++ projects where Python and Ruby macros/locations are defined. Fixed include of Python.h, see Ticket #164 for details. 2007-11-26 06:21 Mateusz Loskot * [r2034] Updated svn:ignore patterns. 2007-11-26 06:16 Mateusz Loskot * [r2033] Enabled target copying version.h.vc and geos_c.h.vc to headers used by Visual C++. Added test if version.h.vc is used with Visual C++. 2007-11-23 02:33 Mateusz Loskot * [r2032] A bit of purification with explicit casting int to bool type. 2007-11-02 22:41 Paul Ramsey * [r2031] urls updated to point to osgeo locations 2007-11-02 22:17 Paul Ramsey * [r2030] add the web site content to svn for collaborative management 2007-09-21 17:42 Charlie Savage * [r2029] Update the CAPI and GEOS version numbers based on Reader/Writer additions to the CAPI and EWKB support for the C++ api. 2007-09-21 17:40 Charlie Savage * [r2028] Updated the SWIG bindings and tests to use the new Reader/Writer classes exposed in the CAPI. 2007-09-21 17:40 Charlie Savage * [r2027] Update the CAPI to expose WKTReader/WBTWriter and WKBReader/WBKWriter in the CAPI. This is an improvement over the existing API since it avoids the use of the static variable used to control byte order and # of dimenions, and gives clients more control over the creation/destruction of readers and writers. Finally, exposed the ability to output the EWKB format (set SRID to true in the WKBWriter). 2007-09-21 17:35 Charlie Savage * [r2026] Switched back to using < because the fuzzy comparison now in use trips assertion errors in VC++. See comments in code for more information. Note this change may cause problems. Strk left a note in the code saying that the '<' comparison sometimes gives unstable results. But that seems better than an assertion failure. 2007-09-21 17:32 Charlie Savage * [r2025] Updated the WKBWriter so it can output EWKB format similar to PostGIS. Also added a few getter/setter methods that allow clients to specify the reader's number of dimensions, byte order and whether srid values should be output. These getters/setters make it easier to wrap the reader in the CAPI. 2007-09-14 15:34 Charlie Savage * [r2024] 2007-09-14 15:34 Charlie Savage * [r2023] Told SVN to ignore MSCV++ Python swig build directories. 2007-09-14 15:25 Charlie Savage * [r2022] Set unknown SRID values to 0 instead of -1 to be more consistent with the rest of GEOS (srid values are initialized to 0 by default). 2007-09-11 02:02 Charlie Savage * [r2021] Don't include config.h for MSVC++ builds. 2007-09-07 17:32 Charlie Savage * [r2020] The test for SWIG was incorrect. Fixed by patch from Mark Cave-Ayland. 2007-09-06 23:24 Charlie Savage * [r2019] Applied patch from Mark Cave-Ayland's to make older versions of MingW that don't have struct timezone defined compile again. Also fixed issues with more recent versions of MingW that don't correctly compile with the -ansi compiler switch. 2007-09-06 23:22 Charlie Savage * [r2018] Applied patches from Mark Cave-Ayland's that reorganize/improve the SWIG support in the generated configure file.\ 2007-08-31 20:44 Charlie Savage * [r2017] For MSVC++ builds the CAPI version was set in geos_c.cpp instead of geos_c.h and it was set incorrectly. This patch fixes the MSVC++ version number and centralizes the various versoin #defines in the geos_c.h. 2007-08-31 20:18 Charlie Savage * [r2016] Update swig makefiles to make the wrappers dependent on the SWIG interface files even if SWIG is disabled. Doing this means that Make will correctly recognize that a user has modified an I file, but that the .cxx wrapper cannot be regenerated since SWIG is not available. 2007-08-30 20:06 Charlie Savage * [r2015] MingW now includes the gettimeofday function - so reworked includes to only use custom version when building with VC++. 2007-08-30 17:00 Charlie Savage * [r2014] Added RUBY_BIN_DIR to autoconf macros - simplified auto make input file for ruby bindings. 2007-08-30 06:19 Charlie Savage * [r2013] The last attempt to fix this file failed - instead keep the code that queries the swig libraries but use sed to merge multiple lines together. If this is not done, then the swig output causes ./configure to blow up on msys. 2007-08-30 05:31 Charlie Savage * [r2012] Fixes sed issue with swig on msys. For more info see: http://lists.refractions.net/pipermail/geos-devel/2007-August/002956.html 2007-08-30 03:18 Charlie Savage * [r2011] Changed from dos to unix line feeds. 2007-08-29 01:41 Charlie Savage * [r2010] New VC++ project for the python SWIG bindings. 2007-08-29 01:29 Charlie Savage * [r2009] Ruby SWIG bindings - mapped eql? to == so that you can do point == point2 in ruby. Removed a hard-coded path from VC++ project. Updated out-of-date copyright notices for no particularly good reason. 2007-08-28 21:29 Charlie Savage * [r2008] Added release as an ignored directory for VC++, similar to the debug directory. 2007-08-28 21:28 Charlie Savage * [r2007] Added new ruby VC++ project to solution file. 2007-08-28 21:27 Charlie Savage * [r2006] Fixed c api include for VC++ - it should be #include instead of #include . 2007-08-28 21:27 Charlie Savage * [r2005] Added new ruby VC++ project to solution file. 2007-08-28 21:26 Charlie Savage * [r2004] Follow lead of geos_lib project - copy geos/geos_c.h.in to geos/geos_c.h when building with VC++. 2007-08-28 21:25 Charlie Savage * [r2003] Added new vc++ project for building ruby bindings. Its not perfect since it hard-codes the path to Ruby, but its enough to get one started. 2007-08-28 21:22 Charlie Savage * [r2002] Updated SWIG wrappers based on changed interface file. Also generated with SWIG 1.3.31 2007-08-28 20:42 Charlie Savage * [r2001] SWIG bindings - updated Ruby tests based on name changes. 2007-08-28 20:41 Charlie Savage * [r2000] Updated Ruby swig bindings to more closely match Ruby style names. So eql? instead of equals, dimensions instead of get_dimensions, etc. 2007-08-28 20:40 Charlie Savage * [r1999] Exposed Geometry::Clone method in SWIG bindings. Added check for NULL string in geomFromWKT wrapper. 2007-08-23 20:35 Paul Ramsey * [r1998] Memory leak patches from Robert Coup 2007-08-22 23:45 Mateusz Loskot * [r1997] Cleaned compilation warnings from VC++. 2007-06-11 07:43 Mateusz Loskot * [r1996] Replaced post-increment operators with pre-increment operators where standard iterators are incremented in loops. NOTE: Prefer pre-incr. over post-inc. when working with standard iterators. 2007-06-11 07:39 Mateusz Loskot * [r1995] Added unit test for geos::operation::IsSimpleOp class. 2007-06-10 13:03 Mateusz Loskot * [r1994] Updated tests/unit/Makefile.am with new files. 2007-06-10 11:53 Mateusz Loskot * [r1993] Added unit test for geos::algorithm::CGAlgorithms::computeOrientation() function. 2007-06-10 11:29 Mateusz Loskot * [r1992] Updated svn:ignore property for the whole tree adding VC++ and Windows specific patterns. 2007-06-10 11:18 Mateusz Loskot * [r1991] Added unit test for CGAlgorithms::isCCW() function. 2007-06-10 11:08 Mateusz Loskot * [r1990] Added unit test for geos::algorithm::ConvexHull. 2007-06-10 11:03 Mateusz Loskot * [r1989] Added custom operators for static and dynamic casts of pointers wrapped with std::auto_ptr type. 2007-06-08 17:13 Mateusz Loskot * [r1988] Identified test case failing because of geos::index::strtree::yComparator() instability. 2007-06-08 17:10 Mateusz Loskot * [r1987] Analysis of instability of the yComparator, there are some new important questions to answer. 2007-06-08 15:27 Mateusz Loskot * [r1986] Cleaned signed/unsigned types mixtures, got rid from annoying compiler warnings. 2007-06-08 14:50 Mateusz Loskot * [r1985] Applied Konstantin Baumann's suggestion about including version.h in C API header for Visual C++. 2007-06-08 14:50 Mateusz Loskot * [r1984] Applied Konstantin Baumann's suggestion about including version.h in C API header for Visual C++. 2007-06-01 13:53 Mateusz Loskot * [r1983] Added Boost.Build configuration for GEOS (experimental). The idea is to enable users to build GEOS with bjam tool from Boost.Build package. 2007-06-01 13:43 Mateusz Loskot * [r1982] Set missing svn:keywords property. 2007-06-01 13:06 Mateusz Loskot * [r1981] Applied patch with pre-build events generating platform.h and version.h headers. Thanks to Konstantin Baumann for this patch. 2007-05-06 02:42 Mateusz Loskot * [r1980] Updated svn:ignore property for build\msvc80. 2007-05-06 02:40 Mateusz Loskot * [r1979] Added source/headers/geos/version.h.vc file for Visual C++ compiler. 2007-04-22 04:44 Mateusz Loskot * [r1978] Added assertion validating ordinateIndex in setOrdinate() function. Extended GEOSCoordSeqTest with swapped and non-swapped calls of coordiantes assignment functions. 2007-04-15 18:02 Mateusz Loskot * [r1977] Added detection of glibtoolize under Mac OS X. 2007-03-05 09:58 Sandro Santilli * [r1976] Add new testcases by Carl Anderson 2007-02-26 10:46 Sandro Santilli * [r1975] Patch by Tom Elwertowski: * source/inlines.cpp: fix for MingW32 builds. 2007-02-21 10:14 Sandro Santilli * [r1974] Patch by Carl Anderson: * source/operation/buffer/SubgraphDepthLocater.cpp (findStabbedSegments): Implement short-circuit to avoid inner defective logic. Fixes badguy3.xml 2007-02-21 10:12 Sandro Santilli * [r1973] * tests/xmltester/: Makefile.am, badguy3.xml: Added simplified version of nasty buffer bug test. 2007-02-08 23:33 Sandro Santilli * [r1972] Patch by Mark Cave-Ayland: * configure.in: Allow configure to continue with use_python set to false if a python binary is not found, as per http://sources.redhat.com/automake/automake.html#Python. 2007-02-07 00:34 Sandro Santilli * [r1971] General refactoring aimed at making the code cleaner to read and maintain; use iterators rather then random accessing containers to allow easy future switch to std::list from std::vector; use a tolerance-based strict weak ordering operator for sorting child boundables in STRtree, this fixes the heisenbug when building with inlines disabled. 2007-02-06 02:05 Sandro Santilli * [r1970] * tests/unit/simplify/DouglasPeuckerSimplifierTest.cpp: Expect result of POLYGON simplification to always be a polygon, even if collapsed to the empty geom. 2007-02-06 01:57 Sandro Santilli * [r1969] * operation::buffer::BufferBuilder, operation::buffer::BufferOp: Fixed buffer operation to always return polygonal geometry 2007-02-03 02:18 Paul Ramsey * [r1967] 3.0.0rc4 tagging 2007-02-01 11:11 Sandro Santilli * [r1966] * operation::buffer::BufferOp: set MAX_PRECISION_DIGITS so to match JTS. 2007-01-26 01:19 Sandro Santilli * [r1965] * tests/xmltester/: Makefile.am, stmlf-cases-20070119.xml: New overlay test. 2007-01-26 00:57 Sandro Santilli * [r1964] * tests/xmltester/XMLTester.cpp: improved buffer result validator. * source/operation/buffer/BufferBuilder.cpp (computeNodedEdges): remove repeated points from noded SegmentStrings, skip collapsed edges. 2007-01-17 11:59 Sandro Santilli * [r1963] New testcase for bug fixed by previous commit. 2007-01-17 01:05 Sandro Santilli * [r1962] * source/index/strtree/STRtree.cpp (yComparator): Use static_cast<> and make code more readable. A side effect seems to be fixing a segfault :! 2007-01-17 00:45 Sandro Santilli * [r1961] * source/headers/geos/index/strtree/STRtree.h (centreY): const-corrected. 2007-01-16 14:12 Sandro Santilli * [r1960] * tests/xmltester/XMLTester.cpp: don't include catch-all headers. 2007-01-09 17:34 Sandro Santilli * [r1959] * source/operation/buffer/: Makefile.am, OffsetCurveVertexList.h: New helper class for OffsetCurveBuilder * operation::buffer::OffsetCurveBuilder: Move vertexlist management to external class. * tests/xmltester/: Makefile.am, TestBufferExternal.xml: added test for above changes (imported from JTS and modified to work with GEOS). * tests/xmltester/XMLTester.cpp: change buffer validator again: check area of topological difference between expected and obtained result to be smaller then 1/1000 of expected geometry area. 2007-01-09 15:08 Sandro Santilli * [r1958] * source/geom/CoordinateArraySequence.cpp, source/headers/geos/geom/CoordinateSequence.h, source/headers/geos/geom/CoordinateArraySequence.h: add(Coordinate, bool) made a virtual method and overrridden for CoordinateArraySequence, for better performance (single virtual call vs. multiple); added front() and back() methods. 2007-01-09 10:27 Sandro Santilli * [r1957] * tests/xmltester/XMLTester.cpp: add areatest to buffer test handler. 2007-01-05 01:01 Sandro Santilli * [r1956] * configure.in: prepared for version to 3.0.0rc4, fixed swig python errors as suggested by hint (AM_PATH_PYTHON). 2007-01-04 22:43 Sandro Santilli * [r1955] * configure.in, swig/geos.i.in, swig/geos.i: geos.i generated at configure time from geos.i.in (so we don't have to manually update versions there). 2007-01-04 22:38 Sandro Santilli * [r1954] Patch by dev-zero at gentoo dot org: * swig/geos.i: use unsigned int when CAPI signatures expect unsigned int (not size_t). 2007-01-03 20:11 Sandro Santilli * [r1953] * tests/xmltester/: fme.xml, Makefile.am: added buffer testcase. 2007-01-03 20:06 Sandro Santilli * [r1952] * tests/xmltester/XMLTester.cpp: use a tolerance of 10E-6 for buffer validation (~10cm at worst when using latlong projections); create sql tables with oid to work around a bug in qgis 0.7.4. 2007-01-03 19:18 Sandro Santilli * [r1951] Applied patch by Mark Cave-Ayland : * source/inlines.cpp, source/algorithm/HCoordinate.cpp: Fixes for MingW builds. See geos-devel/2007-January/002766.html. 2007-01-03 14:56 Sandro Santilli * [r1950] * source/operation/buffer/BufferOp.cpp (bufferReducedPrecision): Fixed computation of reduced PrecisionModel scale. 2006-12-18 20:04 Sandro Santilli * [r1949] * tests/xmltester/robustness.xml: added testcase reported to fail with 2.2.3 on postgis-users/2006-November/014013.html. 2006-12-18 18:44 Sandro Santilli * [r1948] Geometry snapping synced with JTS. 2006-12-18 14:27 Sandro Santilli * [r1947] * HOWTO_RELEASE: add ChangeLog's release mark step. 2006-12-18 14:19 Sandro Santilli * [r1946] * source/precision/GeometrySnapper.cpp (computeSnapTolerance): properly compute snap tolerance for fixed precision geometries. * tests/xmltester/: Makefile.am, TestRobustOverlayFixed.xml: new test for fixed precision snapping. 2006-12-15 10:50 Sandro Santilli * [r1945] release 3.0.0rc3 marked 2006-12-14 19:12 Paul Ramsey * [r1943] bumped version numbers for 3.0.0rc3 2006-12-13 11:05 Mateusz Loskot * [r1942] Updated makefile and project files for Visual C++. 2006-12-13 10:55 Sandro Santilli * [r1941] Updated port information. 2006-12-13 10:51 Sandro Santilli * [r1940] * precision::GeometrySnapper, precision::LineStringSnapper: Updated port information. 2006-12-11 17:42 Sandro Santilli * [r1939] * source/headers/geos/noding/SegmentIntersector.h: added virtual isDone() function, always returning false by default. * source/noding/MCIndexNoder.cpp (intersectChains): short-circuit from JTS-1.8, based on the new SegmentIntersector::isDone() method. * source/noding/Makefile.am, source/noding/FastNodingValidator.cpp, source/noding/SingleInteriorIntersectionFinder.cpp, source/headers/geos/noding/Makefile.am, source/headers/geos/noding/FastNodingValidator.h, source/headers/geos/noding/SingleInteriorIntersectionFinder.h: New ports from JTS-1.8-cvs. * source/headers/geos/geomgraph/EdgeNodingValidator.h: use a FastNodingValidator rather then a simple NodingValidator. 2006-12-07 10:45 Sandro Santilli * [r1938] * source/headers/geos/algorithm/: CentralEndpointIntersector.h, Makefile.am: new port from JTS-1.8. * algorithm::LineIntersector: robustness improvements from JTS-1.8. 2006-12-05 11:22 Mateusz Loskot * [r1937] Fixed indentantion in tests/unit/capi. 2006-12-05 11:10 Mateusz Loskot * [r1936] Fixed typos in changelog. 2006-12-05 11:05 Mateusz Loskot * [r1935] Set svn:keyword property on CAPI tests. 2006-12-05 11:02 Mateusz Loskot * [r1934] Purifying CAPI unit tests. 2006-12-05 10:59 Mateusz Loskot * [r1933] Added CAPI tests to VC++ project. 2006-12-05 10:42 Sandro Santilli * [r1932] * source/operation/overlay/OverlayOp.cpp: Use EdgeNodingValidator instead of OverlayResultValidator (faster and more effective). Note that compile-time defines can select use of either or both ones. * source/headers/geos/geom/BinaryOp.h: be quiet if not in DEBUG mode. 2006-12-05 09:59 Sandro Santilli * [r1931] * noding::NodingValidator.h: throw TopologyException rather then a generic GEOSException. 2006-12-04 12:41 Sandro Santilli * [r1930] * source/headers/geos/geomgraph/EdgeNodingValidator.h: fix members initialization order. 2006-12-04 11:38 Sandro Santilli * [r1929] * geomgraph::EdgeNodingValidator: minor cleanup to use references args instead of pointers for method that doesn't handle NULLs anyway. 2006-12-04 10:31 Sandro Santilli * [r1928] * tests/unit/capi/: GEOSCoordSeq.cpp => GEOSCoordSeqTest.cpp * tests/unit/capi/GEOSSimplifyTest.cpp: new test for GEOSSimplify (just a test for bug #134). * source/simplify/DouglasPeuckerLineSimplifier.cpp (simplify): don't try to simplify empty coordinate lists. Fixes bug #134. 2006-12-04 10:14 Sandro Santilli * [r1927] Other tests using setOrdinate instead of set{X,Y,Z} 2006-12-04 10:12 Sandro Santilli * [r1926] * source/geom/CoordinateArraySequence.cpp (setOrdinate): fix bug #133. 2006-12-04 10:00 Sandro Santilli * [r1925] * tests/unit/capi/GEOSCoordSeq.cpp: add test for bug #133 (failing). 2006-12-04 09:57 Sandro Santilli * [r1924] * tests/unit/geom/CoordinateArraySequenceTest.cpp: added tests for setOrdinate() 2006-11-30 14:49 Sandro Santilli * [r1923] * tests/unit/: Makefile.am, capi/GEOSCoordSeq.cpp: new experimental test for C-API GEOSCoordSeq. * capi/geos_c.cpp (GEOSCoordSeq_create): removed suspicious static cast. 2006-11-28 19:13 Mateusz Loskot * [r1922] Added Visual C++ 2005 project files. 2006-11-23 20:17 Sandro Santilli * [r1921] * source/geom/Point.cpp (equalsExact): don't segfault on empty points. Fixes bug #132. 2006-11-23 12:25 Sandro Santilli * [r1920] Added short descripion of testcases provenience 2006-11-22 20:29 Sandro Santilli * [r1919] * tests/xmltester/: stmlf-cases-20061020.xml, Makefile.am: add more robustness testcases. 2006-11-22 12:26 Sandro Santilli * [r1918] Patch by dron@ak4719.spb.edu: * autogen.sh: call 'autoheader' after 'aclocal'. Fixes bug #131 2006-11-18 15:30 Mateusz Loskot * [r1917] Fixed path to geos_c.h in source/makefile.vc. 2006-11-15 18:26 Sandro Santilli * [r1916] * configure.in: don't generate geos_c.h.vc * source/Makefile.vc: don't generate geos_c.h and version.h * source/headers/geos/version.h.vc, capi/geos_c.h.vc.in: removed, will NOT be needed by Makefile.vc * source/headers/geos/Makefile.am: distribute version.h * capi/Makefile.am: distribute geos_c.h 2006-11-15 14:42 Sandro Santilli * [r1915] * capi/geos_c.h.in: hopefully fixed GEOS_DLL use. 2006-11-15 11:28 Sandro Santilli * [r1914] * capi/geos_c.cpp (GEOSGeom_getDimensions): Fix a segfault on empty geometry input (fix bug #126). 2006-11-11 05:32 Paul Ramsey * [r1913] Retreived original .vc file and put in MACRO substitutions. Somehow GNU version replaced .vc version during file shuffles to get macros in. 2006-11-10 18:24 Sandro Santilli * [r1912] fixed timewarp 2006-11-10 17:56 Paul Ramsey * [r1911] noted .vc change 2006-11-10 17:55 Paul Ramsey * [r1910] Made sure geos_c.h.vc is part of 'make dist' since VC users won't have .configure 2006-11-10 17:38 Paul Ramsey * [r1909] Added substitution strings to .in files for .vc generation. 2006-11-10 17:35 Paul Ramsey * [r1908] Changes for capi .vc generation 2006-11-10 14:50 Howard Butler * [r1907] update 2006-11-09 09:10 Sandro Santilli * [r1906] * test/xmltester/XMLTester.cpp: improved 'testarea' test. 2006-11-08 11:54 Sandro Santilli * [r1905] added 'release-separator' tag 2006-11-08 11:51 Sandro Santilli * [r1904] * tests/xmltester/robustness.xml: made test safe to run by using the new 'areatest' operation; added new testcases just raised on the mailing list. * tests/xmltester/Makefile.am: robustness.xml is now safe to run, so run it on make check. 2006-11-08 10:40 Sandro Santilli * [r1903] * source/headers/geos/geom/BinaryOp.h: enable COMMONBITS-removal heuristic so it is attempted before geometry snapping. 2006-11-05 20:34 Sandro Santilli * [r1900] * capi/Makefile.am: distribute files needed for testing, proper cleanup (make distcheck works now) 2006-11-05 00:24 Charlie Savage * [r1899] Updated ruby swig wrapper for changes in header files. 2006-11-05 00:24 Charlie Savage * [r1898] Updated python swig wrapper for changes in header files. 2006-11-05 00:23 Charlie Savage * [r1897] Fixes for changes in header files. 2006-11-03 12:35 Sandro Santilli * [r1896] redirect 'diff' output to stderr 2006-11-03 10:54 Sandro Santilli * [r1895] hopefully fixed proper quoting 2006-11-03 10:30 Sandro Santilli * [r1894] Report non-zero return from ./geostest run 2006-11-02 10:08 Sandro Santilli * [r1893] * source/headers/geos/geom/BinaryOp.h: disable debugging output by default. 2006-11-02 10:02 Sandro Santilli * [r1892] * capi/geostest.c: updated to use the new GEOSGeometry typedef, so to build w/out warnings and fully respecting current const specification. 2006-11-02 09:48 Sandro Santilli * [r1891] * capi/geos_c.cpp, capi/geos_c.h.in: const-corrected and documented GEOSPolygonize function. 2006-11-02 09:38 Sandro Santilli * [r1890] * capi/test.expected: updated expected version * capi/testrunner.sh: be happy with geostest running w/out segfaulting, still run diff for reference. 2006-11-02 09:33 Sandro Santilli * [r1889] * configure.in: updated versions to 3.0.0rc2 / CAPI-1.3.0 2006-11-02 08:32 Sandro Santilli * [r1888] Patch by Markus Schaber : * capi/geos_c.h.in: add GEOSGeometry and GEOSCoordSequence typedef, to unhide the pointer type and allow fine-grained const specification, use the new typedefs in function signatures (fix some const-specifications accordingly) * capi/geos_c.cpp: define GEOSGeometry and GEOSCoordSequence for cross-checking of types in header. 2006-10-30 15:14 Sandro Santilli * [r1887] Patch by Markus Schaber * capi/geos_c.cpp: more focused 'using' directives. * capi/geos_c.h.in: let the enum visible by geos_c.cpp now that there are no more name clashes. 2006-10-30 13:20 Sandro Santilli * [r1886] removed useless GEOSGeomTypes define 2006-10-30 13:00 Sandro Santilli * [r1885] reduce default verbosity 2006-10-30 12:49 Sandro Santilli * [r1884] * capi/geos_c.cpp: Remove a typedef which is also included via Header; Use dynamic_cast instead of C cast in 2 cases to allow the RTTI type check; Replace "geoms" temp vector in polygonizer function with a loop, this saves us at least one of the two vector copies; Drop 2 unneded const_cast occurences; Allow calling getNumGeometries against non-collections; 2 comment / whitespace cleanups. * capi/geos_c.h.in: Added a comment explaining ou #ifndef magic; Unified the two #ifndef into a single one. 2006-10-30 10:29 Sandro Santilli * [r1883] * capi/: test.expected, testrunner.sh, Makefile.am: Added a run of ./geostest as part of 'make check' 2006-10-30 10:15 Sandro Santilli * [r1882] Patch submitted by Markus Schaber ( reviewed and fixed ) * capi/: geos_c.cpp, geos_c.h.in: Changed the C-API implementation to actually include the header that's included by the clients, this allows the compiler to check declarations and implementation for consistency, fixed geos_c.cpp accordingly (const-correctness, mainly). 2006-10-30 09:49 Sandro Santilli * [r1881] * capi/geostest.c: added some checks of return from CAPI functions returning GEOSGeom (not all, just a few) 2006-10-27 11:54 Sandro Santilli * [r1880] Patch by Markus Schaber * algorithm::InteriorPointLine (ctor): take Geometry by const-pointer. * geom::Geometry (getInteriorPoint): made a const-method * operation::polygonize::Polygonizer: implement filter_ro rather then filter_rw, as it doesn't change the Geometry, propagated change to internal interfaces (add methods) 2006-10-26 09:22 Sandro Santilli * [r1879] * capi/geos_c.h.in: reverted all changes of 'int' types to 'size_t' types (the lib never changed, and still expects ints) 2006-10-24 16:54 Sandro Santilli * [r1878] * source/headers/geos/geom/BinaryOp.h: try original geoms first by default. 2006-10-24 16:53 Sandro Santilli * [r1877] * operation::overlay::OverlayResultValidator.cpp (isValid): run the test even if inputs and output are not areal. 2006-10-24 16:49 Sandro Santilli * [r1876] * operation::overlay::FuzzyPointLocator: eliminate non-polygonal components from consideration when testing the location of points. 2006-10-24 10:16 Sandro Santilli * [r1875] * precision::GeometrySnapper: snapPrecisionFactor augmented from 10e-12 to 10e-10. 2006-10-24 09:49 Sandro Santilli * [r1874] * precision::LineStringSnapper (findSegmentToSnap): return the *closest* segment, don't snap if the closest segment *intersects* the snap points, consider a distance of exactly snapTolerance as non-tolerated (got in sync with JTS) 2006-10-23 10:23 Sandro Santilli * [r1873] * source/headers/geos/geom/BinaryOp.h (SnapOp): document and add optional CBR step (snap after applying common bits removal - this is the default); (check_valid): add validity checker function. 2006-10-20 11:18 Sandro Santilli * [r1872] * noding::SegmentString: added notifyCoordinatesChange method. * noding::ScaledNoder: notify possible coordinates change to SegmentString after removing repeated points. 2006-10-19 18:26 Sandro Santilli * [r1871] * configure.in: use 'expr' for arithmetics (more portable) 2006-10-18 19:21 Mateusz Loskot * [r1870] Refactored Visual C++ makefiles. 2006-10-18 17:53 Mateusz Loskot * [r1869] Updated source\makefile.vc and source\dirlist.mk files. 2006-10-18 17:53 Mateusz Loskot * [r1868] Added top-level makefile.vc. 2006-10-18 14:28 Sandro Santilli * [r1867] fixed svn:ignore property 2006-10-18 12:08 Sandro Santilli * [r1866] disable non-JTS overlay result validators (to more closely track JTS at this stage) 2006-10-17 14:26 Sandro Santilli * [r1865] * source/headers/geos/geom/BinaryOp.h (SnapOp): fixed horrible bug applying overlay of first geom to itself :( 2006-10-17 10:15 Sandro Santilli * [r1864] really fixed 'extra tokens at end of #endif directive' warning 2006-10-17 10:10 Sandro Santilli * [r1863] fixed 'extra tokens at end of #endif directive' warning 2006-10-17 08:44 Sandro Santilli * [r1862] * capi/Makefile.am: don't directly link geostest against both libgeos.so and libstdc++ (should be derived by libgeos_c.so). 2006-10-12 15:33 Sandro Santilli * [r1861] * tests/bigtest/GeometryTestFactory.cpp, tests/bigtest/bigtest.h, tests/bigtest/TestSweepLineSpeed.cpp: fixed header inclusion, to reduce compiler noise. 2006-10-09 16:39 Sandro Santilli * [r1860] * source/headers/geos/geom/BinaryOp.h: always snap geoms to each-other before applying an overlay (temp hack). 2006-10-09 16:35 Sandro Santilli * [r1859] * source/operation/overlay/OverlayOp.cpp: enable all overlay result validators, make it disablable at compile time. 2006-10-05 10:58 Mateusz Loskot * [r1858] Added inclusion guards to geos_c.h files. 2006-10-05 09:46 Sandro Santilli * [r1857] increment areatest verbosity (needs -v -v) 2006-10-02 18:53 Howard Butler * [r1856] GEOSEnvelope wasn't in the PROTOTYPES section in geos_c.cpp 2006-09-27 07:48 Sandro Santilli * [r1855] updated tag item 2006-09-27 07:43 Sandro Santilli * [r1854] added info about svn tags 2006-09-19 06:54 Sandro Santilli * [r1853] Added include 2006-09-08 23:13 Paul Ramsey * [r1851] Added information about funders of the 3.0.0 series: Safe Software, Autodesk, Bavarian State Ministry of Agriculture and Forestry and the State Survey of Bavaria. 2006-09-08 09:38 Sandro Santilli * [r1850] updated 2006-09-08 09:31 Sandro Santilli * [r1849] more debugging output 2006-09-08 09:21 Sandro Santilli * [r1848] More testcases 2006-09-07 18:07 Sandro Santilli * [r1847] New unit test for OverlayResultValidator class 2006-09-07 18:07 Sandro Santilli * [r1846] more debugging output 2006-09-07 17:52 Sandro Santilli * [r1845] Added addVertices private method (unused, as in JTS, but possibly useful in the future) 2006-09-07 17:41 Sandro Santilli * [r1844] Added debugging code 2006-09-07 17:35 Sandro Santilli * [r1843] more testcases (added test for max distance of offset points) 2006-09-07 15:28 Sandro Santilli * [r1842] removed svn:executable prop from all .cpp files 2006-09-07 15:22 Sandro Santilli * [r1841] removed svn:executable property 2006-09-07 15:21 Sandro Santilli * [r1840] testing execute bit state 2006-09-07 12:17 Mateusz Loskot * [r1839] Set svn:keyword for $ expansion. 2006-09-07 11:34 Sandro Santilli * [r1838] Cleaned up OverlayResultValidator call (still disabled due to bugs) 2006-09-07 11:27 Sandro Santilli * [r1837] blindly return positive result if any input or output is not an area 2006-09-07 11:08 Sandro Santilli * [r1836] new test for FuzzyPointLocator 2006-09-07 10:30 Sandro Santilli * [r1835] Explicit values to LocationValue enum items. Removed CVS Log 2006-09-07 09:33 Sandro Santilli * [r1834] Removed catch-all headers inclusion and use of obsoleted Unload class 2006-09-07 09:24 Sandro Santilli * [r1833] updated 2006-09-07 09:23 Sandro Santilli * [r1832] comment cleanup 2006-09-07 09:01 Sandro Santilli * [r1831] Comments about ownership (and lifetime) of returned objects 2006-09-07 08:59 Sandro Santilli * [r1830] New DistanceOp unit test 2006-09-07 08:57 Sandro Santilli * [r1829] (computeMinDistancePoints): fixed invalid reference. 2006-09-07 08:23 Sandro Santilli * [r1828] don't giveup on automake failures (testing) 2006-09-06 18:44 Sandro Santilli * [r1827] Ops, overlay result validation erroenously committed 2006-09-06 18:41 Sandro Santilli * [r1826] new test for OffsetPointGenerator class 2006-09-06 18:37 Sandro Santilli * [r1825] Fixed uninitialized memory bug 2006-09-06 17:59 Sandro Santilli * [r1824] new test for FuzzyPointLocator class 2006-09-06 17:48 Sandro Santilli * [r1823] updated after GeometrySnapper interface change. 2006-09-06 17:26 Mateusz Loskot * [r1822] Set $ expansion for new files in 'overlay' module. 2006-09-06 17:22 Sandro Santilli * [r1821] Rest of Overlay validation classes. 2006-09-06 16:54 Mateusz Loskot * [r1820] Set svn:keyword property for Id keyword expansion. 2006-09-06 15:50 Sandro Santilli * [r1819] Fixed comments and includes 2006-09-06 15:33 Sandro Santilli * [r1818] new helper class for Overlay op validation. 2006-09-06 15:21 Sandro Santilli * [r1817] (getBoundary) memory allocations documented 2006-09-05 16:18 Sandro Santilli * [r1816] updated (last commit log was bogus, refer to ChangeLog entry) 2006-09-05 16:07 Sandro Santilli * [r1815] (OverlayOp::checkObviouslyWrongResult): exceptions messages rewording 2006-08-31 23:13 Sandro Santilli * [r1814] (insertContained): fixed bug reported in geos-devel/2006-August/002541.html 2006-08-31 23:07 Sandro Santilli * [r1813] Reverted last two commits. Darwin host on buildbot seems to have its own problems... 2006-08-31 22:28 Sandro Santilli * [r1812] Ops, it was AM_CONFIG_HEADER the old version - still testing 2006-08-31 22:21 Sandro Santilli * [r1811] AC_CONFIG_HEADERS => AM_CONFIG_HEADER (to support older automake versions) 2006-08-04 20:30 Howard Butler * [r1810] version should be 3.0.0 instead of 3.3.0 2006-08-04 20:29 Howard Butler * [r1809] bump patch to rc1 2006-08-04 20:23 Howard Butler * [r1808] give makefile.vc some love 2006-08-04 16:40 Charlie Savage * [r1807] Updated SWIG bindings to expose the equalsExact and normalize methods. 2006-08-03 23:43 Charlie Savage * [r1806] Two changes needed to include the correct definitions for compiling geos using MingW/msys on Windows. 2006-08-03 22:46 Sandro Santilli * [r1805] try to keep text within 80 cols 2006-08-03 22:24 Charlie Savage * [r1804] Changed configure.in to use *nix line feeds. 2006-08-03 22:17 Charlie Savage * [r1803] Mistakenly used Geometry* in C api headers instead of GEOSGeom. 2006-08-03 22:13 Charlie Savage * [r1802] Removed native line endings for configure.in since CR/LF does not work on Windows under msys. 2006-08-03 22:02 Charlie Savage * [r1801] Added equalsExact and normalize to the c api as discussed on the mailing list (http://geos.refractions.net/pipermail/geos-devel/2006-July/002452.html). 2006-08-03 21:34 Charlie Savage * [r1800] Updated build scripts so that ruby/geos_wrap.cxx, python/geos_wrap.cxx and python/geos.py are removed by make maintainer-clean but not make clean. 2006-08-03 16:28 Mateusz Loskot * [r1799] Fixed Bug #90 2006-08-03 16:18 Charlie Savage * [r1798] Added SWIG generated wrapper files for Ruby and Python 2006-07-27 06:18 Mateusz Loskot * [r1797] Added svn:ignore property to ignore 'geos-3.0.0rc1' dir (testing commit access to SVN). 2006-07-26 19:06 Sandro Santilli * [r1795] Removed .cvsignore files from repository 2006-07-26 17:51 Sandro Santilli * [r1794] * capi/Makefile.am: forced link of geostest against stdc++ lib * tests/xmltester/XMLTester.cpp: added include (for fabs use) 2006-07-26 15:28 Sandro Santilli * [r1776] Added geometry snapping heuristic 2006-07-25 20:45 Sandro Santilli * [r1775] Made autogen.sh errors more visible 2006-07-21 19:37 Charlie Savage * [r1773] Added note about inclusion of version.in.vc. See http://geos.refractions.net/pipermail/geos-devel/2006-July/002463.html for more info. 2006-07-21 17:59 Sandro Santilli * [r1772] Added test for GeometrySnapper 2006-07-21 17:59 Sandro Santilli * [r1771] Fixed preprocessor directive use 2006-07-21 17:09 Sandro Santilli * [r1770] Added new precision::LineStringSnapper class + test and precision::GeometrySnapper (w/out test) 2006-07-21 17:05 Sandro Santilli * [r1769] added operator<< for CoordinateList class 2006-07-21 17:00 Sandro Santilli * [r1768] Added another distance() test 2006-07-21 16:45 Mateusz Loskot * [r1767] Wrapped FIXME message with #warning directive to shout about potential headers removal in future. 2006-07-21 14:53 Sandro Santilli * [r1766] CoordinateList class re-introduced, for list-based ops (not strictly mapped to JTS version, not yet at least) 2006-07-21 14:49 Sandro Santilli * [r1765] Fixed typo in comment 2006-07-21 08:33 Sandro Santilli * [r1764] Removed blank space after backslash (automake complained) 2006-07-19 02:43 Charlie Savage * [r1763] Added veresion.h.vc as EXTRA_DIST to ensure it is packaged when doing make dist. 2006-07-15 19:36 Charlie Savage * [r1762] Removed python test/cases directory (tests are now just in tests directory). 2006-07-13 08:02 Charlie Savage * [r1761] Updated ChangeLog to note additional SWIG tests and integration with the GEOS build system. 2006-07-13 07:49 Charlie Savage * [r1760] Updated version number to 3.0.0rc1-CAPI-1.1.1 to match the autoconf generated files. 2006-07-13 07:38 Charlie Savage * [r1759] Fixed spelling mistake in test task. 2006-07-13 07:36 Charlie Savage * [r1758] Removed dependency on README.txt since it has been removed. 2006-07-13 07:35 Charlie Savage * [r1757] New tests for the buffer operation. 2006-07-13 07:29 Charlie Savage * [r1756] Added SWIG Python and Ruby bindings back into the main GEOS build system. 2006-07-13 07:27 Charlie Savage * [r1755] Updated extra_dist for test directories. 2006-07-13 07:20 Charlie Savage * [r1754] Remove the dependency on the cases subdirectory which is no longer needed. 2006-07-13 07:19 Charlie Savage * [r1753] Updated test suite to use the correct tests. 2006-07-13 07:16 Charlie Savage * [r1752] Removed old tests cases which are no longer valid (worked using the C++ api). 2006-07-13 07:14 Charlie Savage * [r1751] New Python test case to ensure creating coordinate sequences and geometries works correctly. 2006-07-13 07:14 Charlie Savage * [r1750] Removed README.txt files which are no longer applicable now that the SWIG bindings have been intergrated into the GEOS build system. 2006-07-13 07:13 Charlie Savage * [r1749] Renamed test class. 2006-07-13 07:09 Charlie Savage * [r1748] Removed old, unused code. 2006-07-13 07:09 Charlie Savage * [r1747] Added tyepmap to support creating polygons with holes. 2006-07-13 07:08 Charlie Savage * [r1746] Added default value for quadsegs parmeter in buffer operation. 2006-07-13 04:47 Charlie Savage * [r1745] Manually moved from parent directory. 2006-07-13 04:46 Charlie Savage * [r1744] Updated EXTRA_DIST to include python.i and geos.pth 2006-07-13 04:46 Charlie Savage * [r1743] Moved file to tests subdirectory. 2006-07-13 04:45 Charlie Savage * [r1742] Installation is now done by autoconf macros instead of setup.py 2006-07-13 04:39 Charlie Savage * [r1741] Cleaned up ruby.i, added licenxe to python.i, commented back in python.i into geos.i. 2006-07-13 04:09 Charlie Savage * [r1740] Added code to read xml test cases. 2006-07-13 04:08 Charlie Savage * [r1739] Added exception handling for results that return geometries. Added normalize and equalsExact, but for the moment they are commented out. 2006-07-13 03:59 Charlie Savage * [r1738] Changes to compile on VC++ - fully qualified polygon name. Should also work on MingW, will test next. 2006-07-12 23:17 Charlie Savage * [r1737] Disabled test_combinations.rb for the moment since it fails. 2006-07-12 23:16 Charlie Savage * [r1736] Fixed serious bug in geom_to_hex and geom_to_wkb type maps. Was using temporary variable instead of passed in variable. 2006-07-12 22:55 Charlie Savage * [r1735] Switched GeosBytesOrder to int in api signatures. 2006-07-12 22:11 Charlie Savage * [r1734] A number of changes to fix warning generated by gcc and to make sure the bindings compile for Python. 2006-07-12 22:11 Charlie Savage * [r1733] Updated Python SWIG makefile to build with the c api. 2006-07-12 22:10 Charlie Savage * [r1732] Minor change to fix gcc warning. 2006-07-12 22:10 Charlie Savage * [r1731] Updated Ruby SWIG makefile to build with the c api. 2006-07-12 21:03 Charlie Savage * [r1730] Fixed an error in the way GEOSByteOrder was declared. It is now an enum in geos_c.h 2006-07-12 19:10 Charlie Savage * [r1729] Added %rename directive so that GeomUnion is exposed as union is SWIG languages. 2006-07-12 19:08 Charlie Savage * [r1728] Updated tests for combinatins (union, intersection, etc.) and operaptions (buffer, centroid, etc.). 2006-07-12 19:07 Charlie Savage * [r1727] These tests are no longer needed. 2006-07-12 17:51 Charlie Savage * [r1726] Ported old tests for relations, such as intersects, touches, etc., to new swig bindings. 2006-07-12 08:30 Charlie Savage * [r1725] Added type map needed to create polygons with holes. Unfortunately, this is Ruby specific. It needs to be ported to Python next. 2006-07-12 08:29 Charlie Savage * [r1724] Removed wrapper classes and replace them with SWIG "fake" classes. This makes the interface cleaner, and makes memory management much easier. Also added area, dimension, length, getExteriorRing, getInteriorRingN methods. 2006-07-12 08:27 Charlie Savage * [r1723] Added test to read from wkb geometry - currently fails, needs more investigation. 2006-07-12 08:27 Charlie Savage * [r1722] Added tests for invalid geometries. 2006-07-12 08:27 Charlie Savage * [r1721] Updated ruby test suite. 2006-07-12 08:24 Charlie Savage * [r1720] New tests for area, length, distance. 2006-07-12 05:21 Charlie Savage * [r1719] Converted line feeds to Unix style. 2006-07-12 05:21 Charlie Savage * [r1718] New tests for creating geometries and calling various functions such as numGeometries, isValid, etc. 2006-07-12 05:20 Charlie Savage * [r1717] Tests for srid handling. 2006-07-12 05:20 Charlie Savage * [r1716] Merged tests from test_wkb_reader.rb 2006-07-12 05:18 Charlie Savage * [r1715] Merging into test_io.rb 2006-07-12 04:46 Charlie Savage * [r1714] Tests to verify returned version numbers from C api. 2006-07-11 18:48 Charlie Savage * [r1713] Fixes for coordinate sequences. Fixed bug in range checking, chaned clone to be a method instead of copy constructor, marked clone as creating a new object. 2006-07-11 18:44 Charlie Savage * [r1712] Tests for SWIG coordinate sequence class. 2006-07-11 09:07 Charlie Savage * [r1711] Added reference to new enum called GEOSByteOrders. The enum has two values, GEOS_WKB_NDR and GEOS_WKB_XDR which signify big endian and little endian byte orders. 2006-07-11 09:05 Charlie Savage * [r1710] Added 5 methods to the C API as documented in the changelong. The new methods are read/write WKB Hex values, read/write WKB byte order and read wkb output dimensions. 2006-07-11 08:55 Charlie Savage * [r1709] Test cases for reading and writing geometries to WKT, WKB and hex encoded WKB formats via the SWIG bindings. 2006-07-11 08:54 Charlie Savage * [r1708] Updated visual studio header file to match geos_c.h.in 2006-07-11 08:53 Charlie Savage * [r1707] Added 5 methods to the C API as documented in the changelong. The new methods are read/write WKB Hex values, read/write WKB byte order and read wkb output dimensions. 2006-07-11 08:52 Charlie Savage * [r1706] Noted additions to the C API and porting of SWIG to use the C api. 2006-07-11 08:44 Charlie Savage * [r1705] Ported SWIG bindings to use c-api. 2006-07-10 22:29 Sandro Santilli * [r1704] Added .cvsignore file 2006-07-10 21:51 Sandro Santilli * [r1703] don't use dynamic strings as format arg the formatted message callbacks. 2006-07-10 10:16 Sandro Santilli * [r1702] changed vector to vector (see bug#101) 2006-07-09 03:37 Mateusz Loskot * [r1701] Added 'testrunner' pattern to tests/xmltester/.cvsignore. 2006-07-09 03:21 Mateusz Loskot * [r1700] Added 'testrunner' to .cvsignore patterns. 2006-07-09 03:21 Mateusz Loskot * [r1699] Updated ChangeLog with details about new unit tests. 2006-07-09 03:16 Mateusz Loskot * [r1698] Added new tests to tests/unit/Makefile.am. 2006-07-09 03:15 Mateusz Loskot * [r1697] Added new tests cases to tests/unit/noding. Removed zero-to-pointer casts. 2006-07-09 00:24 Sandro Santilli * [r1696] Added testrunner to CLEANFILES. make distcheck now succeeds. 2006-07-08 00:33 Sandro Santilli * [r1693] * configure.in: incremented CAPI minor version, to avoid falling behind any future version from the 2.2. branch. * source/geom/Geometry.cpp, source/geom/GeometryFactory.cpp, source/geomgraph/EdgeRing.cpp, source/headers/geos/geom/Geometry.h, source/headers/geos/geom/GeometryFactory.h, source/headers/geos/geom/GeometryFactory.inl, source/headers/geos/geomgraph/EdgeRing.h: updated doxygen comments (sync with JTS head). * source/headers/geos/platform.h.in: include rather then 2006-07-07 20:02 Mateusz Loskot * [r1691] Updated ChangeLog with version comparison fix in GEOS_UNIT. 2006-07-07 20:00 Mateusz Loskot * [r1690] Fixed versions comparison in the GEOS_UNIT macro. 2006-07-07 19:33 Sandro Santilli * [r1689] * acsite.m4: include rather then (the latter is not available on Solaris 9) * configure.in: make sure CFLAGS is set before compiling using the 64bit integer detection macro. 2006-07-06 16:39 Mateusz Loskot * [r1688] Fixed version query regexp with escaped dots. Removed -lpq from GEOS_LIBS flags. 2006-07-05 23:27 Mateusz Loskot * [r1687] Removed redundant -L and -I from GEOS_LIBS and GEOS_CFLAGS. 2006-07-05 23:10 Mateusz Loskot * [r1686] Fixed GEOS_INIT to support full paths to geos-config passed to --with-geos. Fixed version decoding. 2006-07-05 22:54 Sandro Santilli * [r1685] distribute utility.h 2006-07-05 22:19 Sandro Santilli * [r1684] distribute the TUT framework. 2006-07-05 21:47 Sandro Santilli * [r1683] Distribute XML tests and tester. 2006-07-05 21:18 Sandro Santilli * [r1682] Fixed missing SweeplineNestedRingTester.cpp file. 2006-07-05 20:52 Sandro Santilli * [r1681] Fixed missing backslash, dropping headers from distribution. 2006-07-05 20:20 Sandro Santilli * [r1680] updated 2006-07-05 20:19 Sandro Santilli * [r1679] added checks for obviously wrong result of difference and intersection ops 2006-06-27 15:59 Sandro Santilli * [r1677] * source/algorithm/HCoordinate.cpp: added support for MingW -ansi builds. 2006-06-27 15:26 Sandro Santilli * [r1676] * capi/geos_c.cpp: fixed forward declaration of GEOSCoordSeq_getOrdinate. * capi/geos_c.h.in: renamed GEOSGeomTypeId enum to GEOSGeomTypes, to make VC++ 2005 happy. 2006-06-19 23:33 Sandro Santilli * [r1675] Don't *require* CoordinateFilters to define both read-only and read-write methods. 2006-06-19 22:52 Sandro Santilli * [r1674] optimized loops 2006-06-19 21:20 Sandro Santilli * [r1673] updated port info 2006-06-19 21:17 Sandro Santilli * [r1672] port info and doxygen dox. 2006-06-19 20:48 Sandro Santilli * [r1671] parseCase(): make sure to exit the tag before returning 2006-06-14 19:27 Sandro Santilli * [r1670] Let the compiler synthetize copy ctor and assignment op for Coordinate class to obtain better numerical stability. 2006-06-14 19:19 Sandro Santilli * [r1669] Added support for "AreaTest" operations. 2006-06-14 19:17 Sandro Santilli * [r1668] Fixed bug in findShell() needlessly erasing vector elements 2006-06-14 15:38 Sandro Santilli * [r1667] Fixed just-introduced bug 2006-06-14 15:03 Sandro Santilli * [r1666] * source/operation/overlay/OverlayOp.cpp: use NodeMap::container and related typedefs, removed (int) casts, optimized loops. 2006-06-14 14:32 Sandro Santilli * [r1665] EdgeEnd::getEdge() made non-virtual and inlined. 2006-06-14 13:59 Sandro Santilli * [r1664] Fixed bug in PolygonBuilder::placePolygonHoles, performance improved as a side effect. 2006-06-13 23:26 Sandro Santilli * [r1663] cleanups 2006-06-13 22:50 Sandro Santilli * [r1662] * source/headers/geos/io/WKTReader.inl: added missing include for GEOS_DEBUG set case, use stderr for debugging output. 2006-06-13 22:19 Sandro Santilli * [r1661] fixed unused parameter warning 2006-06-13 22:00 Sandro Santilli * [r1660] Changed GeometryGraph::lineEdgeMap set comparison function to be pointer-based. Should be safe and much faster. Available tests all succeed. 2006-06-13 21:42 Sandro Santilli * [r1659] trimmed cvs log, cleanups 2006-06-13 21:40 Sandro Santilli * [r1658] Cleanups and some more debugging lines 2006-06-13 21:38 Sandro Santilli * [r1657] Added self comparison check in Geometry::compareTo(). 2006-06-13 19:16 Sandro Santilli * [r1656] fixed mis-assigned commit 2006-06-12 17:18 Sandro Santilli * [r1655] LineSegmentIndex: explicitly initialized parent class in constructors. 2006-06-12 17:15 Sandro Santilli * [r1654] Removed unused parameters warning 2006-06-12 17:14 Sandro Santilli * [r1653] added assert(0) version of filter_ro() and filter_rw() to allow implementations to only defined the required one. 2006-06-12 16:59 Sandro Santilli * [r1652] Removed unused parameter warnings 2006-06-12 16:57 Sandro Santilli * [r1651] Added note about ownership of return from getEdgesBetween() 2006-06-12 16:55 Sandro Santilli * [r1650] fixed compiler warnings, fixed some methods to omit unused parameters. 2006-06-12 16:51 Sandro Santilli * [r1649] Added equality and inequality operators and tests 2006-06-12 16:36 Sandro Santilli * [r1648] indentation, notes about things to be fixed. 2006-06-12 15:47 Sandro Santilli * [r1647] implemented missing getEdgesBetween() method (untested). 2006-06-12 15:46 Sandro Santilli * [r1646] provided a memory friendly version of toEdges() method. 2006-06-12 15:07 Sandro Santilli * [r1645] explicitly invoked CoordinateSequence (copy) ctor - suggested by GCC warning. 2006-06-12 15:06 Sandro Santilli * [r1644] Added default ctor and copy ctor (protected) 2006-06-12 13:57 Sandro Santilli * [r1643] Check for int64_t type for int64 typedef. 2006-06-12 11:29 Sandro Santilli * [r1642] unsigned int => size_t 2006-06-12 10:49 Sandro Santilli * [r1641] unsigned int => size_t 2006-06-12 10:39 Sandro Santilli * [r1640] don't print test file precision model if verbosity level < 2. 2006-06-12 10:10 Sandro Santilli * [r1639] Fixed getGeometryN() to take size_t rather then int, changed unsigned int parameters to size_t. 2006-06-09 08:28 Sandro Santilli * [r1638] Removed compiler warning 2006-06-09 08:17 Sandro Santilli * [r1637] removed signed/unsigned comparison warnings. 2006-06-09 08:09 Sandro Santilli * [r1636] removed signed/unsigned comparison warnings. 2006-06-09 08:02 Sandro Santilli * [r1635] Fixed signed/unsigned comparison tests 2006-06-09 07:42 Sandro Santilli * [r1634] * source/geomgraph/GeometryGraph.cpp, source/operation/buffer/OffsetCurveSetBuilder.cpp, source/operation/overlay/OverlayOp.cpp, source/operation/valid/RepeatedPointTester.cpp: Fixed warning after Polygon ring accessor methods changed to work with size_t. Small optimizations in loops. 2006-06-09 06:41 Sandro Santilli * [r1633] Added missing log for mloskot change 2006-06-08 18:50 Mateusz Loskot * [r1632] Fixed no-effect warning in test<1> from DimensionTest.cpp. 2006-06-08 18:18 Sandro Santilli * [r1631] * tests/unit/geom/GeometryFactoryTest.cpp: fixed compiler warnings about signed/unsigned comparisons. 2006-06-08 17:58 Sandro Santilli * [r1630] Polygon::getNumInteriorRing() return size_t, Polygon::interiorRingN() takes size_t. 2006-06-08 17:46 Sandro Santilli * [r1629] * tests/unit/geom/CoordinateArraySequenceTest.cpp: fix signed/unsigned comparison warning. 2006-06-08 15:55 Sandro Santilli * [r1628] * tests/xmltester/markup/MarkupSTL.cpp: removed use of allocator, which brings in some incompatibilities with libstdc++ 6.0.7 (gcc 4.0.2). 2006-06-08 13:19 Sandro Santilli * [r1627] Commented out ruby and python detection 2006-06-08 12:58 Sandro Santilli * [r1626] Fixed xml testrunner rule 2006-06-08 12:16 Sandro Santilli * [r1625] added XML tests run to the 'make check' rule. 2006-06-08 11:20 Sandro Santilli * [r1624] Added missing virtual destructor to abstract classes. 2006-06-07 20:04 Sandro Santilli * [r1623] * configure.in: enforce -Wall -ansi -pedantic -Wno-long-long to C and CXX flags. 2006-06-07 19:45 Sandro Santilli * [r1622] Renamed (reserved) TESTS variable to RUBY_TESTS 2006-06-07 19:26 Sandro Santilli * [r1621] Fixed SUBDIRS order, and added a NOTE about maintaining it. 2006-06-07 17:03 Sandro Santilli * [r1620] * Makefile.am, configure.in, swig/python/Makefile.am, swig/ruby/Makefile.am, swig/ruby/test/Makefile.am: swig removed from automatic build process. * configure.in: removed check for boost availability. 2006-06-07 16:07 Sandro Santilli * [r1619] Set release version to 3.0.0rc1 2006-06-07 14:10 Mateusz Loskot * [r1618] Update ChangeLog with info about new test case isPointInRingTest.cpp. 2006-06-07 14:06 Mateusz Loskot * [r1617] Renamed file isPointInRing.cpp to isPointInRingTest.cpp to follow GEOS Unit Test convention. 2006-06-07 13:52 Mateusz Loskot * [r1616] Added new test: CGAlgorithms/isPointInRing.cpp. 2006-06-07 13:10 Sandro Santilli * [r1615] Removed Triangle.h include from geom.h 2006-06-07 13:08 Sandro Santilli * [r1614] * source/headers/geos/geom/Makefile.am: removed Triangle.h from installed header set. 2006-06-05 19:42 Sandro Santilli * [r1613] Fixed noinst_geos_HEADERS => noinst_HEADERS. 2006-06-05 15:36 Sandro Santilli * [r1612] Given OverlayOp funx code enum a name and renamed values to have a lowercase prefix. Drop all of noding headers from installed header set. 2006-06-03 22:31 Howard Butler * [r1611] update to track latest removals 2006-06-03 22:29 Howard Butler * [r1610] Use a fully qualified namespace for LineSegment because we're inside of geos::simplify at the time 2006-06-01 11:49 Sandro Santilli * [r1609] Reduced installed headers form geomgraph namespace 2006-06-01 10:28 Sandro Santilli * [r1608] Reduced number of installed headers for the geos::index namespace 2006-05-25 18:44 Sandro Santilli * [r1607] * tests/unit/geom/TriangleTest.cpp: take floating-point rounding error into account. 2006-05-25 16:11 Mateusz Loskot * [r1606] Changed precision constant with epsilon() from std::numeric_limits. 2006-05-25 15:54 Mateusz Loskot * [r1605] Added specialization of ensure_equals for double type. 2006-05-24 16:29 Sandro Santilli * [r1604] * source/index/quadtree/DoubleBits.cpp: handled negative or zero values in getExponent(). 2006-05-24 16:01 Sandro Santilli * [r1603] * tests/unit/utility.h: fixed missing return from isSameStructure's specialization on GeometryCollection, also fixed a signed/unsigned mismatch warning there. 2006-05-24 15:42 Sandro Santilli * [r1602] * source/util/Makefile.am, source/util/CoordinateArrayFiter.cpp, source/util/GEOSException.cpp, source/util/UniqueCoordinateArrayFilter.cpp: removed empty implementation files. 2006-05-24 15:32 Sandro Santilli * [r1601] * source/headers/geos/simplify/TaggedLinesSimplifier.h: added LineSegmentIndex.h include so that every use of the templated simplify() function get all the required definitions. 2006-05-24 15:17 Sandro Santilli * [r1600] Reduced number of installed headers in geos/operation/ subdir 2006-05-24 13:44 Sandro Santilli * [r1599] Added a note about unit tests being introduced 2006-05-24 11:44 Mateusz Loskot * [r1598] Added missing entries to ChangeLog. 2006-05-24 11:41 Sandro Santilli * [r1597] * source/headers/geos/simplify/TaggedLinesSimplifier.h, source/simplify/TaggedLinesSimplifier.cpp, source/simplify/TopologyPreservingSimplifier.cpp: fixed bug in TopologyPreservingSimplifier failing to detect intersections, refactored TaggedLinesSimplifier class to more closely match JTS and use templated functions. 2006-05-24 08:32 Sandro Santilli * [r1596] * capi/geos_c.h.in: #include to get size_t definition (only #ifndef __cplusplus) 2006-05-24 05:53 Mateusz Loskot * [r1595] Added new test: TopologyPreservingSimplifierTest.cpp. Added new utility.cpp helper for Unit Tests (implementes utils from JTS Unit Tests). 2006-05-23 15:06 Sandro Santilli * [r1594] * source/headers/geos/geom/Coordinate.h: added missing include. 2006-05-23 14:44 Sandro Santilli * [r1593] * source/headers/geos/config.h: removed file which is not supposed to be in the repository. 2006-05-23 14:29 Sandro Santilli * [r1592] * source/headers/geos/index/quadtree/DoubleBits.h, source/index/quadtree/DoubleBits.cpp: const correctness and documentation. 2006-05-23 13:21 Sandro Santilli * [r1591] Added test for put/get Long values 2006-05-23 13:16 Sandro Santilli * [r1590] Fixed a bug in WKBWriter::writeByteOrder() failing to consider machine's byte order 2006-05-23 12:57 Sandro Santilli * [r1589] Fixed small typo in label 2006-05-23 12:33 Sandro Santilli * [r1588] * source/io/ByteOrderValues.cpp: fixed bug in putLong() also affecting putDouble() 2006-05-23 12:23 Sandro Santilli * [r1587] * tests/unit/Makefile.am, tests/unit/io/ByteOrderValuesTest.cpp: unit test for ByteOrderValues class. 2006-05-23 11:07 Sandro Santilli * [r1586] * source/io/WKBWriter.cpp: fixed bug in ::writeInt missing to honour the requested byte order. 2006-05-23 10:56 Sandro Santilli * [r1585] Fixed top comment 2006-05-23 10:48 Sandro Santilli * [r1584] * tests/unit/io/WKBReaderTest.cpp: cleaned up and added both XDR and NDR tests. 2006-05-23 09:24 Sandro Santilli * [r1583] * source/io/ByteOrderValues.cpp: changed ENDIAN_BIG and ENDIAN_LITTLE values to match WKBConstants::XDR and WKBConstants::NDR respectively. * source/headers/geos/io/WKBConstants.h: added comments about meaning of XDR/NDR. 2006-05-22 15:08 Sandro Santilli * [r1582] Print colon after exception name (as it has always been) 2006-05-19 17:44 Sandro Santilli * [r1581] * source/simplify/TopologyPreservingSimplifier.cpp: removed friend specification in TopologyPreservingSimplifier helper class (no more needed) 2006-05-19 17:39 Sandro Santilli * [r1580] * tests/unit/geom/Geometry/coversTest.cpp: keep tests in 'tut' namespace. 2006-05-19 16:38 Sandro Santilli * [r1579] * tests/xmltester/XMLTester.cpp: report error on load of requested tests. 2006-05-18 10:19 Sandro Santilli * [r1578] * source/headers/geos/geom.h: fixed doxygen header for mainpage. 2006-05-18 10:16 Sandro Santilli * [r1577] Added note about the new BinaryOp class and its uses. 2006-05-18 10:13 Sandro Santilli * [r1576] * source/headers/geos/geom/BinaryOp.h: added compile-time defines to avoid precision-reduction and simplify based policies (default to enabled). 2006-05-18 09:32 Sandro Santilli * [r1575] added note about new Geometry predicates 2006-05-18 09:00 Sandro Santilli * [r1574] Added tests for coveredBy(), fixed ChangeLog entry 2006-05-18 08:56 Sandro Santilli * [r1573] * source/geom/Geometry.cpp, source/headers/geos/geom/Geometry.h: added covers() and isCoveredBy() predicates. * tests/unit/Makefile.am, tests/unit/geom/Geometry/coversTest.cpp: added test for covers() predicates. 2006-05-17 17:41 Sandro Santilli * [r1572] Added output operator + test 2006-05-17 17:24 Sandro Santilli * [r1571] Added port info, fixed isCoveredBy() comment. 2006-05-17 17:20 Sandro Santilli * [r1570] added isCovers() and isCoveredBy() public methods to IntersectionMatrix and associated tests. 2006-05-17 08:40 Sandro Santilli * [r1569] typo fixed to make description more clear 2006-05-13 10:42 Mateusz Loskot * [r1563] Fixed line-ends in PointLocatorTest.cpp file. 2006-05-13 08:26 Mateusz Loskot * [r1562] Fixed line-ends in isRectangleTest.cpp. Added new patterns to .cvsignore. 2006-05-05 15:40 Sandro Santilli * [r1561] Had nodind validation error throw an exception for SimpleSnapRounder and MCIndexSnapRounder 2006-05-05 14:34 Sandro Santilli * [r1560] New SegmentString unit test 2006-05-05 14:25 Sandro Santilli * [r1559] moved getSegmentOctant out of .inl into .cpp, renamed private eiList to nodeList as in JTS, added more assertion checking and fixed doxygen comments 2006-05-05 10:19 Sandro Santilli * [r1558] droppped SegmentString::getContext(), new name is getData() to reflect change in JTS 2006-05-05 09:37 Sandro Santilli * [r1557] * source/headers/geos/geom.h: fixed namespace qualification in doxygen page about C++ interface. 2006-05-04 15:49 Sandro Santilli * [r1556] updated all Geometry::getDimension() methods to return Dimension::DimensionType (closes bug#93) 2006-05-04 14:05 Sandro Santilli * [r1555] * source/headers/geos/util/math.h: provided an util::round() method being an inline proxy to call appropriate default rounding function for the whole GEOS codebase. Currently pointing at util::java_math_round() being the last being used. 2006-05-04 13:38 Sandro Santilli * [r1554] doxygen comments cleanup 2006-05-04 12:54 Sandro Santilli * [r1553] Added invariant tester for NodeMap class, fixed comment about ownership of NodeFactory 2006-05-04 12:33 Sandro Santilli * [r1552] Added some comments about RightmostEdgeFinder only considering forward DirectedEdge 2006-05-04 12:19 Sandro Santilli * [r1551] Added note about findEdge() only scanning for forward DirectedEdges 2006-05-04 12:17 Sandro Santilli * [r1550] Added comment about management of newly created DirectedEdges 2006-05-04 10:15 Sandro Santilli * [r1549] Doxygen comments 2006-05-04 09:16 Sandro Santilli * [r1548] Added JTS debugging, for comparison with JTS 2006-05-04 08:42 Sandro Santilli * [r1547] Added note about the CoordinateSequence::toVector() method. 2006-05-04 08:35 Sandro Santilli * [r1546] noding/SegmentNodeList.cpp: cleanups, changed output operator to be more similar to JTS 2006-05-04 08:30 Sandro Santilli * [r1545] removed use of SegmentString::setCoordinates() [dropped] 2006-05-04 08:29 Sandro Santilli * [r1544] * source/noding/ScaledNoder.cpp: removed use of SegmentString::setCoordinates(). * source/headers/geos/noding/SegmentStrign.{h,inl}: removed new setCoordinates() interface. 2006-05-04 07:43 Sandro Santilli * [r1543] output operator for SegmentString class 2006-05-04 07:41 Sandro Santilli * [r1542] const-correct size() method for SegmentNodeList 2006-05-04 06:36 Sandro Santilli * [r1541] Extended definition to take new CoordinateSequence tracking into account 2006-05-03 20:05 Sandro Santilli * [r1540] Added SQL debugging output 2006-05-03 19:47 Sandro Santilli * [r1539] added operator<< for CoordinateSequence 2006-05-03 18:04 Sandro Santilli * [r1538] added SegmentString::setCoordinates() interface 2006-05-03 17:54 Sandro Santilli * [r1537] Uncommented correctness checker 2006-05-03 17:51 Sandro Santilli * [r1536] system headers included after package headers 2006-05-03 17:50 Sandro Santilli * [r1535] Doxygen comments 2006-05-03 17:48 Sandro Santilli * [r1534] Forgot a slash 2006-05-03 17:48 Sandro Santilli * [r1533] Doxygen brief 2006-05-03 16:22 Howard Butler * [r1532] tweak clean target 2006-05-03 16:21 Howard Butler * [r1531] Build the C API and shared lib separate from the normal lib Add missing files 2006-05-03 16:19 Sandro Santilli * [r1530] fit in 80 columns 2006-05-03 16:09 Howard Butler * [r1529] Maintain a geos_c.h.vc until we come up with a better solution 2006-05-03 15:50 Howard Butler * [r1528] *** empty log message *** 2006-05-03 15:49 Sandro Santilli * [r1527] fixed bug in SimpleSnapRounder::computeSnaps, trying to access out-of-bound vector element. 2006-05-03 15:49 Howard Butler * [r1526] add additional files and change names where necessary 2006-05-03 15:40 Sandro Santilli * [r1525] test SegmentString invariant before and after scaling 2006-05-03 15:37 Sandro Santilli * [r1524] Tabs for indent 2006-05-03 15:32 Howard Butler * [r1523] *** empty log message *** 2006-05-03 15:30 Howard Butler * [r1522] Maintain a version.h.vc until we come up with a better solution 2006-05-03 15:28 Sandro Santilli * [r1521] updated JTS_PORT to 1.7.1 2006-05-03 15:26 Sandro Santilli * [r1520] testInvariant made public and always inlined 2006-05-03 15:19 Sandro Santilli * [r1519] Changed sym_round() to java_math_round() 2006-05-03 15:12 Sandro Santilli * [r1518] Oops, uninitialized value fix 2006-05-03 15:06 Sandro Santilli * [r1517] Updated 2006-05-03 15:06 Sandro Santilli * [r1516] Better doxygen comment 2006-05-03 15:05 Sandro Santilli * [r1515] Assertions checking 2006-05-03 15:04 Sandro Santilli * [r1514] removed reduntant port info 2006-05-03 15:02 Sandro Santilli * [r1513] moved some implementations from header to .cpp file (taken out of inline) 2006-05-03 15:00 Sandro Santilli * [r1512] Fixed scale() function to remove repeated points *after* rounding. Added brief doxygen class description. 2006-05-03 10:26 Sandro Santilli * [r1511] Fixed misuse of precision model in noder (bufferFixedPrecision) 2006-05-03 09:46 Sandro Santilli * [r1510] buffer headers reduction item 2006-05-03 09:45 Sandro Santilli * [r1509] Do not install following buffer headers: BufferBuilder.h, OffsetCurveSetBuilder.h, BufferSubgraph.h, SubgraphDepthLocater.h, RightmostEdgeFinder.h 2006-05-03 09:14 Sandro Santilli * [r1508] * source/operation/buffer/OffsetCurveSetBuilder.cpp: used auto_ptr to protect leaks of CoordinateSequence * source/noding/ScaledNoder.cpp, source/headers/geos/noding/ScaledNoder.h: ported JTS bugfix in scale method. 2006-05-03 08:58 Sandro Santilli * [r1507] added new non-static CoordinateSequence::removeRepeatedPoints() mutator. 2006-05-02 16:22 Sandro Santilli * [r1506] * source/noding/ScaledNoder.cpp: use java_math_round instead of sym_round. 2006-05-02 14:51 Sandro Santilli * [r1505] Added port info and fixed doxygen comments for CGAlgorithms class 2006-05-02 14:32 Sandro Santilli * [r1503] Added port info for polygonize/EdgeRing class, polygonize/EdgeRing.h header not installed. 2006-05-02 14:22 Sandro Santilli * [r1502] * source/operation/polygonize/: polygonizeEdgeRing.cpp renamed to EdgeRing.cpp, to follow JTS naming. 2006-05-02 14:01 Sandro Santilli * [r1500] * source/io/WKBReader.cpp: fixed reads of XDR WKB. 2006-04-28 12:09 Sandro Santilli * [r1497] Added 'verbose-test' rule 2006-04-28 12:08 Sandro Santilli * [r1496] Added note about Geometry constructors 2006-04-28 11:56 Sandro Santilli * [r1495] * source/geom/GeometryFactory.cpp, source/headers/geos/geom/GeometryFactory.h: added LineString copy constructor. * source/geom/Polygon.cpp: fixed getBoundary method to always return a geometry composed by LineStrings (not LinearRings) 2006-04-28 11:12 Sandro Santilli * [r1494] removed warnings related to change in getNumPoints() return type. 2006-04-28 10:55 Sandro Santilli * [r1493] Geometry constructors made protected, to ensure all constructions use GeometryFactory, which has been made friend of all Geometry derivates. getNumPoints() changed to return size_t. 2006-04-28 10:51 Sandro Santilli * [r1492] Unit tests: only construct Geoms using GeometryFactory. 2006-04-27 15:15 Sandro Santilli * [r1491] Z check removed from invariant tester to avoid aborts due to differences in FP computations. 2006-04-27 15:07 Sandro Santilli * [r1490] use output operators in debugging lines 2006-04-27 15:06 Sandro Santilli * [r1489] (addNode): always use the Node Coordinate as a key in the map to reduce likeliness of a premature deletion. 2006-04-27 15:03 Sandro Santilli * [r1488] standard algorithm used in addZ() for vector seek 2006-04-26 16:35 Sandro Santilli * [r1485] Had WKTReader accept correct form for MultiPoint 2006-04-26 10:39 Sandro Santilli * [r1482] Added mloskot item (bug#100) 2006-04-26 10:26 Sandro Santilli * [r1481] tools/geos-config.in: fixed library path to use layout detected by autoconf 2006-04-24 15:47 Sandro Santilli * [r1480] Public constructors change made permanent 2006-04-23 11:58 Mateusz Loskot * [r1479] Small refactoring of DouglasPeuckerSimplifierTest (prefer to use ctor instead of operator= to create objects). Added new patterns to .cvsignore. 2006-04-23 11:29 Mateusz Loskot * [r1478] Added new patterns to .cvsignore file. 2006-04-22 17:16 Mateusz Loskot * [r1477] Temporar fix of Bug #100. This report requires deeper analysis!. 2006-04-21 17:04 Sandro Santilli * [r1476] Fixed constructor by type to always initialize scale factor 2006-04-20 16:21 Sandro Santilli * [r1475] Added missing debugging output 2006-04-20 14:27 Sandro Santilli * [r1474] HCoordinate class changed to use long double types internally, in order to improve computation precision 2006-04-20 14:16 Sandro Santilli * [r1473] Added some more doxygen comments 2006-04-20 11:11 Sandro Santilli * [r1472] source/algorithm/HCoordinate.cpp: added compile time define to force storage of intermediate computation values to variables (in order to make the -ffloat-store gcc switch effective). Disabled by default. 2006-04-19 09:21 Sandro Santilli * [r1471] Added snapround and simplify tests items 2006-04-19 09:20 Sandro Santilli * [r1470] updated 2006-04-14 15:34 Sandro Santilli * [r1469] Had CAPI use new BinaryOp class in an aim to reduce robustness problems 2006-04-14 15:25 Sandro Santilli * [r1468] updated, somehow 2006-04-14 15:19 Sandro Santilli * [r1467] removed precision reduction code (use BinaryOp for that) 2006-04-14 15:06 Sandro Santilli * [r1466] Added BinaryOp.h header 2006-04-14 15:04 Sandro Santilli * [r1465] fixed missing namespace qualification in overlay::overlayOp 2006-04-14 14:57 Sandro Santilli * [r1464] XMLTester binary ops invoked using the new BinaryOp template function. 2006-04-14 14:38 Sandro Santilli * [r1463] new geos::Geom::BinaryOp template function implementing various heuristics aimed at making binary geometry ops work around robustness issues. 2006-04-14 14:35 Sandro Santilli * [r1462] Added overlayOp() adapter for use in templates expecting binary ops 2006-04-14 09:02 Sandro Santilli * [r1461] Hadded output operator and debugging prints for HCoordinate. 2006-04-13 23:57 Sandro Santilli * [r1460] Disables reduced precision overlayOp (is broken) 2006-04-13 23:42 Sandro Santilli * [r1459] Plugged CommonBitsOp attempts in overlay op, before brute force precision reduction (this is likely going to change) 2006-04-13 23:28 Sandro Santilli * [r1458] "always build before commit" (forgot a closing paren) 2006-04-13 23:23 Sandro Santilli * [r1457] fixed bug in binary ops failing to consistently reduce operands. 2006-04-13 21:53 Sandro Santilli * [r1456] fixed bug introduced by previous commit 2006-04-13 21:52 Sandro Santilli * [r1455] Many debugging lines and assertions added. Fixed bug in TaggedLineString class. 2006-04-13 17:09 Sandro Santilli * [r1454] Use default GeometryFactory instance (finishGEOS() is a no-op now) 2006-04-13 16:48 Sandro Santilli * [r1453] Added GEOSSimplify and GEOSTopologyPreserveSimplify interfaces. Removed compiler warnings in geostest 2006-04-13 16:44 Sandro Santilli * [r1452] Fixed a bug in DPTransformer handling of MultiPolygons 2006-04-13 16:04 Sandro Santilli * [r1451] Made TopologyPreservingSimplifier implementation successfully build 2006-04-13 14:51 Sandro Santilli * [r1450] Forced NDR output (to not rely on architecture). Removed CRs endings. 2006-04-13 14:25 Sandro Santilli * [r1449] TopologyPreservingSimplifier initial port 2006-04-13 10:39 Sandro Santilli * [r1448] Initial implementation of TaggedLinesSimplifier class 2006-04-13 09:28 Mateusz Loskot * [r1447] Removed definition of copy ctor and assignment operator for LineSegmentString class. 2006-04-13 09:21 Mateusz Loskot * [r1446] Removed definition of copy ctor and assignment operator for TaggedLineString class. According to following rule: Declaring, but not defining, private copy operations has the effect of "turning off" copying for the class. 2006-04-12 17:24 Sandro Santilli * [r1445] Added note about reduction of installed headers in simplify namespace 2006-04-12 17:19 Sandro Santilli * [r1444] Ported TaggedLineStringSimplifier class, made LineSegment class polymorphic to fix derivation of TaggedLineSegment 2006-04-12 15:20 Sandro Santilli * [r1443] LineSegmentIndex class 2006-04-12 14:22 Sandro Santilli * [r1442] Initial implementation of TaggedLineSegment and TaggedLineString classes 2006-04-12 12:20 Sandro Santilli * [r1441] Added support for use of CommonBitsOp in reduced precision attempts (compile-time option) 2006-04-12 11:57 Sandro Santilli * [r1440] Fixed debugging line 2006-04-12 11:39 Sandro Santilli * [r1439] Removed Geometry.h and CoordinateSequence.h includes. The former created a circular dependency. 2006-04-12 11:17 Sandro Santilli * [r1438] Fixed exceptions constructors (were using operator+ with strings and const char*) 2006-04-12 10:57 Sandro Santilli * [r1437] Added WKBReader default ctor using default GeometryFactory instance 2006-04-11 16:04 Sandro Santilli * [r1436] geos::simplify::DouglasPeukerSimplifier class + unit test 2006-04-11 12:56 Sandro Santilli * [r1435] used typedef for auto_ptr 2006-04-11 12:21 Sandro Santilli * [r1434] GeometryTransformer class ported 2006-04-11 11:55 Sandro Santilli * [r1433] Added CoordinateSequence::AutoPtr typedef 2006-04-11 11:16 Sandro Santilli * [r1432] Added LineString and LinearRing constructors by auto_ptr 2006-04-11 09:53 Sandro Santilli * [r1431] Added missing duplicated include sentinel 2006-04-11 09:41 Sandro Santilli * [r1430] Initial implementation of a GeometryList class, to be used to manage lists of Geometry pointers. 2006-04-11 09:31 Sandro Santilli * [r1429] Added Geometry::AutoPtr typedef 2006-04-11 09:29 Sandro Santilli * [r1428] Fixed initialization list (removed compiler warning) 2006-04-10 18:15 Sandro Santilli * [r1427] Changed Geometry::envelope member to be of type auto_ptr. Changed computeEnvelopeInternal() signater to return auto_ptr 2006-04-10 17:35 Sandro Santilli * [r1426] Changed LineString::points and Point::coordinates to be wrapped in an auto_ptr<>. This should close bugs #86 and #89 2006-04-10 15:11 Sandro Santilli * [r1425] First manual edit (will likely update later tonight... with changes grouped by date) 2006-04-10 15:05 Sandro Santilli * [r1424] Re-synced with JTS version (so this actually *was* a bug :) 2006-04-10 15:05 Sandro Santilli * [r1423] Fixed a bug introduced by previous commit in getCentroid() 2006-04-10 14:18 Sandro Santilli * [r1422] Fixed getCentroid(Coordinate&) to round using PrecisionModel all unit tests succeed. 2006-04-10 13:40 Sandro Santilli * [r1421] Added default ctor for WKTReader (using GeometryFactory's default instance) 2006-04-10 13:13 Sandro Santilli * [r1420] Removed INLINE flags from geos-config --libs 2006-04-10 13:09 Sandro Santilli * [r1419] Added GeometryFactory::defaultInstance() Made Geometry::INTERNAL_GEOMETRY_FACTORY an alias for it removed last deletion from Unload::Release class 2006-04-10 12:05 Sandro Santilli * [r1418] Added inline-replicator implementation files to make sure functions in .inl files are still available out-of-line. A side effect is this should fix MingW build. 2006-04-10 11:34 Sandro Santilli * [r1417] Uncommented required Geometry.h include (for use in auto_ptr) 2006-04-10 09:21 Mateusz Loskot * [r1416] Added new test for UniqueCoordinateArrayFilter class. Small fixes related to signed/unsigned comparison. 2006-04-09 11:07 Mateusz Loskot * [r1413] Small fixes in doc/example.cpp. 2006-04-09 04:56 Mateusz Loskot * [r1412] Removed redundant semicolons from xmltester sources. 2006-04-09 04:26 Mateusz Loskot * [r1411] Removed redundant semicolon reported by g++ -pedantic. 2006-04-09 04:09 Mateusz Loskot * [r1410] Removed redundant semicolon reported by g++ -pedantic. 2006-04-09 01:48 Mateusz Loskot * [r1409] Added Unit Test for IntersectionMatrix class. 2006-04-09 01:46 Mateusz Loskot * [r1408] [SORRY] Added comments for doxygen based on JTS docs. Added row/col dimension consts. Added asserts in functions to check if given row/col is in range. 2006-04-09 01:41 Mateusz Loskot * [r1407] Added comments for doxygen based on JTS docs. Added row/col dimension consts. Added asserts in functions to check if given row/col is in range. 2006-04-08 15:57 Mateusz Loskot * [r1406] Added copyright notice to TUT files. Small cleaning. 2006-04-08 13:05 Sandro Santilli * [r1405] Added assertion 2006-04-08 13:00 Sandro Santilli * [r1404] assertion checking, mergeLabel() call fix (bug#91) 2006-04-07 16:52 Sandro Santilli * [r1403] Port info, doxygen comments, assertion checking 2006-04-07 16:01 Sandro Santilli * [r1402] Port info, doxygen comments, testInvariant(), many assertionss, handling of the NULL EdgeEndStar member 2006-04-07 13:26 Sandro Santilli * [r1401] Use of auto_ptr<> to prevent confusing leaks in tester 2006-04-07 13:14 Mateusz Loskot * [r1400] Fixed annoying warnings from TUT. 2006-04-07 13:01 Mateusz Loskot * [r1399] Fixed line-ends to LF. 2006-04-07 12:55 Mateusz Loskot * [r1398] Uncommented test nr 38 in PolygonTest.cpp. 2006-04-07 12:37 Mateusz Loskot * [r1397] Added java_math_round() function for Asymmetric Arithmetic Rounding. Small fixes in Unit Tests. 2006-04-07 10:42 Mateusz Loskot * [r1396] Added test nr 29 to PointTest (JTS conformance). Removed inform() calls from GeometryFactoryTest. 2006-04-07 09:54 Sandro Santilli * [r1395] Geometry::getNumGeometries() changed to return 'unsigned int' rather then 'int' 2006-04-07 09:12 Sandro Santilli * [r1394] kept isInSegmentEnvelopes() check even when not debugging 2006-04-07 08:31 Sandro Santilli * [r1393] Debugging lines 2006-04-07 08:30 Sandro Santilli * [r1392] made addCommonBits/removeCommonBits interface consistent, doxygen comments 2006-04-07 08:28 Sandro Santilli * [r1391] debugging lines, assertions 2006-04-07 08:27 Sandro Santilli * [r1390] debugging blocks 2006-04-07 07:21 Mateusz Loskot * [r1389] Add new-line at the EOF some files. 2006-04-07 05:55 Mateusz Loskot * [r1388] Added new objects to .cvsignore. 2006-04-07 05:44 Mateusz Loskot * [r1387] Added name for anonymous enum in Dimension class (bug). Added missing new-line at the end of source files. Removed CR from line ends. 2006-04-07 00:05 Mateusz Loskot * [r1386] Adding missing isRectangleTest.cpp 2006-04-06 23:50 Mateusz Loskot * [r1385] Adding new Unit Tests. 2006-04-06 23:35 Sandro Santilli * [r1384] Added Mateusz Loskot 2006-04-06 23:31 Mateusz Loskot * [r1383] [UT Files Renaming] Add PointLocatorTest.cpp 2006-04-06 23:28 Mateusz Loskot * [r1382] [UT Files Renaming] Remove 'io' tests. 2006-04-06 23:26 Mateusz Loskot * [r1381] [UT Files Renaming] Remove 'geom' tests. 2006-04-06 23:25 Mateusz Loskot * [r1380] [UT Files Renaming] Remove file PointLocator.cpp 2006-04-06 23:20 Mateusz Loskot * [r1379] New version of Unit Test runner. Now, it's more GNU style compatible 2006-04-06 22:30 Mateusz Loskot * [r1378] Add inform() target in tut.h and new callbacks in tut_reporter.h 2006-04-06 21:31 Sandro Santilli * [r1377] Const correctness for debugging function 2006-04-06 21:30 Sandro Santilli * [r1376] Added missing rint_vc() forward declaration 2006-04-06 17:33 Sandro Santilli * [r1375] Added unit test for DoubleBits 2006-04-06 14:36 Sandro Santilli * [r1374] Cleanup in geos::precision namespace (leaks plugged, auto_ptr use, ...) 2006-04-06 12:58 Sandro Santilli * [r1373] Added printing of EdgeRing if available 2006-04-06 12:48 Sandro Santilli * [r1372] Added private vector to keep track of allocated MaximalEdgeRings objects 2006-04-06 12:47 Sandro Santilli * [r1371] Fixed output function 2006-04-06 12:45 Sandro Santilli * [r1370] Delayed deletion of newly allocated MaximalEdgeRings. Existing 'valid' operation tests don't should instability with this patch. 2006-04-06 12:36 Sandro Santilli * [r1369] removed spurious lines from previous commi 2006-04-06 12:34 Sandro Santilli * [r1368] Port info, more debugging lines, doxygen comments 2006-04-06 12:33 Sandro Santilli * [r1367] More debugging lines 2006-04-06 12:29 Sandro Santilli * [r1366] Fixed bogus static PrecisionModel variable in ::readCoordinate(). 2006-04-06 09:41 Sandro Santilli * [r1365] Added operator<<, added pts!=NULL assertion in testInvariant() function 2006-04-06 09:39 Sandro Santilli * [r1364] Added operator<< 2006-04-06 09:01 Sandro Santilli * [r1363] Doxygen comments, port info, operator<<, assertion checking 2006-04-06 07:52 Sandro Santilli * [r1362] Fixed bug in ::print() function 2006-04-05 18:28 Sandro Santilli * [r1361] Moved testInvariant() methods from private to public, added some comments about them. 2006-04-05 15:59 Sandro Santilli * [r1360] Removed dead code 2006-04-05 14:33 Sandro Santilli * [r1359] Removed annoying warnings from external source 2006-04-05 14:04 Sandro Santilli * [r1358] Fixed copy ctor to support "Null" Envelope copies. Drop init(Envelope&) method. Port info and various cleanups. 2006-04-05 10:25 Sandro Santilli * [r1357] Fixed LineString constructor to ensure deletion of CoordinateSequence argument on exception throw 2006-04-05 09:34 Sandro Santilli * [r1356] GEOSException derived from std::exception again, hopefully the correct way now 2006-04-05 09:20 Sandro Santilli * [r1355] Added port informations and many assertion checking. Fixed bug in getRightmostSide() method ( a "testing-only" corner case ) 2006-04-04 16:07 Sandro Santilli * [r1353] More assertion checking, less overhead when built with NDEBUG defined 2006-04-04 13:35 Sandro Santilli * [r1352] Port info, assertion checking, indentation 2006-04-04 12:39 Sandro Santilli * [r1351] Changed NotRepresentableCoordinate exception handler to throw a TopologyException. This allows further handling. 2006-04-04 11:37 Sandro Santilli * [r1350] Port information + initialization lists in ctors 2006-04-04 11:28 Sandro Santilli * [r1349] NotRepresentable condition detected using finite() from rather then using FINITE() macro. Made ::intersection() body more readable. 2006-04-04 09:53 Sandro Santilli * [r1348] Fixed applyCoordinateFilter() templated function body 2006-04-04 08:16 Sandro Santilli * [r1345] Changed GEOSException hierarchy to be derived from std::runtime_exception. Removed the GEOSException::toString redundant method (use ::what() instead) 2006-04-04 01:54 Howard Butler * [r1344] Add in changes/missing from previous rearranging. 2006-04-04 01:29 Howard Butler * [r1343] GEOS_JTS_PORT is in version.h not platform.h 2006-04-04 01:28 Howard Butler * [r1342] remove objects that no longer exist default to MSVC_VER=1310 2006-04-03 17:05 Sandro Santilli * [r1341] Assertion checking, port info, cleanups 2006-04-03 15:54 Sandro Santilli * [r1340] - getArgGeometry() parameter type changed from 'int' to 'unsigned int' - Added port informations - minor assertions checking - minor cleanups 2006-04-03 14:07 Sandro Santilli * [r1339] Commented out obsoleted toInternal() method 2006-04-03 13:58 Sandro Santilli * [r1337] Applied patch by Charlie Savage: - Fixes up the SWIG bindings to use the new GEOS namespaces - Fixes a bug in the Python m4 macro - Adds the -modern flag for SWIG when compiling a Python extension 2006-04-03 13:56 Sandro Santilli * [r1336] Made externally-owned PrecisionModel const 2006-04-03 10:56 Sandro Santilli * [r1334] Removed implementation files build spec for fully-inlined classes 2006-04-03 10:44 Sandro Santilli * [r1333] Added missing headers 2006-04-03 10:16 Sandro Santilli * [r1332] DouglasPeuckerLineSimplifier class port 2006-04-03 08:43 Sandro Santilli * [r1331] Added port info, minor cleanups 2006-04-03 08:29 Sandro Santilli * [r1330] Added port info, cleaned up log message, minor assertion checking. 2006-03-31 17:51 Sandro Santilli * [r1329] A few assertion checking, comments cleanup, use of initialization lists in constructors, handled NULL parameters. 2006-03-31 16:55 Sandro Santilli * [r1328] Added many assertions checking in LineString implementation. Changed ::getCoordinate() to return NULL on empty geom. Changed ::get{Start,End}Point() to return NULL on empty geom. 2006-03-31 16:53 Sandro Santilli * [r1327] Added comment about possible NULL return from getCoordinate() 2006-03-31 11:03 Sandro Santilli * [r1325] Fixed NULL-GeometryFactory constructor to use INTERNAL_GEOMETRY_FACTORY (should fix bug #81) 2006-03-30 09:26 Sandro Santilli * [r1324] minor cleanup 2006-03-29 15:48 Sandro Santilli * [r1323] Added missing 'const' in catch std::exception statements 2006-03-29 15:23 Sandro Santilli * [r1322] Moved GeometryGraph inlines from .h to .inl file 2006-03-29 14:34 Sandro Santilli * [r1321] Sync'ed testfile with JTS head 2006-03-29 14:31 Sandro Santilli * [r1320] Added PointLocator unit test 2006-03-29 13:53 Sandro Santilli * [r1319] EdgeRing equipped with Invariant testing function and lots of exceptional assertions. Removed useless heap allocations, and pointers usages. 2006-03-29 11:52 Sandro Santilli * [r1318] const correctness, useless heap allocations removal 2006-03-29 11:48 Sandro Santilli * [r1317] Removed useless heap allocations in construction, enforced const correctness 2006-03-28 16:49 Sandro Santilli * [r1316] Reintroduced rewind of input parameter in printHEX() [dropped by prev commit] 2006-03-28 16:33 Sandro Santilli * [r1315] Added note about args responsibility in GeometryFactory constructor 2006-03-28 16:11 Sandro Santilli * [r1314] swapped assert_equals() args to get obtained/expected the right way. 2006-03-28 15:27 Sandro Santilli * [r1313] Simplified printHEX() implementation 2006-03-28 15:19 Sandro Santilli * [r1312] Added macros for sections skip (useful in debugging) 2006-03-28 14:45 Sandro Santilli * [r1311] Added simple test for WKB reader. 2006-03-28 14:02 Sandro Santilli * [r1310] added missing header for non-inlined builds 2006-03-28 14:01 Sandro Santilli * [r1309] forgot to add in previous commit 2006-03-28 11:26 Sandro Santilli * [r1308] ByteOrderDataInStream inlines moved to .inl file, updated implementation files includes. 2006-03-28 11:25 Sandro Santilli * [r1307] Assertion checking 2006-03-28 09:14 Sandro Santilli * [r1306] Headers inclusion fix. 2006-03-28 08:57 Sandro Santilli * [r1305] Comments cleanup, system headers included after project headers 2006-03-28 08:40 Sandro Santilli * [r1304] C-API lib version bumped to 1.1.1 (release 2.2.2 will ship 1.1.0) 2006-03-27 17:59 Sandro Santilli * [r1302] Fixed small leak. 2006-03-27 17:04 Sandro Santilli * [r1301] Cleanups and explicit initializations 2006-03-27 16:02 Sandro Santilli * [r1300] Added INL file for MinimalEdgeRing, added many debugging blocks, fixed memory leak in ConnectedInteriorTester (bug #59) 2006-03-27 15:57 Sandro Santilli * [r1299] Commented need for platform.h include 2006-03-27 15:56 Sandro Santilli * [r1298] Added missing platform.h include (for ISNAN macro) 2006-03-27 14:20 Sandro Santilli * [r1297] Added paranoid assertion checking and a note in header about responsibility of return from buildMaximalEdgeRings() 2006-03-27 10:37 Sandro Santilli * [r1296] Reduced heap allocations and probability of error by making LineIntersector and RelateNodeGraph part of ConsistentAreaTester class . 2006-03-27 10:36 Sandro Santilli * [r1295] added missing space in exception message 2006-03-27 10:34 Sandro Santilli * [r1294] moved external includes after internal ones 2006-03-27 09:50 Sandro Santilli * [r1293] Added final isValid test from JTS (floating version) 2006-03-27 09:48 Sandro Santilli * [r1292] Extracted TestValid2.xml from testLeaksBig.xml (target file is taken from JTS source tree) 2006-03-27 09:45 Sandro Santilli * [r1291] Added TestValid.xml test, taken from JTS source tree, already present in testLeaksBig (from which tests were removed) 2006-03-27 09:28 Sandro Santilli * [r1290] added namespaces use and headers split 2006-03-27 09:05 Sandro Santilli * [r1289] Added note about responsibility of return from GEOSGeomType() 2006-03-27 09:00 Sandro Santilli * [r1288] Bug #79 - Small fix in CoordinateArraySequence::toString() 2006-03-24 11:42 Sandro Santilli * [r1287] reverted default of assertion checking 2006-03-24 11:11 Sandro Santilli * [r1286] Inlining enabled by default, assertion checking disabled by default. Added --enable-cassert and --disable-inline configure switches. Had geos-config --cflags output appropriate inline flag if required (-DGEOS_INLINE) 2006-03-24 11:04 Sandro Santilli * [r1285] Changed assert() with Assert::isTrue in addReverseSubpath 2006-03-24 10:44 Sandro Santilli * [r1284] Fixed to build with -DNDEBUG 2006-03-24 09:52 Sandro Santilli * [r1283] USE_INLINE => GEOS_INLINE 2006-03-24 09:26 Sandro Santilli * [r1282] Bug #77 - Missing platform.h 2006-03-24 09:25 Sandro Santilli * [r1281] Bugs #77 and #76: missing 2006-03-24 09:23 Sandro Santilli * [r1280] Bug #78 - Small fixes and cleaning 2006-03-23 15:10 Sandro Santilli * [r1278] Dropped by-pointer TopologyException constructor, various small cleanups 2006-03-23 13:31 Sandro Santilli * [r1277] Fixed to allow build with GEOS_DEBUG 2006-03-23 12:12 Sandro Santilli * [r1276] Fixes to allow build with -DUSE_INLINE 2006-03-23 10:55 Sandro Santilli * [r1275] Temporarly excluded 'swig' extension from distribution, to allow for successufull 'dist' rule and distributed testing. 2006-03-23 10:41 Sandro Santilli * [r1274] Fixed automake files 2006-03-23 10:09 Sandro Santilli * [r1273] Fixed missing backslash 2006-03-23 09:17 Sandro Santilli * [r1272] precision.h header split, minor optimizations 2006-03-22 18:12 Sandro Santilli * [r1271] indexChain.h header split. 2006-03-22 16:59 Sandro Santilli * [r1270] cleaned up 2006-03-22 16:58 Sandro Santilli * [r1269] Removed (almost) all inclusions of geom.h. Removed obsoleted .cpp files. Fixed a bug in WKTReader not using the provided CoordinateSequence implementation, optimized out some memory allocations. 2006-03-22 16:01 Sandro Santilli * [r1268] indexBintree.h header split, classes renamed to match JTS 2006-03-22 14:28 Sandro Santilli * [r1267] Filenames renamed to match class names (matching JTS) 2006-03-22 12:22 Sandro Santilli * [r1266] indexQuadtree.h split 2006-03-22 11:19 Sandro Santilli * [r1265] opPolygonize.h headers split. 2006-03-22 11:18 Sandro Santilli * [r1264] Changed back 'unable to find edge to compute depths' from assertion to TopologyException 2006-03-22 10:13 Sandro Santilli * [r1263] opLinemerge.h split 2006-03-21 21:42 Sandro Santilli * [r1262] planargraph.h header split, planargraph:: classes renamed to match JTS symbols 2006-03-21 17:55 Sandro Santilli * [r1261] opDistance.h header split 2006-03-21 17:11 Sandro Santilli * [r1260] opPredicate.h header split 2006-03-21 13:11 Sandro Santilli * [r1259] opRelate.h header split 2006-03-21 11:20 Sandro Santilli * [r1258] Changed expected result to the obtained one :) We're not cheating, it's a 2-vertex linestring for which an InteriorPoint is requested, both vertexes are correct answer (equidistant from centroid). 2006-03-21 11:12 Sandro Santilli * [r1257] Cleanups: headers inclusion and Log section 2006-03-21 10:47 Sandro Santilli * [r1256] indexStrtree.h split 2006-03-21 10:46 Sandro Santilli * [r1255] streamlined header inclusion, put original copyright on top 2006-03-21 10:01 Sandro Santilli * [r1254] indexSweepline.h header split 2006-03-20 18:18 Sandro Santilli * [r1253] io.h header split 2006-03-20 17:40 Sandro Santilli * [r1252] included when appropriate 2006-03-20 17:27 Sandro Santilli * [r1251] Bug #72 - Missing header 2006-03-20 17:17 Sandro Santilli * [r1250] Fixed geosdir 2006-03-20 16:57 Sandro Santilli * [r1249] spatialindex.h and opValid.h headers split 2006-03-20 16:08 Sandro Santilli * [r1248] redirected find stderr to /dev/null 2006-03-20 13:20 Sandro Santilli * [r1247] Changed assertion to TopologyException for the "orphaned" hole case in order to allow for reduced precision ops to catch the case. 2006-03-20 12:33 Sandro Santilli * [r1246] Simplified some privat methods to use refs instead of pointers, added debugging section for failiures of holes/shells associations 2006-03-20 12:32 Sandro Santilli * [r1245] Added note about responsibility of return from ::toPolygon 2006-03-20 12:03 Sandro Santilli * [r1244] Added operator<< for Geometry, writing HEXWKB 2006-03-20 11:42 Sandro Santilli * [r1243] Added missing include 2006-03-20 10:42 Sandro Santilli * [r1242] Bug #61 - Disambiguated geom::Polygon use 2006-03-20 10:14 Sandro Santilli * [r1241] Bug #69 - Check for macro WIN32_LEAN_AND_MEAN 2006-03-20 10:13 Sandro Santilli * [r1240] Bug #71 - Missing 2006-03-20 10:12 Sandro Santilli * [r1239] Bug #70 - Small fix in fwd decl. of CoordinateLessThen 2006-03-20 10:11 Sandro Santilli * [r1238] Bug #67 - Debugging helpers in GeometryFactory class 2006-03-17 16:48 Sandro Santilli * [r1237] LineIntersector and PointLocator made complete components of RelateComputer (were statics const pointers before). Reduced inclusions from opRelate.h and opValid.h, updated .cpp files to allow build. 2006-03-17 14:56 Sandro Santilli * [r1236] Fixed filename normalizer for sql output 2006-03-17 13:24 Sandro Santilli * [r1235] opOverlay.h header splitted. Reduced header inclusions in operation/overlay implementation files. ElevationMatrixFilter code moved from own file to ElevationMatrix.cpp (ideally a class-private). 2006-03-16 13:30 Sandro Santilli * [r1234] Added missing testfile 2006-03-16 13:29 Sandro Santilli * [r1233] new unit test for LineSegment (adding tests would be helpful) 2006-03-16 13:28 Sandro Santilli * [r1232] obsoleted getCoordinate(), replaced by operator[] 2006-03-16 13:27 Sandro Santilli * [r1231] Added notes about testing 2006-03-16 10:47 Sandro Santilli * [r1230] Bug #65 - Command line changes and EOL fixes Unit Test 2006-03-16 10:42 Sandro Santilli * [r1229] Bug #64 - Not all control paths return a value in geos::geom::Geometry::getClassSortIndex 2006-03-16 10:38 Sandro Santilli * [r1228] Bug #63 - Remove unreferenced local variable warning 2006-03-16 09:37 Sandro Santilli * [r1227] Initial unit tests 2006-03-15 18:59 Sandro Santilli * [r1226] Bug #62: 'struct' CoordinateLessThen in forward declaration 2006-03-15 18:57 Sandro Santilli * [r1225] small cleanup 2006-03-15 18:57 Sandro Santilli * [r1224] cleanups in DEBUG lines 2006-03-15 18:56 Sandro Santilli * [r1223] Temporary hack to avoid snapround:: Noders (still using ScaledNoder wrapper) to allow for buffer_snapround.xml test to succeed 2006-03-15 18:55 Sandro Santilli * [r1222] Added xml testfile showing bug in snapround:: noders 2006-03-15 18:44 Sandro Santilli * [r1221] Bug #60 - Missing header in some files 2006-03-15 17:33 Sandro Santilli * [r1220] Changed operator<< to use operator<< for Nodes 2006-03-15 17:17 Sandro Santilli * [r1219] Added missing forward declarations 2006-03-15 17:16 Sandro Santilli * [r1218] streamlined headers inclusion 2006-03-15 16:27 Sandro Santilli * [r1217] operator<< for Node class 2006-03-15 15:50 Sandro Santilli * [r1216] const correctness, cleanups 2006-03-15 15:27 Sandro Santilli * [r1215] cleanups 2006-03-15 15:26 Sandro Santilli * [r1214] Cleanups 2006-03-15 13:03 Sandro Santilli * [r1213] removed leftover debugging line 2006-03-15 12:54 Sandro Santilli * [r1212] Removed DepthSegment.h include 2006-03-15 12:54 Sandro Santilli * [r1211] Removed public DepthSegment definition (moved inside SubgraphDepthLocater implementation) 2006-03-15 12:52 Sandro Santilli * [r1210] DepthSegment class moved inside SubgraphDepthLocator implementaion as it was private to this file in JTS. Also, changed to reduce copies of LineSegment copies. 2006-03-15 11:45 Sandro Santilli * [r1209] doxygen comments 2006-03-15 11:44 Sandro Santilli * [r1208] debug blocks, dumping SQL when GEOS_DEBUG > 1 2006-03-15 11:42 Sandro Santilli * [r1207] more debugging lines, with two levels of debugging handled 2006-03-15 11:39 Sandro Santilli * [r1206] comments cleanup, changed computeDepths to use a list<> rather then a vector (performance related) 2006-03-15 10:40 Sandro Santilli * [r1205] Fixed to allow doxygen runs from external builddir 2006-03-15 09:51 Sandro Santilli * [r1204] streamlined header usage 2006-03-15 09:51 Sandro Santilli * [r1203] streamlined headers usage 2006-03-15 09:13 Sandro Santilli * [r1202] updated port info 2006-03-15 09:12 Sandro Santilli * [r1201] isSimple doc 2006-03-14 17:46 Sandro Santilli * [r1200] Removed unrequired include 2006-03-14 17:10 Sandro Santilli * [r1199] cleanups 2006-03-14 17:08 Sandro Santilli * [r1198] comments cleanup, integrity checks 2006-03-14 16:55 Sandro Santilli * [r1197] oops, GEOS_DEBUG default to 0 2006-03-14 16:55 Sandro Santilli * [r1196] comments cleanup 2006-03-14 16:53 Sandro Santilli * [r1195] removed endline from printing funx 2006-03-14 16:08 Sandro Santilli * [r1194] changed buildSubgraphs signature to use refs rather then pointers, made it const-correct. Reduced heap allocations in createSubgraphs() 2006-03-14 15:46 Sandro Santilli * [r1193] Added PlanarGraph::getNodes(vector&) func, to reduce useless heap allocations 2006-03-14 15:32 Sandro Santilli * [r1192] Cleaned up toString funx (more WKT friendly) 2006-03-14 14:16 Sandro Santilli * [r1191] operator<< for BufferSubgraph, more debugging calls 2006-03-14 12:55 Sandro Santilli * [r1190] Headers split: geomgraphindex.h, nodingSnapround.h 2006-03-14 11:03 Sandro Santilli * [r1189] Added operator<< for Edge and EdgeList 2006-03-14 00:37 Sandro Santilli * [r1188] Fixed include filenames 2006-03-14 00:36 Sandro Santilli * [r1187] Reduced 'buffer' headers inclusion 2006-03-14 00:19 Sandro Santilli * [r1186] opBuffer.h split, streamlined headers in some (not all) files in operation/buffer/ 2006-03-13 22:33 Sandro Santilli * [r1185] Added missing forward declarations 2006-03-13 21:54 Sandro Santilli * [r1184] Streamlined headers inclusion. 2006-03-13 21:19 Sandro Santilli * [r1183] Fixed bug in ScaledNoder scaling mechanism (hugly code, due to CoordinateSequence visitor pattern design). Tests are still failing so this possibly needs some other fix. Streamlined includes by implementation file. 2006-03-13 21:14 Sandro Santilli * [r1182] Added missing forward declarations 2006-03-13 21:13 Sandro Santilli * [r1181] Added comment about possible refactoring 2006-03-11 16:58 Sandro Santilli * [r1180] Fixed bug in OffsetCurveBuilder::getCoordinates. 2006-03-10 15:50 Sandro Santilli * [r1179] Changed 'found null Directed Edge' from an Assertion to a TopologyException, to give 'precision-reducing' overlay operation a chance to handle it (it seems to work) 2006-03-10 13:07 Sandro Santilli * [r1178] fine-tuned includes, reverted Assert=>assert due to user-input based failure 2006-03-10 12:50 Sandro Santilli * [r1177] boost detection code fix, first UTF source for testing purposes 2006-03-10 12:43 Sandro Santilli * [r1176] updated 2006-03-10 12:09 Sandro Santilli * [r1175] Update configure script to work with new boost.m4 file 2006-03-10 11:49 Sandro Santilli * [r1174] Updated boost detection macro 2006-03-10 11:41 Sandro Santilli * [r1173] Added missing include (bug#56) 2006-03-10 11:10 Sandro Santilli * [r1172] Initial boost detection code 2006-03-10 11:09 Sandro Santilli * [r1171] Comments cleanup 2006-03-10 10:48 Sandro Santilli * [r1170] Bug #58 - Patch to makefile.vc after big refactoring commit 2006-03-10 10:44 Sandro Santilli * [r1169] Unreferenced exception objects cleanup (#52) 2006-03-10 10:37 Sandro Santilli * [r1168] Added missing include (#55) 2006-03-10 10:34 Sandro Santilli * [r1167] Added missing include (#54) 2006-03-09 18:22 Sandro Santilli * [r1166] Added isvalid test for latest validop patch 2006-03-09 18:18 Sandro Santilli * [r1165] Added memory-friendly MaximalEdgeRing::buildMinimalRings() implementation. Applied patch to IsValid operation from JTS-1.7.1 2006-03-09 17:40 Sandro Santilli * [r1164] Fixed bug#33 (hopefully) 2006-03-09 16:46 Sandro Santilli * [r1163] geos::geom namespace definition, first pass at headers split 2006-03-09 16:18 Sandro Santilli * [r1162] Fixed to allow tests from external build tree (thanks Norman:) 2006-03-09 16:01 Sandro Santilli * [r1161] Fixed debugging lines 2006-03-09 15:50 Sandro Santilli * [r1160] Fixed debugging lines, added missing header 2006-03-09 15:47 Sandro Santilli * [r1159] Fixed debugging lines 2006-03-09 15:39 Sandro Santilli * [r1158] Fixed debugging lines 2006-03-09 14:48 Sandro Santilli * [r1157] Added missing INCLUDES line 2006-03-07 14:21 Sandro Santilli * [r1156] Leak plugged, tweeked output to be nice with --sql-output 2006-03-07 14:20 Sandro Santilli * [r1155] Big deal of heap allocations reduction 2006-03-07 14:18 Sandro Santilli * [r1154] Profiler singleton implemented with a function-static Profiler instance 2006-03-07 12:42 Sandro Santilli * [r1153] addedvalidity test for a case with invalid input 2006-03-07 12:41 Sandro Santilli * [r1152] Added --wkb-output and made --sql-output compatible with -v 2006-03-07 11:22 Sandro Santilli * [r1151] table name for sqlOutput normalized 2006-03-07 11:06 Sandro Santilli * [r1150] Added --sql-output switch for debugging 2006-03-07 10:46 Sandro Santilli * [r1149] verbose validity errors 2006-03-06 21:27 Sandro Santilli * [r1148] Cascading fixed after Unload definition moved to geos::io namespace 2006-03-06 19:43 Sandro Santilli * [r1147] Fixed Unload class definition namespace (geos::io) 2006-03-06 19:40 Sandro Santilli * [r1146] geos::util namespace. New GeometryCollection::iterator interface, many cleanups. 2006-03-06 15:23 Sandro Santilli * [r1145] geos::io namespace 2006-03-06 14:30 Sandro Santilli * [r1143] Validity error include Coordinate 2006-03-06 13:27 Sandro Santilli * [r1142] Cleaned up equalsExact 2006-03-06 13:26 Sandro Santilli * [r1141] Fixed equalsExact check, and also reduced tolerance 2006-03-06 12:47 Sandro Santilli * [r1140] TopologyValidationError error names (enum) renamed to avoid conflicts. 2006-03-06 12:16 Sandro Santilli * [r1139] Added second case for Union 2006-03-06 12:11 Sandro Santilli * [r1138] precision.h => geos/precision.h (#48) 2006-03-06 11:39 Sandro Santilli * [r1137] Added test extracted from data provided by Guillaume Sueur 2006-03-06 11:34 Sandro Santilli * [r1136] Dropped unused/unmaintained/platform-problematic serial version info for classes (#47) 2006-03-06 11:17 Sandro Santilli * [r1135] added a compile-time option to get VERBOSE_EXCEPTION (print args on exceptions) 2006-03-06 11:17 Sandro Santilli * [r1134] precision reducing overlayOp made compile-time optional 2006-03-06 11:05 Sandro Santilli * [r1133] Added input and output validity test facilities 2006-03-03 14:01 Sandro Santilli * [r1132] Experimental precision-reducing overlayOp 2006-03-03 13:50 Sandro Santilli * [r1131] Cleaned up InteriorPointLine class 2006-03-03 10:46 Sandro Santilli * [r1130] Removed 'using namespace' from headers, added missing headers in .cpp files, removed useless includes in headers (bug#46) 2006-03-02 18:17 Sandro Santilli * [r1129] Added robustness testcases 2006-03-02 16:22 Sandro Santilli * [r1128] Updated copyright notice 2006-03-02 16:21 Sandro Santilli * [r1127] geos::precision namespace added 2006-03-02 14:53 Sandro Santilli * [r1126] SweepLineEvent::DELETE=>DELETE_EVENT, INSERT=>INSERT_EVENT (#45) 2006-03-02 14:34 Sandro Santilli * [r1125] GeometryGraphOperation::li made a non-static member, and not more a pointer 2006-03-02 14:21 Sandro Santilli * [r1124] DEBUG => GEOS_DEBUG [#44] 2006-03-02 12:12 Sandro Santilli * [r1123] Renamed DEBUG macros to GEOS_DEBUG, all wrapped in #ifndef block to allow global override (bug#43) 2006-03-02 11:03 Sandro Santilli * [r1122] Added assertion in relate test handler 2006-03-02 11:00 Sandro Santilli * [r1121] Changed IntersectionMatrix funx taking strings to take const string& instead 2006-03-02 10:25 Sandro Santilli * [r1120] Added support for FLOATING_SINGLE precisionmodel in XML tests 2006-03-02 10:03 Sandro Santilli * [r1119] Removed use of strdup, changed GEOSjtsport() to return const char* instead of char* (is not advertised in headerfile, so no compatibility problems) 2006-03-02 09:51 Sandro Santilli * [r1118] Fixes in DEBUG lines (bug#42) 2006-03-02 09:49 Sandro Santilli * [r1117] Changed LineSegment output to use 'LINESEGMENT' label rather then 'LINESTRING' 2006-03-02 09:49 Sandro Santilli * [r1116] WINCE implmentation of gettimeofday (bug#40) 2006-03-02 09:46 Sandro Santilli * [r1115] cleaned up debugging lines 2006-03-01 18:44 Sandro Santilli * [r1114] added note about getInteriorPoint() possibly returning NULL 2006-03-01 18:43 Sandro Santilli * [r1113] Handled new NULL return from Geometry::getInteriorPoint() 2006-03-01 18:37 Sandro Santilli * [r1112] Geometry::createPointFromInternalCoord dropped (it's a duplication of GeometryFactory::createPointFromInternalCoord). Fixed bugs in InteriorPoint* and getCentroid() inserted by previous commits. 2006-03-01 18:19 Sandro Santilli * [r1111] getCentroid() test moved from testLeaksBig.xml to TestCentroid.xml (synced with JTS-1.7) 2006-03-01 18:15 Sandro Santilli * [r1110] Extracted getInteriorPoint() tests out of testLeaksBig.xml and into TestInteriorPoint.xml (synced with JTS-1.7). 2006-03-01 18:14 Sandro Santilli * [r1109] Handled NULL return from Geometry::getInteriorPoint() 2006-03-01 17:16 Sandro Santilli * [r1108] LineSegment class made final and optionally (compile-time) inlined. Reduced heap allocations in Centroid{Area,Line,Point} and InteriorPoint{Area,Line,Point}. 2006-03-01 16:42 Sandro Santilli * [r1107] Fixed include name (Bug#41) 2006-03-01 16:01 Sandro Santilli * [r1106] Fixed const correctness of operator<<(ostream&, SegmentNodeList&) [bug#37] 2006-03-01 13:49 Sandro Santilli * [r1105] Fixed debug lines (bug#36) 2006-03-01 13:48 Sandro Santilli * [r1104] Fixed missing type specifier (bug#35) 2006-03-01 13:06 Sandro Santilli * [r1103] Used FLOATING precision model in buffer.xml test, added expected results, changed XMLTester.cpp to use a tolerance when comparing expected and obtained results from buffer operations. 2006-03-01 12:12 Sandro Santilli * [r1102] Fixed a bug in verbose output preventing geometry arg 'A' from being properly printed 2006-03-01 11:47 Sandro Santilli * [r1101] Applied patch by Mateusz Loskot (Bug #39) 2006-03-01 10:48 Sandro Santilli * [r1100] Changed static TopologyValidationError::errMsg[] from 'string' to 'const char*' to reduce dynamic memory allocations. 2006-03-01 10:39 Sandro Santilli * [r1099] ctor and dtor made private and inlined 2006-03-01 09:56 Sandro Santilli * [r1098] Case insensitive operation names and geometry arguments names (a/b) 2006-03-01 09:43 Sandro Santilli * [r1097] Unrecognized tests always printed (was only printed when verbose before) 2006-03-01 08:52 Sandro Santilli * [r1096] File to be included by Makefile.vc 2006-02-28 19:22 Sandro Santilli * [r1095] Fixed in-place definition of static members in OffsetCurveBuilder (bug#33) 2006-02-28 19:18 Sandro Santilli * [r1094] Added cctype include (bug #34) 2006-02-28 17:44 Sandro Santilli * [r1093] Added a check in SegmentNode::addSplitEdge to prevent attempts to build SegmentString with less then 2 points. This is a temporary fix for the buffer.xml assertion failure, temporary as Martin Davis review would really be needed there. 2006-02-28 15:34 Sandro Santilli * [r1092] Fix for VC++ builds (Bug #32) 2006-02-28 14:34 Sandro Santilli * [r1091] Added many assertions and debugging output hunting for a bug in BufferOp 2006-02-28 14:05 Sandro Santilli * [r1090] Fixed a bug in a debugging line 2006-02-28 13:08 Sandro Santilli * [r1089] Added missing definition of IteratedNoder::MAX_ITER, moving it to private access level 2006-02-28 11:15 Sandro Santilli * [r1088] Fixed strchr use (Bug #30) 2006-02-28 11:11 Sandro Santilli * [r1087] Fixed typo in GEOSLenght function 2006-02-28 05:03 Sean Gillies * [r1085] added GEOSLength(), GEOSEnvelope() to the C API 2006-02-27 14:41 Sandro Santilli * [r1076] More verbose handling of exceptions 2006-02-27 11:53 Sandro Santilli * [r1075] DirectedEdgeStar made more safe trough assert(), use of standard iterator and dynamic casts substituting static ones. 2006-02-27 09:05 Sandro Santilli * [r1074] Doxygen comments, a few inlines and general cleanups 2006-02-24 16:20 Sandro Santilli * [r1073] Added Mateusz implementation of round() in a new math.cpp file named sym_round(). Changed use of rint_vc to sym_round in PrecisionModel. Moved rint_vc to math.cpp (geos::util namespace), to be renamed to something more meaningful 2006-02-24 15:39 Sandro Santilli * [r1072] - operator>> for Coordinate, planarNode and planarEdge - Fixed bug in planarGraphComponent::setMarked - Added linemerge.xml test (single test, should grow a bit) 2006-02-24 12:19 Sandro Santilli * [r1071] Fixed typo in config file 2006-02-23 23:17 Sandro Santilli * [r1070] - Coordinate::nullCoordinate made private - Simplified Coordinate inline definitions - LMGeometryComponentFilter definition moved to LineMerger.cpp file - Misc cleanups 2006-02-23 20:32 Sandro Santilli * [r1069] Added support for LineMerge tests. Exception printed on stderr. 2006-02-23 20:05 Sandro Santilli * [r1068] Fixed bug in MCIndexNoder constructor making memory checker go crazy, more doxygen-friendly comments, miscellaneous cleanups 2006-02-23 20:03 Sandro Santilli * [r1067] updated to also show undocumented methods 2006-02-23 11:54 Sandro Santilli * [r1066] - MCIndexPointSnapper - MCIndexSnapRounder - SnapRounding BufferOp - ScaledNoder - GEOSException hierarchy cleanups - SpatialIndex memory-friendly query interface - GeometryGraph::getBoundaryNodes memory-friendly - NodeMap::getBoundaryNodes memory-friendly - Cleanups in geomgraph::Edge - Added an XML test for snaprounding buffer (shows leaks, working on it) 2006-02-21 16:53 Sandro Santilli * [r1065] MCIndexPointSnapper, MCIndexSnapRounder 2006-02-20 21:04 Sandro Santilli * [r1064] - namespace geos::index - SpatialIndex interface synced 2006-02-20 10:14 Sandro Santilli * [r1063] - namespaces geos::index::* - Doxygen documentation cleanup 2006-02-19 19:46 Sandro Santilli * [r1062] Packages <-> namespaces mapping for most GEOS internal code (uncomplete, but working). Dir-level libs for index/ subdirs. 2006-02-18 21:08 Sandro Santilli * [r1061] - new CoordinateSequence::applyCoordinateFilter method (slow but useful) - SegmentString::getCoordinates() doesn't return a clone anymore. - SegmentString::getCoordinatesRO() obsoleted. - SegmentString constructor does not promises constness of passed CoordinateSequence anymore. - NEW ScaledNoder class - Stubs for MCIndexPointSnapper and MCIndexSnapRounder - Simplified internal interaces of OffsetCurveBuilder and OffsetCurveSetBuilder 2006-02-16 08:41 Sandro Santilli * [r1060] Fixed include: "util.h" => "geos/util.h" 2006-02-16 08:41 Sandro Santilli * [r1059] added include for round() 2006-02-16 08:19 Sandro Santilli * [r1058] Missed from last commit 2006-02-15 22:48 Sean Gillies * [r1057] added GEOSGeomType 2006-02-15 17:19 Sandro Santilli * [r1056] NodingValidator synced with JTS-1.7, added CoordinateSequence::operator[] and size() to easy port maintainance. 2006-02-15 14:59 Sandro Santilli * [r1055] JTS-1.7 sync for: noding/SegmentNode.cpp noding/SegmentNodeList.cpp noding/SegmentString.cpp 2006-02-14 13:28 Sandro Santilli * [r1054] New SnapRounding code ported from JTS-1.7 (not complete yet). Buffer op optimized by using new snaprounding code. Leaks fixed in XMLTester. 2006-02-09 15:52 Sandro Santilli * [r1053] GEOSException derived from std::exception; always thrown and cought by const ref. 2006-02-09 15:41 Sean Gillies * [r1052] incrementing C API patch level 2006-02-09 14:49 Sean Gillies * [r1051] added GEOSArea() to the C API 2006-02-09 13:44 Sandro Santilli * [r1050] Added support for SRID in input WKB, undeprecated Geometry::setSRID and Geometry::getSRID 2006-02-09 01:47 Frank Warmerdam * [r1049] Botched last fix. Hopefully this is better. 2006-02-09 01:13 Sandro Santilli * [r1048] Added missing include 2006-02-09 00:06 Frank Warmerdam * [r1047] Fixed support for consuming WKB for 'POLYGON EMPTY' with numRings==0. http://bugzilla.remotesensing.org/show_bug.cgi?id=1064 2006-02-08 17:18 Sandro Santilli * [r1046] - New WKTWriter::toLineString and ::toPoint convenience methods - New IsValidOp::setSelfTouchingRingFormingHoleValid method - New Envelope::centre() - New Envelope::intersection(Envelope) - New Envelope::expandBy(distance, [ydistance]) - New LineString::reverse() - New MultiLineString::reverse() - New Geometry::buffer(distance, quadSeg, endCapStyle) - Obsoleted toInternalGeometry/fromInternalGeometry - More const-correctness in Buffer "package" 2006-02-08 13:07 Sandro Santilli * [r1045] Added note about new LineSequencer class 2006-02-08 12:59 Sandro Santilli * [r1044] - NEW Geometry::applyComponentFilter() templated method - Changed Geometry::getGeometryN() to take unsigned int and getNumGeometries to return unsigned int. - Changed planarNode::getDegree() to return unsigned int. - Added Geometry::NonConstVect typedef - NEW LineSequencer class - Changed planarDirectedEdgeStar::outEdges from protected to private - added static templated setVisitedMap to change Visited flag for all values in a map - Added const versions of some planarDirectedEdgeStar methods. - Added containers typedefs for planarDirectedEdgeStar 2006-02-07 13:26 Sandro Santilli * [r1043] Added missing geomgraph SUBDIR 2006-02-07 12:02 Sandro Santilli * [r1042] Removed TestConvexHull.xml file (already included in testLeaksBig.xml 2006-02-06 11:27 Sandro Santilli * [r1041] new entry 2006-02-05 17:14 Sandro Santilli * [r1040] - New ConnectedSubgraphFinder class. - More iterators returning methods, inlining and cleanups in planargraph. 2006-02-04 00:54 Sandro Santilli * [r1039] - Doxygen dox updated - LineStringLT struct moved from geomgraph.h to geom.h - New planarSubgraph class - Fixed ruby Makefiles to avoid running tests when disabled - Renamed TESTS variable to XMLTESTS to not confuse 'make check' rule 2006-02-03 09:26 Sandro Santilli * [r1038] Added missing file 2006-02-02 02:20 Sandro Santilli * [r1037] Fixed bug in isRectangle() failing to detect rectangles. 2006-02-01 22:22 Sandro Santilli * [r1036] updated 2006-02-01 22:21 Sandro Santilli * [r1035] - Added rectangle-based optimizations of intersects() and contains() ops - Inlined all planarGraphComponent class 2006-01-31 21:42 Sandro Santilli * [r1034] Added DepthSegment object 2006-01-31 21:36 Sandro Santilli * [r1033] Fixes error in calling read_hex from scripting languages. 2006-01-31 21:35 Sandro Santilli * [r1032] Erroneusly ended in CVS 2006-01-31 21:17 Sandro Santilli * [r1031] Added missing file from last commits 2006-01-31 19:11 Sandro Santilli * [r1030] Another left-over from cleanups 2006-01-31 19:10 Sandro Santilli * [r1029] Removed leftover files in obsoleted dirs 2006-01-31 19:07 Sandro Santilli * [r1028] - Renamed DefaultCoordinateSequence to CoordinateArraySequence. - Moved GetNumGeometries() and GetGeometryN() interfaces from GeometryCollection to Geometry class. - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence class. - Reworked automake scripts to produce a static lib for each subdir and then link all subsystem's libs togheter - Moved C-API in it's own top-level dir capi/ - Moved source/bigtest and source/test to tests/bigtest and test/xmltester - Fixed PointLocator handling of LinearRings - Changed CoordinateArrayFilter to reduce memory copies - Changed UniqueCoordinateArrayFilter to reduce memory copies - Added CGAlgorithms::isPointInRing() version working with Coordinate::ConstVect type (faster!) - Ported JTS-1.7 version of ConvexHull with big attention to memory usage optimizations. - Improved XMLTester output and user interface - geos::geom::util namespace used for geom/util stuff - Improved memory use in geos::geom::util::PolygonExtractor - New ShortCircuitedGeometryVisitor class - New operation/predicate package 2006-01-30 21:59 Frank Warmerdam * [r1027] yikes! comment out debug define again 2006-01-30 21:58 Frank Warmerdam * [r1026] fixed up some debug messages 2006-01-30 16:55 Sandro Santilli * [r1025] More patches from Charlie Savage 2006-01-27 08:58 Sandro Santilli * [r1024] Python and Ruby build disable by default (until we've properly tested it) 2006-01-27 08:25 Sandro Santilli * [r1023] * Ruby - removes dependency on renames.i file which is no longer deleted and was removed from CVS last week * Python - fixes autoconf search for Python include path * Python - fixes autoconf search for Python lib directory on MingW/windows * Python - adds python library to link line so that python extension can be built 2006-01-22 22:48 Sandro Santilli * [r1022] Added Safe's performance improvement idea for CoordinateSequence 2006-01-21 16:11 Sandro Santilli * [r1021] updated 2006-01-21 16:08 Sandro Santilli * [r1020] Fixed integer conversion bug (ported from JTS-1.7). Added last port information. 2006-01-21 16:04 Sandro Santilli * [r1019] Added endian specification to case descriptions. All tests are Little Endian, should add the same tests with Big Endian format. 2006-01-20 19:28 Sandro Santilli * [r1018] Updated port information 2006-01-20 19:21 Sandro Santilli * [r1017] Fixed bug #13 2006-01-20 19:11 Sandro Santilli * [r1016] Updated last port info 2006-01-20 17:20 Sandro Santilli * [r1015] More SWIG/python/ruby patches 2006-01-20 00:59 Sandro Santilli * [r1014] Better debugging 2006-01-20 00:59 Sandro Santilli * [r1013] PrecisionModel made FLOATING 2006-01-18 17:49 Sandro Santilli * [r1012] Reworked XMLTester to be quiet by default. Use -v switch to make it verbose. 2006-01-18 17:47 Sandro Santilli * [r1011] Added GEOMETRYCOLLECTION test 2006-01-18 17:47 Sandro Santilli * [r1010] Added another local test to the test rule 2006-01-18 17:46 Sandro Santilli * [r1009] Fixed leak in ::writeFormatted(Geometry *) 2006-01-18 17:45 Sandro Santilli * [r1008] more debugging lines 2006-01-18 13:23 Sandro Santilli * [r1007] Set binary flag for stringstream used in ::readHEX() 2006-01-18 12:54 Sandro Santilli * [r1006] Added HEXWKB support in XMLTester. Added a simple test in HEXWKB form and a 'test' rule running the locally-available tests and showing result summay. 2006-01-18 10:02 Sandro Santilli * [r1005] Added missing macro file 2006-01-17 12:03 Sandro Santilli * [r1004] Modified AC_PROG_SWIG macro to set SWIG to the empty string on error (rather then making it echo an error and return false). SWIG version 1.3.28 or up required in order to build SWIG-based extensions. 2006-01-16 18:34 Sandro Santilli * [r1003] Added initial conditional build of python and ruby wrappers 2006-01-15 23:01 Sandro Santilli * [r1001] Added bare build/install/dist scripts support for ruby interface 2006-01-15 21:23 Sandro Santilli * [r1000] Initial import of ruby unit tests 2006-01-15 21:22 Sandro Santilli * [r999] Added Envelope constructor by string (accepting what's returned by ::toString) 2006-01-15 21:19 Sandro Santilli * [r998] Added WKBWriter::writeHEX() and WKBReader::readHEX() 2006-01-12 11:44 Sandro Santilli * [r997] synced after 2.2.1 release 2006-01-12 11:44 Sandro Santilli * [r996] Removed double call to ::isValid 2006-01-08 15:39 Sandro Santilli * [r994] Changed finite() function call with FINITE() macro. 2006-01-08 15:24 Sandro Santilli * [r993] Changed container-related typedef to class-scoped STL-like typedefs. Fixed const correctness of EdgeIntersectionList::begin() and ::end() consts; defined M_PI when undef as suggested by Charlie Savage. Removed include from GeometricShapeFactory.cpp. 2005-12-22 12:46 Sandro Santilli * [r992] Imported Charlie Savage new ruby wrapper and swig changes 2005-12-14 11:22 Sandro Santilli * [r991] Added a note about the need to *always* increment CAPI version 2005-12-14 02:32 Sandro Santilli * [r990] New entry 2005-12-13 23:59 Sandro Santilli * [r989] Removed INTERFACE_* defines (obsoleted). Made GEOSCoordSeq_clone() arg const (won't change ABI, it's C world, lucky ;) 2005-12-13 23:03 Sandro Santilli * [r988] Removed conditional blocks based on GEOS version (we're always in sync). This fixed an annoying problem introduced since INTERFACE_LAST and INTERFACE_CURREN were taken off geos/version.h 2005-12-12 09:32 Sandro Santilli * [r987] Switched to -release mode for C++ library versioning. Every release will be binary-incompatible with previous. Removed GEOS_FIRST_INTERFACE and GEOS_LAST_INTERFACE defines from geos/version.h. 2005-12-11 10:41 Sandro Santilli * [r984] Fixed premature initialization of average Z value in ElevationMatrixFilter 2005-12-11 10:38 Sandro Santilli * [r983] Fixed mungled versions (1.0.0/3.0.1 => 1.0.1/3.0.0) 2005-12-10 16:07 Sandro Santilli * [r981] Unkown -> Unknown typo fix 2005-12-09 13:24 Sandro Santilli * [r980] Capi lib version set to 1.0.1 (due to leak fix in GEOSHasZ) 2005-12-09 11:36 Sandro Santilli * [r977] Small leak plugged in CAPI::GEOSHasZ() and in invalid input to PolygonizeGraph (again) 2005-12-09 10:32 Sandro Santilli * [r974] Cleaned up debugging line left over from previous commit 2005-12-09 10:03 Sandro Santilli * [r972] Fixed a bug making PolygonizeGraph choking on invalid LineStrings. Minor optimizations in Polygonizer loops. 2005-12-08 14:14 Sandro Santilli * [r971] ElevationMatrixFilter used for both elevation and Matrix fill, thus removing CoordinateSequence copy in ElevetaionMatrix::add(Geometry *). Changed CoordinateFilter::filter_rw to be a const method: updated all apply_rw() methods to take a const CoordinateFilter. 2005-12-08 01:39 Sandro Santilli * [r970] SegmentString::eiList made a real object rather then a pointer. Adde getter for const and non-const references of it (dropping get by pointer) 2005-12-08 01:11 Sandro Santilli * [r969] minor optimizations in loops 2005-12-08 00:24 Sandro Santilli * [r968] Reduced coordinate assignments in ::createSplitEdge 2005-12-08 00:03 Sandro Santilli * [r967] LineBuilder::lineEdgesList made a real vector, rather then pointer (private member). Small optimizations in LineBuilder loops, cleanups in LineBuilder class dox. 2005-12-07 23:36 Sandro Santilli * [r966] standard indentation 2005-12-07 22:52 Sandro Santilli * [r965] Added CoordinateSequence::apply_rw(CoordinateFilter *) and CoordinateSequence::apply_ro(CoordinateFilter *) const to reduce coordinate copies on read-write CoordinateFilter applications (previously required getAt()/setAt() calls). Undefined PROFILE_COORDINATE_COPIES (erroneously left defined by previous commit) 2005-12-07 21:55 Sandro Santilli * [r964] Optimized memory allocations in ::removeRepeatedPoints 2005-12-07 20:52 Sandro Santilli * [r963] minor container methods call reduction 2005-12-07 20:51 Sandro Santilli * [r962] removed dead code 2005-12-07 20:51 Sandro Santilli * [r961] minor cleanups 2005-12-07 20:49 Sandro Santilli * [r960] Oops, removed Coordinate copies introduced by recent code cleanups 2005-12-07 19:18 Sandro Santilli * [r959] Changed PlanarGraph::addEdges and EdgeList::addAll to take a const vector by reference rather then a non-const vector by pointer. Optimized polygon vector allocations in OverlayOp::computeOverlay. 2005-12-06 10:24 Sandro Santilli * [r958] Added acsite.m4 to distribution. Added macros and flags required to build on mingw arch. 2005-11-30 16:07 Sandro Santilli * [r955] Added geos_c.h 2005-11-30 16:03 Sandro Santilli * [r951] Added --ldflags 2005-11-30 16:01 Sandro Santilli * [r949] Updated with C-API usage 2005-11-30 11:27 Sandro Santilli * [r945] catch std::exception by ref 2005-11-30 11:25 Sandro Santilli * [r944] includes cleanup 2005-11-29 23:01 Sandro Santilli * [r942] updated moving some items to 2.2.0 2005-11-29 15:45 Sandro Santilli * [r936] Fixed signedness of TopologyLocation methods, cleanups. 2005-11-29 15:16 Sandro Santilli * [r935] Fixed sign-related warnings and signatures. 2005-11-29 14:49 Sandro Santilli * [r934] More info 2005-11-29 14:44 Sandro Santilli * [r933] Updated 2005-11-29 14:39 Sandro Santilli * [r932] Removed number of points cache in Edge, replaced with local caches. 2005-11-29 14:39 Sandro Santilli * [r931] More signed/unsigned fixes 2005-11-29 13:39 Sandro Santilli * [r930] Moved byte typedef from geom.h to io.h. Removed useless commas at inlined funx end. Changed CoordinateSequenceFactory::create(siz,dims) to use unsigned for dims. 2005-11-29 11:18 Sandro Santilli * [r929] organized changes info 2005-11-29 00:48 Sandro Santilli * [r928] Removed edgeList cache from EdgeEndRing. edgeMap is enough. Restructured iterated access by use of standard ::iterator abstraction with scoped typedefs. 2005-11-28 18:37 Sandro Santilli * [r927] Minor warning removal 2005-11-25 12:22 Sandro Santilli * [r926] Made XMLTester able to run multiple test files and keep overall counters. 2005-11-25 11:40 Sandro Santilli * [r925] Another getSize in for loop, another int-unsigned int warning 2005-11-25 11:31 Sandro Santilli * [r924] Removed all CoordinateSequence::getSize() calls embedded in for loops. 2005-11-25 11:30 Sandro Santilli * [r923] Fix in ::equals() - this finally passes testLeaksBig.xml tests 2005-11-25 09:57 Sandro Santilli * [r922] Fixed bug in getCoordinates() [ introduced by previous commit ] 2005-11-24 23:43 Sandro Santilli * [r921] Yes another fix, sorry. Missing const-correctness. 2005-11-24 23:24 Sandro Santilli * [r920] Fixed equals() function [ optimized in previous commit, but unchecked ] 2005-11-24 23:24 Sandro Santilli * [r919] Added note about CoordinateSequence signed->unsigned change in API 2005-11-24 23:09 Sandro Santilli * [r918] CoordinateSequence indexes switched from int to the more the correct unsigned int. Optimizations here and there to avoid calling getSize() in loops. Update of all callers is not complete yet. 2005-11-24 23:07 Sandro Santilli * [r917] CentroidLine made concrete class (only destructor was virtual) - avoided heap allocation for owned Coordinate centSum 2005-11-21 16:03 Sandro Santilli * [r916] Coordinate interface change: Removed setCoordinate call, use assignment operator instead. Provided a compile-time switch to make copy ctor and assignment operators non-inline to allow for more accurate profiling. Coordinate copies removal: NodeFactory::createNode() takes now a Coordinate reference rather then real value. This brings coordinate copies in the testLeaksBig.xml test from 654818 to 645991 (tested in 2.1 branch). In the head branch Coordinate copies are 222198. Removed useless coordinate copies in ConvexHull operations STL containers heap allocations reduction: Converted many containers element from pointers to real objects. Made some use of .reserve() or size initialization when final container size is known in advance. Stateless classes allocations reduction: Provided ::instance() function for NodeFactories, to avoid allocating more then one (they are all stateless). HCoordinate improvements: Changed HCoordinate constructor by HCoordinates take reference rather then real objects. Changed HCoordinate::intersection to avoid a new allocation but rather return into a provided storage. LineIntersector changed to reflect the above change. 2005-11-18 00:55 Sandro Santilli * [r915] Fixed a bug in EdgeRing::containsPoint(). Changed EdgeRing::getLinearRing() to avoid LinearRing copy and updated usages from PolygonBuilder. Removed CoordinateSequence copy in EdgeRing (ownership is transferred to its LinearRing). Removed heap allocations for EdgeRing containers. Initialization lists and cleanups. 2005-11-16 22:21 Sandro Santilli * [r913] enforced const-correctness and use of initializer lists. 2005-11-16 15:49 Sandro Santilli * [r912] Reduced gratuitous heap allocations. 2005-11-15 18:30 Sandro Santilli * [r911] Removed dead code 2005-11-15 12:14 Sandro Santilli * [r909] Reduced heap allocations, made use of references when appropriate, small optimizations here and there. 2005-11-15 10:04 Sandro Santilli * [r908] Reduced heap allocations (vectors, mostly). Enforced const-correctness, changed some interfaces to use references rather then pointers when appropriate. 2005-11-15 10:02 Sandro Santilli * [r907] optimized envelope computation reducing virtual calls 2005-11-14 18:14 Sandro Santilli * [r906] Reduced heap allocations made by TopologyLocation and Label objects. Enforced const-correctness on GraphComponent. Cleanups. 2005-11-10 16:26 Sandro Santilli * [r904] Fixed printHEX (was printing one char past the WKB) 2005-11-10 15:20 Sandro Santilli * [r903] Made virtual overloads explicit. 2005-11-10 10:47 Sandro Santilli * [r902] Renamed MultiPoint::getCoordinate(int) to MultiPoint::getCoordinateN(int) to avoid hiding of Geometry::getCoordinate(). 2005-11-10 10:24 Sandro Santilli * [r901] Fixed virtual overload of CoordinateArrayFilter::filter* 2005-11-10 09:33 Sandro Santilli * [r900] Removed virtual overloading LineString::compareTo(LineString *) 2005-11-09 15:14 Sandro Santilli * [r899] Forgot to add this 2005-11-09 13:44 Sandro Santilli * [r898] Cleanups in Node and NodeMap. Optimization of EdgeIntersectionLessThen. 2005-11-09 08:57 Sandro Santilli * [r897] IntersectionMatrix made a concrete and final type. Cleanups in class definition. 2005-11-08 20:12 Sandro Santilli * [r896] Memory overhead reductions in buffer operations. 2005-11-08 12:32 Sandro Santilli * [r895] Cleanups, ::setPoint small improvement 2005-11-08 11:33 Sandro Santilli * [r894] comments cleanup 2005-11-08 10:26 Sandro Santilli * [r893] Library versioning took back to 3.0.0 2005-11-08 10:03 Sandro Santilli * [r892] Set library version to 2.2.0. Cleaned up Doxygen warnings. Inlined more Envelope methods. Dropped deprecated Envelope::overlaps methods. 2005-11-07 18:07 Sandro Santilli * [r890] Removed VisualStudio knowledge from configure script 2005-11-07 18:05 Sandro Santilli * [r889] Reduced set<> lookups 2005-11-07 13:17 Frank Warmerdam * [r888] no longer used 2005-11-07 13:17 Frank Warmerdam * [r887] removed VisualStudio, no longer distributed 2005-11-07 13:16 Frank Warmerdam * [r886] obsolete 2005-11-07 12:31 Sandro Santilli * [r885] Changed EdgeIntersectionList to use a set<> rathern then a vector<>, and to avoid dynamic allocation of initial header. Inlined short SweepLineEvent methods. 2005-11-07 11:32 Sandro Santilli * [r884] Added const qualifiers to function to reflect paradigm of immutable Geometry objects. 2005-11-04 15:42 Sandro Santilli * [r883] Fixed bug in SweepLineEventLessThen functor (didn't conform to strict weak ordering). Note: this was introduced by previous commit. 2005-11-04 11:06 Sandro Santilli * [r882] updated 2005-11-04 11:04 Sandro Santilli * [r881] Ported revision 1.38 of IsValidOp.java (adding closed Ring checks). Changed NestedRingTester classes to use Coorinate pointers rather then actual objects, to speedup NULL tests. Added JTS port revision when applicable. 2005-11-04 08:28 Sandro Santilli * [r880] Ported speedup of OverlayOp::insertUniqueEdge() from JTS-1.7 (rev 1.23) Updated NEWS file. 2005-11-03 21:28 Sandro Santilli * [r878] Fixed constructors broke by previous commit 2005-11-03 19:51 Sandro Santilli * [r877] Indentation changes, small vector memory allocation optimization. 2005-11-03 09:15 Sandro Santilli * [r876] Removed declaration of PointCoordinateSequence and PointCoordinateSequenceFactory 2005-11-01 09:40 Sandro Santilli * [r875] Replaced finite() with FINITE() calls. 2005-10-27 14:05 Sandro Santilli * [r873] Added a SweepLineEventLessThen functor to be used by sort algorithm. 2005-10-24 13:28 Sandro Santilli * [r872] Changed constructors to take ownership of GEOSGeom and GEOSCoordSeq objects. Changed inspectors to retain ownership of GEOSGeom and GEOSCoordSeq objects. Added GEOSGeom_clone() method. 2005-10-21 15:13 Sandro Santilli * [r871] Added GEOSGeom_clone() function 2005-10-21 12:14 Sandro Santilli * [r870] Added missing GEOS_DLL specifiers 2005-10-21 12:07 Sandro Santilli * [r869] Added fine-grained geometry constructors and GEOSCoordSeq abstract data type. Renamed GEOSmakeCollection to GEOSGeom_createCollection 2005-10-21 09:02 Sandro Santilli * [r868] typo fixed 2005-10-21 02:46 Frank Warmerdam * [r867] added myself to authors - isn't that cheeky! 2005-10-21 02:45 Frank Warmerdam * [r866] added note on source\makefile.vc 2005-10-21 02:44 Frank Warmerdam * [r865] added a wee readme 2005-10-21 02:41 Frank Warmerdam * [r864] added DLL building, and geostest.exe 2005-10-21 02:41 Frank Warmerdam * [r863] need to DLL export C API 2005-10-21 02:37 Frank Warmerdam * [r862] DLL Export functions 2005-10-21 02:37 Frank Warmerdam * [r861] avoid non-portable vasprintf, make big buffer static 2005-10-21 01:57 Frank Warmerdam * [r860] updated for 3.0.0 and added C API 2005-10-20 20:37 Frank Warmerdam * [r859] added getMachineByteOrder(), convert to unix text mode 2005-10-19 13:07 Sandro Santilli * [r858] Added support for SRID flag in WKB (full EWKB is accepted now) 2005-10-19 12:59 Sandro Santilli * [r857] Added input stream checks in ByteOrderDataInStream, throwing ParseException on unexpected EOF 2005-10-17 15:55 Sandro Santilli * [r856] Added GetGeometryN, GetInteriorRingN, GetExteriorRing 2005-10-17 14:37 Sandro Santilli * [r855] Added comments on exception returns for Geometry info functions 2005-10-17 14:33 Sandro Santilli * [r854] Added missing exception handlers from previous commit. Fixed GEOSGeomTypeId signatures. 2005-10-17 12:56 Sandro Santilli * [r853] Removed GEOS_VERSION define (Geometry.cpp, the only file using this will use the one in version.h) 2005-10-17 12:55 Sandro Santilli * [r852] Fixed GEOSGeom typedef to be accepted by C++ compilers, added extern "C" namespace for inclusion by C++ code (really needed?) 2005-10-17 09:38 Sandro Santilli * [r851] Added GEOSDistance() function. Trapped all exceptions and reported using ERROR_MESSAGE rather then NOTICE_MESSAGE. Changed WKB functions to use 'unsigned char' rather then 'char' Added missing GEOS_setWKBOutputDims() function in header file. 2005-09-28 16:33 Sandro Santilli * [r850] Added GEOS_setWKBOutputDims(int) function to specify coordinate dimension in WKB output. 2005-09-28 10:15 Sandro Santilli * [r849] WKBWriter ctor out-lined (will require changes in the near future, for higher dimensions support), added support for 3d WKB output 2005-09-28 09:36 Sandro Santilli * [r848] Cleanups in the printHEX function 2005-09-27 16:29 Sandro Santilli * [r847] Ported JTS-1.7 use of PrecisionModel in WKBReader 2005-09-27 16:20 Sandro Santilli * [r846] Reverted previous change, fixed the bug by turning WKBReader.factory into a reference rather then a real object. ABI still breaks, but API at least is safe (we didn't release any WKB-aware package so breaking ABI is not a big deal at this stage). 2005-09-27 16:00 Sandro Santilli * [r845] Fixed bug in WKBReader destroying the GeometryFactory used in Geometry construction. Changed it's definition to *require* a GeometryFactory pointer parameter. 2005-09-27 08:51 Sandro Santilli * [r844] Added XMLTester.h in XMLTester_SOURCES list 2005-09-26 14:40 Sandro Santilli * [r843] Fixed handling of higher dimensional WKB streams 2005-09-26 13:46 Sandro Santilli * [r842] Modified GEOS_CAPI_VERSION to include underlying GEOS version 2005-09-26 13:42 Sandro Santilli * [r841] Moved C-api versioning to top-level configure.in Added version info in geos_c.h 2005-09-26 12:25 Sandro Santilli * [r840] Changed LineMerge interface to accept a single Geometry and return the simpler Geometry obtainable with the set of merger LineStrings. Fixed leaks in geostest, fixed a leak in GEOSRelate(). 2005-09-26 12:23 Sandro Santilli * [r839] Initializzation lists in PrecisionModel ctors 2005-09-26 11:04 Sandro Santilli * [r838] Added changes in LineMerger 2005-09-26 11:01 Sandro Santilli * [r837] Const correctness changes in LineMerger package, and a few speedups. 2005-09-26 08:18 Sandro Santilli * [r836] Added .lo, .la and geostest 2005-09-26 08:17 Sandro Santilli * [r835] Removed memory leak from WKB tester 2005-09-23 17:20 Sandro Santilli * [r834] Made LineMerger graph be a real object (rather then a pointer to it) 2005-09-23 16:07 Sandro Santilli * [r833] Fixed export of GEOSPolygonize() and GEOSMakeCollection() 2005-09-23 09:49 Sandro Santilli * [r832] Added GEOSMakeCollection. Changed GEOSGetCentroid to return an EmptyGeometry when no Centroid can be computed (Empty input, for example). 2005-09-19 08:16 Sandro Santilli * [r831] Added C api 2005-09-14 15:11 Sandro Santilli * [r830] Removed functions returning not-new GEOSGeom objects to avoid ambiguity whereas when to destroy returns. Added not about memory management. 2005-09-14 14:55 Sandro Santilli * [r829] Added copyright notices and usage notes 2005-09-14 14:28 Sandro Santilli * [r828] Fixed bug writing WKB for all Multi* geoms as Collections. 2005-09-14 13:58 Sandro Santilli * [r827] Initial abstract C api. 2005-09-14 13:56 Sandro Santilli * [r826] Typo fixed 2005-09-03 21:26 Sandro Santilli * [r825] Reworked WKB I/O to avoid use of templates and make better use of STL 2005-08-22 13:34 Sandro Santilli * [r822] Added 2.1.4 section 2005-08-22 13:31 Sandro Santilli * [r821] Fixed comparator functions used with STL sort() algorithm to implement StrictWeakOrdering semantic. 2005-07-12 14:33 Sandro Santilli * [r819] updated 2005-07-11 16:21 Sandro Santilli * [r818] Removed '_' prefix from header guards 2005-07-11 12:17 Sandro Santilli * [r817] Cleaned up syntax 2005-07-11 12:17 Sandro Santilli * [r816] Commented out useless include 2005-07-11 10:50 Sandro Santilli * [r815] Added parens suggested by compiler 2005-07-11 10:27 Sandro Santilli * [r814] Cleaned up signed/unsigned mismatches 2005-07-11 10:27 Sandro Santilli * [r813] Fixed initializzazion lists 2005-07-11 10:26 Sandro Santilli * [r812] Made CoordinateSequence::getDimension return unsigned int instead of int 2005-07-11 10:23 Sandro Santilli * [r811] removed useless assignment 2005-06-30 18:31 Sandro Santilli * [r807] Ported SubgraphDepthLocator optimizations from JTS code 2005-06-28 21:13 Sandro Santilli * [r803] Fixed a bug introduced by LineSegment skip - made LineSegment skip a compile-time optione 2005-06-28 16:52 Sandro Santilli * [r802] Added number of points count as a debugging aid 2005-06-28 11:22 Sandro Santilli * [r801] Added DepthSegmentLT bugfix 2005-06-28 01:07 Sandro Santilli * [r796] improved extraction of result points in overlay op 2005-06-28 00:04 Sandro Santilli * [r794] improved ::isIncidentEdgeInResult() method 2005-06-27 21:58 Sandro Santilli * [r793] Bugfix in DepthSegmentLT as suggested by Graeme Hiebert 2005-06-27 21:24 Sandro Santilli * [r790] Fixed bug just-introduced with optimization. 2005-06-27 21:21 Sandro Santilli * [r789] Reduced Coordinate copies due to LineSegment overuse 2005-06-25 10:20 Sandro Santilli * [r787] OverlayOp speedup (JTS port) 2005-06-24 11:12 Sandro Santilli * [r786] Added LineIntersector concrete type note 2005-06-24 11:09 Sandro Santilli * [r785] Dropped RobustLineIntersector, made LineIntersector a concrete class. Added LineIntersector::hasIntersection(Coordinate&,Coordinate&,Coordinate&) to avoid computing intersection point (Z) when it's not necessary. 2005-06-23 14:22 Sandro Santilli * [r784] Inlined and added missing ::clone() for Geometry subclasses 2005-06-23 11:23 Sandro Santilli * [r782] performance improvement for CGAlgorithms::isOnLine() 2005-06-22 00:46 Sandro Santilli * [r779] Shortcircuit tests for Union 2005-06-22 00:46 Sandro Santilli * [r777] Fixed bugus handling of collections in ::buildGeometry 2005-06-21 12:22 Sandro Santilli * [r773] XMLTester code cleanups 2005-06-20 10:23 Sandro Santilli * [r772] XMLTester installed by default 2005-06-17 15:17 Sandro Santilli * [r770] Removed ltmain.sh from repository, will be created by autogen.sh 2005-06-17 15:08 Sandro Santilli * [r766] Polygonizer segfault fix 2005-06-17 14:58 Sandro Santilli * [r764] Fixed segfault in LinearRing and LineString constructors 2005-06-14 11:57 Sandro Santilli * [r761] Added workaround for mingw Polygon name clash 2005-06-10 14:04 Sandro Santilli * [r760] Added libtoolize call 2005-06-10 13:24 Sandro Santilli * [r758] Added use declaration to make MingW build work 2005-06-08 09:38 Sandro Santilli * [r754] Added GCC version requirement note 2005-06-05 10:41 Sandro Santilli * [r752] Changes file renamed back to NEWS, automake insists on finding it. 2005-05-30 16:20 No Body * [r750] Blank news file to molfify new versions of autoconf 2005-05-24 08:42 Sandro Santilli * [r749] Info moved into CHANGES file 2005-05-24 08:42 Sandro Santilli * [r748] Filled in section from 2.0.0 to 2.1.1 2005-05-24 07:48 Sandro Santilli * [r744] Initial import 2005-05-23 16:42 Sandro Santilli * [r728] Added Refractions copyright 2005-05-23 15:13 Sandro Santilli * [r717] Added debugging output 2005-05-23 15:04 Sandro Santilli * [r716] Fixed bug in ::reverse() 2005-05-22 17:45 Sandro Santilli * [r715] Fixed initialization list order 2005-05-22 17:42 Sandro Santilli * [r714] Added missing WKBWriterT.h 2005-05-20 16:15 Sandro Santilli * [r713] Code cleanups 2005-05-20 16:14 Sandro Santilli * [r712] Fixed a bug in addPolygonRing setting wrong depths on Edges 2005-05-19 10:29 Sandro Santilli * [r711] Removed some CGAlgorithms instances substituting them with direct calls to the static functions. Interfaces accepting CGAlgorithms pointers kept for backward compatibility but modified to make the argument optional. Fixed a small memory leak in OffsetCurveBuilder::getRingCurve. Inlined some smaller functions encountered during bug hunting. Updated Copyright notices in the touched files. 2005-05-19 10:26 Sandro Santilli * [r710] Added bogus multipolygon buffering test 2005-05-13 18:06 Sandro Santilli * [r709] Added default tolerance parameter for equalsExact 2005-05-13 17:15 Sandro Santilli * [r708] cleanups and indentations 2005-05-13 17:14 Sandro Santilli * [r707] Added comment about 2D-only comparison of ::equal(Coordinate, Coordinate, double) 2005-05-09 21:17 Sandro Santilli * [r706] Second argument to ::write made mandatory. 2005-05-09 10:35 Sandro Santilli * [r705] Ported JTS robustness patches made by Martin on suggestions by Kevin. 2005-05-03 15:30 Sandro Santilli * [r704] Added WKB TODOs 2005-04-29 17:40 Sandro Santilli * [r703] Updated Doxygen documentation and some Copyright headers. 2005-04-29 16:36 Sandro Santilli * [r702] Fixed biostringstream stream output. 2005-04-29 16:36 Sandro Santilli * [r701] Made WKBReader use global_factory, for having WKB reads produce same context of input geoms. 2005-04-29 15:34 Sandro Santilli * [r700] Typedef'ed biostringstream, preferred parameter for WKB parser templates. Added << operator for biostringstream. Typedef'ed WKBWriter and WKBReader to be parametrized by biostringstream. Added WKBtest in doc/example.cpp 2005-04-29 11:52 Sandro Santilli * [r699] Added new JTS interfaces for CoordinateSequence and factories, removed example implementations to reduce maintainance costs. Added first implementation of WKBWriter, made ByteOrderDataInStream a template class. 2005-04-29 11:50 Sandro Santilli * [r698] Added machine byte order extractor 2005-04-21 15:13 Sandro Santilli * [r697] library version bumped to 3.0.0 2005-04-21 13:43 Sandro Santilli * [r696] Updated chage logs 2005-04-21 11:16 Sandro Santilli * [r695] Removed useless Coordinate copies in mergeZ() - patch by Safe Software 2005-04-20 17:56 Sandro Santilli * [r694] Removed NonRobustCGAlgorithms and RobustCGAlgorithms, already unused (CGAlgorithms replaces both with robust implementation). 2005-04-20 17:22 Sandro Santilli * [r693] Added initial implementation of WKBReaderT and ByteOrderDataInStreamT class templates and ByteOrderValues class. Work is unfinished as WKBReader requires new interface of CoordinateSequence taking higher dimensions into account. 2005-04-20 17:18 Sandro Santilli * [r692] Added standard copyright header 2005-04-19 11:49 Sandro Santilli * [r691] Fixed segfault in ::isEmpty 2005-04-14 11:49 Sandro Santilli * [r690] Applied slightly modified patch by Cheng Shan to speedup WKT parsing. 2005-04-07 18:43 Sandro Santilli * [r689] Fixed bug throwing an exception when a result could be returned instead (ported JTS patch) 2005-04-06 11:09 Sandro Santilli * [r688] Applied patch from Jon Schlueter (math.h => cmath; ieeefp.h in "C" block) 2005-04-02 17:07 Sean Gillies * [r687] now supporting the win32 platform, thanks to Howard Butler 2005-03-26 08:19 Sandro Santilli * [r686] Commented out Polygonizer::LineStringAdder friendship 2005-03-10 17:27 Sandro Santilli * [r685] ported from current JTS 2005-03-04 07:48 Sandro Santilli * [r684] Removed useless copy from ::isOnLine() - suggested by Dale Lutz 2005-03-02 08:14 Sandro Santilli * [r683] Removed commented line, cousing strange behaviours with autotools. 2005-02-22 18:21 Sandro Santilli * [r682] Changed SegmentNode to contain a *real* Coordinate (not a pointer) to reduce construction costs. 2005-02-22 17:10 Sandro Santilli * [r681] Reduced CoordinateSequence::getSize() calls. 2005-02-22 16:24 Sandro Santilli * [r680] cached number of points in Edge 2005-02-22 16:23 Sandro Santilli * [r679] Cached number of points in CoordinateSequence. 2005-02-22 15:49 Sandro Santilli * [r678] Reduced calls to DefaultCoordinateSequence->getSize(). 2005-02-22 15:16 Sandro Santilli * [r677] STRtree::avg() and STRtree::centreY() inlined. 2005-02-22 10:55 Sandro Santilli * [r676] Optimized Edge::equals(Edge *e) 2005-02-18 08:20 Sandro Santilli * [r675] Added support for point-per-quadrant argument in buffer tests (using arg2). 2005-02-17 09:56 Sandro Santilli * [r674] Commented out unused variable. 2005-02-17 09:56 Sandro Santilli * [r673] Applied patch from Jon Schlueter using instead of 2005-02-15 17:15 Sandro Santilli * [r672] Inlined most Envelope methods, reserved() memory for some vectors when the usage was known a priori. 2005-02-11 08:58 Sandro Santilli * [r671] Applied patch from Curtis Barrett handling --includedir and --libdir params for configure. 2005-02-05 05:44 Sandro Santilli * [r670] Changed geomgraph nodeMap to use Coordinate pointers as keys, reduces lots of other Coordinate copies. 2005-02-04 23:55 Sandro Santilli * [r669] Envelope destructor made non-virtual to give compiler more static binding options. 2005-02-04 18:49 Sandro Santilli * [r668] Changed ::computeDepths to use a set instead of a vector for checking visited Edges. 2005-02-04 14:49 Sandro Santilli * [r667] Added rule to build staticXMLTester (for profiling with gprof) 2005-02-03 09:17 Sandro Santilli * [r666] more profiling label 2005-02-01 16:09 Sandro Santilli * [r665] more profiling labels 2005-02-01 16:06 Sandro Santilli * [r664] Small optimizations. 2005-02-01 14:18 Sandro Santilli * [r663] More profiler labels 2005-02-01 14:18 Sandro Santilli * [r662] Made profiler start/stop inline 2005-02-01 13:44 Sandro Santilli * [r661] More profiling labels. 2005-01-31 15:41 Sandro Santilli * [r660] Small optimizations. 2005-01-28 10:01 Sandro Santilli * [r659] substituted sprintf calls with use of ostringstream 2005-01-28 09:47 Sandro Santilli * [r658] Replaced sprintf uses with ostringstream. 2005-01-28 08:47 Sandro Santilli * [r657] Removed sprintf usage, replaced with sstream 2005-01-28 07:58 Sandro Santilli * [r656] removed sprintf usage, ad ::toString call Coordinate::toString 2005-01-18 17:22 Sandro Santilli * [r655] reverted previous change, sign was actually stored in zgap 2005-01-18 17:09 Sandro Santilli * [r654] Fixed interpolateZ call using final intersection point instead of HCoordinate. 2005-01-14 08:04 Sandro Santilli * [r653] Fixed Z interpolation to use the correct sign 2005-01-03 16:06 Sandro Santilli * [r652] Changed polygonize op to return a GeometryCollection 2005-01-03 15:56 Sandro Santilli * [r651] Fixed memory leaks just introduced for Polygonizer test case. 2005-01-03 15:49 Sandro Santilli * [r650] Added Polygonize test handling 2004-12-30 13:32 Sandro Santilli * [r649] Handled NULL result from getCentroid() 2004-12-30 13:31 Sandro Santilli * [r648] Fixed a segfault on EMPTYGEOM->getCeontroid() 2004-12-30 10:14 Sandro Santilli * [r647] never return LinearRing or MultiLinearRing from getBoundary 2004-12-30 10:14 Sandro Santilli * [r646] input checking and class promoting in createMultiLineString() 2004-12-22 09:42 Sandro Santilli * [r645] Fixed a premature Geometry destruction, Avoided CoordinateSequence copies when possible. 2004-12-16 18:29 Paul Ramsey * [r644] Bumped minor version number for 2.1.1 release. 2004-12-16 16:27 Sandro Santilli * [r643] Fixed LinearRing::clone() to return LinearRing instead of LineString 2004-12-16 16:08 Sandro Santilli * [r642] New patches from Niki Spahiev (still unstable) 2004-12-16 09:05 Sandro Santilli * [r641] Added python example by Niki Spahiev 2004-12-16 08:56 Sandro Santilli * [r640] Applyed patches by Niki Spahiev 2004-12-14 10:35 Sandro Santilli * [r638] Comments cleanup. PolygonizeGraph keeps track of generated CoordinateSequence for delayed destruction. 2004-12-13 13:54 Sandro Santilli * [r637] Added a not about gcc 2.95.4 required friendship 2004-12-13 13:53 Sandro Santilli * [r636] Fixed uninitialized Coordinate. 2004-12-12 17:22 Sandro Santilli * [r635] version.h and platform.h installed again (missed when removed from dist) 2004-12-08 14:33 Sandro Santilli * [r634] Checked inner polys getBoundary return for the single LineString case. 2004-12-08 14:32 Sandro Santilli * [r633] cleanups 2004-12-08 14:31 Sandro Santilli * [r632] adjusted getBoundary expected returns to match OGC specs 2004-12-08 14:31 Sandro Santilli * [r631] elevationMatrix deleted by destructor 2004-12-08 14:30 Sandro Santilli * [r630] Added default profiler instance cleanup 2004-12-08 13:54 Sandro Santilli * [r629] gcc warnings checked and fixed, general cleanups. 2004-12-06 10:54 Sandro Santilli * [r628] Added timeval.h in distribution. 2004-12-05 10:54 Sandro Santilli * [r627] initial revision 2004-12-05 10:50 Sandro Santilli * [r626] forgot to add 2004-12-05 10:48 Sandro Santilli * [r625] Modifications by Alex Bodnaru 2004-12-05 10:44 Sandro Santilli * [r624] Applied Norman Vine patches for cleaner win32 build. 2004-12-04 15:56 Sandro Santilli * [r623] Added source/Makefile.vc and source/headers/geos/platform.h.in in distribution 2004-12-04 15:31 Sandro Santilli * [r622] Added VisualStudio dir in distribution, removed platform.h and version.h from it. 2004-12-04 01:20 Frank Warmerdam * [r621] removed dll delete 2004-12-03 22:52 Sandro Santilli * [r620] enforced const return of CoordinateSequence::toVector() method to derivate classes. 2004-12-03 16:26 Frank Warmerdam * [r619] added headers 2004-12-03 16:25 Frank Warmerdam * [r618] New 2004-12-03 16:22 Frank Warmerdam * [r617] update to use I64 on MSVC for 64 bit integer constants, also toVector chg. 2004-12-03 16:21 Frank Warmerdam * [r616] dont try for sys/time.h with MSVC 2004-12-03 16:19 Frank Warmerdam * [r615] New 2004-11-30 16:44 Sandro Santilli * [r614] Added gettimeofday implementation for win32, curtesy of Wu Yongwei. 2004-11-30 13:05 Sandro Santilli * [r613] Removed inclusion of stdio.h, which should now be useless. 2004-11-30 13:04 Sandro Santilli * [r612] Added optional inclusion of ieeefp.h on platform providing it. 2004-11-29 16:05 Sandro Santilli * [r611] Fixed a bug in LineIntersector::interpolateZ causing NaN values to come out. Handled dimensional collapses in ElevationMatrix. Added ISNAN macro and changed ISNAN/FINITE macros to avoid dispendious isnan() and finite() calls. 2004-11-27 11:36 Sandro Santilli * [r610] Updated scripts by Alex Bodnaru, added Makefile 2004-11-26 09:53 Sandro Santilli * [r609] Added more FINITE calls, and added inf and -inf to FINITE checks 2004-11-26 09:22 Sandro Santilli * [r608] Added FINITE(x) macro and its use. Made input geoms average Z computation optional in OverlayOp. 2004-11-24 18:10 Sandro Santilli * [r607] Stricter handling of USE_ELEVATION_MATRIX define 2004-11-24 18:10 Sandro Santilli * [r606] Cleanup of interpolateZ 2004-11-24 12:29 Sandro Santilli * [r605] Handled boundary cases in ::getCell 2004-11-24 11:32 Sandro Santilli * [r604] Re-enabled Z propagation in output lines. 2004-11-23 19:53 Sandro Santilli * [r603] Had LineIntersector compute Z by interpolation. 2004-11-23 16:22 Sandro Santilli * [r602] Added ElevationMatrix class and components to do post-processing draping of overlayed geometries. 2004-11-22 15:51 Sandro Santilli * [r601] Added interpolation of containing geometry's average Z for point_in_poly case. 2004-11-22 13:02 Sandro Santilli * [r600] Fixed a bug in Collinear intersection Z computation 2004-11-22 13:02 Sandro Santilli * [r599] Forced use if computed intersection point in ::createSplitEdge (for Z computation) 2004-11-22 12:59 Sandro Santilli * [r598] Added debugging lines 2004-11-22 11:34 Sandro Santilli * [r597] More debugging lines and comments/indentation cleanups 2004-11-22 11:34 Sandro Santilli * [r596] Added Z computation for CollinearIntersections 2004-11-20 18:54 Sandro Santilli * [r595] Scripts updates from Alex Bodnaru 2004-11-20 18:17 Sandro Santilli * [r594] Added Z propagation for overlay lines output. 2004-11-20 17:16 Sandro Santilli * [r593] Handled Z merging for point on polygon boundary case. 2004-11-20 16:25 Sandro Santilli * [r592] Added Z computation for point on line case. 2004-11-20 15:46 Sandro Santilli * [r591] Added composing Z management functions and elements for class Node 2004-11-20 15:45 Sandro Santilli * [r590] Fixed Z merging in addNode(Node *) 2004-11-20 15:41 Sandro Santilli * [r589] Added Z merging in ::addNode 2004-11-20 15:41 Sandro Santilli * [r588] Added management of vector of composing Z values. 2004-11-20 15:40 Sandro Santilli * [r587] Added Z computation in point-segment intersection. 2004-11-20 15:39 Sandro Santilli * [r586] Reduced HEAP allocations. 2004-11-19 16:35 Sandro Santilli * [r585] Added debian package builder scripts. 2004-11-19 16:15 Sandro Santilli * [r584] Completely removed sprintf usage, substituted by stringstream. 2004-11-19 16:09 Sandro Santilli * [r583] Added include for sprintf recognition. 2004-11-19 10:10 Sandro Santilli * [r582] COMPUTE_Z re-enabled by default 2004-11-19 09:33 Sandro Santilli * [r581] removed useless CoordinateSequence copy in ::addLineString 2004-11-17 15:09 Sandro Santilli * [r580] Changed COMPUTE_Z defaults to be more conservative 2004-11-17 08:41 Sandro Santilli * [r579] Fixed a bug in Z computation and removed debugging output by default. 2004-11-17 08:13 Sandro Santilli * [r578] Indentation changes. Some Z_COMPUTATION activated by default. 2004-11-12 18:12 Sandro Santilli * [r576] Changed ::getBoundary() to return LineString if polygon has no holes. (has required to pass OGC conformance test T20) 2004-11-09 20:22 Sandro Santilli * [r575] Removed -g -O2 from geos-config --cflags output 2004-11-08 18:33 Sandro Santilli * [r574] Just another small improvement. 2004-11-08 15:58 Sandro Santilli * [r573] More performance tuning. 2004-11-08 13:12 Sandro Santilli * [r572] Added profiler.h 2004-11-08 12:15 Sandro Santilli * [r571] Added number of gathered timings in output. 2004-11-08 11:19 Sandro Santilli * [r570] Profiler::get() always return a Profile (new if not existant). 2004-11-08 10:58 Sandro Santilli * [r569] Optimized the ::intersect function to avoid nested function calls. 2004-11-08 10:57 Sandro Santilli * [r568] Moved Log lines at the bottom, and cut oldest 2004-11-06 08:16 Sandro Santilli * [r567] Fixed CGAlgorithms::isCCW from JTS port. Code cleanup in IsValidOp. 2004-11-05 12:18 Sandro Santilli * [r566] updated 2004-11-05 11:41 Sandro Santilli * [r565] Made IsValidOp handle IllegalArgumentException throw from GeometryGraph as a sign of invalidity (just for Polygon geometries). Removed leaks generated by this specific exception. 2004-11-04 19:08 Sandro Santilli * [r564] Cleanups, initializers list, profiling. 2004-11-04 08:49 Sandro Santilli * [r563] Unlinked new documentation. 2004-11-03 08:22 Sandro Santilli * [r562] Slightly modified log/log2 based algo to better handle numbers in the range 0-1. 2004-11-02 16:38 Sandro Santilli * [r561] Fixed ieee-754 detection switch 2004-11-02 16:31 Sandro Santilli * [r560] updated 2004-11-02 16:05 Sandro Santilli * [r559] Autodetect availability of IEEE-754 FP 2004-11-02 15:49 Sandro Santilli * [r558] Moved ASSUME_IEEE_DOUBLE define from DoubleBits.cpp to indexQuadtree.h. Fixed a bug in powerOf2(). Made the !IEEE version less prone to round-offs (still has approximation errors). 2004-11-02 14:13 Sandro Santilli * [r557] Fixed bug in IEEE-based exponent and PowerOf2 computation, but disabled at compile time. 2004-11-02 14:11 Sandro Santilli * [r556] Added more profiling. 2004-11-02 09:38 Sandro Santilli * [r555] Added timer for buffer test. 2004-11-01 16:43 Sandro Santilli * [r554] Added Profiler code. Temporarly patched a bug in DoubleBits (must check drawbacks). Various cleanups and speedups. 2004-10-27 13:57 Sandro Santilli * [r553] Added some debugging lines (disabled by default) 2004-10-27 11:05 Sandro Santilli * [r552] updated 2004-10-26 17:46 Sandro Santilli * [r551] Removed slash-stars in comments to remove annoying compiler warnings. 2004-10-26 17:14 Sandro Santilli * [r550] current:revision:age set to 3.0.1 (will be release 2.1.0). added news. 2004-10-26 16:22 Sandro Santilli * [r549] updated 2004-10-26 16:09 Sandro Santilli * [r548] Some more intentation and envelope equality check fix. 2004-10-21 22:29 Sandro Santilli * [r547] Indentation changes and some more COMPUTE_Z rules 2004-10-21 17:13 Sandro Santilli * [r546] Fixed bug introduced by previous patch. 2004-10-21 07:03 Sandro Santilli * [r545] Removed leak in ::readPolygonText reported by Carlos A. Rueda 2004-10-20 17:32 Sandro Santilli * [r544] Initial approach to 2.5d intersection() 2004-10-19 21:04 Sandro Santilli * [r543] updated 2004-10-19 19:51 Sandro Santilli * [r542] Fixed many leaks and bugs in Polygonizer. Output still bogus. 2004-10-18 12:43 Sandro Santilli * [r541] swig interface added to distribution. 2004-10-13 10:03 Sandro Santilli * [r540] Added missing linemerge and polygonize operation. Bug fixes and leaks removal from the newly added modules and planargraph (used by them). Some comments and indentation changes. 2004-09-23 21:36 Sandro Santilli * [r539] Fixed a bug in ::reverse (thanks to Elliott Edwards) 2004-09-23 21:28 Paul Ramsey * [r538] Back minor version back to 2.0.1 2004-09-23 04:30 Paul Ramsey * [r537] Bumped minor version to 2.0.2 after 2.0.1 release. 2004-09-21 09:47 Sandro Santilli * [r536] fixed a mis-initialization bug in ::reduce 2004-09-21 09:47 Sandro Santilli * [r535] Removed useless auto_ptr usage in ::exponent 2004-09-16 09:50 Sandro Santilli * [r534] updated 2004-09-16 09:48 Sandro Santilli * [r533] Finer short-circuit tests for equals, within, contains. 2004-09-16 09:48 Sandro Santilli * [r532] Added Envelope::equals 2004-09-16 07:32 Sandro Santilli * [r531] updated 2004-09-16 07:32 Sandro Santilli * [r530] Added short-circuit tests. Can be disabled at compile-time 2004-09-13 12:50 Sandro Santilli * [r529] comments cleanup 2004-09-13 12:40 Sandro Santilli * [r528] updated 2004-09-13 12:40 Sandro Santilli * [r527] Updated version number 2004-09-13 12:39 Sandro Santilli * [r526] Added missing newline at end of output 2004-09-13 12:39 Sandro Santilli * [r525] Made Point and MultiPoint subject to Validity tests. 2004-09-13 10:14 Sandro Santilli * [r524] Added INVALID_COORDINATE code num and error message. 2004-09-13 10:12 Sandro Santilli * [r523] Added invalid coordinates checks in IsValidOp. Cleanups. 2004-09-13 09:18 Sandro Santilli * [r522] Added IsValidOp::isValid(Coordinate &) 2004-09-13 09:07 Sandro Santilli * [r521] Ported fix in LineString::isCoordinate 2004-09-12 03:51 Paul Ramsey * [r520] Casting changes to allow OS/X compilation. 2004-09-07 08:29 Sandro Santilli * [r519] Fixed doxygen malformed comment for Coordinate class 2004-08-20 03:20 Paul Ramsey * [r517] Added reference to bigtest.h so 'make dist' includes it properly. 2004-08-20 01:55 Paul Ramsey * [r516] Removed examples from build directories for release (they don't build now). 2004-08-04 08:26 Sandro Santilli * [r515] comments lift, stack allocation reduced 2004-07-27 16:35 Sandro Santilli * [r514] Geometry::getEnvelopeInternal() changed to return a const Envelope *. This should reduce object copies as once computed the envelope of a geometry remains the same. 2004-07-26 19:28 Sean Gillies * [r513] added to AUTHORS 2004-07-26 18:53 Sean Gillies * [r512] added simple exception handling on all method calls 2004-07-26 16:35 Sandro Santilli * [r511] Removed dangling MultiPoint::isClosed() method definition. 2004-07-26 15:40 Sean Gillies * [r510] wrapped up WKT reader and writer and added two test cases to check that it works. found a bug where the WKT reader crashes the program in the case of poorly formatted WKT string. 2004-07-25 23:45 Sean Gillies * [r509] SWIG interface for high level language modules, Python setup script, and beginning of a unit testing framework under swig/python/tests. The build works for today's CVS GEOS, and the test passes -- means that a module can be built, installed, and imported. 2004-07-22 16:58 Sandro Santilli * [r508] runtime version extractor functions split. geos::version() is now geos::geosversion() and geos::jtsport() 2004-07-22 08:45 Sandro Santilli * [r507] Documentation updates, memory leaks fixed. 2004-07-22 07:19 Sandro Santilli * [r506] Changed getCoordinatesRO description. 2004-07-22 07:04 Sandro Santilli * [r505] Documented missing geometry functions. 2004-07-21 09:55 Sandro Santilli * [r504] CoordinateSequence::atLeastNCoordinatesOrNothing definition fix. Documentation fixes. 2004-07-21 09:11 Sandro Santilli * [r503] Updated 2004-07-20 08:35 Sandro Santilli * [r502] Updated doxygen rule 2004-07-20 08:34 Sandro Santilli * [r501] Fixed a bug in opDistance.h. Removed doxygen tags from obsoleted CoordinateList.cpp. Got doxygen to run with no warnings. 2004-07-19 19:37 Paul Ramsey * [r500] Changed doxygen target to be more "make dist" friendly. (and allow autogeneration of CVS snapshot to work again.) 2004-07-19 13:19 Sandro Santilli * [r499] Documentation fixes 2004-07-19 10:38 Sandro Santilli * [r498] Added Doxyfile 2004-07-19 10:38 Sandro Santilli * [r497] updated 2004-07-19 10:37 Sandro Santilli * [r496] Doxygen doc added to default build rules 2004-07-19 10:37 Sandro Santilli * [r495] defaultCoordinateSequenceFactory made module-static (use DefaultCoordinateSequenceFactory::instance() instead) 2004-07-19 10:35 Sandro Santilli * [r494] bigtest.h moved to local dir 2004-07-19 10:34 Sandro Santilli * [r493] removed doxygen documentation of removed feature 2004-07-19 10:33 Sandro Santilli * [r492] Class documentation changed to report geos.h as WKT writer/parser header file 2004-07-19 10:30 Sandro Santilli * [r491] acconfig.h moved one directory up 2004-07-19 10:28 Sandro Santilli * [r490] Excluded example and test dirs from input set 2004-07-17 10:48 Sandro Santilli * [r489] updated 2004-07-17 10:48 Sandro Santilli * [r488] added Doxyfile (generated) 2004-07-17 10:48 Sandro Santilli * [r487] fixed typo in documentation 2004-07-17 10:47 Sandro Santilli * [r486] Doxygen configuration created at ./configure time, for versioning. 2004-07-17 09:19 Sandro Santilli * [r485] added GEOS version report 2004-07-17 09:18 Sandro Santilli * [r484] Added geos::version() 2004-07-17 09:07 Sandro Santilli * [r483] Added --jtsport 2004-07-17 09:06 Sandro Santilli * [r482] Added GEOS_FIRST_INTERFACE, GEOS_LAST_INTERFACE and GEOS_JTS_PORT 2004-07-17 09:05 Sandro Santilli * [r481] Added JTS_PORT variable. Simplified versioning settings: comments added, major/minor/patchlevel extracted by CURRENT,AGE,REVISION. 2004-07-16 17:02 Sandro Santilli * [r480] updated 2004-07-16 16:20 Sandro Santilli * [r479] Libtool versioning scheme adopted. 2004-07-16 16:09 Sandro Santilli * [r478] removed useless Includedir 2004-07-16 15:57 Sandro Santilli * [r477] made includes use <> 2004-07-16 13:27 Sandro Santilli * [r476] updated 2004-07-16 10:28 Sandro Santilli * [r475] Dimesions object allocated on the heap 2004-07-16 10:00 Sandro Santilli * [r474] Bug fixed in GeometricShapeFactory examples. Added example of GeometricShapeFactory::createArc. 2004-07-16 09:58 Sandro Santilli * [r473] updated 2004-07-16 09:58 Sandro Santilli * [r472] Added LINEARRING to LINESTRING conversion 2004-07-16 09:57 Sandro Santilli * [r471] Modified library version to 1.4.0 2004-07-15 13:41 Sandro Santilli * [r470] Added createRectangle example. 2004-07-15 13:40 Sandro Santilli * [r469] Memory leaks fixed, CoordinateSequence use made JTS - compatible. 2004-07-14 21:21 Sandro Santilli * [r468] updated 2004-07-14 21:20 Sandro Santilli * [r467] Added GeometricShapeFactory note on doxygen mainpage 2004-07-14 21:20 Sandro Santilli * [r466] added geos/io.h and geos/unload.h 2004-07-14 21:19 Sandro Santilli * [r465] GeometricShapeFactory first pass of bug fixes 2004-07-14 21:17 Sandro Santilli * [r464] added missing GeometricShapeFactory.cpp 2004-07-14 21:17 Sandro Santilli * [r463] added inequality operator for Coordinate 2004-07-14 21:15 Sandro Santilli * [r462] Added GeometricShapeFactory example: createCircle. Added simple filter to send example output to a postgis table. 2004-07-13 08:33 Sandro Santilli * [r461] Added missing virtual destructor to virtual classes. Fixed implicit unsigned int -> int casts 2004-07-12 19:16 Sandro Santilli * [r460] Commented out CoordinateList class definition. 2004-07-12 15:42 Sandro Santilli * [r459] Fixed maximumPreciseValue scope 2004-07-09 08:01 Sandro Santilli * [r458] updated 2004-07-08 19:41 Sandro Santilli * [r457] renamed to reflect JTS API. 2004-07-08 19:38 Sandro Santilli * [r456] renamed from *List* equivalents 2004-07-08 19:37 Sandro Santilli * [r455] Renamed to PointCoordinateSequence.cpp 2004-07-08 19:37 Sandro Santilli * [r454] Renamed to CoordinateSequenceFactory.cpp 2004-07-08 19:36 Sandro Santilli * [r453] Renamed to DefaultCoordinateSequence.cpp 2004-07-08 19:34 Sandro Santilli * [r452] Mirrored JTS interface of CoordinateSequence, factory and default implementations. Added DefaultCoordinateSequenceFactory::instance() function. 2004-07-07 18:54 Sandro Santilli * [r451] updated 2004-07-07 10:29 Sandro Santilli * [r450] Adjusted exceptions documentation. 2004-07-07 09:38 Sandro Santilli * [r449] Dropped WKTWriter::stringOfChars (implemented by std::string). Dropped WKTWriter default constructor (internally created GeometryFactory). Updated XMLTester to respect the changes. Main documentation page made nicer. 2004-07-07 07:52 Sandro Santilli * [r448] Removed note about required speedup in BufferSubgraph. I've made tests with 'sets' and there is actually a big slow down.. 2004-07-06 17:58 Sandro Santilli * [r447] Removed deprecated Geometry constructors based on PrecisionModel and SRID specification. Removed SimpleGeometryPrecisionReducer capability of changing Geometry's factory. Reverted Geometry::factory member to be a reference to external factory. 2004-07-05 19:40 Sandro Santilli * [r446] Added GeometryFactory::destroyGeometry(Geometry *) 2004-07-05 15:20 Sandro Santilli * [r445] Documentation again. 2004-07-05 14:23 Sandro Santilli * [r444] More documentation cleanups. 2004-07-05 11:50 Sandro Santilli * [r443] initial import 2004-07-05 10:50 Sandro Santilli * [r442] deep-dopy construction taken out of Geometry and implemented only in GeometryFactory. Deep-copy geometry construction takes care of cleaning up copies on exception. Implemented clone() method for CoordinateList Changed createMultiPoint(CoordinateList) signature to reflect copy semantic (by-ref instead of by-pointer). Cleaned up documentation. 2004-07-03 12:54 Sandro Santilli * [r441] more entries 2004-07-03 12:51 Sandro Santilli * [r440] Documentation cleanups for DoxyGen. 2004-07-02 17:22 Sandro Santilli * [r439] Doxygen configuration file renamed. 2004-07-02 14:27 Sandro Santilli * [r438] Added deep-copy / take-ownerhship for Point type. 2004-07-02 13:28 Sandro Santilli * [r437] Fixed all #include lines to reflect headers layout change. Added client application build tips in README. 2004-07-02 13:21 Sandro Santilli * [r436] renamed to geos/version.h.in 2004-07-02 13:20 Sandro Santilli * [r435] Header files moved under geos/ dir. 2004-07-01 17:34 Sandro Santilli * [r434] GeometryFactory argument in Geometry constructor reverted to its copy-and-destroy semantic. 2004-07-01 17:07 Sandro Santilli * [r433] Added doxygen_docs generation rule 2004-07-01 16:49 Sandro Santilli * [r432] re-generated with doxygen 1.2.15 2004-07-01 15:47 No Body * [r431] Added doxygen file for better doco generation. 2004-07-01 14:12 Sandro Santilli * [r430] Geometry constructors come now in two flavors: - deep-copy args (pass-by-reference) - take-ownership of args (pass-by-pointer) Same functionality is available through GeometryFactory, including buildGeometry(). 2004-06-30 20:59 Sandro Santilli * [r429] Removed GeoemtryFactory copy from geometry constructors. Enforced const-correctness on GeometryFactory arguments. 2004-06-28 21:58 Sandro Santilli * [r428] Constructors speedup. 2004-06-28 21:11 Sandro Santilli * [r427] Moved getGeometryTypeId() definitions from geom.h to each geometry module. Added holes argument check in Polygon.cpp. 2004-06-25 14:26 Sandro Santilli * [r426] fixed --includes 2004-06-22 16:57 Sandro Santilli * [r425] Written down some news 2004-06-22 16:56 Sandro Santilli * [r424] Added geos.h file. 2004-06-21 22:14 Sandro Santilli * [r423] added geos_version.h 2004-06-21 22:13 Sandro Santilli * [r422] updated 2004-06-21 22:13 Sandro Santilli * [r421] Added VERSION defines 2004-06-16 13:13 Sandro Santilli * [r420] Changed interface of SegmentString, now copying CoordinateList argument. Fixed memory leaks associated with this and MultiGeometry constructors. Other associated fixes. 2004-06-15 21:35 Sandro Santilli * [r419] fixed buildGeometry to always return a newly allocated geometry 2004-06-15 20:42 Sandro Santilli * [r418] updated to respect deep-copy GeometryCollection interface 2004-06-15 20:30 Sandro Santilli * [r417] fixed a typo 2004-06-15 20:20 Sandro Santilli * [r416] updated to respect deep-copy GeometryCollection interface 2004-06-15 20:07 Sandro Santilli * [r415] GeometryCollections constructors make a deep copy of Geometry vector argument. 2004-06-15 20:01 Sandro Santilli * [r414] Empty geometry creation call made using NULL instead of newly created empty vector (will be faster) 2004-06-15 19:24 Sandro Santilli * [r413] Fixed a bug preventing geos-config from giving correct version info 2004-06-15 07:40 Sandro Santilli * [r412] Added missing include 2004-06-15 07:40 Sandro Santilli * [r411] Updated 2004-05-28 18:16 Yury Bychkov * [r410] Changed rounding method to make compilable with VC++ 2004-05-27 12:09 Sandro Santilli * [r409] added one buffer test 2004-05-27 10:27 Sandro Santilli * [r408] Memory leaks fixed. 2004-05-27 10:26 Sandro Santilli * [r407] set (useless?) recordIsolated member in constructor 2004-05-27 09:53 Sandro Santilli * [r406] MonotoneChainOverlapAction::overlap(*) funx made virtual as they are supposed to be. 2004-05-27 08:40 Sandro Santilli * [r405] Fixed a memleak in buffer test. 2004-05-27 08:37 Sandro Santilli * [r404] Fixed a bug preventing OffsetCurveBuilder point list from being reset. 2004-05-26 19:48 Sandro Santilli * [r403] Changed abs() to fabs() when working with doubles. Used dynamic_cast<> instead of typeid() when JTS uses instanceof. 2004-05-26 13:12 Sandro Santilli * [r402] Removed try/catch block from ::buildSubgraphs 2004-05-26 09:50 Sandro Santilli * [r401] Added comments about OverlayNodeFactory() ownership in NodeMap and PlanarGraph constuctors 2004-05-26 09:49 Sandro Santilli * [r400] PlanarGraph made local to ::buffer instead of Class private. 2004-05-21 14:17 Sandro Santilli * [r399] updated 2004-05-21 13:58 Sandro Santilli * [r398] ::intersection missed to invalidate geometryCollection inputs 2004-05-21 13:55 Sandro Santilli * [r397] updated 2004-05-21 13:39 Sandro Santilli * [r396] ::makePrecise make use of nearbyint() now, to be compatible with JTS 2004-05-21 13:37 Sandro Santilli * [r395] first import 2004-05-20 09:14 Sandro Santilli * [r394] updated 2004-05-19 19:39 Yury Bychkov * [r393] Changed rounding method to make compilable with VC++ 2004-05-19 13:40 Sandro Santilli * [r392] Fixed bug in ::addCircle 2004-05-19 13:18 Sandro Santilli * [r391] made CoordinateList::toString() a const member function 2004-05-19 13:01 Sandro Santilli * [r390] avoided assignment operator calls for BufferBuilder 2004-05-19 12:50 Sandro Santilli * [r389] Removed all try/catch blocks transforming stack allocated-vectors to auto-heap-allocations 2004-05-19 09:57 Yury Bychkov * [r388] Bugfix in OffsetCurveSetBuilder::addPolygon (JTS 1.4.1) 2004-05-18 13:49 Sandro Santilli * [r387] Output made more neat (geometry B is not printed if not existent). Added support for buffer tests. 2004-05-18 13:15 Sandro Santilli * [r386] made ::scroll handle already scrolled vect and more readable 2004-05-18 00:02 Yury Bychkov * [r385] IsValidOp::checkShellNotNested() bugfix from JTS 1.4.1 (not released yet) has been added. 2004-05-17 21:14 Yury Bychkov * [r384] JavaDoc updated 2004-05-17 21:09 Yury Bychkov * [r383] toString() performance enhancement 2004-05-17 21:03 Yury Bychkov * [r382] JavaDoc updated 2004-05-17 12:54 Sandro Santilli * [r381] Added tab in list of blank chars 2004-05-17 12:53 Sandro Santilli * [r380] Expected result string trimmed for blanks 2004-05-17 12:37 Sandro Santilli * [r379] Added carriage returns and tabs in set of blanks chars 2004-05-17 12:36 Sandro Santilli * [r378] ParseException message made more readable 2004-05-17 10:45 Sandro Santilli * [r377] Fixed bogus FIXED coordinate rounding 2004-05-17 08:34 Sandro Santilli * [r376] reduced stack allocations, try/catch blocks in ::overlayOp 2004-05-17 07:42 Sandro Santilli * [r375] CentroidArea::add(const Geometry *geom) uses dynamic_cast 2004-05-17 07:23 Sandro Santilli * [r374] ::getCeontroid(): reduced dynamic allocations, added missing check for isEmpty 2004-05-14 14:47 Sandro Santilli * [r373] Added LinearRing support 2004-05-14 14:45 Sandro Santilli * [r372] Fixed bogus inheritance of LinearComponentExtracter 2004-05-14 13:42 Sandro Santilli * [r371] DistanceOp bug removed, cascading errors fixed. 2004-05-14 12:14 Sandro Santilli * [r370] const correctness 2004-05-14 12:10 Sandro Santilli * [r369] avoided leaks on malformed LinearRing 2004-05-14 09:20 Sandro Santilli * [r368] Mem leaks fixed 2004-05-14 07:19 Sandro Santilli * [r367] Changed the algorythm for finding precisionModel type (current way did not work): now if you specify a scale precisionModel will be FIXED, otherwise it will be FLOATING. 2004-05-07 14:15 Sandro Santilli * [r366] fixed peekNextToken to avoid incrementing string pointer 2004-05-07 14:13 Sandro Santilli * [r365] Fixed segfault in ::insert 2004-05-07 14:12 Sandro Santilli * [r364] Fixed segfault in destructor 2004-05-07 13:23 Sandro Santilli * [r363] Memory leaks fixed. 2004-05-07 13:04 Sandro Santilli * [r362] leak removed in MultiLineString::getBoundary() 2004-05-07 09:05 Sandro Santilli * [r361] Some const correctness added. Fixed bug in GeometryFactory::createMultiPoint to handle NULL CoordinateList. 2004-05-07 07:57 Sandro Santilli * [r360] Added missing EdgeNodingValidator to build scripts. Changed SegmentString constructor back to its original form (takes const void *), implemented local tracking of "contexts" in caller objects for proper destruction. 2004-05-06 16:30 Sandro Santilli * [r359] Kept track of newly allocated objects by ensureExtent for Bintree and Quadtree, deleted at destruction time. doc/example.cpp runs with no leaks. 2004-05-06 15:54 Sandro Santilli * [r358] SegmentNodeList keeps track of created splitEdges for later destruction. SegmentString constructor copies given Label. Buffer operation does no more leaks for doc/example.cpp 2004-05-06 15:00 Sandro Santilli * [r357] Boundable destructor made virtual. Added vector *nodes member in AbstractSTRTree, used to keep track of created node to cleanly delete them at destruction time. 2004-05-06 13:58 Sandro Santilli * [r356] leak removed from createParentBoundablesFromVerticalSlices 2004-05-06 08:59 Sandro Santilli * [r355] memory leak fixed 2004-05-05 17:42 Sandro Santilli * [r354] AbstractNode destructor made virtual. AbstractNode::bounds made protected. SIRAbstractNode and STRAbstractNode destructors added to get rid of AbstractNode::bounds in the right way (is a void * casted to appropriate Class in the subClasses). 2004-05-05 16:57 Sandro Santilli * [r353] Rewritten static cga allocation to avoid copy constructor calls. 2004-05-05 16:51 Sandro Santilli * [r352] avoided copy constructor in Geometry::geometryChangedFilter initializzazion 2004-05-05 16:39 Sandro Santilli * [r351] reduced explicit local objects allocation 2004-05-05 16:36 Sandro Santilli * [r350] Avoid use of copy c'tors on local objects initializzation 2004-05-05 15:51 Sandro Santilli * [r349] Fixed big leak in intersectChains() 2004-05-05 13:08 Sandro Santilli * [r348] Leaks fixed, explicit allocations/deallocations reduced. 2004-05-05 12:29 Sandro Santilli * [r347] memleak fixed in ::getDepth 2004-05-05 12:20 Sandro Santilli * [r346] Memory leak plugged in editGeometryCollection 2004-05-05 10:54 Sandro Santilli * [r345] Removed some private static heap explicit allocation, less cleanup done by the unloader. 2004-05-05 10:44 Sandro Santilli * [r344] updated 2004-05-05 10:22 Sandro Santilli * [r343] Removed dynamic allocations. 2004-05-05 10:03 Sandro Santilli * [r342] Reduced dynamic allocations in bufferOriginalPrecision and bufferFixedPrecision. 2004-05-03 22:56 Sandro Santilli * [r341] leaks fixed, exception specification omitted. 2004-05-03 20:49 Sandro Santilli * [r340] Some more leaks fixed 2004-05-03 17:15 Sandro Santilli * [r339] leaks on exception fixed. 2004-05-03 16:29 Sandro Santilli * [r338] Added sortBoundables(const vector) pure virtual in AbstractSTRtree, implemented in SIRtree and STRtree. Comparator funx made static in STRtree.cpp and SIRtree.cpp. 2004-05-03 13:17 Sandro Santilli * [r337] Fixed comparator function to express StrictWeakOrdering. 2004-05-03 12:09 Sandro Santilli * [r336] newline added at end of file 2004-05-03 10:43 Sandro Santilli * [r335] Exception specification considered harmful - left as comment. 2004-04-30 09:15 Sandro Santilli * [r334] Enlarged exception specifications to allow for AssertionFailedException. Added missing initializers. 2004-04-28 14:58 Sandro Santilli * [r333] Made AbstractSTRtree::query use dynamic_cast<> to simulate java's instanceof. Previous typeid(*) use missed to catch an STRAbstractNode as a class derived from AbstractNode. Still have to check if this is the correct semantic with Martin, but at least lots of SIGABORT are no more raised. 2004-04-26 22:00 Paul Ramsey * [r332] Bump version number to 1.4 to indicate new changes. 2004-04-26 12:37 Sandro Santilli * [r331] Some leaks fixed. 2004-04-23 00:02 Sandro Santilli * [r330] const-correctness changes 2004-04-21 14:14 Sandro Santilli * [r329] Fixed bug in computeDepths 2004-04-20 13:24 Sandro Santilli * [r328] More leaks removed. 2004-04-20 12:47 Sandro Santilli * [r327] MinimumDiameter leaks plugged. 2004-04-20 10:58 Sandro Santilli * [r326] More memory leaks removed. 2004-04-20 10:14 Sandro Santilli * [r325] Memory leaks removed. 2004-04-20 08:52 Sandro Santilli * [r324] GeometryFactory and Geometry const correctness. Memory leaks removed from SimpleGeometryPrecisionReducer and GeometryFactory. 2004-04-19 16:14 Sandro Santilli * [r323] Some memory leaks plugged in noding algorithms. 2004-04-19 15:14 Sandro Santilli * [r322] Added missing virtual destructor in SpatialIndex class. Memory leaks fixes. Const and throw specifications added. 2004-04-19 12:51 Sandro Santilli * [r321] Memory leaks fixes. Throw specifications added. 2004-04-16 14:12 Sandro Santilli * [r320] Memory leak fix in copy constructor 2004-04-16 14:09 Sandro Santilli * [r319] Leaks fixes 2004-04-16 13:03 Sandro Santilli * [r318] More leaks fixed 2004-04-16 12:48 Sandro Santilli * [r317] Leak fixes. 2004-04-16 11:04 Sandro Santilli * [r316] Memory leaks plugged on exception thrown 2004-04-16 10:00 Sandro Santilli * [r315] Memory leak fixed. 2004-04-16 09:01 Sandro Santilli * [r314] Removed memory leak in CGAlgorithms::isOnline 2004-04-16 08:52 Sandro Santilli * [r313] Unload::Release final delete (static heap allocations should be gone now) 2004-04-16 08:35 Sandro Santilli * [r312] Memory leaks fixed and const correctness applied for Point class. 2004-04-16 07:42 Sandro Santilli * [r311] PrecisionModel::Type made an enum instead of a Type. 2004-04-15 15:11 Sandro Santilli * [r310] Commented out deletion that seems to cause segfaults 2004-04-15 14:00 Sandro Santilli * [r309] Added new cleanup to Unload::Release 2004-04-14 13:56 Sandro Santilli * [r308] All geometries returned by {from,to}InternalGeometry calls are now deleted after use (unless NOT new). Some 'commented' throw specifications in geom.h 2004-04-14 13:14 Sandro Santilli * [r307] Removed deletion of externally pointed GeometryFactory from OverlayOp destructor 2004-04-14 12:28 Sandro Santilli * [r306] shouldNeverReachHere exceptions made more verbose 2004-04-14 11:05 Sandro Santilli * [r305] Added support for LinearRing in GeometryEditor 2004-04-14 10:56 Sandro Santilli * [r304] Uncommented initializzazion and destruction of DistanceOp::minDistanceLocation 2004-04-14 09:38 Sandro Santilli * [r303] PrecisionModel(double newScale) missed to set the scale 2004-04-14 09:30 Sandro Santilli * [r302] Private iterated noding funx now use int* instead of vector to know when it's time to stop. 2004-04-14 09:11 Sandro Santilli * [r301] endCapStyle was never set in BufferOp contructor 2004-04-14 08:38 Sandro Santilli * [r300] BufferBuilder constructor missed to initialize workingPrecisionModel 2004-04-14 08:38 Sandro Santilli * [r299] BufferOp constructor missed to set argGeom 2004-04-14 07:29 Sandro Santilli * [r298] Fixed GeometryFactory constructors to copy given PrecisionModel. Added GeometryFactory copy constructor. Fixed Geometry constructors to copy GeometryFactory. 2004-04-14 06:04 Yury Bychkov * [r297] "geomgraph/index" committ problem fixed. 2004-04-13 14:45 Sandro Santilli * [r296] Removed faulty assert in constructor 2004-04-13 14:33 Sandro Santilli * [r295] Added more source files 2004-04-13 14:28 Sandro Santilli * [r294] Removed spurious line 2004-04-13 13:31 Sandro Santilli * [r293] prototype mismatch fixed 2004-04-13 12:29 Sandro Santilli * [r292] GeometryLocation const-correctness. 2004-04-13 11:04 Sandro Santilli * [r291] Added lost opDistance.h 2004-04-13 11:03 Sandro Santilli * [r290] Added new header files 2004-04-13 10:58 Sandro Santilli * [r289] Added new source files 2004-04-13 10:05 Sandro Santilli * [r288] GeometryLocation constructor made const-correct. Fixed erroneus down-casting in DistanceOp::computeMinDistancePoints. 2004-04-13 08:15 Sandro Santilli * [r287] Changed all 'long long' with int64. Changed all 'long long' constants to end with two Ls. 2004-04-10 22:41 Yury Bychkov * [r286] "precision" upgraded to JTS 1.4 2004-04-10 08:40 Yury Bychkov * [r285] "operation/buffer" upgraded to JTS 1.4 2004-04-08 04:53 Yury Bychkov * [r284] "operation/polygonize" ported from JTS 1.4 2004-04-07 06:55 Yury Bychkov * [r283] "operation/linemerge" ported from JTS 1.4 2004-04-05 06:35 Yury Bychkov * [r282] "operation/distance" upgraded to JTS 1.4 2004-04-04 06:29 Yury Bychkov * [r281] "planargraph" and "geom/utill" upgraded to JTS 1.4 2004-04-01 10:44 Yury Bychkov * [r280] All "geom" classes from JTS 1.3 upgraded to JTS 1.4 2004-03-31 07:50 Yury Bychkov * [r279] "geom" partially upgraded to JTS 1.4 2004-03-29 06:59 Yury Bychkov * [r278] "noding/snapround" package ported (JTS 1.4); "operation", "operation/valid", "operation/relate" and "operation/overlay" upgraded to JTS 1.4; "geom" partially upgraded. 2004-03-26 07:48 Yury Bychkov * [r277] "noding" package ported (JTS 1.4) 2004-03-25 02:23 Yury Bychkov * [r276] All "index/*" packages upgraded to JTS 1.4 2004-03-19 09:49 Yury Bychkov * [r275] "geomgraph" and "geomgraph/indexl" upgraded to JTS 1.4 2004-03-18 10:42 Yury Bychkov * [r274] "IO" and "Util" upgraded to JTS 1.4 "Geometry" partially upgraded. 2004-03-17 02:00 Yury Bychkov * [r273] "Algorithm" upgraded to JTS 1.4 2004-03-01 22:04 Sandro Santilli * [r272] applied const correctness changes by Manuel Prieto Villegas 2004-02-27 17:43 Sandro Santilli * [r271] memory leak fix in Polygon::getArea() - reported by 'Manuel Prieto Villegas' 2004-02-27 17:42 Sandro Santilli * [r270] made CGAlgorithms::signedArea() and CGAlgorithms::length() arguments const-correct 2004-02-20 05:44 Paul Ramsey * [r269] Changed to new version of ltmain, that matches the version of libtool on build box 2004-01-20 05:51 Paul Ramsey * [r268] Change platform.h back to AM_CONFIG_HEADER. 2004-01-20 05:10 Paul Ramsey * [r267] Change AM_CONFIG_HEADER to AC_CONFIG_HEADERS to allow autoheader to work its magic. 2003-12-11 17:01 Sandro Santilli * [r266] made buffer(0) back to its *correct* semantic (empy collection) 2003-12-11 16:01 Sandro Santilli * [r265] made buffer operation return a cloned input geom when called with 0 as distance 2003-12-11 15:53 Sandro Santilli * [r264] Fixed bogus copy constructor (making clone bogus) 2003-11-13 11:57 Sandro Santilli * [r263] bug fixed in relate call 2003-11-12 22:03 Sandro Santilli * [r262] added relational operators 2003-11-12 18:02 Sandro Santilli * [r261] Added throw specification. Fixed leaks on exceptions. 2003-11-12 17:15 Sandro Santilli * [r260] made sure PrecisionModel scale is never 0 2003-11-12 17:10 Sandro Santilli * [r259] added missing initialization 2003-11-12 16:14 Sandro Santilli * [r258] Added some more throw specifications and cleanup on exception (leaks removed). 2003-11-12 15:43 Sandro Santilli * [r257] Added some more throw specifications 2003-11-12 15:02 Sandro Santilli * [r256] more cleanup on exception 2003-11-12 11:08 Sandro Santilli * [r255] removed old changelog, moved comments in the nice standard frame 2003-11-12 11:05 Sandro Santilli * [r254] added autoheader call 2003-11-07 17:51 Sandro Santilli * [r253] Memory leak fix in insertEdge() 2003-11-07 17:49 Paul Ramsey * [r252] Added current ChangeLog 2003-11-07 17:45 Sandro Santilli * [r251] will be generated with ./autogen.sh 2003-11-07 14:21 Sandro Santilli * [r250] Made doc/ directory part of distribution. Uniformed doc build script to autotools. 2003-11-07 14:19 Sandro Santilli * [r249] added config.h.in (missed before) 2003-11-07 14:18 Sandro Santilli * [r248] added config.h.in 2003-11-07 01:58 Paul Ramsey * [r247] Added people! 2003-11-07 01:23 Paul Ramsey * [r245] Add standard CVS headers licence notices and copyrights to all cpp and h files. 2003-11-06 19:04 Sandro Santilli * [r244] removed useless Coordinate copy in ::createSplitEdge() 2003-11-06 18:50 Sandro Santilli * [r243] first import 2003-11-06 18:48 Sandro Santilli * [r242] updated 2003-11-06 18:48 Sandro Santilli * [r241] added throw information comment in PolygonBuilder 2003-11-06 18:47 Sandro Santilli * [r240] Added throw specification for BufferOp's ::buildSubgraphs() and ::computeBuffer(). Cleanup on exception in computeBuffer(). 2003-11-06 18:46 Sandro Santilli * [r239] Added throw specification for BufferOp's ::buildSubgraphs() and ::computeBuffer() 2003-11-06 18:45 Sandro Santilli * [r238] Added throw specification for DirectEdgeStar::linkResultDirectedEdges() 2003-11-06 18:00 Sandro Santilli * [r237] Cleanup on exception in ::bufferOp() 2003-11-06 17:59 Sandro Santilli * [r236] Memory leaks fixed in ::containsPoint() 2003-11-06 17:48 Sandro Santilli * [r235] Fixed memory leaks in ::closePt() and ::addLineEndCap() 2003-11-06 17:47 Sandro Santilli * [r234] Added support for LinearRing, removed memory leaks in ::addLineString 2003-11-06 17:41 Sandro Santilli * [r233] Added Buffer,Intersection,Difference and Symdifference. Exception cleanup 2003-11-06 17:33 Paul Ramsey * [r232] Small addition of into about LD_LIBRARY_PATH 2003-11-05 21:52 Sandro Santilli * [r231] Modified example.cpp to make use of vectors instead of Geometry * / int couples. Added LineString creation example. Added Makefile to compile it. 2003-11-03 16:09 Sandro Santilli * [r230] Removed comments about segfaults, made the simple collection creation call cleaner by use of the clone() method. 2003-10-31 16:36 Sandro Santilli * [r229] Re-introduced clone() method. Copy constructor could not really replace it. 2003-10-29 10:38 Sandro Santilli * [r228] Added centroid computation example 2003-10-29 10:38 Sandro Santilli * [r227] Added support for LinearRing types (treated as LineString) 2003-10-24 21:27 Sandro Santilli * [r226] Added GeometryTypeId enum and getGeometryTypeId abstract Geometry method. 2003-10-23 09:17 Sandro Santilli * [r225] Added stamp-h2 and platform.h 2003-10-23 09:12 Sandro Santilli * [r224] Made CoordinateArrayFilter destructor virtual. 2003-10-22 23:58 Sandro Santilli * [r223] Made platform.h be created by configure. In this way we will not have problems of installed headers trying to include phantom config.h. 2003-10-22 00:44 Sandro Santilli * [r222] Quadtree bitfield operations made using type int64. Type int64 typedef'ed based on autoconf detected int type (long or long long). If long is not 64bits int64 will be really 32 bits and INT64_IS_REALLY32 will be defined. 2003-10-21 23:51 Sandro Santilli * [r221] Added macros to find 64bit integer. 2003-10-21 16:16 Sandro Santilli * [r220] Uncommented point creation lines. Updated comments about segfaults. 2003-10-21 05:35 Paul Ramsey * [r219] Added test.xml so it gets picked up by 'make dist' 2003-10-21 05:09 Paul Ramsey * [r218] Added simple installation directions. 2003-10-21 04:55 Paul Ramsey * [r217] Fix up references to header files to 'make dist' works. 2003-10-20 17:50 Sandro Santilli * [r216] added Union example 2003-10-20 15:41 Sandro Santilli * [r215] Geometry::checkNotGeometryCollection made static and non-distructive. 2003-10-20 14:02 Sandro Santilli * [r214] more explicit exception thrown on null Directed Edge detection 2003-10-20 13:56 Sandro Santilli * [r213] fixed typo 2003-10-20 13:53 Sandro Santilli * [r212] LinearRing handled as a LineString in GeometryGraph::add(const Geometry *) - more explicit exception thrown for unknown geometries 2003-10-17 05:51 Yury Bychkov * [r211] Fixed a small memory leak. 2003-10-16 17:41 Sandro Santilli * [r210] Fixed a bug in GEOSException that prevented print of the type of exception thrown. 2003-10-16 17:33 Sandro Santilli * [r209] dropped useless string() cast 2003-10-16 17:05 Sandro Santilli * [r208] Made TopologyException inherit from GEOSException. Adjusted IllegalArgumentException subclassing. 2003-10-16 13:01 Sandro Santilli * [r207] Added call to Unload::Release() 2003-10-16 12:09 Sandro Santilli * [r206] bug fixed in exception handling 2003-10-16 08:50 Sandro Santilli * [r205] Memory leak fixes. Improved performance by mean of more calls to new getCoordinatesRO() when applicable. 2003-10-16 08:48 Sandro Santilli * [r204] Exceptions handled 2003-10-15 16:39 Sandro Santilli * [r203] Made Edge::getCoordinates() return a 'const' value. Adapted code set. 2003-10-15 15:47 Sandro Santilli * [r202] Adapted to new getCoordinatesRO() interface 2003-10-15 15:30 Sandro Santilli * [r201] Declared a SweepLineEventOBJ from which MonotoneChain and SweepLineSegment derive to abstract SweepLineEvent object previously done on void * pointers. No more compiler warnings... 2003-10-15 11:24 Sandro Santilli * [r200] Use getCoordinatesRO() introduced. 2003-10-15 11:23 Sandro Santilli * [r199] Formalized const nature of toVector() method and of first argument to static removeRepeatedPoints(). 2003-10-15 10:17 Sandro Santilli * [r198] Made setPoints() get a const vector. 2003-10-15 09:54 Sandro Santilli * [r197] Added getCoordinatesRO() public method. 2003-10-15 08:52 Sandro Santilli * [r196] Memory leaks fixed. 2003-10-15 08:51 Sandro Santilli * [r195] Initial import 2003-10-15 08:08 Sandro Santilli * [r194] Memory leaks fixed. Partially due to getCoordinates() and GeometryCollection() changes, partially old dated. 2003-10-14 15:58 Sandro Santilli * [r193] Useless vector leaking allocations removed 2003-10-13 21:26 Sandro Santilli * [r192] Added build time created files to cvsignore lists 2003-10-13 17:54 Sandro Santilli * [r191] IsValidOp constructor used same name for the arg and a private element. Fixed. 2003-10-13 17:47 Sandro Santilli * [r190] delete statement removed 2003-10-13 15:39 Sandro Santilli * [r189] Fixed some leak or fault flips (forced copy of a single coordinate) 2003-10-13 15:02 Sandro Santilli * [r188] accept input file as first argument on cmdline 2003-10-13 12:51 Sandro Santilli * [r187] removed sortedClasses strings array from all geometries. 2003-10-13 09:24 Sandro Santilli * [r186] long -> long long enlargement of types to allow for left/rigth shift of 53 bits 2003-10-11 03:23 Sandro Santilli * [r185] fixed spurious typos 2003-10-11 01:56 Sandro Santilli * [r184] Code base padded with 'const' keywords ;) 2003-10-09 15:35 Sandro Santilli * [r183] added 'const' keyword to GeometryFactory constructor, Log on top of geom.h 2003-10-09 11:20 Sandro Santilli * [r182] moved Log to a better place 2003-10-09 11:19 Sandro Santilli * [r181] added convexHull and PrecisionModel 2003-10-09 10:14 Sandro Santilli * [r180] just a style change in top Log comment. 2003-10-09 10:10 Sandro Santilli * [r179] Throw an exception if scale is 0. Added Log entry. 2003-10-09 09:42 Sandro Santilli * [r178] Tried to "formalize" constant nature of the first argument given to constructor by PrecisionModel and SRID specification. Added CVS Log on top. 2003-10-09 08:58 Sandro Santilli * [r177] Added convexHull() call to example, fixed leaks in ConvexHull 2003-10-09 00:11 Sandro Santilli * [r176] First reference-by-example file. 2003-10-08 16:51 Sandro Santilli * [r175] Added xie's Unload class with some fixes. 2003-10-08 13:18 Sandro Santilli * [r174] added missing LinearRing writing capabilities. 2003-10-08 10:36 Sandro Santilli * [r173] Constructor by vector * now makes a copy of the vector so that call ers can safely delete it when done. 2003-10-07 21:47 Sandro Santilli * [r172] had all getCoordinates() callers free returned value. 2003-10-07 18:58 Sandro Santilli * [r171] LineString constructor now creates its own copy of given CoordinateList object, and returns a new copy with getCoordinates(). will be easier to remove by anyone else. 2003-10-03 01:20 Yury Bychkov * [r170] Memory leak in Overlay fixed. 2003-09-29 16:25 Sandro Santilli * [r169] Some more cvsignore files. Some entries should probably not be in the local copy 2003-09-29 15:07 Sandro Santilli * [r168] Added config.sub, config.guess and autom4te.cache 2003-09-29 13:15 Sandro Santilli * [r167] Don't wonder about Makefile.in, Makefile, gdal-config 2003-09-26 17:31 Sandro Santilli * [r166] getConvexHull() made check value returned by reduce() before deleting it (might be the untouched input). 2003-09-26 09:17 Yury Bychkov * [r165] isValid segfault fixed. Overlay still leaks a bit. 2003-09-24 02:16 Yury Bychkov * [r164] All reported bugs fiexd. Small leak in Overlay remains. 2003-09-06 08:24 Yury Bychkov * [r163] isWithinDistance fixed and tested. 2003-09-06 00:01 Yury Bychkov * [r162] getInteriorPoint bugs fixed. 2003-09-01 06:32 Yury Bychkov * [r161] Some ConvexHull bugs fixed. 2003-08-30 07:55 Yury Bychkov * [r160] Some bugfixes. XMLTester expanded to accomodate getBoundary, getCentroid, isSimple. 2003-08-18 23:40 Paul Ramsey * [r159] Removed java source file from archive. 2003-08-18 22:34 Paul Ramsey * [r158] Change it back :/ 2003-08-18 22:33 Paul Ramsey * [r157] Change version number. 2003-08-18 20:42 Paul Ramsey * [r156] Return ltmain to distro (oops) 2003-08-18 20:36 Paul Ramsey * [r155] Remove more autoconf files 2003-08-18 20:34 Paul Ramsey * [r154] Removed more autoconf files... 2003-08-18 20:27 Paul Ramsey * [r153] Removed 'missing' script. 2003-08-18 16:38 Paul Ramsey * [r152] Fixed up to treat headers as headers. 2003-08-17 18:40 Paul Ramsey * [r151] Norman's patch + global removal of "no newline" + small changes to make Norman's patch work in the linux build environment. 2003-08-17 18:01 Paul Ramsey * [r150] Removed more configuration files per Norman's request. 2003-08-17 17:56 Paul Ramsey * [r149] Removed more configure files per Norman's request. 2003-08-17 17:55 Paul Ramsey * [r148] Removed Makefile.in files, per Norman's request. 2003-08-16 06:33 Yury Bychkov * [r147] Memory leak fixes. 2003-06-21 22:17 Paul Ramsey * [r146] GNU compile fixes from nvine. 2003-06-19 20:54 Yury Bychkov * [r145] 'geos' namespace added. 2003-06-18 20:08 Yury Bychkov * [r144] Buffer is almost fully debugged. 2003-05-29 00:05 Paul Ramsey * [r143] Final GNU build adjustments. 2003-05-28 23:55 Paul Ramsey * [r142] Added new exception class. 2003-05-28 23:39 Paul Ramsey * [r141] Change reference to spatialIndex.h 2003-05-28 23:22 Paul Ramsey * [r140] Removed obsolete build entries for removed classes. 2003-05-28 22:22 Yury Bychkov * [r139] Some bugfixes. 2003-05-28 22:11 Yury Bychkov * [r138] no message 2003-05-28 05:02 Paul Ramsey * [r137] Changed __max/__min to max/min 2003-05-28 05:01 Paul Ramsey * [r136] Change __max to max 2003-05-27 23:56 Paul Ramsey * [r135] Changed from mistaken cpp file names. 2003-05-27 23:54 Paul Ramsey * [r134] Added include for 2003-05-27 23:45 Paul Ramsey * [r133] GNU build support 2003-05-27 23:42 Paul Ramsey * [r132] Fix reference to spatialIndex header 2003-05-27 23:41 Paul Ramsey * [r131] Build updates. 2003-05-27 23:33 Paul Ramsey * [r130] Add new files into build support 2003-05-27 23:17 Paul Ramsey * [r129] Add all new headers into the build process. 2003-05-27 23:11 Paul Ramsey * [r128] Some updates to synch build with devel. 2003-05-21 23:28 Yury Bychkov * [r127] Several bugs fixed. 2003-05-19 06:18 Yury Bychkov * [r126] All exceptions are now classes. 2003-05-17 07:47 Yury Bychkov * [r125] Last fix for CVS. 2003-05-17 06:08 Yury Bychkov * [r124] Fixing CVS error. 2003-05-17 00:27 Yury Bychkov * [r123] Fixing a commit problem. 2003-05-17 00:07 Yury Bychkov * [r122] SIRtree is done. Distance is done. 2003-05-07 09:06 Yury Bychkov * [r121] Closer to 1.3 2003-05-04 22:34 Yury Bychkov * [r120] Closer to JTS 1.3 2003-04-28 06:01 Yury Bychkov * [r119] Partially upgraded to JTS 1.3 2003-04-21 22:16 Yury Bychkov * [r118] VisualStudio project added. 2003-04-17 00:37 Yury Bychkov * [r117] Changed PrecisionModel to Value type. Removed bounds checking from *At methods in CoordinateLists. 2003-04-12 04:31 Yury Bychkov * [r116] Overlay passes all tests (both precise and normal) 2003-04-11 23:16 Yury Bychkov * [r115] Overlay almost works. Fails 2 tests. 2003-04-10 04:34 Yury Bychkov * [r114] Overlay passes all normal tests. Still fails on Precision tests. 2003-04-09 21:52 Paul Ramsey * [r113] Changed destructors to virtual to quiet GNU warnings 2003-04-04 23:49 Paul Ramsey * [r112] Install all headers at install time. 2003-04-04 22:04 Paul Ramsey * [r111] Newlines added to quiet gcc. 2003-04-04 03:44 Paul Ramsey * [r110] Build support 2003-04-04 03:43 Paul Ramsey * [r109] Build support. 2003-04-04 03:28 Paul Ramsey * [r108] Build support updates. 2003-04-04 03:11 Paul Ramsey * [r107] Build support for new example programs. 2003-04-04 00:18 David Blasby * [r106] added comment about running ./autogen.sh 2003-04-02 21:55 Yury Bychkov * [r105] Added example on how to wrap internal storage format with CoordinateLists. 2003-04-02 08:02 Yury Bychkov * [r104] isValid is debugged (passes all 805 tests). 2003-03-24 19:23 Paul Ramsey * [r103] Added newlines to end to quiet gcc 2003-03-24 19:21 Paul Ramsey * [r102] Yet more GNU build fiddling. Removed extraneous build support from all non-geom library directories. 2003-03-24 03:45 Paul Ramsey * [r101] More GNU build support 2003-03-24 03:07 Paul Ramsey * [r100] GNU build support on latest changes. 2003-03-19 00:34 Yury Bychkov * [r99] All Overlay classes are ported. Overlay and isValid have not been tested yet. 2003-03-18 01:42 Yury Bychkov * [r98] 90% of Overlay classes ported. 2003-03-17 18:04 Yury Bychkov * [r97] All 'index' packages and part of 'overlay' are done. 2003-03-17 02:49 Yury Bychkov * [r96] IsValid and supporting packages are ported (but NOT tested). 2003-03-12 23:45 Paul Ramsey * [r95] Build support for valid. 2003-03-10 10:18 Yury Bychkov * [r94] IsValid() and supporting index classes are ported, but don't work yet (external dependencies) 2003-03-10 01:17 Yury Bychkov * [r93] IsValid and supporting index classes are almost done. 2003-03-05 17:04 Paul Ramsey * [r92] Build support for new coordinateline examples. 2003-03-05 08:02 Yury Bychkov * [r91] CoordinateList interface example. 2003-03-03 03:56 Paul Ramsey * [r90] Remove PointInRing 2003-03-03 03:35 Paul Ramsey * [r89] Removed unused file. 2003-03-03 02:41 Yury Bychkov * [r88] Some Coordinate& related bugs fixed. 2003-03-03 02:26 Yury Bychkov * [r87] GeometryFactory bug fix. 2003-03-03 00:46 Yury Bychkov * [r86] Second pass of code cleanup. Coordinate references and inlining. 2003-03-02 03:47 Yury Bychkov * [r85] First pass of code cleanup completed over all packages. 2003-03-01 06:10 Paul Ramsey * [r84] Uncommented default constructor for PointInRing 2003-03-01 06:08 Paul Ramsey * [r83] Fixed call to geometry factory. 2003-02-26 23:16 Yury Bychkov * [r82] All packages except 'graph' has been refactored. 2003-02-20 03:32 Paul Ramsey * [r81] Fixed small bug in call to GeometryFactory (instantiate PrecisionModel with new) 2003-02-20 03:30 Paul Ramsey * [r80] GFactory: Move i outside of for loop. Needed to compile GNU CListFactory: Add newline to end of file. 2003-02-20 00:10 Yury Bychkov * [r79] Geom and Operation (including Relate) packages are updated. 2003-02-17 09:38 Yury Bychkov * [r78] GEOM package fully updated & bugs fixed. 2003-02-17 00:40 Yury Bychkov * [r77] GEOM package fully updated. 2003-02-16 22:52 Yury Bychkov * [r76] GEOM package partially updated. 2003-02-12 21:09 Paul Ramsey * [r75] Added two files required by autoconf build process. 2003-02-12 20:51 Paul Ramsey * [r74] Commit build support files. 2003-02-12 19:11 Paul Ramsey * [r73] Change header installation path to $(prefix)/include/geos. 2003-02-12 06:50 Paul Ramsey * [r72] Added newlines to quiet g++ warnings. 2003-02-12 06:48 Paul Ramsey * [r71] Added newlines to ends of files to quiet g++ warnings. 2003-02-12 06:27 Paul Ramsey * [r70] Fix headers. 2003-02-12 06:26 Paul Ramsey * [r69] Changed headers. 2003-02-12 06:24 Paul Ramsey * [r68] Added return value. 2003-02-12 06:24 Paul Ramsey * [r67] Changed headers. 2003-02-12 06:19 Paul Ramsey * [r66] Make path to test file relative. 2003-02-12 06:18 Paul Ramsey * [r65] Change include reference syntax. 2003-02-12 06:07 Paul Ramsey * [r64] Remove NULL test. 2003-02-12 06:07 Paul Ramsey * [r63] Pass double to log(). 2003-02-12 06:07 Paul Ramsey * [r62] Fixed main() return type. 2003-02-12 06:04 Paul Ramsey * [r61] Remove old library references. 2003-02-12 05:58 Paul Ramsey * [r60] Added stdio reference and newline at end. 2003-02-12 00:58 Paul Ramsey * [r59] Added all JTS test cases to the file. 2003-02-11 23:54 Paul Ramsey * [r58] Added support for new cpp files. 2003-02-11 23:33 Yury Bychkov * [r57] Some bugs fixed. 2003-02-11 20:24 Yury Bychkov * [r56] Small changes in PointCoordinateList and EdgeEndStar. 2003-02-11 19:01 Martin Davis * [r55] fixed duplicate for loop index 2003-02-05 08:14 Yury Bychkov * [r54] Second pass of CoordinateList interface migration. 2003-01-27 08:04 Yury Bychkov * [r53] First pass of CoordinateList interface replacement. 2003-01-27 07:56 Yury Bychkov * [r52] First pass of CoordinateList interface replacement. 2003-01-27 07:26 Yury Bychkov * [r51] First pass of CoordinateList interface replacement. 2002-12-02 09:48 Yury Bychkov * [r50] More performance updates. 2002-11-24 10:48 Yury Bychkov * [r49] Some performance improvements. 2002-11-14 23:43 Paul Ramsey * [r48] Build support for the bigtest programs. 2002-11-08 19:49 Yury Bychkov * [r47] Preformance is drastically improved 2002-11-05 23:13 Yury Bychkov * [r46] Code for generating large tests added. 2002-10-31 07:37 Yury Bychkov * [r45] XML tester is less fragile now. 2002-10-30 21:59 Paul Ramsey * [r44] Added configure support files for building w/o automake/autoconf 2002-10-30 21:58 Paul Ramsey * [r43] Small changes to make autoconf happy. 2002-10-30 20:04 Paul Ramsey * [r42] Edited test file to not crash XMLTester 2002-10-30 19:54 Paul Ramsey * [r41] New build changes necessary to build under Linux GNU. 2002-10-23 02:21 Norman Vine * [r40] GNU portability changes 2002-10-17 07:12 Yury Bychkov * [r39] All test cases now work. Some are still too slow. 2002-10-06 09:56 Yury Bychkov * [r38] Relate() is almost debugged. 2002-09-12 14:08 Fernando Villa * [r37] Add makefile support for new files and dir 2002-09-12 01:27 Yury Bychkov * [r36] Relate is finished,but doesn't work yet. 2002-09-10 13:46 Fernando Villa * [r35] Added operation/Makefiles 2002-09-06 20:18 Yury Bychkov * [r34] A lot of changes: Code is brought to version 1.2 of JTS. Compilable part of Operation added. 2002-09-05 18:32 Fernando Villa * [r33] Fixed version numbering. Whenever version numbers are bumped up the change should be reflected in the AC_INIT_AUTOMAKE macro in configure.in. I've put it at 0.0.1 - should be changed as appropriate. The version is #define'd for code being compiled as GEOS_VERSION. 2002-09-03 16:04 Paul Ramsey * [r32] Changed reference to 'libgeom' to 'libgeos' 2002-09-03 13:53 Fernando Villa * [r31] * Add automake/autoconf support for one-lib compilation * add libtool support for shared libraries. --enable-shared={yes|no} and --enable-static={yes|no} control static and shared lib generation. * Makefile.in and configure files added to cvs (for users without automake) * add dir macros/ with a GEOS_INIT macro to be used in configure.in of other packages using geos (not used by geos itself) * add dir tools/ with geos-config script * the makefile in source/geom is the only one that generates a library - all others have the source files in EXTRA_DIST only * small glitch: 'make dist' will give errors trying to add the source files non local to source/geom to the archive using relative paths. Does not have consequences other than the error messages - will see if I can fix this. In general the one-lib, complex-tree solution is not easy to work with in automake. 2002-09-01 18:08 Paul Ramsey * [r30] Minor portability changes. 2002-09-01 17:53 Paul Ramsey * [r29] Changes to support algorithm directory in build structure. 2002-09-01 17:51 Paul Ramsey * [r28] GNU compatibility fixes, changing __min/__max to min/max, adding stdio.h where needed, small syntax adjustments, newlines at end of files. 2002-08-30 18:33 Paul Ramsey * [r27] Added LGPL licence text. 2002-08-30 18:30 Paul Ramsey * [r26] Changed name of authors file as requested by autoconf. 2002-08-30 18:28 Paul Ramsey * [r25] Removed --force-missing which did not work for my version of autoconf 2002-08-30 18:16 Paul Ramsey * [r24] Added cvs ignore files. 2002-08-30 18:15 Paul Ramsey * [r23] Added the testing files back into their new subdirectory. 2002-08-30 18:15 Paul Ramsey * [r22] Added GNU autoconf support files submitted by Norman Vine. Moved test files to a new subdirectory. 2002-08-30 15:52 Yury Bychkov * [r21] 'algorithm' is almost complete 2002-08-22 09:23 Yury Bychkov * [r20] 'graph/index' finished. Some .h changes. 2002-08-21 05:49 Yury Bychkov * [r19] Some changes in 'graph' 2002-08-20 21:08 Yury Bychkov * [r18] Changed consts to enums 2002-08-14 07:00 Yury Bychkov * [r17] New structure of source. 2002-07-11 07:57 Yury Bychkov * [r16] Assert and some graph classes 2002-07-03 05:24 Yury Bychkov * [r15] started XML tester 2002-07-02 06:41 Yury Bychkov * [r14] 'io' and SimpleTester done 2002-06-27 02:50 Yury Bychkov * [r13] 'io' is almost done 2002-06-26 09:10 Yury Bychkov * [r12] Some 'io' classes done. 2002-06-21 07:13 Yury Bychkov * [r11] 'geos': first pass done. Some external dependencies and polishing left. 2002-06-20 08:58 Yury Bychkov * [r10] Only Geometry.java left 2002-06-19 06:29 Yury Bychkov * [r9] 'geom' mostly done. 2002-06-14 07:46 Yury Bychkov * [r8] 'geom' almost done 2002-06-12 01:47 Yury Bychkov * [r7] LineString is 99% finished 2002-06-11 23:43 Yury Bychkov * [r6] 'geom' package 70% done 2002-06-07 17:47 Paul Ramsey * [r2] Initial revision 2002-06-07 17:47 No Body * [r1] New repository initialized by cvs2svn. geos-3.4.2/INSTALL0000644000175000017500000000660412206417150013332 0ustar frankiefrankieCompatibility notes =================== OS/X 10.6, compile with gcc-4.0 rather than the default gcc that comes with XCode. CC=gcc-4.0 CXX=g++-4.0 ./configure Quickstart ========== As root: ./configure make make install The default install location for GEOS is /usr/local. Linux: Make sure that /usr/local/lib is added to /etc/ld.so.conf Make sure that you run /sbin/ldconfig afterwards Solaris: Make sure that /usr/local/lib is added to LD_LIBRARY_PATH Basic Installation ================== The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. Operation Controls ================== `configure' recognizes the following options to control how it operates. --cache-file=FILE Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. --help Print a summary of the options to `configure', and exit. --quiet --silent -q Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). --srcdir=DIR Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. --version Print the version of Autoconf used to generate the `configure' script, and exit. --prefix Change the default installation location `configure' also accepts some other, not widely useful, options. geos-3.4.2/Makefile.am0000644000175000017500000000217612206417150014335 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # # NOTE: Make sure that 'src' appears first. # 'capi' and 'doc' surely rely on availability of libgeos # which is built under 'src' and it seems that automake # is not able to detect required build order but blindly # relies on the order items in SUBDIRS appear. # SUBDIRS = \ include \ src \ capi \ doc \ macros \ swig \ php \ tests \ tools BUILT_SOURCES = geos_svn_revision.h EXTRA_DIST = acsite.m4 makefile.vc nmake.opt autogen.bat CMakeLists.txt \ cmake/modules/CheckPrototypeExists.cmake \ cmake/modules/COPYING-CMAKE-SCRIPTS \ cmake/cmake_uninstall.cmake.in geos_svn_revision.h ACLOCAL_AMFLAGS = -I macros cl: cd $(srcdir) && svn update && svn2cl --authors=authors.svn -i -o ChangeLog apidoc doxygen: cd doc && make $@ authors.git: authors.svn cd $(srcdir) && sed -e 's/:/ = /' authors.svn > authors.git svnrebase: authors.git cd $(srcdir) && git svn rebase --authors-file authors.git geos_svn_revision.h: top_srcdir=$(srcdir) sh $(srcdir)/tools/svn_repo_revision.sh .PHONY: geos_svn_revision.h geos-3.4.2/Makefile.in0000644000175000017500000006123612206417166014357 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \ ChangeLog INSTALL NEWS TODO config.guess config.sub depcomp \ install-sh ltmain.sh missing py-compile ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # # NOTE: Make sure that 'src' appears first. # 'capi' and 'doc' surely rely on availability of libgeos # which is built under 'src' and it seems that automake # is not able to detect required build order but blindly # relies on the order items in SUBDIRS appear. # SUBDIRS = \ include \ src \ capi \ doc \ macros \ swig \ php \ tests \ tools BUILT_SOURCES = geos_svn_revision.h EXTRA_DIST = acsite.m4 makefile.vc nmake.opt autogen.bat CMakeLists.txt \ cmake/modules/CheckPrototypeExists.cmake \ cmake/modules/COPYING-CMAKE-SCRIPTS \ cmake/cmake_uninstall.cmake.in geos_svn_revision.h ACLOCAL_AMFLAGS = -I macros all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am cl: cd $(srcdir) && svn update && svn2cl --authors=authors.svn -i -o ChangeLog apidoc doxygen: cd doc && make $@ authors.git: authors.svn cd $(srcdir) && sed -e 's/:/ = /' authors.svn > authors.git svnrebase: authors.git cd $(srcdir) && git svn rebase --authors-file authors.git geos_svn_revision.h: top_srcdir=$(srcdir) sh $(srcdir)/tools/svn_repo_revision.sh .PHONY: geos_svn_revision.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/NEWS0000644000175000017500000005007312206417150012777 0ustar frankiefrankieChanges in 3.4.2 2013-08-25 - Bug fixes / improvements - Use a double for PrecisionModel scale, avoiding overflows should fix 32-bit regression failures (#652) - isnan workaround OS detection missing NetBSD, DragonFly, Sun nuance (#650) - Do not distribute platform.h and version.h, but install both (#601) - Non-standard ChangeLog file in 3.4.0 and 3.4.1 releases (#654) Changes in 3.4.1 2013-08-17 - Bug fixes / improvements - Assertion failure snapping line to points of rectangle smaller than tolerance (#649) - Can't build using cmake with tar ball (#644) Changes in 3.4.0 2013-08-11 - New things: - Delaunay Triangulation API (#487, #565, #570, #567) - Interruptibility API (C and C++) - CAPI: GEOSNode (#496) - PHP: Geometry->node - GeometryPrecisionReducer class (#496, #526) - BufferInputLineSimplifier header exposed (#548) - New Centroid class supporting mixed geometry components (#612) - io::Writer::reserve() method - CAPI: GEOSNearestPoints - Add --cclibs, --static-clibs and --static-cclibs to geos-config (#497) - Early bail out of overlay exception if input is invalid - C++ API changes: - New noding::GeometryNoder class - Added BufferOp::setSingleSided - Signature of most functions taking a Label changed to take it by reference rather than pointer. - Signature of most functions taking an IntersectionMatrix changed to take it by reference rather than pointer. - GraphComponent::label is now a Label value (from a pointer) - NodedSegmentString takes ownership of CoordinateSenuence now - io::Writer's toString() returns by const ref, write() takes a const ref - Unify prototypes of WKTReader and WKBReader constructor (#310) - GeometryCollection::computeEnvelopInternal and GeometryCollection::compareToSameClass are marked virtual (#478) - Bug fixes / improvements - A point interpolated from a line does not always intersect the same line (#323) - Port ConvexHull robustness fix from JTS-1.13 (#457) - Improve Overlay robustness by reducing input precision on topology exception and by refusing to accept unnoded output (#459) - Improve Buffer robustness by reducing input precision on topology exception (#605) - Mismatch segment sides in OffsetCurveBuilder (#633 ) - Fixed Linear Referencing API to handle MultiLineStrings consistently by always using the lowest possible index value, and by trimming zero-length components from results (#323) - Fixed CMake configuration to set correct SOVERSION (current - age) - Fix EMPTY return from single-point lines and zero-length polygons (#612) - CMakeLists.txt, tools/geos_svn_revision_cmake.h.in: Add geos_svn_revision.h generator to CMake config (#643) - Makefile.vc 'clean' step leaks obj files (#607) Changes in 3.3.8 2013-02-28 - Bug fixes / improvements - IsValidOp: throw proper error on nested shells (#608) - Fix header guards (#617, #618, #619) - WKTWriter::appendCoordinate optimisation - Fix centroid computation for collections with empty components (#582) Changes in 3.3.7 2013-01-22 - Bug fixes / improvements - Fix abort in RightmostEdgeFinder (#605) - Do not force precision reduction below 6 significant digits while trying to obtain a valid Buffer output (#605) - Fix GEOSPointOnSurface with zero-length linestring (#609) - Fix EMPTY return from zero-area polygon (#613) - Segfault from symdifference (#615) Changes in 3.3.6 2012-11-15 -- that's Post-GIS day ! - Bug fixes / improvements - Add support for testing with phpunit 3.6 (not loosing support for 3.4) - Segfault from intersection (#586, #598, #599) Changes in 3.3.5 2012-06-25 - Bug fixes / improvements - Correctly increment CAPI lib version from 3.3.3 (#558) - Port robustness fix to CentroidArea (#559) - Always return POINT from GEOSGetCentroid, even for EMPTY (#560) - Always return POINT from GEOSPointOnSurface, even for EMPTY (#561) Changes in 3.3.4 2012-05-31 - Bug fixes / improvements - Do not abort on NaN overlay input (#530) - Reduce CommonBitsRemover harmful effects during overlay op (#527) - Better cross-compiler support (#534) - Enable overlay ops short-circuits (#542) - Envelope-based short-circuit for symDifference (#543) - Fix support for PHP 5.4 (#513) - Fix TopologyPreservingSimplifier invalid output on closed line (#508) - Reduce calls to ptNotInList, greatly speeding up Polygonizer (#545) Changes in 3.3.3 2012-04-01 - Bug fixes / improvements - Fix simplification of collections with empty items (#519) - Fix MSVC compilation of ambiguous log() call (#506) - Fix CMake issues with std:: namespace detection (#493) Changes in 3.3.2 2012-01-05 - Bug fixes / improvements - Fix CMAKE_CXX_FLAGS overriding -std=gnu++0x (#489) - Missing versions update in CMake configuration (#490) - Fix noding of self-intersecting lines through UnaryUnion (#482) - Fix handling of collapsed edges skipping in BufferOp (#494) - Print up to 18 digits of precision for TopologyException points - Fix noding with reduced precision in Buffer operation (#473) - Fix HotPixel original point invalidation (#498) - Fix CascadedPolygonUnion to discard non-polygonal components (#499) - Improve buffer robustness by reverting to non-snaprounding noder (#495) - Fix C++11 build by avoiding std::pair (#491) - Add --clibs to geos-config and GEOS_C_LIBS to geos.m4 (#497) - Apply shoelace formula for area calculation (#485) - Fix default initialization issue for clang (#500) - Improve overlay robustness by fixing areal validity on snapping (#488) Changes in 3.3.1 2011-09-27 - Bug fixes / improvements - Fix memory leak on invalid geometry in InteriorPointArea (#475) - ValidOp abort in presence of 2 touching holes forming an island (#449) - Enable prepared intersects operation for points - Fortify suspicious code found by static analisys tools - Fix for SOLARIS build (#461) - Fix EMPTY result from GEOSOffsetCurve with distance 0 (#454) - Fix Geometry::clone to copy SRID (#464) - Fix for clang builds (#463) - Fix out-of-place builds for python binding (#332) and regress testing - Fix OS X framework cmake build (#385) Changes in 3.3.0 2011-05-30 - New things: - CAPI: GEOSBufferWithParams (allows single sided buffers) - CAPI: GEOSOffsetCurve deprecates GEOSSingleSidedBuffer - CAPI: GEOSUnaryUnion deprecates GEOSCascadedUnion - CAPI: GEOSisValidDetail: tell state, reason & location apart. allows passing flags. - CAPI: GEOSContext_setNoticeHandler_r, GEOSContext_setErrorHandler_r - CAPI: GEOSGeom_createEmptyPoint, GEOSGeom_createEmptyLineString GEOSGeom_createEmptyPolygon, GEOSGeom_createEmptyCollection - CAPI: GEOSGeom_extractUniquePoints - CAPI: GEOSGetGeometryN support for single geometries - CAPI: GEOSPolygonize_full to return all informations computed by the polygonizer - CAPI: GEOSOrientationIndex - CAPI: GEOSSharedPaths to find shared paths and their orientation - CAPI: GEOSSnap - CAPI: GEOSRelatePatternMatch - CAPI: GEOSCovers, GEOSCoveredBy (#396) - CAPI: GEOSRelateBoundaryNodeRule (#399) - CAPI: GEOSGeom_getCoordinateDimension() (#311) - CAPI: GEOSWKTWriter_setOutputDimension, GEOSWKTWriter_setOld3D (#292) - PHP: new PHP5 bindings based on CAPI - Semantic C++ API changes: - Geometry inheritance chain changed to introduce Puntal, Lineal and Polygonal classes (virtual inheritance introduced) - Polygonizer::getInvalidRingLines retains ownership of vector elements - Geometry::isWithinDistance method is now const - Polygonizer::getCutEdges returns by const ref - Polygonizer::getDangles returns by const ref - Empty LinearRings are closed by definition - Bug fixes / improvements - Fixed Geometry.distance() and DistanceOp to return 0.0 for empty inputs - Invalid compound geometries reported as valid (#333) - Return up to 15 digits of precision from GEOSisValidReason_t (#329) - CAPI: do not leak contexts when using the non-reentrant interface - Fix duplicated dangles returned by Polygonizer - Fix SnapIfNeededOverlayOp to throw the originating exception - Fixed LineMerger to skip lines with only a single unique coordinate - Fix NodedSegmentString to handle zero-length line segments correctly (via safeOctant) - Fixed buffer OffsetCurveSetBuilder to handle "flat" rings correctly - Added illegal state check in LineSegment::pointAlongOffset() - Improved performance of RectangleIntersects by always using segment-scanning and refining SegmentIntersectionTester - Reduce memory use in PreparedGeometry predicates (#342) - Fix infinite loop in RobustDeterminant with nan/inf input (#357) Changes in 3.2.0 2009-12-14 - Add Single-sided buffer operation - JTS-1.10 sync ... - Drastically improved Buffer speed (20x for a case in testsuite) - Improved EdgeList duplicate edge finding - Added algorithm::distance package - Added algorithm::Angle class - Added algorithm::BoundaryNodeRule class - IsSimpleOp can now return non-simple location coordinate - DistanceOp can now check for 'within distance' predicate (earlier exit) - MultiPolygon::getBoundary always return MultiLineString, also when the result is the EMPTY geometry. - Various bug and leak fixes, optimizations - Replace MarkupSTL with tinyXML Changes in 3.1.0 - PreparedGeometry operations for very fast predicate testing. - Intersects() - Covers() - CoveredBy() - ContainsProperly() - Easier builds under MSVC and OpenSolaris - Thread-safe CAPI option - IsValidReason added to CAPI - GEOSPolygonizer_getCutEdges added to CAPI - CascadedUnion operation for fast unions of geometry sets - Numerous bug fixes. http://trac.osgeo.org/geos/query?status=closed&milestone=3.1.0&order=priority Changes in 3.0.0 These are mostly ABI breaking changes. In few cases the API also changed, but the most external one (the documented one) should be unchanged. - New things: - Added geom::BinaryOp class performing a binary operation using different heuristics to reduce probability of robustness issues. Both C-API and XMLTester now use this class for binary operations. - Added covers() and coveredBy() predicates to Geometry class - Added overlay::overlayOp() adapter class - Added GEOSSimplify() and GEOSTopologyPreserveSimplify() to the C API - Added closed ring checks in IsValidOp - Multi-input support in XMLTester - HEXWKB I/O - Envelope(string) ctor - Ruby interface - New ShortCircuitedGeometryVisitor class - New operation/predicate package - Added CGAlgorithms::isPointInRing() version working with Coordinate::ConstVect type (faster!) - Added getAt(int pos, Coordinate &to) funtion to CoordinateSequence class. - Moved GetNumGeometries() and GetGeometryN() interfaces from GeometryCollection to Geometry class. - New planarSubgraph class - New ConnectedSubgraphFinder class. - New LineSequencer class - New WKTWriter::toLineString and ::toPoint convenience methods - New IsValidOp::setSelfTouchingRingFormingHoleValid method - New WKTWriter::toLineString and ::toPoint convenience methods - New IsValidOp::setSelfTouchingRingFormingHoleValid method - New Envelope::centre() - New Envelope::intersection(Envelope) - New Envelope::expandBy(distance, [ydistance]) - New LineString::reverse() - New MultiLineString::reverse() - New Geometry::buffer(distance, quadSeg, endCapStyle) - New SnapRounding code - New size() and operator[] interfaces to CoordinateSequence - New ScaledNoder class - New unit tests (make check rule) - Optimizations: - WKT parser speedup - Function inlining - Coordinate copies reduction - Heap allocations reduction - More classes made final - Better use of standard containers - Use of singletons when appropriate - Removed many function calls in loops' end conditions - Improved XMLTester output and user interface - Improved memory use in geos::geom::util::PolygonExtractor - Ported JTS-1.7 version of ConvexHull with big attention to memory usage optimizations. - Changed CoordinateArrayFilter to reduce memory copies - Changed UniqueCoordinateArrayFilter to reduce memory copies - Added rectangle-based optimizations of intersects() and contains() ops - Inlined all planarGraphComponent class - More iterators returning methods and inlining in planargraph. - Obsoleted toInternalGeometry/fromInternalGeometry - Improved buffering speed and robustness by using Snap Rounding - Semantic changes - SegmentString: getCoordinates() doesn't return a clone anymore, getCoordinatesRO() obsoleted. - JTS packages mapped to geos:: sub-namespaces - Geometry::getInteriorPoint() returns NULL if called against an EMPTY geom - LineString::get{Start,End}Point return NULL for EMPTY geoms - GEOSException is now derived by std::runtim_exception and thrown by const reference. - Geometry constructors made protected, to force use of a GeometryFactory. - Correctness: - More const-correct signatures - Stronger methods typing (removed some void * args). - Changed index-related funx signatures to use size_t rather then int - More const-correctness in Buffer "package" - Bugfix in LineString::getCoordinate() failing to return NULL from getCoordinat() when empty. - Use unsigned int for indexes and sizes. - Layout changes: - Namespaces mapping JTS packages - Renamed classes after JTS names (namespaces use made this possible w/out name clashes) - Splitted headers, for build speedup and possible API reduction. - Moved source/bigtest and source/test to tests/bigtest and test/xmltester - Moved C-API in it's own top-level dir capi/ - Reworked automake scripts to produce a static lib for each subdir and then link all subsystem's libs togheter - Renamed DefaultCoordinateSequence to CoordinateArraySequence. - Renamed OverlayOp opcodes by prepending the 'op' prefix, and given the enum a name (OpCode) for type-safety. - Bug fixes: - Fixed bug causing redundant linestrings to be returned in the result of overlaying polygons containing touching holes (#13) - Fixed integer conversion bug - Fixed PointLocator handling of LinearRings - Added missing ::clone() methods for Multi* geoms - (Partial) Detailed list of changes: - Changed SegmentNode to contain a *real* Coordinate (not a pointer) to reduce construction costs. - Changed geomgraph nodeMap to use Coordinate pointers as keys - Envelope destructor made non-virtual to give compiler more static binding options. - Changed BufferSubgraph::computeDepths to use a set instead of a vector for checking visited Edges. - Made LineIntersector a concrete type - Node::isIncidentEdgeInResult() method made virtual - Const-correct signatures in LineMerger package - Changed operation/valid/*NestedRingTester classes interface to use Coordinate pointers instead of copies. - Changed EdgeIntersectionList to use a set instead of a vector - Changed DepthSegment to store a real Coordinate rather then a pointer. - Changed SubgraphDepthLocater to store real containers rather then pointers. - Changed BufferSubgraph to store a real RightmostEdgeFinder and real containers rather then pointers. - CoordinateSequence API changes: - point index and size related functions use unsigned int rather then int - Changed EdgeEndStar to maintain a single container for EdgeEnds - Changed PlanarGraph::addEdges to take a const vector by ref rathern then a non-const vector by pointer - Changed EdgeList::addAll to take a const vector by ref rather then a non-const vector by pointer - Added apply_rw(CoordinateFilter *) and apply_ro(CoordinateFilter *) const to CoordinateSequence - LineBuilder::lineEdgesList made a real vector, rather then pointer (private member) - SegmentString::eiList made a real SegmentNodeList, rather then a pointer (private member) - Removed coordinate copies in ElevationMatrix::elevate - Changed CoordinateFilter interface to have a const method for filter_rw, updated interfaces using this to take const CoordinateFilter (apply_rw). Changes in 2.2.4 - Added version.in.vc to distribution Changes in 2.2.1 - Support for MingW builds - Bugfix in Polygonizer chocking on invalid LineString inputs - CAPI: small leak removed in GEOSHasZ() Changes in 2.2.0 - Performance improvement in OverlayOp::insertUniqueEdge() - CoordinateSequence copy removal in EdgeRing - Minor memory allocation improvements - Higher dimensions interface for CoordinateSequence - Added getCoordinatesRO for Point class - NEW WKB IO - NEW Simplified and stabler C API Changes in 2.1.4 - Severe BUGFIX in BufferSubgraphGT and other functions used as StrictWeakOrdering predicates for sort() Changes in 2.1.3 - win32/mingw build support - Segfault fix in LinearRing and LineString constructors - Segfault fix in Polygonizer - XMLTester installed by default - XMLTester code cleanup - Fixed handling of collection input in GeometryFactory::buildGeometry - Added shortcircuit test for Union operation - Reduced useless Coordinate copies in CGAlgorithms::isPointInRing() - Performance improvements in CGAlgorithms::isOnLine() - Other minor performance improvements - New Node::isIncidentEdgeInResult() method - OverlayOp's PointBuilder performance improvement by reduction of LineIntersector calls. - Optimizations in Buffer operation - Sever BUGFIX in DepthSegmentLT as suggested by Graeme Hiebert Changes in 2.1.2 - Segfault fix in Point::isEmpty - Mem Leak fix in OffsetCurveBuilder::getRingCurve - Bugfix in LineSegment::reverse - Added multipolygon buffering test in source/test/testLeaksBig - Ported JTS robustness patch for RobustLineIntersector - Removed useless Coordinate copies in OverlayOp::mergeZ() - Avoided throws by IsValid on invalid input - Stricter C++ syntax (math.h=>cmath, ieeefp.h in "C" block, ostringstream instead of sprintf) - Better support for older compilers (Polygonizer::LineStringAdder friendship) - Removed useless Coordinate copies in CGAlgorithms::isOnLine() - Added support for polygonize and parametrized buffer tests in XMLTester - Fixed support for --includedir and --libdir - Fixed Z interpolation in LineIntersector - Handled NULL results from getCentroid() in XMLTester - Segfault fix in (EMPTY)Geometry::getCentroid() - Made polygon::getBoundary() always OGC-valid (no LinearRings) - Input checking and promoting in GeometryFactory::createMultiLineString() - Segfault fix in GeometryEditor::editPolygon() Changes in 2.1.1 - Fixed uninitialized Coordinate in TopologyException - Added install of version.h, platform.h and timeval.h - Memleak fix in PolygonizeGraph - Memleak fix in OverlayOp - Compiler warnings removal - Cleaner w32 build - Z interpolation in overlay operations - Debian package build scripts Changes in 2.1.0 - Added Polygonizer and LineMerger classes. - python wrapper examples - General cleanup / warnings removal - cleaner win32 / older copilers builds - Reduced heap allocations - debian package builder scripts - reduction of standard C lib headers dependency - Z support in overlay operations. Changes in 2.0.0 - CoordinateList renamed to CoordinateSequence, BasicCoordinateList renamed to DefaultCoordinateSequence to reflect JTS changes. DefaultCoordinateSequenceFactory and CoordinateSequenceFactory got same interface as JTS. - Added geos/version.h defining versioning infos - Added geos.h for quick inclusion. It will include geos/geom.h, new geos/version.h, geos/util.h geos/io.h and geos/unload.h (geometry input/output, exceptions, operations). - Added a geos::version() function showing GEOS and equivalent JTS versions as strings. - All geometry constructors take ownership of given arguments. GeometryFactory provides pass-by-reference geometry creators to take care of a deep-copy. - GeometryFactory::createMultiPoint(const CoordinateList *) has been renamed to GeometryFactory::createMultiPoint(const CoordinateList &) to reflect copy semantic - GeometryFactory: EMPTY geometry creation do now have their own constructors taking no arguments. - Geometry constructors taking PrecisionModel and SRID have been dropped. You have to use GeometryFactory instead. - WKTWriter default constructor has been dropped. You need to initialize it with an explicit GeometryFactory geos-3.4.2/README0000644000175000017500000000524612206417150013162 0ustar frankiefrankieBUILDING, TESTING, INSTALLING ============================= Unix ---- Using Autotools: ./autogen.sh # in ${srcdir}, if obtained from SVN ${srcdir}/configure # in build dir Using CMake: cmake ${srcdir} # in build dir Now, all versions: make make check make install # as root ldconfig # as root Win32 ----- If you use Microsoft Visual C++ (7.1 or later) compiler, you can build GEOS using NMAKE program and provided makefile.vc files. If you are building from SVN checkout, first run: autogen.bat Then: nmake /f makefile.vc MSVC_VER=1400 where 1400 is version number of Visual C++ compiler, here Visual C++ 8.0 from Visual Studio 2005 (supported versions are 1300, 1310, 1400 and 1500). The bootstrap.bat step is required to generate a couple of header files. In order to build debug configuration of GEOS, additional flag DEBUG=1 is required: nmake /f makefile.vc MSVC_VER=1400 DEBUG=1 CLIENT APPLICATIONS =================== Using the C interface (recommended) ----------------------------------- To compile programs against the C lib (recommended): CFLAGS += `geos-config --cflags` LDFLAGS += `geos-config --ldflags` -lgeos_c #include Example usage: capi/geostest.c contains basic usage examples. Using the C++ interface (discouraged) ------------------------------------- NB: The C++ interface should not be used directly; the geos project views it as a bug for another program to use the C++ interface or even to directly link against the C++ library. The C++ library name will change on every minor release because it is too hard to know if there have been ABI changes. (The C libary uses the C++ interface, but the C library follows normal ABI-change-sensitive versioning, so programs that link only against the C library should work without relinking when geos is upgraded.) To compile programs against the C++ lib: CFLAGS += `geos-config --cflags` LDFLAGS += `geos-config --ldflags` -lgeos #include Example usage: doc/example.cpp contains basic usage examples. Scripting language bindings --------------------------- Ruby bindings are fully supported. To build, use the --enable-ruby option when configuring: ./configure ... --enable-ruby PHP bindings are fully supported. To build, use the --enable-php option when configuring: ./configure ... --enable-php Since version 3.0, the Python bindings are unsupported. Recommended options: 1. Become or recruit a new maintainer. 2. Use Shapely (http://pypi.python.org/pypi/Shapely) with Python versions 2.4 or greater. 3. Simply call functions from libgeos_c via Python ctypes. DOCUMENTATION ============= cd doc; make doxygen-html http://trac.osgeo.org/geos geos-3.4.2/TODO0000644000175000017500000000146212206417150012766 0ustar frankiefrankieGEOS TODO: - Port Triangulation API from JTS-1.11 - Feed PrecisionModel to OverlayResultValidator to set _TOLERANCE - Test unit tests for snapround package - DoubleBits misregards BYTE_ENDIAN, must check it. - BUILD CORRECTNESS: - include from all .cpp files - WKB tester in doc/examples.cpp should do point-by-point comparison. - Implement Safe's idea of a compile-time enabled 2d-only inlineable CoordinateSequence - WKB extension with LINEARRING ? - Check how to disable GEOS_VERSION define on command line (or make GEOS_VERSION define in version.h optional) not a major problems, just makes the compiler issue some warninigs. - Check GeometryEditor behaviour (modify passed geom or create a new one ?) [not documented] - Add distinct binary predicates test support in XMLTester geos-3.4.2/aclocal.m40000644000175000017500000010750112206417157014146 0ustar frankiefrankie# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, [m4_warning([this file was generated for autoconf 2.67. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless `enable' is passed literally. # For symmetry, `disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([macros/ac_pkg_swig.m4]) m4_include([macros/ac_python_devel.m4]) m4_include([macros/libtool.m4]) m4_include([macros/ltoptions.m4]) m4_include([macros/ltsugar.m4]) m4_include([macros/ltversion.m4]) m4_include([macros/lt~obsolete.m4]) m4_include([macros/python.m4]) m4_include([macros/ruby.m4]) geos-3.4.2/acsite.m40000644000175000017500000000300212206417150014000 0ustar frankiefrankie# This has been taken from postgres-9.1+ local macros # ( REL9_1_BETA2-1484-g293ec33 ) # PGAC_TYPE_64BIT_INT(TYPE) # ------------------------- # Check if TYPE is a working 64 bit integer type. Set HAVE_TYPE_64 to # yes or no respectively, and define HAVE_TYPE_64 if yes. AC_DEFUN([PGAC_TYPE_64BIT_INT], [define([Ac_define], [translit([have_$1_64], [a-z *], [A-Z_P])])dnl define([Ac_cachevar], [translit([pgac_cv_type_$1_64], [ *], [_p])])dnl AC_CACHE_CHECK([whether $1 is 64 bits], [Ac_cachevar], [AC_TRY_RUN( [typedef $1 ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ac_int64 a = 20000001; ac_int64 b = 40000005; int does_int64_work() { ac_int64 c,d; if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ c = a * b; d = (c + b) / b; if (d != a+1) return 0; return 1; } main() { if (does_int64_work()) exit(0); exit(-1); }], [Ac_cachevar=yes], [Ac_cachevar=no], [# If cross-compiling, check the size reported by the compiler and # trust that the arithmetic works. AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [sizeof($1) == 8])], Ac_cachevar=yes, Ac_cachevar=no)])]) Ac_define=$Ac_cachevar if test x"$Ac_cachevar" = xyes ; then AC_DEFINE(Ac_define, 1, [Define to 1 if `]$1[' works and is 64 bits.]) fi undefine([Ac_define])dnl undefine([Ac_cachevar])dnl ])# PGAC_TYPE_64BIT_INT geos-3.4.2/autogen.bat0000644000175000017500000000063412206417147014436 0ustar frankiefrankie@ECHO OFF REM REM This script generates headers for use with Visual C++ only REM REM Usage: REM .\autogen.bat REM nmake -f makefile.vc REM REM NOTE: DO NOT include this script in GEOS sources distribution REM set GEOS_HEADERS=include\geos COPY %GEOS_HEADERS%\version.h.vc %GEOS_HEADERS%\version.h COPY %GEOS_HEADERS%\platform.h.vc %GEOS_HEADERS%\platform.h COPY capi\geos_c.h.in capi\geos_c.h geos-3.4.2/capi/0000755000175000017500000000000012206417240013207 5ustar frankiefrankiegeos-3.4.2/capi/CMakeLists.txt0000644000175000017500000000434112206417150015751 0ustar frankiefrankie################################################################################# # # GEOS C library build configuration for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# if(WIN32) add_definitions("-DGEOS_DLL_EXPORT=1") endif() set(geos_c_SOURCES geos_c.cpp geos_ts_c.cpp) file(GLOB geos_capi_HEADERS ${CMAKE_BINARY_DIR}/capi/*.h) # fix source_group issue if(NOT GEOS_ENABLE_MACOSX_FRAMEWORK) # if building OS X framework, CAPI built into C++ library add_library(geos_c SHARED ${geos_c_SOURCES}) target_link_libraries(geos_c geos) if (WIN32) set_target_properties(geos_c PROPERTIES VERSION ${CAPI_VERSION} CLEAN_DIRECT_OUTPUT 1) else() set_target_properties(geos_c PROPERTIES VERSION ${CAPI_VERSION} SOVERSION ${CAPI_SOVERSION} CLEAN_DIRECT_OUTPUT 1) endif() endif() ################################################################################# # Installation ################################################################################# if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos_c.h DESTINATION GEOS.framework/Versions/${VERSION_MAJOR}/Headers) install(CODE "execute_process(COMMAND sed -E -i \"\" \"s,# *include[[:space:]]+ * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * ***********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef _MSC_VER #pragma warning(disable : 4099) #endif // Some extra magic to make type declarations in geos_c.h work - for cross-checking of types in header. #define GEOSGeometry geos::geom::Geometry #define GEOSPreparedGeometry geos::geom::prep::PreparedGeometry #define GEOSCoordSequence geos::geom::CoordinateSequence #define GEOSSTRtree geos::index::strtree::STRtree #define GEOSWKTReader_t geos::io::WKTReader #define GEOSWKTWriter_t geos::io::WKTWriter #define GEOSWKBReader_t geos::io::WKBReader #define GEOSWKBWriter_t geos::io::WKBWriter typedef struct GEOSBufParams_t GEOSBufferParams; #include "geos_c.h" /// Define this if you want operations triggering Exceptions to /// be printed (will use the NOTIFY channel - only implemented for GEOSUnion so far) /// #undef VERBOSE_EXCEPTIONS #include /* #if defined(_MSC_VER) # define GEOS_DLL __declspec(dllexport) #else # define GEOS_DLL #endif */ // import the most frequently used definitions globally using geos::geom::Geometry; using geos::geom::LineString; using geos::geom::Polygon; using geos::geom::CoordinateSequence; using geos::geom::GeometryFactory; using geos::io::WKTReader; using geos::io::WKTWriter; using geos::io::WKBReader; using geos::io::WKBWriter; using geos::io::CLocalizer; using geos::index::strtree::STRtree; using geos::operation::overlay::OverlayOp; using geos::operation::overlay::overlayOp; using geos::operation::geounion::CascadedPolygonUnion; typedef std::auto_ptr GeomAutoPtr; //## GLOBALS ################################################ // NOTE: SRID will have to be changed after geometry creation GEOSContextHandle_t handle = NULL; extern "C" { void initGEOS (GEOSMessageHandler nf, GEOSMessageHandler ef) { if ( ! handle ) { handle = initGEOS_r( nf, ef ); } else { GEOSContext_setNoticeHandler_r(handle, nf); GEOSContext_setErrorHandler_r(handle, ef); } geos::util::Interrupt::cancel(); } void finishGEOS () { if (handle != NULL) { finishGEOS_r( handle ); handle = NULL; } } GEOSInterruptCallback* GEOS_interruptRegisterCallback(GEOSInterruptCallback* cb) { return geos::util::Interrupt::registerCallback(cb); } void GEOS_interruptRequest() { geos::util::Interrupt::request(); } void GEOS_interruptCancel() { geos::util::Interrupt::cancel(); } void GEOSFree (void* buffer) { GEOSFree_r( handle, buffer ); } /**************************************************************** ** relate()-related functions ** return 0 = false, 1 = true, 2 = error occured ** */ char GEOSDisjoint(const Geometry *g1, const Geometry *g2) { return GEOSDisjoint_r( handle, g1, g2 ); } char GEOSTouches(const Geometry *g1, const Geometry *g2) { return GEOSTouches_r( handle, g1, g2 ); } char GEOSIntersects(const Geometry *g1, const Geometry *g2) { return GEOSIntersects_r( handle, g1, g2 ); } char GEOSCrosses(const Geometry *g1, const Geometry *g2) { return GEOSCrosses_r( handle, g1, g2 ); } char GEOSWithin(const Geometry *g1, const Geometry *g2) { return GEOSWithin_r( handle, g1, g2 ); } // call g1->contains(g2) // returns 0 = false // 1 = true // 2 = error was trapped char GEOSContains(const Geometry *g1, const Geometry *g2) { return GEOSContains_r( handle, g1, g2 ); } char GEOSOverlaps(const Geometry *g1, const Geometry *g2) { return GEOSOverlaps_r( handle, g1, g2 ); } char GEOSCovers(const Geometry *g1, const Geometry *g2) { return GEOSCovers_r( handle, g1, g2 ); } char GEOSCoveredBy(const Geometry *g1, const Geometry *g2) { return GEOSCoveredBy_r( handle, g1, g2 ); } //------------------------------------------------------------------- // low-level relate functions //------------------------------------------------------------------ char GEOSRelatePattern(const Geometry *g1, const Geometry *g2, const char *pat) { return GEOSRelatePattern_r( handle, g1, g2, pat ); } char GEOSRelatePatternMatch(const char *mat, const char *pat) { return GEOSRelatePatternMatch_r( handle, mat, pat ); } char * GEOSRelate(const Geometry *g1, const Geometry *g2) { return GEOSRelate_r( handle, g1, g2 ); } char * GEOSRelateBoundaryNodeRule(const Geometry *g1, const Geometry *g2, int bnr) { return GEOSRelateBoundaryNodeRule_r( handle, g1, g2, bnr ); } //----------------------------------------------------------------- // isValid //----------------------------------------------------------------- char GEOSisValid(const Geometry *g) { return GEOSisValid_r( handle, g ); } char * GEOSisValidReason(const Geometry *g) { return GEOSisValidReason_r( handle, g ); } char GEOSisValidDetail(const Geometry *g, int flags, char** reason, Geometry ** location) { return GEOSisValidDetail_r( handle, g, flags, reason, location ); } //----------------------------------------------------------------- // general purpose //----------------------------------------------------------------- char GEOSEquals(const Geometry *g1, const Geometry *g2) { return GEOSEquals_r( handle, g1, g2 ); } char GEOSEqualsExact(const Geometry *g1, const Geometry *g2, double tolerance) { return GEOSEqualsExact_r( handle, g1, g2, tolerance ); } int GEOSDistance(const Geometry *g1, const Geometry *g2, double *dist) { return GEOSDistance_r( handle, g1, g2, dist ); } int GEOSHausdorffDistance(const Geometry *g1, const Geometry *g2, double *dist) { return GEOSHausdorffDistance_r( handle, g1, g2, dist ); } int GEOSHausdorffDistanceDensify(const Geometry *g1, const Geometry *g2, double densifyFrac, double *dist) { return GEOSHausdorffDistanceDensify_r( handle, g1, g2, densifyFrac, dist ); } int GEOSArea(const Geometry *g, double *area) { return GEOSArea_r( handle, g, area ); } int GEOSLength(const Geometry *g, double *length) { return GEOSLength_r( handle, g, length ); } CoordinateSequence * GEOSNearestPoints(const Geometry *g1, const Geometry *g2) { return GEOSNearestPoints_r( handle, g1, g2 ); } Geometry * GEOSGeomFromWKT(const char *wkt) { return GEOSGeomFromWKT_r( handle, wkt ); } char * GEOSGeomToWKT(const Geometry *g) { return GEOSGeomToWKT_r( handle, g ); } // Remember to free the result! unsigned char * GEOSGeomToWKB_buf(const Geometry *g, size_t *size) { return GEOSGeomToWKB_buf_r( handle, g, size ); } Geometry * GEOSGeomFromWKB_buf(const unsigned char *wkb, size_t size) { return GEOSGeomFromWKB_buf_r( handle, wkb, size ); } /* Read/write wkb hex values. Returned geometries are owned by the caller.*/ unsigned char * GEOSGeomToHEX_buf(const Geometry *g, size_t *size) { return GEOSGeomToHEX_buf_r( handle, g, size ); } Geometry * GEOSGeomFromHEX_buf(const unsigned char *hex, size_t size) { return GEOSGeomFromHEX_buf_r( handle, hex, size ); } char GEOSisEmpty(const Geometry *g) { return GEOSisEmpty_r( handle, g ); } char GEOSisSimple(const Geometry *g) { return GEOSisSimple_r( handle, g ); } char GEOSisRing(const Geometry *g) { return GEOSisRing_r( handle, g ); } //free the result of this char * GEOSGeomType(const Geometry *g) { return GEOSGeomType_r( handle, g ); } // Return postgis geometry type index int GEOSGeomTypeId(const Geometry *g) { return GEOSGeomTypeId_r( handle, g ); } //------------------------------------------------------------------- // GEOS functions that return geometries //------------------------------------------------------------------- Geometry * GEOSEnvelope(const Geometry *g) { return GEOSEnvelope_r( handle, g ); } Geometry * GEOSIntersection(const Geometry *g1, const Geometry *g2) { return GEOSIntersection_r( handle, g1, g2 ); } Geometry * GEOSBuffer(const Geometry *g, double width, int quadrantsegments) { return GEOSBuffer_r( handle, g, width, quadrantsegments ); } Geometry * GEOSBufferWithStyle(const Geometry *g, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit) { return GEOSBufferWithStyle_r( handle, g, width, quadsegs, endCapStyle, joinStyle, mitreLimit ); } Geometry * GEOSSingleSidedBuffer(const Geometry *g, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide) { return GEOSSingleSidedBuffer_r( handle, g, width, quadsegs, joinStyle, mitreLimit, leftSide ); } Geometry * GEOSOffsetCurve(const Geometry *g, double width, int quadsegs, int joinStyle, double mitreLimit) { return GEOSOffsetCurve_r( handle, g, width, quadsegs, joinStyle, mitreLimit ); } Geometry * GEOSConvexHull(const Geometry *g) { return GEOSConvexHull_r( handle, g ); } Geometry * GEOSDifference(const Geometry *g1, const Geometry *g2) { return GEOSDifference_r( handle, g1, g2 ); } Geometry * GEOSBoundary(const Geometry *g) { return GEOSBoundary_r( handle, g ); } Geometry * GEOSSymDifference(const Geometry *g1, const Geometry *g2) { return GEOSSymDifference_r( handle, g1, g2 ); } Geometry * GEOSUnion(const Geometry *g1, const Geometry *g2) { return GEOSUnion_r( handle, g1, g2 ); } Geometry * GEOSUnaryUnion(const Geometry *g) { return GEOSUnaryUnion_r( handle, g); } Geometry * GEOSNode(const Geometry *g) { return GEOSNode_r( handle, g ); } Geometry * GEOSUnionCascaded(const Geometry *g) { return GEOSUnionCascaded_r( handle, g ); } Geometry * GEOSPointOnSurface(const Geometry *g) { return GEOSPointOnSurface_r( handle, g ); } //------------------------------------------------------------------- // memory management functions //------------------------------------------------------------------ void GEOSGeom_destroy(Geometry *a) { return GEOSGeom_destroy_r( handle, a ); } int GEOSGetNumCoordinates(const Geometry *g) { return GEOSGetNumCoordinates_r( handle, g ); } /* * Return -1 on exception, 0 otherwise. * Converts Geometry to normal form (or canonical form). */ int GEOSNormalize(Geometry *g) { return GEOSNormalize_r( handle, g ); } int GEOSGetNumInteriorRings(const Geometry *g) { return GEOSGetNumInteriorRings_r( handle, g ); } // returns -1 on error and 1 for non-multi geometries int GEOSGetNumGeometries(const Geometry *g) { return GEOSGetNumGeometries_r( handle, g ); } /* * Call only on GEOMETRYCOLLECTION or MULTI*. * Return a pointer to the internal Geometry. */ const Geometry * GEOSGetGeometryN(const Geometry *g, int n) { return GEOSGetGeometryN_r( handle, g, n ); } /* * Call only on LINESTRING * Returns NULL on exception */ Geometry * GEOSGeomGetPointN(const Geometry *g, int n) { return GEOSGeomGetPointN_r(handle, g, n); } /* * Call only on LINESTRING */ Geometry * GEOSGeomGetStartPoint(const Geometry *g) { return GEOSGeomGetStartPoint_r(handle, g); } /* * Call only on LINESTRING */ Geometry * GEOSGeomGetEndPoint(const Geometry *g) { return GEOSGeomGetEndPoint_r(handle, g); } /* * Call only on LINESTRING * return 2 on exception, 1 on true, 0 on false */ char GEOSisClosed(const Geometry *g) { return GEOSisClosed_r(handle, g); } /* * Call only on LINESTRING * returns 0 on exception, otherwise 1 */ int GEOSGeomGetLength(const Geometry *g, double *length) { return GEOSGeomGetLength_r(handle, g, length); } /* * Call only on LINESTRING * returns -1 on exception */ int GEOSGeomGetNumPoints(const Geometry *g) { return GEOSGeomGetNumPoints_r(handle, g); } /* * For POINT * returns 0 on exception, otherwise 1 */ int GEOSGeomGetX(const Geometry *g, double *x) { return GEOSGeomGetX_r(handle, g, x); } /* * For POINT * returns 0 on exception, otherwise 1 */ int GEOSGeomGetY(const Geometry *g, double *y) { return GEOSGeomGetY_r(handle, g, y); } /* * Call only on polygon * Return a copy of the internal Geometry. */ const Geometry * GEOSGetExteriorRing(const Geometry *g) { return GEOSGetExteriorRing_r( handle, g ); } /* * Call only on polygon * Return a pointer to internal storage, do not destroy it. */ const Geometry * GEOSGetInteriorRingN(const Geometry *g, int n) { return GEOSGetInteriorRingN_r( handle, g, n ); } Geometry * GEOSGetCentroid(const Geometry *g) { return GEOSGetCentroid_r( handle, g ); } Geometry * GEOSGeom_createCollection(int type, Geometry **geoms, unsigned int ngeoms) { return GEOSGeom_createCollection_r( handle, type, geoms, ngeoms ); } Geometry * GEOSPolygonize(const Geometry * const * g, unsigned int ngeoms) { return GEOSPolygonize_r( handle, g, ngeoms ); } Geometry * GEOSPolygonizer_getCutEdges(const Geometry * const * g, unsigned int ngeoms) { return GEOSPolygonizer_getCutEdges_r( handle, g, ngeoms ); } GEOSGeometry * GEOSPolygonize_full(const GEOSGeometry* input, GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid) { return GEOSPolygonize_full_r(handle, input, cuts, dangles, invalid ); } Geometry * GEOSLineMerge(const Geometry *g) { return GEOSLineMerge_r( handle, g ); } int GEOSGetSRID(const Geometry *g) { return GEOSGetSRID_r( handle, g ); } void GEOSSetSRID(Geometry *g, int srid) { return GEOSSetSRID_r( handle, g, srid ); } char GEOSHasZ(const Geometry *g) { return GEOSHasZ_r( handle, g ); } int GEOS_getWKBOutputDims() { return GEOS_getWKBOutputDims_r( handle ); } int GEOS_setWKBOutputDims(int newdims) { return GEOS_setWKBOutputDims_r( handle, newdims ); } int GEOS_getWKBByteOrder() { return GEOS_getWKBByteOrder_r( handle ); } int GEOS_setWKBByteOrder(int byteOrder) { return GEOS_setWKBByteOrder_r( handle, byteOrder ); } CoordinateSequence * GEOSCoordSeq_create(unsigned int size, unsigned int dims) { return GEOSCoordSeq_create_r( handle, size, dims ); } int GEOSCoordSeq_setOrdinate(CoordinateSequence *s, unsigned int idx, unsigned int dim, double val) { return GEOSCoordSeq_setOrdinate_r( handle, s, idx, dim, val ); } int GEOSCoordSeq_setX(CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate(s, idx, 0, val); } int GEOSCoordSeq_setY(CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate(s, idx, 1, val); } int GEOSCoordSeq_setZ(CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate(s, idx, 2, val); } CoordinateSequence * GEOSCoordSeq_clone(const CoordinateSequence *s) { return GEOSCoordSeq_clone_r( handle, s ); } int GEOSCoordSeq_getOrdinate(const CoordinateSequence *s, unsigned int idx, unsigned int dim, double *val) { return GEOSCoordSeq_getOrdinate_r( handle, s, idx, dim, val ); } int GEOSCoordSeq_getX(const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate(s, idx, 0, val); } int GEOSCoordSeq_getY(const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate(s, idx, 1, val); } int GEOSCoordSeq_getZ(const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate(s, idx, 2, val); } int GEOSCoordSeq_getSize(const CoordinateSequence *s, unsigned int *size) { return GEOSCoordSeq_getSize_r( handle, s, size ); } int GEOSCoordSeq_getDimensions(const CoordinateSequence *s, unsigned int *dims) { return GEOSCoordSeq_getDimensions_r( handle, s, dims ); } void GEOSCoordSeq_destroy(CoordinateSequence *s) { return GEOSCoordSeq_destroy_r( handle, s ); } const CoordinateSequence * GEOSGeom_getCoordSeq(const Geometry *g) { return GEOSGeom_getCoordSeq_r( handle, g ); } Geometry * GEOSGeom_createPoint(CoordinateSequence *cs) { return GEOSGeom_createPoint_r( handle, cs ); } Geometry * GEOSGeom_createLinearRing(CoordinateSequence *cs) { return GEOSGeom_createLinearRing_r( handle, cs ); } Geometry * GEOSGeom_createLineString(CoordinateSequence *cs) { return GEOSGeom_createLineString_r( handle, cs ); } Geometry * GEOSGeom_createPolygon(Geometry *shell, Geometry **holes, unsigned int nholes) { return GEOSGeom_createPolygon_r( handle, shell, holes, nholes ); } Geometry * GEOSGeom_clone(const Geometry *g) { return GEOSGeom_clone_r( handle, g ); } int GEOSGeom_getDimensions(const Geometry *g) { return GEOSGeom_getDimensions_r( handle, g ); } int GEOSGeom_getCoordinateDimension(const Geometry *g) { return GEOSGeom_getCoordinateDimension_r( handle, g ); } Geometry * GEOSSimplify(const Geometry *g, double tolerance) { return GEOSSimplify_r( handle, g, tolerance ); } Geometry * GEOSTopologyPreserveSimplify(const Geometry *g, double tolerance) { return GEOSTopologyPreserveSimplify_r( handle, g, tolerance ); } /* WKT Reader */ WKTReader * GEOSWKTReader_create() { return GEOSWKTReader_create_r( handle ); } void GEOSWKTReader_destroy(WKTReader *reader) { GEOSWKTReader_destroy_r( handle, reader ); } Geometry* GEOSWKTReader_read(WKTReader *reader, const char *wkt) { return GEOSWKTReader_read_r( handle, reader, wkt ); } /* WKT Writer */ WKTWriter * GEOSWKTWriter_create() { return GEOSWKTWriter_create_r( handle ); } void GEOSWKTWriter_destroy(WKTWriter *Writer) { GEOSWKTWriter_destroy_r( handle, Writer ); } char* GEOSWKTWriter_write(WKTWriter *writer, const Geometry *geom) { return GEOSWKTWriter_write_r( handle, writer, geom ); } void GEOSWKTWriter_setTrim(WKTWriter *writer, char trim) { GEOSWKTWriter_setTrim_r(handle, writer, trim); } void GEOSWKTWriter_setRoundingPrecision(WKTWriter *writer, int precision) { return GEOSWKTWriter_setRoundingPrecision_r(handle, writer, precision); } void GEOSWKTWriter_setOutputDimension(WKTWriter *writer, int dim) { GEOSWKTWriter_setOutputDimension_r(handle, writer, dim); } int GEOSWKTWriter_getOutputDimension(WKTWriter *writer) { return GEOSWKTWriter_getOutputDimension_r(handle, writer); } void GEOSWKTWriter_setOld3D(WKTWriter *writer, int useOld3D) { GEOSWKTWriter_setOld3D_r(handle, writer, useOld3D); } /* WKB Reader */ WKBReader * GEOSWKBReader_create() { return GEOSWKBReader_create_r( handle ); } void GEOSWKBReader_destroy(WKBReader *reader) { GEOSWKBReader_destroy_r( handle, reader ); } Geometry* GEOSWKBReader_read(WKBReader *reader, const unsigned char *wkb, size_t size) { return GEOSWKBReader_read_r( handle, reader, wkb, size ); } Geometry* GEOSWKBReader_readHEX(WKBReader *reader, const unsigned char *hex, size_t size) { return GEOSWKBReader_readHEX_r( handle, reader, hex, size ); } /* WKB Writer */ WKBWriter * GEOSWKBWriter_create() { return GEOSWKBWriter_create_r( handle ); } void GEOSWKBWriter_destroy(WKBWriter *Writer) { GEOSWKBWriter_destroy_r( handle, Writer ); } /* The caller owns the result */ unsigned char* GEOSWKBWriter_write(WKBWriter *writer, const Geometry *geom, size_t *size) { return GEOSWKBWriter_write_r( handle, writer, geom, size ); } /* The caller owns the result */ unsigned char* GEOSWKBWriter_writeHEX(WKBWriter *writer, const Geometry *geom, size_t *size) { return GEOSWKBWriter_writeHEX_r( handle, writer, geom, size ); } int GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer) { return GEOSWKBWriter_getOutputDimension_r( handle, writer ); } void GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension) { GEOSWKBWriter_setOutputDimension_r( handle, writer, newDimension ); } int GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer) { return GEOSWKBWriter_getByteOrder_r( handle, writer ); } void GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int newByteOrder) { GEOSWKBWriter_setByteOrder_r( handle, writer, newByteOrder ); } char GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer) { return GEOSWKBWriter_getIncludeSRID_r( handle, writer ); } void GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char newIncludeSRID) { GEOSWKBWriter_setIncludeSRID_r( handle, writer, newIncludeSRID ); } //----------------------------------------------------------------- // Prepared Geometry //----------------------------------------------------------------- const geos::geom::prep::PreparedGeometry* GEOSPrepare(const Geometry *g) { return GEOSPrepare_r( handle, g ); } void GEOSPreparedGeom_destroy(const geos::geom::prep::PreparedGeometry *a) { GEOSPreparedGeom_destroy_r( handle, a ); } char GEOSPreparedContains(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedContains_r( handle, pg1, g2 ); } char GEOSPreparedContainsProperly(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedContainsProperly_r( handle, pg1, g2 ); } char GEOSPreparedCoveredBy(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedCoveredBy_r( handle, pg1, g2 ); } char GEOSPreparedCovers(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedCovers_r( handle, pg1, g2 ); } char GEOSPreparedCrosses(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedCrosses_r( handle, pg1, g2 ); } char GEOSPreparedDisjoint(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedDisjoint_r( handle, pg1, g2 ); } char GEOSPreparedIntersects(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedIntersects_r( handle, pg1, g2 ); } char GEOSPreparedOverlaps(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedOverlaps_r( handle, pg1, g2 ); } char GEOSPreparedTouches(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedTouches_r( handle, pg1, g2 ); } char GEOSPreparedWithin(const geos::geom::prep::PreparedGeometry *pg1, const Geometry *g2) { return GEOSPreparedWithin_r( handle, pg1, g2 ); } STRtree * GEOSSTRtree_create (size_t nodeCapacity) { return GEOSSTRtree_create_r( handle, nodeCapacity ); } void GEOSSTRtree_insert (geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, void *item) { GEOSSTRtree_insert_r( handle, tree, g, item ); } void GEOSSTRtree_query (geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, GEOSQueryCallback cb, void *userdata) { GEOSSTRtree_query_r( handle, tree, g, cb, userdata ); } void GEOSSTRtree_iterate(geos::index::strtree::STRtree *tree, GEOSQueryCallback callback, void *userdata) { GEOSSTRtree_iterate_r( handle, tree, callback, userdata ); } char GEOSSTRtree_remove (geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, void *item) { return GEOSSTRtree_remove_r( handle, tree, g, item ); } void GEOSSTRtree_destroy (geos::index::strtree::STRtree *tree) { GEOSSTRtree_destroy_r( handle, tree ); } double GEOSProject (const geos::geom::Geometry *g, const geos::geom::Geometry *p) { return GEOSProject_r (handle, g, p); } geos::geom::Geometry * GEOSInterpolate (const geos::geom::Geometry *g, double d) { return GEOSInterpolate_r(handle, g, d); } double GEOSProjectNormalized (const geos::geom::Geometry *g, const geos::geom::Geometry *p) { return GEOSProjectNormalized_r (handle, g, p); } geos::geom::Geometry * GEOSInterpolateNormalized (const geos::geom::Geometry *g, double d) { return GEOSInterpolateNormalized_r(handle, g, d); } geos::geom::Geometry * GEOSGeom_extractUniquePoints (const geos::geom::Geometry *g) { return GEOSGeom_extractUniquePoints_r(handle, g); } geos::geom::Geometry * GEOSGeom_createEmptyCollection(int type) { return GEOSGeom_createEmptyCollection_r(handle, type); } geos::geom::Geometry * GEOSGeom_createEmptyPoint() { return GEOSGeom_createEmptyPoint_r(handle); } geos::geom::Geometry * GEOSGeom_createEmptyLineString() { return GEOSGeom_createEmptyLineString_r(handle); } geos::geom::Geometry * GEOSGeom_createEmptyPolygon() { return GEOSGeom_createEmptyPolygon_r(handle); } int GEOSOrientationIndex(double Ax, double Ay, double Bx, double By, double Px, double Py) { return GEOSOrientationIndex_r(handle, Ax, Ay, Bx, By, Px, Py); } GEOSGeometry * GEOSSharedPaths(const GEOSGeometry* g1, const GEOSGeometry* g2) { return GEOSSharedPaths_r(handle, g1, g2); } GEOSGeometry * GEOSSnap(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance) { return GEOSSnap_r(handle, g1, g2, tolerance); } GEOSBufferParams* GEOSBufferParams_create() { return GEOSBufferParams_create_r(handle); } void GEOSBufferParams_destroy(GEOSBufferParams* p) { return GEOSBufferParams_destroy_r(handle, p); } int GEOSBufferParams_setEndCapStyle(GEOSBufferParams* p, int style) { return GEOSBufferParams_setEndCapStyle_r(handle, p, style); } int GEOSBufferParams_setJoinStyle(GEOSBufferParams* p, int joinStyle) { return GEOSBufferParams_setJoinStyle_r(handle, p, joinStyle); } int GEOSBufferParams_setMitreLimit(GEOSBufferParams* p, double l) { return GEOSBufferParams_setMitreLimit_r(handle, p, l); } int GEOSBufferParams_setQuadrantSegments(GEOSBufferParams* p, int joinStyle) { return GEOSBufferParams_setQuadrantSegments_r(handle, p, joinStyle); } int GEOSBufferParams_setSingleSided(GEOSBufferParams* p, int singleSided) { return GEOSBufferParams_setSingleSided_r(handle, p, singleSided); } Geometry* GEOSBufferWithParams(const Geometry* g, const GEOSBufferParams* p, double w) { return GEOSBufferWithParams_r(handle, g, p, w); } Geometry * GEOSDelaunayTriangulation(const Geometry *g, double tolerance, int onlyEdges) { return GEOSDelaunayTriangulation_r(handle, g, tolerance, onlyEdges); } } /* extern "C" */ geos-3.4.2/capi/geos_c.h0000644000175000017500000017501312206417201014623 0ustar frankiefrankie/************************************************************************ * * * C-Wrapper for GEOS library * * Copyright (C) 2010 2011 Sandro Santilli * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * *********************************************************************** * * GENERAL NOTES: * * - Remember to call initGEOS() before any use of this library's * functions, and call finishGEOS() when done. * * - Currently you have to explicitly GEOSGeom_destroy() all * GEOSGeom objects to avoid memory leaks, and to GEOSFree() * all returned char * (unless const). * * - Functions ending with _r are thread safe; see details in RFC 3 * http://trac.osgeo.org/geos/wiki/RFC3 * ***********************************************************************/ #ifndef GEOS_C_H_INCLUDED #define GEOS_C_H_INCLUDED #ifndef __cplusplus # include /* for size_t definition */ #else # include using std::size_t; #endif #ifdef __cplusplus extern "C" { #endif /************************************************************************ * * Version * ***********************************************************************/ /* * Following 'ifdef' hack fixes problem with generating geos_c.h on Windows, * when building with Visual C++ compiler. * */ #if defined(_MSC_VER) #include #define GEOS_CAPI_VERSION_MAJOR 1 #define GEOS_CAPI_VERSION_MINOR 8 #define GEOS_CAPI_VERSION_PATCH 2 #define GEOS_CAPI_VERSION "3.4.2-CAPI-1.8.2" #else #ifndef GEOS_VERSION_MAJOR #define GEOS_VERSION_MAJOR 3 #endif #ifndef GEOS_VERSION_MINOR #define GEOS_VERSION_MINOR 4 #endif #ifndef GEOS_VERSION_PATCH #define GEOS_VERSION_PATCH 2 #endif #ifndef GEOS_VERSION #define GEOS_VERSION "3.4.2" #endif #ifndef GEOS_JTS_PORT #define GEOS_JTS_PORT "1.12.0" #endif #define GEOS_CAPI_VERSION_MAJOR 1 #define GEOS_CAPI_VERSION_MINOR 8 #define GEOS_CAPI_VERSION_PATCH 2 #define GEOS_CAPI_VERSION "3.4.2-CAPI-1.8.2" #endif #define GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_VERSION_MAJOR #define GEOS_CAPI_LAST_INTERFACE (GEOS_CAPI_VERSION_MAJOR+GEOS_CAPI_VERSION_MINOR) /************************************************************************ * * (Abstract) type definitions * ************************************************************************/ typedef void (*GEOSMessageHandler)(const char *fmt, ...); /* When we're included by geos_c.cpp, those are #defined to the original * JTS definitions via preprocessor. We don't touch them to allow the * compiler to cross-check the declarations. However, for all "normal" * C-API users, we need to define them as "opaque" struct pointers, as * those clients don't have access to the original C++ headers, by design. */ #ifndef GEOSGeometry typedef struct GEOSGeom_t GEOSGeometry; typedef struct GEOSPrepGeom_t GEOSPreparedGeometry; typedef struct GEOSCoordSeq_t GEOSCoordSequence; typedef struct GEOSSTRtree_t GEOSSTRtree; typedef struct GEOSBufParams_t GEOSBufferParams; #endif /* Those are compatibility definitions for source compatibility * with GEOS 2.X clients relying on that type. */ typedef GEOSGeometry* GEOSGeom; typedef GEOSCoordSequence* GEOSCoordSeq; /* Supported geometry types * This was renamed from GEOSGeomTypeId in GEOS 2.2.X, which might * break compatibility, this issue is still under investigation. */ enum GEOSGeomTypes { GEOS_POINT, GEOS_LINESTRING, GEOS_LINEARRING, GEOS_POLYGON, GEOS_MULTIPOINT, GEOS_MULTILINESTRING, GEOS_MULTIPOLYGON, GEOS_GEOMETRYCOLLECTION }; /* Byte oders exposed via the c api */ enum GEOSByteOrders { GEOS_WKB_XDR = 0, /* Big Endian */ GEOS_WKB_NDR = 1 /* Little Endian */ }; typedef struct GEOSContextHandle_HS *GEOSContextHandle_t; typedef void (*GEOSQueryCallback)(void *item, void *userdata); /************************************************************************ * * Initialization, cleanup, version * ***********************************************************************/ #include extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function); extern void GEOS_DLL finishGEOS(void); /* * Register an interruption checking callback * * The callback will be invoked _before_ checking for * interruption, so can be used to request it. */ typedef void (GEOSInterruptCallback)(); extern GEOSInterruptCallback GEOS_DLL *GEOS_interruptRegisterCallback(GEOSInterruptCallback* cb); /* Request safe interruption of operations */ extern void GEOS_DLL GEOS_interruptRequest(); /* Cancel a pending interruption request */ extern void GEOS_DLL GEOS_interruptCancel(); extern GEOSContextHandle_t GEOS_DLL initGEOS_r( GEOSMessageHandler notice_function, GEOSMessageHandler error_function); extern void GEOS_DLL finishGEOS_r(GEOSContextHandle_t handle); extern GEOSMessageHandler GEOS_DLL GEOSContext_setNoticeHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler nf); extern GEOSMessageHandler GEOS_DLL GEOSContext_setErrorHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler ef); extern const char GEOS_DLL *GEOSversion(); /************************************************************************ * * NOTE - These functions are DEPRECATED. Please use the new Reader and * writer APIS! * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT(const char *wkt); extern char GEOS_DLL *GEOSGeomToWKT(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT_r(GEOSContextHandle_t handle, const char *wkt); extern char GEOS_DLL *GEOSGeomToWKT_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Specify whether output WKB should be 2d or 3d. * Return previously set number of dimensions. */ extern int GEOS_DLL GEOS_getWKBOutputDims(); extern int GEOS_DLL GEOS_setWKBOutputDims(int newDims); extern int GEOS_DLL GEOS_getWKBOutputDims_r(GEOSContextHandle_t handle); extern int GEOS_DLL GEOS_setWKBOutputDims_r(GEOSContextHandle_t handle, int newDims); /* * Specify whether the WKB byte order is big or little endian. * The return value is the previous byte order. */ extern int GEOS_DLL GEOS_getWKBByteOrder(); extern int GEOS_DLL GEOS_setWKBByteOrder(int byteOrder); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf(const unsigned char *wkb, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf(const GEOSGeometry* g, size_t *size); extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf(const unsigned char *hex, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf(const GEOSGeometry* g, size_t *size); extern int GEOS_DLL GEOS_getWKBByteOrder_r(GEOSContextHandle_t handle); extern int GEOS_DLL GEOS_setWKBByteOrder_r(GEOSContextHandle_t handle, int byteOrder); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf_r(GEOSContextHandle_t handle, const unsigned char *wkb, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf_r(GEOSContextHandle_t handle, const GEOSGeometry* g, size_t *size); extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf_r(GEOSContextHandle_t handle, const unsigned char *hex, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf_r(GEOSContextHandle_t handle, const GEOSGeometry* g, size_t *size); /************************************************************************ * * Coordinate Sequence functions * ***********************************************************************/ /* * Create a Coordinate sequence with ``size'' coordinates * of ``dims'' dimensions. * Return NULL on exception. */ extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create(unsigned int size, unsigned int dims); extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create_r( GEOSContextHandle_t handle, unsigned int size, unsigned int dims); /* * Clone a Coordinate Sequence. * Return NULL on exception. */ extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone(const GEOSCoordSequence* s); extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone_r( GEOSContextHandle_t handle, const GEOSCoordSequence* s); /* * Destroy a Coordinate Sequence. */ extern void GEOS_DLL GEOSCoordSeq_destroy(GEOSCoordSequence* s); extern void GEOS_DLL GEOSCoordSeq_destroy_r(GEOSContextHandle_t handle, GEOSCoordSequence* s); /* * Set ordinate values in a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_setX(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setY(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setZ(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setOrdinate(GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double val); extern int GEOS_DLL GEOSCoordSeq_setX_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setY_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setZ_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setOrdinate_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double val); /* * Get ordinate values from a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_getX(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getY(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getZ(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getOrdinate(const GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double *val); extern int GEOS_DLL GEOSCoordSeq_getX_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getY_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getZ_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getOrdinate_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double *val); /* * Get size and dimensions info from a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_getSize(const GEOSCoordSequence* s, unsigned int *size); extern int GEOS_DLL GEOSCoordSeq_getDimensions(const GEOSCoordSequence* s, unsigned int *dims); extern int GEOS_DLL GEOSCoordSeq_getSize_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int *size); extern int GEOS_DLL GEOSCoordSeq_getDimensions_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int *dims); /************************************************************************ * * Linear referencing functions -- there are more, but these are * probably sufficient for most purposes * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ /* Return distance of point 'p' projected on 'g' from origin * of 'g'. Geometry 'g' must be a lineal geometry */ extern double GEOS_DLL GEOSProject(const GEOSGeometry *g, const GEOSGeometry* p); extern double GEOS_DLL GEOSProject_r(GEOSContextHandle_t handle, const GEOSGeometry *g, const GEOSGeometry *p); /* Return closest point to given distance within geometry * Geometry must be a LineString */ extern GEOSGeometry GEOS_DLL *GEOSInterpolate(const GEOSGeometry *g, double d); extern GEOSGeometry GEOS_DLL *GEOSInterpolate_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double d); extern double GEOS_DLL GEOSProjectNormalized(const GEOSGeometry *g, const GEOSGeometry* p); extern double GEOS_DLL GEOSProjectNormalized_r(GEOSContextHandle_t handle, const GEOSGeometry *g, const GEOSGeometry *p); extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized(const GEOSGeometry *g, double d); extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized_r( GEOSContextHandle_t handle, const GEOSGeometry *g, double d); /************************************************************************ * * Buffer related functions * ***********************************************************************/ /* @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSBuffer(const GEOSGeometry* g, double width, int quadsegs); extern GEOSGeometry GEOS_DLL *GEOSBuffer_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs); enum GEOSBufCapStyles { GEOSBUF_CAP_ROUND=1, GEOSBUF_CAP_FLAT=2, GEOSBUF_CAP_SQUARE=3 }; enum GEOSBufJoinStyles { GEOSBUF_JOIN_ROUND=1, GEOSBUF_JOIN_MITRE=2, GEOSBUF_JOIN_BEVEL=3 }; /* @return 0 on exception */ extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create(); extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSBufferParams_destroy(GEOSBufferParams* parms); extern void GEOS_DLL GEOSBufferParams_destroy_r( GEOSContextHandle_t handle, GEOSBufferParams* parms); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setEndCapStyle( GEOSBufferParams* p, int style); extern int GEOS_DLL GEOSBufferParams_setEndCapStyle_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int style); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setJoinStyle( GEOSBufferParams* p, int joinStyle); extern int GEOS_DLL GEOSBufferParams_setJoinStyle_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int joinStyle); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setMitreLimit( GEOSBufferParams* p, double mitreLimit); extern int GEOS_DLL GEOSBufferParams_setMitreLimit_r( GEOSContextHandle_t handle, GEOSBufferParams* p, double mitreLimit); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments( GEOSBufferParams* p, int quadSegs); extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int quadSegs); /* @param singleSided: 1 for single sided, 0 otherwise */ /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setSingleSided( GEOSBufferParams* p, int singleSided); extern int GEOS_DLL GEOSBufferParams_setSingleSided_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int singleSided); /* @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams( const GEOSGeometry* g, const GEOSBufferParams* p, double width); extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams_r( GEOSContextHandle_t handle, const GEOSGeometry* g, const GEOSBufferParams* p, double width); /* These functions return NULL on exception. */ extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle(const GEOSGeometry* g, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit); extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit); /* These functions return NULL on exception. Only LINESTRINGs are accepted. */ /* @deprecated in 3.3.0: use GEOSOffsetCurve instead */ extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer(const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide); extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer_r( GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide); /* * Only LINESTRINGs are accepted. * @param width : offset distance. * negative for right side offset. * positive for left side offset. * @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve(const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit); extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit); /************************************************************************ * * Geometry Constructors. * GEOSCoordSequence* arguments will become ownership of the returned object. * All functions return NULL on exception. * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint_r( GEOSContextHandle_t handle); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString_r( GEOSContextHandle_t handle); /* * Second argument is an array of GEOSGeometry* objects. * The caller remains owner of the array, but pointed-to * objects become ownership of the returned GEOSGeometry. */ extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon(GEOSGeometry* shell, GEOSGeometry** holes, unsigned int nholes); extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection(int type, GEOSGeometry* *geoms, unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection(int type); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon_r( GEOSContextHandle_t handle); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon_r( GEOSContextHandle_t handle, GEOSGeometry* shell, GEOSGeometry** holes, unsigned int nholes); extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection_r( GEOSContextHandle_t handle, int type, GEOSGeometry* *geoms, unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection_r( GEOSContextHandle_t handle, int type); extern GEOSGeometry GEOS_DLL *GEOSGeom_clone(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeom_clone_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /************************************************************************ * * Memory management * ***********************************************************************/ extern void GEOS_DLL GEOSGeom_destroy(GEOSGeometry* g); extern void GEOS_DLL GEOSGeom_destroy_r(GEOSContextHandle_t handle, GEOSGeometry* g); /************************************************************************ * * Topology operations - return NULL on exception. * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSEnvelope(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSIntersection(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSConvexHull(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSDifference(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSymDifference(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSBoundary(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnion(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion(const GEOSGeometry* g); /* @deprecated in 3.3.0: use GEOSUnaryUnion instead */ extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGetCentroid(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSNode(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSEnvelope_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSIntersection_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSConvexHull_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSDifference_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSymDifference_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSBoundary_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnion_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGetCentroid_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSNode_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * all arguments remain ownership of the caller * (both Geometries and pointers) */ extern GEOSGeometry GEOS_DLL *GEOSPolygonize(const GEOSGeometry * const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges(const GEOSGeometry * const geoms[], unsigned int ngeoms); /* * Polygonizes a set of Geometries which contain linework that * represents the edges of a planar graph. * * Any dimension of Geometry is handled - the constituent linework * is extracted to form the edges. * * The edges must be correctly noded; that is, they must only meet * at their endpoints. * The Polygonizer will still run on incorrectly noded input * but will not form polygons from incorrectly noded edges. * * The Polygonizer reports the follow kinds of errors: * * - Dangles - edges which have one or both ends which are * not incident on another edge endpoint * - Cut Edges - edges which are connected at both ends but * which do not form part of polygon * - Invalid Ring Lines - edges which form rings which are invalid * (e.g. the component lines contain a self-intersection) * * Errors are reported to output parameters "cuts", "dangles" and * "invalid" (if not-null). Formed polygons are returned as a * collection. NULL is returned on exception. All returned * geometries must be destroyed by caller. * */ extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full(const GEOSGeometry* input, GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid); extern GEOSGeometry GEOS_DLL *GEOSLineMerge(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSSimplify(const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify(const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSPolygonize_r(GEOSContextHandle_t handle, const GEOSGeometry *const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges_r( GEOSContextHandle_t handle, const GEOSGeometry * const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full_r(GEOSContextHandle_t handle, const GEOSGeometry* input, GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalidRings); extern GEOSGeometry GEOS_DLL *GEOSLineMerge_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSSimplify_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify_r( GEOSContextHandle_t handle, const GEOSGeometry* g, double tolerance); /* * Return all distinct vertices of input geometry as a MULTIPOINT. * Note that only 2 dimensions of the vertices are considered when * testing for equality. */ extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints( const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Find paths shared between the two given lineal geometries. * * Returns a GEOMETRYCOLLECTION having two elements: * - first element is a MULTILINESTRING containing shared paths * having the _same_ direction on both inputs * - second element is a MULTILINESTRING containing shared paths * having the _opposite_ direction on the two inputs * * Returns NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSSharedPaths(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSharedPaths_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /* * Snap first geometry on to second with given tolerance * Returns a newly allocated geometry, or NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSSnap(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSSnap_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); /* * Return a Delaunay triangulation of the vertex of the given geometry * * @param g the input geometry whose vertex will be used as "sites" * @param tolerance optional snapping tolerance to use for improved robustness * @param onlyEdges if non-zero will return a MULTILINESTRING, otherwise it will * return a GEOMETRYCOLLECTION containing triangular POLYGONs. * * @return a newly allocated geometry, or NULL on exception */ extern GEOSGeometry GEOS_DLL * GEOSDelaunayTriangulation( const GEOSGeometry *g, double tolerance, int onlyEdges); extern GEOSGeometry GEOS_DLL * GEOSDelaunayTriangulation_r( GEOSContextHandle_t handle, const GEOSGeometry *g, double tolerance, int onlyEdges); /************************************************************************ * * Binary predicates - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ extern char GEOS_DLL GEOSDisjoint(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSTouches(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSIntersects(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCrosses(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSWithin(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSContains(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSOverlaps(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEquals(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEqualsExact(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern char GEOS_DLL GEOSCovers(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCoveredBy(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSDisjoint_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSTouches_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSIntersects_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCrosses_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSWithin_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSContains_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSOverlaps_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEquals_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEqualsExact_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern char GEOS_DLL GEOSCovers_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCoveredBy_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /************************************************************************ * * Prepared Geometry Binary predicates - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare(const GEOSGeometry* g); extern void GEOS_DLL GEOSPreparedGeom_destroy(const GEOSPreparedGeometry* g); extern char GEOS_DLL GEOSPreparedContains(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedContainsProperly(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCoveredBy(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCovers(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCrosses(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedDisjoint(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedIntersects(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedOverlaps(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedTouches(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedWithin(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); /* * GEOSGeometry ownership is retained by caller */ extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare_r( GEOSContextHandle_t handle, const GEOSGeometry* g); extern void GEOS_DLL GEOSPreparedGeom_destroy_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* g); extern char GEOS_DLL GEOSPreparedContains_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedContainsProperly_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCoveredBy_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCovers_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCrosses_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedDisjoint_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedIntersects_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedOverlaps_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedTouches_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedWithin_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); /************************************************************************ * * STRtree functions * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create(size_t nodeCapacity); extern void GEOS_DLL GEOSSTRtree_insert(GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_query(GEOSSTRtree *tree, const GEOSGeometry *g, GEOSQueryCallback callback, void *userdata); extern void GEOS_DLL GEOSSTRtree_iterate(GEOSSTRtree *tree, GEOSQueryCallback callback, void *userdata); extern char GEOS_DLL GEOSSTRtree_remove(GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_destroy(GEOSSTRtree *tree); extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create_r( GEOSContextHandle_t handle, size_t nodeCapacity); extern void GEOS_DLL GEOSSTRtree_insert_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_query_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, GEOSQueryCallback callback, void *userdata); extern void GEOS_DLL GEOSSTRtree_iterate_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, GEOSQueryCallback callback, void *userdata); extern char GEOS_DLL GEOSSTRtree_remove_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_destroy_r(GEOSContextHandle_t handle, GEOSSTRtree *tree); /************************************************************************ * * Unary predicate - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ extern char GEOS_DLL GEOSisEmpty(const GEOSGeometry* g); extern char GEOS_DLL GEOSisSimple(const GEOSGeometry* g); extern char GEOS_DLL GEOSisRing(const GEOSGeometry* g); extern char GEOS_DLL GEOSHasZ(const GEOSGeometry* g); extern char GEOS_DLL GEOSisClosed(const GEOSGeometry *g); extern char GEOS_DLL GEOSisEmpty_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisSimple_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisRing_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSHasZ_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisClosed_r(GEOSContextHandle_t handle, const GEOSGeometry *g); /************************************************************************ * * Dimensionally Extended 9 Intersection Model related * ***********************************************************************/ /* These are for use with GEOSRelateBoundaryNodeRule (flags param) */ enum GEOSRelateBoundaryNodeRules { /* MOD2 and OGC are the same rule, and is the default * used by GEOSRelatePattern */ GEOSRELATE_BNR_MOD2=1, GEOSRELATE_BNR_OGC=1, GEOSRELATE_BNR_ENDPOINT=2, GEOSRELATE_BNR_MULTIVALENT_ENDPOINT=3, GEOSRELATE_BNR_MONOVALENT_ENDPOINT=4 }; /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSRelatePattern(const GEOSGeometry* g1, const GEOSGeometry* g2, const char *pat); extern char GEOS_DLL GEOSRelatePattern_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, const char *pat); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSRelate(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL *GEOSRelate_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSRelatePatternMatch(const char *mat, const char *pat); extern char GEOS_DLL GEOSRelatePatternMatch_r(GEOSContextHandle_t handle, const char *mat, const char *pat); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSRelateBoundaryNodeRule(const GEOSGeometry* g1, const GEOSGeometry* g2, int bnr); extern char GEOS_DLL *GEOSRelateBoundaryNodeRule_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, int bnr); /************************************************************************ * * Validity checking * ***********************************************************************/ /* These are for use with GEOSisValidDetail (flags param) */ enum GEOSValidFlags { GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE=1 }; /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSisValid(const GEOSGeometry* g); extern char GEOS_DLL GEOSisValid_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSisValidReason(const GEOSGeometry *g); extern char GEOS_DLL *GEOSisValidReason_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Caller has the responsibility to destroy 'reason' (GEOSFree) * and 'location' (GEOSGeom_destroy) params * return 2 on exception, 1 when valid, 0 when invalid */ extern char GEOS_DLL GEOSisValidDetail(const GEOSGeometry* g, int flags, char** reason, GEOSGeometry** location); extern char GEOS_DLL GEOSisValidDetail_r(GEOSContextHandle_t handle, const GEOSGeometry* g, int flags, char** reason, GEOSGeometry** location); /************************************************************************ * * Geometry info * ***********************************************************************/ /* Return NULL on exception, result must be freed by caller. */ extern char GEOS_DLL *GEOSGeomType(const GEOSGeometry* g); extern char GEOS_DLL *GEOSGeomType_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGeomTypeId(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeomTypeId_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return 0 on exception */ extern int GEOS_DLL GEOSGetSRID(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetSRID_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern void GEOS_DLL GEOSSetSRID(GEOSGeometry* g, int SRID); extern void GEOS_DLL GEOSSetSRID_r(GEOSContextHandle_t handle, GEOSGeometry* g, int SRID); /* May be called on all geometries in GEOS 3.x, returns -1 on error and 1 * for non-multi geometries. Older GEOS versions only accept * GeometryCollections or Multi* geometries here, and are likely to crash * when fed simple geometries, so beware if you need compatibility with * old GEOS versions. */ extern int GEOS_DLL GEOSGetNumGeometries(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumGeometries_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. * Up to GEOS 3.2.0 the input geometry must be a Collection, in * later version it doesn't matter (getGeometryN(0) for a single will * return the input). */ extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN(const GEOSGeometry* g, int n); extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN_r( GEOSContextHandle_t handle, const GEOSGeometry* g, int n); /* Return -1 on exception */ extern int GEOS_DLL GEOSNormalize(GEOSGeometry* g); extern int GEOS_DLL GEOSNormalize_r(GEOSContextHandle_t handle, GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGetNumInteriorRings(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumInteriorRings_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception, Geometry must be a LineString. */ extern int GEOS_DLL GEOSGeomGetNumPoints(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeomGetNumPoints_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception, Geometry must be a Point. */ extern int GEOS_DLL GEOSGeomGetX(const GEOSGeometry *g, double *x); extern int GEOS_DLL GEOSGeomGetY(const GEOSGeometry *g, double *y); extern int GEOS_DLL GEOSGeomGetX_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *x); extern int GEOS_DLL GEOSGeomGetY_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *y); /* * Return NULL on exception, Geometry must be a Polygon. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. */ extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN(const GEOSGeometry* g, int n); extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN_r( GEOSContextHandle_t handle, const GEOSGeometry* g, int n); /* * Return NULL on exception, Geometry must be a Polygon. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. */ extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing(const GEOSGeometry* g); extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGetNumCoordinates(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumCoordinates_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Geometry must be a LineString, LinearRing or Point. */ extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq(const GEOSGeometry* g); extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return 0 on exception (or empty geometry) */ extern int GEOS_DLL GEOSGeom_getDimensions(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeom_getDimensions_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return 2 or 3. */ extern int GEOS_DLL GEOSGeom_getCoordinateDimension(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeom_getCoordinateDimension_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Must be LineString and must be freed by called. */ extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN(const GEOSGeometry *g, int n); extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint(const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint(const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN_r(GEOSContextHandle_t handle, const GEOSGeometry *g, int n); extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g); /************************************************************************ * * Misc functions * ***********************************************************************/ /* Return 0 on exception, 1 otherwise */ extern int GEOS_DLL GEOSArea(const GEOSGeometry* g, double *area); extern int GEOS_DLL GEOSLength(const GEOSGeometry* g, double *length); extern int GEOS_DLL GEOSDistance(const GEOSGeometry* g1, const GEOSGeometry* g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistance(const GEOSGeometry *g1, const GEOSGeometry *g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistanceDensify(const GEOSGeometry *g1, const GEOSGeometry *g2, double densifyFrac, double *dist); extern int GEOS_DLL GEOSGeomGetLength(const GEOSGeometry *g, double *length); extern int GEOS_DLL GEOSArea_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double *area); extern int GEOS_DLL GEOSLength_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double *length); extern int GEOS_DLL GEOSDistance_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistance_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, const GEOSGeometry *g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistanceDensify_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, const GEOSGeometry *g2, double densifyFrac, double *dist); extern int GEOS_DLL GEOSGeomGetLength_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *length); /* Return 0 on exception, the closest points of the two geometries otherwise. * The first point comes from g1 geometry and the second point comes from g2. */ extern GEOSCoordSequence GEOS_DLL *GEOSNearestPoints( const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSCoordSequence GEOS_DLL *GEOSNearestPoints_r( GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /************************************************************************ * * Algorithms * ***********************************************************************/ /* Walking from A to B: * return -1 if reaching P takes a counter-clockwise (left) turn * return 1 if reaching P takes a clockwise (right) turn * return 0 if P is collinear with A-B * * On exceptions, return 2. * */ extern int GEOS_DLL GEOSOrientationIndex(double Ax, double Ay, double Bx, double By, double Px, double Py); extern int GEOS_DLL GEOSOrientationIndex_r(GEOSContextHandle_t handle, double Ax, double Ay, double Bx, double By, double Px, double Py); /************************************************************************ * * Reader and Writer APIs * ***********************************************************************/ typedef struct GEOSWKTReader_t GEOSWKTReader; typedef struct GEOSWKTWriter_t GEOSWKTWriter; typedef struct GEOSWKBReader_t GEOSWKBReader; typedef struct GEOSWKBWriter_t GEOSWKBWriter; /* WKT Reader */ extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create(); extern void GEOS_DLL GEOSWKTReader_destroy(GEOSWKTReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read(GEOSWKTReader* reader, const char *wkt); extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKTReader_destroy_r(GEOSContextHandle_t handle, GEOSWKTReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read_r(GEOSContextHandle_t handle, GEOSWKTReader* reader, const char *wkt); /* WKT Writer */ extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create(); extern void GEOS_DLL GEOSWKTWriter_destroy(GEOSWKTWriter* writer); extern char GEOS_DLL *GEOSWKTWriter_write(GEOSWKTWriter* writer, const GEOSGeometry* g); extern void GEOS_DLL GEOSWKTWriter_setTrim(GEOSWKTWriter *writer, char trim); extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision(GEOSWKTWriter *writer, int precision); extern void GEOS_DLL GEOSWKTWriter_setOutputDimension(GEOSWKTWriter *writer, int dim); extern int GEOS_DLL GEOSWKTWriter_getOutputDimension(GEOSWKTWriter *writer); extern void GEOS_DLL GEOSWKTWriter_setOld3D(GEOSWKTWriter *writer, int useOld3D); extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKTWriter_destroy_r(GEOSContextHandle_t handle, GEOSWKTWriter* writer); extern char GEOS_DLL *GEOSWKTWriter_write_r(GEOSContextHandle_t handle, GEOSWKTWriter* writer, const GEOSGeometry* g); extern void GEOS_DLL GEOSWKTWriter_setTrim_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, char trim); extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int precision); extern void GEOS_DLL GEOSWKTWriter_setOutputDimension_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int dim); extern int GEOS_DLL GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer); extern void GEOS_DLL GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int useOld3D); /* WKB Reader */ extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create(); extern void GEOS_DLL GEOSWKBReader_destroy(GEOSWKBReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read(GEOSWKBReader* reader, const unsigned char *wkb, size_t size); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX(GEOSWKBReader* reader, const unsigned char *hex, size_t size); extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKBReader_destroy_r(GEOSContextHandle_t handle, GEOSWKBReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read_r(GEOSContextHandle_t handle, GEOSWKBReader* reader, const unsigned char *wkb, size_t size); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX_r( GEOSContextHandle_t handle, GEOSWKBReader* reader, const unsigned char *hex, size_t size); /* WKB Writer */ extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create(); extern void GEOS_DLL GEOSWKBWriter_destroy(GEOSWKBWriter* writer); extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKBWriter_destroy_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer); /* The caller owns the results for these two methods! */ extern unsigned char GEOS_DLL *GEOSWKBWriter_write(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_write_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); /* * Specify whether output WKB should be 2d or 3d. * Return previously set number of dimensions. */ extern int GEOS_DLL GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension); extern int GEOS_DLL GEOSWKBWriter_getOutputDimension_r( GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setOutputDimension_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, int newDimension); /* * Specify whether the WKB byte order is big or little endian. * The return value is the previous byte order. */ extern int GEOS_DLL GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int byteOrder); extern int GEOS_DLL GEOSWKBWriter_getByteOrder_r(GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setByteOrder_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer, int byteOrder); /* * Specify whether SRID values should be output. */ extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char writeSRID); extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID_r(GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer, const char writeSRID); /* * Free buffers returned by stuff like GEOSWKBWriter_write(), * GEOSWKBWriter_writeHEX() and GEOSWKTWriter_write(). */ extern void GEOS_DLL GEOSFree(void *buffer); extern void GEOS_DLL GEOSFree_r(GEOSContextHandle_t handle, void *buffer); #ifdef __cplusplus } // extern "C" #endif #endif /* #ifndef GEOS_C_H_INCLUDED */ geos-3.4.2/capi/geos_c.h.in0000644000175000017500000017520312206417150015234 0ustar frankiefrankie/************************************************************************ * * * C-Wrapper for GEOS library * * Copyright (C) 2010 2011 Sandro Santilli * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * *********************************************************************** * * GENERAL NOTES: * * - Remember to call initGEOS() before any use of this library's * functions, and call finishGEOS() when done. * * - Currently you have to explicitly GEOSGeom_destroy() all * GEOSGeom objects to avoid memory leaks, and to GEOSFree() * all returned char * (unless const). * * - Functions ending with _r are thread safe; see details in RFC 3 * http://trac.osgeo.org/geos/wiki/RFC3 * ***********************************************************************/ #ifndef GEOS_C_H_INCLUDED #define GEOS_C_H_INCLUDED #ifndef __cplusplus # include /* for size_t definition */ #else # include using std::size_t; #endif #ifdef __cplusplus extern "C" { #endif /************************************************************************ * * Version * ***********************************************************************/ /* * Following 'ifdef' hack fixes problem with generating geos_c.h on Windows, * when building with Visual C++ compiler. * */ #if defined(_MSC_VER) #include #define GEOS_CAPI_VERSION_MAJOR 1 #define GEOS_CAPI_VERSION_MINOR 8 #define GEOS_CAPI_VERSION_PATCH 2 #define GEOS_CAPI_VERSION "3.4.2-CAPI-1.8.2" #else #ifndef GEOS_VERSION_MAJOR #define GEOS_VERSION_MAJOR @VERSION_MAJOR@ #endif #ifndef GEOS_VERSION_MINOR #define GEOS_VERSION_MINOR @VERSION_MINOR@ #endif #ifndef GEOS_VERSION_PATCH #define GEOS_VERSION_PATCH @VERSION_PATCH@ #endif #ifndef GEOS_VERSION #define GEOS_VERSION "@VERSION@" #endif #ifndef GEOS_JTS_PORT #define GEOS_JTS_PORT "@JTS_PORT@" #endif #define GEOS_CAPI_VERSION_MAJOR @CAPI_VERSION_MAJOR@ #define GEOS_CAPI_VERSION_MINOR @CAPI_VERSION_MINOR@ #define GEOS_CAPI_VERSION_PATCH @CAPI_VERSION_PATCH@ #define GEOS_CAPI_VERSION "@VERSION@-CAPI-@CAPI_VERSION@" #endif #define GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_VERSION_MAJOR #define GEOS_CAPI_LAST_INTERFACE (GEOS_CAPI_VERSION_MAJOR+GEOS_CAPI_VERSION_MINOR) /************************************************************************ * * (Abstract) type definitions * ************************************************************************/ typedef void (*GEOSMessageHandler)(const char *fmt, ...); /* When we're included by geos_c.cpp, those are #defined to the original * JTS definitions via preprocessor. We don't touch them to allow the * compiler to cross-check the declarations. However, for all "normal" * C-API users, we need to define them as "opaque" struct pointers, as * those clients don't have access to the original C++ headers, by design. */ #ifndef GEOSGeometry typedef struct GEOSGeom_t GEOSGeometry; typedef struct GEOSPrepGeom_t GEOSPreparedGeometry; typedef struct GEOSCoordSeq_t GEOSCoordSequence; typedef struct GEOSSTRtree_t GEOSSTRtree; typedef struct GEOSBufParams_t GEOSBufferParams; #endif /* Those are compatibility definitions for source compatibility * with GEOS 2.X clients relying on that type. */ typedef GEOSGeometry* GEOSGeom; typedef GEOSCoordSequence* GEOSCoordSeq; /* Supported geometry types * This was renamed from GEOSGeomTypeId in GEOS 2.2.X, which might * break compatibility, this issue is still under investigation. */ enum GEOSGeomTypes { GEOS_POINT, GEOS_LINESTRING, GEOS_LINEARRING, GEOS_POLYGON, GEOS_MULTIPOINT, GEOS_MULTILINESTRING, GEOS_MULTIPOLYGON, GEOS_GEOMETRYCOLLECTION }; /* Byte oders exposed via the c api */ enum GEOSByteOrders { GEOS_WKB_XDR = 0, /* Big Endian */ GEOS_WKB_NDR = 1 /* Little Endian */ }; typedef struct GEOSContextHandle_HS *GEOSContextHandle_t; typedef void (*GEOSQueryCallback)(void *item, void *userdata); /************************************************************************ * * Initialization, cleanup, version * ***********************************************************************/ #include extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function); extern void GEOS_DLL finishGEOS(void); /* * Register an interruption checking callback * * The callback will be invoked _before_ checking for * interruption, so can be used to request it. */ typedef void (GEOSInterruptCallback)(); extern GEOSInterruptCallback GEOS_DLL *GEOS_interruptRegisterCallback(GEOSInterruptCallback* cb); /* Request safe interruption of operations */ extern void GEOS_DLL GEOS_interruptRequest(); /* Cancel a pending interruption request */ extern void GEOS_DLL GEOS_interruptCancel(); extern GEOSContextHandle_t GEOS_DLL initGEOS_r( GEOSMessageHandler notice_function, GEOSMessageHandler error_function); extern void GEOS_DLL finishGEOS_r(GEOSContextHandle_t handle); extern GEOSMessageHandler GEOS_DLL GEOSContext_setNoticeHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler nf); extern GEOSMessageHandler GEOS_DLL GEOSContext_setErrorHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler ef); extern const char GEOS_DLL *GEOSversion(); /************************************************************************ * * NOTE - These functions are DEPRECATED. Please use the new Reader and * writer APIS! * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT(const char *wkt); extern char GEOS_DLL *GEOSGeomToWKT(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT_r(GEOSContextHandle_t handle, const char *wkt); extern char GEOS_DLL *GEOSGeomToWKT_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Specify whether output WKB should be 2d or 3d. * Return previously set number of dimensions. */ extern int GEOS_DLL GEOS_getWKBOutputDims(); extern int GEOS_DLL GEOS_setWKBOutputDims(int newDims); extern int GEOS_DLL GEOS_getWKBOutputDims_r(GEOSContextHandle_t handle); extern int GEOS_DLL GEOS_setWKBOutputDims_r(GEOSContextHandle_t handle, int newDims); /* * Specify whether the WKB byte order is big or little endian. * The return value is the previous byte order. */ extern int GEOS_DLL GEOS_getWKBByteOrder(); extern int GEOS_DLL GEOS_setWKBByteOrder(int byteOrder); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf(const unsigned char *wkb, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf(const GEOSGeometry* g, size_t *size); extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf(const unsigned char *hex, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf(const GEOSGeometry* g, size_t *size); extern int GEOS_DLL GEOS_getWKBByteOrder_r(GEOSContextHandle_t handle); extern int GEOS_DLL GEOS_setWKBByteOrder_r(GEOSContextHandle_t handle, int byteOrder); extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf_r(GEOSContextHandle_t handle, const unsigned char *wkb, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf_r(GEOSContextHandle_t handle, const GEOSGeometry* g, size_t *size); extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf_r(GEOSContextHandle_t handle, const unsigned char *hex, size_t size); extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf_r(GEOSContextHandle_t handle, const GEOSGeometry* g, size_t *size); /************************************************************************ * * Coordinate Sequence functions * ***********************************************************************/ /* * Create a Coordinate sequence with ``size'' coordinates * of ``dims'' dimensions. * Return NULL on exception. */ extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create(unsigned int size, unsigned int dims); extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create_r( GEOSContextHandle_t handle, unsigned int size, unsigned int dims); /* * Clone a Coordinate Sequence. * Return NULL on exception. */ extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone(const GEOSCoordSequence* s); extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone_r( GEOSContextHandle_t handle, const GEOSCoordSequence* s); /* * Destroy a Coordinate Sequence. */ extern void GEOS_DLL GEOSCoordSeq_destroy(GEOSCoordSequence* s); extern void GEOS_DLL GEOSCoordSeq_destroy_r(GEOSContextHandle_t handle, GEOSCoordSequence* s); /* * Set ordinate values in a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_setX(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setY(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setZ(GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setOrdinate(GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double val); extern int GEOS_DLL GEOSCoordSeq_setX_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setY_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setZ_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, double val); extern int GEOS_DLL GEOSCoordSeq_setOrdinate_r(GEOSContextHandle_t handle, GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double val); /* * Get ordinate values from a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_getX(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getY(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getZ(const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getOrdinate(const GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double *val); extern int GEOS_DLL GEOSCoordSeq_getX_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getY_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getZ_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, double *val); extern int GEOS_DLL GEOSCoordSeq_getOrdinate_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int idx, unsigned int dim, double *val); /* * Get size and dimensions info from a Coordinate Sequence. * Return 0 on exception. */ extern int GEOS_DLL GEOSCoordSeq_getSize(const GEOSCoordSequence* s, unsigned int *size); extern int GEOS_DLL GEOSCoordSeq_getDimensions(const GEOSCoordSequence* s, unsigned int *dims); extern int GEOS_DLL GEOSCoordSeq_getSize_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int *size); extern int GEOS_DLL GEOSCoordSeq_getDimensions_r(GEOSContextHandle_t handle, const GEOSCoordSequence* s, unsigned int *dims); /************************************************************************ * * Linear referencing functions -- there are more, but these are * probably sufficient for most purposes * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ /* Return distance of point 'p' projected on 'g' from origin * of 'g'. Geometry 'g' must be a lineal geometry */ extern double GEOS_DLL GEOSProject(const GEOSGeometry *g, const GEOSGeometry* p); extern double GEOS_DLL GEOSProject_r(GEOSContextHandle_t handle, const GEOSGeometry *g, const GEOSGeometry *p); /* Return closest point to given distance within geometry * Geometry must be a LineString */ extern GEOSGeometry GEOS_DLL *GEOSInterpolate(const GEOSGeometry *g, double d); extern GEOSGeometry GEOS_DLL *GEOSInterpolate_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double d); extern double GEOS_DLL GEOSProjectNormalized(const GEOSGeometry *g, const GEOSGeometry* p); extern double GEOS_DLL GEOSProjectNormalized_r(GEOSContextHandle_t handle, const GEOSGeometry *g, const GEOSGeometry *p); extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized(const GEOSGeometry *g, double d); extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized_r( GEOSContextHandle_t handle, const GEOSGeometry *g, double d); /************************************************************************ * * Buffer related functions * ***********************************************************************/ /* @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSBuffer(const GEOSGeometry* g, double width, int quadsegs); extern GEOSGeometry GEOS_DLL *GEOSBuffer_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs); enum GEOSBufCapStyles { GEOSBUF_CAP_ROUND=1, GEOSBUF_CAP_FLAT=2, GEOSBUF_CAP_SQUARE=3 }; enum GEOSBufJoinStyles { GEOSBUF_JOIN_ROUND=1, GEOSBUF_JOIN_MITRE=2, GEOSBUF_JOIN_BEVEL=3 }; /* @return 0 on exception */ extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create(); extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSBufferParams_destroy(GEOSBufferParams* parms); extern void GEOS_DLL GEOSBufferParams_destroy_r( GEOSContextHandle_t handle, GEOSBufferParams* parms); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setEndCapStyle( GEOSBufferParams* p, int style); extern int GEOS_DLL GEOSBufferParams_setEndCapStyle_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int style); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setJoinStyle( GEOSBufferParams* p, int joinStyle); extern int GEOS_DLL GEOSBufferParams_setJoinStyle_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int joinStyle); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setMitreLimit( GEOSBufferParams* p, double mitreLimit); extern int GEOS_DLL GEOSBufferParams_setMitreLimit_r( GEOSContextHandle_t handle, GEOSBufferParams* p, double mitreLimit); /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments( GEOSBufferParams* p, int quadSegs); extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int quadSegs); /* @param singleSided: 1 for single sided, 0 otherwise */ /* @return 0 on exception */ extern int GEOS_DLL GEOSBufferParams_setSingleSided( GEOSBufferParams* p, int singleSided); extern int GEOS_DLL GEOSBufferParams_setSingleSided_r( GEOSContextHandle_t handle, GEOSBufferParams* p, int singleSided); /* @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams( const GEOSGeometry* g, const GEOSBufferParams* p, double width); extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams_r( GEOSContextHandle_t handle, const GEOSGeometry* g, const GEOSBufferParams* p, double width); /* These functions return NULL on exception. */ extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle(const GEOSGeometry* g, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit); extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit); /* These functions return NULL on exception. Only LINESTRINGs are accepted. */ /* @deprecated in 3.3.0: use GEOSOffsetCurve instead */ extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer(const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide); extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer_r( GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide); /* * Only LINESTRINGs are accepted. * @param width : offset distance. * negative for right side offset. * positive for left side offset. * @return NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve(const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit); extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double width, int quadsegs, int joinStyle, double mitreLimit); /************************************************************************ * * Geometry Constructors. * GEOSCoordSequence* arguments will become ownership of the returned object. * All functions return NULL on exception. * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString(GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint_r( GEOSContextHandle_t handle); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString_r( GEOSContextHandle_t handle, GEOSCoordSequence* s); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString_r( GEOSContextHandle_t handle); /* * Second argument is an array of GEOSGeometry* objects. * The caller remains owner of the array, but pointed-to * objects become ownership of the returned GEOSGeometry. */ extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon(); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon(GEOSGeometry* shell, GEOSGeometry** holes, unsigned int nholes); extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection(int type, GEOSGeometry* *geoms, unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection(int type); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon_r( GEOSContextHandle_t handle); extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon_r( GEOSContextHandle_t handle, GEOSGeometry* shell, GEOSGeometry** holes, unsigned int nholes); extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection_r( GEOSContextHandle_t handle, int type, GEOSGeometry* *geoms, unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection_r( GEOSContextHandle_t handle, int type); extern GEOSGeometry GEOS_DLL *GEOSGeom_clone(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeom_clone_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /************************************************************************ * * Memory management * ***********************************************************************/ extern void GEOS_DLL GEOSGeom_destroy(GEOSGeometry* g); extern void GEOS_DLL GEOSGeom_destroy_r(GEOSContextHandle_t handle, GEOSGeometry* g); /************************************************************************ * * Topology operations - return NULL on exception. * ***********************************************************************/ extern GEOSGeometry GEOS_DLL *GEOSEnvelope(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSIntersection(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSConvexHull(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSDifference(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSymDifference(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSBoundary(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnion(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion(const GEOSGeometry* g); /* @deprecated in 3.3.0: use GEOSUnaryUnion instead */ extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGetCentroid(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSNode(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSEnvelope_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSIntersection_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSConvexHull_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSDifference_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSymDifference_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSBoundary_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnion_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGetCentroid_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSNode_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * all arguments remain ownership of the caller * (both Geometries and pointers) */ extern GEOSGeometry GEOS_DLL *GEOSPolygonize(const GEOSGeometry * const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges(const GEOSGeometry * const geoms[], unsigned int ngeoms); /* * Polygonizes a set of Geometries which contain linework that * represents the edges of a planar graph. * * Any dimension of Geometry is handled - the constituent linework * is extracted to form the edges. * * The edges must be correctly noded; that is, they must only meet * at their endpoints. * The Polygonizer will still run on incorrectly noded input * but will not form polygons from incorrectly noded edges. * * The Polygonizer reports the follow kinds of errors: * * - Dangles - edges which have one or both ends which are * not incident on another edge endpoint * - Cut Edges - edges which are connected at both ends but * which do not form part of polygon * - Invalid Ring Lines - edges which form rings which are invalid * (e.g. the component lines contain a self-intersection) * * Errors are reported to output parameters "cuts", "dangles" and * "invalid" (if not-null). Formed polygons are returned as a * collection. NULL is returned on exception. All returned * geometries must be destroyed by caller. * */ extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full(const GEOSGeometry* input, GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid); extern GEOSGeometry GEOS_DLL *GEOSLineMerge(const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSSimplify(const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify(const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSPolygonize_r(GEOSContextHandle_t handle, const GEOSGeometry *const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges_r( GEOSContextHandle_t handle, const GEOSGeometry * const geoms[], unsigned int ngeoms); extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full_r(GEOSContextHandle_t handle, const GEOSGeometry* input, GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalidRings); extern GEOSGeometry GEOS_DLL *GEOSLineMerge_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSSimplify_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify_r( GEOSContextHandle_t handle, const GEOSGeometry* g, double tolerance); /* * Return all distinct vertices of input geometry as a MULTIPOINT. * Note that only 2 dimensions of the vertices are considered when * testing for equality. */ extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints( const GEOSGeometry* g); extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Find paths shared between the two given lineal geometries. * * Returns a GEOMETRYCOLLECTION having two elements: * - first element is a MULTILINESTRING containing shared paths * having the _same_ direction on both inputs * - second element is a MULTILINESTRING containing shared paths * having the _opposite_ direction on the two inputs * * Returns NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSSharedPaths(const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSGeometry GEOS_DLL *GEOSSharedPaths_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /* * Snap first geometry on to second with given tolerance * Returns a newly allocated geometry, or NULL on exception */ extern GEOSGeometry GEOS_DLL *GEOSSnap(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern GEOSGeometry GEOS_DLL *GEOSSnap_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); /* * Return a Delaunay triangulation of the vertex of the given geometry * * @param g the input geometry whose vertex will be used as "sites" * @param tolerance optional snapping tolerance to use for improved robustness * @param onlyEdges if non-zero will return a MULTILINESTRING, otherwise it will * return a GEOMETRYCOLLECTION containing triangular POLYGONs. * * @return a newly allocated geometry, or NULL on exception */ extern GEOSGeometry GEOS_DLL * GEOSDelaunayTriangulation( const GEOSGeometry *g, double tolerance, int onlyEdges); extern GEOSGeometry GEOS_DLL * GEOSDelaunayTriangulation_r( GEOSContextHandle_t handle, const GEOSGeometry *g, double tolerance, int onlyEdges); /************************************************************************ * * Binary predicates - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ extern char GEOS_DLL GEOSDisjoint(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSTouches(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSIntersects(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCrosses(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSWithin(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSContains(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSOverlaps(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEquals(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEqualsExact(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern char GEOS_DLL GEOSCovers(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCoveredBy(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSDisjoint_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSTouches_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSIntersects_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCrosses_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSWithin_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSContains_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSOverlaps_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEquals_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSEqualsExact_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); extern char GEOS_DLL GEOSCovers_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSCoveredBy_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /************************************************************************ * * Prepared Geometry Binary predicates - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare(const GEOSGeometry* g); extern void GEOS_DLL GEOSPreparedGeom_destroy(const GEOSPreparedGeometry* g); extern char GEOS_DLL GEOSPreparedContains(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedContainsProperly(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCoveredBy(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCovers(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCrosses(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedDisjoint(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedIntersects(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedOverlaps(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedTouches(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedWithin(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); /* * GEOSGeometry ownership is retained by caller */ extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare_r( GEOSContextHandle_t handle, const GEOSGeometry* g); extern void GEOS_DLL GEOSPreparedGeom_destroy_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* g); extern char GEOS_DLL GEOSPreparedContains_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedContainsProperly_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCoveredBy_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCovers_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedCrosses_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedDisjoint_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedIntersects_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedOverlaps_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedTouches_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); extern char GEOS_DLL GEOSPreparedWithin_r(GEOSContextHandle_t handle, const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); /************************************************************************ * * STRtree functions * ***********************************************************************/ /* * GEOSGeometry ownership is retained by caller */ extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create(size_t nodeCapacity); extern void GEOS_DLL GEOSSTRtree_insert(GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_query(GEOSSTRtree *tree, const GEOSGeometry *g, GEOSQueryCallback callback, void *userdata); extern void GEOS_DLL GEOSSTRtree_iterate(GEOSSTRtree *tree, GEOSQueryCallback callback, void *userdata); extern char GEOS_DLL GEOSSTRtree_remove(GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_destroy(GEOSSTRtree *tree); extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create_r( GEOSContextHandle_t handle, size_t nodeCapacity); extern void GEOS_DLL GEOSSTRtree_insert_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_query_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, GEOSQueryCallback callback, void *userdata); extern void GEOS_DLL GEOSSTRtree_iterate_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, GEOSQueryCallback callback, void *userdata); extern char GEOS_DLL GEOSSTRtree_remove_r(GEOSContextHandle_t handle, GEOSSTRtree *tree, const GEOSGeometry *g, void *item); extern void GEOS_DLL GEOSSTRtree_destroy_r(GEOSContextHandle_t handle, GEOSSTRtree *tree); /************************************************************************ * * Unary predicate - return 2 on exception, 1 on true, 0 on false * ***********************************************************************/ extern char GEOS_DLL GEOSisEmpty(const GEOSGeometry* g); extern char GEOS_DLL GEOSisSimple(const GEOSGeometry* g); extern char GEOS_DLL GEOSisRing(const GEOSGeometry* g); extern char GEOS_DLL GEOSHasZ(const GEOSGeometry* g); extern char GEOS_DLL GEOSisClosed(const GEOSGeometry *g); extern char GEOS_DLL GEOSisEmpty_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisSimple_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisRing_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSHasZ_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern char GEOS_DLL GEOSisClosed_r(GEOSContextHandle_t handle, const GEOSGeometry *g); /************************************************************************ * * Dimensionally Extended 9 Intersection Model related * ***********************************************************************/ /* These are for use with GEOSRelateBoundaryNodeRule (flags param) */ enum GEOSRelateBoundaryNodeRules { /* MOD2 and OGC are the same rule, and is the default * used by GEOSRelatePattern */ GEOSRELATE_BNR_MOD2=1, GEOSRELATE_BNR_OGC=1, GEOSRELATE_BNR_ENDPOINT=2, GEOSRELATE_BNR_MULTIVALENT_ENDPOINT=3, GEOSRELATE_BNR_MONOVALENT_ENDPOINT=4 }; /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSRelatePattern(const GEOSGeometry* g1, const GEOSGeometry* g2, const char *pat); extern char GEOS_DLL GEOSRelatePattern_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, const char *pat); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSRelate(const GEOSGeometry* g1, const GEOSGeometry* g2); extern char GEOS_DLL *GEOSRelate_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSRelatePatternMatch(const char *mat, const char *pat); extern char GEOS_DLL GEOSRelatePatternMatch_r(GEOSContextHandle_t handle, const char *mat, const char *pat); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSRelateBoundaryNodeRule(const GEOSGeometry* g1, const GEOSGeometry* g2, int bnr); extern char GEOS_DLL *GEOSRelateBoundaryNodeRule_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, int bnr); /************************************************************************ * * Validity checking * ***********************************************************************/ /* These are for use with GEOSisValidDetail (flags param) */ enum GEOSValidFlags { GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE=1 }; /* return 2 on exception, 1 on true, 0 on false */ extern char GEOS_DLL GEOSisValid(const GEOSGeometry* g); extern char GEOS_DLL GEOSisValid_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* return NULL on exception, a string to GEOSFree otherwise */ extern char GEOS_DLL *GEOSisValidReason(const GEOSGeometry *g); extern char GEOS_DLL *GEOSisValidReason_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Caller has the responsibility to destroy 'reason' (GEOSFree) * and 'location' (GEOSGeom_destroy) params * return 2 on exception, 1 when valid, 0 when invalid */ extern char GEOS_DLL GEOSisValidDetail(const GEOSGeometry* g, int flags, char** reason, GEOSGeometry** location); extern char GEOS_DLL GEOSisValidDetail_r(GEOSContextHandle_t handle, const GEOSGeometry* g, int flags, char** reason, GEOSGeometry** location); /************************************************************************ * * Geometry info * ***********************************************************************/ /* Return NULL on exception, result must be freed by caller. */ extern char GEOS_DLL *GEOSGeomType(const GEOSGeometry* g); extern char GEOS_DLL *GEOSGeomType_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGeomTypeId(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeomTypeId_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return 0 on exception */ extern int GEOS_DLL GEOSGetSRID(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetSRID_r(GEOSContextHandle_t handle, const GEOSGeometry* g); extern void GEOS_DLL GEOSSetSRID(GEOSGeometry* g, int SRID); extern void GEOS_DLL GEOSSetSRID_r(GEOSContextHandle_t handle, GEOSGeometry* g, int SRID); /* May be called on all geometries in GEOS 3.x, returns -1 on error and 1 * for non-multi geometries. Older GEOS versions only accept * GeometryCollections or Multi* geometries here, and are likely to crash * when fed simple geometries, so beware if you need compatibility with * old GEOS versions. */ extern int GEOS_DLL GEOSGetNumGeometries(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumGeometries_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. * Up to GEOS 3.2.0 the input geometry must be a Collection, in * later version it doesn't matter (getGeometryN(0) for a single will * return the input). */ extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN(const GEOSGeometry* g, int n); extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN_r( GEOSContextHandle_t handle, const GEOSGeometry* g, int n); /* Return -1 on exception */ extern int GEOS_DLL GEOSNormalize(GEOSGeometry* g); extern int GEOS_DLL GEOSNormalize_r(GEOSContextHandle_t handle, GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGetNumInteriorRings(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumInteriorRings_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception, Geometry must be a LineString. */ extern int GEOS_DLL GEOSGeomGetNumPoints(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeomGetNumPoints_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception, Geometry must be a Point. */ extern int GEOS_DLL GEOSGeomGetX(const GEOSGeometry *g, double *x); extern int GEOS_DLL GEOSGeomGetY(const GEOSGeometry *g, double *y); extern int GEOS_DLL GEOSGeomGetX_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *x); extern int GEOS_DLL GEOSGeomGetY_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *y); /* * Return NULL on exception, Geometry must be a Polygon. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. */ extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN(const GEOSGeometry* g, int n); extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN_r( GEOSContextHandle_t handle, const GEOSGeometry* g, int n); /* * Return NULL on exception, Geometry must be a Polygon. * Returned object is a pointer to internal storage: * it must NOT be destroyed directly. */ extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing(const GEOSGeometry* g); extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* Return -1 on exception */ extern int GEOS_DLL GEOSGetNumCoordinates(const GEOSGeometry* g); extern int GEOS_DLL GEOSGetNumCoordinates_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Geometry must be a LineString, LinearRing or Point. */ extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq(const GEOSGeometry* g); extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq_r( GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return 0 on exception (or empty geometry) */ extern int GEOS_DLL GEOSGeom_getDimensions(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeom_getDimensions_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return 2 or 3. */ extern int GEOS_DLL GEOSGeom_getCoordinateDimension(const GEOSGeometry* g); extern int GEOS_DLL GEOSGeom_getCoordinateDimension_r(GEOSContextHandle_t handle, const GEOSGeometry* g); /* * Return NULL on exception. * Must be LineString and must be freed by called. */ extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN(const GEOSGeometry *g, int n); extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint(const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint(const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN_r(GEOSContextHandle_t handle, const GEOSGeometry *g, int n); extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g); extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g); /************************************************************************ * * Misc functions * ***********************************************************************/ /* Return 0 on exception, 1 otherwise */ extern int GEOS_DLL GEOSArea(const GEOSGeometry* g, double *area); extern int GEOS_DLL GEOSLength(const GEOSGeometry* g, double *length); extern int GEOS_DLL GEOSDistance(const GEOSGeometry* g1, const GEOSGeometry* g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistance(const GEOSGeometry *g1, const GEOSGeometry *g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistanceDensify(const GEOSGeometry *g1, const GEOSGeometry *g2, double densifyFrac, double *dist); extern int GEOS_DLL GEOSGeomGetLength(const GEOSGeometry *g, double *length); extern int GEOS_DLL GEOSArea_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double *area); extern int GEOS_DLL GEOSLength_r(GEOSContextHandle_t handle, const GEOSGeometry* g, double *length); extern int GEOS_DLL GEOSDistance_r(GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistance_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, const GEOSGeometry *g2, double *dist); extern int GEOS_DLL GEOSHausdorffDistanceDensify_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, const GEOSGeometry *g2, double densifyFrac, double *dist); extern int GEOS_DLL GEOSGeomGetLength_r(GEOSContextHandle_t handle, const GEOSGeometry *g, double *length); /* Return 0 on exception, the closest points of the two geometries otherwise. * The first point comes from g1 geometry and the second point comes from g2. */ extern GEOSCoordSequence GEOS_DLL *GEOSNearestPoints( const GEOSGeometry* g1, const GEOSGeometry* g2); extern GEOSCoordSequence GEOS_DLL *GEOSNearestPoints_r( GEOSContextHandle_t handle, const GEOSGeometry* g1, const GEOSGeometry* g2); /************************************************************************ * * Algorithms * ***********************************************************************/ /* Walking from A to B: * return -1 if reaching P takes a counter-clockwise (left) turn * return 1 if reaching P takes a clockwise (right) turn * return 0 if P is collinear with A-B * * On exceptions, return 2. * */ extern int GEOS_DLL GEOSOrientationIndex(double Ax, double Ay, double Bx, double By, double Px, double Py); extern int GEOS_DLL GEOSOrientationIndex_r(GEOSContextHandle_t handle, double Ax, double Ay, double Bx, double By, double Px, double Py); /************************************************************************ * * Reader and Writer APIs * ***********************************************************************/ typedef struct GEOSWKTReader_t GEOSWKTReader; typedef struct GEOSWKTWriter_t GEOSWKTWriter; typedef struct GEOSWKBReader_t GEOSWKBReader; typedef struct GEOSWKBWriter_t GEOSWKBWriter; /* WKT Reader */ extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create(); extern void GEOS_DLL GEOSWKTReader_destroy(GEOSWKTReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read(GEOSWKTReader* reader, const char *wkt); extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKTReader_destroy_r(GEOSContextHandle_t handle, GEOSWKTReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read_r(GEOSContextHandle_t handle, GEOSWKTReader* reader, const char *wkt); /* WKT Writer */ extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create(); extern void GEOS_DLL GEOSWKTWriter_destroy(GEOSWKTWriter* writer); extern char GEOS_DLL *GEOSWKTWriter_write(GEOSWKTWriter* writer, const GEOSGeometry* g); extern void GEOS_DLL GEOSWKTWriter_setTrim(GEOSWKTWriter *writer, char trim); extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision(GEOSWKTWriter *writer, int precision); extern void GEOS_DLL GEOSWKTWriter_setOutputDimension(GEOSWKTWriter *writer, int dim); extern int GEOS_DLL GEOSWKTWriter_getOutputDimension(GEOSWKTWriter *writer); extern void GEOS_DLL GEOSWKTWriter_setOld3D(GEOSWKTWriter *writer, int useOld3D); extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKTWriter_destroy_r(GEOSContextHandle_t handle, GEOSWKTWriter* writer); extern char GEOS_DLL *GEOSWKTWriter_write_r(GEOSContextHandle_t handle, GEOSWKTWriter* writer, const GEOSGeometry* g); extern void GEOS_DLL GEOSWKTWriter_setTrim_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, char trim); extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int precision); extern void GEOS_DLL GEOSWKTWriter_setOutputDimension_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int dim); extern int GEOS_DLL GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer); extern void GEOS_DLL GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t handle, GEOSWKTWriter *writer, int useOld3D); /* WKB Reader */ extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create(); extern void GEOS_DLL GEOSWKBReader_destroy(GEOSWKBReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read(GEOSWKBReader* reader, const unsigned char *wkb, size_t size); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX(GEOSWKBReader* reader, const unsigned char *hex, size_t size); extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKBReader_destroy_r(GEOSContextHandle_t handle, GEOSWKBReader* reader); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read_r(GEOSContextHandle_t handle, GEOSWKBReader* reader, const unsigned char *wkb, size_t size); extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX_r( GEOSContextHandle_t handle, GEOSWKBReader* reader, const unsigned char *hex, size_t size); /* WKB Writer */ extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create(); extern void GEOS_DLL GEOSWKBWriter_destroy(GEOSWKBWriter* writer); extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create_r( GEOSContextHandle_t handle); extern void GEOS_DLL GEOSWKBWriter_destroy_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer); /* The caller owns the results for these two methods! */ extern unsigned char GEOS_DLL *GEOSWKBWriter_write(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_write_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); /* * Specify whether output WKB should be 2d or 3d. * Return previously set number of dimensions. */ extern int GEOS_DLL GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension); extern int GEOS_DLL GEOSWKBWriter_getOutputDimension_r( GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setOutputDimension_r( GEOSContextHandle_t handle, GEOSWKBWriter* writer, int newDimension); /* * Specify whether the WKB byte order is big or little endian. * The return value is the previous byte order. */ extern int GEOS_DLL GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int byteOrder); extern int GEOS_DLL GEOSWKBWriter_getByteOrder_r(GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setByteOrder_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer, int byteOrder); /* * Specify whether SRID values should be output. */ extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char writeSRID); extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID_r(GEOSContextHandle_t handle, const GEOSWKBWriter* writer); extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID_r(GEOSContextHandle_t handle, GEOSWKBWriter* writer, const char writeSRID); /* * Free buffers returned by stuff like GEOSWKBWriter_write(), * GEOSWKBWriter_writeHEX() and GEOSWKTWriter_write(). */ extern void GEOS_DLL GEOSFree(void *buffer); extern void GEOS_DLL GEOSFree_r(GEOSContextHandle_t handle, void *buffer); #ifdef __cplusplus } // extern "C" #endif #endif /* #ifndef GEOS_C_H_INCLUDED */ geos-3.4.2/capi/geos_ts_c.cpp0000644000175000017500000041475312206417150015676 0ustar frankiefrankie/************************************************************************ * * * C-Wrapper for GEOS library * * Copyright (C) 2010-2012 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * Thread Safety modifications: Chuck Thibert * ***********************************************************************/ #include // for FINITE #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 // This should go away #include // finite #include #include #include #include #include #include #include #include #include #ifdef _MSC_VER #pragma warning(disable : 4099) #endif // Some extra magic to make type declarations in geos_c.h work - // for cross-checking of types in header. #define GEOSGeometry geos::geom::Geometry #define GEOSPreparedGeometry geos::geom::prep::PreparedGeometry #define GEOSCoordSequence geos::geom::CoordinateSequence #define GEOSBufferParams geos::operation::buffer::BufferParameters #define GEOSSTRtree geos::index::strtree::STRtree #define GEOSWKTReader_t geos::io::WKTReader #define GEOSWKTWriter_t geos::io::WKTWriter #define GEOSWKBReader_t geos::io::WKBReader #define GEOSWKBWriter_t geos::io::WKBWriter #include "geos_c.h" #include "../geos_svn_revision.h" // Intentional, to allow non-standard C elements like C99 functions to be // imported through C++ headers of C library, like . using namespace std; /// Define this if you want operations triggering Exceptions to /// be printed. /// (will use the NOTIFY channel - only implemented for GEOSUnion so far) /// #undef VERBOSE_EXCEPTIONS #include // import the most frequently used definitions globally using geos::geom::Geometry; using geos::geom::LineString; using geos::geom::Polygon; using geos::geom::CoordinateSequence; using geos::geom::GeometryFactory; using geos::io::WKTReader; using geos::io::WKTWriter; using geos::io::WKBReader; using geos::io::WKBWriter; using geos::operation::overlay::OverlayOp; using geos::operation::overlay::overlayOp; using geos::operation::geounion::CascadedPolygonUnion; using geos::operation::buffer::BufferParameters; using geos::operation::buffer::BufferBuilder; using geos::util::IllegalArgumentException; using geos::algorithm::distance::DiscreteHausdorffDistance; typedef std::auto_ptr GeomAutoPtr; typedef struct GEOSContextHandleInternal { const GeometryFactory *geomFactory; GEOSMessageHandler NOTICE_MESSAGE; GEOSMessageHandler ERROR_MESSAGE; int WKBOutputDims; int WKBByteOrder; int initialized; } GEOSContextHandleInternal_t; // CAPI_ItemVisitor is used internally by the CAPI STRtree // wrappers. It's defined here just to keep it out of the // extern "C" block. class CAPI_ItemVisitor : public geos::index::ItemVisitor { GEOSQueryCallback callback; void *userdata; public: CAPI_ItemVisitor (GEOSQueryCallback cb, void *ud) : ItemVisitor(), callback(cb), userdata(ud) {} void visitItem (void *item) { callback(item, userdata); } }; //## PROTOTYPES ############################################# extern "C" const char GEOS_DLL *GEOSjtsport(); extern "C" char GEOS_DLL *GEOSasText(Geometry *g1); namespace { // anonymous char* gstrdup_s(const char* str, const std::size_t size) { char* out = static_cast(malloc(size + 1)); if (0 != out) { // as no strlen call necessary, memcpy may be faster than strcpy std::memcpy(out, str, size + 1); } assert(0 != out); // we haven't been checking allocation before ticket #371 if (0 == out) { throw(std::runtime_error("Failed to allocate memory for duplicate string")); } return out; } char* gstrdup(std::string const& str) { return gstrdup_s(str.c_str(), str.size()); } } // namespace anonymous extern "C" { GEOSContextHandle_t initGEOS_r(GEOSMessageHandler nf, GEOSMessageHandler ef) { GEOSContextHandleInternal_t *handle = 0; void *extHandle = 0; extHandle = malloc(sizeof(GEOSContextHandleInternal_t)); if (0 != extHandle) { handle = static_cast(extHandle); handle->NOTICE_MESSAGE = nf; handle->ERROR_MESSAGE = ef; handle->geomFactory = GeometryFactory::getDefaultInstance(); handle->WKBOutputDims = 2; handle->WKBByteOrder = getMachineByteOrder(); handle->initialized = 1; } geos::util::Interrupt::cancel(); return static_cast(extHandle); } GEOSMessageHandler GEOSContext_setNoticeHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler nf) { GEOSMessageHandler f; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } f = handle->NOTICE_MESSAGE; handle->NOTICE_MESSAGE = nf; return f; } GEOSMessageHandler GEOSContext_setErrorHandler_r(GEOSContextHandle_t extHandle, GEOSMessageHandler nf) { GEOSMessageHandler f; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } f = handle->ERROR_MESSAGE; handle->ERROR_MESSAGE = nf; return f; } void finishGEOS_r(GEOSContextHandle_t extHandle) { // Fix up freeing handle w.r.t. malloc above free(extHandle); extHandle = NULL; } void GEOSFree_r (GEOSContextHandle_t extHandle, void* buffer) { assert(0 != extHandle); free(buffer); } //----------------------------------------------------------- // relate()-related functions // return 0 = false, 1 = true, 2 = error occured //----------------------------------------------------------- char GEOSDisjoint_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) { return 2; } try { bool result = g1->disjoint(g2); return result; } // TODO: mloskot is going to replace these double-catch block // with a macro to remove redundant code in this and // following functions. catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSTouches_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->touches(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSIntersects_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->intersects(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSCrosses_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->crosses(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSWithin_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->within(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } // call g1->contains(g2) // returns 0 = false // 1 = true // 2 = error was trapped char GEOSContains_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->contains(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSOverlaps_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->overlaps(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSCovers_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->covers(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSCoveredBy_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->coveredBy(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } //------------------------------------------------------------------- // low-level relate functions //------------------------------------------------------------------ char GEOSRelatePattern_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, const char *pat) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { std::string s(pat); bool result = g1->relate(g2, s); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSRelatePatternMatch_r(GEOSContextHandle_t extHandle, const char *mat, const char *pat) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { using geos::geom::IntersectionMatrix; std::string m(mat); std::string p(pat); IntersectionMatrix im(m); bool result = im.matches(p); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char * GEOSRelate_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::geom::IntersectionMatrix; IntersectionMatrix* im = g1->relate(g2); if (0 == im) { return 0; } char *result = gstrdup(im->toString()); delete im; im = 0; return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } char * GEOSRelateBoundaryNodeRule_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, int bnr) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::operation::relate::RelateOp; using geos::geom::IntersectionMatrix; using geos::algorithm::BoundaryNodeRule; IntersectionMatrix* im; switch (bnr) { case GEOSRELATE_BNR_MOD2: /* same as OGC */ im = RelateOp::relate(g1, g2, BoundaryNodeRule::getBoundaryRuleMod2()); break; case GEOSRELATE_BNR_ENDPOINT: im = RelateOp::relate(g1, g2, BoundaryNodeRule::getBoundaryEndPoint()); break; case GEOSRELATE_BNR_MULTIVALENT_ENDPOINT: im = RelateOp::relate(g1, g2, BoundaryNodeRule::getBoundaryMultivalentEndPoint()); break; case GEOSRELATE_BNR_MONOVALENT_ENDPOINT: im = RelateOp::relate(g1, g2, BoundaryNodeRule::getBoundaryMonovalentEndPoint()); break; default: handle->ERROR_MESSAGE("Invalid boundary node rule %d", bnr); return 0; break; } if (0 == im) return 0; char *result = gstrdup(im->toString()); delete im; im = 0; return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } //----------------------------------------------------------------- // isValid //----------------------------------------------------------------- char GEOSisValid_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { using geos::operation::valid::IsValidOp; using geos::operation::valid::TopologyValidationError; IsValidOp ivo(g1); TopologyValidationError *err = ivo.getValidationError(); if ( err ) { handle->NOTICE_MESSAGE("%s", err->toString().c_str()); return 0; } else { return 1; } } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char * GEOSisValidReason_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::operation::valid::IsValidOp; using geos::operation::valid::TopologyValidationError; char* result = 0; char const* const validstr = "Valid Geometry"; IsValidOp ivo(g1); TopologyValidationError *err = ivo.getValidationError(); if (0 != err) { std::ostringstream ss; ss.precision(15); ss << err->getCoordinate(); const std::string errloc = ss.str(); std::string errmsg(err->getMessage()); errmsg += "[" + errloc + "]"; result = gstrdup(errmsg); } else { result = gstrdup(std::string(validstr)); } return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } char GEOSisValidDetail_r(GEOSContextHandle_t extHandle, const Geometry *g, int flags, char** reason, Geometry ** location) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::operation::valid::IsValidOp; using geos::operation::valid::TopologyValidationError; IsValidOp ivo(g); if ( flags & GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE ) { ivo.setSelfTouchingRingFormingHoleValid(true); } TopologyValidationError *err = ivo.getValidationError(); if (0 != err) { if ( location ) { *location = handle->geomFactory->createPoint(err->getCoordinate()); } if ( reason ) { std::string errmsg(err->getMessage()); *reason = gstrdup(errmsg); } return 0; } if ( location ) *location = 0; if ( reason ) *reason = 0; return 1; /* valid */ } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; /* exception */ } //----------------------------------------------------------------- // general purpose //----------------------------------------------------------------- char GEOSEquals_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->equals(g2); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSEqualsExact_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, double tolerance) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = g1->equalsExact(g2, tolerance); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } int GEOSDistance_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, double *dist) { assert(0 != dist); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { *dist = g1->distance(g2); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSHausdorffDistance_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, double *dist) { assert(0 != dist); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { *dist = DiscreteHausdorffDistance::distance(*g1, *g2); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSHausdorffDistanceDensify_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2, double densifyFrac, double *dist) { assert(0 != dist); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { *dist = DiscreteHausdorffDistance::distance(*g1, *g2, densifyFrac); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSArea_r(GEOSContextHandle_t extHandle, const Geometry *g, double *area) { assert(0 != area); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { *area = g->getArea(); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSLength_r(GEOSContextHandle_t extHandle, const Geometry *g, double *length) { assert(0 != length); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { *length = g->getLength(); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } CoordinateSequence * GEOSNearestPoints_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { if (g1->isEmpty() || g2->isEmpty()) return 0; return geos::operation::distance::DistanceOp::nearestPoints(g1, g2); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeomFromWKT_r(GEOSContextHandle_t extHandle, const char *wkt) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const std::string wktstring(wkt); WKTReader r(static_cast(handle->geomFactory)); Geometry *g = r.read(wktstring); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } char * GEOSGeomToWKT_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { char *result = gstrdup(g1->toString()); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } // Remember to free the result! unsigned char * GEOSGeomToWKB_buf_r(GEOSContextHandle_t extHandle, const Geometry *g, size_t *size) { assert(0 != size); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } using geos::io::WKBWriter; try { int byteOrder = handle->WKBByteOrder; WKBWriter w(handle->WKBOutputDims, byteOrder); std::ostringstream os(std::ios_base::binary); w.write(*g, os); std::string wkbstring(os.str()); const std::size_t len = wkbstring.length(); unsigned char* result = 0; result = static_cast(malloc(len)); if (0 != result) { std::memcpy(result, wkbstring.c_str(), len); *size = len; } return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeomFromWKB_buf_r(GEOSContextHandle_t extHandle, const unsigned char *wkb, size_t size) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } using geos::io::WKBReader; try { std::string wkbstring(reinterpret_cast(wkb), size); // make it binary ! WKBReader r(*(static_cast(handle->geomFactory))); std::istringstream is(std::ios_base::binary); is.str(wkbstring); is.seekg(0, std::ios::beg); // rewind reader pointer Geometry *g = r.read(is); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* Read/write wkb hex values. Returned geometries are owned by the caller.*/ unsigned char * GEOSGeomToHEX_buf_r(GEOSContextHandle_t extHandle, const Geometry *g, size_t *size) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } using geos::io::WKBWriter; try { int byteOrder = handle->WKBByteOrder; WKBWriter w(handle->WKBOutputDims, byteOrder); std::ostringstream os(std::ios_base::binary); w.writeHEX(*g, os); std::string hexstring(os.str()); char *result = gstrdup(hexstring); if (0 != result) { *size = hexstring.length(); } return reinterpret_cast(result); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeomFromHEX_buf_r(GEOSContextHandle_t extHandle, const unsigned char *hex, size_t size) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } using geos::io::WKBReader; try { std::string hexstring(reinterpret_cast(hex), size); WKBReader r(*(static_cast(handle->geomFactory))); std::istringstream is(std::ios_base::binary); is.str(hexstring); is.seekg(0, std::ios::beg); // rewind reader pointer Geometry *g = r.readHEX(is); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } char GEOSisEmpty_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { return g1->isEmpty(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSisSimple_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { return g1->isSimple(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 2; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 2; } } char GEOSisRing_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { const LineString *ls = dynamic_cast(g); if ( ls ) { return (ls->isRing()); } else { return 0; } } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 2; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 2; } } //free the result of this char * GEOSGeomType_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { std::string s = g1->getGeometryType(); char *result = gstrdup(s); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } // Return postgis geometry type index int GEOSGeomTypeId_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { return g1->getGeometryTypeId(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } //------------------------------------------------------------------- // GEOS functions that return geometries //------------------------------------------------------------------- Geometry * GEOSEnvelope_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *g3 = g1->getEnvelope(); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSIntersection_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g1->intersection(g2); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSBuffer_r(GEOSContextHandle_t extHandle, const Geometry *g1, double width, int quadrantsegments) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *g3 = g1->buffer(width, quadrantsegments); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSBufferWithStyle_r(GEOSContextHandle_t extHandle, const Geometry *g1, double width, int quadsegs, int endCapStyle, int joinStyle, double mitreLimit) { using geos::operation::buffer::BufferParameters; using geos::operation::buffer::BufferOp; using geos::util::IllegalArgumentException; if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { BufferParameters bp; bp.setQuadrantSegments(quadsegs); if ( endCapStyle > BufferParameters::CAP_SQUARE ) { throw IllegalArgumentException("Invalid buffer endCap style"); } bp.setEndCapStyle( static_cast(endCapStyle) ); if ( joinStyle > BufferParameters::JOIN_BEVEL ) { throw IllegalArgumentException("Invalid buffer join style"); } bp.setJoinStyle( static_cast(joinStyle) ); bp.setMitreLimit(mitreLimit); BufferOp op(g1, bp); Geometry *g3 = op.getResultGeometry(width); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSOffsetCurve_r(GEOSContextHandle_t extHandle, const Geometry *g1, double width, int quadsegs, int joinStyle, double mitreLimit) { if ( 0 == extHandle ) return NULL; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return NULL; try { BufferParameters bp; bp.setEndCapStyle( BufferParameters::CAP_FLAT ); bp.setQuadrantSegments(quadsegs); if ( joinStyle > BufferParameters::JOIN_BEVEL ) { throw IllegalArgumentException("Invalid buffer join style"); } bp.setJoinStyle( static_cast(joinStyle) ); bp.setMitreLimit(mitreLimit); bool isLeftSide = true; if ( width < 0 ) { isLeftSide = false; width = -width; } BufferBuilder bufBuilder (bp); Geometry *g3 = bufBuilder.bufferLineSingleSided(g1, width, isLeftSide); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* @deprecated in 3.3.0 */ Geometry * GEOSSingleSidedBuffer_r(GEOSContextHandle_t extHandle, const Geometry *g1, double width, int quadsegs, int joinStyle, double mitreLimit, int leftSide) { if ( 0 == extHandle ) return NULL; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return NULL; try { BufferParameters bp; bp.setEndCapStyle( BufferParameters::CAP_FLAT ); bp.setQuadrantSegments(quadsegs); if ( joinStyle > BufferParameters::JOIN_BEVEL ) { throw IllegalArgumentException("Invalid buffer join style"); } bp.setJoinStyle( static_cast(joinStyle) ); bp.setMitreLimit(mitreLimit); bool isLeftSide = leftSide == 0 ? false : true; BufferBuilder bufBuilder (bp); Geometry *g3 = bufBuilder.bufferLineSingleSided(g1, width, isLeftSide); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSConvexHull_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *g3 = g1->convexHull(); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSDifference_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g1->difference(g2); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSBoundary_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *g3 = g1->getBoundary(); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSSymDifference_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g1->symDifference(g2); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return NULL; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return NULL; } } Geometry * GEOSUnion_r(GEOSContextHandle_t extHandle, const Geometry *g1, const Geometry *g2) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g1->Union(g2); } catch (const std::exception &e) { #if VERBOSE_EXCEPTIONS std::ostringstream s; s << "Exception on GEOSUnion with following inputs:" << std::endl; s << "A: "<toString() << std::endl; s << "B: "<toString() << std::endl; handle->NOTICE_MESSAGE("%s", s.str().c_str()); #endif // VERBOSE_EXCEPTIONS handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSUnaryUnion_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { GeomAutoPtr g3 ( g->Union() ); return g3.release(); } catch (const std::exception &e) { #if VERBOSE_EXCEPTIONS std::ostringstream s; s << "Exception on GEOSUnaryUnion with following inputs:" << std::endl; s << "A: "<toString() << std::endl; s << "B: "<toString() << std::endl; handle->NOTICE_MESSAGE("%s", s.str().c_str()); #endif // VERBOSE_EXCEPTIONS handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSNode_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { std::auto_ptr g3 = geos::noding::GeometryNoder::node(*g); return g3.release(); } catch (const std::exception &e) { #if VERBOSE_EXCEPTIONS std::ostringstream s; s << "Exception on GEOSUnaryUnion with following inputs:" << std::endl; s << "A: "<toString() << std::endl; s << "B: "<toString() << std::endl; handle->NOTICE_MESSAGE("%s", s.str().c_str()); #endif // VERBOSE_EXCEPTIONS handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSUnionCascaded_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const geos::geom::MultiPolygon *p = dynamic_cast(g1); if ( ! p ) { handle->ERROR_MESSAGE("Invalid argument (must be a MultiPolygon)"); return NULL; } using geos::operation::geounion::CascadedPolygonUnion; return CascadedPolygonUnion::Union(p); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSPointOnSurface_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *ret = g1->getInteriorPoint(); if ( ! ret ) { const GeometryFactory* gf = handle->geomFactory; // return an empty point return gf->createPoint(); } return ret; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } //------------------------------------------------------------------- // memory management functions //------------------------------------------------------------------ void GEOSGeom_destroy_r(GEOSContextHandle_t extHandle, Geometry *a) { GEOSContextHandleInternal_t *handle = 0; // FIXME: mloskot: Does this try-catch around delete means that // destructors in GEOS may throw? If it does, this is a serious // violation of "never throw an exception from a destructor" principle try { delete a; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } void GEOSSetSRID_r(GEOSContextHandle_t extHandle, Geometry *g, int srid) { assert(0 != g); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } g->setSRID(srid); } int GEOSGetNumCoordinates_r(GEOSContextHandle_t extHandle, const Geometry *g) { assert(0 != g); if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { return static_cast(g->getNumPoints()); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } /* * Return -1 on exception, 0 otherwise. * Converts Geometry to normal form (or canonical form). */ int GEOSNormalize_r(GEOSContextHandle_t extHandle, Geometry *g) { assert(0 != g); if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { g->normalize(); return 0; // SUCCESS } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } int GEOSGetNumInteriorRings_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { const Polygon *p = dynamic_cast(g1); if ( ! p ) { handle->ERROR_MESSAGE("Argument is not a Polygon"); return -1; } return static_cast(p->getNumInteriorRing()); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } // returns -1 on error and 1 for non-multi geometries int GEOSGetNumGeometries_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { return static_cast(g1->getNumGeometries()); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } /* * Call only on GEOMETRYCOLLECTION or MULTI*. * Return a pointer to the internal Geometry. */ const Geometry * GEOSGetGeometryN_r(GEOSContextHandle_t extHandle, const Geometry *g1, int n) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g1->getGeometryN(n); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* * Call only on LINESTRING * Returns NULL on exception */ Geometry * GEOSGeomGetPointN_r(GEOSContextHandle_t extHandle, const Geometry *g1, int n) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return NULL; } return ls->getPointN(n); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* * Call only on LINESTRING */ Geometry * GEOSGeomGetStartPoint_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return NULL; } return ls->getStartPoint(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* * Call only on LINESTRING */ Geometry * GEOSGeomGetEndPoint_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return NULL; } return ls->getEndPoint(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* * Call only on LINESTRING * return 2 on exception, 1 on true, 0 on false */ char GEOSisClosed_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return 2; } return ls->isClosed(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } /* * Call only on LINESTRING * return 0 on exception, otherwise 1 */ int GEOSGeomGetLength_r(GEOSContextHandle_t extHandle, const Geometry *g1, double *length) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return 0; } *length = ls->getLength(); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } /* * Call only on LINESTRING */ int GEOSGeomGetNumPoints_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } try { using geos::geom::LineString; const LineString *ls = dynamic_cast(g1); if ( ! ls ) { handle->ERROR_MESSAGE("Argument is not a LineString"); return -1; } return static_cast(ls->getNumPoints()); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return -1; } /* * For POINT * returns 0 on exception, otherwise 1 */ int GEOSGeomGetX_r(GEOSContextHandle_t extHandle, const Geometry *g1, double *x) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::geom::Point; const Point *po = dynamic_cast(g1); if ( ! po ) { handle->ERROR_MESSAGE("Argument is not a Point"); return 0; } *x = po->getX(); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } /* * For POINT * returns 0 on exception, otherwise 1 */ int GEOSGeomGetY_r(GEOSContextHandle_t extHandle, const Geometry *g1, double *y) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::geom::Point; const Point *po = dynamic_cast(g1); if ( ! po ) { handle->ERROR_MESSAGE("Argument is not a Point"); return 0; } *y = po->getY(); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } /* * Call only on polygon * Return a copy of the internal Geometry. */ const Geometry * GEOSGetExteriorRing_r(GEOSContextHandle_t extHandle, const Geometry *g1) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const Polygon *p = dynamic_cast(g1); if ( ! p ) { handle->ERROR_MESSAGE("Invalid argument (must be a Polygon)"); return NULL; } return p->getExteriorRing(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* * Call only on polygon * Return a pointer to internal storage, do not destroy it. */ const Geometry * GEOSGetInteriorRingN_r(GEOSContextHandle_t extHandle, const Geometry *g1, int n) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const Polygon *p = dynamic_cast(g1); if ( ! p ) { handle->ERROR_MESSAGE("Invalid argument (must be a Polygon)"); return NULL; } return p->getInteriorRingN(n); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGetCentroid_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { Geometry *ret = g->getCentroid(); if (0 == ret) { const GeometryFactory *gf = handle->geomFactory; return gf->createPoint(); } return ret; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createEmptyCollection_r(GEOSContextHandle_t extHandle, int type) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } #ifdef GEOS_DEBUG char buf[256]; sprintf(buf, "createCollection: requested type %d, ngeoms: %d", type, ngeoms); handle->NOTICE_MESSAGE("%s", buf);// TODO: Can handle->NOTICE_MESSAGE format that directly? #endif try { const GeometryFactory* gf = handle->geomFactory; Geometry *g = 0; switch (type) { case GEOS_GEOMETRYCOLLECTION: g = gf->createGeometryCollection(); break; case GEOS_MULTIPOINT: g = gf->createMultiPoint(); break; case GEOS_MULTILINESTRING: g = gf->createMultiLineString(); break; case GEOS_MULTIPOLYGON: g = gf->createMultiPolygon(); break; default: handle->ERROR_MESSAGE("Unsupported type request for GEOSGeom_createEmptyCollection_r"); g = 0; } return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSGeom_createCollection_r(GEOSContextHandle_t extHandle, int type, Geometry **geoms, unsigned int ngeoms) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } #ifdef GEOS_DEBUG char buf[256]; sprintf(buf, "PostGIS2GEOS_collection: requested type %d, ngeoms: %d", type, ngeoms); handle->NOTICE_MESSAGE("%s", buf);// TODO: Can handle->NOTICE_MESSAGE format that directly? #endif try { const GeometryFactory* gf = handle->geomFactory; std::vector* vgeoms = new std::vector(geoms, geoms + ngeoms); Geometry *g = 0; switch (type) { case GEOS_GEOMETRYCOLLECTION: g = gf->createGeometryCollection(vgeoms); break; case GEOS_MULTIPOINT: g = gf->createMultiPoint(vgeoms); break; case GEOS_MULTILINESTRING: g = gf->createMultiLineString(vgeoms); break; case GEOS_MULTIPOLYGON: g = gf->createMultiPolygon(vgeoms); break; default: handle->ERROR_MESSAGE("Unsupported type request for PostGIS2GEOS_collection"); g = 0; } return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSPolygonize_r(GEOSContextHandle_t extHandle, const Geometry * const * g, unsigned int ngeoms) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } Geometry *out = 0; try { // Polygonize using geos::operation::polygonize::Polygonizer; Polygonizer plgnzr; for (std::size_t i = 0; i < ngeoms; ++i) { plgnzr.add(g[i]); } #if GEOS_DEBUG handle->NOTICE_MESSAGE("geometry vector added to polygonizer"); #endif std::vector *polys = plgnzr.getPolygons(); assert(0 != polys); #if GEOS_DEBUG handle->NOTICE_MESSAGE("output polygons got"); #endif // We need a vector of Geometry pointers, not Polygon pointers. // STL vector doesn't allow transparent upcast of this // nature, so we explicitly convert. // (it's just a waste of processor and memory, btw) // // XXX mloskot: Why not to extent GeometryFactory to accept // vector of polygons or extend Polygonizer to return list of Geometry* // or add a wrapper which semantic is similar to: // std::vector > std::vector *polyvec = new std::vector(polys->size()); for (std::size_t i = 0; i < polys->size(); ++i) { (*polyvec)[i] = (*polys)[i]; } delete polys; polys = 0; const GeometryFactory *gf = handle->geomFactory; // The below takes ownership of the passed vector, // so we must *not* delete it out = gf->createGeometryCollection(polyvec); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return out; } Geometry * GEOSPolygonizer_getCutEdges_r(GEOSContextHandle_t extHandle, const Geometry * const * g, unsigned int ngeoms) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } Geometry *out = 0; try { // Polygonize using geos::operation::polygonize::Polygonizer; Polygonizer plgnzr; for (std::size_t i = 0; i < ngeoms; ++i) { plgnzr.add(g[i]); } #if GEOS_DEBUG handle->NOTICE_MESSAGE("geometry vector added to polygonizer"); #endif const std::vector& lines = plgnzr.getCutEdges(); #if GEOS_DEBUG handle->NOTICE_MESSAGE("output polygons got"); #endif // We need a vector of Geometry pointers, not Polygon pointers. // STL vector doesn't allow transparent upcast of this // nature, so we explicitly convert. // (it's just a waste of processor and memory, btw) // XXX mloskot: See comment for GEOSPolygonize_r std::vector *linevec = new std::vector(lines.size()); for (std::size_t i = 0, n=lines.size(); i < n; ++i) { (*linevec)[i] = lines[i]->clone(); } const GeometryFactory *gf = handle->geomFactory; // The below takes ownership of the passed vector, // so we must *not* delete it out = gf->createGeometryCollection(linevec); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return out; } Geometry * GEOSPolygonize_full_r(GEOSContextHandle_t extHandle, const Geometry* g, Geometry** cuts, Geometry** dangles, Geometry** invalid) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { // Polygonize using geos::operation::polygonize::Polygonizer; Polygonizer plgnzr; for (std::size_t i = 0; i getNumGeometries(); ++i) { plgnzr.add(g->getGeometryN(i)); } #if GEOS_DEBUG handle->NOTICE_MESSAGE("geometry vector added to polygonizer"); #endif const GeometryFactory *gf = handle->geomFactory; if ( cuts ) { const std::vector& lines = plgnzr.getCutEdges(); std::vector *linevec = new std::vector(lines.size()); for (std::size_t i = 0, n=lines.size(); i < n; ++i) { (*linevec)[i] = lines[i]->clone(); } // The below takes ownership of the passed vector, // so we must *not* delete it *cuts = gf->createGeometryCollection(linevec); } if ( dangles ) { const std::vector& lines = plgnzr.getDangles(); std::vector *linevec = new std::vector(lines.size()); for (std::size_t i = 0, n=lines.size(); i < n; ++i) { (*linevec)[i] = lines[i]->clone(); } // The below takes ownership of the passed vector, // so we must *not* delete it *dangles = gf->createGeometryCollection(linevec); } if ( invalid ) { const std::vector& lines = plgnzr.getInvalidRingLines(); std::vector *linevec = new std::vector(lines.size()); for (std::size_t i = 0, n=lines.size(); i < n; ++i) { (*linevec)[i] = lines[i]->clone(); } // The below takes ownership of the passed vector, // so we must *not* delete it *invalid = gf->createGeometryCollection(linevec); } std::vector *polys = plgnzr.getPolygons(); std::vector *polyvec = new std::vector(polys->size()); for (std::size_t i = 0; i < polys->size(); ++i) { (*polyvec)[i] = (*polys)[i]; } delete polys; return gf->createGeometryCollection(polyvec); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 0; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 0; } } Geometry * GEOSLineMerge_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } Geometry *out = 0; try { using geos::operation::linemerge::LineMerger; LineMerger lmrgr; lmrgr.add(g); std::vector* lines = lmrgr.getMergedLineStrings(); assert(0 != lines); #if GEOS_DEBUG handle->NOTICE_MESSAGE("output lines got"); #endif std::vector*geoms = new std::vector(lines->size()); for (std::vector::size_type i = 0; i < lines->size(); ++i) { (*geoms)[i] = (*lines)[i]; } delete lines; lines = 0; const GeometryFactory *gf = handle->geomFactory; out = gf->buildGeometry(geoms); // XXX: old version //out = gf->createGeometryCollection(geoms); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return out; } int GEOSGetSRID_r(GEOSContextHandle_t extHandle, const Geometry *g) { assert(0 != g); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { return g->getSRID(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } const char* GEOSversion() { static char version[256]; sprintf(version, "%s r%d", GEOS_CAPI_VERSION, GEOS_SVN_REVISION); return version; } const char* GEOSjtsport() { return GEOS_JTS_PORT; } char GEOSHasZ_r(GEOSContextHandle_t extHandle, const Geometry *g) { assert(0 != g); if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } if (g->isEmpty()) { return false; } assert(0 != g->getCoordinate()); double az = g->getCoordinate()->z; //handle->ERROR_MESSAGE("ZCoord: %g", az); return static_cast(FINITE(az)); } int GEOS_getWKBOutputDims_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } return handle->WKBOutputDims; } int GEOS_setWKBOutputDims_r(GEOSContextHandle_t extHandle, int newdims) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } if ( newdims < 2 || newdims > 3 ) { handle->ERROR_MESSAGE("WKB output dimensions out of range 2..3"); } const int olddims = handle->WKBOutputDims; handle->WKBOutputDims = newdims; return olddims; } int GEOS_getWKBByteOrder_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } return handle->WKBByteOrder; } int GEOS_setWKBByteOrder_r(GEOSContextHandle_t extHandle, int byteOrder) { if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } const int oldByteOrder = handle->WKBByteOrder; handle->WKBByteOrder = byteOrder; return oldByteOrder; } CoordinateSequence * GEOSCoordSeq_create_r(GEOSContextHandle_t extHandle, unsigned int size, unsigned int dims) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->getCoordinateSequenceFactory()->create(size, dims); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } int GEOSCoordSeq_setOrdinate_r(GEOSContextHandle_t extHandle, CoordinateSequence *cs, unsigned int idx, unsigned int dim, double val) { assert(0 != cs); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { cs->setOrdinate(idx, dim, val); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSCoordSeq_setX_r(GEOSContextHandle_t extHandle, CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate_r(extHandle, s, idx, 0, val); } int GEOSCoordSeq_setY_r(GEOSContextHandle_t extHandle, CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate_r(extHandle, s, idx, 1, val); } int GEOSCoordSeq_setZ_r(GEOSContextHandle_t extHandle, CoordinateSequence *s, unsigned int idx, double val) { return GEOSCoordSeq_setOrdinate_r(extHandle, s, idx, 2, val); } CoordinateSequence * GEOSCoordSeq_clone_r(GEOSContextHandle_t extHandle, const CoordinateSequence *cs) { assert(0 != cs); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return cs->clone(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } int GEOSCoordSeq_getOrdinate_r(GEOSContextHandle_t extHandle, const CoordinateSequence *cs, unsigned int idx, unsigned int dim, double *val) { assert(0 != cs); assert(0 != val); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { double d = cs->getOrdinate(idx, dim); *val = d; return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSCoordSeq_getX_r(GEOSContextHandle_t extHandle, const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate_r(extHandle, s, idx, 0, val); } int GEOSCoordSeq_getY_r(GEOSContextHandle_t extHandle, const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate_r(extHandle, s, idx, 1, val); } int GEOSCoordSeq_getZ_r(GEOSContextHandle_t extHandle, const CoordinateSequence *s, unsigned int idx, double *val) { return GEOSCoordSeq_getOrdinate_r(extHandle, s, idx, 2, val); } int GEOSCoordSeq_getSize_r(GEOSContextHandle_t extHandle, const CoordinateSequence *cs, unsigned int *size) { assert(0 != cs); assert(0 != size); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { const std::size_t sz = cs->getSize(); *size = static_cast(sz); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSCoordSeq_getDimensions_r(GEOSContextHandle_t extHandle, const CoordinateSequence *cs, unsigned int *dims) { assert(0 != cs); assert(0 != dims); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { const std::size_t dim = cs->getDimension(); *dims = static_cast(dim); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } void GEOSCoordSeq_destroy_r(GEOSContextHandle_t extHandle, CoordinateSequence *s) { GEOSContextHandleInternal_t *handle = 0; try { delete s; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } const CoordinateSequence * GEOSGeom_getCoordSeq_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::geom::Point; const LineString *ls = dynamic_cast(g); if ( ls ) { return ls->getCoordinatesRO(); } const Point *p = dynamic_cast(g); if ( p ) { return p->getCoordinatesRO(); } handle->ERROR_MESSAGE("Geometry must be a Point or LineString"); return 0; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSGeom_createEmptyPoint_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createPoint(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createPoint_r(GEOSContextHandle_t extHandle, CoordinateSequence *cs) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createPoint(cs); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSGeom_createLinearRing_r(GEOSContextHandle_t extHandle, CoordinateSequence *cs) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createLinearRing(cs); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createEmptyLineString_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createLineString(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createLineString_r(GEOSContextHandle_t extHandle, CoordinateSequence *cs) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createLineString(cs); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createEmptyPolygon_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { const GeometryFactory *gf = handle->geomFactory; return gf->createPolygon(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_createPolygon_r(GEOSContextHandle_t extHandle, Geometry *shell, Geometry **holes, unsigned int nholes) { // FIXME: holes must be non-nullptr or may be nullptr? //assert(0 != holes); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::geom::LinearRing; std::vector *vholes = new std::vector(holes, holes + nholes); LinearRing *nshell = dynamic_cast(shell); if ( ! nshell ) { handle->ERROR_MESSAGE("Shell is not a LinearRing"); return NULL; } const GeometryFactory *gf = handle->geomFactory; return gf->createPolygon(nshell, vholes); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSGeom_clone_r(GEOSContextHandle_t extHandle, const Geometry *g) { assert(0 != g); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { return g->clone(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } int GEOSGeom_getDimensions_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { return (int) g->getDimension(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSGeom_getCoordinateDimension_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { return g->getCoordinateDimension(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSSimplify_r(GEOSContextHandle_t extHandle, const Geometry *g1, double tolerance) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using namespace geos::simplify; Geometry::AutoPtr g(DouglasPeuckerSimplifier::simplify(g1, tolerance)); return g.release(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSTopologyPreserveSimplify_r(GEOSContextHandle_t extHandle, const Geometry *g1, double tolerance) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using namespace geos::simplify; Geometry::AutoPtr g(TopologyPreservingSimplifier::simplify(g1, tolerance)); return g.release(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* WKT Reader */ WKTReader * GEOSWKTReader_create_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::io::WKTReader; return new WKTReader((GeometryFactory*)handle->geomFactory); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } void GEOSWKTReader_destroy_r(GEOSContextHandle_t extHandle, WKTReader *reader) { GEOSContextHandleInternal_t *handle = 0; try { delete reader; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } Geometry* GEOSWKTReader_read_r(GEOSContextHandle_t extHandle, WKTReader *reader, const char *wkt) { assert(0 != reader); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { const std::string wktstring(wkt); Geometry *g = reader->read(wktstring); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } /* WKT Writer */ WKTWriter * GEOSWKTWriter_create_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { using geos::io::WKTWriter; return new WKTWriter(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } void GEOSWKTWriter_destroy_r(GEOSContextHandle_t extHandle, WKTWriter *Writer) { GEOSContextHandleInternal_t *handle = 0; try { delete Writer; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } char* GEOSWKTWriter_write_r(GEOSContextHandle_t extHandle, WKTWriter *writer, const Geometry *geom) { assert(0 != writer); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { std::string sgeom(writer->write(geom)); char *result = gstrdup(sgeom); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } void GEOSWKTWriter_setTrim_r(GEOSContextHandle_t extHandle, WKTWriter *writer, char trim) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } writer->setTrim(0 != trim); } void GEOSWKTWriter_setRoundingPrecision_r(GEOSContextHandle_t extHandle, WKTWriter *writer, int precision) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } writer->setRoundingPrecision(precision); } void GEOSWKTWriter_setOutputDimension_r(GEOSContextHandle_t extHandle, WKTWriter *writer, int dim) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } try { writer->setOutputDimension(dim); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } int GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t extHandle, WKTWriter *writer) { assert(0 != writer); if ( 0 == extHandle ) { return -1; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return -1; } int dim = -1; try { dim = writer->getOutputDimension(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return dim; } void GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t extHandle, WKTWriter *writer, int useOld3D) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } writer->setOld3D(0 != useOld3D); } /* WKB Reader */ WKBReader * GEOSWKBReader_create_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } using geos::io::WKBReader; try { return new WKBReader(*(GeometryFactory*)handle->geomFactory); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } void GEOSWKBReader_destroy_r(GEOSContextHandle_t extHandle, WKBReader *reader) { GEOSContextHandleInternal_t *handle = 0; try { delete reader; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } struct membuf : public std::streambuf { membuf(char* s, std::size_t n) { setg(s, s, s + n); } }; Geometry* GEOSWKBReader_read_r(GEOSContextHandle_t extHandle, WKBReader *reader, const unsigned char *wkb, size_t size) { assert(0 != reader); assert(0 != wkb); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { //std::string wkbstring(reinterpret_cast(wkb), size); // make it binary ! //std::istringstream is(std::ios_base::binary); //is.str(wkbstring); //is.seekg(0, std::ios::beg); // rewind reader pointer // http://stackoverflow.com/questions/2079912/simpler-way-to-create-a-c-memorystream-from-char-size-t-without-copying-t membuf mb((char*)wkb, size); istream is(&mb); Geometry *g = reader->read(is); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry* GEOSWKBReader_readHEX_r(GEOSContextHandle_t extHandle, WKBReader *reader, const unsigned char *hex, size_t size) { assert(0 != reader); assert(0 != hex); if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } try { std::string hexstring(reinterpret_cast(hex), size); std::istringstream is(std::ios_base::binary); is.str(hexstring); is.seekg(0, std::ios::beg); // rewind reader pointer Geometry *g = reader->readHEX(is); return g; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } /* WKB Writer */ WKBWriter * GEOSWKBWriter_create_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { using geos::io::WKBWriter; return new WKBWriter(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } void GEOSWKBWriter_destroy_r(GEOSContextHandle_t extHandle, WKBWriter *Writer) { GEOSContextHandleInternal_t *handle = 0; try { delete Writer; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } /* The caller owns the result */ unsigned char* GEOSWKBWriter_write_r(GEOSContextHandle_t extHandle, WKBWriter *writer, const Geometry *geom, size_t *size) { assert(0 != writer); assert(0 != geom); assert(0 != size); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { std::ostringstream os(std::ios_base::binary); writer->write(*geom, os); const std::string& wkbstring = os.str(); const std::size_t len = wkbstring.length(); unsigned char *result = NULL; result = (unsigned char*) malloc(len); std::memcpy(result, wkbstring.c_str(), len); *size = len; return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } /* The caller owns the result */ unsigned char* GEOSWKBWriter_writeHEX_r(GEOSContextHandle_t extHandle, WKBWriter *writer, const Geometry *geom, size_t *size) { assert(0 != writer); assert(0 != geom); assert(0 != size); if ( 0 == extHandle ) { return NULL; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return NULL; } try { std::ostringstream os(std::ios_base::binary); writer->writeHEX(*geom, os); std::string wkbstring(os.str()); const std::size_t len = wkbstring.length(); unsigned char *result = NULL; result = (unsigned char*) malloc(len); std::memcpy(result, wkbstring.c_str(), len); *size = len; return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } int GEOSWKBWriter_getOutputDimension_r(GEOSContextHandle_t extHandle, const GEOSWKBWriter* writer) { assert(0 != writer); if ( 0 == extHandle ) { return 0; } int ret = 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { ret = writer->getOutputDimension(); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } return ret; } void GEOSWKBWriter_setOutputDimension_r(GEOSContextHandle_t extHandle, GEOSWKBWriter* writer, int newDimension) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { writer->setOutputDimension(newDimension); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } } int GEOSWKBWriter_getByteOrder_r(GEOSContextHandle_t extHandle, const GEOSWKBWriter* writer) { assert(0 != writer); if ( 0 == extHandle ) { return 0; } int ret = 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { ret = writer->getByteOrder(); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } return ret; } void GEOSWKBWriter_setByteOrder_r(GEOSContextHandle_t extHandle, GEOSWKBWriter* writer, int newByteOrder) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { writer->setByteOrder(newByteOrder); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } } char GEOSWKBWriter_getIncludeSRID_r(GEOSContextHandle_t extHandle, const GEOSWKBWriter* writer) { assert(0 != writer); if ( 0 == extHandle ) { return -1; } int ret = -1; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { int srid = writer->getIncludeSRID(); ret = srid; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } return static_cast(ret); } void GEOSWKBWriter_setIncludeSRID_r(GEOSContextHandle_t extHandle, GEOSWKBWriter* writer, const char newIncludeSRID) { assert(0 != writer); if ( 0 == extHandle ) { return; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 != handle->initialized ) { try { writer->setIncludeSRID(newIncludeSRID); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } } } //----------------------------------------------------------------- // Prepared Geometry //----------------------------------------------------------------- const geos::geom::prep::PreparedGeometry* GEOSPrepare_r(GEOSContextHandle_t extHandle, const Geometry *g) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } const geos::geom::prep::PreparedGeometry* prep = 0; try { prep = geos::geom::prep::PreparedGeometryFactory::prepare(g); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return prep; } void GEOSPreparedGeom_destroy_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *a) { GEOSContextHandleInternal_t *handle = 0; try { delete a; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } char GEOSPreparedContains_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->contains(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedContainsProperly_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->containsProperly(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedCoveredBy_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->coveredBy(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedCovers_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->covers(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedCrosses_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->crosses(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedDisjoint_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->disjoint(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedIntersects_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->intersects(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedOverlaps_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->overlaps(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedTouches_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->touches(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } char GEOSPreparedWithin_r(GEOSContextHandle_t extHandle, const geos::geom::prep::PreparedGeometry *pg, const Geometry *g) { assert(0 != pg); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = pg->within(g); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } //----------------------------------------------------------------- // STRtree //----------------------------------------------------------------- geos::index::strtree::STRtree * GEOSSTRtree_create_r(GEOSContextHandle_t extHandle, size_t nodeCapacity) { if ( 0 == extHandle ) { return 0; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 0; } geos::index::strtree::STRtree *tree = 0; try { tree = new geos::index::strtree::STRtree(nodeCapacity); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return tree; } void GEOSSTRtree_insert_r(GEOSContextHandle_t extHandle, geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, void *item) { GEOSContextHandleInternal_t *handle = 0; assert(tree != 0); assert(g != 0); try { tree->insert(g->getEnvelopeInternal(), item); } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } void GEOSSTRtree_query_r(GEOSContextHandle_t extHandle, geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, GEOSQueryCallback callback, void *userdata) { GEOSContextHandleInternal_t *handle = 0; assert(tree != 0); assert(g != 0); assert(callback != 0); try { CAPI_ItemVisitor visitor(callback, userdata); tree->query(g->getEnvelopeInternal(), visitor); } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } void GEOSSTRtree_iterate_r(GEOSContextHandle_t extHandle, geos::index::strtree::STRtree *tree, GEOSQueryCallback callback, void *userdata) { GEOSContextHandleInternal_t *handle = 0; assert(tree != 0); assert(callback != 0); try { CAPI_ItemVisitor visitor(callback, userdata); tree->iterate(visitor); } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } char GEOSSTRtree_remove_r(GEOSContextHandle_t extHandle, geos::index::strtree::STRtree *tree, const geos::geom::Geometry *g, void *item) { assert(0 != tree); assert(0 != g); if ( 0 == extHandle ) { return 2; } GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { bool result = tree->remove(g->getEnvelopeInternal(), item); return result; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 2; } void GEOSSTRtree_destroy_r(GEOSContextHandle_t extHandle, geos::index::strtree::STRtree *tree) { GEOSContextHandleInternal_t *handle = 0; try { delete tree; } catch (const std::exception &e) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { if ( 0 == extHandle ) { return; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return; } handle->ERROR_MESSAGE("Unknown exception thrown"); } } double GEOSProject_r(GEOSContextHandle_t extHandle, const Geometry *g, const Geometry *p) { if ( 0 == extHandle ) return -1.0; GEOSContextHandleInternal_t *handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) return -1.0; const geos::geom::Point* point = dynamic_cast(p); if (!point) { handle->ERROR_MESSAGE("third argument of GEOSProject_r must be Point*"); return -1.0; } const geos::geom::Coordinate* inputPt = p->getCoordinate(); try { return geos::linearref::LengthIndexedLine(g).project(*inputPt); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return -1.0; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return -1.0; } } Geometry* GEOSInterpolate_r(GEOSContextHandle_t extHandle, const Geometry *g, double d) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) return 0; try { geos::linearref::LengthIndexedLine lil(g); geos::geom::Coordinate coord = lil.extractPoint(d); const GeometryFactory *gf = handle->geomFactory; Geometry* point = gf->createPoint(coord); return point; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 0; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 0; } } double GEOSProjectNormalized_r(GEOSContextHandle_t extHandle, const Geometry *g, const Geometry *p) { double length; GEOSLength_r(extHandle, g, &length); return GEOSProject_r(extHandle, g, p) / length; } Geometry* GEOSInterpolateNormalized_r(GEOSContextHandle_t extHandle, const Geometry *g, double d) { double length; GEOSLength_r(extHandle, g, &length); return GEOSInterpolate_r(extHandle, g, d * length); } GEOSGeometry* GEOSGeom_extractUniquePoints_r(GEOSContextHandle_t extHandle, const GEOSGeometry* g) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) return 0; using namespace geos::geom; using namespace geos::util; try { /* 1: extract points */ std::vector coords; UniqueCoordinateArrayFilter filter(coords); g->apply_ro(&filter); /* 2: for each point, create a geometry and put into a vector */ std::vector* points = new std::vector(); points->reserve(coords.size()); const GeometryFactory* factory = g->getFactory(); for (std::vector::iterator it=coords.begin(), itE=coords.end(); it != itE; ++it) { Geometry* point = factory->createPoint(*(*it)); points->push_back(point); } /* 3: create a multipoint */ return factory->createMultiPoint(points); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 0; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 0; } } int GEOSOrientationIndex_r(GEOSContextHandle_t extHandle, double Ax, double Ay, double Bx, double By, double Px, double Py) { GEOSContextHandleInternal_t *handle = 0; using geos::geom::Coordinate; using geos::algorithm::CGAlgorithms; if ( 0 == extHandle ) { return 2; } handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) { return 2; } try { Coordinate A(Ax, Ay); Coordinate B(Bx, By); Coordinate P(Px, Py); return CGAlgorithms::orientationIndex(A, B, P); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 2; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 2; } } GEOSGeometry * GEOSSharedPaths_r(GEOSContextHandle_t extHandle, const GEOSGeometry* g1, const GEOSGeometry* g2) { using namespace geos::operation::sharedpaths; if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) return 0; SharedPathsOp::PathList forw, back; try { SharedPathsOp::sharedPathsOp(*g1, *g2, forw, back); } catch (const std::exception &e) { SharedPathsOp::clearEdges(forw); SharedPathsOp::clearEdges(back); handle->ERROR_MESSAGE("%s", e.what()); return 0; } catch (...) { SharedPathsOp::clearEdges(forw); SharedPathsOp::clearEdges(back); handle->ERROR_MESSAGE("Unknown exception thrown"); return 0; } // Now forw and back have the geoms we want to use to construct // our output GeometryCollections... const GeometryFactory* factory = g1->getFactory(); size_t count; std::auto_ptr< std::vector > out1( new std::vector() ); count = forw.size(); out1->reserve(count); for (size_t i=0; ipush_back(forw[i]); } std::auto_ptr out1g ( factory->createMultiLineString(out1.release()) ); std::auto_ptr< std::vector > out2( new std::vector() ); count = back.size(); out2->reserve(count); for (size_t i=0; ipush_back(back[i]); } std::auto_ptr out2g ( factory->createMultiLineString(out2.release()) ); std::auto_ptr< std::vector > out( new std::vector() ); out->reserve(2); out->push_back(out1g.release()); out->push_back(out2g.release()); std::auto_ptr outg ( factory->createGeometryCollection(out.release()) ); return outg.release(); } GEOSGeometry * GEOSSnap_r(GEOSContextHandle_t extHandle, const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance) { using namespace geos::operation::overlay::snap; if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = reinterpret_cast(extHandle); if ( handle->initialized == 0 ) return 0; try{ GeometrySnapper snapper( *g1 ); std::auto_ptr ret = snapper.snapTo(*g2, tolerance); return ret.release(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); return 0; } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); return 0; } } BufferParameters * GEOSBufferParams_create_r(GEOSContextHandle_t extHandle) { if ( 0 == extHandle ) return NULL; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return NULL; try { BufferParameters *p = new BufferParameters(); return p; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } void GEOSBufferParams_destroy_r(GEOSContextHandle_t extHandle, BufferParameters* p) { (void)extHandle; delete p; } int GEOSBufferParams_setEndCapStyle_r(GEOSContextHandle_t extHandle, GEOSBufferParams* p, int style) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return 0; try { if ( style > BufferParameters::CAP_SQUARE ) { throw IllegalArgumentException("Invalid buffer endCap style"); } p->setEndCapStyle(static_cast(style)); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSBufferParams_setJoinStyle_r(GEOSContextHandle_t extHandle, GEOSBufferParams* p, int style) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return 0; try { if ( style > BufferParameters::JOIN_BEVEL ) { throw IllegalArgumentException("Invalid buffer join style"); } p->setJoinStyle(static_cast(style)); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSBufferParams_setMitreLimit_r(GEOSContextHandle_t extHandle, GEOSBufferParams* p, double limit) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return 0; try { p->setMitreLimit(limit); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSBufferParams_setQuadrantSegments_r(GEOSContextHandle_t extHandle, GEOSBufferParams* p, int segs) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return 0; try { p->setQuadrantSegments(segs); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } int GEOSBufferParams_setSingleSided_r(GEOSContextHandle_t extHandle, GEOSBufferParams* p, int ss) { if ( 0 == extHandle ) return 0; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return 0; try { p->setSingleSided( (ss != 0) ); return 1; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return 0; } Geometry * GEOSBufferWithParams_r(GEOSContextHandle_t extHandle, const Geometry *g1, const BufferParameters* bp, double width) { using geos::operation::buffer::BufferOp; if ( 0 == extHandle ) return NULL; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return NULL; try { BufferOp op(g1, *bp); Geometry *g3 = op.getResultGeometry(width); return g3; } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } Geometry * GEOSDelaunayTriangulation_r(GEOSContextHandle_t extHandle, const Geometry *g1, double tolerance, int onlyEdges) { if ( 0 == extHandle ) return NULL; GEOSContextHandleInternal_t *handle = 0; handle = reinterpret_cast(extHandle); if ( 0 == handle->initialized ) return NULL; using geos::triangulate::DelaunayTriangulationBuilder; try { DelaunayTriangulationBuilder builder; builder.setTolerance(tolerance); builder.setSites(*g1); if ( onlyEdges ) return builder.getEdges( *g1->getFactory() ).release(); else return builder.getTriangles( *g1->getFactory() ).release(); } catch (const std::exception &e) { handle->ERROR_MESSAGE("%s", e.what()); } catch (...) { handle->ERROR_MESSAGE("Unknown exception thrown"); } return NULL; } } /* extern "C" */ geos-3.4.2/cmake/0000755000175000017500000000000012206417223013354 5ustar frankiefrankiegeos-3.4.2/cmake/cmake_uninstall.cmake.in0000644000175000017500000000325512206417145020144 0ustar frankiefrankie################################################################################# # # This file is a part of CMake build configuration of GEOS library # # Defines commands used by make uninstall target of CMake build configuration. # # Author: Credit to the CMake mailing list archives for providing this solution. # Modifications: Mateusz Loskot # ################################################################################# if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") endif() file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") set(GEOS_INCLUDE_DIR) foreach(file ${files}) if(${file} MATCHES "geos.h") get_filename_component(GEOS_INCLUDE_DIR ${file} PATH) endif() message(STATUS "Uninstalling $ENV{DESTDIR}${file}") if(NOT EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") message(STATUS "\tTrying to execute remove command anyway.") endif() exec_program("@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif() endforeach() message(STATUS "Deleting ${GEOS_INCLUDE_DIR} directory") exec_program("@CMAKE_COMMAND@" ARGS "-E remove_directory \"${GEOS_INCLUDE_DIR}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing \"${GEOS_INCLUDE_DIR}\"") endif() geos-3.4.2/cmake/modules/0000755000175000017500000000000012206417223015024 5ustar frankiefrankiegeos-3.4.2/cmake/modules/COPYING-CMAKE-SCRIPTS0000644000175000017500000000245712206417145020035 0ustar frankiefrankieRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. geos-3.4.2/cmake/modules/CheckPrototypeExists.cmake0000644000175000017500000000256712206417145022206 0ustar frankiefrankie# - Check if the prototype for a function exists. # CHECK_PROTOTYPE_EXISTS (FUNCTION HEADER VARIABLE) # # FUNCTION - the name of the function you are looking for # HEADER - the header(s) where the prototype should be declared # VARIABLE - variable to store the result # # The following variables may be set before calling this macro to # modify the way the check is run: # # CMAKE_REQUIRED_FLAGS = string of compile command line flags # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) # CMAKE_REQUIRED_INCLUDES = list of include directories # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # # Source: KDE/kdelibs # # INCLUDE(CheckCXXSourceCompiles) MACRO(CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) SET(_INCLUDE_FILES) FOREACH (it ${_HEADER}) SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") ENDFOREACH (it) SET(_CHECK_PROTO_EXISTS_SOURCE_CODE " ${_INCLUDE_FILES} int main() { #ifndef ${_SYMBOL} int i = sizeof(&${_SYMBOL}); #endif return 0; } ") CHECK_CXX_SOURCE_COMPILES("${_CHECK_PROTO_EXISTS_SOURCE_CODE}" ${_RESULT}) ENDMACRO(CHECK_PROTOTYPE_EXISTS _SYMBOL _HEADER _RESULT) geos-3.4.2/config.guess0000755000175000017500000012763712206417160014634 0ustar frankiefrankie#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. timestamp='2009-12-30' # This file 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 2 of the License, 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: geos-3.4.2/config.sub0000755000175000017500000010344512206417160014266 0ustar frankiefrankie#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. timestamp='2010-01-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file 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 2 of the License, 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile-* | tilegx-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; # This must be matched before tile*. tilegx*) basic_machine=tilegx-unknown os=-linux-gnu ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: geos-3.4.2/configure0000755000175000017500000227412212206417167014224 0ustar frankiefrankie#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="include/geos.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS CAPI_INTERFACE_AGE CAPI_INTERFACE_REVISION CAPI_INTERFACE_CURRENT CAPI_VERSION_PATCH CAPI_VERSION_MINOR CAPI_VERSION_MAJOR CAPI_VERSION JTS_PORT INTERFACE_AGE INTERFACE_REVISION INTERFACE_CURRENT VERSION_PATCH VERSION_MINOR VERSION_MAJOR HAVE_PHP_UNIT_FALSE HAVE_PHP_UNIT_TRUE HAVE_PHP_FALSE HAVE_PHP_TRUE ENABLE_PHP_FALSE ENABLE_PHP_TRUE PHPUNIT PHP PHP_CONFIG ENABLE_RUBY_FALSE ENABLE_RUBY_TRUE RUBY_SHARED_LIB RUBY_SO_NAME RUBY_EXTENSION_DIR RUBY_LIB_DIR RUBY_INCLUDE_DIR RUBY_SITE_ARCH RUBY_BIN_DIR RUBY_VERSION RUBY ENABLE_PYTHON_FALSE ENABLE_PYTHON_TRUE SWIG_PYTHON_CPPFLAGS SWIG_PYTHON_OPT PYTHON_EXTRA_LIBS PYTHON_SITE_PKG PYTHON_LDFLAGS PYTHON_CPPFLAGS pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON ENABLE_SWIG_FALSE ENABLE_SWIG_TRUE SWIG_LIB SWIG AM_CFLAGS AM_CXXFLAGS INLINE_FLAGS ALLOCA LIBOBJS CXXCPP am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_inline enable_cassert enable_glibcxx_debug enable_python enable_ruby enable_php ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-inline Disable inlining --disable-cassert Disable assertion checking --enable-glibcxx-debug Enable libstdc++ debug mode --enable-python Enable build of python module --enable-ruby Enable build of ruby module --enable-php Enable build of php module Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if test "${ac_cv_target+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- JTS_PORT=1.12.0 CAPI_INTERFACE_CURRENT=9 CAPI_INTERFACE_REVISION=2 CAPI_INTERFACE_AGE=8 VERSION_MAJOR=3 VERSION_MINOR=4 VERSION_PATCH=2 VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH" CAPI_VERSION_MAJOR=`expr $CAPI_INTERFACE_CURRENT - $CAPI_INTERFACE_AGE` CAPI_VERSION_MINOR=$CAPI_INTERFACE_AGE CAPI_VERSION_PATCH=$CAPI_INTERFACE_REVISION CAPI_VERSION="$CAPI_VERSION_MAJOR.$CAPI_VERSION_MINOR.$CAPI_VERSION_PATCH" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=geos VERSION=$VERSION # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_config_headers="$ac_config_headers include/config.h include/geos/platform.h" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi enable_dlopen=yes enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:5116: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:5119: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:5122: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6325 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5 ; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7850: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7854: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8189: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8193: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8294: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8298: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8349: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8353: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 10733 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 10829 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} _lt_caught_CXX_error=yes; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5]* | *pgcpp\ [1-5]*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 $as_echo "$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13716: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13720: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13815: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13819: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13867: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13871: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 $as_echo "$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if test "${ac_cv_search_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_strerror+set}" = set; then : break fi done if test "${ac_cv_search_strerror+set}" = set; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval "test \"\${$as_ac_Header+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 $as_echo_n "checking whether closedir returns void... " >&6; } if test "${ac_cv_func_closedir_void+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_closedir_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_closedir_void=no else ac_cv_func_closedir_void=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5 $as_echo "$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then $as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5 $as_echo_n "checking for working memcmp... " >&6; } if test "${ac_cv_func_memcmp_working+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_memcmp_working=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Some versions of memcmp are not 8-bit clean. */ char c0 = '\100', c1 = '\200', c2 = '\201'; if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) return 1; /* The Next x86 OpenStep bug shows up only when comparing 16 bytes or more and with at least one buffer not starting on a 4-byte boundary. William Lewis provided this test program. */ { char foo[21]; char bar[21]; int i; for (i = 0; i < 4; i++) { char *a = foo + i; char *b = bar + i; strcpy (a, "--------01111111"); strcpy (b, "--------10000000"); if (memcmp (a, b, 16) >= 0) return 1; } return 0; } ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_memcmp_working=yes else ac_cv_func_memcmp_working=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5 $as_echo "$ac_cv_func_memcmp_working" >&6; } test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in *" memcmp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; esac for ac_func in strftime do : ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRFTIME 1 _ACEOF else # strftime is in -lintl on SCO UNIX. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 $as_echo_n "checking for strftime in -lintl... " >&6; } if test "${ac_cv_lib_intl_strftime+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strftime (); int main () { return strftime (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_strftime=yes else ac_cv_lib_intl_strftime=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 $as_echo "$ac_cv_lib_intl_strftime" >&6; } if test "x$ac_cv_lib_intl_strftime" = x""yes; then : $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h LIBS="-lintl $LIBS" fi fi done for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = x""yes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if test "${ac_cv_working_alloca_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if test "${ac_cv_func_alloca_works+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if test "${ac_cv_os_cray+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if test "${ac_cv_c_stack_direction+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval "test \"\${$as_ac_Header+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if test "${ac_cv_search_opendir+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if test "${ac_cv_search_opendir+set}" = set; then : break fi done if test "${ac_cv_search_opendir+set}" = set; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in memory.h do : ac_fn_c_check_header_mongrel "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default" if test "x$ac_cv_header_memory_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MEMORY_H 1 _ACEOF fi done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF fi done for ac_header in ieeefp.h do : ac_fn_c_check_header_mongrel "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" if test "x$ac_cv_header_ieeefp_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IEEEFP_H 1 _ACEOF fi done for ac_header in sys/file.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default" if test "x$ac_cv_header_sys_file_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_FILE_H 1 _ACEOF fi done for ac_header in sys/time.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 1 _ACEOF fi done for ac_func in strchr memcpy gettimeofday do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if test "${ac_cv_header_stat_broken+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stat_broken=no else ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 $as_echo "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then $as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test "${ac_cv_struct_tm+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi # Check whether --enable-inline was given. if test "${enable_inline+set}" = set; then : enableval=$enable_inline; case "${enableval}" in yes) enable_inline=true ;; no) enable_inline=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-inline" "$LINENO" 5 ;; esac else enable_inline=true fi # Check whether --enable-cassert was given. if test "${enable_cassert+set}" = set; then : enableval=$enable_cassert; case "${enableval}" in yes) enable_cassert=true ;; no) enable_cassert=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-cassert" "$LINENO" 5 ;; esac else enable_cassert=true fi # Check whether --enable-glibcxx-debug was given. if test "${enable_glibcxx_debug+set}" = set; then : enableval=$enable_glibcxx_debug; case "${enableval}" in yes) enable_glibcxx_debug=true ;; no) enable_glibcxx_debug=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-glibcxx-debug" "$LINENO" 5 ;; esac else enable_glibcxx_debug=false fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if requested to force inline functions" >&5 $as_echo_n "checking if requested to force inline functions... " >&6; } INLINE_FLAGS= if test x"$enable_inline" = xtrue; then INLINE_FLAGS="-DGEOS_INLINE" AM_CXXFLAGS="$AM_CXXFLAGS $INLINE_FLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if requested to enable assert macros" >&5 $as_echo_n "checking if requested to enable assert macros... " >&6; } if test x"$enable_cassert" = xfalse; then AM_CXXFLAGS="$AM_CXXFLAGS -DNDEBUG" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if requested libstdc++ debug mode" >&5 $as_echo_n "checking if requested libstdc++ debug mode... " >&6; } if test x"$enable_glibcxx_debug" = xtrue; then AM_CXXFLAGS="$AM_CXXFLAGS -D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Set default AM_CXXFLAGS and AM_CFLAGS # -pedantic: ISO does not support long long # we add -Wno-long-long to avoid those messages WARNFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -pedantic" >&5 $as_echo_n "checking if $compiler supports -pedantic... " >&6; } if test "${dummy_cv_pedantic+set}" = set; then : $as_echo_n "(cached) " >&6 else dummy_cv_pedantic=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-pedantic" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16043: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16047: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_pedantic=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_pedantic" >&5 $as_echo "$dummy_cv_pedantic" >&6; } if test x"$dummy_cv_pedantic" = xyes; then WARNFLAGS="$WARNFLAGS -pedantic" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -Wall" >&5 $as_echo_n "checking if $compiler supports -Wall... " >&6; } if test "${dummy_cv_wall+set}" = set; then : $as_echo_n "(cached) " >&6 else dummy_cv_wall=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-Wall" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16087: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16091: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_wall=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_wall" >&5 $as_echo "$dummy_cv_wall" >&6; } if test x"$dummy_cv_wall" = xyes; then WARNFLAGS="$WARNFLAGS -Wall" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -ansi" >&5 $as_echo_n "checking if $compiler supports -ansi... " >&6; } if test "${dummy_cv_ansi+set}" = set; then : $as_echo_n "(cached) " >&6 else dummy_cv_ansi=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-ansi" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16131: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16135: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_ansi=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_ansi" >&5 $as_echo "$dummy_cv_ansi" >&6; } if test x"$dummy_cv_ansi" = xyes; then WARNFLAGS="$WARNFLAGS -ansi" else : fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -Wno-long-long" >&5 $as_echo_n "checking if $compiler supports -Wno-long-long... " >&6; } if test "${dummy_cv_no_long_long+set}" = set; then : $as_echo_n "(cached) " >&6 else dummy_cv_no_long_long=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-Wno-long-long" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16175: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16179: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_no_long_long=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_no_long_long" >&5 $as_echo "$dummy_cv_no_long_long" >&6; } if test x"$dummy_cv_no_long_long" = xyes; then WARNFLAGS="$WARNFLAGS -Wno-long-long" else : fi # To make numerical computation more stable, we use --ffloat-store NUMERICFLAGS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -ffloat-store" >&5 $as_echo_n "checking if $compiler supports -ffloat-store... " >&6; } if test "${dummy_cv_ffloat_store+set}" = set; then : $as_echo_n "(cached) " >&6 else dummy_cv_ffloat_store=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-ffloat-store" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16222: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16226: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then dummy_cv_ffloat_store=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dummy_cv_ffloat_store" >&5 $as_echo "$dummy_cv_ffloat_store" >&6; } if test x"$dummy_cv_ffloat_store" = xyes; then NUMERICFLAGS="$NUMERICFLAGS -ffloat-store" else : fi DEFAULTFLAGS="${WARNFLAGS} ${NUMERICFLAGS}" AM_CXXFLAGS="${AM_CXXFLAGS} ${DEFAULTFLAGS}" AM_CFLAGS="${AM_CFLAGS} ${DEFAULTFLAGS}" save_LIBS=$LIBS LIBS="$LIBS -lm" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for finite" >&5 $as_echo_n "checking for finite... " >&6; } if test "${ac_cv_finite+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { double x; int y; y = finite(x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_finite=yes else ac_cv_finite=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_finite" >&5 $as_echo "$ac_cv_finite" >&6; } if test x"$ac_cv_finite" = x"yes"; then $as_echo "#define HAVE_FINITE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isfinite" >&5 $as_echo_n "checking for isfinite... " >&6; } if test "${ac_cv_isfinite+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { double x; int y; y = isfinite(x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_isfinite=yes else ac_cv_isfinite=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_isfinite" >&5 $as_echo "$ac_cv_isfinite" >&6; } if test x"$ac_cv_isfinite" = x"yes"; then $as_echo "#define HAVE_ISFINITE 1" >>confdefs.h fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isnan" >&5 $as_echo_n "checking for isnan... " >&6; } if test "${ac_cv_isnan+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { double x; int y; y = isnan(x); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_isnan=yes else ac_cv_isnan=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_isnan" >&5 $as_echo "$ac_cv_isnan" >&6; } if test x"$ac_cv_isnan" = x"yes"; then $as_echo "#define HAVE_ISNAN 1" >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS=$save_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether int64_t is 64 bits" >&5 $as_echo_n "checking whether int64_t is 64 bits... " >&6; } if test "${pgac_cv_type_int64_t_64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # If cross-compiling, check the size reported by the compiler and # trust that the arithmetic works. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { static int test_array [1 - 2 * !(sizeof(int64_t) == 8)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : pgac_cv_type_int64_t_64=yes else pgac_cv_type_int64_t_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int64_t ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ac_int64 a = 20000001; ac_int64 b = 40000005; int does_int64_work() { ac_int64 c,d; if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ c = a * b; d = (c + b) / b; if (d != a+1) return 0; return 1; } main() { if (does_int64_work()) exit(0); exit(-1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : pgac_cv_type_int64_t_64=yes else pgac_cv_type_int64_t_64=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_type_int64_t_64" >&5 $as_echo "$pgac_cv_type_int64_t_64" >&6; } HAVE_INT64_T_64=$pgac_cv_type_int64_t_64 if test x"$pgac_cv_type_int64_t_64" = xyes ; then $as_echo "#define HAVE_INT64_T_64 1" >>confdefs.h fi if test x"$HAVE_INT64_T_64" = x"no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long int is 64 bits" >&5 $as_echo_n "checking whether long int is 64 bits... " >&6; } if test "${pgac_cv_type_long_int_64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # If cross-compiling, check the size reported by the compiler and # trust that the arithmetic works. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { static int test_array [1 - 2 * !(sizeof(long int) == 8)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : pgac_cv_type_long_int_64=yes else pgac_cv_type_long_int_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef long int ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ac_int64 a = 20000001; ac_int64 b = 40000005; int does_int64_work() { ac_int64 c,d; if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ c = a * b; d = (c + b) / b; if (d != a+1) return 0; return 1; } main() { if (does_int64_work()) exit(0); exit(-1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : pgac_cv_type_long_int_64=yes else pgac_cv_type_long_int_64=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_type_long_int_64" >&5 $as_echo "$pgac_cv_type_long_int_64" >&6; } HAVE_LONG_INT_64=$pgac_cv_type_long_int_64 if test x"$pgac_cv_type_long_int_64" = xyes ; then $as_echo "#define HAVE_LONG_INT_64 1" >>confdefs.h fi if test x"$HAVE_LONG_INT_64" = x"no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long long int is 64 bits" >&5 $as_echo_n "checking whether long long int is 64 bits... " >&6; } if test "${pgac_cv_type_long_long_int_64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : # If cross-compiling, check the size reported by the compiler and # trust that the arithmetic works. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { static int test_array [1 - 2 * !(sizeof(long long int) == 8)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : pgac_cv_type_long_long_int_64=yes else pgac_cv_type_long_long_int_64=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef long long int ac_int64; /* * These are globals to discourage the compiler from folding all the * arithmetic tests down to compile-time constants. */ ac_int64 a = 20000001; ac_int64 b = 40000005; int does_int64_work() { ac_int64 c,d; if (sizeof(ac_int64) != 8) return 0; /* definitely not the right size */ /* Do perfunctory checks to see if 64-bit arithmetic seems to work */ c = a * b; d = (c + b) / b; if (d != a+1) return 0; return 1; } main() { if (does_int64_work()) exit(0); exit(-1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : pgac_cv_type_long_long_int_64=yes else pgac_cv_type_long_long_int_64=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_type_long_long_int_64" >&5 $as_echo "$pgac_cv_type_long_long_int_64" >&6; } HAVE_LONG_LONG_INT_64=$pgac_cv_type_long_long_int_64 if test x"$pgac_cv_type_long_long_int_64" = xyes ; then $as_echo "#define HAVE_LONG_LONG_INT_64 1" >>confdefs.h fi if test x"$HAVE_LONG_LONG_INT_64" = x"no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find a working 64bit int type, you may experience weird bugs (undefined behaviour)" >&5 $as_echo "$as_me: WARNING: Could not find a working 64bit int type, you may experience weird bugs (undefined behaviour)" >&2;}; fi fi fi # Check whether --enable-python was given. if test "${enable_python+set}" = set; then : enableval=$enable_python; case "${enableval}" in yes) use_python=true ;; no) use_python=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; esac else use_python=false fi # Check whether --enable-ruby was given. if test "${enable_ruby+set}" = set; then : enableval=$enable_ruby; case "${enableval}" in yes) use_ruby=true ;; no) use_ruby=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-ruby" "$LINENO" 5 ;; esac else use_ruby=false fi # Check whether --enable-php was given. if test "${enable_php+set}" = set; then : enableval=$enable_php; case "${enableval}" in yes) use_php=true ;; no) use_php=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-php" "$LINENO" 5 ;; esac else use_php=false fi use_swig=false if test x"$use_python" = xtrue || test x"$use_ruby" = xtrue; then # Extract the first word of "swig", so it can be a program name with args. set dummy swig; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_SWIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $SWIG in [\\/]* | ?:[\\/]*) ac_cv_path_SWIG="$SWIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SWIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SWIG=$ac_cv_path_SWIG if test -n "$SWIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SWIG" >&5 $as_echo "$SWIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$SWIG" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: cannot find 'swig' program. You should look at http://www.swig.org" >&2;} SWIG='' elif test -n "1.3.28" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SWIG version" >&5 $as_echo_n "checking for SWIG version... " >&6; } swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $swig_version" >&5 $as_echo "$swig_version" >&6; } if test -n "$swig_version" ; then # Calculate the required version number components required=1.3.28 required_major=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_major" ; then required_major=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_minor=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_minor" ; then required_minor=0 fi required=`echo $required | sed 's/[0-9]*[^0-9]//'` required_patch=`echo $required | sed 's/[^0-9].*//'` if test -z "$required_patch" ; then required_patch=0 fi # Calculate the available version number components available=$swig_version available_major=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_major" ; then available_major=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_minor=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_minor" ; then available_minor=0 fi available=`echo $available | sed 's/[0-9]*[^0-9]//'` available_patch=`echo $available | sed 's/[^0-9].*//'` if test -z "$available_patch" ; then available_patch=0 fi required_full=`printf %2.2d%2.2d%2.2d%2.2d $required_major $required_minor $required_patch` available_full=`printf %2.2d%2.2d%2.2d%2.2d $available_major $available_minor $available_patch` if test $available_full -lt $required_full; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= 1.3.28 is required. You have $swig_version. You should look at http://www.swig.org" >&5 $as_echo "$as_me: WARNING: SWIG version >= 1.3.28 is required. You have $swig_version. You should look at http://www.swig.org" >&2;} SWIG='' else { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG executable is '$SWIG'" >&5 $as_echo "$as_me: SWIG executable is '$SWIG'" >&6;} SWIG_LIB=`$SWIG -swiglib | sed -e :a -e N -e 's/\n/ /' -e ta` { $as_echo "$as_me:${as_lineno-$LINENO}: SWIG library directory is '$SWIG_LIB'" >&5 $as_echo "$as_me: SWIG library directory is '$SWIG_LIB'" >&6;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine SWIG version" >&5 $as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;} SWIG='' fi fi if test x"$SWIG" != "x"; then SWIG="$SWIG -c++" use_swig=true fi fi if test x"$use_swig" = xtrue ; then ENABLE_SWIG_TRUE= ENABLE_SWIG_FALSE='#' else ENABLE_SWIG_TRUE='#' ENABLE_SWIG_FALSE= fi if test x"$use_python" = xtrue; then # Find any Python interpreter. if test -z "$PYTHON"; then for ac_prog in python python2 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PYTHON+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON" && break done test -n "$PYTHON" || PYTHON=":" fi am_display_PYTHON=python if test "$PYTHON" = :; then as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if test "${am_cv_python_version+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if test "${am_cv_python_platform+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if test "${am_cv_python_pythondir+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if test "${am_cv_python_pyexecdir+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi # # should allow for checking of python version here... # base_python_path=`echo $PYTHON | sed "s,/bin.*$,,"` # Need to fix up a couple of problems on Windows/MingW: # 1. python lib is named with MAJOR.VERSION collapsed in a single value, # so libpython2.4 versus libpython24 # 2. Directory names have the same issue as item 1 so # python2.4 versus python24 # 3. Change paths from c:\python\include to c:/python/include. if test $am_cv_python_platform = "win32" ; then # Fix python path base_python_path=`echo $PYTHON | sed "s,/[^/]*$,,"` PYTHON_VERSION=`echo $PYTHON_VERSION | sed "s/\.//"` PYTHON_VERSION=$PYTHON_VERSION pythondir=`echo $pythondir | sed 's,\\\,/,g'` pkgpythondir=\${pythondir}/$PACKAGE pyexecdir=`echo $pyexecdir | sed 's,\\\,/,g'` pkgpyexecdir=\${pyexecdir}/$PACKAGE fi # Check for Python include path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5 $as_echo_n "checking for Python include path... " >&6; } for i in "$base_python_path/include/python$PYTHON_VERSION/" "$base_python_path/include/python/" "$base_python_path/include/" "$base_python_path/" ; do python_path=`find $i -type f -name Python.h -print 2> /dev/null | sed "1q"` if test -n "$python_path" ; then break fi done python_path=`echo $python_path | sed "s,/Python.h$,,"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_path" >&5 $as_echo "$python_path" >&6; } if test -z "$python_path" ; then as_fn_error $? "cannot find Python include path" "$LINENO" 5 fi PYTHON_CPPFLAGS=-I$python_path # Check for Python library path { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python library path" >&5 $as_echo_n "checking for Python library path... " >&6; } for i in "$base_python_path/lib/python$PYTHON_VERSION/config/" "$base_python_path/lib/python$PYTHON_VERSION/" "$base_python_path/lib/python/config/" "$base_python_path/lib/python/" "$base_python_path/" "$base_python_path/libs/" ; do python_path=`find $i -name libpython$PYTHON_VERSION.* -print 2> /dev/null | sed "1q"` if test -n "$python_path" ; then break fi done python_path=`echo $python_path | sed "s,/libpython.*$,,"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $python_path" >&5 $as_echo "$python_path" >&6; } if test -z "$python_path" ; then as_fn_error $? "cannot find Python library path" "$LINENO" 5 fi PYTHON_LDFLAGS="-L$python_path -lpython$PYTHON_VERSION" # python_site=`echo $base_python_path | sed "s/config/site-packages/"` PYTHON_SITE_PKG=$python_site # # libraries which must be linked in when embedding # { $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra libraries" >&5 $as_echo_n "checking python extra libraries... " >&6; } PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ conf = distutils.sysconfig.get_config_var; \ print (conf('LOCALMODLIBS') or '')+' '+(conf('LIBS') or '')" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LIBS" >&5 $as_echo "$PYTHON_EXTRA_LIBS" >&6; }` test "x" != "xno" || swig_shadow=" -noproxy" SWIG_PYTHON_OPT="-python -modern$swig_shadow" SWIG_PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS if test x"$PYTHON" = "x"; then use_python=false fi fi if test x"$use_python" = xtrue; then ENABLE_PYTHON_TRUE= ENABLE_PYTHON_FALSE='#' else ENABLE_PYTHON_TRUE='#' ENABLE_PYTHON_FALSE= fi if test x"$use_ruby" = xtrue; then # Extract the first word of "ruby", so it can be a program name with args. set dummy ruby; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RUBY+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RUBY in [\\/]* | ?:[\\/]*) ac_cv_path_RUBY="$RUBY" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RUBY="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RUBY=$ac_cv_path_RUBY if test -n "$RUBY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5 $as_echo "$RUBY" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$RUBY" ; then as_fn_error $? "Could not find ruby interpreter." "$LINENO" 5 RUBY='' else RUBY_VERSION=`$RUBY -e "puts RUBY_VERSION"` RUBY_BIN_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["bindir"] || Config::CONFIG["bindir"]'` RUBY_SITE_ARCH=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["sitearch"] || Config::CONFIG["sitearch"]'` RUBY_INCLUDE_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"]'` RUBY_LIB_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["libdir"] || Config::CONFIG["libdir"]'` RUBY_EXTENSION_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["sitearchdir"] || Config::CONFIG["sitearchdir"]'` RUBY_SO_NAME=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["LIBRUBY_SO"] || Config::CONFIG["RUBY_SO_NAME"]'` RUBY_SHARED_LIB=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG["LIBRUBY"] || Config::CONFIG["LIBRUBY"]'` { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby executable is '$RUBY'" >&5 $as_echo "$as_me: Ruby executable is '$RUBY'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby version is '$RUBY_VERSION'" >&5 $as_echo "$as_me: Ruby version is '$RUBY_VERSION'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby bin directory is '$RUBY_BIN_DIR'" >&5 $as_echo "$as_me: Ruby bin directory is '$RUBY_BIN_DIR'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby site arch is '$RUBY_SITE_ARCH'" >&5 $as_echo "$as_me: Ruby site arch is '$RUBY_SITE_ARCH'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby include directory is '$RUBY_INCLUDE_DIR'" >&5 $as_echo "$as_me: Ruby include directory is '$RUBY_INCLUDE_DIR'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby library directory is '$RUBY_LIB_DIR'" >&5 $as_echo "$as_me: Ruby library directory is '$RUBY_LIB_DIR'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby extension directory is '$RUBY_EXTENSION_DIR'" >&5 $as_echo "$as_me: Ruby extension directory is '$RUBY_EXTENSION_DIR'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby library is '$RUBY_SO_NAME'" >&5 $as_echo "$as_me: Ruby library is '$RUBY_SO_NAME'" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Ruby import library is '$RUBY_SHARED_LIB'" >&5 $as_echo "$as_me: Ruby import library is '$RUBY_SHARED_LIB'" >&6;} fi if test x"$RUBY" = x; then use_ruby=false fi fi if test x"$use_ruby" = xtrue ; then ENABLE_RUBY_TRUE= ENABLE_RUBY_FALSE='#' else ENABLE_RUBY_TRUE='#' ENABLE_RUBY_FALSE= fi if test x"$use_php" = xtrue; then # Extract the first word of "php-config", so it can be a program name with args. set dummy php-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PHP_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PHP_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PHP_CONFIG="$PHP_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PHP_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PHP_CONFIG=$ac_cv_path_PHP_CONFIG if test -n "$PHP_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHP_CONFIG" >&5 $as_echo "$PHP_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$PHP_CONFIG" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: php-config not found, php support disabled" >&5 $as_echo "$as_me: WARNING: php-config not found, php support disabled" >&2;} use_php=false else # Extract the first word of "php", so it can be a program name with args. set dummy php; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PHP+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PHP in [\\/]* | ?:[\\/]*) ac_cv_path_PHP="$PHP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PHP=$ac_cv_path_PHP if test -n "$PHP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHP" >&5 $as_echo "$PHP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "phpunit", so it can be a program name with args. set dummy phpunit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PHPUNIT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PHPUNIT in [\\/]* | ?:[\\/]*) ac_cv_path_PHPUNIT="$PHPUNIT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PHPUNIT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PHPUNIT=$ac_cv_path_PHPUNIT if test -n "$PHPUNIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHPUNIT" >&5 $as_echo "$PHPUNIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test x"$use_php" = xtrue ; then ENABLE_PHP_TRUE= ENABLE_PHP_FALSE='#' else ENABLE_PHP_TRUE='#' ENABLE_PHP_FALSE= fi if test x"$PHP" != x ; then HAVE_PHP_TRUE= HAVE_PHP_FALSE='#' else HAVE_PHP_TRUE='#' HAVE_PHP_FALSE= fi if test x"$PHPUNIT" != x ; then HAVE_PHP_UNIT_TRUE= HAVE_PHP_UNIT_FALSE='#' else HAVE_PHP_UNIT_TRUE='#' HAVE_PHP_UNIT_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking OS-specific settings" >&5 $as_echo_n "checking OS-specific settings... " >&6; } case "${host_os}" in *darwin*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${host_os}" >&5 $as_echo "${host_os}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OS/X version" >&5 $as_echo_n "checking for OS/X version... " >&6; } kernel=`uname -r` # "Darwin 9.6.0" is Mac OSX 10.5.6 # "Darwin 10.x" would presumably be Mac OS X 10.6.x case "${kernel}" in 8.*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Mac OS X 10.4 Tiger" >&5 $as_echo "Mac OS X 10.4 Tiger" >&6; } ;; 9.*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Mac OS X 10.5 Leopard" >&5 $as_echo "Mac OS X 10.5 Leopard" >&6; } ;; 10.*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Mac OS X 10.6 Snow Leopard" >&5 $as_echo "Mac OS X 10.6 Snow Leopard" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Mac OS X (Darwin ${kernel} kernel)" >&5 $as_echo "Mac OS X (Darwin ${kernel} kernel)" >&6; } ;; esac ;; esac ac_config_files="$ac_config_files Makefile capi/Makefile capi/geos_c.h doc/Doxyfile doc/Makefile macros/Makefile src/Makefile src/algorithm/Makefile src/algorithm/locate/Makefile src/algorithm/distance/Makefile src/geom/Makefile src/geom/prep/Makefile src/geom/util/Makefile src/geomgraph/Makefile src/geomgraph/index/Makefile include/Makefile include/geos/Makefile include/geos/algorithm/Makefile include/geos/algorithm/locate/Makefile include/geos/algorithm/distance/Makefile include/geos/geom/Makefile include/geos/geom/prep/Makefile include/geos/geom/util/Makefile include/geos/geomgraph/Makefile include/geos/geomgraph/index/Makefile include/geos/index/Makefile include/geos/index/bintree/Makefile include/geos/index/chain/Makefile include/geos/index/intervalrtree/Makefile include/geos/index/quadtree/Makefile include/geos/index/strtree/Makefile include/geos/index/sweepline/Makefile include/geos/io/Makefile include/geos/linearref/Makefile include/geos/noding/Makefile include/geos/noding/snapround/Makefile include/geos/operation/Makefile include/geos/operation/buffer/Makefile include/geos/operation/distance/Makefile include/geos/operation/linemerge/Makefile include/geos/operation/overlay/Makefile include/geos/operation/overlay/snap/Makefile include/geos/operation/polygonize/Makefile include/geos/operation/predicate/Makefile include/geos/operation/relate/Makefile include/geos/operation/sharedpaths/Makefile include/geos/operation/union/Makefile include/geos/operation/valid/Makefile include/geos/planargraph/Makefile include/geos/planargraph/algorithm/Makefile include/geos/precision/Makefile include/geos/simplify/Makefile include/geos/triangulate/Makefile include/geos/triangulate/quadedge/Makefile include/geos/util/Makefile include/geos/version.h src/index/Makefile src/index/bintree/Makefile src/index/chain/Makefile src/index/intervalrtree/Makefile src/index/quadtree/Makefile src/index/strtree/Makefile src/index/sweepline/Makefile src/io/Makefile src/linearref/Makefile src/noding/Makefile src/noding/snapround/Makefile src/operation/Makefile src/operation/buffer/Makefile src/operation/distance/Makefile src/operation/linemerge/Makefile src/operation/overlay/Makefile src/operation/polygonize/Makefile src/operation/predicate/Makefile src/operation/relate/Makefile src/operation/sharedpaths/Makefile src/operation/union/Makefile src/operation/valid/Makefile src/planargraph/Makefile src/precision/Makefile src/simplify/Makefile src/triangulate/Makefile src/triangulate/quadedge/Makefile src/util/Makefile swig/geos.i swig/Makefile swig/python/Makefile swig/python/tests/Makefile swig/ruby/Makefile swig/ruby/test/Makefile php/Makefile php/test/Makefile tests/Makefile tests/bigtest/Makefile tests/unit/Makefile tests/perf/Makefile tests/perf/operation/Makefile tests/perf/operation/buffer/Makefile tests/perf/operation/predicate/Makefile tests/perf/capi/Makefile tests/xmltester/Makefile tests/geostest/Makefile tests/thread/Makefile tools/Makefile tools/geos-config" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SWIG_TRUE}" && test -z "${ENABLE_SWIG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SWIG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PYTHON_TRUE}" && test -z "${ENABLE_PYTHON_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_RUBY_TRUE}" && test -z "${ENABLE_RUBY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_RUBY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PHP_TRUE}" && test -z "${ENABLE_PHP_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PHP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PHP_TRUE}" && test -z "${HAVE_PHP_FALSE}"; then as_fn_error $? "conditional \"HAVE_PHP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PHP_UNIT_TRUE}" && test -z "${HAVE_PHP_UNIT_FALSE}"; then as_fn_error $? "conditional \"HAVE_PHP_UNIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; "include/geos/platform.h") CONFIG_HEADERS="$CONFIG_HEADERS include/geos/platform.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "capi/Makefile") CONFIG_FILES="$CONFIG_FILES capi/Makefile" ;; "capi/geos_c.h") CONFIG_FILES="$CONFIG_FILES capi/geos_c.h" ;; "doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "macros/Makefile") CONFIG_FILES="$CONFIG_FILES macros/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/algorithm/Makefile") CONFIG_FILES="$CONFIG_FILES src/algorithm/Makefile" ;; "src/algorithm/locate/Makefile") CONFIG_FILES="$CONFIG_FILES src/algorithm/locate/Makefile" ;; "src/algorithm/distance/Makefile") CONFIG_FILES="$CONFIG_FILES src/algorithm/distance/Makefile" ;; "src/geom/Makefile") CONFIG_FILES="$CONFIG_FILES src/geom/Makefile" ;; "src/geom/prep/Makefile") CONFIG_FILES="$CONFIG_FILES src/geom/prep/Makefile" ;; "src/geom/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/geom/util/Makefile" ;; "src/geomgraph/Makefile") CONFIG_FILES="$CONFIG_FILES src/geomgraph/Makefile" ;; "src/geomgraph/index/Makefile") CONFIG_FILES="$CONFIG_FILES src/geomgraph/index/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/geos/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/Makefile" ;; "include/geos/algorithm/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/algorithm/Makefile" ;; "include/geos/algorithm/locate/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/algorithm/locate/Makefile" ;; "include/geos/algorithm/distance/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/algorithm/distance/Makefile" ;; "include/geos/geom/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/geom/Makefile" ;; "include/geos/geom/prep/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/geom/prep/Makefile" ;; "include/geos/geom/util/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/geom/util/Makefile" ;; "include/geos/geomgraph/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/geomgraph/Makefile" ;; "include/geos/geomgraph/index/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/geomgraph/index/Makefile" ;; "include/geos/index/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/Makefile" ;; "include/geos/index/bintree/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/bintree/Makefile" ;; "include/geos/index/chain/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/chain/Makefile" ;; "include/geos/index/intervalrtree/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/intervalrtree/Makefile" ;; "include/geos/index/quadtree/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/quadtree/Makefile" ;; "include/geos/index/strtree/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/strtree/Makefile" ;; "include/geos/index/sweepline/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/index/sweepline/Makefile" ;; "include/geos/io/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/io/Makefile" ;; "include/geos/linearref/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/linearref/Makefile" ;; "include/geos/noding/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/noding/Makefile" ;; "include/geos/noding/snapround/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/noding/snapround/Makefile" ;; "include/geos/operation/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/Makefile" ;; "include/geos/operation/buffer/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/buffer/Makefile" ;; "include/geos/operation/distance/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/distance/Makefile" ;; "include/geos/operation/linemerge/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/linemerge/Makefile" ;; "include/geos/operation/overlay/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/overlay/Makefile" ;; "include/geos/operation/overlay/snap/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/overlay/snap/Makefile" ;; "include/geos/operation/polygonize/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/polygonize/Makefile" ;; "include/geos/operation/predicate/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/predicate/Makefile" ;; "include/geos/operation/relate/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/relate/Makefile" ;; "include/geos/operation/sharedpaths/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/sharedpaths/Makefile" ;; "include/geos/operation/union/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/union/Makefile" ;; "include/geos/operation/valid/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/operation/valid/Makefile" ;; "include/geos/planargraph/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/planargraph/Makefile" ;; "include/geos/planargraph/algorithm/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/planargraph/algorithm/Makefile" ;; "include/geos/precision/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/precision/Makefile" ;; "include/geos/simplify/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/simplify/Makefile" ;; "include/geos/triangulate/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/triangulate/Makefile" ;; "include/geos/triangulate/quadedge/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/triangulate/quadedge/Makefile" ;; "include/geos/util/Makefile") CONFIG_FILES="$CONFIG_FILES include/geos/util/Makefile" ;; "include/geos/version.h") CONFIG_FILES="$CONFIG_FILES include/geos/version.h" ;; "src/index/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/Makefile" ;; "src/index/bintree/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/bintree/Makefile" ;; "src/index/chain/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/chain/Makefile" ;; "src/index/intervalrtree/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/intervalrtree/Makefile" ;; "src/index/quadtree/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/quadtree/Makefile" ;; "src/index/strtree/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/strtree/Makefile" ;; "src/index/sweepline/Makefile") CONFIG_FILES="$CONFIG_FILES src/index/sweepline/Makefile" ;; "src/io/Makefile") CONFIG_FILES="$CONFIG_FILES src/io/Makefile" ;; "src/linearref/Makefile") CONFIG_FILES="$CONFIG_FILES src/linearref/Makefile" ;; "src/noding/Makefile") CONFIG_FILES="$CONFIG_FILES src/noding/Makefile" ;; "src/noding/snapround/Makefile") CONFIG_FILES="$CONFIG_FILES src/noding/snapround/Makefile" ;; "src/operation/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/Makefile" ;; "src/operation/buffer/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/buffer/Makefile" ;; "src/operation/distance/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/distance/Makefile" ;; "src/operation/linemerge/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/linemerge/Makefile" ;; "src/operation/overlay/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/overlay/Makefile" ;; "src/operation/polygonize/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/polygonize/Makefile" ;; "src/operation/predicate/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/predicate/Makefile" ;; "src/operation/relate/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/relate/Makefile" ;; "src/operation/sharedpaths/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/sharedpaths/Makefile" ;; "src/operation/union/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/union/Makefile" ;; "src/operation/valid/Makefile") CONFIG_FILES="$CONFIG_FILES src/operation/valid/Makefile" ;; "src/planargraph/Makefile") CONFIG_FILES="$CONFIG_FILES src/planargraph/Makefile" ;; "src/precision/Makefile") CONFIG_FILES="$CONFIG_FILES src/precision/Makefile" ;; "src/simplify/Makefile") CONFIG_FILES="$CONFIG_FILES src/simplify/Makefile" ;; "src/triangulate/Makefile") CONFIG_FILES="$CONFIG_FILES src/triangulate/Makefile" ;; "src/triangulate/quadedge/Makefile") CONFIG_FILES="$CONFIG_FILES src/triangulate/quadedge/Makefile" ;; "src/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/Makefile" ;; "swig/geos.i") CONFIG_FILES="$CONFIG_FILES swig/geos.i" ;; "swig/Makefile") CONFIG_FILES="$CONFIG_FILES swig/Makefile" ;; "swig/python/Makefile") CONFIG_FILES="$CONFIG_FILES swig/python/Makefile" ;; "swig/python/tests/Makefile") CONFIG_FILES="$CONFIG_FILES swig/python/tests/Makefile" ;; "swig/ruby/Makefile") CONFIG_FILES="$CONFIG_FILES swig/ruby/Makefile" ;; "swig/ruby/test/Makefile") CONFIG_FILES="$CONFIG_FILES swig/ruby/test/Makefile" ;; "php/Makefile") CONFIG_FILES="$CONFIG_FILES php/Makefile" ;; "php/test/Makefile") CONFIG_FILES="$CONFIG_FILES php/test/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "tests/bigtest/Makefile") CONFIG_FILES="$CONFIG_FILES tests/bigtest/Makefile" ;; "tests/unit/Makefile") CONFIG_FILES="$CONFIG_FILES tests/unit/Makefile" ;; "tests/perf/Makefile") CONFIG_FILES="$CONFIG_FILES tests/perf/Makefile" ;; "tests/perf/operation/Makefile") CONFIG_FILES="$CONFIG_FILES tests/perf/operation/Makefile" ;; "tests/perf/operation/buffer/Makefile") CONFIG_FILES="$CONFIG_FILES tests/perf/operation/buffer/Makefile" ;; "tests/perf/operation/predicate/Makefile") CONFIG_FILES="$CONFIG_FILES tests/perf/operation/predicate/Makefile" ;; "tests/perf/capi/Makefile") CONFIG_FILES="$CONFIG_FILES tests/perf/capi/Makefile" ;; "tests/xmltester/Makefile") CONFIG_FILES="$CONFIG_FILES tests/xmltester/Makefile" ;; "tests/geostest/Makefile") CONFIG_FILES="$CONFIG_FILES tests/geostest/Makefile" ;; "tests/thread/Makefile") CONFIG_FILES="$CONFIG_FILES tests/thread/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/geos-config") CONFIG_FILES="$CONFIG_FILES tools/geos-config" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$AS # DLL creation program. DLLTOOL=$DLLTOOL # Object dumper program. OBJDUMP=$OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "Swig: $use_swig" echo "Python bindings: $use_python" echo "Ruby bindings: $use_ruby" echo "PHP bindings: $use_php" if test x"$use_php" = xtrue; then echo " PHP: $PHP" echo " PHPUNIT: $PHPUNIT" if test x"$PHP" = x -o x"$PHPUNIT" = x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PHP Unit testing disabled (missing PHP or PHPUNIT)" >&5 $as_echo "$as_me: WARNING: PHP Unit testing disabled (missing PHP or PHPUNIT)" >&2;} fi fi geos-3.4.2/configure.in0000644000175000017500000003710012206417150014605 0ustar frankiefrankiednl dnl configure.in - autoconf input template to produce ./configure script dnl dnl version 2.52 is required for Cygwin libtool support AC_PREREQ([2.52]) dnl local vars to hold user's preferences -------------------------------- AC_INIT([include/geos.h]) AC_CANONICAL_SYSTEM AC_CONFIG_MACRO_DIR([macros]) dnl -- JTS_PORT: the version of JTS this release is bound to JTS_PORT=1.12.0 dnl -- Version info for the CAPI CAPI_INTERFACE_CURRENT=9 CAPI_INTERFACE_REVISION=2 CAPI_INTERFACE_AGE=8 dnl dnl -- Release versions / C++ library SONAME will use these dnl -- encoding ABI break at every release dnl VERSION_MAJOR=3 VERSION_MINOR=4 VERSION_PATCH=2 VERSION="$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH" dnl CAPI_VERSION_MAJOR=$(($CAPI_INTERFACE_CURRENT-$CAPI_INTERFACE_AGE)) dnl the following should be more portable CAPI_VERSION_MAJOR=`expr $CAPI_INTERFACE_CURRENT - $CAPI_INTERFACE_AGE` CAPI_VERSION_MINOR=$CAPI_INTERFACE_AGE CAPI_VERSION_PATCH=$CAPI_INTERFACE_REVISION CAPI_VERSION="$CAPI_VERSION_MAJOR.$CAPI_VERSION_MINOR.$CAPI_VERSION_PATCH" AM_INIT_AUTOMAKE([geos], [$VERSION], [no-define]) AM_MAINTAINER_MODE AC_CONFIG_HEADERS([include/config.h] [include/geos/platform.h]) AC_PROG_CC dnl use libtool ---------------------------------------------------------- AC_LIBTOOL_DLOPEN AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL dnl check for programs ---------------------------------------------------- AC_PROG_CXX AC_ISC_POSIX AC_PROG_INSTALL AC_PROG_MAKE_SET dnl function checks ------------------------------------------------------ AC_FUNC_CLOSEDIR_VOID AC_FUNC_MEMCMP AC_FUNC_STRFTIME AC_FUNC_VPRINTF AC_FUNC_ALLOCA AC_HEADER_DIRENT AC_HEADER_STDC AC_CHECK_HEADERS([memory.h]) AC_CHECK_HEADERS([unistd.h]) AC_CHECK_HEADERS([ieeefp.h]) AC_CHECK_HEADERS([sys/file.h]) AC_CHECK_HEADERS([sys/time.h]) AC_CHECK_FUNCS([strchr memcpy gettimeofday]) AC_HEADER_STAT AC_STRUCT_TM AC_TYPE_SIZE_T AC_C_CONST dnl -------------------------------------------------------------------- dnl - Check for inline and cassert settings dnl -------------------------------------------------------------------- AC_ARG_ENABLE([inline], [ --disable-inline Disable inlining], [case "${enableval}" in yes) enable_inline=true ;; no) enable_inline=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-inline);; esac], [enable_inline=true] ) AC_ARG_ENABLE([cassert], [ --disable-cassert Disable assertion checking], [case "${enableval}" in yes) enable_cassert=true ;; no) enable_cassert=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-cassert);; esac], [enable_cassert=true] ) AC_ARG_ENABLE([glibcxx-debug], [ --enable-glibcxx-debug Enable libstdc++ debug mode], [case "${enableval}" in yes) enable_glibcxx_debug=true ;; no) enable_glibcxx_debug=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-glibcxx-debug);; esac], [enable_glibcxx_debug=false] ) AC_MSG_CHECKING([if requested to force inline functions]) INLINE_FLAGS= AC_SUBST(INLINE_FLAGS) if test x"$enable_inline" = xtrue; then INLINE_FLAGS="-DGEOS_INLINE" AM_CXXFLAGS="$AM_CXXFLAGS $INLINE_FLAGS" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi AC_MSG_CHECKING([if requested to enable assert macros]) if test x"$enable_cassert" = xfalse; then AM_CXXFLAGS="$AM_CXXFLAGS -DNDEBUG" AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) fi AC_MSG_CHECKING([if requested libstdc++ debug mode]) if test x"$enable_glibcxx_debug" = xtrue; then AM_CXXFLAGS="$AM_CXXFLAGS -D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi dnl -------------------------------------------------------------------- dnl - Append default C++ and C flags dnl -------------------------------------------------------------------- dnl In order for AC_LIBTOOL_COMPILER_OPTION to use dnl the C compiler we need the hack below. dnl It is likely a bug in the libtool macro file to dnl require AC_LIBTOOL_LANG_CXX_CONFIG in *addition* dnl to AC_LANG(CXX) or AC_LANG_PUSH(CXX)/AC_LANG_POP() dnl AC_LIBTOOL_LANG_CXX_CONFIG # Set default AM_CXXFLAGS and AM_CFLAGS # -pedantic: ISO does not support long long # we add -Wno-long-long to avoid those messages WARNFLAGS="" AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -pedantic], [dummy_cv_pedantic], [-pedantic], [], [WARNFLAGS="$WARNFLAGS -pedantic"], []) AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -Wall], [dummy_cv_wall], [-Wall], [], [WARNFLAGS="$WARNFLAGS -Wall"], []) AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -ansi], [dummy_cv_ansi], [-ansi], [], [WARNFLAGS="$WARNFLAGS -ansi"], []) AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -Wno-long-long], [dummy_cv_no_long_long], [-Wno-long-long], [], [WARNFLAGS="$WARNFLAGS -Wno-long-long"], []) # To make numerical computation more stable, we use --ffloat-store NUMERICFLAGS="" AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -ffloat-store], [dummy_cv_ffloat_store], [-ffloat-store], [], [NUMERICFLAGS="$NUMERICFLAGS -ffloat-store"], []) DEFAULTFLAGS="${WARNFLAGS} ${NUMERICFLAGS}" AM_CXXFLAGS="${AM_CXXFLAGS} ${DEFAULTFLAGS}" AM_CFLAGS="${AM_CFLAGS} ${DEFAULTFLAGS}" AC_SUBST(AM_CXXFLAGS) AC_SUBST(AM_CFLAGS) dnl -------------------------------------------------------------------- dnl - Look for finite and/or isfinite macros/functions dnl -------------------------------------------------------------------- dnl These two tests need the math library or they won't link dnl on OpenBSD, even if the functions exist. save_LIBS=$LIBS LIBS="$LIBS -lm" AC_CACHE_CHECK([for finite], ac_cv_finite, [AC_TRY_LINK([#include ], [double x; int y; y = finite(x);], ac_cv_finite=yes, ac_cv_finite=no )]) if test x"$ac_cv_finite" = x"yes"; then AC_DEFINE(HAVE_FINITE, [1], [Has finite]) fi AC_CACHE_CHECK([for isfinite], ac_cv_isfinite, [AC_TRY_LINK([#include ], [double x; int y; y = isfinite(x);], ac_cv_isfinite=yes, ac_cv_isfinite=no )]) if test x"$ac_cv_isfinite" = x"yes"; then AC_DEFINE(HAVE_ISFINITE, [1], [Has isfinite]) fi dnl -------------------------------------------------------------------- dnl Test for presence of isnan function when using C++ and dnl This is for a particular bug in OS/X where drops the definition dnl of isnan(). AC_LANG_PUSH([C++]) AC_CACHE_CHECK([for isnan], ac_cv_isnan, [AC_TRY_LINK([#include ], [double x; int y; y = isnan(x);], ac_cv_isnan=yes, ac_cv_isnan=no )]) if test x"$ac_cv_isnan" = x"yes"; then AC_DEFINE(HAVE_ISNAN, [1], [Has isnan]) fi AC_LANG_POP([C++]) dnl -------------------------------------------------------------------- LIBS=$save_LIBS dnl -------------------------------------------------------------------- dnl - Look for a 64bit integer (do after CFLAGS is set) dnl -------------------------------------------------------------------- dnl Find a working 64bit integer PGAC_TYPE_64BIT_INT([int64_t]) if test x"$HAVE_INT64_T_64" = x"no" ; then PGAC_TYPE_64BIT_INT([long int]) if test x"$HAVE_LONG_INT_64" = x"no" ; then PGAC_TYPE_64BIT_INT([long long int]) if test x"$HAVE_LONG_LONG_INT_64" = x"no" ; then AC_MSG_WARN([Could not find a working 64bit int type, you may experience weird bugs (undefined behaviour)]); fi fi fi dnl -------------------------------------------------------------------- dnl - check whether python is required for the build dnl -------------------------------------------------------------------- AC_ARG_ENABLE([python], [ --enable-python Enable build of python module], [case "${enableval}" in yes) use_python=true ;; no) use_python=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-python) ;; esac], [use_python=false] ) dnl -------------------------------------------------------------------- dnl - check whether ruby is required for the build dnl -------------------------------------------------------------------- AC_ARG_ENABLE([ruby], [ --enable-ruby Enable build of ruby module], [case "${enableval}" in yes) use_ruby=true ;; no) use_ruby=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-ruby) ;; esac], [use_ruby=false] ) dnl -------------------------------------------------------------------- dnl - check whether php is required for the build dnl -------------------------------------------------------------------- AC_ARG_ENABLE([php], [ --enable-php Enable build of php module], [case "${enableval}" in yes) use_php=true ;; no) use_php=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-php) ;; esac], [use_php=false] ) dnl -------------------------------------------------------------------- dnl - check for swig if python, ruby or php are enabled dnl -------------------------------------------------------------------- use_swig=false if test x"$use_python" = xtrue || test x"$use_ruby" = xtrue; then AC_PROG_SWIG(1.3.28) if test x"$SWIG" != "x"; then SWIG_ENABLE_CXX AC_SUBST(SWIG) use_swig=true fi fi AM_CONDITIONAL(ENABLE_SWIG, [ test x"$use_swig" = xtrue ]) dnl -------------------------------------------------------------------- dnl - check for python if enabled dnl -------------------------------------------------------------------- if test x"$use_python" = xtrue; then dnl Check for Python AM_PATH_PYTHON SWIG_PYTHON if test x"$PYTHON" = "x"; then use_python=false fi AC_SUBST(PYTHON) AC_SUBST(SWIG_PYTHON_CPPFLAGS) AC_SUBST(SWIG_PYTHON_OPT) fi AM_CONDITIONAL(ENABLE_PYTHON, [test x"$use_python" = xtrue]) dnl -------------------------------------------------------------------- dnl - check for ruby if enabled dnl -------------------------------------------------------------------- if test x"$use_ruby" = xtrue; then dnl Check for Ruby AC_RUBY_DEVEL if test x"$RUBY" = x; then use_ruby=false fi fi AM_CONDITIONAL(ENABLE_RUBY, [ test x"$use_ruby" = xtrue ]) dnl -------------------------------------------------------------------- dnl - check for php if enabled dnl -------------------------------------------------------------------- if test x"$use_php" = xtrue; then dnl Check for PHP AC_PATH_PROG(PHP_CONFIG, php-config) if test x"$PHP_CONFIG" = x; then AC_MSG_WARN([php-config not found, php support disabled]) use_php=false else dnl TODO: check for version, we want PHP5 dev files AC_PATH_PROG(PHP, php) dnl for unit testing AC_PATH_PROG(PHPUNIT, phpunit) dnl for unit testing fi fi AM_CONDITIONAL(ENABLE_PHP, [ test x"$use_php" = xtrue ]) AM_CONDITIONAL(HAVE_PHP, [ test x"$PHP" != x ]) AM_CONDITIONAL(HAVE_PHP_UNIT, [ test x"$PHPUNIT" != x ]) dnl -------------------------------------------------------------------- dnl - do operating-system specific things dnl -------------------------------------------------------------------- AC_MSG_CHECKING([OS-specific settings]) case "${host_os}" in *darwin*) AC_MSG_RESULT([${host_os}]) AC_MSG_CHECKING([for OS/X version]) kernel=`uname -r` # "Darwin 9.6.0" is Mac OSX 10.5.6 # "Darwin 10.x" would presumably be Mac OS X 10.6.x case "${kernel}" in 8.*) AC_MSG_RESULT([Mac OS X 10.4 Tiger]) ;; 9.*) AC_MSG_RESULT([Mac OS X 10.5 Leopard]) ;; 10.*) dnl AM_CXXFLAGS="$AM_CXXFLAGS -Wnon-virtual-dtor -Woverloaded-virtual" AC_MSG_RESULT([Mac OS X 10.6 Snow Leopard]) ;; *) AC_MSG_RESULT([Mac OS X (Darwin ${kernel} kernel)]) ;; esac ;; esac dnl -------------------------------------------------------------------- dnl - check for boost dnl -------------------------------------------------------------------- dnl -- AX_BOOST(1.32) dnl -- if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then dnl -- use_boost_utf=yes dnl -- else dnl -- use_boost_utf=no dnl -- fi dnl -- AM_CONDITIONAL(ENABLE_BOOST_UTF, [test "x$use_boost_utf" = "xyes"]) dnl things to substitute in output ---------------------------------------- AC_SUBST(VERSION) AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_PATCH) AC_SUBST(INTERFACE_CURRENT) AC_SUBST(INTERFACE_REVISION) AC_SUBST(INTERFACE_AGE) AC_SUBST(JTS_PORT) AC_SUBST(CAPI_VERSION) AC_SUBST(CAPI_VERSION_MAJOR) AC_SUBST(CAPI_VERSION_MINOR) AC_SUBST(CAPI_VERSION_PATCH) AC_SUBST(CAPI_INTERFACE_CURRENT) AC_SUBST(CAPI_INTERFACE_REVISION) AC_SUBST(CAPI_INTERFACE_AGE) dnl output stuff ---------------------------------------------------------- AC_OUTPUT([ Makefile capi/Makefile capi/geos_c.h doc/Doxyfile doc/Makefile macros/Makefile src/Makefile src/algorithm/Makefile src/algorithm/locate/Makefile src/algorithm/distance/Makefile src/geom/Makefile src/geom/prep/Makefile src/geom/util/Makefile src/geomgraph/Makefile src/geomgraph/index/Makefile include/Makefile include/geos/Makefile include/geos/algorithm/Makefile include/geos/algorithm/locate/Makefile include/geos/algorithm/distance/Makefile include/geos/geom/Makefile include/geos/geom/prep/Makefile include/geos/geom/util/Makefile include/geos/geomgraph/Makefile include/geos/geomgraph/index/Makefile include/geos/index/Makefile include/geos/index/bintree/Makefile include/geos/index/chain/Makefile include/geos/index/intervalrtree/Makefile include/geos/index/quadtree/Makefile include/geos/index/strtree/Makefile include/geos/index/sweepline/Makefile include/geos/io/Makefile include/geos/linearref/Makefile include/geos/noding/Makefile include/geos/noding/snapround/Makefile include/geos/operation/Makefile include/geos/operation/buffer/Makefile include/geos/operation/distance/Makefile include/geos/operation/linemerge/Makefile include/geos/operation/overlay/Makefile include/geos/operation/overlay/snap/Makefile include/geos/operation/polygonize/Makefile include/geos/operation/predicate/Makefile include/geos/operation/relate/Makefile include/geos/operation/sharedpaths/Makefile include/geos/operation/union/Makefile include/geos/operation/valid/Makefile include/geos/planargraph/Makefile include/geos/planargraph/algorithm/Makefile include/geos/precision/Makefile include/geos/simplify/Makefile include/geos/triangulate/Makefile include/geos/triangulate/quadedge/Makefile include/geos/util/Makefile include/geos/version.h src/index/Makefile src/index/bintree/Makefile src/index/chain/Makefile src/index/intervalrtree/Makefile src/index/quadtree/Makefile src/index/strtree/Makefile src/index/sweepline/Makefile src/io/Makefile src/linearref/Makefile src/noding/Makefile src/noding/snapround/Makefile src/operation/Makefile src/operation/buffer/Makefile src/operation/distance/Makefile src/operation/linemerge/Makefile src/operation/overlay/Makefile src/operation/polygonize/Makefile src/operation/predicate/Makefile src/operation/relate/Makefile src/operation/sharedpaths/Makefile src/operation/union/Makefile src/operation/valid/Makefile src/planargraph/Makefile src/precision/Makefile src/simplify/Makefile src/triangulate/Makefile src/triangulate/quadedge/Makefile src/util/Makefile swig/geos.i swig/Makefile swig/python/Makefile swig/python/tests/Makefile swig/ruby/Makefile swig/ruby/test/Makefile php/Makefile php/test/Makefile tests/Makefile tests/bigtest/Makefile tests/unit/Makefile tests/perf/Makefile tests/perf/operation/Makefile tests/perf/operation/buffer/Makefile tests/perf/operation/predicate/Makefile tests/perf/capi/Makefile tests/xmltester/Makefile tests/geostest/Makefile tests/thread/Makefile tools/Makefile tools/geos-config ]) dnl -- echo "---------------------------------------" dnl -- echo "Boost UTF: $use_boost_utf" echo "Swig: $use_swig" echo "Python bindings: $use_python" echo "Ruby bindings: $use_ruby" echo "PHP bindings: $use_php" if test x"$use_php" = xtrue; then echo " PHP: $PHP" echo " PHPUNIT: $PHPUNIT" if test x"$PHP" = x -o x"$PHPUNIT" = x; then AC_MSG_WARN([PHP Unit testing disabled (missing PHP or PHPUNIT)]) fi fi dnl -- echo "---------------------------------------" geos-3.4.2/depcomp0000755000175000017500000004426712206417160013666 0ustar frankiefrankie#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # 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 2, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: geos-3.4.2/doc/0000755000175000017500000000000012206417240013040 5ustar frankiefrankiegeos-3.4.2/doc/Doxyfile0000644000175000017500000011106112206417201014543 0ustar frankiefrankie# Doxyfile 1.2.15 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = GEOS # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 3.4.2 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxygen_docs # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, # German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, # Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explict @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consist of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./../src ./../include ./../capi # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = */examples/* */test/* */bigtest/* */io/markup/* config.h acconfig.h CoordinateList.cpp NonRobustLineIntersector.cpp RobustLineIntersector.cpp # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse. FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the Html help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, # or Internet explorer 4.0+). Note that for large projects the tree generation # can take a very long time. In such cases it is better to disable this feature. # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_XML = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line and do not end with a semicolon. Such function macros are typically # used for boiler-plate code, and will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superceded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yield more powerful graphs. CLASS_DIAGRAMS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermedate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. #CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. #CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. #DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. #DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. #BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. #EXT_DOC_PATHS = geos-3.4.2/doc/Doxyfile.in0000644000175000017500000011111212206417147015156 0ustar frankiefrankie# Doxyfile 1.2.15 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = GEOS # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxygen_docs # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, # German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, # Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explict @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consist of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @srcdir@/../src @srcdir@/../include @srcdir@/../capi # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = */examples/* */test/* */bigtest/* */io/markup/* config.h acconfig.h CoordinateList.cpp NonRobustLineIntersector.cpp RobustLineIntersector.cpp # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse. FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the Html help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, # or Internet explorer 4.0+). Note that for large projects the tree generation # can take a very long time. In such cases it is better to disable this feature. # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_XML = NO #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line and do not end with a semicolon. Such function macros are typically # used for boiler-plate code, and will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superceded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yield more powerful graphs. CLASS_DIAGRAMS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermedate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. #CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. #CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. #DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. #DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. #BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. #EXT_DOC_PATHS = geos-3.4.2/doc/Makefile.am0000644000175000017500000000065512206417147015110 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ top_builddir=@top_builddir@ noinst_PROGRAMS = example LIBS = $(top_builddir)/src/libgeos.la example_SOURCES = example.cpp example_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include DOXYGEN = doxygen doxygen-html apidoc doxygen: Doxyfile $(DOXYGEN) $< clean-local: rm -Rf doxygen_docs EXTRA_DIST = Doxyfile geos-3.4.2/doc/Makefile.in0000644000175000017500000004036212206417160015113 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = example$(EXEEXT) subdir = doc DIST_COMMON = README $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = Doxyfile CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_example_OBJECTS = example.$(OBJEXT) example_OBJECTS = $(am_example_OBJECTS) example_DEPENDENCIES = $(LIBS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(example_SOURCES) DIST_SOURCES = $(example_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(top_builddir)/src/libgeos.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ example_SOURCES = example.cpp example_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include DOXYGEN = doxygen EXTRA_DIST = Doxyfile all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list example$(EXEEXT): $(example_OBJECTS) $(example_DEPENDENCIES) @rm -f example$(EXEEXT) $(CXXLINK) $(example_OBJECTS) $(example_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-local clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am doxygen-html apidoc doxygen: Doxyfile $(DOXYGEN) $< clean-local: rm -Rf doxygen_docs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/doc/README0000644000175000017500000000014412206417147013725 0ustar frankiefrankieTo build Doxygen documentation use: make doxygen-html Take a look at example.cpp to get started. geos-3.4.2/doc/example.cpp0000644000175000017500000007267712206417147015230 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************* * * This file should document by example usage of the GEOS library. * It could actually be a live discuss-by-example board for * architectural design choices. * * --strk; * * DEBUGGING TIPS: * use -D__USE_MALLOC at compile time for gcc 2.91, 2.95, 3.0 and 3.1 * and GLIBCXX_FORCE_NEW or GLIBCPP_FORCE_NEW at run time with gcc 3.2.2+ * to force libstdc++ avoid caching memory. This should remove some * obscure reports from memory checkers like valgrind. * **********************************************************************/ #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 // exit() #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // Set to 0 to skip section #define GEOMETRIC_SHAPES 1 #define RELATIONAL_OPERATORS 1 #define COMBINATIONS 1 #define UNARY_OPERATIONS 1 #define LINEMERGE 1 #define POLYGONIZE 1 using namespace std; using namespace geos; using namespace geos::geom; using namespace geos::operation::polygonize; using namespace geos::operation::linemerge; using geos::util::GEOSException; using geos::util::IllegalArgumentException; // Prototypes void wkt_print_geoms(vector *geoms); // This object will be used to construct our geometries. // It might be bypassed by directly call geometry constructors, // but that would be boring because you'd need to specify // a PrecisionModel and a SRID everytime: those infos are // cached inside a GeometryFactory object. GeometryFactory *global_factory; //#define DEBUG_STREAM_STATE 1 // // This function tests writing and reading WKB // TODO: // - compare input and output geometries for equality // - remove debugging lines (on stream state) // void WKBtest(vector*geoms) { stringstream s(ios_base::binary|ios_base::in|ios_base::out); io::WKBReader wkbReader(*global_factory); io::WKBWriter wkbWriter; Geometry *gout; #if DEBUG_STREAM_STATE cout<<"WKBtest: machine byte order: "<size(); for (unsigned int i=0; inormalize(); gout->normalize(); int failed = gin->compareTo(gout); if ( failed ) cout<<"{"< *geoms) { WKBtest(geoms); // test WKB parser // WKT-print given geometries io::WKTWriter *wkt = new io::WKTWriter(); for (unsigned int i=0; isize(); i++) { const Geometry *g = (*geoms)[i]; string tmp=wkt->write(g); cout<<"["<createPoint(c); return p; } // This function will create a LinearString // geometry with the shape of the letter U // having top-left corner at given coordinates // and 'side' height and width LineString * create_ushaped_linestring(double xoffset, double yoffset, double side) { // We will use a coordinate list to build the linestring CoordinateSequence *cl = new CoordinateArraySequence(); cl->add(Coordinate(xoffset, yoffset)); cl->add(Coordinate(xoffset, yoffset+side)); cl->add(Coordinate(xoffset+side, yoffset+side)); cl->add(Coordinate(xoffset+side, yoffset)); // Now that we have a CoordinateSequence we can create // the linestring. // The newly created LineString will take ownership // of the CoordinateSequence. LineString *ls = global_factory->createLineString(cl); // This is what you do if you want the new LineString // to make a copy of your CoordinateSequence: // LineString *ls = global_factory->createLineString(*cl); return ls; // our LineString } // This function will create a LinearRing // geometry rapresenting a square with the given origin // and side LinearRing * create_square_linearring(double xoffset, double yoffset, double side) { // We will use a coordinate list to build the linearring CoordinateSequence *cl = new CoordinateArraySequence(); cl->add(Coordinate(xoffset, yoffset)); cl->add(Coordinate(xoffset, yoffset+side)); cl->add(Coordinate(xoffset+side, yoffset+side)); cl->add(Coordinate(xoffset+side, yoffset)); cl->add(Coordinate(xoffset, yoffset)); // Now that we have a CoordinateSequence we can create // the linearring. // The newly created LinearRing will take ownership // of the CoordinateSequence. LinearRing *lr = global_factory->createLinearRing(cl); // This is what you do if you want the new LinearRing // to make a copy of your CoordinateSequence: // LinearRing *lr = global_factory->createLinearRing(*cl); return lr; // our LinearRing } // This function will create a Polygon // geometry rapresenting a square with the given origin // and side and with a central hole 1/3 sided. Polygon * create_square_polygon(double xoffset, double yoffset, double side) { // We need a LinearRing for the polygon shell LinearRing *outer = create_square_linearring(xoffset,yoffset,side); // And another for the hole LinearRing *inner = create_square_linearring(xoffset+(side/3), yoffset+(side/3),(side/3)); // If we need to specify any hole, we do it using // a vector of Geometry pointers (I don't know why // not LinearRings) vector *holes = new vector; // We add the newly created geometry to the vector // of holes. holes->push_back(inner); // And finally we call the polygon constructor. // Both the outer LinearRing and the vector of holes // will be referenced by the resulting Polygon object, // thus we CANNOT delete them, neither the holes, nor // the vector containing their pointers, nor the outer // LinearRing. Everything will be deleted at Polygon // deletion time (this is inconsistent with LinearRing // behaviour... what should we do?). Polygon *poly = global_factory->createPolygon(outer, holes); return poly; } // // This function will create a GeometryCollection // containing copies of all Geometries in given vector. // GeometryCollection * create_simple_collection(vector *geoms) { return global_factory->createGeometryCollection(*geoms); // if you wanted to transfer ownership of vector end // its elements you should have call: // return global_factory->createGeometryCollection(geoms); } // // This function uses GeometricShapeFactory to render // a circle having given center and radius // Polygon * create_circle(double centerX, double centerY, double radius) { geos::util::GeometricShapeFactory shapefactory(global_factory); shapefactory.setCentre(Coordinate(centerX, centerY)); shapefactory.setSize(radius); // same as: // shapefactory.setHeight(radius); // shapefactory.setWidth(radius); return shapefactory.createCircle(); } // // This function uses GeometricShapeFactory to render // an ellipse having given center and axis size // Polygon * create_ellipse(double centerX, double centerY, double width, double height) { geos::util::GeometricShapeFactory shapefactory(global_factory); shapefactory.setCentre(Coordinate(centerX, centerY)); shapefactory.setHeight(height); shapefactory.setWidth(width); return shapefactory.createCircle(); } // // This function uses GeometricShapeFactory to render // a rectangle having lower-left corner at given coordinates // and given sizes. // Polygon * create_rectangle(double llX, double llY, double width, double height) { geos::util::GeometricShapeFactory shapefactory(global_factory); shapefactory.setBase(Coordinate(llX, llY)); shapefactory.setHeight(height); shapefactory.setWidth(width); shapefactory.setNumPoints(4); // we don't need more then 4 points for a rectangle... // can use setSize for a square return shapefactory.createRectangle(); } // // This function uses GeometricShapeFactory to render // an arc having lower-left corner at given coordinates, // given sizes and given angles. // LineString * create_arc(double llX, double llY, double width, double height, double startang, double endang) { geos::util::GeometricShapeFactory shapefactory(global_factory); shapefactory.setBase(Coordinate(llX, llY)); shapefactory.setHeight(height); shapefactory.setWidth(width); // shapefactory.setNumPoints(100); // the default (100 pts) // can use setSize for a square return shapefactory.createArc(startang, endang); } auto_ptr create_sinestar(double cx, double cy, double size, int nArms, double armLenRat) { geos::geom::util::SineStarFactory fact(global_factory); fact.setCentre(Coordinate(cx, cy)); fact.setSize(size); fact.setNumPoints(nArms*5); fact.setArmLengthRatio(armLenRat); fact.setNumArms(nArms); return fact.createSineStar(); } // Start reading here void do_all() { vector *geoms = new vector; vector *newgeoms; // Define a precision model using 0,0 as the reference origin // and 2.0 as coordinates scale. PrecisionModel *pm = new PrecisionModel(2.0, 0, 0); // Initialize global factory with defined PrecisionModel // and a SRID of -1 (undefined). global_factory = new GeometryFactory(pm, -1); // We do not need PrecisionMode object anymore, it has // been copied to global_factory private storage delete pm; //////////////////////////////////////////////////////////////////////// // GEOMETRY CREATION //////////////////////////////////////////////////////////////////////// // Read function bodies to see the magic behind them geoms->push_back(create_point(150, 350)); geoms->push_back(create_square_linearring(0,0,100)); geoms->push_back(create_ushaped_linestring(60,60,100)); geoms->push_back(create_square_linearring(0,0,100)); geoms->push_back(create_square_polygon(0,200,300)); geoms->push_back(create_square_polygon(0,250,300)); geoms->push_back(create_simple_collection(geoms)); #if GEOMETRIC_SHAPES // These ones use a GeometricShapeFactory geoms->push_back(create_circle(0, 0, 10)); geoms->push_back(create_ellipse(0, 0, 8, 12)); geoms->push_back(create_rectangle(-5, -5, 10, 10)); // a square geoms->push_back(create_rectangle(-5, -5, 10, 20)); // a rectangle // The upper-right quarter of a vertical ellipse geoms->push_back(create_arc(0, 0, 10, 20, 0, M_PI/2)); geoms->push_back(create_sinestar(10, 10, 100, 5, 2).release()); // a sine star #endif // Print all geoms. cout<<"--------HERE ARE THE BASE GEOMS ----------"<; for (unsigned int i=0; isize(); i++) { Geometry *g = (*geoms)[i]; newgeoms->push_back( g->getCentroid() ); } // Print all convex hulls cout<size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; ///////////////////////////////////////////// // BUFFER ///////////////////////////////////////////// newgeoms = new vector; for (unsigned int i=0; isize(); i++) { Geometry *g = (*geoms)[i]; try { Geometry *g2 = g->buffer(10); newgeoms->push_back(g2); } catch (const GEOSException& exc) { cerr <<"GEOS Exception: geometry "<buffer(10): "<size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; ///////////////////////////////////////////// // CONVEX HULL ///////////////////////////////////////////// // Make convex hulls of geometries newgeoms = new vector; for (unsigned int i=0; isize(); i++) { Geometry *g = (*geoms)[i]; newgeoms->push_back( g->convexHull() ); } // Print all convex hulls cout<size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; #endif // UNARY_OPERATIONS #if RELATIONAL_OPERATORS //////////////////////////////////////////////////////////////////////// // RELATIONAL OPERATORS //////////////////////////////////////////////////////////////////////// cout<<"-------------------------------------------------------------------------------"<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->disjoint(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->touches(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->intersects(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->crosses(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->within(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->contains(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->overlaps(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; IntersectionMatrix *im=NULL; try { // second argument is intersectionPattern string pattern = "212101212"; if ( g1->relate(g2, pattern) ) cout<<" 1\t"; else cout<<" 0\t"; // get the intersectionMatrix itself im=g1->relate(g2); delete im; // delete afterwards } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { if ( g1->equals(g2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { // second argument is a tolerance if ( g1->equalsExact(g2, 0.5) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<size(); i++) { cout<<"\t["<size(); i++) { Geometry *g1 = (*geoms)[i]; cout<<" ["<size(); j++) { Geometry *g2 = (*geoms)[j]; try { // second argument is the distance if ( g1->isWithinDistance(g2,2) ) cout<<" 1\t"; else cout<<" 0\t"; } // Geometry Collection is not a valid argument catch (const IllegalArgumentException& exc) { cout<<" X\t"; } catch (const std::exception& exc) { cerr<; for (unsigned int i=0; isize()-1; i++) { Geometry *g1 = (*geoms)[i]; for (unsigned int j=i+1; jsize(); j++) { Geometry *g2 = (*geoms)[j]; try { Geometry *g3 = g1->Union(g2); newgeoms->push_back(g3); } // It's illegal to union a collection ... catch (const IllegalArgumentException& ill) { //cerr <size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; ///////////////////////////////////////////// // INTERSECTION ///////////////////////////////////////////// // Compute intersection of adhiacent geometries newgeoms = new vector; for (unsigned int i=0; isize()-1; i++) { Geometry *g1 = (*geoms)[i]; for (unsigned int j=i+1; jsize(); j++) { Geometry *g2 = (*geoms)[j]; try { Geometry *g3 = g1->intersection(g2); newgeoms->push_back(g3); } // Collection are illegal as intersection argument catch (const IllegalArgumentException& ill) { //cerr <size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; ///////////////////////////////////////////// // DIFFERENCE ///////////////////////////////////////////// // Compute difference of adhiacent geometries newgeoms = new vector; for (unsigned int i=0; isize()-1; i++) { Geometry *g1 = (*geoms)[i]; for (unsigned int j=i+1; jsize(); j++) { Geometry *g2 = (*geoms)[j]; try { Geometry *g3 = g1->difference(g2); newgeoms->push_back(g3); } // Collection are illegal as difference argument catch (const IllegalArgumentException& ill) { //cerr <size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; ///////////////////////////////////////////// // SYMMETRIC DIFFERENCE ///////////////////////////////////////////// // Compute symmetric difference of adhiacent geometries newgeoms = new vector; for (unsigned int i=0; isize()-1; i++) { Geometry *g1 = (*geoms)[i]; for (unsigned int j=i+1; jsize(); j++) { Geometry *g2 = (*geoms)[j]; try { Geometry *g3 = g1->symDifference(g2); newgeoms->push_back(g3); } // Collection are illegal as symdifference argument catch (const IllegalArgumentException& ill) { //cerr <size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; #endif // COMBINATIONS #if LINEMERGE ///////////////////////////////////////////// // LINEMERGE ///////////////////////////////////////////// LineMerger lm; lm.add(geoms); vector *mls = lm.getMergedLineStrings(); newgeoms = new vector; for (unsigned int i=0; isize(); i++) newgeoms->push_back((*mls)[i]); delete mls; cout<size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; #endif // LINEMERGE #if POLYGONIZE ///////////////////////////////////////////// // POLYGONIZE ///////////////////////////////////////////// Polygonizer plgnzr; plgnzr.add(geoms); vector *polys = plgnzr.getPolygons(); newgeoms = new vector; for (unsigned int i=0; isize(); i++) newgeoms->push_back((*polys)[i]); delete polys; cout<size(); i++) { delete (*newgeoms)[i]; } delete newgeoms; #endif // POLYGONIZE ///////////////////////////////////////////// // CLEANUP ///////////////////////////////////////////// // Delete base geometries for (unsigned int i=0; isize(); i++) { delete (*geoms)[i]; } delete geoms; delete global_factory; } int main() { cout<<"GEOS "< # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# ################################################################################# # Install/Uninstall ################################################################################# # There is a builtin cmake way to get headers in the right location # for OS X framework, but it's not practical this complex tree if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) set(installdest GEOS.framework/Versions/${VERSION_MAJOR}/Headers) else() set(installdest include/geos) endif() install(FILES geos.h DESTINATION ${installdest}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos/platform.h DESTINATION ${installdest}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos/version.h DESTINATION ${installdest}) install(DIRECTORY geos/ DESTINATION ${installdest} FILES_MATCHING PATTERN "*.h" PATTERN "*.inl" PATTERN ".svn" EXCLUDE) # Some post-processing for the framework # luckily GEOS uses header subdir already, just need to change case if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) install(CODE "execute_process(COMMAND find \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${installdest}\" -name *.* -print0 COMMAND xargs -0 sed -E -i \"\" \"s,# *include[[:space:]]+/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/config.h.in0000644000175000017500000001025112206417160015741 0ustar frankiefrankie/* include/config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Has finite */ #undef HAVE_FINITE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if `int64_t' works and is 64 bits. */ #undef HAVE_INT64_T_64 /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Has isfinite */ #undef HAVE_ISFINITE /* Has isnan */ #undef HAVE_ISNAN /* Define to 1 if `long int' works and is 64 bits. */ #undef HAVE_LONG_INT_64 /* Define to 1 if `long long int' works and is 64 bits. */ #undef HAVE_LONG_LONG_INT_64 /* Define to 1 if you have the `memcpy' function. */ #undef HAVE_MEMCPY /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned int' if does not define. */ #undef size_t geos-3.4.2/include/geos/0000755000175000017500000000000012206417223014654 5ustar frankiefrankiegeos-3.4.2/include/geos/Makefile.am0000644000175000017500000000173312206417150016713 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ algorithm \ geom \ geomgraph \ index \ io \ linearref \ noding \ operation \ planargraph \ precision \ simplify \ triangulate \ util EXTRA_DIST = version.h.vc platform.h.vc platform.h.cmake geosdir = $(includedir)/geos geos_HEADERS = \ export.h \ geomgraph.h \ geomgraphindex.h \ geom.h \ geomUtil.h \ geosAlgorithm.h \ indexBintree.h \ indexChain.h \ indexQuadtree.h \ indexStrtree.h \ indexSweepline.h \ inline.h \ io.h \ noding.h \ nodingSnapround.h \ opBuffer.h \ opDistance.h \ operation.h \ opLinemerge.h \ opOverlay.h \ opPolygonize.h \ opPredicate.h \ opRelate.h \ opValid.h \ planargraph.h \ precision.h \ profiler.h \ spatialIndex.h \ timeval.h \ unload.h \ util.h nodist_geos_HEADERS = \ version.h \ platform.h geos-3.4.2/include/geos/Makefile.in0000644000175000017500000005567112206417160016737 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/platform.h.in \ $(srcdir)/version.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h platform.h CONFIG_CLEAN_FILES = version.h CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) $(nodist_geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ algorithm \ geom \ geomgraph \ index \ io \ linearref \ noding \ operation \ planargraph \ precision \ simplify \ triangulate \ util EXTRA_DIST = version.h.vc platform.h.vc platform.h.cmake geosdir = $(includedir)/geos geos_HEADERS = \ export.h \ geomgraph.h \ geomgraphindex.h \ geom.h \ geomUtil.h \ geosAlgorithm.h \ indexBintree.h \ indexChain.h \ indexQuadtree.h \ indexStrtree.h \ indexSweepline.h \ inline.h \ io.h \ noding.h \ nodingSnapround.h \ opBuffer.h \ opDistance.h \ operation.h \ opLinemerge.h \ opOverlay.h \ opPolygonize.h \ opPredicate.h \ opRelate.h \ opValid.h \ planargraph.h \ precision.h \ profiler.h \ spatialIndex.h \ timeval.h \ unload.h \ util.h nodist_geos_HEADERS = \ version.h \ platform.h all: platform.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): platform.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/platform.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status include/geos/platform.h $(srcdir)/platform.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h2 touch $@ distclean-hdr: -rm -f platform.h stamp-h2 version.h: $(top_builddir)/config.status $(srcdir)/version.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files install-nodist_geosHEADERS: $(nodist_geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(nodist_geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-nodist_geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) platform.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) platform.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) platform.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) platform.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) platform.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)" "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-nodist_geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS uninstall-nodist_geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-nodist_geosHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-geosHEADERS \ uninstall-nodist_geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/algorithm/0000755000175000017500000000000012206417224016643 5ustar frankiefrankiegeos-3.4.2/include/geos/algorithm/Angle.h0000644000175000017500000001574212206417147020057 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/Angle.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_ALGORITHM_ANGLE_H #define GEOS_ALGORITHM_ANGLE_H #include #include // for constants // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace algorithm { // geos::algorithm /// Utility functions for working with angles. // /// Unless otherwise noted, methods in this class express angles in radians. /// class GEOS_DLL Angle { public: static const double PI_TIMES_2; // 2.0 * PI; static const double PI_OVER_2; // PI / 2.0; static const double PI_OVER_4; // PI / 4.0; /// Constant representing counterclockwise orientation static const int COUNTERCLOCKWISE = CGAlgorithms::COUNTERCLOCKWISE; /// Constant representing clockwise orientation static const int CLOCKWISE = CGAlgorithms::CLOCKWISE; /// Constant representing no orientation static const int NONE = CGAlgorithms::COLLINEAR; /// Converts from radians to degrees. // /// @param radians an angle in radians /// @return the angle in degrees /// static double toDegrees(double radians); /// Converts from degrees to radians. // /// @param angleDegrees an angle in degrees /// @return the angle in radians /// static double toRadians(double angleDegrees); /// \brief /// Returns the angle of the vector from p0 to p1, /// relative to the positive X-axis. // /// The angle is normalized to be in the range [ -Pi, Pi ]. /// /// @return the normalized angle (in radians) that p0-p1 makes /// with the positive x-axis. /// static double angle(const geom::Coordinate& p0, const geom::Coordinate& p1); /// \brief /// Returns the angle that the vector from (0,0) to p, /// relative to the positive X-axis. // /// The angle is normalized to be in the range ( -Pi, Pi ]. /// /// @return the normalized angle (in radians) that p makes /// with the positive x-axis. /// static double angle(const geom::Coordinate& p); /// Tests whether the angle between p0-p1-p2 is acute. // /// An angle is acute if it is less than 90 degrees. /// /// Note: this implementation is not precise (determistic) for /// angles very close to 90 degrees. /// /// @param p0 an endpoint of the angle /// @param p1 the base of the angle /// @param p2 the other endpoint of the angle /// static bool isAcute(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2); /// Tests whether the angle between p0-p1-p2 is obtuse. // /// An angle is obtuse if it is greater than 90 degrees. /// /// Note: this implementation is not precise (determistic) for /// angles very close to 90 degrees. /// /// @param p0 an endpoint of the angle /// @param p1 the base of the angle /// @param p2 the other endpoint of the angle /// static bool isObtuse(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2); /// Returns the unoriented smallest angle between two vectors. // /// The computed angle will be in the range [0, Pi). /// /// @param tip1 the tip of one vector /// @param tail the tail of each vector /// @param tip2 the tip of the other vector /// @return the angle between tail-tip1 and tail-tip2 /// static double angleBetween(const geom::Coordinate& tip1, const geom::Coordinate& tail, const geom::Coordinate& tip2); /// Returns the oriented smallest angle between two vectors. // /// The computed angle will be in the range (-Pi, Pi]. /// A positive result corresponds to a counterclockwise rotation /// from v1 to v2; /// a negative result corresponds to a clockwise rotation. /// /// @param tip1 the tip of v1 /// @param tail the tail of each vector /// @param tip2 the tip of v2 /// @return the angle between v1 and v2, relative to v1 /// static double angleBetweenOriented(const geom::Coordinate& tip1, const geom::Coordinate& tail, const geom::Coordinate& tip2); /// Computes the interior angle between two segments of a ring. // /// The ring is assumed to be oriented in a clockwise direction. /// The computed angle will be in the range [0, 2Pi] /// /// @param p0 /// a point of the ring /// @param p1 /// the next point of the ring /// @param p2 /// the next point of the ring /// @return the interior angle based at p1 /// static double interiorAngle(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2); /// \brief /// Returns whether an angle must turn clockwise or counterclockwise /// to overlap another angle. /// /// @param ang1 an angle (in radians) /// @param ang2 an angle (in radians) /// @return whether a1 must turn CLOCKWISE, COUNTERCLOCKWISE or /// NONE to overlap a2. /// static int getTurn(double ang1, double ang2); /// \brief /// Computes the normalized value of an angle, which is the /// equivalent angle in the range ( -Pi, Pi ]. /// /// @param angle the angle to normalize /// @return an equivalent angle in the range (-Pi, Pi] /// static double normalize(double angle); /// \brief /// Computes the normalized positive value of an angle, /// which is the equivalent angle in the range [ 0, 2*Pi ). /// /// E.g.: /// - normalizePositive(0.0) = 0.0 /// - normalizePositive(-PI) = PI /// - normalizePositive(-2PI) = 0.0 /// - normalizePositive(-3PI) = PI /// - normalizePositive(-4PI) = 0 /// - normalizePositive(PI) = PI /// - normalizePositive(2PI) = 0.0 /// - normalizePositive(3PI) = PI /// - normalizePositive(4PI) = 0.0 /// /// @param angle the angle to normalize, in radians /// @return an equivalent positive angle /// static double normalizePositive(double angle); /// Computes the unoriented smallest difference between two angles. // /// The angles are assumed to be normalized to the range [-Pi, Pi]. /// The result will be in the range [0, Pi]. /// /// @param ang1 the angle of one vector (in [-Pi, Pi] ) /// @param ang2 the angle of the other vector (in range [-Pi, Pi] ) /// @return the angle (in radians) between the two vectors /// (in range [0, Pi] ) /// static double diff(double ang1, double ang2); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_ANGLE_H geos-3.4.2/include/geos/algorithm/BoundaryNodeRule.h0000644000175000017500000000672712206417147022255 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/BoundaryNodeRule.java rev 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_ALGORITHM_BOUNDARYNODERULE_H #define GEOS_ALGORITHM_BOUNDARYNODERULE_H #include // Forward declarations // ... namespace geos { namespace algorithm { // geos::algorithm /** * An interface for rules which determine whether node points * which are in boundaries of {@link Lineal} geometry components * are in the boundary of the parent geometry collection. * The SFS specifies a single kind of boundary node rule, * the {@link Mod2BoundaryNodeRule} rule. * However, other kinds of Boundary Node Rules are appropriate * in specific situations (for instance, linear network topology * usually follows the {@link EndPointBoundaryNodeRule}.) * Some JTS operations allow the BoundaryNodeRule to be specified, * and respect this rule when computing the results of the operation. * * @author Martin Davis * @version 1.7 * * @see operation::relate::RelateOp * @see operation::IsSimpleOp * @see algorithm::PointLocator */ class GEOS_DLL BoundaryNodeRule { public: // virtual classes should always have a virtual destructor.. virtual ~BoundaryNodeRule() {} /** * Tests whether a point that lies in boundaryCount * geometry component boundaries is considered to form part of * the boundary of the parent geometry. * * @param boundaryCount the number of component boundaries that * this point occurs in * @return true if points in this number of boundaries lie in * the parent boundary */ virtual bool isInBoundary(int boundaryCount) const=0; /** \brief * The Mod-2 Boundary Node Rule (which is the rule specified * in the OGC SFS). * * @see Mod2BoundaryNodeRule */ //static const BoundaryNodeRule& MOD2_BOUNDARY_RULE; static const BoundaryNodeRule& getBoundaryRuleMod2(); /** \brief * The Endpoint Boundary Node Rule. * * @see EndPointBoundaryNodeRule */ //static const BoundaryNodeRule& ENDPOINT_BOUNDARY_RULE; static const BoundaryNodeRule& getBoundaryEndPoint(); /** \brief * The MultiValent Endpoint Boundary Node Rule. * * @see MultiValentEndPointBoundaryNodeRule */ //static const BoundaryNodeRule& MULTIVALENT_ENDPOINT_BOUNDARY_RULE; static const BoundaryNodeRule& getBoundaryMultivalentEndPoint(); /** \brief * The Monovalent Endpoint Boundary Node Rule. * * @see MonoValentEndPointBoundaryNodeRule */ //static const BoundaryNodeRule& MONOVALENT_ENDPOINT_BOUNDARY_RULE; static const BoundaryNodeRule& getBoundaryMonovalentEndPoint(); /** \brief * The Boundary Node Rule specified by the OGC Simple Features * Specification, which is the same as the Mod-2 rule. * * @see Mod2BoundaryNodeRule */ //static const BoundaryNodeRule& OGC_SFS_BOUNDARY_RULE; static const BoundaryNodeRule& getBoundaryOGCSFS(); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_BOUNDARYNODERULE_H geos-3.4.2/include/geos/algorithm/CGAlgorithms.h0000644000175000017500000001527512206417147021355 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/CGAlgorithms.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_ALGORITHM_CGALGORITHM_H #define GEOS_ALGORITHM_CGALGORITHM_H #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /** * \brief * Specifies and implements various fundamental Computational Geometric * algorithms. * The algorithms supplied in this class are robust for double-precision * floating point. * */ class GEOS_DLL CGAlgorithms { public: enum { CLOCKWISE=-1, COLLINEAR, COUNTERCLOCKWISE }; enum { RIGHT=-1, LEFT, STRAIGHT }; CGAlgorithms(){} /** \brief * Tests whether a point lies inside a ring. * * The ring may be oriented in either direction. * A point lying exactly on the ring boundary is considered * to be inside the ring. * * This algorithm does not first check the * point against the envelope of the ring. * * @param p point to check for ring inclusion * @param ring is assumed to have first point identical to last point * @return true if p is inside ring * * @see locatePointInRing */ static bool isPointInRing(const geom::Coordinate& p, const geom::CoordinateSequence* ring); /// Same as above, but taking a vector of const Coordinates (faster) static bool isPointInRing(const geom::Coordinate& p, const std::vector& ring); /** \brief * Determines whether a point lies in the interior, * on the boundary, or in the exterior of a ring. * * The ring may be oriented in either direction. * * This method does not first check the point against * the envelope of the ring. * * @param p point to check for ring inclusion * @param ring an array of coordinates representing the ring * (which must have first point identical to last point) * @return the {@link Location} of p relative to the ring */ static int locatePointInRing(const geom::Coordinate& p, const geom::CoordinateSequence& ring); /// Same as above, but taking a vector of const Coordinates static int locatePointInRing(const geom::Coordinate& p, const std::vector& ring); /** \brief * Test whether a point lies on the given line segment * * @return true true if * the point is a vertex of the line or lies in the interior of a line * segment in the linestring */ static bool isOnLine(const geom::Coordinate& p, const geom::CoordinateSequence* pt); /** \brief * Computes whether a ring defined by an array of Coordinate is * oriented counter-clockwise. * * - The list of points is assumed to have the first and last * points equal. * - This will handle coordinate lists which contain repeated points. * * This algorithm is only guaranteed to work with valid rings. * If the ring is invalid (e.g. self-crosses or touches), * the computed result may not be correct. * * @param ring an array of coordinates forming a ring * @return true if the ring is oriented counter-clockwise. */ static bool isCCW(const geom::CoordinateSequence* ring); /** \brief * Computes the orientation of a point q to the directed line * segment p1-p2. * * The orientation of a point relative to a directed line * segment indicates which way you turn to get to q after * travelling from p1 to p2. * * @return 1 if q is counter-clockwise from p1-p2 * @return -1 if q is clockwise from p1-p2 * @return 0 if q is collinear with p1-p2 */ static int computeOrientation(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q); /** \brief * Computes the distance from a point p to a line segment AB * * Note: NON-ROBUST! * * @param p the point to compute the distance for * @param A one point of the line * @param B another point of the line (must be different to A) * @return the distance from p to line segment AB */ static double distancePointLine(const geom::Coordinate& p, const geom::Coordinate& A, const geom::Coordinate& B); /** \brief * Computes the perpendicular distance from a point p * to the (infinite) line containing the points AB * * @param p the point to compute the distance for * @param A one point of the line * @param B another point of the line (must be different to A) * @return the distance from p to line AB */ static double distancePointLinePerpendicular(const geom::Coordinate& p, const geom::Coordinate& A, const geom::Coordinate& B); /** \brief * Computes the distance from a line segment AB to a line segment CD * * Note: NON-ROBUST! * * @param A a point of one line * @param B the second point of (must be different to A) * @param C one point of the line * @param D another point of the line (must be different to A) */ static double distanceLineLine(const geom::Coordinate& A, const geom::Coordinate& B, const geom::Coordinate& C, const geom::Coordinate& D); /** \brief * Returns the signed area for a ring. The area is positive if * the ring is oriented CW. */ static double signedArea(const geom::CoordinateSequence* ring); /** \brief * Computes the length of a linestring specified by a sequence * of points. * * @param pts the points specifying the linestring * @return the length of the linestring */ static double length(const geom::CoordinateSequence* pts); /** \brief * Returns the index of the direction of the point q * relative to a vector specified by p1-p2. * * @param p1 the origin point of the vector * @param p2 the final point of the vector * @param q the point to compute the direction to * * @return 1 if q is counter-clockwise (left) from p1-p2 * @return -1 if q is clockwise (right) from p1-p2 * @return 0 if q is collinear with p1-p2 */ static int orientationIndex(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CGALGORITHM_H geos-3.4.2/include/geos/algorithm/CentralEndpointIntersector.h0000644000175000017500000000767512206417147024352 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/CentralEndpointIntersector.java rev. 1.1 * **********************************************************************/ #ifndef GEOS_ALGORITHM_CENTRALENDPOINTINTERSECTOR_H #define GEOS_ALGORITHM_CENTRALENDPOINTINTERSECTOR_H #include #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class PrecisionModel; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * Computes an approximate intersection of two line segments * by taking the most central of the endpoints of the segments. * * This is effective in cases where the segments are nearly parallel * and should intersect at an endpoint. * It is also a reasonable strategy for cases where the * endpoint of one segment lies on or almost on the interior of another one. * Taking the most central endpoint ensures that the computed intersection * point lies in the envelope of the segments. * Also, by always returning one of the input points, this should result * in reducing segment fragmentation. * Intended to be used as a last resort for * computing ill-conditioned intersection situations which * cause other methods to fail. * * @author Martin Davis * @version 1.8 */ class GEOS_DLL CentralEndpointIntersector { public: static const geom::Coordinate& getIntersection(const geom::Coordinate& p00, const geom::Coordinate& p01, const geom::Coordinate& p10, const geom::Coordinate& p11) { CentralEndpointIntersector intor(p00, p01, p10, p11); return intor.getIntersection(); } CentralEndpointIntersector(const geom::Coordinate& p00, const geom::Coordinate& p01, const geom::Coordinate& p10, const geom::Coordinate& p11) : _pts(4) { _pts[0]=p00; _pts[1]=p01; _pts[2]=p10; _pts[3]=p11; compute(); } const geom::Coordinate& getIntersection() const { return _intPt; } private: // This is likely overkill.. we'll be allocating heap // memory at every call ! std::vector _pts; geom::Coordinate _intPt; void compute() { geom::Coordinate centroid = average(_pts); _intPt = findNearestPoint(centroid, _pts); } static geom::Coordinate average( const std::vector& pts) { geom::Coordinate avg(0, 0); size_t n = pts.size(); if ( ! n ) return avg; for (std::size_t i=0; i& pts) const { double minDist = std::numeric_limits::max(); geom::Coordinate result = geom::Coordinate::getNull(); for (std::size_t i = 0, n=pts.size(); i < n; ++i) { double dist = p.distance(pts[i]); if (dist < minDist) { minDist = dist; result = pts[i]; } } return result; } }; } // namespace geos::algorithm } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_ALGORITHM_CENTRALENDPOINTINTERSECTOR_H geos-3.4.2/include/geos/algorithm/Centroid.h0000644000175000017500000001074712206417147020600 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2013 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/Centroid.java r728 (JTS-0.13+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_CENTROID_H #define GEOS_ALGORITHM_CENTROID_H #include #include // for composition #include // for std::auto_ptr // Forward declarations namespace geos { namespace geom { class Geometry; class Polygon; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /** * Computes the centroid of a {@link Geometry} of any dimension. * If the geometry is nomimally of higher dimension, but contains only components * having a lower effective dimension (i.e. zero length or area), * the centroid will be computed appropriately. * *

Algorithm

*
    *
  • Dimension = 2 - Based on the usual algorithm for calculating * the centroid as a weighted sum of the centroids * of a decomposition of the area into (possibly overlapping) triangles. * The algorithm has been extended to handle holes and multi-polygons. * See http://www.faqs.org/faqs/graphics/algorithms-faq/ * for further details of the basic approach. *
  • Dimension = 1 - Computes the average of the midpoints * of all line segments weighted by the segment length. *
  • Dimension = 0 - Compute the average coordinate over all points. *
* If the input geometries are empty, a * null Coordinate is returned. * */ class GEOS_DLL Centroid { public: /** * Computes the centroid point of a geometry. * * @param geom the geometry to use * @param cent will be set to the centroid point, if any * * @return true if a centroid could be computed, * false otherwise (empty geom) */ static bool getCentroid(const geom::Geometry& geom, geom::Coordinate& cent); /** * Creates a new instance for computing the centroid of a geometry */ Centroid(const geom::Geometry& geom) : areasum2(0.0), totalLength(0.0), ptCount(0) { add(geom); } /** * Gets the computed centroid. * * @param cent will be set to the centroid point, if any * * @return true if a centroid could be computed, * false otherwise (empty geom) */ bool getCentroid(geom::Coordinate& cent) const; private: std::auto_ptr areaBasePt; geom::Coordinate triangleCent3; geom::Coordinate cg3; geom::Coordinate lineCentSum; geom::Coordinate ptCentSum; double areasum2; double totalLength; int ptCount; /** * Adds a Geometry to the centroid total. * * @param geom the geometry to add */ void add(const geom::Geometry& geom); void setBasePoint(const geom::Coordinate& basePt); void add(const geom::Polygon& poly); void addShell(const geom::CoordinateSequence& pts); void addHole(const geom::CoordinateSequence& pts); void addTriangle(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2, bool isPositiveArea); /** * Computes three times the centroid of the triangle p1-p2-p3. * The factor of 3 is * left in to permit division to be avoided until later. */ static void centroid3(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& p3, geom::Coordinate& c ); /** * Returns twice the signed area of the triangle p1-p2-p3. * The area is positive if the triangle is oriented CCW, and negative if CW. */ static double area2(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& p3 ); /** * Adds the line segments defined by an array of coordinates * to the linear centroid accumulators. * * @param pts an array of {@link Coordinate}s */ void addLineSegments(const geom::CoordinateSequence& pts); /** * Adds a point to the point centroid accumulator. * @param pt a {@link Coordinate} */ void addPoint(const geom::Coordinate& pt); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CENTROID_H geos-3.4.2/include/geos/algorithm/CentroidArea.h0000644000175000017500000000745512206417147021373 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/CentroidArea.java r612 * **********************************************************************/ #ifndef GEOS_ALGORITHM_CENTROIDAREA_H #define GEOS_ALGORITHM_CENTROIDAREA_H #include #include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class Geometry; class Polygon; } } namespace geos { namespace algorithm { // geos::algorithm /** * \class CentroidArea geosAlgorithm.h geos/geosAlgorithm.h * * \brief Computes the centroid of an area geometry. * * Algorithm: * * Based on the usual algorithm for calculating * the centroid as a weighted sum of the centroids * of a decomposition of the area into (possibly overlapping) triangles. * The algorithm has been extended to handle holes and multi-polygons. * See http://www.faqs.org/faqs/graphics/algorithms-faq/ * for further details of the basic approach. * * The code has also be extended to handle degenerate (zero-area) polygons. * In this case, the centroid of the line segments in the polygon * will be returned. * * @deprecated use Centroid instead * */ class GEOS_DLL CentroidArea { public: CentroidArea() : basePt(0.0, 0.0), areasum2(0.0), totalLength(0.0) {} ~CentroidArea() {} /** * Adds the area defined by a Geometry to the centroid total. * If the geometry has no area it does not contribute to the centroid. * * @param geom the geometry to add */ void add(const geom::Geometry *geom); /** * Adds the area defined by an array of * coordinates. The array must be a ring; * i.e. end with the same coordinate as it starts with. * @param ring an array of {@link Coordinate}s */ void add(const geom::CoordinateSequence *ring); // TODO: deprecate geom::Coordinate* getCentroid() const; /// Return false if a centroid couldn't be computed ( empty polygon ) bool getCentroid(geom::Coordinate& ret) const; private: /// the point all triangles are based at geom::Coordinate basePt; // temporary variable to hold centroid of triangle geom::Coordinate triangleCent3; /// Partial area sum double areasum2; /// partial centroid sum geom::Coordinate cg3; // data for linear centroid computation, if needed geom::Coordinate centSum; double totalLength; void setBasePoint(const geom::Coordinate &newbasePt); void add(const geom::Polygon *poly); void addShell(const geom::CoordinateSequence *pts); void addHole(const geom::CoordinateSequence *pts); void addTriangle(const geom::Coordinate &p0, const geom::Coordinate &p1, const geom::Coordinate &p2,bool isPositiveArea); static void centroid3(const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &p3, geom::Coordinate &c); static double area2(const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &p3); /** * Adds the linear segments defined by an array of coordinates * to the linear centroid accumulators. * * This is done in case the polygon(s) have zero-area, * in which case the linear centroid is computed instead. * * @param pts an array of {@link Coordinate}s */ void addLinearSegments(const geom::CoordinateSequence& pts); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CENTROIDAREA_H geos-3.4.2/include/geos/algorithm/CentroidLine.h0000644000175000017500000000330312206417147021376 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_CENTROIDLINE_H #define GEOS_ALGORITHM_CENTROIDLINE_H #include #include // Forward declarations namespace geos { namespace geom { class Geometry; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /// @deprecated use Centroid instead class GEOS_DLL CentroidLine { private: geom::Coordinate centSum; double totalLength; public: CentroidLine() : centSum(0.0, 0.0), totalLength(0.0) {} ~CentroidLine() {} /** \brief * Adds the linestring(s) defined by a Geometry to the centroid total. * * If the geometry is not linear it does not contribute to the centroid * @param geom the geometry to add */ void add(const geom::Geometry *geom); /** \brief * Adds the length defined by an array of coordinates. * * @param pts an array of {@link geom::Coordinate}s */ void add(const geom::CoordinateSequence *pts); geom::Coordinate* getCentroid() const; /// return false if centroid could not be computed bool getCentroid(geom::Coordinate& ret) const; }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CENTROIDLINE_H geos-3.4.2/include/geos/algorithm/CentroidPoint.h0000644000175000017500000000302312206417147021577 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_CENTROIDPOINT_H #define GEOS_ALGORITHM_CENTROIDPOINT_H #include #include // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace algorithm { // geos::algorithm /// @deprecated use Centroid instead class GEOS_DLL CentroidPoint { private: int ptCount; geom::Coordinate centSum; public: CentroidPoint() : ptCount(0), centSum(0.0, 0.0) {} ~CentroidPoint() {} /** * Adds the point(s) defined by a Geometry to the centroid total. * If the geometry is not of dimension 0 it does not contribute to the * centroid. * @param geom the geometry to add */ void add(const geom::Geometry *geom); void add(const geom::Coordinate *pt); geom::Coordinate* getCentroid() const; /// Return false if centroid could not be computed bool getCentroid(geom::Coordinate& ret) const; }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CENTROIDPOINT_H geos-3.4.2/include/geos/algorithm/ConvexHull.h0000644000175000017500000001314412206417147021112 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/ConvexHull.java r407 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_CONVEXHULL_H #define GEOS_ALGORITHM_CONVEXHULL_H #include #include // FIXME: avoid using Cordinate:: typedefs to avoid full include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /** * Computes the convex hull of a Geometry. * * The convex hull is the smallest convex Geometry that contains all the * points in the input Geometry. * * Uses the Graham Scan algorithm. * * Last port: algorithm/ConvexHull.java rev. 1.26 (JTS-1.7) * */ class GEOS_DLL ConvexHull { private: const geom::GeometryFactory *geomFactory; geom::Coordinate::ConstVect inputPts; void extractCoordinates(const geom::Geometry *geom); /// Create a CoordinateSequence from the Coordinate::ConstVect /// This is needed to construct the geometries. /// Here coordinate copies happen /// The returned object is newly allocated !NO EXCEPTION SAFE! geom::CoordinateSequence *toCoordinateSequence(geom::Coordinate::ConstVect &cv); void computeOctPts(const geom::Coordinate::ConstVect &src, geom::Coordinate::ConstVect &tgt); bool computeOctRing(const geom::Coordinate::ConstVect &src, geom::Coordinate::ConstVect &tgt); /** * Uses a heuristic to reduce the number of points scanned * to compute the hull. * The heuristic is to find a polygon guaranteed to * be in (or on) the hull, and eliminate all points inside it. * A quadrilateral defined by the extremal points * in the four orthogonal directions * can be used, but even more inclusive is * to use an octilateral defined by the points in the * 8 cardinal directions. * * Note that even if the method used to determine the polygon * vertices is not 100% robust, this does not affect the * robustness of the convex hull. * * To satisfy the requirements of the Graham Scan algorithm, * the resulting array has at least 3 entries. * * @param pts The vector of const Coordinate pointers * to be reduced (to at least 3 elements) * * WARNING: the parameter will be modified * */ void reduce(geom::Coordinate::ConstVect &pts); /// parameter will be modified void padArray3(geom::Coordinate::ConstVect &pts); /// parameter will be modified void preSort(geom::Coordinate::ConstVect &pts); /** * Given two points p and q compare them with respect to their radial * ordering about point o. First checks radial ordering. * If points are collinear, the comparison is based * on their distance to the origin. * * p < q iff * * - ang(o-p) < ang(o-q) (e.g. o-p-q is CCW) * - or ang(o-p) == ang(o-q) && dist(o,p) < dist(o,q) * * @param o the origin * @param p a point * @param q another point * @return -1, 0 or 1 depending on whether p is less than, * equal to or greater than q */ int polarCompare(const geom::Coordinate &o, const geom::Coordinate &p, const geom::Coordinate &q); void grahamScan(const geom::Coordinate::ConstVect &c, geom::Coordinate::ConstVect &ps); /** * @param vertices the vertices of a linear ring, * which may or may not be * flattened (i.e. vertices collinear) * * @return a 2-vertex LineString if the vertices are * collinear; otherwise, a Polygon with unnecessary * (collinear) vertices removed */ geom::Geometry* lineOrPolygon(const geom::Coordinate::ConstVect &vertices); /** * Write in 'cleaned' a version of 'input' with collinear * vertexes removed. */ void cleanRing(const geom::Coordinate::ConstVect &input, geom::Coordinate::ConstVect &cleaned); /** * @return whether the three coordinates are collinear * and c2 lies between c1 and c3 inclusive */ bool isBetween(const geom::Coordinate& c1, const geom::Coordinate& c2, const geom::Coordinate& c3); public: /** * Create a new convex hull construction for the input Geometry. */ ConvexHull(const geom::Geometry *newGeometry); ~ConvexHull(); /** * Returns a Geometry that represents the convex hull of * the input geometry. * The returned geometry contains the minimal number of points * needed to represent the convex hull. * In particular, no more than two consecutive points * will be collinear. * * @return if the convex hull contains 3 or more points, * a Polygon; 2 points, a LineString; * 1 point, a Point; 0 points, an empty GeometryCollection. */ geom::Geometry* getConvexHull(); }; } // namespace geos::algorithm } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef GEOS_INLINE # include "geos/algorithm/ConvexHull.inl" #endif #endif // GEOS_ALGORITHM_CONVEXHULL_H geos-3.4.2/include/geos/algorithm/ConvexHull.inl0000644000175000017500000000247512206417147021452 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/ConvexHull.java r407 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_CONVEXHULL_INL #define GEOS_ALGORITHM_CONVEXHULL_INL #include #include #include #include namespace geos { namespace algorithm { // geos::algorithm INLINE ConvexHull::ConvexHull(const geom::Geometry *newGeometry) : geomFactory(newGeometry->getFactory()) { extractCoordinates(newGeometry); } INLINE ConvexHull::~ConvexHull() { } INLINE void ConvexHull::extractCoordinates(const geom::Geometry *geom) { util::UniqueCoordinateArrayFilter filter(inputPts); geom->apply_ro(&filter); } } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_CONVEXHULL_INL geos-3.4.2/include/geos/algorithm/HCoordinate.h0000644000175000017500000000532412206417147021223 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/HCoordinate.java r386 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_HCOORDINATE_H #define GEOS_ALGORITHM_HCOORDINATE_H #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * Represents a homogeneous coordinate in a 2-D coordinate space. * * HCoordinate are used as a clean way * of computing intersections between line segments. */ class GEOS_DLL HCoordinate { public: friend std::ostream& operator<< (std::ostream& o, const HCoordinate& c); /** \brief * Computes the (approximate) intersection point between two line * segments using homogeneous coordinates. * * Note that this algorithm is * not numerically stable; i.e. it can produce intersection points which * lie outside the envelope of the line segments themselves. In order * to increase the precision of the calculation input points should be * normalized before passing them to this routine. */ static void intersection(const geom::Coordinate &p1, const geom::Coordinate &p2, const geom::Coordinate &q1, const geom::Coordinate &q2, geom::Coordinate &ret); double x,y,w; HCoordinate(); HCoordinate(double _x, double _y, double _w); HCoordinate(const geom::Coordinate& p); /** \brief * Constructs a homogeneous coordinate which is the intersection * of the lines define by the homogenous coordinates represented * by two {@link Coordinate}s. * * @param p1 * @param p2 */ HCoordinate(const geom::Coordinate& p1, const geom::Coordinate& p2); HCoordinate(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q1, const geom::Coordinate& q2); HCoordinate(const HCoordinate &p1, const HCoordinate &p2); double getX() const; double getY() const; void getCoordinate(geom::Coordinate &ret) const; }; std::ostream& operator<< (std::ostream& o, const HCoordinate& c); } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_HCOORDINATE_H geos-3.4.2/include/geos/algorithm/InteriorPointArea.h0000644000175000017500000000566512206417147022432 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2013 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/InteriorPointArea.java r728 (JTS-1.13+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_INTERIORPOINTAREA_H #define GEOS_ALGORITHM_INTERIORPOINTAREA_H #include #include // Forward declarations namespace geos { namespace geom { class Geometry; class LineString; class GeometryFactory; class GeometryCollection; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * Computes a point in the interior of an areal geometry. * *

Algorithm

*
    *
  • Find a Y value which is close to the centre of * the geometry's vertical extent but is different * to any of it's Y ordinates. *
  • Create a horizontal bisector line using the Y value * and the geometry's horizontal extent *
  • Find the intersection between the geometry * and the horizontal bisector line. * The intersection is a collection of lines and points. *
  • Pick the midpoint of the largest intersection geometry *
* * * Note: If a fixed precision model is used, * in some cases this method may return a point * which does not lie in the interior. * */ class GEOS_DLL InteriorPointArea { private: bool foundInterior; const geom::GeometryFactory *factory; geom::Coordinate interiorPoint; double maxWidth; void add(const geom::Geometry *geom); const geom::Geometry *widestGeometry(const geom::Geometry *geometry); const geom::Geometry *widestGeometry(const geom::GeometryCollection *gc); geom::LineString *horizontalBisector(const geom::Geometry *geometry); public: /** * Creates a new interior point finder * for an areal geometry. * * @param g an areal geometry */ InteriorPointArea(const geom::Geometry *g); ~InteriorPointArea(); /** * Gets the computed interior point. * * @return the coordinate of an interior point */ bool getInteriorPoint(geom::Coordinate& ret) const; private: /** \brief * Finds an interior point of a Polygon * * @param geometry the geometry to analyze * @return the midpoint of the largest intersection between the geometry and * a line halfway down its envelope */ void addPolygon(const geom::Geometry *geometry); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_INTERIORPOINTAREA_H geos-3.4.2/include/geos/algorithm/InteriorPointLine.h0000644000175000017500000000365712206417147022450 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/InteriorPointLine.java r317 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_ALGORITHM_INTERIORPOINTLINE_H #define GEOS_ALGORITHM_INTERIORPOINTLINE_H #include #include // Forward declarations namespace geos { namespace geom { class Geometry; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * Computes a point in the interior of an linear geometry. * *

Algorithm

* * - Find an interior vertex which is closest to * the centroid of the linestring. * - If there is no interior vertex, find the endpoint which is * closest to the centroid. */ class GEOS_DLL InteriorPointLine { public: InteriorPointLine(const geom::Geometry *g); ~InteriorPointLine(); //Coordinate* getInteriorPoint() const; bool getInteriorPoint(geom::Coordinate& ret) const; private: bool hasInterior; geom::Coordinate centroid; double minDistance; geom::Coordinate interiorPoint; void addInterior(const geom::Geometry *geom); void addInterior(const geom::CoordinateSequence *pts); void addEndpoints(const geom::Geometry *geom); void addEndpoints(const geom::CoordinateSequence *pts); void add(const geom::Coordinate& point); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_INTERIORPOINTLINE_H geos-3.4.2/include/geos/algorithm/InteriorPointPoint.h0000644000175000017500000000326012206417147022640 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_INTERIORPOINTPOINT_H #define GEOS_ALGORITHM_INTERIORPOINTPOINT_H #include #include // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace algorithm { // geos::algorithm /** * \class InteriorPointPoint geosAlgorithm.h geos/geosAlgorithm.h * \brief * Computes a point in the interior of an point geometry. * * Algorithm: * * Find a point which is closest to the centroid of the geometry. */ class GEOS_DLL InteriorPointPoint { private: bool hasInterior; geom::Coordinate centroid; double minDistance; geom::Coordinate interiorPoint; /** * Tests the point(s) defined by a Geometry for the best inside point. * If a Geometry is not of dimension 0 it is not tested. * @param geom the geometry to add */ void add(const geom::Geometry *geom); void add(const geom::Coordinate *point); public: InteriorPointPoint(const geom::Geometry *g); ~InteriorPointPoint() {} bool getInteriorPoint(geom::Coordinate& ret) const; }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_INTERIORPOINTPOINT_H geos-3.4.2/include/geos/algorithm/LineIntersector.h0000644000175000017500000002613712206417147022142 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/RobustLineIntersector.java r785 (JTS-1.13+) * **********************************************************************/ #ifndef GEOS_ALGORITHM_LINEINTERSECTOR_H #define GEOS_ALGORITHM_LINEINTERSECTOR_H #include #include #include // Forward declarations namespace geos { namespace geom { class PrecisionModel; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * A LineIntersector is an algorithm that can both test whether * two line segments intersect and compute the intersection point * if they do. * * The intersection point may be computed in a precise or non-precise manner. * Computing it precisely involves rounding it to an integer. (This assumes * that the input coordinates have been made precise by scaling them to * an integer grid.) * */ class GEOS_DLL LineIntersector { public: /// \brief /// Return a Z value being the interpolation of Z from p0 and p1 at /// the given point p static double interpolateZ(const geom::Coordinate &p, const geom::Coordinate &p0, const geom::Coordinate &p1); /// Computes the "edge distance" of an intersection point p in an edge. // /// The edge distance is a metric of the point along the edge. /// The metric used is a robust and easy to compute metric function. /// It is not equivalent to the usual Euclidean metric. /// It relies on the fact that either the x or the y ordinates of the /// points in the edge are unique, depending on whether the edge is longer in /// the horizontal or vertical direction. /// /// NOTE: This function may produce incorrect distances /// for inputs where p is not precisely on p1-p2 /// (E.g. p = (139,9) p1 = (139,10), p2 = (280,1) produces distanct /// 0.0, which is incorrect. /// /// My hypothesis is that the function is safe to use for points which are the /// result of rounding points which lie on the line, /// but not safe to use for truncated points. /// static double computeEdgeDistance(const geom::Coordinate& p, const geom::Coordinate& p0, const geom::Coordinate& p1); static double nonRobustComputeEdgeDistance(const geom::Coordinate& p,const geom::Coordinate& p1,const geom::Coordinate& p2); LineIntersector(const geom::PrecisionModel* initialPrecisionModel=NULL) : precisionModel(initialPrecisionModel), result(0), isProperVar(false) {} ~LineIntersector() {} /** \brief * Tests whether either intersection point is an interior point of * one of the input segments. * * @return true if either intersection point is in * the interior of one of the input segments */ bool isInteriorIntersection(); /** \brief * Tests whether either intersection point is an interior point * of the specified input segment. * * @return true if either intersection point is in * the interior of the input segment */ bool isInteriorIntersection(int inputLineIndex); /// Force computed intersection to be rounded to a given precision model. // /// No getter is provided, because the precision model is not required /// to be specified. /// @param precisionModel the PrecisionModel to use for rounding /// void setPrecisionModel(const geom::PrecisionModel *newPM) { precisionModel=newPM; } /// Compute the intersection of a point p and the line p1-p2. // /// This function computes the boolean value of the hasIntersection test. /// The actual value of the intersection (if there is one) /// is equal to the value of p. /// void computeIntersection(const geom::Coordinate& p, const geom::Coordinate& p1, const geom::Coordinate& p2); /// Same as above but doen's compute intersection point. Faster. static bool hasIntersection(const geom::Coordinate& p,const geom::Coordinate& p1,const geom::Coordinate& p2); // These are deprecated, due to ambiguous naming enum { DONT_INTERSECT=0, DO_INTERSECT=1, COLLINEAR=2 }; enum { /// Indicates that line segments do not intersect NO_INTERSECTION=0, /// Indicates that line segments intersect in a single point POINT_INTERSECTION=1, /// Indicates that line segments intersect in a line segment COLLINEAR_INTERSECTION=2 }; /// Computes the intersection of the lines p1-p2 and p3-p4 void computeIntersection(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& p3, const geom::Coordinate& p4); std::string toString() const; /** * Tests whether the input geometries intersect. * * @return true if the input geometries intersect */ bool hasIntersection() const { return result!=NO_INTERSECTION; } /// Returns the number of intersection points found. // /// This will be either 0, 1 or 2. /// int getIntersectionNum() const { return result; } /// Returns the intIndex'th intersection point // /// @param intIndex is 0 or 1 /// /// @return the intIndex'th intersection point /// const geom::Coordinate& getIntersection(int intIndex) const { return intPt[intIndex]; } /// Returns false if both numbers are zero. // /// @return true if both numbers are positive or if both numbers are negative. /// static bool isSameSignAndNonZero(double a,double b); /** \brief * Test whether a point is a intersection point of two line segments. * * Note that if the intersection is a line segment, this method only tests for * equality with the endpoints of the intersection segment. * It does not return true if * the input point is internal to the intersection segment. * * @return true if the input point is one of the intersection points. */ bool isIntersection(const geom::Coordinate& pt) const; /** \brief * Tests whether an intersection is proper. * * The intersection between two line segments is considered proper if * they intersect in a single point in the interior of both segments * (e.g. the intersection is a single point and is not equal to any of the * endpoints). * * The intersection between a point and a line segment is considered proper * if the point lies in the interior of the segment (e.g. is not equal to * either of the endpoints). * * @return true if the intersection is proper */ bool isProper() const { return hasIntersection()&&isProperVar; } /** \brief * Computes the intIndex'th intersection point in the direction of * a specified input line segment * * @param segmentIndex is 0 or 1 * @param intIndex is 0 or 1 * * @return the intIndex'th intersection point in the direction of the * specified input line segment */ const geom::Coordinate& getIntersectionAlongSegment(int segmentIndex,int intIndex); /** \brief * Computes the index of the intIndex'th intersection point in the direction of * a specified input line segment * * @param segmentIndex is 0 or 1 * @param intIndex is 0 or 1 * * @return the index of the intersection point along the segment (0 or 1) */ int getIndexAlongSegment(int segmentIndex,int intIndex); /** \brief * Computes the "edge distance" of an intersection point along the specified * input line segment. * * @param segmentIndex is 0 or 1 * @param intIndex is 0 or 1 * * @return the edge distance of the intersection point */ double getEdgeDistance(int geomIndex,int intIndex) const; private: void intersectionWithNormalization(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q1, const geom::Coordinate& q2, geom::Coordinate &ret) const; /** * If makePrecise is true, computed intersection coordinates * will be made precise using Coordinate#makePrecise */ const geom::PrecisionModel *precisionModel; int result; const geom::Coordinate *inputLines[2][2]; /** * We store real Coordinates here because * we must compute the Z of intersection point. */ geom::Coordinate intPt[2]; /** * The indexes of the endpoints of the intersection lines, in order along * the corresponding line */ int intLineIndex[2][2]; bool isProperVar; //Coordinate &pa; //Coordinate &pb; bool isCollinear() const { return result==COLLINEAR_INTERSECTION; } int computeIntersect(const geom::Coordinate& p1,const geom::Coordinate& p2,const geom::Coordinate& q1,const geom::Coordinate& q2); bool isEndPoint() const { return hasIntersection()&&!isProperVar; } void computeIntLineIndex(); void computeIntLineIndex(int segmentIndex); int computeCollinearIntersection(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q1, const geom::Coordinate& q2); /** \brief * This method computes the actual value of the intersection point. * * To obtain the maximum precision from the intersection calculation, * the coordinates are normalized by subtracting the minimum * ordinate values (in absolute value). This has the effect of * removing common significant digits from the calculation to * maintain more bits of precision. */ void intersection(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q1, const geom::Coordinate& q2, geom::Coordinate &ret) const; double smallestInAbsValue(double x1, double x2, double x3, double x4) const; /** * Test whether a point lies in the envelopes of both input segments. * A correctly computed intersection point should return true * for this test. * Since this test is for debugging purposes only, no attempt is * made to optimize the envelope test. * * @return true if the input point lies within both * input segment envelopes */ bool isInSegmentEnvelopes(const geom::Coordinate& intPt) const; /** \brief * Normalize the supplied coordinates to * so that the midpoint of their intersection envelope * lies at the origin. * * @param n00 * @param n01 * @param n10 * @param n11 * @param normPt */ void normalizeToEnvCentre(geom::Coordinate &n00, geom::Coordinate &n01, geom::Coordinate &n10, geom::Coordinate &n11, geom::Coordinate &normPt) const; /** * Computes a segment intersection using homogeneous coordinates. * Round-off error can cause the raw computation to fail, * (usually due to the segments being approximately parallel). * If this happens, a reasonable approximation is computed instead. * * @param p1 a segment endpoint * @param p2 a segment endpoint * @param q1 a segment endpoint * @param q2 a segment endpoint * @param intPt the computed intersection point is stored there */ void safeHCoordinateIntersection(const geom::Coordinate& p1, const geom::Coordinate& p2, const geom::Coordinate& q1, const geom::Coordinate& q2, geom::Coordinate& intPt) const; }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_LINEINTERSECTOR_H geos-3.4.2/include/geos/algorithm/MCPointInRing.h0000644000175000017500000000434412206417147021445 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_MCPOINTINRING_H #define GEOS_ALGORITHM_MCPOINTINRING_H #include #include // for inheritance #include // for inheritance #include // for composition #include // for composition #include // Forward declarations namespace geos { namespace geom { class Coordinate; class LineSegment; class LinearRing; class CoordinateSequence; class CoordinateSequence; } namespace index { namespace bintree { class Bintree; class Interval; } namespace chain { class MonotoneChain; } } } namespace geos { namespace algorithm { // geos::algorithm class GEOS_DLL MCPointInRing: public PointInRing { public: MCPointInRing(const geom::LinearRing *newRing); ~MCPointInRing(); bool isInside(const geom::Coordinate& pt); void testLineSegment(const geom::Coordinate& p, const geom::LineSegment& seg); class MCSelecter: public index::chain::MonotoneChainSelectAction { using MonotoneChainSelectAction::select; private: geom::Coordinate p; MCPointInRing *parent; public: MCSelecter(const geom::Coordinate& newP, MCPointInRing *prt); void select(const geom::LineSegment& ls); }; private: const geom::LinearRing *ring; index::bintree::Interval interval; geom::CoordinateSequence *pts; index::bintree::Bintree *tree; int crossings; // number of segment/ray crossings void buildIndex(); void testMonotoneChain(geom::Envelope *rayEnv, MCSelecter *mcSelecter, index::chain::MonotoneChain *mc); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_MCPOINTINRING_H geos-3.4.2/include/geos/algorithm/Makefile.am0000644000175000017500000000135612206417147020710 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ locate \ distance EXTRA_DIST = geosdir = $(includedir)/geos/algorithm geos_HEADERS = \ Angle.h \ BoundaryNodeRule.h \ CentralEndpointIntersector.h \ Centroid.h \ CentroidArea.h \ CentroidLine.h \ CentroidPoint.h \ CGAlgorithms.h \ ConvexHull.h \ ConvexHull.inl \ HCoordinate.h \ InteriorPointArea.h \ InteriorPointLine.h \ InteriorPointPoint.h \ LineIntersector.h \ MCPointInRing.h \ MinimumDiameter.h \ NotRepresentableException.h \ PointInRing.h \ PointLocator.h \ RayCrossingCounter.h \ RobustDeterminant.h \ SimplePointInRing.h \ SIRtreePointInRing.h geos-3.4.2/include/geos/algorithm/Makefile.in0000644000175000017500000005204412206417160020714 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/algorithm DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ locate \ distance EXTRA_DIST = geosdir = $(includedir)/geos/algorithm geos_HEADERS = \ Angle.h \ BoundaryNodeRule.h \ CentralEndpointIntersector.h \ Centroid.h \ CentroidArea.h \ CentroidLine.h \ CentroidPoint.h \ CGAlgorithms.h \ ConvexHull.h \ ConvexHull.inl \ HCoordinate.h \ InteriorPointArea.h \ InteriorPointLine.h \ InteriorPointPoint.h \ LineIntersector.h \ MCPointInRing.h \ MinimumDiameter.h \ NotRepresentableException.h \ PointInRing.h \ PointLocator.h \ RayCrossingCounter.h \ RobustDeterminant.h \ SimplePointInRing.h \ SIRtreePointInRing.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/algorithm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/algorithm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/algorithm/MinimumDiameter.h0000644000175000017500000000703312206417147022111 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_MINIMUMDIAMETER_H #define GEOS_ALGORITHM_MINIMUMDIAMETER_H #include // Forward declarations namespace geos { namespace geom { class Geometry; class LineSegment; class LineString; class Coordinate; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm /** \brief * Computes the minimum diameter of a geom::Geometry * * The minimum diameter is defined to be the * width of the smallest band that * contains the geometry, * where a band is a strip of the plane defined * by two parallel lines. * This can be thought of as the smallest hole that the geometry can be * moved through, with a single rotation. *

* The first step in the algorithm is computing the convex hull of the Geometry. * If the input Geometry is known to be convex, a hint can be supplied to * avoid this computation. * * @see ConvexHull * */ class GEOS_DLL MinimumDiameter { private: const geom::Geometry* inputGeom; bool isConvex; geom::LineSegment* minBaseSeg; geom::Coordinate* minWidthPt; int minPtIndex; double minWidth; void computeMinimumDiameter(); void computeWidthConvex(const geom::Geometry* geom); /** * Compute the width information for a ring of {@link geom::Coordinate}s. * Leaves the width information in the instance variables. * * @param pts * @return */ void computeConvexRingMinDiameter(const geom::CoordinateSequence *pts); unsigned int findMaxPerpDistance(const geom::CoordinateSequence* pts, geom::LineSegment* seg, unsigned int startIndex); static unsigned int getNextIndex(const geom::CoordinateSequence* pts, unsigned int index); public: ~MinimumDiameter(); /** \brief * Compute a minimum diameter for a giver {@link Geometry}. * * @param geom a Geometry */ MinimumDiameter(const geom::Geometry* newInputGeom); /** \brief * Compute a minimum diameter for a given Geometry, * with a hint if the Geometry is convex * (e.g. a convex Polygon or LinearRing, * or a two-point LineString, or a Point). * * @param geom a Geometry which is convex * @param isConvex true if the input geometry is convex */ MinimumDiameter(const geom::Geometry* newInputGeom, const bool newIsConvex); /** \brief * Gets the length of the minimum diameter of the input Geometry * * @return the length of the minimum diameter */ double getLength(); /** \brief * Gets the {@link geom::Coordinate} forming one end of the minimum diameter * * @return a coordinate forming one end of the minimum diameter */ geom::Coordinate* getWidthCoordinate(); /** \brief * Gets the segment forming the base of the minimum diameter * * @return the segment forming the base of the minimum diameter */ geom::LineString* getSupportingSegment(); /** \brief * Gets a LineString which is a minimum diameter * * @return a LineString which is a minimum diameter */ geom::LineString* getDiameter(); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_MINIMUMDIAMETER_H geos-3.4.2/include/geos/algorithm/NotRepresentableException.h0000644000175000017500000000237612206417147024163 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_NOTREPRESENTABLEEXCEPTION_H #define GEOS_ALGORITHM_NOTREPRESENTABLEEXCEPTION_H #include #include #include namespace geos { namespace algorithm { // geos::algorithm /** * \class NotRepresentableException geosAlgorithm.h geos/geosAlgorithm.h * \brief * Indicates that a HCoordinate has been computed which is * not representable on the Cartesian plane. * * @version 1.4 * @see HCoordinate */ class GEOS_DLL NotRepresentableException: public util::GEOSException { public: NotRepresentableException(); NotRepresentableException(std::string msg); ~NotRepresentableException() throw() {} }; } // namespace geos::algorithm } // namespace geos #endif geos-3.4.2/include/geos/algorithm/PointInRing.h0000644000175000017500000000171012206417147021217 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_POINTINRING_H #define GEOS_ALGORITHM_POINTINRING_H #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace algorithm { // geos::algorithm class GEOS_DLL PointInRing{ public: virtual ~PointInRing(){} virtual bool isInside(const geom::Coordinate& pt)=0; }; } // namespace geos::algorithm } // namespace geos #endif geos-3.4.2/include/geos/algorithm/PointLocator.h0000644000175000017500000000600212206417147021433 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2011 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/PointLocator.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_ALGORITHM_POINTLOCATOR_H #define GEOS_ALGORITHM_POINTLOCATOR_H #include #include // for inlines // Forward declarations namespace geos { namespace geom { class Coordinate; class Geometry; class LinearRing; class LineString; class Polygon; } } namespace geos { namespace algorithm { // geos::algorithm /** * \class PointLocator geosAlgorithm.h geos/geosAlgorithm.h * * \brief * Computes the topological relationship (Location) * of a single point to a Geometry. * * The algorithm obeys the SFS boundaryDetermination rule to correctly determine * whether the point lies on the boundary or not. * * Notes: * - instances of this class are not reentrant. * - LinearRing objects do not enclose any area * points inside the ring are still in the EXTERIOR of the ring. * * Last port: algorithm/PointLocator.java rev. 1.26 (JTS-1.7+) */ class GEOS_DLL PointLocator { public: PointLocator() {} ~PointLocator() {} /** * Computes the topological relationship (Location) of a single point * to a Geometry. * It handles both single-element * and multi-element Geometries. * The algorithm for multi-part Geometries * takes into account the boundaryDetermination rule. * * @return the Location of the point relative to the input Geometry */ int locate(const geom::Coordinate& p, const geom::Geometry *geom); /** * Convenience method to test a point for intersection with * a Geometry * * @param p the coordinate to test * @param geom the Geometry to test * @return true if the point is in the interior or boundary of the Geometry */ bool intersects(const geom::Coordinate& p, const geom::Geometry *geom) { return locate(p, geom) != geom::Location::EXTERIOR; } private: bool isIn; // true if the point lies in or on any Geometry element int numBoundaries; // the number of sub-elements whose boundaries the point lies in void computeLocation(const geom::Coordinate& p, const geom::Geometry *geom); void updateLocationInfo(int loc); int locate(const geom::Coordinate& p, const geom::LineString *l); int locateInPolygonRing(const geom::Coordinate& p, const geom::LinearRing *ring); int locate(const geom::Coordinate& p, const geom::Polygon *poly); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_POINTLOCATOR_H geos-3.4.2/include/geos/algorithm/RayCrossingCounter.h0000644000175000017500000001101412206417147022620 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: algorithm/RayCrossingCounter.java rev. 1.2 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H #define GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H #include #include // forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateSequence; } } namespace geos { namespace algorithm { /** \brief * Counts the number of segments crossed by a horizontal ray extending to the right * from a given point, in an incremental fashion. * * This can be used to determine whether a point lies in a {@link Polygonal} geometry. * The class determines the situation where the point lies exactly on a segment. * When being used for Point-In-Polygon determination, this case allows short-circuiting * the evaluation. * * This class handles polygonal geometries with any number of shells and holes. * The orientation of the shell and hole rings is unimportant. * In order to compute a correct location for a given polygonal geometry, * it is essential that all segments are counted which *

    *
  • touch the ray *
  • lie in in any ring which may contain the point *
* The only exception is when the point-on-segment situation is detected, in which * case no further processing is required. * The implication of the above rule is that segments * which can be a priori determined to not touch the ray * (i.e. by a test of their bounding box or Y-extent) * do not need to be counted. This allows for optimization by indexing. * * @author Martin Davis * */ class GEOS_DLL RayCrossingCounter { private: const geom::Coordinate& point; int crossingCount; // true if the test point lies on an input segment bool isPointOnSegment; // Declare type as noncopyable RayCrossingCounter(const RayCrossingCounter& other); RayCrossingCounter& operator=(const RayCrossingCounter& rhs); public: /** * Determines the {@link Location} of a point in a ring. * This method is an exemplar of how to use this class. * * @param p the point to test * @param ring an array of Coordinates forming a ring * @return the location of the point in the ring */ static int locatePointInRing(const geom::Coordinate& p, const geom::CoordinateSequence& ring); /// Semantically equal to the above, just different args encoding static int locatePointInRing(const geom::Coordinate& p, const std::vector& ring); RayCrossingCounter(const geom::Coordinate& point) : point( point), crossingCount( 0), isPointOnSegment( false) { } /** * Counts a segment * * @param p1 an endpoint of the segment * @param p2 another endpoint of the segment */ void countSegment(const geom::Coordinate& p1, const geom::Coordinate& p2); /** * Reports whether the point lies exactly on one of the supplied segments. * This method may be called at any time as segments are processed. * If the result of this method is true, * no further segments need be supplied, since the result * will never change again. * * @return true if the point lies exactly on a segment */ bool isOnSegment() { return isPointOnSegment; } /** * Gets the {@link Location} of the point relative to * the ring, polygon * or multipolygon from which the processed segments were provided. *

* This method only determines the correct location * if all relevant segments must have been processed. * * @return the Location of the point */ int getLocation(); /** * Tests whether the point lies in or on * the ring, polygon * or multipolygon from which the processed segments were provided. *

* This method only determines the correct location * if all relevant segments must have been processed. * * @return true if the point lies in or on the supplied polygon */ bool isPointInPolygon(); }; } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H geos-3.4.2/include/geos/algorithm/RobustDeterminant.h0000644000175000017500000000425212206417147022474 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/RobustDeterminant.java 1.15 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_ALGORITHM_ROBUSTDETERMINANT_H #define GEOS_ALGORITHM_ROBUSTDETERMINANT_H #include namespace geos { namespace algorithm { // geos::algorithm /** \brief * Implements an algorithm to compute the * sign of a 2x2 determinant for double precision values robustly. * * It is a direct translation of code developed by Olivier Devillers. * * The original code carries the following copyright notice: * *

 *************************************************************************
 * The original code carries the following copyright notice:
 * Author : Olivier Devillers
 * Olivier.Devillers@sophia.inria.fr
 * http:/www.inria.fr:/prisme/personnel/devillers/anglais/determinant.html
 *
 **************************************************************************
 *              Copyright (c) 1995  by  INRIA Prisme Project
 *                  BP 93 06902 Sophia Antipolis Cedex, France.
 *                           All rights reserved
 **********************************************************************
 * 
* */ class GEOS_DLL RobustDeterminant { public: /** \brief * Computes the sign of the determinant of the 2x2 matrix * with the given entries, in a robust way. * * @return -1 if the determinant is negative, * @return 1 if the determinant is positive, * @return 0 if the determinant is 0. */ static int signOfDet2x2(double x1,double y1,double x2,double y2); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_ROBUSTDETERMINANT_H geos-3.4.2/include/geos/algorithm/SIRtreePointInRing.h0000644000175000017500000000267112206417147022464 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_SIRTREEPOINTINRING_H #define GEOS_ALGORITHM_SIRTREEPOINTINRING_H #include #include // for inheritance #include // Forward declarations namespace geos { namespace geom { class Coordinate; class LineSegment; class LinearRing; } namespace index { namespace strtree { class SIRtree; } } } namespace geos { namespace algorithm { // geos::algorithm class GEOS_DLL SIRtreePointInRing: public PointInRing { private: geom::LinearRing *ring; index::strtree::SIRtree *sirTree; int crossings; // number of segment/ray crossings void buildIndex(); void testLineSegment(const geom::Coordinate& p, geom::LineSegment *seg); public: SIRtreePointInRing(geom::LinearRing *newRing); bool isInside(const geom::Coordinate& pt); }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_SIRTREEPOINTINRING_H geos-3.4.2/include/geos/algorithm/SimplePointInRing.h0000644000175000017500000000232612206417147022375 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_SIMPLEPOINTINRING_H #define GEOS_ALGORITHM_SIMPLEPOINTINRING_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; class LinearRing; class CoordinateSequence; } } namespace geos { namespace algorithm { // geos::algorithm class GEOS_DLL SimplePointInRing: public PointInRing { public: SimplePointInRing(geom::LinearRing *ring); virtual ~SimplePointInRing(); bool isInside(const geom::Coordinate& pt); private: const geom::CoordinateSequence* pts; }; } // namespace geos::algorithm } // namespace geos #endif // GEOS_ALGORITHM_SIMPLEPOINTINRING_H geos-3.4.2/include/geos/algorithm/distance/0000755000175000017500000000000012206417224020435 5ustar frankiefrankiegeos-3.4.2/include/geos/algorithm/distance/DiscreteHausdorffDistance.h0000644000175000017500000001571512206417147025702 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/distance/DiscreteHausdorffDistance.java 1.5 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H #define GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H #include #include // for composition #include // for composition #include // for inlines #include // for inlines #include // for inlines #include // for inheritance #include // for inheritance #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace algorithm { //class RayCrossingCounter; } namespace geom { class Geometry; class Coordinate; //class CoordinateSequence; } namespace index { namespace intervalrtree { //class SortedPackedIntervalRTree; } } } namespace geos { namespace algorithm { // geos::algorithm namespace distance { // geos::algorithm::distance /** \brief * An algorithm for computing a distance metric * which is an approximation to the Hausdorff Distance * based on a discretization of the input {@link Geometry}. * * The algorithm computes the Hausdorff distance restricted to discrete points * for one of the geometries. * The points can be either the vertices of the geometries (the default), * or the geometries with line segments densified by a given fraction. * Also determines two points of the Geometries which are separated by the * computed distance. * * This algorithm is an approximation to the standard Hausdorff distance. * Specifically, *
 *    for all geometries a, b:    DHD(a, b) <= HD(a, b)
 * 
* The approximation can be made as close as needed by densifying the * input geometries. * In the limit, this value will approach the true Hausdorff distance: *
 *    DHD(A, B, densifyFactor) -> HD(A, B) as densifyFactor -> 0.0
 * 
* The default approximation is exact or close enough for a large subset of * useful cases. * Examples of these are: * * - computing distance between Linestrings that are roughly parallel to * each other, and roughly equal in length. This occurs in matching * linear networks. * - Testing similarity of geometries. * * An example where the default approximation is not close is: *
 *   A = LINESTRING (0 0, 100 0, 10 100, 10 100)
 *   B = LINESTRING (0 100, 0 10, 80 10)
 *
 *   DHD(A, B) = 22.360679774997898
 *   HD(A, B) ~= 47.8
 * 
*/ class GEOS_DLL DiscreteHausdorffDistance { public: static double distance(const geom::Geometry& g0, const geom::Geometry& g1); static double distance(const geom::Geometry& g0, const geom::Geometry& g1, double densifyFrac); DiscreteHausdorffDistance(const geom::Geometry& g0, const geom::Geometry& g1) : g0(g0), g1(g1), ptDist(), densifyFrac(0.0) {} /** * Sets the fraction by which to densify each segment. * Each segment will be (virtually) split into a number of equal-length * subsegments, whose fraction of the total length is closest * to the given fraction. * * @param dFrac */ void setDensifyFraction(double dFrac) { if ( dFrac > 1.0 || dFrac <= 0.0 ) { throw util::IllegalArgumentException( "Fraction is not in range (0.0 - 1.0]"); } densifyFrac = dFrac; } double distance() { compute(g0, g1); return ptDist.getDistance(); } double orientedDistance() { computeOrientedDistance(g0, g1, ptDist); return ptDist.getDistance(); } const std::vector getCoordinates() const { return ptDist.getCoordinates(); } class MaxPointDistanceFilter : public geom::CoordinateFilter { public: MaxPointDistanceFilter(const geom::Geometry& geom) : geom(geom) {} void filter_ro(const geom::Coordinate* pt) { minPtDist.initialize(); DistanceToPoint::computeDistance(geom, *pt, minPtDist); maxPtDist.setMaximum(minPtDist); } const PointPairDistance& getMaxPointDistance() const { return maxPtDist; } private: PointPairDistance maxPtDist; PointPairDistance minPtDist; DistanceToPoint euclideanDist; const geom::Geometry& geom; // Declare type as noncopyable MaxPointDistanceFilter(const MaxPointDistanceFilter& other); MaxPointDistanceFilter& operator=(const MaxPointDistanceFilter& rhs); }; class MaxDensifiedByFractionDistanceFilter : public geom::CoordinateSequenceFilter { public: MaxDensifiedByFractionDistanceFilter( const geom::Geometry& geom, double fraction) : geom(geom), numSubSegs( std::size_t(util::round(1.0/fraction)) ) { } void filter_ro(const geom::CoordinateSequence& seq, std::size_t index); bool isGeometryChanged() const { return false; } bool isDone() const { return false; } const PointPairDistance& getMaxPointDistance() const { return maxPtDist; } private: PointPairDistance maxPtDist; PointPairDistance minPtDist; const geom::Geometry& geom; std::size_t numSubSegs; // = 0; // Declare type as noncopyable MaxDensifiedByFractionDistanceFilter(const MaxDensifiedByFractionDistanceFilter& other); MaxDensifiedByFractionDistanceFilter& operator=(const MaxDensifiedByFractionDistanceFilter& rhs); }; private: void compute(const geom::Geometry& g0, const geom::Geometry& g1) { computeOrientedDistance(g0, g1, ptDist); computeOrientedDistance(g1, g0, ptDist); } void computeOrientedDistance(const geom::Geometry& discreteGeom, const geom::Geometry& geom, PointPairDistance& ptDist); const geom::Geometry& g0; const geom::Geometry& g1; PointPairDistance ptDist; /// Value of 0.0 indicates that no densification should take place double densifyFrac; // = 0.0; // Declare type as noncopyable DiscreteHausdorffDistance(const DiscreteHausdorffDistance& other); DiscreteHausdorffDistance& operator=(const DiscreteHausdorffDistance& rhs); }; } // geos::algorithm::distance } // geos::algorithm } // geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_ALGORITHM_DISTANCE_DISCRETEHAUSDORFFDISTANCE_H geos-3.4.2/include/geos/algorithm/distance/DistanceToPoint.h0000644000175000017500000000403012206417147023656 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/distance/DistanceToPoint.java 1.1 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_ALGORITHM_DISTANCE_DISTANCETOPOINT_H #define GEOS_ALGORITHM_DISTANCE_DISTANCETOPOINT_H #include // for composition namespace geos { namespace algorithm { namespace distance { class PointPairDistance; } } namespace geom { class Geometry; class Coordinate; class LineString; class Polygon; } } namespace geos { namespace algorithm { // geos::algorithm namespace distance { // geos::algorithm::distance /** * Computes the Euclidean distance (L2 metric) from a Point to a Geometry. * * Also computes two points which are separated by the distance. */ class DistanceToPoint { public: DistanceToPoint() {} static void computeDistance(const geom::Geometry& geom, const geom::Coordinate& pt, PointPairDistance& ptDist); static void computeDistance(const geom::LineString& geom, const geom::Coordinate& pt, PointPairDistance& ptDist); static void computeDistance(const geom::LineSegment& geom, const geom::Coordinate& pt, PointPairDistance& ptDist); static void computeDistance(const geom::Polygon& geom, const geom::Coordinate& pt, PointPairDistance& ptDist); }; } // geos::algorithm::distance } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_DISTANCE_DISTANCETOPOINT_H geos-3.4.2/include/geos/algorithm/distance/Makefile.am0000644000175000017500000000036612206417147022502 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/algorithm/distance geos_HEADERS = \ DiscreteHausdorffDistance.h \ DistanceToPoint.h \ PointPairDistance.h geos-3.4.2/include/geos/algorithm/distance/Makefile.in0000644000175000017500000005110512206417161022504 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/algorithm/distance DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/algorithm/distance geos_HEADERS = \ DiscreteHausdorffDistance.h \ DistanceToPoint.h \ PointPairDistance.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/algorithm/distance/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/algorithm/distance/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/algorithm/distance/PointPairDistance.h0000644000175000017500000000556212206417147024202 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/distance/PointPairDistance.java 1.1 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H #define GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H #include // for DoubleNotANumber #include // for inlines #include // for composition #include namespace geos { namespace algorithm { // geos::algorithm namespace distance { // geos::algorithm::distance /** * Contains a pair of points and the distance between them. * Provides methods to update with a new point pair with * either maximum or minimum distance. */ class PointPairDistance { public: PointPairDistance() : pt(2), distance(DoubleNotANumber), isNull(true) { assert(pt.size() == 2); } void initialize() { isNull = true; } void initialize(const geom::Coordinate& p0, const geom::Coordinate& p1) { pt[0] = p0; pt[1] = p1; distance = p0.distance(p1); isNull = false; } double getDistance() const { return distance; } const std::vector& getCoordinates() const { return pt; } const geom::Coordinate& getCoordinate(unsigned int i) const { assert(i distance) initialize(p0, p1, dist); } void setMinimum(const PointPairDistance& ptDist) { setMinimum(ptDist.pt[0], ptDist.pt[1]); } void setMinimum(const geom::Coordinate& p0, const geom::Coordinate& p1) { if (isNull) { initialize(p0, p1); return; } double dist = p0.distance(p1); if (dist < distance) initialize(p0, p1, dist); } private: /** * Initializes the points, avoiding recomputing the distance. * @param p0 * @param p1 * @param dist the distance between p0 and p1 */ void initialize(const geom::Coordinate& p0, const geom::Coordinate& p1, double dist) { pt[0] = p0; pt[1] = p1; distance = dist; isNull = false; } std::vector pt; double distance; bool isNull; }; } // geos::algorithm::distance } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_DISTANCE_POINTPAIRDISTANCE_H geos-3.4.2/include/geos/algorithm/locate/0000755000175000017500000000000012206417224020112 5ustar frankiefrankiegeos-3.4.2/include/geos/algorithm/locate/IndexedPointInAreaLocator.h0000644000175000017500000000606012206417147025267 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H #define GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H #include // inherited #include // inherited #include // composition namespace geos { namespace algorithm { class RayCrossingCounter; } namespace geom { class Geometry; class Coordinate; class CoordinateSequence; class LineSegment; } namespace index { namespace intervalrtree { class SortedPackedIntervalRTree; } } } namespace geos { namespace algorithm { // geos::algorithm namespace locate { // geos::algorithm::locate /** \brief * Determines the location of {@link Coordinate}s relative to * a {@link Polygon} or {@link MultiPolygon} geometry, using indexing for efficiency. * * This algorithm is suitable for use in cases where * many points will be tested against a given area. * * @author Martin Davis * */ class IndexedPointInAreaLocator : public PointOnGeometryLocator { private: class IntervalIndexedGeometry { private: index::intervalrtree::SortedPackedIntervalRTree * index; void init( const geom::Geometry & g); void addLine( geom::CoordinateSequence * pts); // To keep track of allocated LineSegments std::vector< geom::LineSegment* > allocatedSegments; public: IntervalIndexedGeometry( const geom::Geometry & g); ~IntervalIndexedGeometry(); void query(double min, double max, index::ItemVisitor * visitor); }; class SegmentVisitor : public index::ItemVisitor { private: algorithm::RayCrossingCounter * counter; public: SegmentVisitor( algorithm::RayCrossingCounter * counter) : counter( counter) { } ~SegmentVisitor() { } void visitItem( void * item); }; const geom::Geometry & areaGeom; IntervalIndexedGeometry * index; void buildIndex( const geom::Geometry & g); // Declare type as noncopyable IndexedPointInAreaLocator(const IndexedPointInAreaLocator& other); IndexedPointInAreaLocator& operator=(const IndexedPointInAreaLocator& rhs); public: /** * Creates a new locator for a given {@link Geometry} * @param g the Geometry to locate in */ IndexedPointInAreaLocator( const geom::Geometry & g); ~IndexedPointInAreaLocator(); /** * Determines the {@link Location} of a point in an areal {@link Geometry}. * * @param p the point to test * @return the location of the point in the geometry */ int locate( const geom::Coordinate * /*const*/ p); }; } // geos::algorithm::locate } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_LOCATE_INDEXEDPOINTINAREALOCATOR_H geos-3.4.2/include/geos/algorithm/locate/Makefile.am0000644000175000017500000000040212206417147022146 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/algorithm/locate geos_HEADERS = \ IndexedPointInAreaLocator.h \ PointOnGeometryLocator.h \ SimplePointInAreaLocator.h geos-3.4.2/include/geos/algorithm/locate/Makefile.in0000644000175000017500000005111312206417161022160 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/algorithm/locate DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/algorithm/locate geos_HEADERS = \ IndexedPointInAreaLocator.h \ PointOnGeometryLocator.h \ SimplePointInAreaLocator.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/algorithm/locate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/algorithm/locate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/algorithm/locate/PointOnGeometryLocator.h0000644000175000017500000000260312206417147024716 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_ALGORITHM_LOCATE_POINTONGEOMETRYLOCATOR_H #define GEOS_ALGORITHM_LOCATE_POINTONGEOMETRYLOCATOR_H namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace algorithm { // geos::algorithm namespace locate { // geos::algorithm::locate /** \brief * An interface for classes which determine the {@link Location} of * points in {@link Polygon} or {@link MultiPolygon} geometries. * * @author Martin Davis */ class PointOnGeometryLocator { private: protected: public: virtual ~PointOnGeometryLocator() { } /** * Determines the {@link Location} of a point in an areal {@link Geometry}. * * @param p the point to test * @return the location of the point in the geometry */ virtual int locate( const geom::Coordinate * /*const*/ p) =0; }; } // geos::algorithm::locate } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_LOCATE_POINTONGEOMETRYLOCATOR_H geos-3.4.2/include/geos/algorithm/locate/SimplePointInAreaLocator.h0000644000175000017500000000372112206417147025141 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_ALGORITHM_LOCATE_SIMPLEPOINTINAREALOCATOR_H #define GEOS_ALGORITHM_LOCATE_SIMPLEPOINTINAREALOCATOR_H #include // inherited // Forward declarations namespace geos { namespace geom { class Geometry; class Coordinate; class Polygon; } } namespace geos { namespace algorithm { // geos::algorithm namespace locate { // geos::algorithm::locate /** \brief * Computes the location of points * relative to an areal {@link Geometry}, * using a simple O(n) algorithm. * * This algorithm is suitable for use in cases where * only one or a few points will be tested against a given area. * * The algorithm used is only guaranteed to return correct results * for points which are not on the boundary of the Geometry. * * @version 1.7 */ class SimplePointInAreaLocator : public PointOnGeometryLocator { public: static int locate(const geom::Coordinate& p, const geom::Geometry *geom); static bool containsPointInPolygon(const geom::Coordinate& p, const geom::Polygon *poly); SimplePointInAreaLocator( const geom::Geometry * g) : g( g) { } int locate( const geom::Coordinate * p) { return locate( *p, g); } private: static bool containsPoint(const geom::Coordinate& p, const geom::Geometry *geom); const geom::Geometry * g; }; } // geos::algorithm::locate } // geos::algorithm } // geos #endif // GEOS_ALGORITHM_LOCATE_SIMPLEPOINTINAREALOCATOR_H geos-3.4.2/include/geos/export.h0000644000175000017500000000160612206417147016356 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Ragi Y. Burhum * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_EXPORT_H #define GEOS_EXPORT_H #if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || \ defined( __BCPLUSPLUS__) || defined( __MWERKS__) # if defined(GEOS_DLL_EXPORT) # define GEOS_DLL __declspec(dllexport) # elif defined(GEOS_DLL_IMPORT) # define GEOS_DLL __declspec(dllimport) # else # define GEOS_DLL # endif #else # define GEOS_DLL #endif #endif geos-3.4.2/include/geos/geom/0000755000175000017500000000000012206417224015604 5ustar frankiefrankiegeos-3.4.2/include/geos/geom/BinaryOp.h0000644000175000017500000003550612206417147017515 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2013 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK * ********************************************************************** * * This file provides a single templated function, taking two * const Geometry pointers, applying a binary operator to them * and returning a result Geometry in an auto_ptr<>. * * The binary operator is expected to take two const Geometry pointers * and return a newly allocated Geometry pointer, possibly throwing * a TopologyException to signal it couldn't succeed due to robustness * issues. * * This function will catch TopologyExceptions and try again with * slightly modified versions of the input. The following heuristic * is used: * * - Try with original input. * - Try removing common bits from input coordinate values * - Try snaping input geometries to each other * - Try snaping input coordinates to a increasing grid (size from 1/25 to 1) * - Try simplifiying input with increasing tolerance (from 0.01 to 0.04) * * If none of the step succeeds the original exception is thrown. * * Note that you can skip Grid snapping, Geometry snapping and Simplify policies * by a compile-time define when building geos. * See USE_TP_SIMPLIFY_POLICY, USE_PRECISION_REDUCTION_POLICY and * USE_SNAPPING_POLICY macros below. * * **********************************************************************/ #ifndef GEOS_GEOM_BINARYOP_H #define GEOS_GEOM_BINARYOP_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for auto_ptr //#define GEOS_DEBUG_BINARYOP 1 #ifdef GEOS_DEBUG_BINARYOP # include # include # include #endif /* * Always try original input first */ #ifndef USE_ORIGINAL_INPUT # define USE_ORIGINAL_INPUT 1 #endif /* * Define this to use PrecisionReduction policy * in an attempt at by-passing binary operation * robustness problems (handles TopologyExceptions) */ #ifndef USE_PRECISION_REDUCTION_POLICY # define USE_PRECISION_REDUCTION_POLICY 1 #endif /* * Define this to use TopologyPreserving simplification policy * in an attempt at by-passing binary operation * robustness problems (handles TopologyExceptions) */ #ifndef USE_TP_SIMPLIFY_POLICY //# define USE_TP_SIMPLIFY_POLICY 1 #endif /* * Use common bits removal policy. * If enabled, this would be tried /before/ * Geometry snapping. */ #ifndef USE_COMMONBITS_POLICY # define USE_COMMONBITS_POLICY 1 #endif /* * Check validity of operation performed * by common bits removal policy. * * This matches what EnhancedPrecisionOp does in JTS * and fixes 5 tests of invalid outputs in our testsuite * (stmlf-cases-20061020-invalid-output.xml) * and breaks 1 test (robustness-invalid-output.xml) so much * to prevent a result. * */ #define GEOS_CHECK_COMMONBITS_VALIDITY 1 /* * Use snapping policy */ #ifndef USE_SNAPPING_POLICY # define USE_SNAPPING_POLICY 1 #endif namespace geos { namespace geom { // geos::geom inline bool check_valid(const Geometry& g, const std::string& label, bool doThrow=false, bool validOnly=false) { if ( dynamic_cast(&g) ) { if ( ! validOnly ) { operation::IsSimpleOp sop(g, algorithm::BoundaryNodeRule::getBoundaryEndPoint()); if ( ! sop.isSimple() ) { if ( doThrow ) { throw geos::util::TopologyException( label + " is not simple"); } return false; } } } else { operation::valid::IsValidOp ivo(&g); if ( ! ivo.isValid() ) { using operation::valid::TopologyValidationError; TopologyValidationError* err = ivo.getValidationError(); #ifdef GEOS_DEBUG_BINARYOP std::cerr << label << " is INVALID: " << err->toString() << " (" << std::setprecision(20) << err->getCoordinate() << ")" << std::endl; #endif if ( doThrow ) { throw geos::util::TopologyException( label + " is invalid: " + err->toString(), err->getCoordinate()); } return false; } } return true; } /* * Attempt to fix noding of multilines and * self-intersection of multipolygons * * May return the input untouched. */ inline std::auto_ptr fix_self_intersections(std::auto_ptr g, const std::string& label) { #ifdef GEOS_DEBUG_BINARYOP std::cerr << label << " fix_self_intersection (UnaryUnion)" << std::endl; #endif // Only multi-components can be fixed by UnaryUnion if ( ! dynamic_cast(g.get()) ) return g; using operation::valid::IsValidOp; IsValidOp ivo(g.get()); // Polygon is valid, nothing to do if ( ivo.isValid() ) return g; // Not all invalidities can be fixed by this code using operation::valid::TopologyValidationError; TopologyValidationError* err = ivo.getValidationError(); switch ( err->getErrorType() ) { case TopologyValidationError::eRingSelfIntersection: case TopologyValidationError::eTooFewPoints: // collapsed lines #ifdef GEOS_DEBUG_BINARYOP std::cerr << label << " ATTEMPT_TO_FIX: " << err->getErrorType() << ": " << *g << std::endl; #endif g = g->Union(); #ifdef GEOS_DEBUG_BINARYOP std::cerr << label << " ATTEMPT_TO_FIX succeeded.. " << std::endl; #endif return g; case TopologyValidationError::eSelfIntersection: // this one is within a single component, won't be fixed default: #ifdef GEOS_DEBUG_BINARYOP std::cerr << label << " invalidity is: " << err->getErrorType() << std::endl; #endif return g; } } /// \brief /// Apply a binary operation to the given geometries /// after snapping them to each other after common-bits /// removal. /// template std::auto_ptr SnapOp(const Geometry* g0, const Geometry *g1, BinOp _Op) { typedef std::auto_ptr GeomPtr; #define CBR_BEFORE_SNAPPING 1 //using geos::precision::GeometrySnapper; using geos::operation::overlay::snap::GeometrySnapper; // Snap tolerance must be computed on the original // (not commonbits-removed) geoms double snapTolerance = GeometrySnapper::computeOverlaySnapTolerance(*g0, *g1); #if GEOS_DEBUG_BINARYOP std::cerr<< std::setprecision(20) << "Computed snap tolerance: "<clone()) ); GeomPtr rG1( cbr.removeCommonBits(g1->clone()) ); #if GEOS_DEBUG_BINARYOP check_valid(*rG0, "CBR: removed-bits geom 0"); check_valid(*rG1, "CBR: removed-bits geom 1"); #endif const Geometry& operand0 = *rG0; const Geometry& operand1 = *rG1; #else // don't CBR before snapping const Geometry& operand0 = *g0; const Geometry& operand1 = *g1; #endif GeometrySnapper snapper0( operand0 ); GeomPtr snapG0( snapper0.snapTo(operand1, snapTolerance) ); //snapG0 = fix_self_intersections(snapG0, "SNAP: snapped geom 0"); // NOTE: second geom is snapped on the snapped first one GeometrySnapper snapper1( operand1 ); GeomPtr snapG1( snapper1.snapTo(*snapG0, snapTolerance) ); //snapG1 = fix_self_intersections(snapG1, "SNAP: snapped geom 1"); // Run the binary op GeomPtr result( _Op(snapG0.get(), snapG1.get()) ); #if GEOS_DEBUG_BINARYOP check_valid(*result, "SNAP: result (before common-bits addition"); #endif #if CBR_BEFORE_SNAPPING // Add common bits back in cbr.addCommonBits( result.get() ); //result = fix_self_intersections(result, "SNAP: result (after common-bits addition)"); check_valid(*result, "CBR: result (after common-bits addition)", true); #endif return result; } template std::auto_ptr BinaryOp(const Geometry* g0, const Geometry *g1, BinOp _Op) { typedef std::auto_ptr GeomPtr; GeomPtr ret; geos::util::TopologyException origException; #ifdef USE_ORIGINAL_INPUT // Try with original input try { #if GEOS_DEBUG_BINARYOP std::cerr << "Trying with original input." << std::endl; #endif ret.reset(_Op(g0, g1)); return ret; } catch (const geos::util::TopologyException& ex) { origException=ex; #if GEOS_DEBUG_BINARYOP std::cerr << "Original exception: " << ex.what() << std::endl; #endif } check_valid(*g0, "Input geom 0", true, true); check_valid(*g1, "Input geom 1", true, true); #if GEOS_DEBUG_BINARYOP // Should we just give up here ? check_valid(*g0, "Input geom 0"); check_valid(*g1, "Input geom 1"); #endif #endif // USE_ORIGINAL_INPUT #ifdef USE_COMMONBITS_POLICY // Try removing common bits (possibly obsoleted by snapping below) // // NOTE: this policy was _later_ implemented // in JTS as EnhancedPrecisionOp // TODO: consider using the now-ported EnhancedPrecisionOp // here too // try { GeomPtr rG0; GeomPtr rG1; precision::CommonBitsRemover cbr; #if GEOS_DEBUG_BINARYOP std::cerr << "Trying with Common Bits Remover (CBR)" << std::endl; #endif cbr.add(g0); cbr.add(g1); rG0.reset( cbr.removeCommonBits(g0->clone()) ); rG1.reset( cbr.removeCommonBits(g1->clone()) ); #if GEOS_DEBUG_BINARYOP check_valid(*rG0, "CBR: geom 0 (after common-bits removal)"); check_valid(*rG1, "CBR: geom 1 (after common-bits removal)"); #endif ret.reset( _Op(rG0.get(), rG1.get()) ); #if GEOS_DEBUG_BINARYOP check_valid(*ret, "CBR: result (before common-bits addition)"); #endif cbr.addCommonBits( ret.get() ); check_valid(*ret, "CBR: result (after common-bits addition)", true); #if GEOS_CHECK_COMMONBITS_VALIDITY // check that result is a valid geometry after the // reshift to orginal precision (see EnhancedPrecisionOp) using operation::valid::IsValidOp; using operation::valid::TopologyValidationError; IsValidOp ivo(ret.get()); if ( ! ivo.isValid() ) { TopologyValidationError* e = ivo.getValidationError(); throw geos::util::TopologyException( "Result of overlay became invalid " "after re-addin common bits of operand " "coordinates: " + e->toString(), e->getCoordinate()); } #endif // GEOS_CHECK_COMMONBITS_VALIDITY return ret; } catch (const geos::util::TopologyException& ex) { ::geos::ignore_unused_variable_warning(ex); #if GEOS_DEBUG_BINARYOP std::cerr << "CBR: " << ex.what() << std::endl; #endif } #endif // Try with snapping // // TODO: possible optimization would be reusing the // already common-bit-removed inputs and just // apply geometry snapping, whereas the current // SnapOp function does both. // { #if USE_SNAPPING_POLICY #if GEOS_DEBUG_BINARYOP std::cerr << "Trying with snapping " << std::endl; #endif try { ret = SnapOp(g0, g1, _Op); #if GEOS_DEBUG_BINARYOP std::cerr << "SnapOp succeeded" << std::endl; #endif return ret; } catch (const geos::util::TopologyException& ex) { ::geos::ignore_unused_variable_warning(ex); #if GEOS_DEBUG_BINARYOP std::cerr << "SNAP: " << ex.what() << std::endl; #endif } #endif // USE_SNAPPING_POLICY } // { #if USE_PRECISION_REDUCTION_POLICY // Try reducing precision try { long unsigned int g0scale = g0->getFactory()->getPrecisionModel()->getScale(); long unsigned int g1scale = g1->getFactory()->getPrecisionModel()->getScale(); #if GEOS_DEBUG_BINARYOP std::cerr << "Original input scales are: " << g0scale << " and " << g1scale << std::endl; #endif double maxScale = 1e16; // Don't use a scale bigger than the input one if ( g0scale && g0scale < maxScale ) maxScale = g0scale; if ( g1scale && g1scale < maxScale ) maxScale = g1scale; for (double scale=maxScale; scale >= 1; scale /= 10) { PrecisionModel pm(scale); GeometryFactory gf(&pm); #if GEOS_DEBUG_BINARYOP std::cerr << "Trying with scale " << scale << std::endl; #endif precision::GeometryPrecisionReducer reducer( gf ); GeomPtr rG0( reducer.reduce(*g0) ); GeomPtr rG1( reducer.reduce(*g1) ); try { ret.reset( _Op(rG0.get(), rG1.get()) ); // restore original precision (least precision between inputs) if ( g0->getFactory()->getPrecisionModel()->compareTo( g1->getFactory()->getPrecisionModel() ) < 0 ) { ret.reset( g0->getFactory()->createGeometry(ret.get()) ); } else { ret.reset( g1->getFactory()->createGeometry(ret.get()) ); } return ret; } catch (const geos::util::TopologyException& ex) { if ( scale == 1 ) throw ex; #if GEOS_DEBUG_BINARYOP std::cerr << "Reduced with scale (" << scale << "): " << ex.what() << std::endl; #endif } } } catch (const geos::util::TopologyException& ex) { #if GEOS_DEBUG_BINARYOP std::cerr << "Reduced: " << ex.what() << std::endl; #endif } #endif // USE_PRECISION_REDUCTION_POLICY } // { #if USE_TP_SIMPLIFY_POLICY // Try simplifying try { double maxTolerance = 0.04; double minTolerance = 0.01; double tolStep = 0.01; for (double tol = minTolerance; tol <= maxTolerance; tol += tolStep) { #if GEOS_DEBUG_BINARYOP std::cerr << "Trying simplifying with tolerance " << tol << std::endl; #endif GeomPtr rG0( simplify::TopologyPreservingSimplifier::simplify(g0, tol) ); GeomPtr rG1( simplify::TopologyPreservingSimplifier::simplify(g1, tol) ); try { ret.reset( _Op(rG0.get(), rG1.get()) ); return ret; } catch (const geos::util::TopologyException& ex) { if ( tol >= maxTolerance ) throw ex; #if GEOS_DEBUG_BINARYOP std::cerr << "Simplified with tolerance (" << tol << "): " << ex.what() << std::endl; #endif } } return ret; } catch (const geos::util::TopologyException& ex) { #if GEOS_DEBUG_BINARYOP std::cerr << "Simplified: " << ex.what() << std::endl; #endif } #endif // USE_TP_SIMPLIFY_POLICY } throw origException; } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_BINARYOP_H geos-3.4.2/include/geos/geom/Coordinate.h0000644000175000017500000001023212206417147020046 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATE_H #define GEOS_GEOM_COORDINATE_H #include #include // for DoubleNotANumber #include #include #include #include // for typedefs #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace geom { // geos.geom struct CoordinateLessThen; /** * \class Coordinate geom.h geos.h * * \brief * Coordinate is the lightweight class used to store coordinates. * * It is distinct from Point, which is a subclass of Geometry. * Unlike objects of type Point (which contain additional * information such as an envelope, a precision model, and spatial * reference system information), a Coordinate only contains * ordinate values and accessor methods. * * Coordinate objects are two-dimensional points, with an additional * z-ordinate. JTS does not support any operations on the z-ordinate except * the basic accessor functions. * * Constructed coordinates will have a z-ordinate of DoubleNotANumber. * The standard comparison functions will ignore the z-ordinate. * */ // Define the following to make assignments and copy constructions // NON-inline (will let profilers report usages) //#define PROFILE_COORDINATE_COPIES 1 class GEOS_DLL Coordinate { private: static Coordinate nullCoord; public: /// A set of const Coordinate pointers typedef std::set ConstSet; /// A vector of const Coordinate pointers typedef std::vector ConstVect; /// A stack of const Coordinate pointers typedef std::stack ConstStack; /// A vector of Coordinate objects (real object, not pointers) typedef std::vector Vect; /// x-coordinate double x; /// y-coordinate double y; /// z-coordinate double z; void setNull(); static Coordinate& getNull(); bool isNull() const; Coordinate(double xNew=0.0, double yNew=0.0, double zNew=DoubleNotANumber); bool equals2D(const Coordinate& other) const; /// 2D only bool equals(const Coordinate& other) const; /// TODO: deprecate this, move logic to CoordinateLessThen instead int compareTo(const Coordinate& other) const; /// 3D comparison bool equals3D(const Coordinate& other) const; /// Returns a string of the form (x,y,z) . std::string toString() const; /// TODO: obsoleted this, can use PrecisionModel::makePrecise(Coordinate*) /// instead //void makePrecise(const PrecisionModel *pm); double distance(const Coordinate& p) const; int hashCode() const; /** * Returns a hash code for a double value, using the algorithm from * Joshua Bloch's book Effective Java */ static int hashCode(double d); }; /// Strict weak ordering Functor for Coordinate struct GEOS_DLL CoordinateLessThen { bool operator()(const Coordinate* a, const Coordinate* b) const; bool operator()(const Coordinate& a, const Coordinate& b) const; }; /// Strict weak ordering operator for Coordinate inline bool operator<(const Coordinate& a, const Coordinate& b) { return CoordinateLessThen()(a,b); } /// Output function GEOS_DLL std::ostream& operator<< (std::ostream& os, const Coordinate& c); /// Equality operator for Coordinate. 2D only. GEOS_DLL bool operator==(const Coordinate& a, const Coordinate& b); /// Inequality operator for Coordinate. 2D only. GEOS_DLL bool operator!=(const Coordinate& a, const Coordinate& b); } // namespace geos.geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef GEOS_INLINE # include "geos/geom/Coordinate.inl" #endif #endif // ndef GEOS_GEOM_COORDINATE_H geos-3.4.2/include/geos/geom/Coordinate.inl0000644000175000017500000000516412206417147020411 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATE_INL #define GEOS_GEOM_COORDINATE_INL #include #include // for DoubleNotANumber #include #include namespace geos { namespace geom { // geos::geom INLINE void Coordinate::setNull() { x=DoubleNotANumber; y=DoubleNotANumber; z=DoubleNotANumber; } INLINE bool Coordinate::isNull() const { return (ISNAN(x) && ISNAN(y) && ISNAN(z)); } INLINE Coordinate::Coordinate(double xNew, double yNew, double zNew) : x(xNew), y(yNew), z(zNew) {} INLINE bool Coordinate::equals2D(const Coordinate& other) const { if (x != other.x) return false; if (y != other.y) return false; return true; } INLINE bool Coordinate::equals(const Coordinate& other) const { return equals2D(other); } INLINE int Coordinate::compareTo(const Coordinate& other) const { if (x < other.x) return -1; if (x > other.x) return 1; if (y < other.y) return -1; if (y > other.y) return 1; return 0; } INLINE bool Coordinate::equals3D(const Coordinate& other) const { return (x == other.x) && ( y == other.y) && ((z == other.z)||(ISNAN(z) && ISNAN(other.z))); } INLINE double Coordinate::distance(const Coordinate& p) const { double dx = x - p.x; double dy = y - p.y; return std::sqrt(dx * dx + dy * dy); } INLINE int Coordinate::hashCode() const { //Algorithm from Effective Java by Joshua Bloch [Jon Aquino] int result = 17; result = 37 * result + hashCode(x); result = 37 * result + hashCode(y); return result; } /*static*/ INLINE int Coordinate::hashCode(double d) { int64 f = (int64)(d); return (int)(f^(f>>32)); } INLINE bool CoordinateLessThen::operator()(const Coordinate* a, const Coordinate* b) const { if (a->compareTo(*b)<0) return true; else return false; } INLINE bool CoordinateLessThen::operator()(const Coordinate& a, const Coordinate& b) const { if (a.compareTo(b)<0) return true; else return false; } INLINE bool operator==(const Coordinate& a, const Coordinate& b) { return a.equals2D(b); } INLINE bool operator!=(const Coordinate& a, const Coordinate& b) { return ! a.equals2D(b); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_COORDINATE_INL geos-3.4.2/include/geos/geom/CoordinateArraySequence.h0000644000175000017500000000663312206417147022550 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATEARRAYSEQUENCE_H #define GEOS_GEOM_COORDINATEARRAYSEQUENCE_H #include #include #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace geom { // geos.geom /// The default implementation of CoordinateSequence class GEOS_DLL CoordinateArraySequence : public CoordinateSequence { public: CoordinateArraySequence(const CoordinateArraySequence &cl); CoordinateArraySequence(const CoordinateSequence &cl); CoordinateSequence *clone() const; //const Coordinate& getCoordinate(int pos) const; const Coordinate& getAt(std::size_t pos) const; /// Copy Coordinate at position i to Coordinate c virtual void getAt(std::size_t i, Coordinate& c) const; //int size() const; size_t getSize() const; // @deprecated const std::vector* toVector() const; // See dox in CoordinateSequence.h void toVector(std::vector&) const; /// Construct an empty sequence CoordinateArraySequence(); /// Construct sequence taking ownership of given Coordinate vector CoordinateArraySequence(std::vector *coords, std::size_t dimension = 0); /// Construct sequence allocating space for n coordinates CoordinateArraySequence(std::size_t n, std::size_t dimension = 0); ~CoordinateArraySequence(); bool isEmpty() const { return empty(); } bool empty() const { return vect->empty(); } /// Reset this CoordinateArraySequence to the empty state void clear() { vect->clear(); } void add(const Coordinate& c); virtual void add(const Coordinate& c, bool allowRepeated); /** \brief * Inserts the specified coordinate at the specified position in * this list. * * @param i the position at which to insert * @param coord the coordinate to insert * @param allowRepeated if set to false, repeated coordinates are * collapsed * * NOTE: this is a CoordinateList interface in JTS */ virtual void add(std::size_t i, const Coordinate& coord, bool allowRepeated); void setAt(const Coordinate& c, std::size_t pos); void deleteAt(std::size_t pos); std::string toString() const; void setPoints(const std::vector &v); double getOrdinate(std::size_t index, size_t ordinateIndex) const; void setOrdinate(std::size_t index, std::size_t ordinateIndex, double value); void expandEnvelope(Envelope &env) const; std::size_t getDimension() const; void apply_rw(const CoordinateFilter *filter); void apply_ro(CoordinateFilter *filter) const; virtual CoordinateSequence& removeRepeatedPoints(); private: std::vector *vect; mutable std::size_t dimension; }; /// This is for backward API compatibility typedef CoordinateArraySequence DefaultCoordinateSequence; } // namespace geos.geom } // namespace geos #endif // ndef GEOS_GEOM_COORDINATEARRAYSEQUENCE_H geos-3.4.2/include/geos/geom/CoordinateArraySequenceFactory.h0000644000175000017500000000404512206417147024073 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_H #define GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_H #include #include #include // for inheritance #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace geom { // geos::geom /** * \class CoordinateArraySequenceFactory geom.h geos.h * * \brief * Creates CoordinateSequences internally represented as an array of * Coordinates. */ class GEOS_DLL CoordinateArraySequenceFactory: public CoordinateSequenceFactory { public: /** \brief * Returns a CoordinateArraySequence based on the given vector * (the vector is not copied - callers give up ownership). */ CoordinateSequence *create(std::vector *coords) const; CoordinateSequence *create(std::vector *coords, std::size_t dims) const; /** @see CoordinateSequenceFactory::create(std::size_t, int) */ CoordinateSequence *create(std::size_t size, std::size_t dimension=0) const; CoordinateSequence *create(const CoordinateSequence &coordSeq) const; /** \brief * Returns the singleton instance of CoordinateArraySequenceFactory */ static const CoordinateSequenceFactory *instance(); }; /// This is for backward API compatibility typedef CoordinateArraySequenceFactory DefaultCoordinateSequenceFactory; } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/CoordinateArraySequenceFactory.inl" #endif #endif // ndef GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_H geos-3.4.2/include/geos/geom/CoordinateArraySequenceFactory.inl0000644000175000017500000000301212206417147024417 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_INL #define GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_INL #include #include #include namespace geos { namespace geom { // geos::geom INLINE CoordinateSequence* CoordinateArraySequenceFactory::create(std::vector *coords) const { return new CoordinateArraySequence(coords,3); } INLINE CoordinateSequence * CoordinateArraySequenceFactory::create(std::vector *coords, size_t dimension ) const { return new CoordinateArraySequence(coords,dimension); } INLINE CoordinateSequence * CoordinateArraySequenceFactory::create(std::size_t size, std::size_t dimension) const { return new CoordinateArraySequence(size,dimension); } INLINE CoordinateSequence * CoordinateArraySequenceFactory::create(const CoordinateSequence& seq) const { return new CoordinateArraySequence(seq); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_COORDINATEARRAYSEQUENCEFACTORY_INL geos-3.4.2/include/geos/geom/CoordinateFilter.h0000644000175000017500000000400012206417147021210 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATEFILTER_H #define GEOS_GEOM_COORDINATEFILTER_H #include #include #include namespace geos { namespace geom { // geos::geom class Coordinate; /** * Geometry classes support the concept of applying a * coordinate filter to every coordinate in the Geometry. * * A coordinate filter can either record information about each coordinate or * change the coordinate in some way. Coordinate filters implement the * interface CoordinateFilter. (CoordinateFilter is * an example of the Gang-of-Four Visitor pattern). Coordinate filters can be * used to implement such things as coordinate transformations, centroid and * envelope computation, and many other functions. * * TODO: provide geom::CoordinateInspector and geom::CoordinateMutator instead * of having the two versions of filter_rw and filter_ro * */ class GEOS_DLL CoordinateFilter { public: virtual ~CoordinateFilter() {} /** * Performs an operation on coord. * * @param coord a Coordinate to which the filter is applied. */ virtual void filter_rw(Coordinate* /*coord*/) const { assert(0); } /** * Performs an operation with coord. * * @param coord a Coordinate to which the filter is applied. */ virtual void filter_ro(const Coordinate* /*coord*/) { assert(0); } }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_COORDINATEFILTER_H geos-3.4.2/include/geos/geom/CoordinateList.h0000644000175000017500000001035212206417147020705 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/CoordinateList.java ?? (never been in complete sync) * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATELIST_H #define GEOS_GEOM_COORDINATELIST_H #include #include #include #include // for operator<< #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class Coordinate; } } namespace geos { namespace geom { // geos::geom /** \brief * A list of {@link Coordinate}s, which may * be set to prevent repeated coordinates from occuring in the list. * * Use this class when fast insertions and removal at arbitrary * position is needed. * The class keeps ownership of the Coordinates. * */ class GEOS_DLL CoordinateList { public: typedef std::list::iterator iterator; typedef std::list::const_iterator const_iterator; typedef std::list::size_type size_type; friend std::ostream& operator<< (std::ostream& os, const CoordinateList& cl); /** \brief * Constructs a new list from an array of Coordinates, allowing * repeated points. * * (I.e. this constructor produces a {@link CoordinateList} with * exactly the same set of points as the input array.) * * @param v the initial coordinates */ CoordinateList(const std::vector& v) : coords(v.begin(), v.end()) { } CoordinateList() : coords() { } size_type size() const { return coords.size(); } bool empty() const { return coords.empty(); } iterator begin() { return coords.begin(); } iterator end() { return coords.end(); } const_iterator begin() const { return coords.begin(); } const_iterator end() const { return coords.end(); } /** \brief * Inserts the specified coordinate at the specified position in this list. * * @param pos the position at which to insert * @param coord the coordinate to insert * @param allowRepeated if set to false, repeated coordinates are collapsed * * @return an iterator to the newly installed coordinate * (or previous, if equal and repeated are not allowed) * * NOTE: when allowRepeated is false _next_ point is not checked * this matches JTS behavior */ iterator insert(iterator pos, const Coordinate& c, bool allowRepeated) { if ( !allowRepeated && pos != coords.begin() ) { iterator prev = pos; --prev; if ( c.equals2D(*prev) ) return prev; } return coords.insert(pos, c); } iterator insert(iterator pos, const Coordinate& c) { return coords.insert(pos, c); } iterator erase(iterator pos) { return coords.erase(pos); } iterator erase(iterator first, iterator last) { return coords.erase(first, last); } std::auto_ptr toCoordinateArray() const { std::auto_ptr ret(new Coordinate::Vect); ret->assign(coords.begin(), coords.end()); return ret; } void closeRing() { if(!coords.empty() && ! (*(coords.begin())).equals(*(coords.rbegin()))) { const Coordinate &c = *(coords.begin()); coords.insert(coords.end(),c); } } private: std::list coords; }; inline std::ostream& operator<< (std::ostream& os, const CoordinateList& cl) { os << "("; for (CoordinateList::const_iterator it=cl.begin(), end=cl.end(); it != end; ++it) { const Coordinate& c = *it; if ( it != cl.begin() ) os << ", "; os << c; } os << ")"; return os; } } // namespace geos::geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_GEOM_COORDINATELIST_H geos-3.4.2/include/geos/geom/CoordinateSequence.h0000644000175000017500000002777412206417147021562 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATESEQUENCE_H #define GEOS_GEOM_COORDINATESEQUENCE_H #include #include #include #include // for applyCoordinateFilter #include #include // ostream #include // for auto_ptr typedef // Forward declarations namespace geos { namespace geom { class Envelope; class CoordinateFilter; class Coordinate; } } namespace geos { namespace geom { // geos::geom /** * \class CoordinateSequence geom.h geos.h * * \brief * The internal representation of a list of coordinates inside a Geometry. * * There are some cases in which you might want Geometries to store their * points using something other than the GEOS Coordinate class. For example, you * may want to experiment with another implementation, such as an array of Xs * and an array of Ys. or you might want to use your own coordinate class, one * that supports extra attributes like M-values. * * You can do this by implementing the CoordinateSequence and * CoordinateSequenceFactory interfaces. You would then create a * GeometryFactory parameterized by your CoordinateSequenceFactory, and use * this GeometryFactory to create new Geometries. All of these new Geometries * will use your CoordinateSequence implementation. * */ class GEOS_DLL CoordinateSequence { protected: CoordinateSequence() {} CoordinateSequence(const CoordinateSequence&) {} public: typedef std::auto_ptr AutoPtr; virtual ~CoordinateSequence() {} /** \brief * Returns a deep copy of this collection. */ virtual CoordinateSequence *clone() const=0; /** \brief * Returns a read-only reference to Coordinate at position i. * * Whether or not the Coordinate returned is the actual underlying * Coordinate or merely a copy depends on the implementation. */ //virtual const Coordinate& getCoordinate(int i) const=0; virtual const Coordinate& getAt(std::size_t i) const=0; /// Return last Coordinate in the sequence const Coordinate& back() const { return getAt(size()-1); } /// Return first Coordinate in the sequence const Coordinate& front() const { return getAt(0); } const Coordinate& operator[] (std::size_t i) const { return getAt(i); } /** \brief * Write Coordinate at position i to given Coordinate. */ virtual void getAt(std::size_t i, Coordinate& c) const=0; /** \brief * Returns the number of Coordinates (actual or otherwise, as * this implementation may not store its data in Coordinate objects). */ //virtual int size() const=0; virtual std::size_t getSize() const=0; size_t size() const { return getSize(); } /** \brief * Returns a read-only vector with the Coordinates in this collection. * * Whether or not the Coordinates returned are the actual underlying * Coordinates or merely copies depends on the implementation. * Note that if this implementation does not store its data as an * array of Coordinates, this method will incur a performance penalty * because the array needs to be built from scratch. * * This method is a port of the toCoordinateArray() method of JTS. * It is not much used as memory management requires us to * know wheter we should or not delete the returned object * in a consistent way. Our options are: use shared_ptr * or always keep ownerhips of an eventual newly created vector. * We opted for the second, so the returned object is a const, to * also ensure that returning an internal pointer doesn't make * the object mutable. * * @deprecated use toVector(std::vector&) instead */ virtual const std::vector* toVector() const=0; /// Pushes all Coordinates of this sequence onto the provided vector. // /// This method is a port of the toCoordinateArray() method of JTS. /// virtual void toVector(std::vector& coords) const=0; /** * \brief Add an array of coordinates * @param vc The coordinates * @param allowRepeated if set to false, repeated coordinates * are collapsed * @return true (as by general collection contract) */ void add(const std::vector* vc, bool allowRepeated); /* This is here for backward compatibility.. */ //void add(CoordinateSequence *cl,bool allowRepeated,bool direction); /** \brief * Add an array of coordinates * * @param cl The coordinates * * @param allowRepeated * if set to false, repeated coordinates are collapsed * * @param direction if false, the array is added in reverse order * * @return true (as by general collection contract) */ void add(const CoordinateSequence *cl, bool allowRepeated, bool direction); /** * \brief Add a coordinate * @param c The coordinate to add * @param allowRepeated if set to false, repeated coordinates * are collapsed * @return true (as by general collection contract) */ virtual void add(const Coordinate& c, bool allowRepeated); /** \brief * Inserts the specified coordinate at the specified position in * this list. * * @param i the position at which to insert * @param coord the coordinate to insert * @param allowRepeated if set to false, repeated coordinates are * collapsed * * NOTE: this is a CoordinateList interface in JTS */ virtual void add(std::size_t i, const Coordinate& coord, bool allowRepeated)=0; /// Returns true it list contains no coordinates. virtual bool isEmpty() const=0; /// Add a Coordinate to the list virtual void add(const Coordinate& c)=0; // Get number of coordinates //virtual int getSize() const=0; /// Get a reference to Coordinate at position pos //virtual const Coordinate& getAt(std::size_t pos) const=0; /// Copy Coordinate c to position pos virtual void setAt(const Coordinate& c, std::size_t pos)=0; /// Delete Coordinate at position pos (list will shrink). virtual void deleteAt(std::size_t pos)=0; /// Get a string rapresentation of CoordinateSequence virtual std::string toString() const=0; /// Substitute Coordinate list with a copy of the given vector virtual void setPoints(const std::vector &v)=0; /// Returns true if contains any two consecutive points bool hasRepeatedPoints() const; /// Returns lower-left Coordinate in list const Coordinate* minCoordinate() const; /// \brief /// Returns a new CoordinateSequence being a copy of the input /// with any consecutive equal Coordinate removed. /// /// Equality test is 2D based /// /// Ownership of returned object goes to the caller. /// static CoordinateSequence* removeRepeatedPoints( const CoordinateSequence *cl); /// Remove consecutive equal Coordinates from the sequence // /// Equality test is 2D based. Returns a reference to self. /// virtual CoordinateSequence& removeRepeatedPoints()=0; /** \brief * Returns true if given CoordinateSequence contains * any two consecutive Coordinate */ static bool hasRepeatedPoints(const CoordinateSequence *cl); /** \brief * Returns either the given CoordinateSequence if its length * is greater than the given amount, or an empty CoordinateSequence. */ static CoordinateSequence* atLeastNCoordinatesOrNothing(std::size_t n, CoordinateSequence *c); /** \brief * Returns lower-left Coordinate in given CoordinateSequence. * This is actually the Coordinate with lower X (and Y if needed) * ordinate. */ static const Coordinate* minCoordinate(CoordinateSequence *cl); /// Return position of a Coordinate, or -1 if not found // /// FIXME: return std::size_t, using numeric_limits::max /// as 'not found' value. /// static int indexOf(const Coordinate *coordinate, const CoordinateSequence *cl); /** * \brief * Returns true if the two arrays are identical, both null, * or pointwise equal */ static bool equals(const CoordinateSequence *cl1, const CoordinateSequence *cl2); /// Scroll given CoordinateSequence so to start with given Coordinate. static void scroll(CoordinateSequence *cl, const Coordinate *firstCoordinate); /** \brief * Determines which orientation of the {@link Coordinate} array * is (overall) increasing. * * In other words, determines which end of the array is "smaller" * (using the standard ordering on {@link Coordinate}). * Returns an integer indicating the increasing direction. * If the sequence is a palindrome, it is defined to be * oriented in a positive direction. * * @param pts the array of Coordinates to test * @return 1 if the array is smaller at the start * or is a palindrome, * -1 if smaller at the end * * NOTE: this method is found in CoordinateArrays class for JTS */ static int increasingDirection(const CoordinateSequence& pts); /// Reverse Coordinate order in given CoordinateSequence static void reverse(CoordinateSequence *cl); /// Standard ordinate index values enum { X,Y,Z,M }; /** * Returns the dimension (number of ordinates in each coordinate) * for this sequence. * * @return the dimension of the sequence. */ virtual std::size_t getDimension() const=0; /** * Returns the ordinate of a coordinate in this sequence. * Ordinate indices 0 and 1 are assumed to be X and Y. * Ordinates indices greater than 1 have user-defined semantics * (for instance, they may contain other dimensions or measure values). * * @param index the coordinate index in the sequence * @param ordinateIndex the ordinate index in the coordinate * (in range [0, dimension-1]) */ virtual double getOrdinate(std::size_t index, std::size_t ordinateIndex) const=0; /** * Returns ordinate X (0) of the specified coordinate. * * @param index * @return the value of the X ordinate in the index'th coordinate */ virtual double getX(std::size_t index) const { return getOrdinate(index, X); } /** * Returns ordinate Y (1) of the specified coordinate. * * @param index * @return the value of the Y ordinate in the index'th coordinate */ virtual double getY(std::size_t index) const { return getOrdinate(index, Y); } /** * Sets the value for a given ordinate of a coordinate in this sequence. * * @param index the coordinate index in the sequence * @param ordinateIndex the ordinate index in the coordinate * (in range [0, dimension-1]) * @param value the new ordinate value */ virtual void setOrdinate(std::size_t index, std::size_t ordinateIndex, double value)=0; /** * Expands the given Envelope to include the coordinates in the * sequence. * Allows implementing classes to optimize access to coordinate values. * * @param env the envelope to expand */ virtual void expandEnvelope(Envelope &env) const; virtual void apply_rw(const CoordinateFilter *filter)=0; //Abstract virtual void apply_ro(CoordinateFilter *filter) const=0; //Abstract /** \brief * Apply a fiter to each Coordinate of this sequence. * The filter is expected to provide a .filter(Coordinate&) * method. * * TODO: accept a Functor instead, will be more flexible. * actually, define iterators on Geometry */ template void applyCoordinateFilter(T& f) { Coordinate c; for(std::size_t i=0, n=size(); i #include //#include #include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class Coordinate; } } namespace geos { namespace geom { // geos::geom /** * \brief * A factory to create concrete instances of {@link CoordinateSequence}s. * * Used to configure {@link GeometryFactory}s * to provide specific kinds of CoordinateSequences. */ class GEOS_DLL CoordinateSequenceFactory { public: /** \brief * Returns a CoordinateSequence based on the given array. * * Whether the array is copied or simply referenced * is implementation-dependent. * For this reason caller does give up ownership of it. * Implementations that will not copy it will need take care * of deleting it. * * This method must handle null arguments by creating * an empty sequence. * * @param coordinates the coordinates * @param dimension 0, 2 or 3 with 0 indicating unknown at this time. */ virtual CoordinateSequence *create( std::vector *coordinates, std::size_t dimension=0 ) const=0; /** \brief * Creates a CoordinateSequence of the specified size and dimension. * * For this to be useful, the CoordinateSequence implementation must * be mutable. * * @param size the number of coordinates in the sequence * @param dimension the dimension of the coordinates in the sequence * (0=unknown, 2, or 3 - ignored if not user specifiable) */ virtual CoordinateSequence *create(std::size_t size, std::size_t dimension) const=0; /** \brief * Creates a CoordinateSequence which is a copy of the given one. * * This method must handle null arguments by creating an empty sequence. * * @param coordSeq the coordinate sequence to copy */ virtual CoordinateSequence *create(const CoordinateSequence &coordSeq) const=0; virtual ~CoordinateSequenceFactory(); }; } // namespace geos::geom } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geom/CoordinateSequenceFactory.inl" //#endif #endif // ndef GEOS_GEOM_COORDINATESEQUENCEFACTORY_H geos-3.4.2/include/geos/geom/CoordinateSequenceFilter.h0000644000175000017500000000674412206417147022722 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/CoordinateSequenceFilter.java rev. 1.3 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_GEOM_COORDINATESEQUENCEFILTER_H #define GEOS_GEOM_COORDINATESEQUENCEFILTER_H #include #include #include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; } } namespace geos { namespace geom { // geos::geom /** * Interface for classes which provide operations that * can be applied to the coordinates in a {@link CoordinateSequence}. * A CoordinateSequence filter can either record information about each * coordinate or change the coordinate in some way. * CoordinateSequence filters can be * used to implement such things as coordinate transformations, centroid and * envelope computation, and many other functions. * For maximum efficiency, the execution of filters can be short-circuited. * {@link Geometry} classes support the concept of applying a * CoordinateSequenceFilter to each * {@link CoordinateSequence}s they contain. *

* CoordinateSequenceFilter is * an example of the Gang-of-Four Visitor pattern. * * @see Geometry::apply_ro(CoordinateSequenceFilter) * @see Geometry::apply_rw(CoordinateSequenceFilter) * @author Martin Davis * */ class GEOS_DLL CoordinateSequenceFilter { public: virtual ~CoordinateSequenceFilter() {} /** * Performs an operation on a coordinate in a {@link CoordinateSequence}. * * @param seq the CoordinateSequence to which the filter * is applied * @param i the index of the coordinate to apply the filter to */ virtual void filter_rw(CoordinateSequence& /*seq*/, std::size_t /*i*/) { assert(0); } /** * Performs an operation on a coordinate in a {@link CoordinateSequence}. * * @param seq the CoordinateSequence to which the filter * is applied * @param i the index of the coordinate to apply the filter to */ virtual void filter_ro(const CoordinateSequence& /*seq*/, std::size_t /*i*/) { assert(0); } /** * Reports whether the application of this filter can be terminated. * Once this method returns false, it should * continue to return false on every subsequent call. * * @return true if the application of this filter can be terminated. */ virtual bool isDone() const = 0; /** * Reports whether the execution of this filter * has modified the coordinates of the geometry. * If so, {@link Geometry#geometryChanged} will be executed * after this filter has finished being executed. * * Most filters can simply return a constant value reflecting * whether they are able to change the coordinates. * * @return true if this filter has changed the coordinates of the geometry */ virtual bool isGeometryChanged() const = 0; }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_COORDINATESEQUENCEFILTER_H geos-3.4.2/include/geos/geom/Dimension.h0000644000175000017500000000373312206417147017714 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_DIMENSION_H #define GEOS_GEOM_DIMENSION_H #include #include namespace geos { namespace geom { // geos::geom /// Constants representing the dimensions of a point, a curve and a surface. // /// Also, constants representing the dimensions of the empty geometry and /// non-empty geometries, and a wildcard dimension meaning "any dimension". /// class GEOS_DLL Dimension { public: enum DimensionType { /// Dimension value for any dimension (= {FALSE, TRUE}). DONTCARE=-3, /// Dimension value of non-empty geometries (= {P, L, A}). True=-2, /// Dimension value of the empty geometry (-1). False=-1, /// Dimension value of a point (0). P=0, /// Dimension value of a curve (1). L=1, /// Dimension value of a surface (2). A=2 }; //static const int P = 0; /// Dimension value of a point (0). //static const int L = 1; /// Dimension value of a curve (1). //static const int A = 2; /// Dimension value of a surface (2). //static const int False = -1; /// Dimension value of the empty geometry (-1). //static const int True = -2; /// Dimension value of non-empty geometries (= {P, L, A}). //static const int DONTCARE = -3; /// Dimension value for any dimension (= {FALSE, TRUE}). static char toDimensionSymbol(int dimensionValue); static int toDimensionValue(char dimensionSymbol); }; } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/Envelope.inl" #endif #endif // ndef GEOS_GEOM_DIMENSION_H geos-3.4.2/include/geos/geom/Envelope.h0000644000175000017500000003316012206417147017541 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Envelope.java rev 1.46 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_ENVELOPE_H #define GEOS_GEOM_ENVELOPE_H #include #include #include #include #include #include namespace geos { namespace geom { // geos::geom class Coordinate; /** * \class Envelope geom.h geos.h * * \brief * An Envelope defines a rectangulare region of the 2D coordinate plane. * * It is often used to represent the bounding box of a Geometry, * e.g. the minimum and maximum x and y values of the Coordinates. * * Note that Envelopes support infinite or half-infinite regions, by using * the values of Double_POSITIVE_INFINITY and * Double_NEGATIVE_INFINITY. * * When Envelope objects are created or initialized, * the supplies extent values are automatically sorted into the correct order. * */ class GEOS_DLL Envelope { public: typedef std::auto_ptr AutoPtr; /** \brief * Creates a null Envelope. */ Envelope(void); /** \brief * Creates an Envelope for a region defined by * maximum and minimum values. * * @param x1 the first x-value * @param x2 the second x-value * @param y1 the first y-value * @param y2 the second y-value */ Envelope(double x1, double x2, double y1, double y2); /** \brief * Creates an Envelope for a region defined by * two Coordinates. * * @param p1 the first Coordinate * @param p2 the second Coordinate */ Envelope(const Coordinate& p1, const Coordinate& p2); /** \brief * Creates an Envelope for a region defined by a single Coordinate. * * @param p the Coordinate */ Envelope(const Coordinate& p); /// Copy constructor Envelope(const Envelope &env); /// Assignment operator Envelope& operator=(const Envelope& e); /** \brief * Create an Envelope from an Envelope * string representation produced by Envelope.toString() */ Envelope(const std::string &str); ~Envelope(void); /** \brief * Test the point q to see whether it intersects the * Envelope defined by p1-p2 * * @param p1 one extremal point of the envelope * @param p2 another extremal point of the envelope * @param q the point to test for intersection * @return true if q intersects the envelope p1-p2 */ static bool intersects(const Coordinate& p1, const Coordinate& p2, const Coordinate& q); /** \brief * Test the envelope defined by p1-p2 for intersection * with the envelope defined by q1-q2 * * @param p1 one extremal point of the envelope P * @param p2 another extremal point of the envelope P * @param q1 one extremal point of the envelope Q * @param q2 another extremal point of the envelope Q * * @return true if Q intersects P */ static bool intersects(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2); /** \brief * Initialize to a null Envelope. */ void init(void); /** \brief * Initialize an Envelope for a region defined by * maximum and minimum values. * * @param x1 the first x-value * @param x2 the second x-value * @param y1 the first y-value * @param y2 the second y-value */ void init(double x1, double x2, double y1, double y2); /** \brief * Initialize an Envelope to a region defined * by two Coordinates. * * @param p1 the first Coordinate * @param p2 the second Coordinate */ void init(const Coordinate& p1, const Coordinate& p2); /** \brief * Initialize an Envelope to a region defined * by a single Coordinate. * * @param p the Coordinate */ void init(const Coordinate& p); // use assignment operator instead //void init(Envelope env); /** \brief * Makes this Envelope a "null" envelope, * that is, the envelope of the empty geometry. */ void setToNull(void); /** \brief * Returns true if this Envelope * is a "null" envelope. * * @return true if this Envelope * is uninitialized or is the envelope of the * empty geometry. */ bool isNull(void) const; /** \brief * Returns the difference between the maximum and minimum x values. * * @return max x - min x, or 0 if this is a null Envelope */ double getWidth(void) const; /** \brief * Returns the difference between the maximum and minimum y values. * * @return max y - min y, or 0 if this is a null Envelope */ double getHeight(void) const; /** * Gets the area of this envelope. * * @return the area of the envelope * @return 0.0 if the envelope is null */ double getArea() const { return getWidth() * getHeight(); } /** * Returns the Envelope maximum y-value. min y > max y * indicates that this is a null Envelope. */ double getMaxY() const; /** * Returns the Envelope maximum x-value. min x > max x * indicates that this is a null Envelope. */ double getMaxX() const; /** * Returns the Envelope minimum y-value. min y > max y * indicates that this is a null Envelope. */ double getMinY() const; /** * Returns the Envelope minimum x-value. min x > max x * indicates that this is a null Envelope. */ double getMinX() const; /** * Computes the coordinate of the centre of this envelope * (as long as it is non-null) * * @param centre The coordinate to write results into * @return NULL is the center could not be found * (null envelope). */ bool centre(Coordinate& centre) const; /** * Computes the intersection of two {@link Envelopes} * * @param env the envelope to intersect with * @param result the envelope representing the intersection of * the envelopes (this will be the null envelope * if either argument is null, or they do not intersect) * @return false if not intersection is found */ bool intersection(const Envelope& env, Envelope& result) const; /** \brief * Translates this envelope by given amounts in the X and Y direction. * * @param transX the amount to translate along the X axis * @param transY the amount to translate along the Y axis */ void translate(double transX, double transY); /** \brief * Expands this envelope by a given distance in all directions. * Both positive and negative distances are supported. * * @param deltaX the distance to expand the envelope along * the X axis * @param deltaY the distance to expand the envelope along * the Y axis */ void expandBy(double deltaX, double deltaY); /** \brief * Expands this envelope by a given distance in all directions. * Both positive and negative distances are supported. * * @param distance the distance to expand the envelope * @return this envelope */ void expandBy(double distance) { expandBy(distance, distance); } /** \brief * Enlarges the boundary of the Envelope so that it contains * p. Does nothing if p is already on or within the boundaries. * * @param p the Coordinate to include */ void expandToInclude(const Coordinate& p); /** \brief * Enlarges the boundary of the Envelope so that it contains * (x,y). Does nothing if (x,y) is already on or within the boundaries. * * @param x the value to lower the minimum x * to or to raise the maximum x to * @param y the value to lower the minimum y * to or to raise the maximum y to */ void expandToInclude(double x, double y); /** \brief * Enlarges the boundary of the Envelope so that it contains * other. Does nothing if other is wholly on or * within the boundaries. * * @param other the Envelope to merge with */ void expandToInclude(const Envelope* other); /** \brief * Tests if the Envelope other lies wholely * inside this Envelope (inclusive of the boundary). * * Note that this is not the same definition as the SFS * contains, which would exclude the envelope boundary. * * @param other the Envelope to check * @return true if other is contained in this * Envelope * * @see covers(Envelope) */ bool contains(const Envelope& other) const { return covers(other); } bool contains(const Envelope* other) const { return contains(*other); } /** \brief * Returns true if the given point lies in * or on the envelope. * * @param p the point which this Envelope is * being checked for containing * @return true if the point lies in the interior or * on the boundary of this Envelope. */ bool contains(const Coordinate& p) const { return covers(p.x, p.y); } /** \brief * Returns true if the given point lies in * or on the envelope. * * @param x the x-coordinate of the point which this * Envelope is * being checked for containing * * @param y the y-coordinate of the point which this * Envelope is being checked for containing * * @return true if (x, y) lies in * the interior or on the boundary of this * Envelope. */ bool contains(double x, double y) const { return covers(x, y); } /** * Check if the point p * intersects (lies inside) the region of this Envelope. * * @param p the Coordinate to be tested * @return true if the point intersects this Envelope */ bool intersects(const Coordinate& p) const; /** * Check if the point (x, y) * intersects (lies inside) the region of this Envelope. * * @param x the x-ordinate of the point * @param y the y-ordinate of the point * @return true if the point intersects this Envelope */ bool intersects(double x, double y) const; /** * Check if the region defined by other Envelope * intersects (intersects) the region of this Envelope. * * @param other the Envelope which this Envelope is * being checked for intersection * * @return true if the Envelopes intersects */ bool intersects(const Envelope* other) const; bool intersects(const Envelope& other) const; /** * Tests if the given point lies in or on the envelope. * *@param x the x-coordinate of the point which this Envelope is * being checked for containing *@param y the y-coordinate of the point which this Envelope is * being checked for containing *@return true if (x, y) lies in the interior or * on the boundary of this Envelope. */ bool covers(double x, double y) const; /** * Tests if the given point lies in or on the envelope. * *@param p the point which this Envelope is * being checked for containing *@return true if the point lies in the interior or * on the boundary of this Envelope. */ bool covers(const Coordinate *p) const; /** * Tests if the Envelope other lies wholely inside * this Envelope (inclusive of the boundary). * * @param other the Envelope to check * @return true if this Envelope covers the * other */ bool covers(const Envelope& other) const; bool covers(const Envelope* other) const { return covers(*other); } /** \brief * Returns true if the Envelope other * spatially equals this Envelope. * * @param other the Envelope which this * Envelope is being checked for equality * * @return true if this and other * Envelope objs are spatially equal */ bool equals(const Envelope* other) const; /** \brief * Returns a string of the form * Env[minx:maxx,miny:maxy] . * * @return a string of the form * Env[minx:maxx,miny:maxy] */ std::string toString(void) const; /** \brief * Computes the distance between this and another * Envelope. * * The distance between overlapping Envelopes is 0. Otherwise, the * distance is the Euclidean distance between the closest points. */ double distance(const Envelope* env) const; int hashCode() const; private: /** \brief * Splits a string into parts based on the supplied delimiters. * * This is a generic function that really belongs in a utility * file somewhere */ std::vector split(const std::string &str, const std::string &delimiters = " "); static double distance(double x0,double y0,double x1,double y1); /// the minimum x-coordinate double minx; /// the maximum x-coordinate double maxx; /// the minimum y-coordinate double miny; /// the maximum y-coordinate double maxy; }; /// Checks if two Envelopes are equal (2D only check) GEOS_DLL bool operator==(const Envelope& a, const Envelope& b); } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/Envelope.inl" #endif #endif // ndef GEOS_GEOM_ENVELOPE_H geos-3.4.2/include/geos/geom/Envelope.inl0000644000175000017500000000377312206417147020103 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Envelope.java rev 1.46 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_ENVELOPE_INL #define GEOS_GEOM_ENVELOPE_INL #include #include #include namespace geos { namespace geom { // geos::geom /*public*/ INLINE double Envelope::getMaxY() const { return maxy; } /*public*/ INLINE double Envelope::getMaxX() const { return maxx; } /*public*/ INLINE double Envelope::getMinY() const { return miny; } /*public*/ INLINE double Envelope::getMinX() const { return minx; } /*public*/ INLINE bool Envelope::intersects(const Coordinate& other) const { return (other.x <= maxx && other.x >= minx && other.y <= maxy && other.y >= miny); } /*public*/ INLINE bool Envelope::intersects(const Envelope& other) const { return intersects(&other); } /*public*/ INLINE bool Envelope::isNull(void) const { return maxx < minx; } /*public*/ INLINE bool Envelope::intersects(const Envelope* other) const { // Optimized to reduce function calls if ( isNull() || other->isNull() ) return false; return !(other->minx > maxx || other->maxx < minx || other->miny > maxy || other->maxy < miny); } /*public*/ INLINE bool Envelope::intersects(double x, double y) const { return (x <= maxx && x >= minx && y <= maxy && y >= miny); } /*public*/ INLINE bool Envelope::covers(const Coordinate *p) const { return covers(p->x, p->y); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_ENVELOPE_INL geos-3.4.2/include/geos/geom/Geometry.h0000644000175000017500000007110212206417147017555 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * Copyright (C) 2005 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Geometry.java rev. 1.112 * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRY_H #define GEOS_GEOM_GEOMETRY_H #include #include #include #include #include // for Dimension::DimensionType #include // for inheritance #include #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #pragma warning(disable: 4355) // warning C4355: 'this' : used in base member initializer list #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateFilter; class CoordinateSequence; class CoordinateSequenceFilter; class GeometryComponentFilter; class GeometryFactory; class GeometryFilter; class IntersectionMatrix; class PrecisionModel; class Point; } namespace io { // geos.io class Unload; } // namespace geos.io } namespace geos { namespace geom { // geos::geom /// Geometry types enum GeometryTypeId { /// a point GEOS_POINT, /// a linestring GEOS_LINESTRING, /// a linear ring (linestring with 1st point == last point) GEOS_LINEARRING, /// a polygon GEOS_POLYGON, /// a collection of points GEOS_MULTIPOINT, /// a collection of linestrings GEOS_MULTILINESTRING, /// a collection of polygons GEOS_MULTIPOLYGON, /// a collection of heterogeneus geometries GEOS_GEOMETRYCOLLECTION }; /** * \class Geometry geom.h geos.h * * \brief Basic implementation of Geometry, constructed and * destructed by GeometryFactory. * * clone returns a deep copy of the object. * Use GeometryFactory to construct. * *

Binary Predicates

* Because it is not clear at this time * what semantics for spatial * analysis methods involving GeometryCollections would be useful, * GeometryCollections are not supported as arguments to binary * predicates (other than convexHull) or the relate * method. * *

Set-Theoretic Methods

* * The spatial analysis methods will * return the most specific class possible to represent the result. If the * result is homogeneous, a Point, LineString, or * Polygon will be returned if the result contains a single * element; otherwise, a MultiPoint, MultiLineString, * or MultiPolygon will be returned. If the result is * heterogeneous a GeometryCollection will be returned.

* * Because it is not clear at this time what semantics for set-theoretic * methods involving GeometryCollections would be useful, * GeometryCollections * are not supported as arguments to the set-theoretic methods. * *

Representation of Computed Geometries

* * The SFS states that the result * of a set-theoretic method is the "point-set" result of the usual * set-theoretic definition of the operation (SFS 3.2.21.1). However, there are * sometimes many ways of representing a point set as a Geometry. *

* * The SFS does not specify an unambiguous representation of a given point set * returned from a spatial analysis method. One goal of JTS is to make this * specification precise and unambiguous. JTS will use a canonical form for * Geometrys returned from spatial analysis methods. The canonical * form is a Geometry which is simple and noded: *

    *
  • Simple means that the Geometry returned will be simple according to * the JTS definition of isSimple. *
  • Noded applies only to overlays involving LineStrings. It * means that all intersection points on LineStrings will be * present as endpoints of LineStrings in the result. *
* This definition implies that non-simple geometries which are arguments to * spatial analysis methods must be subjected to a line-dissolve process to * ensure that the results are simple. * *

Constructed Points And The Precision Model

* * The results computed by the set-theoretic methods may * contain constructed points which are not present in the input Geometry. * These new points arise from intersections between line segments in the * edges of the input Geometry. In the general case it is not * possible to represent constructed points exactly. This is due to the fact * that the coordinates of an intersection point may contain twice as many bits * of precision as the coordinates of the input line segments. In order to * represent these constructed points explicitly, JTS must truncate them to fit * the PrecisionModel. * * Unfortunately, truncating coordinates moves them slightly. Line segments * which would not be coincident in the exact result may become coincident in * the truncated representation. This in turn leads to "topology collapses" -- * situations where a computed element has a lower dimension than it would in * the exact result. * * When JTS detects topology collapses during the computation of spatial * analysis methods, it will throw an exception. If possible the exception will * report the location of the collapse. * * equals(Object) and hashCode are not overridden, so that when two * topologically equal Geometries are added to HashMaps and HashSets, they * remain distinct. This behaviour is desired in many cases. * */ class GEOS_DLL Geometry { public: friend class GeometryFactory; /// A vector of const Geometry pointers typedef std::vector ConstVect; /// A vector of non-const Geometry pointers typedef std::vector NonConstVect; /// An auto_ptr of Geometry typedef std::auto_ptr AutoPtr; /// Make a deep-copy of this Geometry virtual Geometry* clone() const=0; /// Destroy Geometry and all components virtual ~Geometry(); /** * \brief * Gets the factory which contains the context in which this * geometry was created. * * @return the factory for this geometry */ const GeometryFactory* getFactory() const { return factory; } /** * \brief * A simple scheme for applications to add their own custom data to * a Geometry. * An example use might be to add an object representing a * Coordinate Reference System. * * Note that user data objects are not present in geometries created * by construction methods. * * @param newUserData an object, the semantics for which are * defined by the application using this Geometry */ void setUserData(void* newUserData) { userData=newUserData; } /** * \brief * Gets the user data object for this geometry, if any. * * @return the user data object, or null if none set */ void* getUserData() { return userData; } /* * \brief * Returns the ID of the Spatial Reference System used by the * Geometry. * * GEOS supports Spatial Reference System information in the simple way * defined in the SFS. A Spatial Reference System ID (SRID) is present * in each Geometry object. Geometry * provides basic accessor operations for this field, but no others. * The SRID is represented as an integer. * * @return the ID of the coordinate space in which the * Geometry is defined. * */ virtual int getSRID() const { return SRID; } /* * Sets the ID of the Spatial Reference System used by the * Geometry. */ virtual void setSRID(int newSRID) { SRID=newSRID; } /** * \brief * Get the PrecisionModel used to create this Geometry. */ const PrecisionModel* getPrecisionModel() const; /// \brief /// Returns a vertex of this Geometry, /// or NULL if this is the empty geometry /// virtual const Coordinate* getCoordinate() const=0; //Abstract /** * \brief * Returns this Geometry vertices. * Caller takes ownership of the returned object. */ virtual CoordinateSequence* getCoordinates() const=0; //Abstract /// Returns the count of this Geometrys vertices. virtual std::size_t getNumPoints() const=0; //Abstract /// Returns false if the Geometry not simple. virtual bool isSimple() const; /// Return a string representation of this Geometry type virtual std::string getGeometryType() const=0; //Abstract /// Return an integer representation of this Geometry type virtual GeometryTypeId getGeometryTypeId() const=0; //Abstract /// Returns the number of geometries in this collection /// (or 1 if this is not a collection) virtual std::size_t getNumGeometries() const { return 1; } /// Returns a pointer to the nth Geometry int this collection /// (or self if this is not a collection) virtual const Geometry* getGeometryN(std::size_t /*n*/) const { return this; } /** * \brief Tests the validity of this Geometry. * * Subclasses provide their own definition of "valid". * * @return true if this Geometry is valid * * @see IsValidOp */ virtual bool isValid() const; /// Returns whether or not the set of points in this Geometry is empty. virtual bool isEmpty() const=0; //Abstract /// Polygon overrides to check for actual rectangle virtual bool isRectangle() const { return false; } /// Returns the dimension of this Geometry (0=point, 1=line, 2=surface) virtual Dimension::DimensionType getDimension() const=0; //Abstract /// Returns the coordinate dimension of this Geometry (2=XY, 3=XYZ, 4=XYZM in future). virtual int getCoordinateDimension() const=0; //Abstract /** * \brief * Returns the boundary, or an empty geometry of appropriate * dimension if this Geometry is empty. * * (In the case of zero-dimensional geometries, * an empty GeometryCollection is returned.) * For a discussion of this function, see the OpenGIS Simple * Features Specification. As stated in SFS Section 2.1.13.1, * "the boundary of a Geometry is a set of Geometries of the * next lower dimension." * * @return the closure of the combinatorial boundary * of this Geometry. * Ownershipof the returned object transferred to caller. */ virtual Geometry* getBoundary() const=0; //Abstract /// Returns the dimension of this Geometrys inherent boundary. virtual int getBoundaryDimension() const=0; //Abstract /// Returns this Geometrys bounding box. virtual Geometry* getEnvelope() const; /** \brief * Returns the minimum and maximum x and y values in this Geometry, * or a null Envelope if this Geometry is empty. */ virtual const Envelope* getEnvelopeInternal() const; /** * Tests whether this geometry is disjoint from the specified geometry. * * The disjoint predicate has the following equivalent * definitions: * - The two geometries have no point in common * - The DE-9IM Intersection Matrix for the two geometries matches * [FF*FF****] * - ! g.intersects(this) * (disjoint is the inverse of intersects) * * @param g the Geometry with which to compare this Geometry * @return true if the two Geometrys are disjoint * * @see Geometry::intersects */ virtual bool disjoint(const Geometry *other) const; /** \brief * Returns true if the DE-9IM intersection matrix for the two * Geometrys is FT*******, F**T***** or F***T****. */ virtual bool touches(const Geometry *other) const; /// Returns true if disjoint returns false. virtual bool intersects(const Geometry *g) const; /** * Tests whether this geometry crosses the specified geometry. * * The crosses predicate has the following equivalent * definitions: * - The geometries have some but not all interior points in common. * - The DE-9IM Intersection Matrix for the two geometries matches * - [T*T******] (for P/L, P/A, and L/A situations) * - [T*****T**] (for L/P, A/P, and A/L situations) * - [0********] (for L/L situations) * For any other combination of dimensions this predicate returns * false. * * The SFS defined this predicate only for P/L, P/A, L/L, and L/A * situations. * JTS extends the definition to apply to L/P, A/P and A/L situations * as well, in order to make the relation symmetric. * * @param g the Geometry with which to compare this * Geometry *@return true if the two Geometrys cross. */ virtual bool crosses(const Geometry *g) const; /** \brief * Returns true if the DE-9IM intersection matrix for the two * Geometrys is T*F**F***. */ virtual bool within(const Geometry *g) const; /// Returns true if other.within(this) returns true. virtual bool contains(const Geometry *g) const; /** \brief * Returns true if the DE-9IM intersection matrix for the two * Geometrys is T*T***T** (for two points or two surfaces) * 1*T***T** (for two curves). */ virtual bool overlaps(const Geometry *g) const; /** * \brief * Returns true if the elements in the DE-9IM intersection matrix * for the two Geometrys match the elements in intersectionPattern. * * IntersectionPattern elements may be: 0 1 2 T ( = 0, 1 or 2) * F ( = -1) * ( = -1, 0, 1 or 2). * * For more information on the DE-9IM, see the OpenGIS Simple * Features Specification. * * @throws util::IllegalArgumentException if either arg is a collection * */ virtual bool relate(const Geometry *g, const std::string& intersectionPattern) const; bool relate(const Geometry& g, const std::string& intersectionPattern) const { return relate(&g, intersectionPattern); } /// Returns the DE-9IM intersection matrix for the two Geometrys. virtual IntersectionMatrix* relate(const Geometry *g) const; IntersectionMatrix* relate(const Geometry &g) const { return relate(&g); } /** * \brief * Returns true if the DE-9IM intersection matrix for the two * Geometrys is T*F**FFF*. */ virtual bool equals(const Geometry *g) const; /** \brief * Returns true if this geometry covers the * specified geometry. * * The covers predicate has the following * equivalent definitions: * * - Every point of the other geometry is a point of this geometry. * - The DE-9IM Intersection Matrix for the two geometries is * T*****FF* * or *T****FF* * or ***T**FF* * or ****T*FF* * - g.coveredBy(this) * (covers is the inverse of coveredBy) * * If either geometry is empty, the value of this predicate * is false. * * This predicate is similar to {@link #contains}, * but is more inclusive (i.e. returns true for more cases). * In particular, unlike contains it does not distinguish * between points in the boundary and in the interior of geometries. * For most situations, covers should be used in * preference to contains. * As an added benefit, covers is more amenable to * optimization, and hence should be more performant. * * @param g * the Geometry with which to compare this * Geometry * * @return true if this Geometry * covers g * * @see Geometry::contains * @see Geometry::coveredBy */ bool covers(const Geometry* g) const; /** \brief * Tests whether this geometry is covered by the * specified geometry. * * The coveredBy predicate has the following * equivalent definitions: * * - Every point of this geometry is a point of the other geometry. * - The DE-9IM Intersection Matrix for the two geometries matches * [T*F**F***] * or [*TF**F***] * or [**FT*F***] * or [**F*TF***] * - g.covers(this) * (coveredBy is the converse of covers) * * If either geometry is empty, the value of this predicate * is false. * * This predicate is similar to {@link #within}, * but is more inclusive (i.e. returns true for more cases). * * @param g the Geometry with which to compare * this Geometry * @return true if this Geometry * is covered by g * * @see Geometry#within * @see Geometry#covers */ bool coveredBy(const Geometry* g) const { return g->covers(this); } /// Returns the Well-known Text representation of this Geometry. virtual std::string toString() const; virtual std::string toText() const; /// Returns a buffer region around this Geometry having the given width. // /// @throws util::TopologyException if a robustness error occurs /// virtual Geometry* buffer(double distance) const; /// \brief /// Returns a buffer region around this Geometry having the /// given width and with a specified number of segments used /// to approximate curves. // /// @throws util::TopologyException if a robustness error occurs /// virtual Geometry* buffer(double distance,int quadrantSegments) const; /** \brief * Computes a buffer area around this geometry having the given * width and with a specified accuracy of approximation for circular * arcs, and using a specified end cap style. * * Buffer area boundaries can contain circular arcs. * To represent these arcs using linear geometry they must be * approximated with line segments. * * The quadrantSegments argument allows controlling the * accuracy of the approximation by specifying the number of line * segments used to represent a quadrant of a circle * * The end cap style specifies the buffer geometry that will be * created at the ends of linestrings. The styles provided are: * * - BufferOp::CAP_ROUND - (default) a semi-circle * - BufferOp::CAP_BUTT - a straight line perpendicular to the * end segment * - BufferOp::CAP_SQUARE - a half-square * * * @param distance the width of the buffer * (may be positive, negative or 0) * * @param quadrantSegments the number of line segments used * to represent a quadrant of a circle * * @param endCapStyle the end cap style to use * * @return an area geometry representing the buffer region * * @throws util::TopologyException if a robustness error occurs * * @see BufferOp */ virtual Geometry* buffer(double distance, int quadrantSegments, int endCapStyle) const; /// \brief /// Returns the smallest convex Polygon that contains /// all the points in the Geometry. virtual Geometry* convexHull() const; /** \brief * Returns a Geometry representing the points shared by * this Geometry and other. * * @throws util::TopologyException if a robustness error occurs * @throws util::IllegalArgumentException if either input is a * non-empty GeometryCollection * */ virtual Geometry* intersection(const Geometry *other) const; /** \brief * Returns a Geometry representing all the points in this Geometry * and other. * * @throws util::TopologyException if a robustness error occurs * @throws util::IllegalArgumentException if either input is a * non-empty GeometryCollection * */ Geometry* Union(const Geometry *other) const; // throw(IllegalArgumentException *, TopologyException *); /** * Computes the union of all the elements of this geometry. Heterogeneous * {@link GeometryCollection}s are fully supported. * * The result obeys the following contract: * * - Unioning a set of {@link LineString}s has the effect of fully noding * and dissolving the linework. * - Unioning a set of {@link Polygon}s will always * return a {@link Polygonal} geometry (unlike {link #union(Geometry)}, * which may return geometrys of lower dimension if a topology collapse * occurred. * * @return the union geometry * * @see UnaryUnionOp */ AutoPtr Union() const; // throw(IllegalArgumentException *, TopologyException *); /** * \brief * Returns a Geometry representing the points making up this * Geometry that do not make up other. * * @throws util::TopologyException if a robustness error occurs * @throws util::IllegalArgumentException if either input is a * non-empty GeometryCollection * */ virtual Geometry* difference(const Geometry *other) const; /** \brief * Returns a set combining the points in this Geometry not in other, * and the points in other not in this Geometry. * * @throws util::TopologyException if a robustness error occurs * @throws util::IllegalArgumentException if either input is a * non-empty GeometryCollection * */ virtual Geometry* symDifference(const Geometry *other) const; /** \brief * Returns true if the two Geometrys are exactly equal, * up to a specified tolerance. */ virtual bool equalsExact(const Geometry *other, double tolerance=0) const=0; //Abstract virtual void apply_rw(const CoordinateFilter *filter)=0; //Abstract virtual void apply_ro(CoordinateFilter *filter) const=0; //Abstract virtual void apply_rw(GeometryFilter *filter); virtual void apply_ro(GeometryFilter *filter) const; virtual void apply_rw(GeometryComponentFilter *filter); virtual void apply_ro(GeometryComponentFilter *filter) const; /** * Performs an operation on the coordinates in this Geometry's * CoordinateSequences.s * If the filter reports that a coordinate value has been changed, * {@link #geometryChanged} will be called automatically. * * @param filter the filter to apply */ virtual void apply_rw(CoordinateSequenceFilter& filter)=0; /** * Performs a read-only operation on the coordinates in this * Geometry's CoordinateSequences. * * @param filter the filter to apply */ virtual void apply_ro(CoordinateSequenceFilter& filter) const=0; /** \brief * Apply a fiter to each component of this geometry. * The filter is expected to provide a .filter(const Geometry*) * method. * * I intend similar templated methods to replace * all the virtual apply_rw and apply_ro functions... * --strk(2005-02-06); */ template void applyComponentFilter(T& f) const { for(std::size_t i=0, n=getNumGeometries(); itrue if the geometries are less than * distance apart. * * @todo doesn't seem to need being virtual, make it concrete */ virtual bool isWithinDistance(const Geometry *geom, double cDistance) const; /** \brief * Computes the centroid of this Geometry. * * The centroid is equal to the centroid of the set of component * Geometries of highest dimension (since the lower-dimension geometries * contribute zero "weight" to the centroid) * * @return a {@link Point} which is the centroid of this Geometry */ virtual Point* getCentroid() const; /// Computes the centroid of this Geometry as a Coordinate // /// Returns false if centroid cannot be computed (EMPTY geometry) /// virtual bool getCentroid(Coordinate& ret) const; /** \brief * Computes an interior point of this Geometry. * * An interior point is guaranteed to lie in the interior of the Geometry, * if it possible to calculate such a point exactly. Otherwise, * the point may lie on the boundary of the geometry. * * @return a Point which is in the interior of this Geometry, or * null if the geometry doesn't have an interior (empty) */ virtual Point* getInteriorPoint() const; /* * \brief * Notifies this Geometry that its Coordinates have been changed * by an external party (using a CoordinateFilter, for example). */ virtual void geometryChanged(); /** * \brief * Notifies this Geometry that its Coordinates have been changed * by an external party. */ void geometryChangedAction(); protected: /// The bounding box of this Geometry mutable std::auto_ptr envelope; /// Returns true if the array contains any non-empty Geometrys. static bool hasNonEmptyElements(const std::vector* geometries); /// Returns true if the CoordinateSequence contains any null elements. static bool hasNullElements(const CoordinateSequence* list); /// Returns true if the vector contains any null elements. static bool hasNullElements(const std::vector* lrs); // static void reversePointOrder(CoordinateSequence* coordinates); // static Coordinate& minCoordinate(CoordinateSequence* coordinates); // static void scroll(CoordinateSequence* coordinates,Coordinate* firstCoordinate); // static int indexOf(Coordinate* coordinate,CoordinateSequence* coordinates); // /** \brief * Returns whether the two Geometrys are equal, from the point * of view of the equalsExact method. */ virtual bool isEquivalentClass(const Geometry *other) const; static void checkNotGeometryCollection(const Geometry *g); // throw(IllegalArgumentException *); //virtual void checkEqualSRID(Geometry *other); //virtual void checkEqualPrecisionModel(Geometry *other); virtual Envelope::AutoPtr computeEnvelopeInternal() const=0; //Abstract virtual int compareToSameClass(const Geometry *geom) const=0; //Abstract int compare(std::vector a, std::vector b) const; int compare(std::vector a, std::vector b) const; bool equal(const Coordinate& a, const Coordinate& b, double tolerance) const; int SRID; /// @deprecated //Geometry* toInternalGeometry(const Geometry *g) const; /// @deprecated //Geometry* fromInternalGeometry(const Geometry *g) const; /// Polygon overrides to check for actual rectangle //virtual bool isRectangle() const { return false; } -- moved to public Geometry(const Geometry &geom); /** \brief * Construct a geometry with the given GeometryFactory. * * Will keep a reference to the factory, so don't * delete it until al Geometry objects referring to * it are deleted. * * @param factory */ Geometry(const GeometryFactory *factory); private: int getClassSortIndex() const; class GeometryChangedFilter : public GeometryComponentFilter { public: void filter_rw(Geometry* geom) { geom->geometryChangedAction(); } }; static GeometryChangedFilter geometryChangedFilter; /// The GeometryFactory used to create this Geometry // /// Externally owned /// const GeometryFactory *factory; void* userData; }; /// \brief /// Write the Well-known Binary representation of this Geometry /// as an HEX string to the given output stream /// GEOS_DLL std::ostream& operator<< (std::ostream& os, const Geometry& geom); struct GEOS_DLL GeometryGreaterThen { bool operator()(const Geometry *first, const Geometry *second); }; /// Return current GEOS version std::string geosversion(); /** * \brief * Return the version of JTS this GEOS * release has been ported from. */ std::string jtsport(); // We use this instead of std::pair> because C++11 // forbids that construct: // http://lwg.github.com/issues/lwg-closed.html#2068 struct GeomPtrPair { typedef std::auto_ptr GeomPtr; GeomPtr first; GeomPtr second; }; } // namespace geos::geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_GEOM_GEOMETRY_H geos-3.4.2/include/geos/geom/GeometryCollection.h0000644000175000017500000001264412206417147021577 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryCollection.java rev. 1.41 * **********************************************************************/ #ifndef GEOS_GEOS_GEOMETRYCOLLECTION_H #define GEOS_GEOS_GEOMETRYCOLLECTION_H #include #include // for inheritance //#include #include // for proper use of auto_ptr<> #include // for Dimension::DimensionType #include #include #include #include // for auto_ptr // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; class CoordinateSequenceFilter; } } namespace geos { namespace geom { // geos::geom /** * \class GeometryCollection geom.h geos.h * * \brief Represents a collection of heterogeneous Geometry objects. * * Collections of Geometry of the same type are * represented by GeometryCollection subclasses MultiPoint, * MultiLineString, MultiPolygon. */ class GEOS_DLL GeometryCollection : public virtual Geometry { public: friend class GeometryFactory; typedef std::vector::const_iterator const_iterator; typedef std::vector::iterator iterator; const_iterator begin() const; const_iterator end() const; /** * Creates and returns a full copy of this GeometryCollection object. * (including all coordinates contained by it). * * @return a clone of this instance */ virtual Geometry *clone() const { return new GeometryCollection(*this); } virtual ~GeometryCollection(); /** * \brief * Collects all coordinates of all subgeometries into a * CoordinateSequence. * * Note that the returned coordinates are copies, so * you want be able to use them to modify the geometries * in place. Also you'll need to delete the CoordinateSequence * when finished using it. * * @return the collected coordinates * */ virtual CoordinateSequence* getCoordinates() const; virtual bool isEmpty() const; /** * \brief * Returns the maximum dimension of geometries in this collection * (0=point, 1=line, 2=surface) * * @see Dimension::DimensionType */ virtual Dimension::DimensionType getDimension() const; /// Returns coordinate dimension. virtual int getCoordinateDimension() const; virtual Geometry* getBoundary() const; /** * \brief * Returns the maximum boundary dimension of geometries in * this collection. */ virtual int getBoundaryDimension() const; virtual std::size_t getNumPoints() const; virtual std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; virtual bool equalsExact(const Geometry *other, double tolerance=0) const; virtual void apply_ro(CoordinateFilter *filter) const; virtual void apply_rw(const CoordinateFilter *filter); virtual void apply_ro(GeometryFilter *filter) const; virtual void apply_rw(GeometryFilter *filter); virtual void apply_ro(GeometryComponentFilter *filter) const; virtual void apply_rw(GeometryComponentFilter *filter); virtual void apply_rw(CoordinateSequenceFilter& filter); virtual void apply_ro(CoordinateSequenceFilter& filter) const; virtual void normalize(); virtual const Coordinate* getCoordinate() const; /// Returns the total area of this collection virtual double getArea() const; /// Returns the total length of this collection virtual double getLength() const; /// Returns the number of geometries in this collection virtual std::size_t getNumGeometries() const; /// Returns a pointer to the nth Geometry int this collection virtual const Geometry* getGeometryN(std::size_t n) const; protected: GeometryCollection(const GeometryCollection &gc); /** \brief * Construct a GeometryCollection with the given GeometryFactory. * Will keep a reference to the factory, so don't * delete it until al Geometry objects referring to * it are deleted. * Will take ownership of the Geometry vector. * * @param newGeoms * The Geometrys for this * GeometryCollection, * or null or an empty array to * create the empty geometry. * Elements may be empty Geometrys, * but not nulls. * * If construction succeed the created object will take * ownership of newGeoms vector and elements. * * If construction fails "IllegalArgumentException *" * is thrown and it is your responsibility to delete newGeoms * vector and content. * * @param newFactory the GeometryFactory used to create this geometry */ GeometryCollection(std::vector *newGeoms, const GeometryFactory *newFactory); std::vector* geometries; Envelope::AutoPtr computeEnvelopeInternal() const; int compareToSameClass(const Geometry *gc) const; }; } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/GeometryCollection.inl" #endif #endif // ndef GEOS_GEOS_GEOMETRYCOLLECTION_H geos-3.4.2/include/geos/geom/GeometryCollection.inl0000644000175000017500000000212212206417147022120 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryCollection.java rev. 1.41 * **********************************************************************/ #ifndef GEOS_GEOMETRYCOLLECTION_INL #define GEOS_GEOMETRYCOLLECTION_INL #include #include namespace geos { namespace geom { // geos::geom INLINE GeometryCollection::const_iterator GeometryCollection::begin() const { return geometries->begin(); } INLINE GeometryCollection::const_iterator GeometryCollection::end() const { return geometries->end(); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOMETRYCOLLECTION_INL geos-3.4.2/include/geos/geom/GeometryComponentFilter.h0000644000175000017500000000330212206417147022603 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRYCOMPONENTFILTER_H #define GEOS_GEOM_GEOMETRYCOMPONENTFILTER_H #include #include namespace geos { namespace geom { // geos::geom class Geometry; } } namespace geos { namespace geom { // geos::geom /** * Geometry classes support the concept of applying * a GeometryComponentFilter * filter to the Geometry. * The filter is applied to every component of the Geometry * which is itself a Geometry. * A GeometryComponentFilter filter can either * record information about the Geometry * or change the Geometry in some way. * GeometryComponentFilter * is an example of the Gang-of-Four Visitor pattern. * */ class GEOS_DLL GeometryComponentFilter { public: /** * Performs an operation with or on geom. * * @param geom a Geometry to which the filter * is applied. */ virtual void filter_rw(Geometry *geom); virtual void filter_ro(const Geometry *geom); virtual ~GeometryComponentFilter() {} }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_GEOMETRYCOMPONENTFILTER_H geos-3.4.2/include/geos/geom/GeometryFactory.h0000644000175000017500000003046212206417147021111 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryFactory.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRYFACTORY_H #define GEOS_GEOM_GEOMETRYFACTORY_H #include #include #include #include #include #include #include #include #include #include namespace geos { namespace geom { class CoordinateSequenceFactory; class Coordinate; class CoordinateSequence; class Envelope; class Geometry; class GeometryCollection; class LineString; class LinearRing; class MultiLineString; class MultiPoint; class MultiPolygon; class Point; class Polygon; class PrecisionModel; } } namespace geos { namespace geom { // geos::geom /** * \brief * Supplies a set of utility methods for building Geometry objects * from CoordinateSequence or other Geometry objects. * * Note that the factory constructor methods do not change the input * coordinates in any way. * In particular, they are not rounded to the supplied PrecisionModel. * It is assumed that input Coordinates meet the given precision. */ class GEOS_DLL GeometryFactory { public: /** * \brief * Constructs a GeometryFactory that generates Geometries having a * floating PrecisionModel and a spatial-reference ID of 0. */ GeometryFactory(); /** * \brief * Constructs a GeometryFactory that generates Geometries having * the given PrecisionModel, spatial-reference ID, and * CoordinateSequence implementation. * * NOTES: * (1) the given PrecisionModel is COPIED * (2) the CoordinateSequenceFactory is NOT COPIED * and must be available for the whole lifetime * of the GeometryFactory */ GeometryFactory(const PrecisionModel *pm, int newSRID, CoordinateSequenceFactory *nCoordinateSequenceFactory); /** * \brief * Constructs a GeometryFactory that generates Geometries having the * given CoordinateSequence implementation, a double-precision floating * PrecisionModel and a spatial-reference ID of 0. */ GeometryFactory(CoordinateSequenceFactory *nCoordinateSequenceFactory); /** * \brief * Constructs a GeometryFactory that generates Geometries having * the given PrecisionModel and the default CoordinateSequence * implementation. * * @param pm the PrecisionModel to use */ GeometryFactory(const PrecisionModel *pm); /** * \brief * Constructs a GeometryFactory that generates Geometries having * the given {@link PrecisionModel} and spatial-reference ID, * and the default CoordinateSequence implementation. * * @param pm the PrecisionModel to use * @param newSRID the SRID to use */ GeometryFactory(const PrecisionModel* pm, int newSRID); /** * \brief Copy constructor * * @param gf the GeometryFactory to clone from */ GeometryFactory(const GeometryFactory &gf); /** * \brief * Return a pointer to the default GeometryFactory. * This is a global shared object instantiated * using default constructor. */ static const GeometryFactory* getDefaultInstance(); /// Destructor virtual ~GeometryFactory(); //Skipped a lot of list to array convertors Point* createPointFromInternalCoord(const Coordinate* coord, const Geometry *exemplar) const; /// Converts an Envelope to a Geometry. // /// Returned Geometry can be a Point, a Polygon or an EMPTY geom. /// Geometry* toGeometry(const Envelope* envelope) const; /// \brief /// Returns the PrecisionModel that Geometries created by this /// factory will be associated with. const PrecisionModel* getPrecisionModel() const; /// Creates an EMPTY Point Point* createPoint() const; /// Creates a Point using the given Coordinate Point* createPoint(const Coordinate& coordinate) const; /// Creates a Point taking ownership of the given CoordinateSequence Point* createPoint(CoordinateSequence *coordinates) const; /// Creates a Point with a deep-copy of the given CoordinateSequence. Point* createPoint(const CoordinateSequence &coordinates) const; /// Construct an EMPTY GeometryCollection GeometryCollection* createGeometryCollection() const; /// Construct the EMPTY Geometry Geometry* createEmptyGeometry() const; /// Construct a GeometryCollection taking ownership of given arguments GeometryCollection* createGeometryCollection( std::vector *newGeoms) const; /// Constructs a GeometryCollection with a deep-copy of args GeometryCollection* createGeometryCollection( const std::vector &newGeoms) const; /// Construct an EMPTY MultiLineString MultiLineString* createMultiLineString() const; /// Construct a MultiLineString taking ownership of given arguments MultiLineString* createMultiLineString( std::vector *newLines) const; /// Construct a MultiLineString with a deep-copy of given arguments MultiLineString* createMultiLineString( const std::vector &fromLines) const; /// Construct an EMPTY MultiPolygon MultiPolygon* createMultiPolygon() const; /// Construct a MultiPolygon taking ownership of given arguments MultiPolygon* createMultiPolygon(std::vector *newPolys) const; /// Construct a MultiPolygon with a deep-copy of given arguments MultiPolygon* createMultiPolygon( const std::vector &fromPolys) const; /// Construct an EMPTY LinearRing LinearRing* createLinearRing() const; /// Construct a LinearRing taking ownership of given arguments LinearRing* createLinearRing(CoordinateSequence* newCoords) const; std::auto_ptr createLinearRing( std::auto_ptr newCoords) const; /// Construct a LinearRing with a deep-copy of given arguments LinearRing* createLinearRing( const CoordinateSequence& coordinates) const; /// Constructs an EMPTY MultiPoint. MultiPoint* createMultiPoint() const; /// Construct a MultiPoint taking ownership of given arguments MultiPoint* createMultiPoint(std::vector *newPoints) const; /// Construct a MultiPoint with a deep-copy of given arguments MultiPoint* createMultiPoint( const std::vector &fromPoints) const; /// \brief /// Construct a MultiPoint containing a Point geometry /// for each Coordinate in the given list. MultiPoint* createMultiPoint( const CoordinateSequence &fromCoords) const; /// \brief /// Construct a MultiPoint containing a Point geometry /// for each Coordinate in the given vector. MultiPoint* createMultiPoint( const std::vector &fromCoords) const; /// Construct an EMPTY Polygon Polygon* createPolygon() const; /// Construct a Polygon taking ownership of given arguments Polygon* createPolygon(LinearRing *shell, std::vector *holes) const; /// Construct a Polygon with a deep-copy of given arguments Polygon* createPolygon(const LinearRing &shell, const std::vector &holes) const; /// Construct an EMPTY LineString LineString* createLineString() const; /// Copy a LineString std::auto_ptr createLineString(const LineString& ls) const; /// Construct a LineString taking ownership of given argument LineString* createLineString(CoordinateSequence* coordinates) const; std::auto_ptr createLineString( std::auto_ptr coordinates) const; /// Construct a LineString with a deep-copy of given argument LineString* createLineString( const CoordinateSequence& coordinates) const; /** * Build an appropriate Geometry, MultiGeometry, or * GeometryCollection to contain the Geometrys in * it. * * For example: * * - If geomList contains a single Polygon, * the Polygon is returned. * - If geomList contains several Polygons, a * MultiPolygon is returned. * - If geomList contains some Polygons and * some LineStrings, a GeometryCollection is * returned. * - If geomList is empty, an empty * GeometryCollection is returned * . * * Note that this method does not "flatten" Geometries in the input, * and hence if any MultiGeometries are contained in the input a * GeometryCollection containing them will be returned. * * @param newGeoms the Geometrys to combine * * @return * A Geometry of the "smallest", "most type-specific" * class that can contain the elements of geomList. * * NOTE: the returned Geometry will take ownership of the * given vector AND its elements */ Geometry* buildGeometry(std::vector *geoms) const; /// See buildGeometry(std::vector&) for semantics // /// Will clone the geometries accessible trough the iterator. /// /// @tparam T an iterator yelding something which casts to const Geometry* /// @param from start iterator /// @param toofar end iterator /// template std::auto_ptr buildGeometry(T from, T toofar) const { bool isHeterogeneous = false; size_t count = 0; int geomClass = -1; for (T i=from; i != toofar; ++i) { ++count; const Geometry* g = *i; if ( geomClass < 0 ) { geomClass = g->getClassSortIndex(); } else if ( geomClass != g->getClassSortIndex() ) { isHeterogeneous = true; } } // for the empty geometry, return an empty GeometryCollection if ( count == 0 ) { return std::auto_ptr( createGeometryCollection() ); } // for the single geometry, return a clone if ( count == 1 ) { return std::auto_ptr( (*from)->clone() ); } // Now we know it is a collection // FIXME: // Until we tweak all the createMulti* interfaces // to support taking iterators we'll have to build // a custom vector here. std::vector fromGeoms; for (T i=from; i != toofar; ++i) { const Geometry* g = *i; fromGeoms.push_back(const_cast(g)); } // for an heterogeneous ... if ( isHeterogeneous ) { return std::auto_ptr( createGeometryCollection(fromGeoms) ); } // At this point we know the collection is not hetereogenous. if ( dynamic_cast(*from) ) { return std::auto_ptr( createMultiPolygon(fromGeoms) ); } else if ( dynamic_cast(*from) ) { return std::auto_ptr( createMultiLineString(fromGeoms) ); } else if ( dynamic_cast(*from) ) { return std::auto_ptr( createMultiPoint(fromGeoms) ); } // FIXME: Why not to throw an exception? --mloskot assert(0); // buildGeomtry encountered an unkwnon geometry type return std::auto_ptr(); // nullptr } /** \brief * This function does the same thing of the omonimouse function * taking vector pointer instead of reference. * * The difference is that this version will copy needed data * leaving ownership to the caller. */ Geometry* buildGeometry(const std::vector &geoms) const; int getSRID() const; /// \brief /// Returns the CoordinateSequenceFactory associated /// with this GeometryFactory const CoordinateSequenceFactory* getCoordinateSequenceFactory() const; /// Returns a clone of given Geometry. Geometry* createGeometry(const Geometry *g) const; /// Destroy a Geometry, or release it void destroyGeometry(Geometry *g) const; private: const PrecisionModel* precisionModel; int SRID; const CoordinateSequenceFactory *coordinateListFactory; }; } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/GeometryFactory.inl" #endif #endif // ndef GEOS_GEOM_GEOMETRYFACTORY_H geos-3.4.2/include/geos/geom/GeometryFactory.inl0000644000175000017500000000236112206417147021441 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryFactory.java rev. 1.48 * ********************************************************************** * * This is just a stub, there are a lot of candidates for inlining * but it's not worth checking that at the moment * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRYFACTORY_INL #define GEOS_GEOM_GEOMETRYFACTORY_INL #include namespace geos { namespace geom { // geos::geom INLINE int GeometryFactory::getSRID() const { return SRID; } INLINE const CoordinateSequenceFactory* GeometryFactory::getCoordinateSequenceFactory() const { return coordinateListFactory; } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_GEOMETRYFACTORY_INL geos-3.4.2/include/geos/geom/GeometryFilter.h0000644000175000017500000000360312206417147020724 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRYFILTER_H #define GEOS_GEOM_GEOMETRYFILTER_H //#include #include #include #include #include #include namespace geos { namespace geom { // geos::geom class Geometry; } } namespace geos { namespace geom { // geos::geom /** \brief * Geometry classes support the concept of applying a Geometry * filter to the Geometry. * * In the case of GeometryCollection * subclasses, the filter is applied to every element Geometry. * A Geometry filter can either record information about the Geometry * or change the Geometry in some way. * Geometry filters implement the interface GeometryFilter. * (GeometryFilter is an example of the Gang-of-Four Visitor pattern). */ class GEOS_DLL GeometryFilter { public: /* * Performs an operation with or on geom. * * @param geom a Geometry to which the filter * is applied. * * NOTE: this are not pure abstract to allow read-only * or read-write-only filters to avoid defining a fake * version of the not-implemented kind. */ virtual void filter_ro(const Geometry * /*geom*/) { assert(0); } virtual void filter_rw(Geometry * /*geom*/) { assert(0); } virtual ~GeometryFilter() {} }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_GEOMETRYFILTER_H geos-3.4.2/include/geos/geom/GeometryList.h0000644000175000017500000000376612206417147020424 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK * **********************************************************************/ #ifndef GEOS_GEOM_GEOMETRYLIST_H #define GEOS_GEOM_GEOMETRYLIST_H #include #include // for auto_ptr #include // for auto_ptr #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace geom { // geos.geom /** \brief * Manager of Geometry pointers. Owns the Geometries. */ class GEOS_DLL GeometryList { public: /// auto_ptr needs to access private destructor friend class std::auto_ptr; typedef std::vector::size_type size_type; /// Only way to manage a GeometryList is trough /// this an auto_ptr<>. @see create() typedef std::auto_ptr AutoPtr; /// Create an empty GeometryList static GeometryList::AutoPtr create(); /// Add a geometry to the list (takes ownership) void add(Geometry::AutoPtr geom); /// Return number of geometries in this list size_type size() const; /// Returned object lifetime is bound to GeometryList lifetime Geometry* operator[] (size_type); /// Returned object lifetime is bound to GeometryList lifetime const Geometry* operator[] (size_type) const; private: std::vector geoms; GeometryList(); ~GeometryList(); }; } // namespace geos.geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_GEOM_GEOMETRYLIST_H geos-3.4.2/include/geos/geom/IntersectionMatrix.h0000644000175000017500000003006112206417147021614 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/IntersectionMatrix.java rev. 1.18 * **********************************************************************/ #ifndef GEOS_GEOM_INTERSECTIONMATRIX_H #define GEOS_GEOM_INTERSECTIONMATRIX_H #include #include #include namespace geos { namespace geom { // geos::geom /** \brief * Implementation of Dimensionally Extended Nine-Intersection Model * (DE-9IM) matrix. * * Dimensionally Extended Nine-Intersection Model (DE-9IM) matrix. * This class can used to represent both computed DE-9IM's (like 212FF1FF2) * as well as patterns for matching them (like T*T******). * * Methods are provided to: * * - set and query the elements of the matrix in a convenient fashion * - convert to and from the standard string representation * (specified in SFS Section 2.1.13.2). * - test to see if a matrix matches a given pattern string. * * For a description of the DE-9IM, see the * OpenGIS Simple * Features Specification for SQL. * * \todo Suggestion: add equal and not-equal operator to this class. */ class GEOS_DLL IntersectionMatrix { public: /** \brief * Default constructor. * * Creates an IntersectionMatrix with Dimension::False * dimension values ('F'). */ IntersectionMatrix(); /** \brief * Overriden constructor. * * Creates an IntersectionMatrix with the given dimension symbols. * * @param elements - reference to string containing pattern * of dimension values for elements. */ IntersectionMatrix(const std::string& elements); /** \brief * Copy constructor. * * Creates an IntersectionMatrix with the same elements as other. * * \todo Add assignment operator to make this class fully copyable. */ IntersectionMatrix(const IntersectionMatrix &other); /** \brief * Returns whether the elements of this IntersectionMatrix * satisfies the required dimension symbols. * * @param requiredDimensionSymbols - nine dimension symbols with * which to compare the elements of this IntersectionMatrix. * Possible values are {T, F, * , 0, 1, 2}. * @return true if this IntersectionMatrix matches the required * dimension symbols. */ bool matches(const std::string& requiredDimensionSymbols) const; /** \brief * Tests if given dimension value satisfies the dimension symbol. * * @param actualDimensionValue - valid dimension value stored in * the IntersectionMatrix. * Possible values are {TRUE, FALSE, DONTCARE, 0, 1, 2}. * @param requiredDimensionSymbol - a character used in the string * representation of an IntersectionMatrix. * Possible values are {T, F, * , 0, 1, 2}. * @return true if the dimension symbol encompasses the * dimension value. */ static bool matches(int actualDimensionValue, char requiredDimensionSymbol); /** \brief * Returns true if each of the actual dimension symbols satisfies * the corresponding required dimension symbol. * * @param actualDimensionSymbols - nine dimension symbols to validate. * Possible values are {T, F, * , 0, 1, 2}. * @param requiredDimensionSymbols - nine dimension symbols to * validate against. * Possible values are {T, F, * , 0, 1, 2}. * @return true if each of the required dimension symbols encompass * the corresponding actual dimension symbol. */ static bool matches(const std::string& actualDimensionSymbols, const std::string& requiredDimensionSymbols); /** \brief * Adds one matrix to another. * * Addition is defined by taking the maximum dimension value * of each position in the summand matrices. * * @param other - the matrix to add. * * \todo Why the 'other' matrix is not passed by const-reference? */ void add(IntersectionMatrix* other); /** \brief * Changes the value of one of this IntersectionMatrixs elements. * * @param row - the row of this IntersectionMatrix, indicating * the interior, boundary or exterior of the first Geometry. * @param column - the column of this IntersectionMatrix, * indicating the interior, boundary or exterior of the * second Geometry. * @param dimensionValue - the new value of the element. */ void set(int row, int column, int dimensionValue); /** \brief * Changes the elements of this IntersectionMatrix to the dimension * symbols in dimensionSymbols. * * @param dimensionSymbols - nine dimension symbols to which to * set this IntersectionMatrix elements. * Possible values are {T, F, * , 0, 1, 2}. */ void set(const std::string& dimensionSymbols); /** \brief * Changes the specified element to minimumDimensionValue if the * element is less. * * @param row - the row of this IntersectionMatrix, indicating * the interior, boundary or exterior of the first Geometry. * @param column - the column of this IntersectionMatrix, indicating * the interior, boundary or exterior of the second Geometry. * @param minimumDimensionValue - the dimension value with which * to compare the element. The order of dimension values * from least to greatest is {DONTCARE, TRUE, FALSE, 0, 1, 2}. */ void setAtLeast(int row, int column, int minimumDimensionValue); /** \brief * If row >= 0 and column >= 0, changes the specified element * to minimumDimensionValue if the element is less. * Does nothing if row <0 or column < 0. * * @param row - * the row of this IntersectionMatrix, * indicating the interior, boundary or exterior of the * first Geometry. * * @param column - * the column of this IntersectionMatrix, * indicating the interior, boundary or exterior of the * second Geometry. * * @param minimumDimensionValue - * the dimension value with which * to compare the element. The order of dimension values * from least to greatest is {DONTCARE, TRUE, FALSE, 0, 1, 2}. */ void setAtLeastIfValid(int row, int column, int minimumDimensionValue); /** \brief * For each element in this IntersectionMatrix, changes the element to * the corresponding minimum dimension symbol if the element is less. * * @param minimumDimensionSymbols - * nine dimension symbols with which * to compare the elements of this IntersectionMatrix. * The order of dimension values from least to greatest is * {DONTCARE, TRUE, FALSE, 0, 1, 2} . */ void setAtLeast(std::string minimumDimensionSymbols); /** \brief * Changes the elements of this IntersectionMatrix to dimensionValue. * * @param dimensionValue - * the dimension value to which to set this * IntersectionMatrix elements. Possible values {TRUE, * FALSE, DONTCARE, 0, 1, 2}. */ void setAll(int dimensionValue); /** \brief * Returns the value of one of this IntersectionMatrixs elements. * * @param row - * the row of this IntersectionMatrix, indicating the * interior, boundary or exterior of the first Geometry. * * @param column - * the column of this IntersectionMatrix, indicating the * interior, boundary or exterior of the second Geometry. * * @return the dimension value at the given matrix position. */ int get(int row, int column) const; /** \brief * Returns true if this IntersectionMatrix is FF*FF****. * * @return true if the two Geometrys related by this * IntersectionMatrix are disjoint. */ bool isDisjoint() const; /** \brief * Returns true if isDisjoint returns false. * * @return true if the two Geometrys related by this * IntersectionMatrix intersect. */ bool isIntersects() const; /** \brief * Returns true if this IntersectionMatrix is FT*******, F**T***** * or F***T****. * * @param dimensionOfGeometryA - the dimension of the first Geometry. * * @param dimensionOfGeometryB - the dimension of the second Geometry. * * @return true if the two Geometry's related by this * IntersectionMatrix touch, false if both Geometrys * are points. */ bool isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) const; /** \brief * Returns true if this IntersectionMatrix is: * - T*T****** (for a point and a curve, a point and an area or * a line and an area) * - 0******** (for two curves) * * @param dimensionOfGeometryA - he dimension of the first Geometry. * * @param dimensionOfGeometryB - the dimension of the second Geometry. * * @return true if the two Geometry's related by this * IntersectionMatrix cross. * * For this function to return true, the Geometrys must be a point * and a curve; a point and a surface; two curves; or a curve and * a surface. */ bool isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) const; /** \brief * Returns true if this IntersectionMatrix is T*F**F***. * * @return true if the first Geometry is within the second. */ bool isWithin() const; /** \brief * Returns true if this IntersectionMatrix is T*****FF*. * * @return true if the first Geometry contains the second. */ bool isContains() const; /** \brief * Returns true if this IntersectionMatrix is T*F**FFF*. * * @param dimensionOfGeometryA - he dimension of the first Geometry. * @param dimensionOfGeometryB - the dimension of the second Geometry. * @return true if the two Geometry's related by this * IntersectionMatrix are equal; the Geometrys must have * the same dimension for this function to return true */ bool isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) const; /** \brief * Returns true if this IntersectionMatrix is: * - T*T***T** (for two points or two surfaces) * - 1*T***T** (for two curves) * * @param dimensionOfGeometryA - he dimension of the first Geometry. * @param dimensionOfGeometryB - the dimension of the second Geometry. * @return true if the two Geometry's related by this * IntersectionMatrix overlap. * * For this function to return true, the Geometrys must be two points, * two curves or two surfaces. */ bool isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) const; /** \brief * Returns true if this IntersectionMatrix is T*****FF* * or *T****FF* or ***T**FF* * or ****T*FF* * * @return true if the first Geometry covers the * second */ bool isCovers() const; /** \brief * Returns true if this IntersectionMatrix is T*F**F*** * *TF**F*** or **FT*F*** * or **F*TF*** * * @return true if the first Geometry is covered by * the second */ bool isCoveredBy() const; /** \brief * Transposes this IntersectionMatrix. * * @return this IntersectionMatrix as a convenience. * * \todo It returns 'this' pointer so why not to return const-pointer? * \todo May be it would be better to return copy of transposed matrix? */ IntersectionMatrix* transpose(); /** \brief * Returns a nine-character String representation of this * IntersectionMatrix. * * @return the nine dimension symbols of this IntersectionMatrix * in row-major order. */ std::string toString() const; private: static const int firstDim; // = 3; static const int secondDim; // = 3; // Internal buffer for 3x3 matrix. int matrix[3][3]; }; // class IntersectionMatrix GEOS_DLL std::ostream& operator<< (std::ostream&os, const IntersectionMatrix& im); } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_INTERSECTIONMATRIX_H geos-3.4.2/include/geos/geom/LineSegment.h0000644000175000017500000003051712206417147020201 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LineSegment.java r18 (JTS-1.11) * **********************************************************************/ #ifndef GEOS_GEOM_LINESEGMENT_H #define GEOS_GEOM_LINESEGMENT_H #include #include // for composition #include #include // for ostream #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class GeometryFactory; class LineString; } } namespace geos { namespace geom { // geos::geom /** * Represents a line segment defined by two Coordinate. * Provides methods to compute various geometric properties * and relationships of line segments. * * This class is designed to be easily mutable (to the extent of * having its contained points public). * This supports a common pattern of reusing a single LineSegment * object as a way of computing segment properties on the * segments defined by arrays or lists of {@link Coordinate}s. * * TODO: have this class keep pointers rather then real Coordinates ? */ class GEOS_DLL LineSegment { public: friend std::ostream& operator<< (std::ostream& o, const LineSegment& l); Coordinate p0; /// Segment start Coordinate p1; /// Segemnt end LineSegment(); LineSegment(const LineSegment &ls); /// Constructs a LineSegment with the given start and end Coordinates. LineSegment(const Coordinate& c0, const Coordinate& c1); LineSegment(double x0, double y0, double x1, double y1); virtual ~LineSegment(); void setCoordinates(const Coordinate& c0, const Coordinate& c1); // obsoleted, use operator[] instead //const Coordinate& getCoordinate(std::size_t i) const; const Coordinate& operator[](std::size_t i) const; Coordinate& operator[](std::size_t i); void setCoordinates(const LineSegment& ls); /// Computes the length of the line segment. double getLength() const; /// Tests whether the segment is horizontal. // /// @return true if the segment is horizontal /// bool isHorizontal() const; /// Tests whether the segment is vertical. // /// @return true if the segment is vertical /// bool isVertical() const; /** * Determines the orientation of a LineSegment relative to this segment. * The concept of orientation is specified as follows: * Given two line segments A and L, *
    A is to the left of a segment L if A lies wholly in the * closed half-plane lying to the left of L *
  • A is to the right of a segment L if A lies wholly in the * closed half-plane lying to the right of L *
  • otherwise, A has indeterminate orientation relative to L. * This happens if A is collinear with L or if A crosses * the line determined by L. *
* * @param seg the LineSegment to compare * * @return 1 if seg is to the left of this segment * @return -1 if seg is to the right of this segment * @return 0 if seg has indeterminate orientation relative * to this segment */ int orientationIndex(const LineSegment& seg) const; // TODO: deprecate this int orientationIndex(const LineSegment* seg) const; /** \brief * Determines the orientation index of a Coordinate * relative to this segment. * * The orientation index is as defined in * CGAlgorithms::computeOrientation. * * @param seg the LineSegment to compare * * @return 1 if p is to the left of this segment * @return -1 if p is to the right of this segment * @return 0 if p is collinear with this segment * * @see CGAlgorithms::computeOrientation(Coordinate, Coordinate, * Coordinate) */ int orientationIndex(const Coordinate& p) const; /// Reverses the direction of the line segment. void reverse(); /// Puts the line segment into a normalized form. // /// This is useful for using line segments in maps and indexes when /// topological equality rather than exact equality is desired. /// void normalize(); /// @return the angle this segment makes with the x-axis (in radians) double angle() const; /// Computes the midpoint of the segment // /// @param ret will be set to the midpoint of the segment /// void midPoint(Coordinate& ret) const; /// Computes the distance between this line segment and another one. double distance(const LineSegment& ls) const; /// Computes the distance between this line segment and a point. double distance(const Coordinate& p) const; /** \brief * Computes the perpendicular distance between the (infinite) * line defined by this line segment and a point. */ double distancePerpendicular(const Coordinate& p) const; /** \brief * Computes the Coordinate that lies a given * fraction along the line defined by this segment. * * A fraction of 0.0 returns the start point of * the segment; a fraction of 1.0 returns the end * point of the segment. * If the fraction is < 0.0 or > 1.0 the point returned * will lie before the start or beyond the end of the segment. * * @param segmentLengthFraction the fraction of the segment length * along the line * @param ret will be set to the point at that distance */ void pointAlong(double segmentLengthFraction, Coordinate& ret) const; /** \brief * Computes the {@link Coordinate} that lies a given * fraction along the line defined by this segment and offset from * the segment by a given distance. * * A fraction of 0.0 offsets * from the start point of the segment; * a fraction of 1.0 offsets * from the end point of the segment. * * The computed point is offset to the left of the line * if the offset distance is positive, to the right if negative. * * @param segmentLengthFraction the fraction of the segment * length along the line * * @param offsetDistance the distance the point is offset * from the segment * (positive is to the left, negative is to the right) * * @param ret will be set to the point at that distance and offset * * @throws IllegalStateException if the segment has zero length */ void pointAlongOffset(double segmentLengthFraction, double offsetDistance, Coordinate& ret) const; /** \brief * Compute the projection factor for the projection of the point p * onto this LineSegment. * * The projection factor is the constant r * by which the vector for this segment must be multiplied to * equal the vector for the projection of p on the line * defined by this segment. * * The projection factor returned will be in the range * (-inf, +inf) * * @param p the point to compute the factor for * * @return the projection factor for the point * */ double projectionFactor(const Coordinate& p) const; /** \brief * Computes the fraction of distance (in [0.0, 1.0]) * that the projection of a point occurs along this line segment. * * If the point is beyond either ends of the line segment, * the closest fractional value (0.0 or 1.0) * is returned. * * Essentially, this is the {@link #projectionFactor} clamped to * the range [0.0, 1.0]. * * @param inputPt the point * @return the fraction along the line segment the projection * of the point occurs */ double segmentFraction(const Coordinate& inputPt) const; /** \brief * Compute the projection of a point onto the line determined * by this line segment. * * Note that the projected point * may lie outside the line segment. If this is the case, * the projection factor will lie outside the range [0.0, 1.0]. */ void project(const Coordinate& p, Coordinate& ret) const; /** \brief * Project a line segment onto this line segment and return the resulting * line segment. * * The returned line segment will be a subset of * the target line line segment. This subset may be null, if * the segments are oriented in such a way that there is no projection. * * Note that the returned line may have zero length (i.e. the same endpoints). * This can happen for instance if the lines are perpendicular to one another. * * @param seg the line segment to project * @param ret the projected line segment * @return true if there is an overlap, false otherwise */ bool project(const LineSegment& seg, LineSegment& ret) const; /// Computes the closest point on this line segment to another point. // /// @param p the point to find the closest point to /// @param ret the Coordinate to which the closest point on the line segment /// to the point p will be written /// void closestPoint(const Coordinate& p, Coordinate& ret) const; /** \brief * Compares this object with the specified object for order. * * Uses the standard lexicographic ordering for the points in the LineSegment. * * @param o the LineSegment with which this LineSegment * is being compared * @return a negative integer, zero, or a positive integer as this * LineSegment is less than, equal to, or greater than the * specified LineSegment */ int compareTo(const LineSegment& other) const; /** \brief * Returns true if other is * topologically equal to this LineSegment (e.g. irrespective * of orientation). * * @param other a LineSegment with which to do the comparison. * @return true if other is a LineSegment * with the same values for the x and y ordinates. */ bool equalsTopo(const LineSegment& other) const; /** * Computes the closest points on two line segments. * @param p the point to find the closest point to * @return a pair of Coordinates which are the closest points on * the line segments. * The returned CoordinateSequence must be deleted by caller */ CoordinateSequence* closestPoints(const LineSegment& line); CoordinateSequence* closestPoints(const LineSegment* line); /** * Computes an intersection point between two segments, * if there is one. * There may be 0, 1 or many intersection points between two segments. * If there are 0, null is returned. If there is 1 or more, a single * one is returned (chosen at the discretion of the algorithm). * If more information is required about the details of the * intersection, the LineIntersector class should be used. * * @param line * @param coord the Coordinate to write the result into * @return true if an intersection was found, false otherwise */ bool intersection(const LineSegment& line, Coordinate& coord) const; /** \brief * Computes the intersection point of the lines defined * by two segments, if there is one. * * There may be 0, 1 or an infinite number of intersection points * between two lines. * If there is a unique intersection point, it is returned. * Otherwise, null is returned. * If more information is required about the details of the * intersection, the algorithms::LineIntersector class should * be used. * * @param line a line segment defining a straight line * @param ret will be set to the intersection point (if any) * @return true if an intersection was found, false otherwise * */ bool lineIntersection(const LineSegment& line, Coordinate& coord) const; /** * Creates a LineString with the same coordinates as this segment * * @param gf the geometery factory to use * @return a LineString with the same geometry as this segment */ std::auto_ptr toGeometry(const GeometryFactory& gf) const; }; std::ostream& operator<< (std::ostream& o, const LineSegment& l); /// Checks if two LineSegment are equal (2D only check) bool operator==(const LineSegment& a, const LineSegment& b); } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/LineSegment.inl" #endif #endif // ndef GEOS_GEOM_LINESEGMENT_H geos-3.4.2/include/geos/geom/LineSegment.inl0000644000175000017500000000714712206417147020537 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LineSegment.java r18 (JTS-1.11) * **********************************************************************/ #ifndef GEOS_LINESEGMENT_INL #define GEOS_LINESEGMENT_INL #include #include #include #include // for atan2 namespace geos { namespace geom { // geos::geom INLINE LineSegment::LineSegment(const LineSegment& ls) : p0(ls.p0), p1(ls.p1) { } INLINE LineSegment::LineSegment(const Coordinate& c0, const Coordinate& c1) : p0(c0), p1(c1) { } INLINE LineSegment::LineSegment(double x0, double y0, double x1, double y1) : p0(x0, y0), p1(x1, y1) { } INLINE LineSegment::LineSegment() { } INLINE LineSegment::~LineSegment() { } INLINE double LineSegment::distancePerpendicular(const Coordinate& p) const { return algorithm::CGAlgorithms::distancePointLinePerpendicular(p, p0, p1); } INLINE void LineSegment::pointAlong(double segmentLengthFraction, Coordinate& ret) const { ret = Coordinate( p0.x + segmentLengthFraction * (p1.x - p0.x), p0.y + segmentLengthFraction * (p1.y - p0.y)); } INLINE double LineSegment::distance(const LineSegment& ls) const { return algorithm::CGAlgorithms::distanceLineLine(p0, p1, ls.p0, ls.p1); } /*public*/ INLINE double LineSegment::distance(const Coordinate& p) const { return algorithm::CGAlgorithms::distancePointLine(p, p0, p1); } INLINE void LineSegment::normalize() { if (p1.compareTo(p0)<0) reverse(); } INLINE void LineSegment::setCoordinates(const Coordinate& c0, const Coordinate& c1) { p0=c0; p1=c1; } INLINE const Coordinate& LineSegment::operator[](std::size_t i) const { if (i==0) return p0; assert(i==1); return p1; } INLINE Coordinate& LineSegment::operator[](std::size_t i) { if (i==0) return p0; assert(i==1); return p1; } INLINE void LineSegment::setCoordinates(const LineSegment& ls) { setCoordinates(ls.p0,ls.p1); } INLINE double LineSegment::getLength() const { return p0.distance(p1); } INLINE bool LineSegment::isHorizontal() const { return p0.y == p1.y; } INLINE bool LineSegment::isVertical() const { return p0.x == p1.x; } INLINE int LineSegment::orientationIndex(const LineSegment* seg) const { assert(seg); return orientationIndex(*seg); } INLINE int LineSegment::orientationIndex(const Coordinate& p) const { return algorithm::CGAlgorithms::orientationIndex(p0, p1, p); } INLINE CoordinateSequence* LineSegment::closestPoints(const LineSegment* line) { assert(line); return closestPoints(*line); } INLINE double LineSegment::angle() const { return std::atan2(p1.y-p0.y,p1.x-p0.x); } INLINE void LineSegment::midPoint(Coordinate& ret) const { ret = Coordinate( (p0.x + p1.x) / 2, (p0.y + p1.y) / 2 ); } INLINE std::ostream& operator<< (std::ostream& o, const LineSegment& l) { return o<<"LINESEGMENT("< * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LineString.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_LINESTRING_H #define GEOS_GEOS_LINESTRING_H #include #include // do we need this ? #include // for inheritance #include // for inheritance #include // for proper use of auto_ptr<> #include // for proper use of auto_ptr<> #include // for Dimension::DimensionType #include #include #include // for auto_ptr #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace geom { class Coordinate; class CoordinateArraySequence; class CoordinateSequenceFilter; } } namespace geos { namespace geom { // geos::geom /** * Models an OGC-style LineString. * * A LineString consists of a sequence of two or more vertices, * along with all points along the linearly-interpolated curves * (line segments) between each * pair of consecutive vertices. * Consecutive vertices may be equal. * The line segments in the line may intersect each other (in other words, * the linestring may "curl back" in itself and self-intersect. * Linestrings with exactly two identical points are invalid. * * A linestring must have either 0 or 2 or more points. * If these conditions are not met, the constructors throw * an {@link IllegalArgumentException} */ class GEOS_DLL LineString: public virtual Geometry, public Lineal { public: friend class GeometryFactory; /// A vector of const LineString pointers typedef std::vector ConstVect; virtual ~LineString(); /** * Creates and returns a full copy of this {@link LineString} object. * (including all coordinates contained by it). * * @return a clone of this instance */ virtual Geometry *clone() const; virtual CoordinateSequence* getCoordinates() const; /// Returns a read-only pointer to internal CoordinateSequence const CoordinateSequence* getCoordinatesRO() const; virtual const Coordinate& getCoordinateN(int n) const; /// Returns line dimension (1) virtual Dimension::DimensionType getDimension() const; /** * \brief * Returns Dimension::False for a closed LineString, * 0 otherwise (LineString boundary is a MultiPoint) */ virtual int getBoundaryDimension() const; /// Returns coordinate dimension. virtual int getCoordinateDimension() const; /** * \brief * Returns a MultiPoint. * Empty for closed LineString, a Point for each vertex otherwise. */ virtual Geometry* getBoundary() const; virtual bool isEmpty() const; virtual std::size_t getNumPoints() const; virtual Point* getPointN(std::size_t n) const; /// \brief /// Return the start point of the LineString /// or NULL if this is an EMPTY LineString. /// virtual Point* getStartPoint() const; /// \brief /// Return the end point of the LineString /// or NULL if this is an EMPTY LineString. /// virtual Point* getEndPoint() const; virtual bool isClosed() const; virtual bool isRing() const; virtual std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; virtual bool isCoordinate(Coordinate& pt) const; virtual bool equalsExact(const Geometry *other, double tolerance=0) const; virtual void apply_rw(const CoordinateFilter *filter); virtual void apply_ro(CoordinateFilter *filter) const; virtual void apply_rw(GeometryFilter *filter); virtual void apply_ro(GeometryFilter *filter) const; virtual void apply_rw(GeometryComponentFilter *filter); virtual void apply_ro(GeometryComponentFilter *filter) const; void apply_rw(CoordinateSequenceFilter& filter); void apply_ro(CoordinateSequenceFilter& filter) const; /** \brief * Normalizes a LineString. * * A normalized linestring * has the first point which is not equal to it's reflected point * less than the reflected point. */ virtual void normalize(); //was protected virtual int compareToSameClass(const Geometry *ls) const; virtual const Coordinate* getCoordinate() const; virtual double getLength() const; /** * Creates a LineString whose coordinates are in the reverse * order of this objects * * @return a LineString with coordinates in the reverse order */ Geometry* reverse() const; protected: LineString(const LineString &ls); /// \brief /// Constructs a LineString taking ownership the /// given CoordinateSequence. LineString(CoordinateSequence *pts, const GeometryFactory *newFactory); /// Hopefully cleaner version of the above LineString(CoordinateSequence::AutoPtr pts, const GeometryFactory *newFactory); Envelope::AutoPtr computeEnvelopeInternal() const; CoordinateSequence::AutoPtr points; private: void validateConstruction(); }; struct GEOS_DLL LineStringLT { bool operator()(const LineString *ls1, const LineString *ls2) const { return ls1->compareTo(ls2)<0; } }; inline Geometry* LineString::clone() const { return new LineString(*this); } } // namespace geos::geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_GEOS_LINESTRING_H geos-3.4.2/include/geos/geom/Lineal.h0000644000175000017500000000212112206417147017161 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Lineal.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_LINEAL_H #define GEOS_GEOM_LINEAL_H #include #include // for inheritance namespace geos { namespace geom { // geos::geom /** * Identifies {@link Geometry} subclasses which * are 1-dimensional and with components which are {@link LineString}s. */ class GEOS_DLL Lineal : public virtual Geometry { protected: Lineal(): Geometry(0) {} }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_LINEAL_H geos-3.4.2/include/geos/geom/LinearRing.h0000644000175000017500000000635612206417147020025 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LinearRing.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_LINEARRING_H #define GEOS_GEOS_LINEARRING_H #include #include #include #include #include #include // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; } } namespace geos { namespace geom { // geos::geom /** * \brief * Models an OGC SFS LinearRing. * * A LinearRing is a LineString which is both closed and simple. * In other words, * the first and last coordinate in the ring must be equal, * and the interior of the ring must not self-intersect. * Either orientation of the ring is allowed. * * A ring must have either 0 or 4 or more points. * The first and last points must be equal (in 2D). * If these conditions are not met, the constructors throw * an {@link IllegalArgumentException} */ class GEOS_DLL LinearRing : public LineString { public: /** * The minimum number of vertices allowed in a valid non-empty ring (= 4). * Empty rings with 0 vertices are also valid. */ static const unsigned int MINIMUM_VALID_SIZE = 4; LinearRing(const LinearRing &lr); /** * \brief Constructs a LinearRing with the given points. * * @param points points forming a closed and simple linestring, or * null or an empty array to create the empty * geometry. * This array must not contain null elements. * If not null LinearRing will take ownership of points. * * @param newFactory the GeometryFactory used to create this geometry * */ LinearRing(CoordinateSequence* points, const GeometryFactory *newFactory); /// Hopefully cleaner version of the above LinearRing(CoordinateSequence::AutoPtr points, const GeometryFactory *newFactory); virtual Geometry *clone() const { return new LinearRing(*this); } virtual ~LinearRing(); /** \brief * Returns Dimension.FALSE, since by definition * LinearRings do not have a boundary. * * @return Dimension::False */ int getBoundaryDimension() const; /** \brief * Returns true, since by definition LinearRings * are always simple. * * @return true * * @see Geometry::isSimple */ bool isSimple() const; bool isClosed() const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; void setPoints(CoordinateSequence* cl); Geometry* reverse() const; private: void validateConstruction(); }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOS_LINEARRING_H geos-3.4.2/include/geos/geom/Location.h0000644000175000017500000000366612206417147017544 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_LOCATION_H #define GEOS_GEOM_LOCATION_H #include #include // for ostream #include namespace geos { namespace geom { // geos::geom /** \brief * * Constants representing the location of a point relative to a geometry. * * They can also be thought of as the row or column index of a DE-9IM matrix. * For a description of the DE-9IM, see the OpenGIS Simple Features * Specification for SQL . */ class GEOS_DLL Location { public: enum Value { /** * Used for uninitialized location values. */ UNDEF=-1, // Instead of NULL /** * DE-9IM row index of the interior of the first geometry and * column index of the interior of the second geometry. * Location value for the interior of a geometry. */ INTERIOR = 0, /** * DE-9IM row index of the boundary of the first geometry and * column index of the boundary of the second geometry. * Location value for the boundary of a geometry. */ BOUNDARY = 1, /** * DE-9IM row index of the exterior of the first geometry and * column index of the exterior of the second geometry. * Location value for the exterior of a geometry. */ EXTERIOR = 2 }; static char toLocationSymbol(int locationValue); }; } // namespace geos::geom } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geom/Location.inl" //#endif #endif // ndef GEOS_GEOM_LOCATION_H geos-3.4.2/include/geos/geom/Makefile.am0000644000175000017500000000213212206417147017642 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ util \ prep #EXTRA_DIST = geosdir = $(includedir)/geos/geom geos_HEADERS = \ BinaryOp.h \ CoordinateArraySequenceFactory.h \ CoordinateArraySequenceFactory.inl \ CoordinateArraySequence.h \ CoordinateFilter.h \ Coordinate.h \ Coordinate.inl \ CoordinateList.h \ CoordinateSequenceFactory.h \ CoordinateSequenceFilter.h \ CoordinateSequence.h \ Dimension.h \ Envelope.h \ Envelope.inl \ GeometryCollection.h \ GeometryCollection.inl \ GeometryComponentFilter.h \ GeometryFactory.h \ GeometryFactory.inl \ GeometryFilter.h \ Geometry.h \ GeometryList.h \ IntersectionMatrix.h \ LinearRing.h \ LineSegment.h \ LineSegment.inl \ LineString.h \ Location.h \ MultiLineString.h \ MultiLineString.inl \ MultiPoint.h \ MultiPolygon.h \ MultiPolygon.inl \ Point.h \ Polygon.h \ PrecisionModel.h \ PrecisionModel.inl \ Triangle.h \ Puntal.h \ Lineal.h \ Polygonal.h geos-3.4.2/include/geos/geom/Makefile.in0000644000175000017500000005260112206417161017655 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/geom DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ util \ prep #EXTRA_DIST = geosdir = $(includedir)/geos/geom geos_HEADERS = \ BinaryOp.h \ CoordinateArraySequenceFactory.h \ CoordinateArraySequenceFactory.inl \ CoordinateArraySequence.h \ CoordinateFilter.h \ Coordinate.h \ Coordinate.inl \ CoordinateList.h \ CoordinateSequenceFactory.h \ CoordinateSequenceFilter.h \ CoordinateSequence.h \ Dimension.h \ Envelope.h \ Envelope.inl \ GeometryCollection.h \ GeometryCollection.inl \ GeometryComponentFilter.h \ GeometryFactory.h \ GeometryFactory.inl \ GeometryFilter.h \ Geometry.h \ GeometryList.h \ IntersectionMatrix.h \ LinearRing.h \ LineSegment.h \ LineSegment.inl \ LineString.h \ Location.h \ MultiLineString.h \ MultiLineString.inl \ MultiPoint.h \ MultiPolygon.h \ MultiPolygon.inl \ Point.h \ Polygon.h \ PrecisionModel.h \ PrecisionModel.inl \ Triangle.h \ Puntal.h \ Lineal.h \ Polygonal.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/geom/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/geom/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/geom/MultiLineString.h0000644000175000017500000000631412206417147021056 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiLineString.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_MULTILINESTRING_H #define GEOS_GEOS_MULTILINESTRING_H #include #include // for inheritance #include // for inheritance #include #include #include #include // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; } } namespace geos { namespace geom { // geos::geom #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:4250) // T1 inherits T2 via dominance #endif /// Models a collection of (@link LineString}s. class GEOS_DLL MultiLineString: public GeometryCollection, public Lineal { public: friend class GeometryFactory; virtual ~MultiLineString(); /// Returns line dimension (1) Dimension::DimensionType getDimension() const; /** * \brief * Returns Dimension::False if all LineStrings in the collection * are closed, 0 otherwise. */ int getBoundaryDimension() const; /// Returns a (possibly empty) MultiPoint Geometry* getBoundary() const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; bool isClosed() const; bool equalsExact(const Geometry *other, double tolerance=0) const; Geometry *clone() const; /** * Creates a MultiLineString in the reverse * order to this object. * Both the order of the component LineStrings * and the order of their coordinate sequences * are reversed. * * @return a MultiLineString in the reverse order */ MultiLineString* reverse() const; protected: /** * \brief Constructs a MultiLineString. * * @param newLines * The LineStringss for this * MultiLineString, or null * or an empty array to create the empty geometry. * Elements may be empty LineStrings, * but not nulls. * * Constructed object will take ownership of * the vector and its elements. * * @param newFactory * The GeometryFactory used to create this geometry. * Caller must keep the factory alive for the life-time * of the constructed MultiLineString. * */ MultiLineString(std::vector *newLines, const GeometryFactory *newFactory); MultiLineString(const MultiLineString &mp); }; #ifdef _MSC_VER #pragma warning(pop) #endif } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/MultiLineString.inl" #endif #endif // ndef GEOS_GEOS_MULTILINESTRING_H geos-3.4.2/include/geos/geom/MultiLineString.inl0000644000175000017500000000225712206417147021413 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiLineString.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_MULTILINESTRING_INL #define GEOS_GEOM_MULTILINESTRING_INL #include #include //#include namespace geos { namespace geom { // geos::geom INLINE MultiLineString::MultiLineString(const MultiLineString &mp) : Geometry(mp), GeometryCollection(mp) { } INLINE Geometry* MultiLineString::clone() const { return new MultiLineString(*this); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_MULTILINESTRING_INL geos-3.4.2/include/geos/geom/MultiPoint.h0000644000175000017500000000614412206417147020072 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiPoint.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_MULTIPOINT_H #define GEOS_GEOS_MULTIPOINT_H #include #include #include // for inheritance #include // for inheritance #include // for Dimension::DimensionType #include #include #include namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; } } namespace geos { namespace geom { // geos::geom #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:4250) // T1 inherits T2 via dominance #endif /** * Models a collection of Point objects. * * Any collection of Points is a valid MultiPoint. */ class GEOS_DLL MultiPoint: public GeometryCollection, public Puntal { public: friend class GeometryFactory; virtual ~MultiPoint(); /// Returns point dimension (0) Dimension::DimensionType getDimension() const; /// Returns Dimension::False (Point has no boundary) int getBoundaryDimension() const; /** \brief * Gets the boundary of this geometry. * * Zero-dimensional geometries have no boundary by definition, * so an empty GeometryCollection is returned. * * @return an empty GeometryCollection * @see Geometry#getBoundary */ Geometry* getBoundary() const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; bool equalsExact(const Geometry *other, double tolerance=0) const; Geometry *clone() const { return new MultiPoint(*this); } protected: /** * \brief Constructs a MultiPoint. * * @param newPoints * the Points for this MultiPoint, * or null or an empty array to create the empty * geometry. * Elements may be empty Points, * but not nulls. * * Constructed object will take ownership of * the vector and its elements. * * @param newFactory * The GeometryFactory used to create this geometry * Caller must keep the factory alive for the life-time * of the constructed MultiPoint. */ MultiPoint(std::vector *newPoints, const GeometryFactory *newFactory); MultiPoint(const MultiPoint &mp): Geometry(mp), GeometryCollection(mp) {} const Coordinate* getCoordinateN(int n) const; }; #ifdef _MSC_VER #pragma warning(pop) #endif } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOS_MULTIPOINT_H geos-3.4.2/include/geos/geom/MultiPolygon.h0000644000175000017500000000655312206417147020434 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiPolygon.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_MULTIPOLYGON_H #define GEOS_GEOS_MULTIPOLYGON_H #include #include #include #include #include // for inheritance #include // for inheritance #include // for Dimension::DimensionType #include // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; class MultiPoint; } } namespace geos { namespace geom { // geos::geom #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:4250) // T1 inherits T2 via dominance #endif /// Models a collection of {@link Polygon}s. // /// As per the OGC SFS specification, /// the Polygons in a MultiPolygon may not overlap, /// and may only touch at single points. /// This allows the topological point-set semantics /// to be well-defined. /// class GEOS_DLL MultiPolygon: public GeometryCollection, public Polygonal { public: friend class GeometryFactory; virtual ~MultiPolygon(); /// Returns surface dimension (2) Dimension::DimensionType getDimension() const; /// Returns 1 (MultiPolygon boundary is MultiLineString) int getBoundaryDimension() const; /** \brief * Computes the boundary of this geometry * * @return a lineal geometry (which may be empty) * @see Geometry#getBoundary */ Geometry* getBoundary() const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; bool isSimple() const; bool equalsExact(const Geometry *other, double tolerance=0) const; Geometry *clone() const; protected: /** * \brief Construct a MultiPolygon * * @param newPolys * the Polygons for this MultiPolygon, * or null or an empty array to create the empty * geometry. Elements may be empty Polygons, but * not nulls. * The polygons must conform to the assertions specified in the * * OpenGIS Simple Features Specification for SQL * . * * Constructed object will take ownership of * the vector and its elements. * * @param newFactory * The GeometryFactory used to create this geometry * Caller must keep the factory alive for the life-time * of the constructed MultiPolygon. */ MultiPolygon(std::vector *newPolys, const GeometryFactory *newFactory); MultiPolygon(const MultiPolygon &mp); }; #ifdef _MSC_VER #pragma warning(pop) #endif } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/MultiPolygon.inl" #endif #endif // ndef GEOS_GEOS_MULTIPOLYGON_H geos-3.4.2/include/geos/geom/MultiPolygon.inl0000644000175000017500000000210412206417147020753 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiPolygon.java rev 1.34 * **********************************************************************/ #ifndef GEOS_GEOM_MULTIPOLYGON_INL #define GEOS_GEOM_MULTIPOLYGON_INL #include #include namespace geos { namespace geom { // geos::geom INLINE MultiPolygon::MultiPolygon(const MultiPolygon &mp) : Geometry(mp), GeometryCollection(mp) { } INLINE Geometry* MultiPolygon::clone() const { return new MultiPolygon(*this); } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_MULTIPOLYGON_INL geos-3.4.2/include/geos/geom/Point.h0000644000175000017500000001106612206417147017056 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Point.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOS_POINT_H #define GEOS_GEOS_POINT_H #include #include #include // for inheritance #include // for inheritance #include // for proper use of auto_ptr<> #include // for proper use of auto_ptr<> #include // for Dimension::DimensionType #include #include #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; class CoordinateFilter; class CoordinateSequenceFilter; class GeometryComponentFilter; class GeometryFilter; } } namespace geos { namespace geom { // geos::geom /** * Implementation of Point. * * A Point is valid iff: * * - the coordinate which defines it is a valid coordinate * (i.e does not have an NaN X or Y ordinate) * */ class GEOS_DLL Point : public virtual Geometry, public Puntal { public: friend class GeometryFactory; /// A vector of const Point pointers typedef std::vector ConstVect; virtual ~Point(); /** * Creates and returns a full copy of this {@link Point} object. * (including all coordinates contained by it). * * @return a clone of this instance */ Geometry *clone() const { return new Point(*this); } CoordinateSequence* getCoordinates(void) const; const CoordinateSequence* getCoordinatesRO() const; size_t getNumPoints() const; bool isEmpty() const; bool isSimple() const; /// Returns point dimension (0) Dimension::DimensionType getDimension() const; /// Returns coordinate dimension. virtual int getCoordinateDimension() const; /// Returns Dimension::False (Point has no boundary) int getBoundaryDimension() const; /** * Gets the boundary of this geometry. * Zero-dimensional geometries have no boundary by definition, * so an empty GeometryCollection is returned. * * @return an empty GeometryCollection * @see Geometry::getBoundary */ Geometry* getBoundary() const; double getX() const; double getY() const; const Coordinate* getCoordinate() const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; void apply_ro(CoordinateFilter *filter) const; void apply_rw(const CoordinateFilter *filter); void apply_ro(GeometryFilter *filter) const; void apply_rw(GeometryFilter *filter); void apply_rw(GeometryComponentFilter *filter); void apply_ro(GeometryComponentFilter *filter) const; void apply_rw(CoordinateSequenceFilter& filter); void apply_ro(CoordinateSequenceFilter& filter) const; bool equalsExact(const Geometry *other, double tolerance=0) const; void normalize(void) { // a Point is always in normalized form } Geometry* reverse() const { return clone(); } protected: /** * \brief * Creates a Point taking ownership of the given CoordinateSequence * (must have 1 element) * * @param newCoords * contains the single coordinate on which to base this * Point or null to create * the empty geometry. * * @param newFactory the GeometryFactory used to create this geometry */ Point(CoordinateSequence *newCoords, const GeometryFactory *newFactory); Point(const Point &p); Envelope::AutoPtr computeEnvelopeInternal() const; int compareToSameClass(const Geometry *p) const; private: /** * The Coordinate wrapped by this Point. */ std::auto_ptr coordinates; }; } // namespace geos::geom } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geom/Point.inl" //#endif #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_GEOS_POINT_H geos-3.4.2/include/geos/geom/Polygon.h0000644000175000017500000001246712206417147017422 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Polygon.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_POLYGON_H #define GEOS_GEOM_POLYGON_H #include #include #include #include #include // for inheritance #include // for inheritance #include // for proper use of auto_ptr<> #include // for Dimension::DimensionType #include #include // for auto_ptr // Forward declarations namespace geos { namespace geom { // geos::geom class Coordinate; class CoordinateArraySequence; class CoordinateSequenceFilter; class LinearRing; class LineString; } } namespace geos { namespace geom { // geos::geom /** * \class Polygon geom.h geos.h * * \brief Represents a linear polygon, which may include holes. * * The shell and holes of the polygon are represented by {@link LinearRing}s. * In a valid polygon, holes may touch the shell or other holes at a single point. * However, no sequence of touching holes may split the polygon into two pieces. * The orientation of the rings in the polygon does not matter. *

* The shell and holes must conform to the assertions specified in the OpenGIS Simple Features * Specification for SQL . * */ class GEOS_DLL Polygon: public virtual Geometry, public Polygonal { public: friend class GeometryFactory; /// A vector of const Polygon pointers typedef std::vector ConstVect; virtual ~Polygon(); /** * Creates and returns a full copy of this {@link Polygon} object. * (including all coordinates contained by it). * * @return a clone of this instance */ virtual Geometry *clone() const { return new Polygon(*this); } CoordinateSequence* getCoordinates() const; size_t getNumPoints() const; /// Returns surface dimension (2) Dimension::DimensionType getDimension() const; /// Returns coordinate dimension. virtual int getCoordinateDimension() const; /// Returns 1 (Polygon boundary is a MultiLineString) int getBoundaryDimension() const; /** \brief * Computes the boundary of this geometry * * @return a lineal geometry (which may be empty) * @see Geometry#getBoundary */ Geometry* getBoundary() const; bool isEmpty() const; /** \brief * Tests if a valid polygon is simple. * This method always returns true, since a valid polygon is always simple * * @return true */ bool isSimple() const; /// Returns the exterior ring (shell) const LineString* getExteriorRing() const; /// Returns number of interior rings (hole) size_t getNumInteriorRing() const; /// Get nth interior ring (hole) const LineString* getInteriorRingN(std::size_t n) const; std::string getGeometryType() const; virtual GeometryTypeId getGeometryTypeId() const; bool equalsExact(const Geometry *other, double tolerance=0) const; void apply_rw(const CoordinateFilter *filter); void apply_ro(CoordinateFilter *filter) const; void apply_rw(GeometryFilter *filter); void apply_ro(GeometryFilter *filter) const; void apply_rw(CoordinateSequenceFilter& filter); void apply_ro(CoordinateSequenceFilter& filter) const; Geometry* convexHull() const; void normalize(); int compareToSameClass(const Geometry *p) const; //was protected const Coordinate* getCoordinate() const; double getArea() const; /// Returns the perimeter of this Polygon double getLength() const; void apply_rw(GeometryComponentFilter *filter); void apply_ro(GeometryComponentFilter *filter) const; bool isRectangle() const; protected: Polygon(const Polygon &p); /** * Constructs a Polygon with the given exterior * and interior boundaries. * * @param newShell the outer boundary of the new Polygon, * or null or an empty * LinearRing if the empty geometry * is to be created. * * @param newHoles the LinearRings defining the inner * boundaries of the new Polygon, or * null or empty LinearRing * if the empty geometry is to be created. * * @param newFactory the GeometryFactory used to create this geometry * * Polygon will take ownership of Shell and Holes LinearRings */ Polygon(LinearRing *newShell, std::vector *newHoles, const GeometryFactory *newFactory); LinearRing *shell; std::vector *holes; //Actually vector Envelope::AutoPtr computeEnvelopeInternal() const; private: void normalize(LinearRing *ring, bool clockwise); }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_POLYGON_H geos-3.4.2/include/geos/geom/Polygonal.h0000644000175000017500000000214012206417147017722 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Polygonal.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_POLYGONAL_H #define GEOS_GEOM_POLYGONAL_H #include #include // for inheritance namespace geos { namespace geom { // geos::geom /** * Identifies {@link Geometry} subclasses which * are 2-dimensional and with components which are {@link Polygon}s. */ class GEOS_DLL Polygonal : public virtual Geometry { protected: Polygonal(): Geometry(0) {} }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_POLYGONAL_H geos-3.4.2/include/geos/geom/PrecisionModel.h0000644000175000017500000002415312206417147020702 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/PrecisionModel.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_PRECISIONMODEL_H #define GEOS_GEOM_PRECISIONMODEL_H #include #include #include // Forward declarations namespace geos { namespace io { class Unload; } namespace geom { class Coordinate; } } namespace geos { namespace geom { // geos::geom /** * \class PrecisionModel geom.h geos.h * * \brief Specifies the precision model of the Coordinate in a Geometry. * * In other words, specifies the grid of allowable * points for all Geometrys. * * The makePrecise method allows rounding a coordinate to * a "precise" value; that is, one whose * precision is known exactly. * * Coordinates are assumed to be precise in geometries. * That is, the coordinates are assumed to be rounded to the * precision model given for the geometry. * JTS input routines automatically round coordinates to the precision model * before creating Geometries. * All internal operations * assume that coordinates are rounded to the precision model. * Constructive methods (such as boolean operations) always round computed * coordinates to the appropriate precision model. * * Currently three types of precision model are supported: * - FLOATING - represents full double precision floating point. * This is the default precision model used in JTS * - FLOATING_SINGLE - represents single precision floating point. * - FIXED - represents a model with a fixed number of decimal places. * A Fixed Precision Model is specified by a scale factor. * The scale factor specifies the grid which numbers are rounded to. * Input coordinates are mapped to fixed coordinates according to the * following equations: * - jtsPt.x = round( inputPt.x * scale ) / scale * - jtsPt.y = round( inputPt.y * scale ) / scale * * For example, to specify 3 decimal places of precision, use a scale factor * of 1000. To specify -3 decimal places of precision (i.e. rounding to * the nearest 1000), use a scale factor of 0.001. * * Coordinates are represented internally as Java double-precision values. * Since Java uses the IEEE-394 floating point standard, this * provides 53 bits of precision. (Thus the maximum precisely representable * integer is 9,007,199,254,740,992). * * JTS methods currently do not handle inputs with different precision models. */ class GEOS_DLL PrecisionModel { friend class io::Unload; public: /// The types of Precision Model which GEOS supports. typedef enum { /** * Fixed Precision indicates that coordinates have a fixed * number of decimal places. * The number of decimal places is determined by the log10 * of the scale factor. */ FIXED, /** * Floating precision corresponds to the standard Java * double-precision floating-point representation, which is * based on the IEEE-754 standard */ FLOATING, /** * Floating single precision corresponds to the standard Java * single-precision floating-point representation, which is * based on the IEEE-754 standard */ FLOATING_SINGLE } Type; /// Creates a PrecisionModel with a default precision of FLOATING. PrecisionModel(void); /// Creates a PrecisionModel specifying an explicit precision model type. // /// If the model type is FIXED the scale factor will default to 1. /// /// @param nModelType the type of the precision model /// PrecisionModel(Type nModelType); /** \brief * Creates a PrecisionModel with Fixed precision. * * Fixed-precision coordinates are represented as precise internal * coordinates, which are rounded to the grid defined by the * scale factor. * * @param scale * amount by which to multiply a coordinate after subtracting * the offset, to obtain a precise coordinate * @param offsetX not used. * @param offsetY not used. * * @deprecated offsets are no longer supported, since internal * representation is rounded floating point */ PrecisionModel(double newScale, double newOffsetX, double newOffsetY); /** * \brief * Creates a PrecisionModel with Fixed precision. * * Fixed-precision coordinates are represented as precise * internal coordinates which are rounded to the grid defined * by the scale factor. * * @param newScale amount by which to multiply a coordinate * after subtracting the offset, to obtain a precise coordinate */ PrecisionModel(double newScale); // copy constructor PrecisionModel(const PrecisionModel &pm); /// destructor ~PrecisionModel(void); /// The maximum precise value representable in a double. // /// Since IEE754 double-precision numbers allow 53 bits of mantissa, /// the value is equal to 2^53 - 1. /// This provides almost 16 decimal digits of precision. //// static const double maximumPreciseValue; /** \brief * Rounds a numeric value to the PrecisionModel grid. * * Asymmetric Arithmetic Rounding is used, to provide * uniform rounding behaviour no matter where the number is * on the number line. * * Note: Java's Math#rint uses the "Banker's Rounding" algorithm, * which is not suitable for precision operations elsewhere in JTS. */ double makePrecise(double val) const; /// Rounds the given Coordinate to the PrecisionModel grid. void makePrecise(Coordinate& coord) const; void makePrecise(Coordinate* coord) const; /// Tests whether the precision model supports floating point // /// @return true if the precision model supports /// floating point /// bool isFloating() const; /// \brief /// Returns the maximum number of significant digits provided by /// this precision model. // /// Intended for use by routines which need to print out precise /// values. /// /// @return the maximum number of decimal places provided by this /// precision model /// int getMaximumSignificantDigits() const; /// Gets the type of this PrecisionModel // /// @return the type of this PrecisionModel /// Type getType() const; /// Returns the multiplying factor used to obtain a precise coordinate. double getScale() const; /// Returns the x-offset used to obtain a precise coordinate. // /// @return the amount by which to subtract the x-coordinate before /// multiplying by the scale /// @deprecated Offsets are no longer used /// double getOffsetX() const; /// Returns the y-offset used to obtain a precise coordinate. // /// @return the amount by which to subtract the y-coordinate before /// multiplying by the scale /// @deprecated Offsets are no longer used /// double getOffsetY() const; /** \brief * Sets internal to the precise representation of * external. * * @param external the original coordinate * @param internal the coordinate whose values will be changed to the * precise representation of external * @deprecated use makePrecise instead */ //void toInternal(const Coordinate& external, Coordinate* internal) const; /* * Returns the precise representation of external. * *@param external the original coordinate *@return * the coordinate whose values will be changed to the precise * representation of external * @deprecated use makePrecise instead */ //Coordinate* toInternal(const Coordinate& external) const; /* * Returns the external representation of internal. * *@param internal the original coordinate *@return the coordinate whose values will be changed to the * external representation of internal * @deprecated no longer needed, since internal representation is same as external representation */ //Coordinate* toExternal(const Coordinate& internal) const; /* * Sets external to the external representation of * internal. * * @param internal the original coordinate * @param external * the coordinate whose values will be changed to the * external representation of internal * @deprecated no longer needed, since internal representation is same as external representation */ //void toExternal(const Coordinate& internal, Coordinate* external) const; std::string toString() const; /// \brief /// Compares this PrecisionModel object with the specified object /// for order. // /// A PrecisionModel is greater than another if it provides greater /// precision. /// The comparison is based on the value returned by the /// getMaximumSignificantDigits method. /// This comparison is not strictly accurate when comparing floating /// precision models to fixed models; /// however, it is correct when both models are either floating or /// fixed. /// /// @param other the PrecisionModel with which this PrecisionModel /// is being compared /// @return a negative integer, zero, or a positive integer as this /// PrecisionModel is less than, equal to, or greater than the /// specified PrecisionModel. /// int compareTo(const PrecisionModel* other) const; private: /** \brief * Sets the multiplying factor used to obtain a precise coordinate. * * This method is private because PrecisionModel is intended to * be an immutable (value) type. * */ void setScale(double newScale); // throw IllegalArgumentException Type modelType; double scale; }; // Equality operator for PrecisionModel, deprecate it ? //inline bool operator==(const PrecisionModel& a, const PrecisionModel& b); } // namespace geos::geom } // namespace geos #ifdef GEOS_INLINE # include "geos/geom/PrecisionModel.inl" #endif #endif // ndef GEOS_GEOM_PRECISIONMODEL_H geos-3.4.2/include/geos/geom/PrecisionModel.inl0000644000175000017500000000250012206417147021225 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/PrecisionModel.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_PRECISIONMODEL_INL #define GEOS_GEOM_PRECISIONMODEL_INL #include #include namespace geos { namespace geom { // geos::geom /*public*/ INLINE PrecisionModel::~PrecisionModel(void) { } /*public*/ INLINE void PrecisionModel::makePrecise(Coordinate* coord) const { assert(coord); return makePrecise(*coord); } /*public*/ INLINE PrecisionModel::Type PrecisionModel::getType() const { return modelType; } /*public*/ INLINE double PrecisionModel::getScale() const { assert(!(scale < 0)); return scale; } } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PRECISIONMODEL_INL geos-3.4.2/include/geos/geom/Puntal.h0000644000175000017500000000211412206417147017222 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Puntal.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_PUNTAL_H #define GEOS_GEOM_PUNTAL_H #include #include // for inheritance namespace geos { namespace geom { // geos::geom /** * Identifies {@link Geometry} subclasses which * are 0-dimensional and with components which are {@link Point}s. */ class GEOS_DLL Puntal : public virtual Geometry { protected: Puntal(): Geometry(0) {} }; } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_PUNTAL_H geos-3.4.2/include/geos/geom/Triangle.h0000644000175000017500000000265412206417147017535 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_TRIANGLE_H #define GEOS_GEOM_TRIANGLE_H #include #include #include namespace geos { namespace geom { // geos::geom /** * \brief * Represents a planar triangle, and provides methods for calculating various * properties of triangles. */ class GEOS_DLL Triangle { public: Coordinate p0, p1, p2; Triangle(const Coordinate& nP0, const Coordinate& nP1, const Coordinate& nP2) : p0(nP0), p1(nP1), p2(nP2) {} /** * The inCentre of a triangle is the point which is equidistant * from the sides of the triangle. This is also the point at which the bisectors * of the angles meet. * * @param resultPoint the point into which to write the inCentre of the triangle */ void inCentre(Coordinate& resultPoint); }; } // namespace geos::geom } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geom/Triangle.inl" //#endif #endif // ndef GEOS_GEOM_TRIANGLE_H geos-3.4.2/include/geos/geom/prep/0000755000175000017500000000000012206417225016553 5ustar frankiefrankiegeos-3.4.2/include/geos/geom/prep/AbstractPreparedPolygonContains.h0000644000175000017500000000766512206417147025242 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/AbstractPreparedPolygonContains.java r388 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_ABSTRACTPREPAREDPOLYGONCONTAINS_H #define GEOS_GEOM_PREP_ABSTRACTPREPAREDPOLYGONCONTAINS_H #include // inherited // forward declarations namespace geos { namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A base class containing the logic for computes the contains * and covers spatial relationship predicates * for a {@link PreparedPolygon} relative to all other {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * Contains and covers are very similar, and differ only in how certain * cases along the boundary are handled. These cases require * full topological evaluation to handle, so all the code in * this class is common to both predicates. * * It is not possible to short-circuit in all cases, in particular * in the case where line segments of the test geometry touches the polygon * linework. * In this case full topology must be computed. * (However, if the test geometry consists of only points, this * can be evaluated in an optimized fashion. * * @author Martin Davis * */ class AbstractPreparedPolygonContains : public PreparedPolygonPredicate { private: // information about geometric situation bool hasSegmentIntersection; bool hasProperIntersection; bool hasNonProperIntersection; bool isProperIntersectionImpliesNotContainedSituation( const geom::Geometry * testGeom); /** * Tests whether a geometry consists of a single polygon with no holes. * * @return true if the geometry is a single polygon with no holes */ bool isSingleShell( const geom::Geometry & geom); void findAndClassifyIntersections( const geom::Geometry * geom); protected: /** * This flag controls a difference between contains and covers. * * For contains the value is true. * For covers the value is false. */ bool requireSomePointInInterior; /** * Evaluate the contains or covers relationship * for the given geometry. * * @param geom the test geometry * @return true if the test geometry is contained */ bool eval( const geom::Geometry * geom); /** * Computes the full topological predicate. * Used when short-circuit tests are not conclusive. * * @param geom the test geometry * @return true if this prepared polygon has the relationship with the test geometry */ virtual bool fullTopologicalPredicate( const geom::Geometry * geom) =0; public: AbstractPreparedPolygonContains( const PreparedPolygon * const prepPoly) : PreparedPolygonPredicate( prepPoly), hasSegmentIntersection( false), hasProperIntersection( false), hasNonProperIntersection( false), requireSomePointInInterior(true) { } AbstractPreparedPolygonContains( const PreparedPolygon * const prepPoly, bool requireSomePointInInterior) : PreparedPolygonPredicate( prepPoly), hasSegmentIntersection( false), hasProperIntersection( false), hasNonProperIntersection( false), requireSomePointInInterior(requireSomePointInInterior) { } virtual ~AbstractPreparedPolygonContains() { } }; } // geos::geom::prep } // geos::geom } // geos #endif // GEOS_GEOM_PREP_ABSTRACTPREPAREDPOLYGONCONTAINS_H geos-3.4.2/include/geos/geom/prep/BasicPreparedGeometry.h0000644000175000017500000001040112206417147023143 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/BasicPreparedGeometry.java rev. 1.5 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_BASICPREPAREDGEOMETRY_H #define GEOS_GEOM_PREP_BASICPREPAREDGEOMETRY_H #include // for inheritance //#include //#include #include //#include #include #include namespace geos { namespace geom { class Geometry; class Coordinate; } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep // * \class BasicPreparedGeometry /** * * \brief * A base class for {@link PreparedGeometry} subclasses. * * Contains default implementations for methods, which simply delegate * to the equivalent {@link Geometry} methods. * This class may be used as a "no-op" class for Geometry types * which do not have a corresponding {@link PreparedGeometry} implementation. * * @author Martin Davis * */ class BasicPreparedGeometry: public PreparedGeometry { private: const geom::Geometry * baseGeom; Coordinate::ConstVect representativePts; protected: /** * Sets the original {@link Geometry} which will be prepared. */ void setGeometry( const geom::Geometry * geom ); /** * Determines whether a Geometry g interacts with * this geometry by testing the geometry envelopes. * * @param g a Geometry * @return true if the envelopes intersect */ bool envelopesIntersect(const geom::Geometry* g) const; /** * Determines whether the envelope of * this geometry covers the Geometry g. * * * @param g a Geometry * @return true if g is contained in this envelope */ bool envelopeCovers(const geom::Geometry* g) const; public: BasicPreparedGeometry( const Geometry * geom); ~BasicPreparedGeometry( ); const geom::Geometry & getGeometry() const { return *baseGeom; } /** * Gets the list of representative points for this geometry. * One vertex is included for every component of the geometry * (i.e. including one for every ring of polygonal geometries) * * @return a List of Coordinate */ const Coordinate::ConstVect * getRepresentativePoints() const { return &representativePts; } /** * Tests whether any representative of the target geometry * intersects the test geometry. * This is useful in A/A, A/L, A/P, L/P, and P/P cases. * * @param geom the test geometry * @param repPts the representative points of the target geometry * @return true if any component intersects the areal test geometry */ bool isAnyTargetComponentInTest(const geom::Geometry * testGeom) const; /** * Default implementation. */ bool contains(const geom::Geometry * g) const; /** * Default implementation. */ bool containsProperly(const geom::Geometry * g) const; /** * Default implementation. */ bool coveredBy(const geom::Geometry * g) const; /** * Default implementation. */ bool covers(const geom::Geometry * g) const; /** * Default implementation. */ bool crosses(const geom::Geometry * g) const; /** * Standard implementation for all geometries. * Supports {@link GeometryCollection}s as input. */ bool disjoint(const geom::Geometry * g) const; /** * Default implementation. */ bool intersects(const geom::Geometry * g) const; /** * Default implementation. */ bool overlaps(const geom::Geometry * g) const; /** * Default implementation. */ bool touches(const geom::Geometry * g) const; /** * Default implementation. */ bool within(const geom::Geometry * g) const; std::string toString(); }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_BASICPREPAREDGEOMETRY_H geos-3.4.2/include/geos/geom/prep/Makefile.am0000644000175000017500000000106112206417147020610 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/geom/prep geos_HEADERS = \ AbstractPreparedPolygonContains.h \ BasicPreparedGeometry.h \ PreparedGeometryFactory.h \ PreparedGeometry.h \ PreparedLineString.h \ PreparedLineStringIntersects.h \ PreparedPoint.h \ PreparedPolygonContains.h \ PreparedPolygonContainsProperly.h \ PreparedPolygonCovers.h \ PreparedPolygon.h \ PreparedPolygonIntersects.h \ PreparedPolygonPredicate.h geos-3.4.2/include/geos/geom/prep/Makefile.in0000644000175000017500000003702012206417161020621 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/geom/prep DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/geom/prep geos_HEADERS = \ AbstractPreparedPolygonContains.h \ BasicPreparedGeometry.h \ PreparedGeometryFactory.h \ PreparedGeometry.h \ PreparedLineString.h \ PreparedLineStringIntersects.h \ PreparedPoint.h \ PreparedPolygonContains.h \ PreparedPolygonContainsProperly.h \ PreparedPolygonCovers.h \ PreparedPolygon.h \ PreparedPolygonIntersects.h \ PreparedPolygonPredicate.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/geom/prep/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/geom/prep/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/geom/prep/PreparedGeometry.h0000644000175000017500000001404712206417147022213 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedGeometry.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDGEOMETRY_H #define GEOS_GEOM_PREP_PREPAREDGEOMETRY_H #include // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \class PreparedGeometry * * \brief * An interface for classes which prepare {@link Geometry}s * in order to optimize the performance * of repeated calls to specific geometric operations. * * A given implementation may provide optimized implementations * for only some of the specified methods, * and delegate the remaining methods to the original {@link Geometry} operations. * An implementation may also only optimize certain situations, * and delegate others. * See the implementing classes for documentation about which methods and situations * they optimize. * */ class GEOS_DLL PreparedGeometry { public: virtual ~PreparedGeometry() {} /** * Gets the original {@link Geometry} which has been prepared. * * @return the base geometry */ virtual const geom::Geometry & getGeometry() const =0; /** * Tests whether the base {@link Geometry} contains a given geometry. * * @param geom the Geometry to test * @return true if this Geometry contains the given Geometry * * @see Geometry#contains(Geometry) */ virtual bool contains(const geom::Geometry *geom) const =0; /** \brief * Tests whether the base {@link Geometry} properly contains * a given geometry. * * The containsProperly predicate has the following * equivalent definitions: * * - Every point of the other geometry is a point of this * geometry's interior. * - The DE-9IM Intersection Matrix for the two geometries matches * [T**FF*FF*] * * In other words, if the test geometry has any interaction with * the boundary of the target * geometry the result of containsProperly is false. * This is different semantics to the {@link Geometry::contains} * predicate, * in which test geometries can intersect the target's * boundary and still be contained. * * The advantage of using this predicate is that it can be computed * efficiently, since it avoids the need to compute the full * topological relationship of the input boundaries in cases where * they intersect. * * An example use case is computing the intersections * of a set of geometries with a large polygonal geometry. * Since intersection is a fairly slow operation, it can * be more efficient * to use containsProperly to filter out test geometries * which lie * wholly inside the area. In these cases the intersection is * known a priori to be exactly the original test geometry. * * @param geom the Geometry to test * @return true if this Geometry properly contains the given Geometry * * @see Geometry::contains * */ virtual bool containsProperly(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} is covered by a given geometry. * * @param geom the Geometry to test * @return true if this Geometry is covered by the given Geometry * * @see Geometry#coveredBy(Geometry) */ virtual bool coveredBy(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} covers a given geometry. * * @param geom the Geometry to test * @return true if this Geometry covers the given Geometry * * @see Geometry#covers(Geometry) */ virtual bool covers(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} crosses a given geometry. * * @param geom the Geometry to test * @return true if this Geometry crosses the given Geometry * * @see Geometry#crosses(Geometry) */ virtual bool crosses(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} is disjoint from a given geometry. * * @param geom the Geometry to test * @return true if this Geometry is disjoint from the given Geometry * * @see Geometry#disjoint(Geometry) */ virtual bool disjoint(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} intersects a given geometry. * * @param geom the Geometry to test * @return true if this Geometry intersects the given Geometry * * @see Geometry#intersects(Geometry) */ virtual bool intersects(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} overlaps a given geometry. * * @param geom the Geometry to test * @return true if this Geometry overlaps the given Geometry * * @see Geometry#overlaps(Geometry) */ virtual bool overlaps(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} touches a given geometry. * * @param geom the Geometry to test * @return true if this Geometry touches the given Geometry * * @see Geometry#touches(Geometry) */ virtual bool touches(const geom::Geometry *geom) const =0; /** * Tests whether the base {@link Geometry} is within a given geometry. * * @param geom the Geometry to test * @return true if this Geometry is within the given Geometry * * @see Geometry#within(Geometry) */ virtual bool within(const geom::Geometry *geom) const =0; }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // ndef GEOS_GEOM_PREP_PREPAREDGEOMETRY_H geos-3.4.2/include/geos/geom/prep/PreparedGeometryFactory.h0000644000175000017500000000435612206417147023545 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedGeometryFactory.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDGEOMETRYFACTORY_H #define GEOS_GEOM_PREP_PREPAREDGEOMETRYFACTORY_H #include #include namespace geos { namespace geom { namespace prep { class PreparedGeometry; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A factory for creating {@link PreparedGeometry}s. * * It chooses an appropriate implementation of PreparedGeometry * based on the geoemtric type of the input geometry. * In the future, the factory may accept hints that indicate * special optimizations which can be performed. * * @author Martin Davis * */ class GEOS_DLL PreparedGeometryFactory { public: /** * Creates a new {@link PreparedGeometry} appropriate for the argument {@link Geometry}. * * @param geom the geometry to prepare * @return the prepared geometry */ static const PreparedGeometry * prepare(const geom::Geometry * geom) { PreparedGeometryFactory pf; return pf.create(geom); } /** * Destroys {@link PreparedGeometry} allocated with the factory. * * @param geom to be deallocated */ static void destroy(const PreparedGeometry* geom) { delete geom; } /** * Creates a new {@link PreparedGeometry} appropriate for the argument {@link Geometry}. * * @param geom the geometry to prepare * @return the prepared geometry */ const PreparedGeometry* create(const geom::Geometry* geom) const; }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDGEOMETRYFACTORY_H geos-3.4.2/include/geos/geom/prep/PreparedLineString.h0000644000175000017500000000331212206417147022467 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedLineString.java rev 1.3 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDLINESTRING_H #define GEOS_GEOM_PREP_PREPAREDLINESTRING_H #include // for inheritance #include namespace geos { namespace noding { class FastSegmentSetIntersectionFinder; } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A prepared version of {@link LinearRing}, {@link LineString} or {@link MultiLineString} geometries. * * @author mbdavis * */ class PreparedLineString : public BasicPreparedGeometry { private: noding::FastSegmentSetIntersectionFinder * segIntFinder; mutable noding::SegmentString::ConstVect segStrings; protected: public: PreparedLineString(const Geometry * geom) : BasicPreparedGeometry( geom), segIntFinder( NULL) { } ~PreparedLineString(); noding::FastSegmentSetIntersectionFinder * getIntersectionFinder(); bool intersects(const geom::Geometry * g) const; }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDLINESTRING_H geos-3.4.2/include/geos/geom/prep/PreparedLineStringIntersects.h0000644000175000017500000000560312206417147024540 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedLineStringIntersects.java r338 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDLINESTRINGINTERSECTS_H #define GEOS_GEOM_PREP_PREPAREDLINESTRINGINTERSECTS_H #include #include #include #include #include namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * Computes the intersects spatial relationship predicate * for a target {@link PreparedLineString} relative to all other * {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * @author Martin Davis * */ class PreparedLineStringIntersects { public: /** * Computes the intersects predicate between a {@link PreparedLineString} * and a {@link Geometry}. * * @param prep the prepared linestring * @param geom a test geometry * @return true if the linestring intersects the geometry */ static bool intersects( PreparedLineString & prep, const geom::Geometry * geom ) { PreparedLineStringIntersects op( prep); return op.intersects( geom); } /** * \todo FIXME - mloskot: Why not taking linestring through const reference? */ PreparedLineStringIntersects(PreparedLineString & prep) : prepLine( prep) { } /** * Tests whether this geometry intersects a given geometry. * * @param geom the test geometry * @return true if the test geometry intersects */ bool intersects(const geom::Geometry * g) const; protected: PreparedLineString & prepLine; /** * Tests whether any representative point of the test Geometry intersects * the target geometry. * Only handles test geometries which are Puntal (dimension 0) * * @param geom a Puntal geometry to test * @return true if any point of the argument intersects the prepared geometry */ bool isAnyTestPointInTarget(const geom::Geometry * testGeom) const; // Declare type as noncopyable PreparedLineStringIntersects(const PreparedLineStringIntersects& other); PreparedLineStringIntersects& operator=(const PreparedLineStringIntersects& rhs); }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDLINESTRINGINTERSECTS_H geos-3.4.2/include/geos/geom/prep/PreparedPoint.h0000644000175000017500000000277212206417147021513 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPoint.java rev. 1.2 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOINT_H #define GEOS_GEOM_PREP_PREPAREDPOINT_H #include // for inheritance namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A prepared version of {@link Point} or {@link MultiPoint} geometries. * * @author Martin Davis * */ class PreparedPoint: public BasicPreparedGeometry { private: protected: public: PreparedPoint(const Geometry * geom) : BasicPreparedGeometry( geom) { } /** * Tests whether this point intersects a {@link Geometry}. * * The optimization here is that computing topology for the test * geometry is avoided. This can be significant for large geometries. */ bool intersects(const geom::Geometry* g); }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDPOINT_H geos-3.4.2/include/geos/geom/prep/PreparedPolygon.h0000644000175000017500000000377012206417147022050 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygon.java rev 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGON_H #define GEOS_GEOM_PREP_PREPAREDPOLYGON_H #include // for inheritance #include namespace geos { namespace noding { class FastSegmentSetIntersectionFinder; } namespace algorithm { namespace locate { class PointOnGeometryLocator; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A prepared version of {@link Polygon} or {@link MultiPolygon} geometries. * * @author mbdavis * */ class PreparedPolygon : public BasicPreparedGeometry { private: bool isRectangle; mutable noding::FastSegmentSetIntersectionFinder * segIntFinder; mutable algorithm::locate::PointOnGeometryLocator * ptOnGeomLoc; mutable noding::SegmentString::ConstVect segStrings; protected: public: PreparedPolygon( const geom::Geometry * geom); ~PreparedPolygon( ); noding::FastSegmentSetIntersectionFinder * getIntersectionFinder() const; algorithm::locate::PointOnGeometryLocator * getPointLocator() const; bool contains( const geom::Geometry* g) const; bool containsProperly( const geom::Geometry* g) const; bool covers( const geom::Geometry* g) const; bool intersects( const geom::Geometry* g) const; }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGON_H geos-3.4.2/include/geos/geom/prep/PreparedPolygonContains.h0000644000175000017500000000540012206417147023537 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygonContains.java rev 1.5 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINS_H #define GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINS_H #include // inherited // forward declarations namespace geos { namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * Computes the contains spatial relationship predicate * for a {@link PreparedPolygon} relative to all other {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * It is not possible to short-circuit in all cases, in particular * in the case where the test geometry touches the polygon linework. * In this case full topology must be computed. * * @author Martin Davis * */ class PreparedPolygonContains : public AbstractPreparedPolygonContains { public: /** * Creates an instance of this operation. * * @param prepPoly the PreparedPolygon to evaluate */ PreparedPolygonContains(const PreparedPolygon * const prepPoly); /** * Tests whether this PreparedPolygon contains a given geometry. * * @param geom the test geometry * @return true if the test geometry is contained */ bool contains(const geom::Geometry * geom) { return eval(geom); } /** * Computes the contains predicate between a {@link PreparedPolygon} * and a {@link Geometry}. * * @param prep the prepared polygon * @param geom a test geometry * @return true if the polygon contains the geometry */ static bool contains(const PreparedPolygon * const prep, const geom::Geometry * geom) { PreparedPolygonContains polyInt(prep); return polyInt.contains(geom); } protected: /** * Computes the full topological contains predicate. * Used when short-circuit tests are not conclusive. * * @param geom the test geometry * @return true if this prepared polygon contains the test geometry */ bool fullTopologicalPredicate(const geom::Geometry * geom); }; } // geos::geom::prep } // geos::geom } // geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINS_H geos-3.4.2/include/geos/geom/prep/PreparedPolygonContainsProperly.h0000644000175000017500000000557012206417147025304 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygonContainsProperly.java rev 1.5 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINSPROPERLY_H #define GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINSPROPERLY_H #include // inherited namespace geos { namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * Computes the containsProperly spatial relationship predicate * for {@link PreparedPolygon}s relative to all other {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * A Geometry A containsProperly another Geometry B iff * all points of B are contained in the Interior of A. * Equivalently, B is contained in A AND B does not intersect * the Boundary of A. * * The advantage to using this predicate is that it can be computed * efficiently, with no need to compute topology at individual points. * In a situation with many geometries intersecting the boundary * of the target geometry, this can make a performance difference. * * @author Martin Davis */ class PreparedPolygonContainsProperly : public PreparedPolygonPredicate { private: protected: public: /** * Computes the containsProperly predicate between a {@link PreparedPolygon} * and a {@link Geometry}. * * @param prep the prepared polygon * @param geom a test geometry * @return true if the polygon properly contains the geometry */ static bool containsProperly( const PreparedPolygon * const prep, const geom::Geometry * geom) { PreparedPolygonContainsProperly polyInt( prep); return polyInt.containsProperly( geom); } /** * Creates an instance of this operation. * * @param prepPoly the PreparedPolygon to evaluate */ PreparedPolygonContainsProperly( const PreparedPolygon * const prep) : PreparedPolygonPredicate( prep) { } /** * Tests whether this PreparedPolygon containsProperly a given geometry. * * @param geom the test geometry * @return true if the test geometry is contained properly */ bool containsProperly( const geom::Geometry * geom); }; } // geos::geom::prep } // geos::geom } // geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGONCONTAINSPROPERLY_H geos-3.4.2/include/geos/geom/prep/PreparedPolygonCovers.h0000644000175000017500000000546012206417147023230 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygonCovers.java rev 1.2 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGONCOVERS_H #define GEOS_GEOM_PREP_PREPAREDPOLYGONCOVERS_H #include // inherited // forward declarations namespace geos { namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * Computes the covers spatial relationship predicate * for a {@link PreparedPolygon} relative to all other {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * It is not possible to short-circuit in all cases, in particular * in the case where the test geometry touches the polygon linework. * In this case full topology must be computed. * * @author Martin Davis * */ class PreparedPolygonCovers : public AbstractPreparedPolygonContains { private: protected: /** * Computes the full topological covers predicate. * Used when short-circuit tests are not conclusive. * * @param geom the test geometry * @return true if this prepared polygon covers the test geometry */ bool fullTopologicalPredicate( const geom::Geometry * geom); public: /** * Computes the covers predicate between a {@link PreparedPolygon} * and a {@link Geometry}. * * @param prep the prepared polygon * @param geom a test geometry * @return true if the polygon covers the geometry */ static bool covers(const PreparedPolygon * const prep, const geom::Geometry * geom) { PreparedPolygonCovers polyInt(prep); return polyInt.covers(geom); } /** * Creates an instance of this operation. * * @param prepPoly the PreparedPolygon to evaluate */ PreparedPolygonCovers(const PreparedPolygon * const prep) : AbstractPreparedPolygonContains( prep, false) { } /** * Tests whether this PreparedPolygon covers a given geometry. * * @param geom the test geometry * @return true if the test geometry is covered */ bool covers( const Geometry * geom) { return eval( geom); } }; } // geos::geom::prep } // geos::geom } // geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGONCOVERS_H geos-3.4.2/include/geos/geom/prep/PreparedPolygonIntersects.h0000644000175000017500000000444712206417147024116 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygonIntersects.java rev 1.6 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGONINTERSECTS_H #define GEOS_GEOM_PREP_PREPAREDPOLYGONINTERSECTS_H #include // inherited namespace geos { namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * Computes the intersects spatial relationship predicate * for {@link PreparedPolygon}s relative to all other {@link Geometry} classes. * * Uses short-circuit tests and indexing to improve performance. * * @author Martin Davis * */ class PreparedPolygonIntersects : public PreparedPolygonPredicate { private: protected: public: /** * Computes the intersects predicate between a {@link PreparedPolygon} * and a {@link Geometry}. * * @param prep the prepared polygon * @param geom a test geometry * @return true if the polygon intersects the geometry */ static bool intersects( const PreparedPolygon * const prep, const geom::Geometry * geom) { PreparedPolygonIntersects polyInt(prep); return polyInt.intersects( geom); } /** * Creates an instance of this operation. * * @param prepPoly the PreparedPolygon to evaluate */ PreparedPolygonIntersects( const PreparedPolygon * const prep) : PreparedPolygonPredicate( prep) { } /** * Tests whether this PreparedPolygon intersects a given geometry. * * @param geom the test geometry * @return true if the test geometry intersects */ bool intersects( const geom::Geometry * geom); }; } // geos::geom::prep } // geos::geom } // geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGONINTERSECTS_H geos-3.4.2/include/geos/geom/prep/PreparedPolygonPredicate.h0000644000175000017500000000767212206417147023676 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: geom/prep/PreparedPolygonPredicate.java rev. 1.4 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #ifndef GEOS_GEOM_PREP_PREPAREDPOLYGONPREDICATE_H #define GEOS_GEOM_PREP_PREPAREDPOLYGONPREDICATE_H #include // forward declarations namespace geos { namespace algorithm { namespace locate { class PointOnGeometryLocator; } } namespace geom { class Geometry; namespace prep { class PreparedPolygon; } } namespace noding { class FastSegmentSetIntersectionFinder; } } namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep /** * \brief * A base class for predicate operations on {@link PreparedPolygon}s. * * @author mbdavis * */ class PreparedPolygonPredicate { private: // Declare type as noncopyable PreparedPolygonPredicate(const PreparedPolygonPredicate& other); PreparedPolygonPredicate& operator=(const PreparedPolygonPredicate& rhs); protected: const PreparedPolygon * const prepPoly; /** \brief * Tests whether all components of the test Geometry * are contained in the target geometry. * * Handles both linear and point components. * * @param geom a geometry to test * @return true if all components of the argument are contained * in the target geometry */ bool isAllTestComponentsInTarget(const geom::Geometry * testGeom) const; /** \brief * Tests whether all components of the test Geometry * are contained in the interior of the target geometry. * * Handles both linear and point components. * * @param geom a geometry to test * @return true if all componenta of the argument are contained in * the target geometry interior */ bool isAllTestComponentsInTargetInterior( const geom::Geometry * testGeom) const; /** \brief * Tests whether any component of the test Geometry intersects * the area of the target geometry. * * Handles test geometries with both linear and point components. * * @param geom a geometry to test * @return true if any component of the argument intersects the * prepared geometry */ bool isAnyTestComponentInTarget( const geom::Geometry * testGeom) const; /** \brief * Tests whether any component of the test Geometry intersects * the interior of the target geometry. * * Handles test geometries with both linear and point components. * * @param geom a geometry to test * @return true if any component of the argument intersects the * prepared area geometry interior */ bool isAnyTestComponentInTargetInterior( const geom::Geometry * testGeom) const; /** * Tests whether any component of the target geometry * intersects the test geometry (which must be an areal geometry) * * @param geom the test geometry * @param repPts the representative points of the target geometry * @return true if any component intersects the areal test geometry */ bool isAnyTargetComponentInAreaTest( const geom::Geometry * testGeom, const geom::Coordinate::ConstVect * targetRepPts) const; public: /** * Creates an instance of this operation. * * @param prepPoly the PreparedPolygon to evaluate */ PreparedPolygonPredicate( const PreparedPolygon * const prepPoly) : prepPoly( prepPoly) { } virtual ~PreparedPolygonPredicate() { } }; } // namespace geos::geom::prep } // namespace geos::geom } // namespace geos #endif // GEOS_GEOM_PREP_PREPAREDPOLYGONPREDICATE_H geos-3.4.2/include/geos/geom/util/0000755000175000017500000000000012206417225016562 5ustar frankiefrankiegeos-3.4.2/include/geos/geom/util/ComponentCoordinateExtracter.h0000644000175000017500000000631712206417147024601 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H #define GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H #include #include #include // to be removed when we have the .inl #include // to be removed when we have the .inl #include // to be removed when we have the .inl #include // to be removed when we have the .inl //#include namespace geos { namespace geom { // geos::geom namespace util { // geos::geom::util /** \brief * Extracts a single representative {@link Coordinate} * from each connected component of a {@link Geometry}. * * @version 1.9 */ class ComponentCoordinateExtracter : public GeometryComponentFilter { public: /** * Push the linear components from a single geometry into * the provided vector. * If more than one geometry is to be processed, it is more * efficient to create a single ComponentCoordinateFilter instance * and pass it to multiple geometries. */ static void getCoordinates(const Geometry &geom, std::vector &ret) { ComponentCoordinateExtracter cce(ret); geom.apply_ro(&cce); } /** * Constructs a ComponentCoordinateFilter with a list in which * to store Coordinates found. */ ComponentCoordinateExtracter( std::vector &newComps) : comps(newComps) {} void filter_rw( Geometry * geom) { if ( geom->getGeometryTypeId() == geos::geom::GEOS_LINEARRING || geom->getGeometryTypeId() == geos::geom::GEOS_LINESTRING || geom->getGeometryTypeId() == geos::geom::GEOS_POINT ) comps.push_back( geom->getCoordinate() ); //if ( typeid( *geom ) == typeid( LineString ) // || typeid( *geom ) == typeid( Point ) ) //if ( const Coordinate *ls=dynamic_cast(geom) ) // comps.push_back(ls); } void filter_ro( const Geometry * geom) { //if ( typeid( *geom ) == typeid( LineString ) // || typeid( *geom ) == typeid( Point ) ) if ( geom->getGeometryTypeId() == geos::geom::GEOS_LINEARRING || geom->getGeometryTypeId() == geos::geom::GEOS_LINESTRING || geom->getGeometryTypeId() == geos::geom::GEOS_POINT ) comps.push_back( geom->getCoordinate() ); //if ( const Coordinate *ls=dynamic_cast(geom) ) // comps.push_back(ls); } private: Coordinate::ConstVect &comps; // Declare type as noncopyable ComponentCoordinateExtracter(const ComponentCoordinateExtracter& other); ComponentCoordinateExtracter& operator=(const ComponentCoordinateExtracter& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif //GEOS_GEOM_UTIL_COMPONENTCOORDINATEEXTRACTER_H geos-3.4.2/include/geos/geom/util/CoordinateOperation.h0000644000175000017500000000347212206417147022714 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_COORDINATEOPERATION_H #define GEOS_GEOM_UTIL_COORDINATEOPERATION_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Geometry; class CoordinateSequence; class GeometryFactory; } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * A GeometryEditorOperation which modifies the coordinate list of a * Geometry. * Operates on Geometry subclasses which contains a single coordinate list. */ class GEOS_DLL CoordinateOperation: public GeometryEditorOperation { public: /** * Return a newly created geometry, ownership to caller */ virtual Geometry* edit(const Geometry *geometry, const GeometryFactory *factory); /** * Edits the array of Coordinate from a Geometry. * * @param coordinates the coordinate array to operate on * @param geometry the geometry containing the coordinate list * @return an edited coordinate array (which may be the same as * the input) */ virtual CoordinateSequence* edit(const CoordinateSequence* coordinates, const Geometry *geometry)=0; virtual ~CoordinateOperation() {} }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/GeometryCombiner.h0000644000175000017500000000662612206417147022222 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006-2011 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryCombiner.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_GEOMETRYCOMBINER_H #define GEOS_GEOM_UTIL_GEOMETRYCOMBINER_H #include // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Combines {@link Geometry}s * to produce a {@link GeometryCollection} of the most appropriate type. * Input geometries which are already collections * will have their elements extracted first. * No validation of the result geometry is performed. * (The only case where invalidity is possible is where {@link Polygonal} * geometries are combined and result in a self-intersection). * * @see GeometryFactory#buildGeometry */ class GeometryCombiner { public: /** * Combines a collection of geometries. * * @param geoms the geometries to combine (ownership left to caller) * @return the combined geometry */ static Geometry* combine(std::vector const& geoms); /** * Combines two geometries. * * @param g0 a geometry to combine (ownership left to caller) * @param g1 a geometry to combine (ownership left to caller) * @return the combined geometry */ static Geometry* combine(const Geometry* g0, const Geometry* g1); /** * Combines three geometries. * * @param g0 a geometry to combine (ownership left to caller) * @param g1 a geometry to combine (ownership left to caller) * @param g2 a geometry to combine (ownership left to caller) * @return the combined geometry */ static Geometry* combine(const Geometry* g0, const Geometry* g1, const Geometry* g2); private: GeometryFactory const* geomFactory; bool skipEmpty; std::vector const& inputGeoms; public: /** * Creates a new combiner for a collection of geometries * * @param geoms the geometries to combine */ GeometryCombiner(std::vector const& geoms); /** * Extracts the GeometryFactory used by the geometries in a collection * * @param geoms * @return a GeometryFactory */ static GeometryFactory const* extractFactory(std::vector const& geoms); /** * Computes the combination of the input geometries * to produce the most appropriate {@link Geometry} or {@link GeometryCollection} * * @return a Geometry which is the combination of the inputs */ Geometry* combine(); private: void extractElements(Geometry* geom, std::vector& elems); // Declare type as noncopyable GeometryCombiner(const GeometryCombiner& other); GeometryCombiner& operator=(const GeometryCombiner& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/GeometryEditor.h0000644000175000017500000000743712206417147021713 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryEditor.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_GEOMETRYEDITOR_H #define GEOS_GEOM_UTIL_GEOMETRYEDITOR_H #include // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; class GeometryCollection; class Polygon; namespace util { class GeometryEditorOperation; } } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Supports creating a new Geometry which is a modification of an existing one. * Geometry objects are intended to be treated as immutable. * This class allows you to "modify" a Geometry * by traversing it and creating a new Geometry with the same overall * structure but possibly modified components. * * The following kinds of modifications can be made: * * - the values of the coordinates may be changed. * Changing coordinate values may make the result Geometry invalid; * this is not checked by the GeometryEditor * - the coordinate lists may be changed * (e.g. by adding or deleting coordinates). * The modifed coordinate lists must be consistent with their original * parent component * (e.g. a LinearRing must always have at least 4 coordinates, and the * first and last coordinate must be equal) * - components of the original geometry may be deleted * (e.g. holes may be removed from a Polygon, or LineStrings removed * from a MultiLineString). Deletions will be propagated up the component * tree appropriately. * * Note that all changes must be consistent with the original Geometry's * structure * (e.g. a Polygon cannot be collapsed into a LineString). * * The resulting Geometry is not checked for validity. * If validity needs to be enforced, the new Geometry's isValid should * be checked. * * @see Geometry::isValid * */ class GEOS_DLL GeometryEditor { private: /** * The factory used to create the modified Geometry */ const GeometryFactory* factory; Polygon* editPolygon(const Polygon *polygon, GeometryEditorOperation *operation); GeometryCollection* editGeometryCollection( const GeometryCollection *collection, GeometryEditorOperation *operation); public: /** * Creates a new GeometryEditor object which will create * an edited Geometry with the same GeometryFactory as the * input Geometry. */ GeometryEditor(); /** * Creates a new GeometryEditor object which will create * the edited Geometry with the given GeometryFactory * * @param newFactory the GeometryFactory to create the edited * Geometry with */ GeometryEditor(const GeometryFactory *newFactory); /** * Edit the input Geometry with the given edit operation. * Clients will create subclasses of GeometryEditorOperation or * CoordinateOperation to perform required modifications. * * @param geometry the Geometry to edit * @param operation the edit operation to carry out * @return a new Geometry which is the result of the editing * */ Geometry* edit(const Geometry *geometry, GeometryEditorOperation *operation); // final }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/GeometryEditorOperation.h0000644000175000017500000000315312206417147023563 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_GEOMETRYEDITOROPERATION_H #define GEOS_GEOM_UTIL_GEOMETRYEDITOROPERATION_H #include // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * A interface which specifies an edit operation for Geometries. */ class GEOS_DLL GeometryEditorOperation { public: /** * Edits a Geometry by returning a new Geometry with a modification. * The returned Geometry might be the same as the Geometry passed in. * * @param geometry the Geometry to modify * * @param factory the factory with which to construct the modified * Geometry (may be different to the factory of the * input geometry) * * @return a new Geometry which is a modification of the input Geometry */ virtual Geometry* edit(const Geometry *geometry, const GeometryFactory *factory)=0; virtual ~GeometryEditorOperation() {} }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/GeometryExtracter.h0000644000175000017500000000537712206417147022427 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryExtracter.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_GEOMETRYEXTRACTER_H #define GEOS_GEOM_UTIL_GEOMETRYEXTRACTER_H #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Extracts the components of a given type from a {@link Geometry}. */ class GEOS_DLL GeometryExtracter { public: /** * Extracts the components of type clz from a {@link Geometry} * and adds them to the provided container. * * @param geom the geometry from which to extract * @param list the list to add the extracted elements to */ template static void extract(const Geometry& geom, TargetContainer& lst) { if ( const ComponentType* c = dynamic_cast(&geom) ) { lst.push_back(c); } else if ( const GeometryCollection* c = dynamic_cast(&geom) ) { GeometryExtracter::Extracter extracter(lst); c->apply_ro(&extracter); } } private: template struct Extracter: public GeometryFilter { /** * Constructs a filter with a list in which to store the elements found. * * @param comps the container to extract into (will push_back to it) */ Extracter(TargetContainer& comps) : comps_(comps) {} TargetContainer& comps_; void filter_ro(const Geometry* geom) { if ( const ComponentType* c = dynamic_cast(geom) ) { comps_.push_back(c); } } // Declare type as noncopyable Extracter(const Extracter& other); Extracter& operator=(const Extracter& rhs); }; // Declare type as noncopyable GeometryExtracter(const GeometryExtracter& other); GeometryExtracter& operator=(const GeometryExtracter& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/GeometryTransformer.h0000644000175000017500000001257612206417147022767 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryTransformer.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_GEOMETRYTRANSFORMER_H #define GEOS_GEOM_UTIL_GEOMETRYTRANSFORMER_H #include #include // destructor visibility for vector #include // destructor visibility for auto_ptr #include // destructor visibility for auto_ptr #include // for auto_ptr #include // Forward declarations namespace geos { namespace geom { class Geometry; class GeometryFactory; class Point; class LinearRing; class LineString; class Polygon; class MultiPoint; class MultiPolygon; class MultiLineString; class GeometryCollection; namespace util { //class GeometryEditorOperation; } } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** \brief * A framework for processes which transform an input {@link Geometry} into * an output {@link Geometry}, possibly changing its structure and type(s). * * This class is a framework for implementing subclasses * which perform transformations on * various different Geometry subclasses. * It provides an easy way of applying specific transformations * to given geometry types, while allowing unhandled types to be simply copied. * Also, the framework ensures that if subcomponents change type * the parent geometries types change appropriately to maintain valid structure. * Subclasses will override whichever transformX methods * they need to to handle particular Geometry types. * * A typically usage would be a transformation that may transform Polygons into * Polygons, LineStrings * or Points. This class would likely need to override the * {@link transformMultiPolygon} method to ensure that if input Polygons * change type the result is a GeometryCollection, * not a MultiPolygon * * The default behaviour of this class is to simply recursively transform * each Geometry component into an identical object by copying. * * Note that all transformX methods may return null, * to avoid creating empty geometry objects. This will be handled correctly * by the transformer. * The {@link transform} method itself will always * return a geometry object. * * @see GeometryEditor * * Possible extensions: * getParent() method to return immediate parent e.g. of LinearRings in Polygons * */ class GEOS_DLL GeometryTransformer { public: GeometryTransformer(); virtual ~GeometryTransformer(); std::auto_ptr transform(const Geometry* nInputGeom); protected: const GeometryFactory* factory; /** * Convenience method which provides standard way of * creating a {@link CoordinateSequence} * * @param coords the coordinate array to copy * @return a coordinate sequence for the array * * [final] */ CoordinateSequence::AutoPtr createCoordinateSequence( std::auto_ptr< std::vector > coords); virtual CoordinateSequence::AutoPtr transformCoordinates( const CoordinateSequence* coords, const Geometry* parent); virtual Geometry::AutoPtr transformPoint( const Point* geom, const Geometry* parent); virtual Geometry::AutoPtr transformMultiPoint( const MultiPoint* geom, const Geometry* parent); virtual Geometry::AutoPtr transformLinearRing( const LinearRing* geom, const Geometry* parent); virtual Geometry::AutoPtr transformLineString( const LineString* geom, const Geometry* parent); virtual Geometry::AutoPtr transformMultiLineString( const MultiLineString* geom, const Geometry* parent); virtual Geometry::AutoPtr transformPolygon( const Polygon* geom, const Geometry* parent); virtual Geometry::AutoPtr transformMultiPolygon( const MultiPolygon* geom, const Geometry* parent); virtual Geometry::AutoPtr transformGeometryCollection( const GeometryCollection* geom, const Geometry* parent); private: const Geometry* inputGeom; // these could eventually be exposed to clients /** * true if empty geometries should not be included in the result */ bool pruneEmptyGeometry; /** * true if a homogenous collection result * from a {@link GeometryCollection} should still * be a general GeometryCollection */ bool preserveGeometryCollectionType; /** * true if the output from a collection argument should still be a collection */ bool preserveCollections; /** * true if the type of the input should be preserved */ bool preserveType; // Declare type as noncopyable GeometryTransformer(const GeometryTransformer& other); GeometryTransformer& operator=(const GeometryTransformer& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif // GEOS_GEOM_UTIL_GEOMETRYTRANSFORMER_H geos-3.4.2/include/geos/geom/util/LinearComponentExtracter.h0000644000175000017500000000446012206417147023721 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_LINEARCOMPONENTEXTRACTER_H #define GEOS_GEOM_UTIL_LINEARCOMPONENTEXTRACTER_H #include #include #include #include // to be removed when we have the .inl #include // to be removed when we have the .inl //#include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Extracts all the 1-dimensional (LineString) components from a Geometry. */ class GEOS_DLL LinearComponentExtracter: public GeometryComponentFilter { private: LineString::ConstVect &comps; // Declare type as noncopyable LinearComponentExtracter(const LinearComponentExtracter& other); LinearComponentExtracter& operator=(const LinearComponentExtracter& rhs); public: /** * Push the linear components from a single geometry into * the provided vector. * If more than one geometry is to be processed, it is more * efficient to create a single LinearComponentExtracterFilter instance * and pass it to multiple geometries. */ static void getLines(const Geometry &geom, std::vector &ret) { LinearComponentExtracter lce(ret); geom.apply_ro(&lce); } /** * Constructs a LinearComponentExtracterFilter with a list in which * to store LineStrings found. */ LinearComponentExtracter(std::vector &newComps) : comps(newComps) {} void filter_rw(Geometry *geom) { if ( const LineString *ls=dynamic_cast(geom) ) comps.push_back(ls); } void filter_ro(const Geometry *geom) { if ( const LineString *ls=dynamic_cast(geom) ) comps.push_back(ls); } }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/Makefile.am0000644000175000017500000000076112206417147020625 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/geom/util geos_HEADERS = \ ComponentCoordinateExtracter.h \ CoordinateOperation.h \ GeometryCombiner.h \ GeometryEditor.h \ GeometryEditorOperation.h \ GeometryExtracter.h \ GeometryTransformer.h \ LinearComponentExtracter.h \ PointExtracter.h \ PolygonExtracter.h \ ShortCircuitedGeometryVisitor.h \ SineStarFactory.h geos-3.4.2/include/geos/geom/util/Makefile.in0000644000175000017500000003672012206417161020636 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/geom/util DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/geom/util geos_HEADERS = \ ComponentCoordinateExtracter.h \ CoordinateOperation.h \ GeometryCombiner.h \ GeometryEditor.h \ GeometryEditorOperation.h \ GeometryExtracter.h \ GeometryTransformer.h \ LinearComponentExtracter.h \ PointExtracter.h \ PolygonExtracter.h \ ShortCircuitedGeometryVisitor.h \ SineStarFactory.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/geom/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/geom/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/geom/util/PointExtracter.h0000644000175000017500000000373212206417147021716 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_POINTEXTRACTER_H #define GEOS_GEOM_UTIL_POINTEXTRACTER_H #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Extracts all the 0-dimensional (Point) components from a Geometry. */ class GEOS_DLL PointExtracter: public GeometryFilter { public: /** * Returns the Point components from a single geometry. * If more than one geometry is to be processed, it is more * efficient to create a single PointExtracter filter instance * and pass it to multiple geometries. */ static void getPoints(const Geometry &geom, Point::ConstVect &ret) { PointExtracter pe(ret); geom.apply_ro(&pe); } /** * Constructs a PointExtracterFilter with a list in which * to store Points found. */ PointExtracter(Point::ConstVect& newComps) : comps(newComps) {} void filter_rw(Geometry *geom) { if ( const Point *p=dynamic_cast(geom) ) comps.push_back(p); } void filter_ro(const Geometry *geom) { if ( const Point *p=dynamic_cast(geom) ) comps.push_back(p); } private: Point::ConstVect& comps; // Declare type as noncopyable PointExtracter(const PointExtracter& other); PointExtracter& operator=(const PointExtracter& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/PolygonExtracter.h0000644000175000017500000000417412206417147022255 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_POLYGONEXTRACTER_H #define GEOS_GEOM_UTIL_POLYGONEXTRACTER_H #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Extracts all the 2-dimensional (Polygon) components from a Geometry. */ class GEOS_DLL PolygonExtracter: public GeometryFilter { public: /** * Pushes the Polygon components from a single geometry into * the provided vector. * If more than one geometry is to be processed, it is more * efficient to create a single PolygonExtracterFilter instance * and pass it to multiple geometries. */ static void getPolygons(const Geometry &geom, std::vector& ret) { PolygonExtracter pe(ret); geom.apply_ro(&pe); } /** * Constructs a PolygonExtracterFilter with a list in which * to store Polygons found. */ PolygonExtracter(std::vector& newComps) : comps(newComps) {} void filter_rw(Geometry *geom) { if ( const Polygon *p=dynamic_cast(geom) ) { comps.push_back(p); } } void filter_ro(const Geometry *geom) { if ( const Polygon *p=dynamic_cast(geom) ) { comps.push_back(p); } } private: /// Reference to provided vector std::vector& comps; // Declare type as noncopyable PolygonExtracter(const PolygonExtracter& other); PolygonExtracter& operator=(const PolygonExtracter& rhs); }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/ShortCircuitedGeometryVisitor.h0000644000175000017500000000261312206417147024767 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_UTIL_SHORTCIRCUITEDGEOMETRYVISITOR_H #define GEOS_GEOM_UTIL_SHORTCIRCUITEDGEOMETRYVISITOR_H #include // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** \brief * A visitor to Geometry elements which can * be short-circuited by a given condition * * Last port: geom/util/ShortCircuitedGeometryVisitor.java rev. 1.1 (JTS-1.7) */ class GEOS_DLL ShortCircuitedGeometryVisitor { private: bool done; protected: virtual void visit(const Geometry &element)=0; virtual bool isDone()=0; public: ShortCircuitedGeometryVisitor() : done(false) {} void applyTo(const Geometry &geom); virtual ~ShortCircuitedGeometryVisitor() {} }; } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geom/util/SineStarFactory.h0000644000175000017500000000536012206417147022022 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli #include // for inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Envelope; class Polygon; class GeometryFactory; class PrecisionModel; class LineString; } } namespace geos { namespace geom { // geos::geom namespace util { // geos::geom::util /** * Creates geometries which are shaped like multi-armed stars * with each arm shaped like a sine wave. * These kinds of geometries are useful as a more complex * geometry for testing algorithms. * * @author Martin Davis * */ class GEOS_DLL SineStarFactory : public geos::util::GeometricShapeFactory { protected: int numArms; double armLengthRatio; public: /** * Creates a factory which will create sine stars using the given * {@link GeometryFactory}. * * @param fact the factory to use. You need to keep the * factory alive for the whole SineStarFactory * life time. */ SineStarFactory(const geom::GeometryFactory* fact) : geos::util::GeometricShapeFactory(fact), numArms(8), armLengthRatio(0.5) {} /** * Sets the number of arms in the star * * @param nArms the number of arms to generate */ void setNumArms(int nArms) { numArms = nArms; } /** * Sets the ration of the length of each arm to the distance from the tip * of the arm to the centre of the star. * Value should be between 0.0 and 1.0 * * @param armLenRatio */ void setArmLengthRatio(double armLenRatio) { armLengthRatio = armLenRatio; } /** * Generates the geometry for the sine star * * @return the geometry representing the sine star */ std::auto_ptr createSineStar() const; }; } // namespace geos::geom::util } // namespace geos::geom } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_UTIL_SINESTARFACTORY_H geos-3.4.2/include/geos/geom.h0000644000175000017500000001166312206417150015762 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOM_H #define GEOS_GEOM_H /** \mainpage GEOS - Geometry Engine Open Source * * \section intro_sec Introduction * * Geometry Engine Open Source is a C++ port of the Java Topology Suite * released under the LGPL license. * It has interfaces for C++, C and python (though swig). * * \section getstart_sec Getting Started * * The recommended low-level interface to the GEOS library * is the simplified \ref c_iface. This will ensure stability of the * API and the ABI of the library during performance improvements * that will likely change classes definitions. * * If you don't care about adapting/rebuilding your client code * you can still use the \ref cpp_iface. */ /** \page c_iface C wrapper interface * * \section Overview * * This is the preferred access method for GEOS. * * It is designed to keep binary compatibility across releases. * * \section Usage * * In order to use the C-API of geos you must link your code against * libgeos_c.so and include the geos_c.h header file, which also contain * function-level documentation. * */ /** \page cpp_iface C++ interface * * \section Overview * * Main class is geos::geom::Geometry, from which all geometry types * derive. * * Construction and destruction of Geometries is done * using geos::geom::GeometryFactory. * * You'll feed it geos::geom::CoordinateSequence * for base geometries or vectors of geometries for collections. * * If you need to construct geometric shaped geometries, you * can use geos::geom::GeometricShapeFactory. * * GEOS version info (as a string) can be obtained using * geos::geom::geosversion(). The JTS version this release has been * ported from is available throu geos::geom::jtsport(). * * \section io_sect Input / Output * * For WKT input/output you can use geos::io::WKTReader and geos::io::WKTWriter * * For WKB input/output you can use geos::io::WKBReader and geos::io::WKBWriter * * \section exc_sect Exceptions * * Internal exceptions are thrown as instances geos::util::GEOSException or * derived classes. GEOSException derives from std::exception. * * Note that prior to version 3.0.0, GEOSException were thrown by * pointer, and did not derive from std::exception. * */ namespace geos { /// Contains the Geometry interface hierarchy and supporting classes. // /// The Java Topology Suite (JTS) is a Java API that implements a core /// set of spatial data operations using an explicit precision model /// and robust geometric algorithms. JTS is int ended to be used in the /// development of applications that support the validation, cleaning, /// integration and querying of spatial datasets. /// /// JTS attempts to implement the OpenGIS Simple Features Specification /// (SFS) as accurately as possible. In some cases the SFS is unclear /// or omits a specification; in this case J TS attempts to choose /// a reasonable and consistent alternative. Differences from and /// elaborations of the SFS are documented in this specification. /// ///

Package Specification

/// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL /// namespace geom { // geos::geom } // namespace geos::geom } // namespace geos #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 __GNUC__ #warning *** DEPRECATED: You are using deprecated header geom.h. Please, update your sources according to new layout of GEOS headers and namespaces #endif using namespace geos::geom; #endif // ndef GEOS_GEOM_H geos-3.4.2/include/geos/geomUtil.h0000644000175000017500000000222312206417150016610 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOMUTIL_H #define GEOS_GEOMUTIL_H #include #include #include #include #include #include #include namespace geos { namespace geom { // geos.geom /** \brief * Provides classes that parse and modify Geometry objects. */ namespace util { // geos.geom.util } // namespace geos.geom.util } // namespace geos.geom } // namespace geos #endif geos-3.4.2/include/geos/geomgraph/0000755000175000017500000000000012206417225016627 5ustar frankiefrankiegeos-3.4.2/include/geos/geomgraph/Depth.h0000644000175000017500000000322512206417150020043 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Depth.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_DEPTH_H #define GEOS_GEOMGRAPH_DEPTH_H #include #include #include // Forward declarations namespace geos { namespace geomgraph { class Label; } } namespace geos { namespace geomgraph { // geos.geomgraph class GEOS_DLL Depth { public: static int depthAtLocation(int location); Depth(); virtual ~Depth(); // FIXME: shoudn't be virtual! int getDepth(int geomIndex,int posIndex) const; void setDepth(int geomIndex,int posIndex,int depthValue); int getLocation(int geomIndex,int posIndex) const; void add(int geomIndex,int posIndex,int location); bool isNull() const; bool isNull(int geomIndex) const; bool isNull(int geomIndex, int posIndex) const; int getDelta(int geomIndex) const; void normalize(); void add(const Label& lbl); std::string toString() const; private: enum { NULL_VALUE=-1 //Replaces NULL }; int depth[2][3]; }; } // namespace geos.geomgraph } // namespace geos #endif // ifndef GEOS_GEOMGRAPH_DEPTH_H geos-3.4.2/include/geos/geomgraph/DirectedEdge.h0000644000175000017500000001037012206417150021306 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/DirectedEdge.java r428 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_DIRECTEDEDGE_H #define GEOS_GEOMGRAPH_DIRECTEDEDGE_H #include #include #include // for inheritance #include // Forward declarations namespace geos { namespace geomgraph { class Edge; class EdgeRing; } } namespace geos { namespace geomgraph { // geos.geomgraph /// A directed EdgeEnd class GEOS_DLL DirectedEdge: public EdgeEnd { public: /** \brief * Computes the factor for the change in depth when moving from * one location to another. * E.g. if crossing from the INTERIOR to the EXTERIOR the depth * decreases, so the factor is -1 */ static int depthFactor(int currLocation, int nextLocation); //DirectedEdge(); //virtual ~DirectedEdge(); DirectedEdge(Edge *newEdge, bool newIsForward); // this is no different from Base class, no need to override //Edge* getEdge(); void setInResult(bool newIsInResult); bool isInResult(); bool isVisited(); void setVisited(bool newIsVisited); void setEdgeRing(EdgeRing *newEdgeRing); EdgeRing* getEdgeRing(); void setMinEdgeRing(EdgeRing *newMinEdgeRing); EdgeRing* getMinEdgeRing(); int getDepth(int position); void setDepth(int position, int newDepth); int getDepthDelta(); /// Marks both DirectedEdges attached to a given Edge. // /// This is used for edges corresponding to lines, which will only /// appear oriented in a single direction in the result. /// void setVisitedEdge(bool newIsVisited); /** \brief * Each Edge gives rise to a pair of symmetric DirectedEdges, * in opposite directions. * * @return the DirectedEdge for the same Edge but in the * opposite direction */ DirectedEdge* getSym(); bool isForward(); void setSym(DirectedEdge *de); DirectedEdge* getNext(); void setNext(DirectedEdge *newNext); DirectedEdge* getNextMin(); void setNextMin(DirectedEdge *newNextMin); /** \brief * Tells wheter this edge is a Line * * This edge is a line edge if * - at least one of the labels is a line label * - any labels which are not line labels have all Locations = EXTERIOR * */ bool isLineEdge(); /** \brief * Tells wheter this edge is an Area * * This is an interior Area edge if * - its label is an Area label for both Geometries * - and for each Geometry both sides are in the interior. * * @return true if this is an interior Area edge */ bool isInteriorAreaEdge(); /** \brief * Set both edge depths. * * One depth for a given side is provided. * The other is computed depending on the Location transition and the * depthDelta of the edge. */ void setEdgeDepths(int position, int newDepth); std::string print(); std::string printEdge(); protected: bool isForwardVar; private: bool isInResultVar; bool isVisitedVar; /// the symmetric edge DirectedEdge *sym; /// the next edge in the edge ring for the polygon containing this edge DirectedEdge *next; /// the next edge in the MinimalEdgeRing that contains this edge DirectedEdge *nextMin; /// the EdgeRing that this edge is part of EdgeRing *edgeRing; /// the MinimalEdgeRing that this edge is part of EdgeRing *minEdgeRing; /** \brief * The depth of each side (position) of this edge. * The 0 element of the array is never used. */ int depth[3]; /// Compute the label in the appropriate orientation for this DirEdge void computeDirectedLabel(); }; } // namespace geos.geomgraph } // namespace geos #ifdef GEOS_INLINE # include "geos/geomgraph/DirectedEdge.inl" #endif #endif // ifndef GEOS_GEOMGRAPH_DIRECTEDEDGE_H geos-3.4.2/include/geos/geomgraph/DirectedEdge.inl0000644000175000017500000000416712206417150021650 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/DirectedEdge.java r428 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_DIRECTEDEDGE_INL #define GEOS_GEOMGRAPH_DIRECTEDEDGE_INL #include namespace geos { namespace geomgraph { // geos::geomgraph //INLINE Edge* //DirectedEdge::getEdge() { return edge; } INLINE void DirectedEdge::setInResult(bool v) { isInResultVar=v; } INLINE bool DirectedEdge::isInResult() { return isInResultVar; } INLINE bool DirectedEdge::isVisited() { return isVisitedVar; } INLINE void DirectedEdge::setVisited(bool v) { isVisitedVar=v; } INLINE void DirectedEdge::setEdgeRing(EdgeRing *er) { edgeRing=er; } INLINE EdgeRing* DirectedEdge::getEdgeRing() { return edgeRing; } INLINE void DirectedEdge::setMinEdgeRing(EdgeRing *mer) { minEdgeRing=mer; } INLINE EdgeRing* DirectedEdge::getMinEdgeRing() { return minEdgeRing; } INLINE int DirectedEdge::getDepth(int position){ return depth[position]; } INLINE DirectedEdge* DirectedEdge::getSym() { return sym; } INLINE bool DirectedEdge::isForward() { return isForwardVar; } INLINE void DirectedEdge::setSym(DirectedEdge *de) { sym=de; } INLINE DirectedEdge* DirectedEdge::getNext() { return next; } INLINE void DirectedEdge::setNext(DirectedEdge *newNext) { next=newNext; } INLINE DirectedEdge* DirectedEdge::getNextMin() { return nextMin; } INLINE void DirectedEdge::setNextMin(DirectedEdge *nm) { nextMin=nm; } } // namespace geos::geomgraph } // namespace geos #endif // GEOS_GEOMGRAPH_DIRECTEDEDGE_INL geos-3.4.2/include/geos/geomgraph/DirectedEdgeStar.h0000644000175000017500000001033612206417150022142 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/DirectedEdgeStar.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H #define GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H #include #include #include #include #include // for inheritance #include // for private member #include // for p0,p1 #include // Forward declarations namespace geos { namespace geomgraph { class DirectedEdge; class EdgeRing; } } namespace geos { namespace geomgraph { // geos.geomgraph /** * \brief * A DirectedEdgeStar is an ordered list of outgoing DirectedEdges around a node. * * It supports labelling the edges as well as linking the edges to form both * MaximalEdgeRings and MinimalEdgeRings. * */ class GEOS_DLL DirectedEdgeStar: public EdgeEndStar { public: DirectedEdgeStar() : EdgeEndStar(), resultAreaEdgeList(0), label() {} ~DirectedEdgeStar() { delete resultAreaEdgeList; } /// Insert a directed edge in the list void insert(EdgeEnd *ee); Label &getLabel() { return label; } int getOutgoingDegree(); int getOutgoingDegree(EdgeRing *er); DirectedEdge* getRightmostEdge(); /** \brief * Compute the labelling for all dirEdges in this star, as well * as the overall labelling */ void computeLabelling(std::vector *geom); // throw(TopologyException *); /** \brief * For each dirEdge in the star, * merge the label from the sym dirEdge into the label */ void mergeSymLabels(); /// Update incomplete dirEdge labels from the labelling for the node void updateLabelling(const Label& nodeLabel); /** * Traverse the star of DirectedEdges, linking the included edges together. * To link two dirEdges, the pointer for an incoming dirEdge * is set to the next outgoing edge. * * DirEdges are only linked if: * * - they belong to an area (i.e. they have sides) * - they are marked as being in the result * * Edges are linked in CCW order (the order they are stored). * This means that rings have their face on the Right * (in other words, * the topological location of the face is given by the RHS label of the DirectedEdge) * * PRECONDITION: No pair of dirEdges are both marked as being in the result */ void linkResultDirectedEdges(); // throw(TopologyException *); void linkMinimalDirectedEdges(EdgeRing *er); void linkAllDirectedEdges(); /** \brief * Traverse the star of edges, maintaing the current location in the result * area at this node (if any). * * If any L edges are found in the interior of the result, mark them as covered. */ void findCoveredLineEdges(); /** \brief * Compute the DirectedEdge depths for a subsequence of the edge array. * * @return the last depth assigned (from the R side of the last edge visited) */ void computeDepths(DirectedEdge *de); std::string print(); private: /** * A list of all outgoing edges in the result, in CCW order */ std::vector *resultAreaEdgeList; Label label; /// \brief /// Returned vector is onwed by DirectedEdgeStar object, but /// lazily created std::vector* getResultAreaEdges(); /// States for linResultDirectedEdges enum { SCANNING_FOR_INCOMING=1, LINKING_TO_OUTGOING }; int computeDepths(EdgeEndStar::iterator startIt, EdgeEndStar::iterator endIt, int startDepth); }; } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/DirectedEdgeEndStar.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_DIRECTEDEDGEENDSTAR_H geos-3.4.2/include/geos/geomgraph/Edge.h0000644000175000017500000001373212206417150017647 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Edge.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGE_H #define GEOS_GEOMGRAPH_EDGE_H #include #include #include #include // for inheritance #include // for member #include // for composition #include // for inlines #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Envelope; class IntersectionMatrix; class Coordinate; } namespace algorithm { class LineIntersector; } namespace geomgraph { class Node; class EdgeEndStar; class Label; class NodeFactory; namespace index { class MonotoneChainEdge; } } } namespace geos { namespace geomgraph { // geos.geomgraph /** The edge component of a geometry graph */ class GEOS_DLL Edge: public GraphComponent{ using GraphComponent::updateIM; private: std::string name; /// Lazily-created, owned by Edge. index::MonotoneChainEdge *mce; /// Lazily-created, owned by Edge. geom::Envelope *env; bool isIsolatedVar; Depth depth; int depthDelta; // the change in area depth from the R to L side of this edge public: void testInvariant() const { assert(pts); assert(pts->size() > 1); } friend std::ostream& operator<< (std::ostream& os, const Edge& el); static void updateIM(const Label& lbl, geom::IntersectionMatrix& im); /// Externally-set, owned by Edge. FIXME: refuse ownership geom::CoordinateSequence* pts; EdgeIntersectionList eiList; //Edge(); /// Takes ownership of CoordinateSequence Edge(geom::CoordinateSequence* newPts, const Label& newLabel); /// Takes ownership of CoordinateSequence Edge(geom::CoordinateSequence* newPts); virtual ~Edge(); virtual int getNumPoints() const { return static_cast(pts->getSize()); } virtual void setName(const std::string &newName) { name=newName; } virtual const geom::CoordinateSequence* getCoordinates() const { testInvariant(); return pts; } virtual const geom::Coordinate& getCoordinate(int i) const { testInvariant(); return pts->getAt(i); } virtual const geom::Coordinate& getCoordinate() const { testInvariant(); return pts->getAt(0); } virtual Depth &getDepth() { testInvariant(); return depth; } /** \brief * The depthDelta is the change in depth as an edge is crossed from R to L * * @return the change in depth as the edge is crossed from R to L */ virtual int getDepthDelta() const { testInvariant(); return depthDelta; } virtual void setDepthDelta(int newDepthDelta) { depthDelta=newDepthDelta; testInvariant(); } virtual int getMaximumSegmentIndex() const { testInvariant(); return getNumPoints()-1; } virtual EdgeIntersectionList& getEdgeIntersectionList() { testInvariant(); return eiList; } /// \brief /// Return this Edge's index::MonotoneChainEdge, /// ownership is retained by this object. /// virtual index::MonotoneChainEdge* getMonotoneChainEdge(); virtual bool isClosed() const { testInvariant(); return pts->getAt(0)==pts->getAt(getNumPoints()-1); } /** \brief * An Edge is collapsed if it is an Area edge and it consists of * two segments which are equal and opposite (eg a zero-width V). */ virtual bool isCollapsed() const; virtual Edge* getCollapsedEdge(); virtual void setIsolated(bool newIsIsolated) { isIsolatedVar=newIsIsolated; testInvariant(); } virtual bool isIsolated() const { testInvariant(); return isIsolatedVar; } /** \brief * Adds EdgeIntersections for one or both * intersections found for a segment of an edge to the edge intersection list. */ virtual void addIntersections(algorithm::LineIntersector *li, int segmentIndex, int geomIndex); /// Add an EdgeIntersection for intersection intIndex. // /// An intersection that falls exactly on a vertex of the edge is normalized /// to use the higher of the two possible segmentIndexes /// virtual void addIntersection(algorithm::LineIntersector *li, int segmentIndex, int geomIndex, int intIndex); /// Update the IM with the contribution for this component. // /// A component only contributes if it has a labelling for both /// parent geometries /// virtual void computeIM(geom::IntersectionMatrix& im) { updateIM(label, im); testInvariant(); } /// return true if the coordinate sequences of the Edges are identical virtual bool isPointwiseEqual(const Edge *e) const; virtual std::string print() const; virtual std::string printReverse() const; /** * equals is defined to be: * * e1 equals e2 * iff * the coordinates of e1 are the same or the reverse of the coordinates in e2 */ virtual bool equals(const Edge& e) const; virtual bool equals(const Edge* e) const { assert(e); return equals(*e); } virtual geom::Envelope* getEnvelope(); }; //Operators inline bool operator==(const Edge &a, const Edge &b) { return a.equals(b); } std::ostream& operator<< (std::ostream& os, const Edge& el); } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif //#ifdef GEOS_INLINE //# include "geos/geomgraph/Edge.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_EDGE_H geos-3.4.2/include/geos/geomgraph/EdgeEnd.h0000644000175000017500000001024712206417150020274 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeEnd.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGEEND_H #define GEOS_GEOMGRAPH_EDGEEND_H #include #include // for p0,p1 #include // for composition #include #include // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geomgraph { class Edge; class Node; } } namespace geos { namespace geomgraph { // geos.geomgraph /** \brief * Models the end of an edge incident on a node. * * EdgeEnds have a direction * determined by the direction of the ray from the initial * point to the next point. * EdgeEnds are comparable under the ordering * "a has a greater angle with the x-axis than b". * This ordering is used to sort EdgeEnds around a node. */ class GEOS_DLL EdgeEnd { public: friend std::ostream& operator<< (std::ostream&, const EdgeEnd&); EdgeEnd(); virtual ~EdgeEnd() {} /** * NOTES: * - Copies the given Label * - keeps a pointer to given Edge, make sure it's * not deleted before the EdgeEnd. * - copies given Coordinates (maybe we should avoid that) */ EdgeEnd(Edge* newEdge, const geom::Coordinate& newP0, const geom::Coordinate& newP1, const Label& newLabel); /** * NOTES: * - keeps a pointer to given Edge, make sure it's * not deleted before the EdgeEnd. * - copies given Coordinates (maybe we should avoid that) */ EdgeEnd(Edge* newEdge, const geom::Coordinate& newP0, const geom::Coordinate& newP1); Edge* getEdge() { return edge; } //virtual Edge* getEdge() { return edge; } Label& getLabel() { return label; } const Label& getLabel() const { return label; } virtual geom::Coordinate& getCoordinate(); virtual geom::Coordinate& getDirectedCoordinate(); virtual int getQuadrant(); virtual double getDx(); virtual double getDy(); virtual void setNode(Node* newNode); virtual Node* getNode(); virtual int compareTo(const EdgeEnd *e) const; /** * Implements the total order relation: * * a has a greater angle with the positive x-axis than b * * Using the obvious algorithm of simply computing the angle * is not robust, since the angle calculation is obviously * susceptible to roundoff. * A robust algorithm is: * - first compare the quadrant. If the quadrants * are different, it it trivial to determine which vector * is "greater". * - if the vectors lie in the same quadrant, the * computeOrientation function can be used to decide * the relative orientation of the vectors. */ virtual int compareDirection(const EdgeEnd *e) const; virtual void computeLabel(const algorithm::BoundaryNodeRule& bnr); virtual std::string print(); protected: Edge* edge;// the parent edge of this edge end Label label; EdgeEnd(Edge* newEdge); virtual void init(const geom::Coordinate& newP0, const geom::Coordinate& newP1); private: /// the node this edge end originates at Node* node; /// points of initial line segment. FIXME: do we need a copy here ? geom::Coordinate p0, p1; /// the direction vector for this edge from its starting point double dx, dy; int quadrant; }; std::ostream& operator<< (std::ostream&, const EdgeEnd&); struct GEOS_DLL EdgeEndLT { bool operator()(const EdgeEnd *s1, const EdgeEnd *s2) const { return s1->compareTo(s2)<0; } }; } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/EdgeEnd.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_EDGEEND_H geos-3.4.2/include/geos/geomgraph/EdgeEndStar.h0000644000175000017500000001037612206417150021131 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeEndStar.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGEENDSTAR_H #define GEOS_GEOMGRAPH_EDGEENDSTAR_H #include #include // for EdgeEndLT #include // for p0,p1 #include #include #include #include #include // for inlines (find) #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace geomgraph { // geos.geomgraph /** \brief * A EdgeEndStar is an ordered list of EdgeEnds around a node. * * They are maintained in CCW order (starting with the positive x-axis) * around the node for efficient lookup and topology building. * * @version 1.4 */ class GEOS_DLL EdgeEndStar { public: typedef std::set container; typedef container::iterator iterator; typedef container::reverse_iterator reverse_iterator; EdgeEndStar(); virtual ~EdgeEndStar() {} /** \brief * Insert a EdgeEnd into this EdgeEndStar */ virtual void insert(EdgeEnd *e)=0; /** \brief * @return the coordinate for the node this star is based at * or NULL if this is still an unbound star. * Be aware that the returned pointer will point to * a Coordinate owned by the specific EdgeEnd happening * to be the first in the star (ordered CCW) */ virtual geom::Coordinate& getCoordinate(); virtual std::size_t getDegree(); virtual iterator begin(); virtual iterator end(); virtual reverse_iterator rbegin(); virtual reverse_iterator rend(); virtual container &getEdges(); virtual EdgeEnd* getNextCW(EdgeEnd *ee); virtual void computeLabelling(std::vector *geomGraph); // throw(TopologyException *); virtual bool isAreaLabelsConsistent(const GeometryGraph& geomGraph); virtual void propagateSideLabels(int geomIndex); // throw(TopologyException *); //virtual int findIndex(EdgeEnd *eSearch); virtual iterator find(EdgeEnd *eSearch); virtual std::string print(); protected: /** \brief * A map which maintains the edges in sorted order * around the node */ EdgeEndStar::container edgeMap; /** \brief * Insert an EdgeEnd into the map. */ virtual void insertEdgeEnd(EdgeEnd *e) { edgeMap.insert(e); } private: virtual int getLocation(int geomIndex, const geom::Coordinate& p, std::vector *geom); /** \brief * The location of the point for this star in * Geometry i Areas */ int ptInAreaLocation[2]; virtual void computeEdgeEndLabels(const algorithm::BoundaryNodeRule&); virtual bool checkAreaLabelsConsistent(int geomIndex); }; inline std::size_t EdgeEndStar::getDegree() { return edgeMap.size(); } inline EdgeEndStar::iterator EdgeEndStar::begin() { return edgeMap.begin(); } inline EdgeEndStar::container& EdgeEndStar::getEdges() { return edgeMap; } inline EdgeEndStar::reverse_iterator EdgeEndStar::rend() { return edgeMap.rend(); } inline EdgeEndStar::iterator EdgeEndStar::end() { return edgeMap.end(); } inline EdgeEndStar::reverse_iterator EdgeEndStar::rbegin() { return edgeMap.rbegin(); } inline EdgeEndStar::iterator EdgeEndStar::find(EdgeEnd *eSearch) { return edgeMap.find(eSearch); } } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/EdgeEndStar.inl" //#endif #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_EDGEENDSTAR_H geos-3.4.2/include/geos/geomgraph/EdgeIntersection.h0000644000175000017500000000610312206417150022230 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeIntersection.java rev. 1.5 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGEINTERSECTION_H #define GEOS_GEOMGRAPH_EDGEINTERSECTION_H #include #include // for composition and inlines #include #include namespace geos { namespace geomgraph { // geos.geomgraph /** * Represents a point on an edge which intersects with another edge. * * The intersection may either be a single point, or a line segment * (in which case this point is the start of the line segment) * The intersection point must be precise. * */ class GEOS_DLL EdgeIntersection { public: // the point of intersection geom::Coordinate coord; // the edge distance of this point along the containing line segment double dist; // the index of the containing line segment in the parent edge int segmentIndex; EdgeIntersection(const geom::Coordinate& newCoord, int newSegmentIndex, double newDist) : coord(newCoord), dist(newDist), segmentIndex(newSegmentIndex) {} bool isEndPoint(int maxSegmentIndex) const { if (segmentIndex==0 && dist==0.0) return true; if (segmentIndex==maxSegmentIndex) return true; return false; } const geom::Coordinate& getCoordinate() const { return coord; } int getSegmentIndex() const { return segmentIndex; } double getDistance() const { return dist; } }; /// Strict weak ordering operator for EdgeIntersection // /// This is the C++ equivalent of JTS's compareTo inline bool operator< (const EdgeIntersection& ei1, const EdgeIntersection& ei2) { if ( ei1.segmentIndex < ei2.segmentIndex ) return true; if ( ei1.segmentIndex == ei2.segmentIndex ) { if ( ei1.dist < ei2.dist ) return true; // TODO: check if the Coordinate matches, or this will // be a robustness issue in computin distance // See http://trac.osgeo.org/geos/ticket/350 } return false; } // @deprecated, use strict weak ordering operator struct GEOS_DLL EdgeIntersectionLessThen { bool operator()(const EdgeIntersection *ei1, const EdgeIntersection *ei2) const { return *ei1 < *ei2; } }; /// Output operator inline std::ostream& operator<< (std::ostream& os, const EdgeIntersection& e) { os << e.coord << " seg # = " << e.segmentIndex << " dist = " << e.dist; return os; } } // namespace geos.geomgraph } // namespace geos #endif // ifndef GEOS_GEOMGRAPH_EDGEINTERSECTION_H geos-3.4.2/include/geos/geomgraph/EdgeIntersectionList.h0000644000175000017500000000622412206417150023070 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeIntersectionList.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGEINTERSECTIONLIST_H #define GEOS_GEOMGRAPH_EDGEINTERSECTIONLIST_H #include #include #include #include #include // for EdgeIntersectionLessThen #include // for CoordinateLessThen #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class Edge; } } namespace geos { namespace geomgraph { // geos.geomgraph /** * A list of edge intersections along an Edge. * Implements splitting an edge with intersections * into multiple resultant edges. */ class GEOS_DLL EdgeIntersectionList{ public: typedef std::set container; typedef container::iterator iterator; typedef container::const_iterator const_iterator; private: container nodeMap; public: Edge *edge; EdgeIntersectionList(Edge *edge); ~EdgeIntersectionList(); /* * Adds an intersection into the list, if it isn't already there. * The input segmentIndex and dist are expected to be normalized. * @return the EdgeIntersection found or added */ EdgeIntersection* add(const geom::Coordinate& coord, int segmentIndex, double dist); iterator begin() { return nodeMap.begin(); } iterator end() { return nodeMap.end(); } const_iterator begin() const { return nodeMap.begin(); } const_iterator end() const { return nodeMap.end(); } bool isEmpty() const; bool isIntersection(const geom::Coordinate& pt) const; /* * Adds entries for the first and last points of the edge to the list */ void addEndpoints(); /** * Creates new edges for all the edges that the intersections in this * list split the parent edge into. * Adds the edges to the input list (this is so a single list * can be used to accumulate all split edges for a Geometry). * * @param edgeList a list of EdgeIntersections */ void addSplitEdges(std::vector *edgeList); Edge *createSplitEdge(EdgeIntersection *ei0, EdgeIntersection *ei1); std::string print() const; }; std::ostream& operator<< (std::ostream&, const EdgeIntersectionList&); } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_EDGEINTERSECTIONLIST_H geos-3.4.2/include/geos/geomgraph/EdgeList.h0000644000175000017500000000530012206417150020473 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeList.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGELIST_H #define GEOS_GEOMGRAPH_EDGELIST_H #include #include #include #include #include #include // for map comparator #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace index { class SpatialIndex; } namespace geomgraph { class Edge; } } namespace geos { namespace geomgraph { // geos.geomgraph /** * A EdgeList is a list of Edges. * * It supports locating edges * that are pointwise equals to a target edge. */ class GEOS_DLL EdgeList { private: std::vector edges; struct OcaCmp { bool operator()( const noding::OrientedCoordinateArray *oca1, const noding::OrientedCoordinateArray *oca2) const { return *oca1 < *oca2; } }; /** * An index of the edges, for fast lookup. * * OrientedCoordinateArray objects are owned by us. * TODO: optimize by dropping the OrientedCoordinateArray * construction as a whole, and use CoordinateSequence * directly instead.. */ typedef std::map EdgeMap; EdgeMap ocaMap; public: friend std::ostream& operator<< (std::ostream& os, const EdgeList& el); EdgeList() : edges(), ocaMap() {} virtual ~EdgeList(); /** * Insert an edge unless it is already in the list */ void add(Edge *e); void addAll(const std::vector &edgeColl); std::vector &getEdges() { return edges; } Edge* findEqualEdge(Edge* e); Edge* get(int i); int findEdgeIndex(Edge *e); std::string print(); void clearList(); }; std::ostream& operator<< (std::ostream& os, const EdgeList& el); } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/EdgeList.inl" //#endif #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_EDGELIST_H geos-3.4.2/include/geos/geomgraph/EdgeNodingValidator.h0000644000175000017500000000571112206417150022652 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeNodingValidator.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGENODINGVALIDATOR_H #define GEOS_GEOMGRAPH_EDGENODINGVALIDATOR_H #include #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class CoordinateSequence; } namespace noding { class SegmentString; } namespace geomgraph { class Edge; } } namespace geos { namespace geomgraph { // geos.geomgraph /** \brief * Validates that a collection of SegmentStrings is correctly noded. * * Throws an appropriate exception if an noding error is found. */ class GEOS_DLL EdgeNodingValidator { private: std::vector& toSegmentStrings(std::vector& edges); // Make sure this member is initialized *before* // the NodingValidator, as initialization of // NodingValidator will use toSegmentString(), that // in turn expects this member to be initialized std::vector segStr; // Make sure this member is initialized *before* // the NodingValidator, as initialization of // NodingValidator will use toSegmentString(), that // in turn expects this member to be initialized std::vector newCoordSeq; noding::FastNodingValidator nv; public: /** \brief * Checks whether the supplied {@link Edge}s * are correctly noded. * * Throws a {@link TopologyException} if they are not. * * @param edges a collection of Edges. * @throws TopologyException if the SegmentStrings are not * correctly noded * */ static void checkValid(std::vector& edges) { EdgeNodingValidator validator(edges); validator.checkValid(); } EdgeNodingValidator(std::vector& edges) : segStr(), newCoordSeq(), nv(toSegmentStrings(edges)) {} ~EdgeNodingValidator(); void checkValid() { nv.checkValid(); } }; } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif //#ifdef GEOS_INLINE //# include "geos/geomgraph/EdgeNodingValidator.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_EDGENODINGVALIDATOR_H geos-3.4.2/include/geos/geomgraph/EdgeRing.h0000644000175000017500000001147212206417150020466 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeRing.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_EDGERING_H #define GEOS_GEOMGRAPH_EDGERING_H #include #include // for composition #include #include #include // for testInvariant #include // for operator<< #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class GeometryFactory; class LinearRing; class Polygon; class Coordinate; class CoordinateSequence; } namespace geomgraph { class DirectedEdge; //class Label; class Edge; } } namespace geos { namespace geomgraph { // geos.geomgraph /** EdgeRing */ class GEOS_DLL EdgeRing { public: friend std::ostream& operator<< (std::ostream& os, const EdgeRing& er); EdgeRing(DirectedEdge *newStart, const geom::GeometryFactory *newGeometryFactory); virtual ~EdgeRing(); bool isIsolated(); bool isHole(); /* * Return a pointer to the LinearRing owned by * this object. Make a copy if you need it beyond * this objects's lifetime. */ geom::LinearRing* getLinearRing(); Label& getLabel(); bool isShell(); EdgeRing *getShell(); void setShell(EdgeRing *newShell); void addHole(EdgeRing *edgeRing); /** * Return a Polygon copying coordinates from this * EdgeRing and its holes. Caller must remember * to delete the result */ geom::Polygon* toPolygon(const geom::GeometryFactory* geometryFactory); /** * Compute a LinearRing from the point list previously collected. * Test if the ring is a hole (i.e. if it is CCW) and set the hole * flag accordingly. */ void computeRing(); virtual DirectedEdge* getNext(DirectedEdge *de)=0; virtual void setEdgeRing(DirectedEdge *de, EdgeRing *er)=0; /** * Returns the list of DirectedEdges that make up this EdgeRing */ std::vector& getEdges(); int getMaxNodeDegree(); void setInResult(); /** * This method will use the computed ring. * It will also check any holes, if they have been assigned. */ bool containsPoint(const geom::Coordinate& p); void testInvariant() { // pts are never NULL assert(pts); #ifndef NDEBUG // If this is not an hole, check that // each hole is not null and // has 'this' as it's shell if ( ! shell ) { for (std::vector::const_iterator it=holes.begin(), itEnd=holes.end(); it != itEnd; ++it) { EdgeRing* hole=*it; assert(hole); assert(hole->getShell()==this); } } #endif // ndef NDEBUG } protected: DirectedEdge *startDe; // the directed edge which starts the list of edges for this EdgeRing const geom::GeometryFactory *geometryFactory; /// throw(const TopologyException &) void computePoints(DirectedEdge *newStart); void mergeLabel(const Label& deLabel); /** \brief * Merge the RHS label from a DirectedEdge into the label for * this EdgeRing. * * The DirectedEdge label may be null. * This is acceptable - it results from a node which is NOT * an intersection node between the Geometries * (e.g. the end node of a LinearRing). * In this case the DirectedEdge label does not contribute any * information to the overall labelling, and is * simply skipped. */ void mergeLabel(const Label& deLabel, int geomIndex); void addPoints(Edge *edge, bool isForward, bool isFirstEdge); /// a list of EdgeRings which are holes in this EdgeRing std::vector holes; private: int maxNodeDegree; /// the DirectedEdges making up this EdgeRing std::vector edges; geom::CoordinateSequence* pts; // label stores the locations of each geometry on the // face surrounded by this ring Label label; geom::LinearRing *ring; // the ring created for this EdgeRing bool isHoleVar; /// if non-null, the ring is a hole and this EdgeRing is its containing shell EdgeRing *shell; void computeMaxNodeDegree(); }; std::ostream& operator<< (std::ostream& os, const EdgeRing& er); } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_EDGERING_H geos-3.4.2/include/geos/geomgraph/GeometryGraph.h0000644000175000017500000001500212206417150021550 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/GeometryGraph.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_GEOMETRYGRAPH_H #define GEOS_GEOMGRAPH_GEOMETRYGRAPH_H #include #include #include #include #include #include // for auto_ptr #include #include // for LineStringLT #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineString; class LinearRing; class Polygon; class Geometry; class GeometryCollection; class Point; } namespace algorithm { class LineIntersector; class BoundaryNodeRule; } namespace geomgraph { class Edge; class Node; namespace index { class SegmentIntersector; class EdgeSetIntersector; } } } namespace geos { namespace geomgraph { // geos.geomgraph /** * A GeometryGraph is a graph that models a given Geometry */ class GEOS_DLL GeometryGraph: public PlanarGraph { using PlanarGraph::add; using PlanarGraph::findEdge; private: const geom::Geometry* parentGeom; /** * The lineEdgeMap is a map of the linestring components of the * parentGeometry to the edges which are derived from them. * This is used to efficiently perform findEdge queries * * Following the above description there's no need to * compare LineStrings other then by pointer value. */ //std::map lineEdgeMap; std::map lineEdgeMap; /** * If this flag is true, the Boundary Determination Rule will * used when deciding whether nodes are in the boundary or not */ bool useBoundaryDeterminationRule; const algorithm::BoundaryNodeRule& boundaryNodeRule; /** * the index of this geometry as an argument to a spatial function * (used for labelling) */ int argIndex; /// Cache for fast responses to getBoundaryPoints std::auto_ptr< geom::CoordinateSequence > boundaryPoints; std::auto_ptr< std::vector > boundaryNodes; bool hasTooFewPointsVar; geom::Coordinate invalidPoint; /// Allocates a new EdgeSetIntersector. Remember to delete it! index::EdgeSetIntersector* createEdgeSetIntersector(); void add(const geom::Geometry *g); // throw(UnsupportedOperationException); void addCollection(const geom::GeometryCollection *gc); void addPoint(const geom::Point *p); void addPolygonRing(const geom::LinearRing *lr, int cwLeft, int cwRight); void addPolygon(const geom::Polygon *p); void addLineString(const geom::LineString *line); void insertPoint(int argIndex, const geom::Coordinate& coord, int onLocation); /** \brief * Adds candidate boundary points using the current * algorithm::BoundaryNodeRule. * * This is used to add the boundary * points of dim-1 geometries (Curves/MultiCurves). */ void insertBoundaryPoint(int argIndex, const geom::Coordinate& coord); void addSelfIntersectionNodes(int argIndex); /** \brief * Add a node for a self-intersection. * * If the node is a potential boundary node (e.g. came from an edge * which is a boundary) then insert it as a potential boundary node. * Otherwise, just add it as a regular node. */ void addSelfIntersectionNode(int argIndex, const geom::Coordinate& coord, int loc); // Declare type as noncopyable GeometryGraph(const GeometryGraph& other); GeometryGraph& operator=(const GeometryGraph& rhs); public: static bool isInBoundary(int boundaryCount); static int determineBoundary(int boundaryCount); static int determineBoundary( const algorithm::BoundaryNodeRule& boundaryNodeRule, int boundaryCount); GeometryGraph(); GeometryGraph(int newArgIndex, const geom::Geometry *newParentGeom); GeometryGraph(int newArgIndex, const geom::Geometry *newParentGeom, const algorithm::BoundaryNodeRule& boundaryNodeRule); virtual ~GeometryGraph(); const geom::Geometry* getGeometry(); /// Returned object is owned by this GeometryGraph std::vector* getBoundaryNodes(); void getBoundaryNodes(std::vector&bdyNodes); /// Returned object is owned by this GeometryGraph geom::CoordinateSequence* getBoundaryPoints(); Edge* findEdge(const geom::LineString *line); void computeSplitEdges(std::vector *edgelist); void addEdge(Edge *e); void addPoint(geom::Coordinate& pt); /** * \brief * Compute self-nodes, taking advantage of the Geometry type to * minimize the number of intersection tests. (E.g. rings are * not tested for self-intersection, since * they are assumed to be valid). * * @param li the LineIntersector to use * * @param computeRingSelfNodes if , intersection checks are * optimized to not test rings for self-intersection * * @return the SegmentIntersector used, containing information about * the intersections found */ index::SegmentIntersector* computeSelfNodes( algorithm::LineIntersector *li, bool computeRingSelfNodes); // Quick inline calling the function above, the above should probably // be deprecated. index::SegmentIntersector* computeSelfNodes( algorithm::LineIntersector& li, bool computeRingSelfNodes); index::SegmentIntersector* computeEdgeIntersections(GeometryGraph *g, algorithm::LineIntersector *li, bool includeProper); std::vector *getEdges(); bool hasTooFewPoints(); const geom::Coordinate& getInvalidPoint(); const algorithm::BoundaryNodeRule& getBoundaryNodeRule() const { return boundaryNodeRule; } }; } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef GEOS_INLINE # include "geos/geomgraph/GeometryGraph.inl" #endif #endif // ifndef GEOS_GEOMGRAPH_GEOMETRYGRAPH_H geos-3.4.2/include/geos/geomgraph/GeometryGraph.inl0000644000175000017500000000266012206417150022111 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/GeometryGraph.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_GEOMETRYGRAPH_INL #define GEOS_GEOMGRAPH_GEOMETRYGRAPH_INL #include namespace geos { namespace geomgraph { // geos::geomgraph INLINE index::SegmentIntersector* GeometryGraph::computeSelfNodes( algorithm::LineIntersector& li, bool computeRingSelfNodes) { return computeSelfNodes(&li, computeRingSelfNodes); } INLINE void GeometryGraph::getBoundaryNodes(std::vector&bdyNodes) { nodes->getBoundaryNodes(argIndex, bdyNodes); } INLINE const geom::Geometry* GeometryGraph::getGeometry() { return parentGeom; } INLINE GeometryGraph::~GeometryGraph() { } } // namespace geos::geomgraph } // namespace geos #endif // GEOS_GEOMGRAPH_GEOMETRYGRAPH_INL geos-3.4.2/include/geos/geomgraph/GraphComponent.h0000644000175000017500000000441612206417150021726 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/GraphComponent.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_GRAPHCOMPONENT_H #define GEOS_GEOMGRAPH_GRAPHCOMPONENT_H #include #include #include // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; } } namespace geos { namespace geomgraph { // geos.geomgraph /** \brief * A GraphComponent is the parent class for the objects' * that form a graph. * * Each GraphComponent can carry a Label. */ class GEOS_DLL GraphComponent { public: GraphComponent(); /* * GraphComponent copies the given Label. */ GraphComponent(const Label& newLabel); virtual ~GraphComponent(); Label& getLabel() { return label; } const Label& getLabel() const { return label; } void setLabel(const Label& newLabel) { label = newLabel; } virtual void setInResult(bool isInResult) { isInResultVar=isInResult; } virtual bool isInResult() const { return isInResultVar; } virtual void setCovered(bool isCovered); virtual bool isCovered() const { return isCoveredVar; } virtual bool isCoveredSet() const { return isCoveredSetVar; } virtual bool isVisited() const { return isVisitedVar; } virtual void setVisited(bool isVisited) { isVisitedVar = isVisited; } virtual bool isIsolated() const=0; virtual void updateIM(geom::IntersectionMatrix& im); protected: Label label; virtual void computeIM(geom::IntersectionMatrix& im)=0; private: bool isInResultVar; bool isCoveredVar; bool isCoveredSetVar; bool isVisitedVar; }; } // namespace geos.geomgraph } // namespace geos #endif // ifndef GEOS_GEOMGRAPH_GRAPHCOMPONENT_H geos-3.4.2/include/geos/geomgraph/Label.h0000644000175000017500000001130612206417150020015 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Label.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_LABEL_H #define GEOS_GEOMGRAPH_LABEL_H #include #include #include #include // for operator<< namespace geos { namespace geomgraph { // geos.geomgraph /** \brief * A Label indicates the topological relationship of a component * of a topology graph to a given Geometry. * This class supports labels for relationships to two Geometrys, * which is sufficient for algorithms for binary operations. * * Topology graphs support the concept of labeling nodes and edges in the graph. * The label of a node or edge specifies its topological relationship to one or * more geometries. (In fact, since JTS operations have only two arguments labels * are required for only two geometries). A label for a node or edge has one or * two elements, depending on whether the node or edge occurs in one or both of the * input Geometrys. Elements contain attributes which categorize the * topological location of the node or edge relative to the parent * Geometry; that is, whether the node or edge is in the interior, * boundary or exterior of the Geometry. Attributes have a value * from the set {Interior, Boundary, Exterior}. In a node each * element has a single attribute <On>. For an edge each element has a * triplet of attributes <Left, On, Right>. * * It is up to the client code to associate the 0 and 1 TopologyLocations * with specific geometries. * */ class GEOS_DLL Label { public: friend std::ostream& operator<< (std::ostream&, const Label&); /** \brief * Converts a Label to a Line label * (that is, one with no side Locations) * */ static Label toLineLabel(const Label& label); /** \brief * Construct a Label with a single location for both Geometries. */ Label(int onLoc); /** \brief * Construct a Label with the location specified * for the given Geometry. * * Other geometry location will be set to * Location::UNDEF. */ Label(int geomIndex, int onLoc); /** \brief * Construct a Label with On, Left and Right locations for both Geometries. * * Initialize the locations for both Geometries to the given values. */ Label(int onLoc, int leftLoc, int rightLoc); /// Copy ctor Label(const Label &l); Label& operator= (const Label& l); /** \brief * Initialize both locations to Location::UNDEF * * isNull() should return true after this kind of construction */ Label(); /** \brief * Construct a Label with On, Left and Right locations for the * given Geometries. * Initialize the locations for the other Geometry to * Location::UNDEF */ Label(int geomIndex, int onLoc, int leftLoc, int rightLoc); void flip(); int getLocation(int geomIndex, int posIndex) const; int getLocation(int geomIndex) const; void setLocation(int geomIndex, int posIndex, int location); void setLocation(int geomIndex, int location); void setAllLocations(int geomIndex, int location); void setAllLocationsIfNull(int geomIndex, int location); void setAllLocationsIfNull(int location); /** \brief * Merge this label with another one. * * Merging updates any null attributes of this label with the attributes * from lbl */ void merge(const Label &lbl); int getGeometryCount() const; bool isNull() const; bool isNull(int geomIndex) const; bool isAnyNull(int geomIndex) const; bool isArea() const; bool isArea(int geomIndex) const; bool isLine(int geomIndex) const; bool isEqualOnSide(const Label &lbl, int side) const; bool allPositionsEqual(int geomIndex, int loc) const; /** \brief * Converts one GeometryLocation to a Line location */ void toLine(int geomIndex); std::string toString() const; private: TopologyLocation elt[2]; }; std::ostream& operator<< (std::ostream&, const Label&); } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/Label.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_LABEL_H geos-3.4.2/include/geos/geomgraph/Makefile.am0000644000175000017500000000115212206417150020657 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = index #EXTRA_DIST = geosdir = $(includedir)/geos/geomgraph geos_HEADERS = \ Depth.h \ DirectedEdge.h \ DirectedEdge.inl \ DirectedEdgeStar.h \ EdgeEnd.h \ EdgeEndStar.h \ Edge.h \ EdgeIntersection.h \ EdgeIntersectionList.h \ EdgeList.h \ EdgeNodingValidator.h \ EdgeRing.h \ GeometryGraph.h \ GeometryGraph.inl \ GraphComponent.h \ Label.h \ NodeFactory.h \ Node.h \ NodeMap.h \ PlanarGraph.h \ Position.h \ Quadrant.h \ TopologyLocation.h geos-3.4.2/include/geos/geomgraph/Makefile.in0000644000175000017500000005163712206417161020707 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/geomgraph DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = index #EXTRA_DIST = geosdir = $(includedir)/geos/geomgraph geos_HEADERS = \ Depth.h \ DirectedEdge.h \ DirectedEdge.inl \ DirectedEdgeStar.h \ EdgeEnd.h \ EdgeEndStar.h \ Edge.h \ EdgeIntersection.h \ EdgeIntersectionList.h \ EdgeList.h \ EdgeNodingValidator.h \ EdgeRing.h \ GeometryGraph.h \ GeometryGraph.inl \ GraphComponent.h \ Label.h \ NodeFactory.h \ Node.h \ NodeMap.h \ PlanarGraph.h \ Position.h \ Quadrant.h \ TopologyLocation.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/geomgraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/geomgraph/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/geomgraph/Node.h0000644000175000017500000001115512206417150017665 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Node.java r411 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_NODE_H #define GEOS_GEOMGRAPH_NODE_H #include #include // for inheritance #include // for member #ifndef NDEBUG #include // for testInvariant #include // for testInvariant #endif // ndef NDEBUG #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; } namespace geomgraph { class Node; class EdgeEndStar; class EdgeEnd; class Label; class NodeFactory; } } namespace geos { namespace geomgraph { // geos.geomgraph /** The node component of a geometry graph */ class GEOS_DLL Node: public GraphComponent { using GraphComponent::setLabel; public: friend std::ostream& operator<< (std::ostream& os, const Node& node); Node(const geom::Coordinate& newCoord, EdgeEndStar* newEdges); virtual ~Node(); virtual const geom::Coordinate& getCoordinate() const; virtual EdgeEndStar* getEdges(); virtual bool isIsolated() const; /** \brief * Add the edge to the list of edges at this node */ virtual void add(EdgeEnd *e); virtual void mergeLabel(const Node& n); /** \brief * To merge labels for two nodes, * the merged location for each LabelElement is computed. * * The location for the corresponding node LabelElement is set * to the result, as long as the location is non-null. */ virtual void mergeLabel(const Label& label2); virtual void setLabel(int argIndex, int onLocation); /** \brief * Updates the label of a node to BOUNDARY, * obeying the mod-2 boundaryDetermination rule. */ virtual void setLabelBoundary(int argIndex); /** * The location for a given eltIndex for a node will be one * of { null, INTERIOR, BOUNDARY }. * A node may be on both the boundary and the interior of a geometry; * in this case, the rule is that the node is considered to be * in the boundary. * The merged location is the maximum of the two input values. */ virtual int computeMergedLocation(const Label& label2, int eltIndex); virtual std::string print(); virtual const std::vector &getZ() const; virtual void addZ(double); /** \brief * Tests whether any incident edge is flagged as * being in the result. * * This test can be used to determine if the node is in the result, * since if any incident edge is in the result, the node must be in * the result as well. * * @return true if any indicident edge in the in * the result */ virtual bool isIncidentEdgeInResult() const; protected: void testInvariant() const; geom::Coordinate coord; EdgeEndStar* edges; /** \brief * Basic nodes do not compute IMs */ virtual void computeIM(geom::IntersectionMatrix& /*im*/) {} private: std::vector zvals; double ztot; }; std::ostream& operator<< (std::ostream& os, const Node& node); inline void Node::testInvariant() const { #ifndef NDEBUG if (edges) { // Each EdgeEnd in the star has this Node's // coordinate as first coordinate for (EdgeEndStar::iterator it=edges->begin(), itEnd=edges->end(); it != itEnd; it++) { EdgeEnd* e=*it; assert(e); assert(e->getCoordinate().equals2D(coord)); } } #if 0 // We can't rely on numerical stability with FP computations // ztot is the sum of doubnle sin zvals vector double ztot_check=0.0; for (std::vector::const_iterator i = zvals.begin(), e = zvals.end(); i != e; i++) { ztot_check += *i; } assert(ztot_check == ztot); #endif // 0 #endif } } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/Node.inl" //#endif #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_NODE_H geos-3.4.2/include/geos/geomgraph/NodeFactory.h0000644000175000017500000000241112206417150021210 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/NodeFactory.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_NODEFACTORY_H #define GEOS_GEOMGRAPH_NODEFACTORY_H #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class Node; } } namespace geos { namespace geomgraph { // geos.geomgraph class GEOS_DLL NodeFactory { public: virtual Node* createNode(const geom::Coordinate &coord) const; static const NodeFactory &instance(); virtual ~NodeFactory() {} protected: NodeFactory() {} }; } // namespace geos.geomgraph } // namespace geos #endif // ifndef GEOS_GEOMGRAPH_NODEFACTORY_H geos-3.4.2/include/geos/geomgraph/NodeMap.h0000644000175000017500000000544712206417150020332 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/NodeMap.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_NODEMAP_H #define GEOS_GEOMGRAPH_NODEMAP_H #include #include #include #include #include // for CoordinateLessThen #include // for testInvariant #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geomgraph { class Node; class EdgeEnd; class NodeFactory; } } namespace geos { namespace geomgraph { // geos.geomgraph class GEOS_DLL NodeMap{ public: typedef std::map container; typedef container::iterator iterator; typedef container::const_iterator const_iterator; typedef std::pair pair; container nodeMap; const NodeFactory &nodeFact; /// \brief /// NodeMap will keep a reference to the NodeFactory, /// keep it alive for the whole NodeMap lifetime NodeMap(const NodeFactory &newNodeFact); virtual ~NodeMap(); Node* addNode(const geom::Coordinate& coord); Node* addNode(Node *n); void add(EdgeEnd *e); Node *find(const geom::Coordinate& coord) const; const_iterator begin() const { return nodeMap.begin(); } const_iterator end() const { return nodeMap.end(); } iterator begin() { return nodeMap.begin(); } iterator end() { return nodeMap.end(); } void getBoundaryNodes(int geomIndex, std::vector&bdyNodes) const; std::string print() const; void testInvariant() { #ifndef NDEBUG // Each Coordinate key is a pointer inside the Node value for (iterator it=begin(), itEnd=end(); it != itEnd; ++it) { pair p = *it; geomgraph::Node* n = p.second; geom::Coordinate* c = const_cast( &(n->getCoordinate()) ); assert(p.first == c); } #endif } private: // Declare type as noncopyable NodeMap(const NodeMap& other); NodeMap& operator=(const NodeMap& rhs); }; } // namespace geos.geomgraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ifndef GEOS_GEOMGRAPH_NODEMAP_H geos-3.4.2/include/geos/geomgraph/PlanarGraph.h0000644000175000017500000001240612206417150021177 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/PlanarGraph.java r428 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_PLANARGRAPH_H #define GEOS_GEOMGRAPH_PLANARGRAPH_H #include #include #include #include #include #include #include // for typedefs #include // for inlines #include // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class Edge; class Node; class EdgeEnd; class NodeFactory; } } namespace geos { namespace geomgraph { // geos.geomgraph /** * \brief * Represents a directed graph which is embeddable in a planar surface. * * The computation of the IntersectionMatrix relies on the use of a structure * called a "topology graph". The topology graph contains nodes and edges * corresponding to the nodes and line segments of a Geometry. Each * node and edge in the graph is labeled with its topological location * relative to the source geometry. * * Note that there is no requirement that points of self-intersection * be a vertex. * Thus to obtain a correct topology graph, Geometry objects must be * self-noded before constructing their graphs. * * Two fundamental operations are supported by topology graphs: * * - Computing the intersections between all the edges and nodes of * a single graph * - Computing the intersections between the edges and nodes of two * different graphs * */ class GEOS_DLL PlanarGraph { public: /** \brief * For nodes in the collection (first..last), * link the DirectedEdges at the node that are in the result. * * This allows clients to link only a subset of nodes in the graph, * for efficiency (because they know that only a subset is of * interest). */ template static void linkResultDirectedEdges(It first, It last) // throw(TopologyException); { for ( ; first!=last; ++first ) { Node *node=*first; assert(node); EdgeEndStar* ees = node->getEdges(); assert(ees); DirectedEdgeStar* des = dynamic_cast(ees); assert(des); // this might throw an exception des->linkResultDirectedEdges(); } } PlanarGraph(const NodeFactory &nodeFact); PlanarGraph(); virtual ~PlanarGraph(); virtual std::vector::iterator getEdgeIterator(); virtual std::vector* getEdgeEnds(); virtual bool isBoundaryNode(int geomIndex, const geom::Coordinate& coord); virtual void add(EdgeEnd *e); virtual NodeMap::iterator getNodeIterator(); virtual void getNodes(std::vector&); virtual Node* addNode(Node *node); virtual Node* addNode(const geom::Coordinate& coord); /** \brief * @return the node if found; null otherwise */ virtual Node* find(geom::Coordinate& coord); /** \brief * Add a set of edges to the graph. For each edge two DirectedEdges * will be created. DirectedEdges are NOT linked by this method. */ virtual void addEdges(const std::vector &edgesToAdd); virtual void linkResultDirectedEdges(); virtual void linkAllDirectedEdges(); /** \brief * Returns the EdgeEnd which has edge e as its base edge * (MD 18 Feb 2002 - this should return a pair of edges) * * @return the edge, if found * null if the edge was not found */ virtual EdgeEnd* findEdgeEnd(Edge *e); /** \brief * Returns the edge whose first two coordinates are p0 and p1 * * @return the edge, if found * null if the edge was not found */ virtual Edge* findEdge(const geom::Coordinate& p0, const geom::Coordinate& p1); /** \brief * Returns the edge which starts at p0 and whose first segment is * parallel to p1 * * @return the edge, if found * null if the edge was not found */ virtual Edge* findEdgeInSameDirection(const geom::Coordinate& p0, const geom::Coordinate& p1); virtual std::string printEdges(); virtual NodeMap* getNodeMap(); protected: std::vector *edges; NodeMap *nodes; std::vector *edgeEndList; virtual void insertEdge(Edge *e); private: /** \brief * The coordinate pairs match if they define line segments * lying in the same direction. * * E.g. the segments are parallel and in the same quadrant * (as opposed to parallel and opposite!). */ bool matchInSameDirection(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& ep0, const geom::Coordinate& ep1); }; } // namespace geos.geomgraph } // namespace geos //#ifdef GEOS_INLINE //# include "geos/geomgraph/PlanarGraph.inl" //#endif #endif // ifndef GEOS_GEOMGRAPH_PLANARGRAPH_H geos-3.4.2/include/geos/geomgraph/Position.h0000644000175000017500000000273612206417150020611 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Position.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_POSITION_H #define GEOS_GEOMGRAPH_POSITION_H #include #include #include #include #include namespace geos { namespace geomgraph { // geos.geomgraph class GEOS_DLL Position { public: enum { /* * An indicator that a Location is on * a GraphComponent */ ON=0, /* * An indicator that a Location is to the * left of a GraphComponent */ LEFT, /* * An indicator that a Location is to the * right of a GraphComponent */ RIGHT }; /** * Returns LEFT if the position is RIGHT, RIGHT if * the position is LEFT, or the position otherwise. */ static int opposite(int position); }; } // namespace geos.geomgraph } // namespace geos #endif // ifndef GEOS_GEOMGRAPH_POSITION_H geos-3.4.2/include/geos/geomgraph/Quadrant.h0000644000175000017500000000465512206417150020566 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Quadrant.java rev. 1.8 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_QUADRANT_H #define GEOS_GEOMGRAPH_QUADRANT_H #include #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace geomgraph { // geos.geomgraph /** * Utility functions for working with quadrants, which are numbered as follows: *
 * 1 | 0
 * --+--
 * 2 | 3
 * 
 *
 */
class GEOS_DLL Quadrant {

public:

        static const int NE = 0;
        static const int NW = 1;
        static const int SW = 2;
        static const int SE = 3;

	/**
	 * Returns the quadrant of a directed line segment
	 * (specified as x and y displacements, which cannot both be 0).
	 *
	 * @throws IllegalArgumentException if the displacements are both 0
	 */
	static int quadrant(double dx, double dy);

	/**
	 * Returns the quadrant of a directed line segment from p0 to p1.
	 *
	 * @throws IllegalArgumentException if the points are equal
	 */
	static int quadrant(const geom::Coordinate& p0,
	                    const geom::Coordinate& p1);

	/**
	 * Returns true if the quadrants are 1 and 3, or 2 and 4
	 */
	static bool isOpposite(int quad1, int quad2);

	/* 
	 * Returns the right-hand quadrant of the halfplane defined by
	 * the two quadrants,
	 * or -1 if the quadrants are opposite, or the quadrant if they
	 * are identical.
	 */
	static int commonHalfPlane(int quad1, int quad2);

	/**
	 * Returns whether the given quadrant lies within the given halfplane
	 * (specified by its right-hand quadrant).
	 */
	static bool isInHalfPlane(int quad, int halfPlane);

	/**
	 * Returns true if the given quadrant is 0 or 1.
	 */
	static bool isNorthern(int quad);
};


} // namespace geos.geomgraph
} // namespace geos

#endif // ifndef GEOS_GEOMGRAPH_QUADRANT_H

geos-3.4.2/include/geos/geomgraph/TopologyLocation.h0000644000175000017500000000723712206417150022313 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************
 *
 * Last port: geomgraph/TopologyLocation.java r428 (JTS-1.12+)
 *
 **********************************************************************/


#ifndef GEOS_GEOMGRAPH_TOPOLOGYLOCATION_H
#define GEOS_GEOMGRAPH_TOPOLOGYLOCATION_H

#include 
#include 

#include 
#include 

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
#endif

namespace geos {
namespace geomgraph { // geos.geomgraph

/** \brief
 * A TopologyLocation is the labelling of a
 * GraphComponent's topological relationship to a single Geometry.
 * 
 * If the parent component is an area edge, each side and the edge itself
 * have a topological location.  These locations are named
 * 
 *  - ON: on the edge
 *  - LEFT: left-hand side of the edge
 *  - RIGHT: right-hand side
 * 
 * If the parent component is a line edge or node, there is a single
 * topological relationship attribute, ON.
 *
 * The possible values of a topological location are
 * {Location::UNDEF, Location::EXTERIOR, Location::BOUNDARY, Location::INTERIOR}
 *
 * The labelling is stored in an array location[j] where
 * where j has the values ON, LEFT, RIGHT
 */
class GEOS_DLL TopologyLocation {

public:

	friend std::ostream& operator<< (std::ostream&, const TopologyLocation&);

	TopologyLocation();

	~TopologyLocation();

	TopologyLocation(const std::vector &newLocation);

	/** \brief
	 * Constructs a TopologyLocation specifying how points on, to the
	 * left of, and to the right of some GraphComponent relate to some
	 * Geometry.
	 *
	 * Possible values for the
	 * parameters are Location::UNDEF, Location::EXTERIOR, Location::BOUNDARY, 
	 * and Location::INTERIOR.
	 *
	 * @see Location
	 */
	TopologyLocation(int on, int left, int right);

	TopologyLocation(int on);

	TopologyLocation(const TopologyLocation &gl);

	TopologyLocation& operator= (const TopologyLocation &gl);

	int get(std::size_t posIndex) const;

	/**
	 * @return true if all locations are Location::UNDEF
	 */
	bool isNull() const;

	/**
	 * @return true if any locations is Location::UNDEF
	 */
	bool isAnyNull() const;

	bool isEqualOnSide(const TopologyLocation &le, int locIndex) const;

	bool isArea() const;

	bool isLine() const;

	void flip();

	void setAllLocations(int locValue);

	void setAllLocationsIfNull(int locValue);

	void setLocation(std::size_t locIndex, int locValue);

	void setLocation(int locValue);

	/// Warning: returns reference to owned memory
	const std::vector &getLocations() const;

	void setLocations(int on, int left, int right);

	bool allPositionsEqual(int loc) const;

	/** \brief
	 * merge updates only the UNDEF attributes of this object
	 * with the attributes of another.
	 */
	void merge(const TopologyLocation &gl);

	std::string toString() const;

private:

	std::vector location;
};

std::ostream& operator<< (std::ostream&, const TopologyLocation&);

} // namespace geos.geomgraph
} // namespace geos

//#ifdef GEOS_INLINE
//# include "geos/geomgraph/TopologyLocation.inl"
//#endif

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif // ifndef GEOS_GEOMGRAPH_TOPOLOGYLOCATION_H

geos-3.4.2/include/geos/geomgraph/index/0000755000175000017500000000000012206417225017736 5ustar  frankiefrankiegeos-3.4.2/include/geos/geomgraph/index/EdgeSetIntersector.h0000644000175000017500000000341412206417150023650 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_EDGESETINTERSECTOR_H
#define GEOS_GEOMGRAPH_INDEX_EDGESETINTERSECTOR_H

#include 
#include 

// Forward declarations
namespace geos {
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

/* 
 * This is derived from a Java interface.
 */
class GEOS_DLL EdgeSetIntersector {
public:
	/**
	 * Computes all self-intersections between edges in a set of edges,
	 * allowing client to choose whether self-intersections are computed.
	 *
	 * @param edges a list of edges to test for intersections
	 * @param si the SegmentIntersector to use
	 * @param testAllSegments true if self-intersections are to be tested as well
	 */
	virtual void computeIntersections(std::vector *edges,
			SegmentIntersector *si, bool testAllSegments)=0;

	/**
	 * Computes all mutual intersections between two sets of edges
	 */
	virtual void computeIntersections(std::vector *edges0,
			std::vector *edges1,
			SegmentIntersector *si)=0;

	virtual ~EdgeSetIntersector(){}
};


} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif

geos-3.4.2/include/geos/geomgraph/index/Makefile.am0000644000175000017500000000072712206417150021775 0ustar  frankiefrankie#
# This file is part of project GEOS (http://trac.osgeo.org/geos/) 
#
#SUBDIRS = 

#EXTRA_DIST = 

geosdir = $(includedir)/geos/geomgraph/index

geos_HEADERS = \
    EdgeSetIntersector.h \
    MonotoneChain.h \
    MonotoneChainEdge.h \
    MonotoneChainIndexer.h \
    SegmentIntersector.h \
    SimpleEdgeSetIntersector.h \
    SimpleMCSweepLineIntersector.h \
    SimpleSweepLineIntersector.h \
    SweepLineEvent.h \
    SweepLineEventObj.h \
    SweepLineSegment.h
geos-3.4.2/include/geos/geomgraph/index/Makefile.in0000644000175000017500000003671012206417161022011 0ustar  frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

#
# This file is part of project GEOS (http://trac.osgeo.org/geos/) 
#
#SUBDIRS = 

#EXTRA_DIST = 

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = include/geos/geomgraph/index
DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \
	$(top_srcdir)/macros/ac_python_devel.m4 \
	$(top_srcdir)/macros/libtool.m4 \
	$(top_srcdir)/macros/ltoptions.m4 \
	$(top_srcdir)/macros/ltsugar.m4 \
	$(top_srcdir)/macros/ltversion.m4 \
	$(top_srcdir)/macros/lt~obsolete.m4 \
	$(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \
	$(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/config.h \
	$(top_builddir)/include/geos/platform.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(geosdir)"
HEADERS = $(geos_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AM_CXXFLAGS = @AM_CXXFLAGS@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@
CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@
CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@
CAPI_VERSION = @CAPI_VERSION@
CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@
CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@
CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INLINE_FLAGS = @INLINE_FLAGS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTERFACE_AGE = @INTERFACE_AGE@
INTERFACE_CURRENT = @INTERFACE_CURRENT@
INTERFACE_REVISION = @INTERFACE_REVISION@
JTS_PORT = @JTS_PORT@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PHP = @PHP@
PHPUNIT = @PHPUNIT@
PHP_CONFIG = @PHP_CONFIG@
PYTHON = @PYTHON@
PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@
PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_SITE_PKG = @PYTHON_SITE_PKG@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
RUBY_BIN_DIR = @RUBY_BIN_DIR@
RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@
RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@
RUBY_LIB_DIR = @RUBY_LIB_DIR@
RUBY_SHARED_LIB = @RUBY_SHARED_LIB@
RUBY_SITE_ARCH = @RUBY_SITE_ARCH@
RUBY_SO_NAME = @RUBY_SO_NAME@
RUBY_VERSION = @RUBY_VERSION@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SWIG = @SWIG@
SWIG_LIB = @SWIG_LIB@
SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@
SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@
VERSION = @VERSION@
VERSION_MAJOR = @VERSION_MAJOR@
VERSION_MINOR = @VERSION_MINOR@
VERSION_PATCH = @VERSION_PATCH@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
pkgpyexecdir = @pkgpyexecdir@
pkgpythondir = @pkgpythondir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pyexecdir = @pyexecdir@
pythondir = @pythondir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
geosdir = $(includedir)/geos/geomgraph/index
geos_HEADERS = \
    EdgeSetIntersector.h \
    MonotoneChain.h \
    MonotoneChainEdge.h \
    MonotoneChainIndexer.h \
    SegmentIntersector.h \
    SimpleEdgeSetIntersector.h \
    SimpleMCSweepLineIntersector.h \
    SimpleSweepLineIntersector.h \
    SweepLineEvent.h \
    SweepLineEventObj.h \
    SweepLineSegment.h

all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/geomgraph/index/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu include/geos/geomgraph/index/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
install-geosHEADERS: $(geos_HEADERS)
	@$(NORMAL_INSTALL)
	test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)"
	@list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \
	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \
	done

uninstall-geosHEADERS:
	@$(NORMAL_UNINSTALL)
	@list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \
	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(geosdir)" && rm -f $$files

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile $(HEADERS)
installdirs:
	for dir in "$(DESTDIR)$(geosdir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am: install-geosHEADERS

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-geosHEADERS

.MAKE: install-am install-strip

.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
	clean-libtool ctags distclean distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-geosHEADERS install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-ps install-ps-am \
	install-strip installcheck installcheck-am installdirs \
	maintainer-clean maintainer-clean-generic mostlyclean \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags uninstall uninstall-am uninstall-geosHEADERS


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
geos-3.4.2/include/geos/geomgraph/index/MonotoneChain.h0000644000175000017500000000326112206417150022647 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************
 *
 * Last port: geomgraph/index/MonotoneChain.java rev. 1.3 (JTS-1.7)
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_MONOTONECHAIN_H
#define GEOS_GEOMGRAPH_INDEX_MONOTONECHAIN_H


#include 
#include  // for inheritance
#include  // for inline

// Forward declarations
namespace geos {
	namespace geomgraph {
		namespace index {
			class SegmentIntersector;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

/**
 * A chain in a MonotoneChainEdge
 */
class GEOS_DLL MonotoneChain: public SweepLineEventOBJ {
private:
	MonotoneChainEdge *mce;
	int chainIndex;

public:

	MonotoneChain(MonotoneChainEdge *newMce, int newChainIndex):
		mce(newMce),
		chainIndex(newChainIndex)
	{}

	~MonotoneChain() {}

	void computeIntersections(MonotoneChain *mc,SegmentIntersector *si) {
		mce->computeIntersectsForChain(chainIndex,*(mc->mce),mc->chainIndex,*si);
	}
};




} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif

geos-3.4.2/include/geos/geomgraph/index/MonotoneChainEdge.h0000644000175000017500000000435612206417150023442 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_MONOTONECHAINEDGE_H
#define GEOS_GEOMGRAPH_INDEX_MONOTONECHAINEDGE_H

#include 
#include  // for composition

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
#endif

// Forward declarations
namespace geos {
	namespace geom {
		class CoordinateSequence;
	}
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

class GEOS_DLL MonotoneChainEdge {
public:
	//MonotoneChainEdge();
	~MonotoneChainEdge();
	MonotoneChainEdge(Edge *newE);
	const geom::CoordinateSequence* getCoordinates();
	std::vector& getStartIndexes();
	double getMinX(int chainIndex);
	double getMaxX(int chainIndex);

	void computeIntersects(const MonotoneChainEdge &mce,
		SegmentIntersector &si);

	void computeIntersectsForChain(int chainIndex0,
		const MonotoneChainEdge &mce, int chainIndex1,
		SegmentIntersector &si);

protected:
	Edge *e;
	const geom::CoordinateSequence* pts; // cache a reference to the coord array, for efficiency
	// the lists of start/end indexes of the monotone chains.
	// Includes the end point of the edge as a sentinel
	std::vector startIndex;
	// these envelopes are created once and reused
	geom::Envelope env1;
	geom::Envelope env2;
private:
	void computeIntersectsForChain(int start0, int end0,
		const MonotoneChainEdge &mce,
		int start1, int end1,
		SegmentIntersector &ei);
};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif

geos-3.4.2/include/geos/geomgraph/index/MonotoneChainIndexer.h0000644000175000017500000000236312206417150024170 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_MONOTONECHAININDEXER_H
#define GEOS_GEOMGRAPH_INDEX_MONOTONECHAININDEXER_H

#include 
#include 

// Forward declarations
namespace geos {
	namespace geom {
		class CoordinateSequence;
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index


class GEOS_DLL MonotoneChainIndexer{

public:

	MonotoneChainIndexer(){}

	void getChainStartIndices(const geom::CoordinateSequence*, std::vector&);

private:

	int findChainEnd(const geom::CoordinateSequence* pts, int start);

};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif // GEOS_GEOMGRAPH_INDEX_MONOTONECHAININDEXER_H

geos-3.4.2/include/geos/geomgraph/index/SegmentIntersector.h0000644000175000017500000000574712206417150023745 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SEGMENTINTERSECTOR_H
#define GEOS_GEOMGRAPH_INDEX_SEGMENTINTERSECTOR_H

#include 
#include 

#include  // for composition

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
#endif

// Forward declarations
namespace geos {
	namespace algorithm {
		class LineIntersector;
	}
	namespace geomgraph {
		class Node;
		class Edge;
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index


class GEOS_DLL SegmentIntersector{

private:

	/**
	 * These variables keep track of what types of intersections were
	 * found during ALL edges that have been intersected.
	 */
	bool hasIntersectionVar;

	bool hasProper;

	bool hasProperInterior;

	// the proper intersection point found
	geom::Coordinate properIntersectionPoint;

	algorithm::LineIntersector *li;

	bool includeProper;

	bool recordIsolated;

	//bool isSelfIntersection;

	//bool intersectionFound;

	int numIntersections;

	/// Elements are externally owned
	std::vector*> bdyNodes;

	bool isTrivialIntersection(Edge *e0,int segIndex0,Edge *e1, int segIndex1);

	bool isBoundaryPoint(algorithm::LineIntersector *li,
			std::vector*>& tstBdyNodes);

	bool isBoundaryPoint(algorithm::LineIntersector *li,
			std::vector *tstBdyNodes);

public:

	static bool isAdjacentSegments(int i1,int i2);

	// testing only
	int numTests;

	//SegmentIntersector();

	virtual ~SegmentIntersector() {}

	SegmentIntersector(algorithm::LineIntersector *newLi,
			bool newIncludeProper, bool newRecordIsolated)
		:
		hasIntersectionVar(false),
		hasProper(false),
		hasProperInterior(false),
		li(newLi),
		includeProper(newIncludeProper),
		recordIsolated(newRecordIsolated),
		numIntersections(0),
		bdyNodes(2),
		numTests(0)
	{}

	/// \brief
	/// Parameters are externally owned.
	/// Make sure they live for the whole lifetime of this object
	void setBoundaryNodes(std::vector *bdyNodes0,
			std::vector *bdyNodes1);

	geom::Coordinate& getProperIntersectionPoint();

	bool hasIntersection();

	bool hasProperIntersection();

	bool hasProperInteriorIntersection();

	void addIntersections(Edge *e0, int segIndex0, Edge *e1, int segIndex1);

};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif

geos-3.4.2/include/geos/geomgraph/index/SimpleEdgeSetIntersector.h0000644000175000017500000000306012206417150025017 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SIMPLEEDGESETINTERSECTOR_H
#define GEOS_GEOMGRAPH_INDEX_SIMPLEEDGESETINTERSECTOR_H

#include 
#include 

#include  // for inheritance

// Forward declarations
namespace geos {
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

class GEOS_DLL SimpleEdgeSetIntersector: public EdgeSetIntersector {

public:

	SimpleEdgeSetIntersector();

	void computeIntersections(std::vector *edges,
			SegmentIntersector *si, bool testAllSegments);

	void computeIntersections(std::vector *edges0,
			std::vector *edges1, SegmentIntersector *si);

private:

	int nOverlaps;

	void computeIntersects(Edge *e0, Edge *e1, SegmentIntersector *si);
};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif // GEOS_GEOMGRAPH_INDEX_SIMPLEEDGESETINTERSECTOR_H

geos-3.4.2/include/geos/geomgraph/index/SimpleMCSweepLineIntersector.h0000644000175000017500000000500412206417150025612 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SIMPLEMCSWEEPLINEINTERSECTOR_H
#define GEOS_GEOMGRAPH_INDEX_SIMPLEMCSWEEPLINEINTERSECTOR_H

#include 
#include 

#include  // for inheritance

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
#endif

// Forward declarations
namespace geos {
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
			class SweepLineEvent;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

/** \brief
 * Finds all intersections in one or two sets of edges,
 * using an x-axis sweepline algorithm in conjunction with Monotone Chains.
 *
 * While still O(n^2) in the worst case, this algorithm
 * drastically improves the average-case time.
 * The use of MonotoneChains as the items in the index
 * seems to offer an improvement in performance over a sweep-line alone.
 */
class GEOS_DLL SimpleMCSweepLineIntersector: public EdgeSetIntersector {

public:

	SimpleMCSweepLineIntersector();

	virtual ~SimpleMCSweepLineIntersector();

	void computeIntersections(std::vector *edges,
			SegmentIntersector *si, bool testAllSegments);

	void computeIntersections(std::vector *edges0,
			std::vector *edges1,
			SegmentIntersector *si);

protected:

	std::vector events;

	// statistics information
	int nOverlaps;

private:
	void add(std::vector *edges);

	void add(std::vector *edges,void* edgeSet);

	void add(Edge *edge,void* edgeSet);

	void prepareEvents();

	void computeIntersections(SegmentIntersector *si);

	void processOverlaps(int start, int end,
			SweepLineEvent *ev0,
			SegmentIntersector *si);
};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif // GEOS_GEOMGRAPH_INDEX_SIMPLEMCSWEEPLINEINTERSECTOR_H

geos-3.4.2/include/geos/geomgraph/index/SimpleSweepLineIntersector.h0000644000175000017500000000452012206417150025374 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SIMPLESWEEPLINEINTERSECTOR_H
#define GEOS_GEOMGRAPH_INDEX_SIMPLESWEEPLINEINTERSECTOR_H

#include 
#include 

#include  // for inheritance

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
#endif

// Forward declarations
namespace geos {
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
			class SweepLineEvent;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

/** \brief
 * Finds all intersections in one or two sets of edges,
 * using a simple x-axis sweepline algorithm.
 *
 * While still O(n^2) in the worst case, this algorithm
 * drastically improves the average-case time.
 */
class GEOS_DLL SimpleSweepLineIntersector: public EdgeSetIntersector {

public:

	SimpleSweepLineIntersector();

	virtual ~SimpleSweepLineIntersector();

	void computeIntersections(std::vector *edges,
			SegmentIntersector *si,
			bool testAllSegments);

	void computeIntersections(std::vector *edges0,
			std::vector *edges1,
			SegmentIntersector *si);

private:

	void add(std::vector *edges);

	std::vector events;

	// statistics information
	int nOverlaps;

	void add(std::vector *edges, void* edgeSet);

	void add(Edge *edge,void* edgeSet);

	void prepareEvents();

	void computeIntersections(SegmentIntersector *si);

	void processOverlaps(int start, int end, SweepLineEvent *ev0,
			SegmentIntersector *si);
};

} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#endif // GEOS_GEOMGRAPH_INDEX_SIMPLESWEEPLINEINTERSECTOR_H

geos-3.4.2/include/geos/geomgraph/index/SweepLineEvent.h0000644000175000017500000000432212206417150023002 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENT_H
#define GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENT_H


#include 
#include 

// Forward declarations
namespace geos {
	namespace geomgraph {
		namespace index {
			class SweepLineEventOBJ;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

//class SweepLineEventLessThen; // needed ??

class GEOS_DLL SweepLineEvent{
friend class SweepLineEventLessThen;

public:

	enum {
		INSERT_EVENT = 1,
		DELETE_EVENT
	};

	SweepLineEvent(void* newEdgeSet, double x,
			SweepLineEvent *newInsertEvent,
			SweepLineEventOBJ *newObj);

	virtual ~SweepLineEvent();

	bool isInsert() { return insertEvent==NULL; }

	bool isDelete() { return insertEvent!=NULL; }

	SweepLineEvent* getInsertEvent() { return insertEvent; }

	int getDeleteEventIndex() { return deleteEventIndex; }

	void setDeleteEventIndex(int newDeleteEventIndex) {
		deleteEventIndex=newDeleteEventIndex;
	}

	SweepLineEventOBJ* getObject() const { return obj; }

	int compareTo(SweepLineEvent *sle);

	std::string print();

	void* edgeSet;    // used for red-blue intersection detection

protected:

	SweepLineEventOBJ* obj;

private:

	double xValue;

	int eventType;

	SweepLineEvent *insertEvent; // null if this is an INSERT_EVENT event

	int deleteEventIndex;
};

class GEOS_DLL SweepLineEventLessThen {
public:
	bool operator()(const SweepLineEvent *f, const SweepLineEvent *s) const
	{
		if (f->xValuexValue) return true;
		if (f->xValue>s->xValue) return false;
		if (f->eventTypeeventType) return true;
		return false;
	}
};



} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif

geos-3.4.2/include/geos/geomgraph/index/SweepLineEventObj.h0000644000175000017500000000211212206417150023430 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENTOBJ_H
#define GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENTOBJ_H

#include 

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

// This is here so that SweepLineEvent constructor
// can use it as argument type. 
// Both  SweepLineSegment and MonotoneChain will
// inherit from it.
class GEOS_DLL SweepLineEventOBJ {
public:
	virtual ~SweepLineEventOBJ(){}
};


} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif

geos-3.4.2/include/geos/geomgraph/index/SweepLineSegment.h0000644000175000017500000000265712206417150023334 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************/

#ifndef GEOS_GEOMGRAPH_INDEX_SWEEPLINESEGMENT_H
#define GEOS_GEOMGRAPH_INDEX_SWEEPLINESEGMENT_H


#include 
#include  // for inheritance

// Forward declarations
namespace geos {
	namespace geom {
		class CoordinateSequence;
	}
	namespace geomgraph {
		class Edge;
		namespace index {
			class SegmentIntersector;
		}
	}
}

namespace geos {
namespace geomgraph { // geos::geomgraph
namespace index { // geos::geomgraph::index

class GEOS_DLL SweepLineSegment: public SweepLineEventOBJ {
public:
	SweepLineSegment(Edge *newEdge, int newPtIndex);
	~SweepLineSegment();
	double getMinX();
	double getMaxX();
	void computeIntersections(SweepLineSegment *ss, SegmentIntersector *si);
protected:
	Edge *edge;
	const geom::CoordinateSequence* pts;
	int ptIndex;
};



} // namespace geos.geomgraph.index
} // namespace geos.geomgraph
} // namespace geos

#endif

geos-3.4.2/include/geos/geomgraph.h0000644000175000017500000000534512206417150017004 0ustar  frankiefrankie/**********************************************************************
 *
 * GEOS - Geometry Engine Open Source
 * http://geos.osgeo.org
 *
 * Copyright (C) 2005-2006 Refractions Research Inc.
 * Copyright (C) 2001-2002 Vivid Solutions Inc.
 *
 * This is free software; you can redistribute and/or modify it under
 * the terms of the GNU Lesser General Public Licence as published
 * by the Free Software Foundation. 
 * See the COPYING file for more information.
 *
 **********************************************************************
 *
 * Try not to include this header directly. It is kept
 * for backward compatibility.
 * Please include geomgraph/classname.h for new code.
 *
 **********************************************************************/


#ifndef GEOS_GEOMGRAPH_H
#define GEOS_GEOMGRAPH_H

namespace geos {

/** \brief
 * Contains classes that implement topology graphs.
 * 
 * The Java Topology Suite (JTS) is a Java API that implements a core
 * set of spatial data operations using an explicit precision model
 * and robust geometric algorithms. JTS is int ended to be used in the
 * development of applications that support the validation, cleaning,
 * integration and querying of spatial datasets.
 *
 * JTS attempts to implement the OpenGIS Simple Features Specification (SFS)
 * as accurately as possible.  In some cases the SFS is unclear or omits a
 * specification; in this case JTS attempts to choose a reasonable and
 * consistent alternative.  Differences from and elaborations of the SFS
 * are documented in this specification.
 * 
 * 

Package Specification

* * * */ namespace geomgraph { // geos.geomgraph } // namespace geos.geomgraph } // namespace geos //#include //#include //#include //#include #include #include //#include //#include #include //#include //#include #include #include //#include #include //#include #include #include //#include //#include //#include #endif // ifndef GEOS_GEOMGRAPH_H geos-3.4.2/include/geos/geomgraphindex.h0000644000175000017500000000231112206417150020022 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_GEOMGRAPH_INDEX_H #define GEOS_GEOMGRAPH_INDEX_H namespace geos { namespace geomgraph { namespace index { } } } #include # include # include # include #include #include #include #include #include #include #endif geos-3.4.2/include/geos/geosAlgorithm.h0000644000175000017500000001057312206417150017636 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * This includes all headers from geos/algorithm. * It is reccommended you avoid to include this file, but rather * you include the specific headers you need. This is to reduce * dependency and thus build times. * We kept this file to provide some degree of backward compatibility. * This is also where Doxygen documentation for the geos::algorithm * namespace resides. * **********************************************************************/ #ifndef GEOS_ALGORITHM_H #define GEOS_ALGORITHM_H //#include //#include //#include //#include //#include //#include //#include //#include //#include #include //#include //#include //#include //#include #include //#include //#include //#include //#include namespace geos { /** \brief * Contains classes and interfaces implementing fundamental computational geometry algorithms. * *

Robustness

* * Geometrical algorithms involve a combination of combinatorial and numerical computation. As with * all numerical computation using finite-precision numbers, the algorithms chosen are susceptible to * problems of robustness. A robustness problem occurs when a numerical calculation produces an * incorrect answer for some inputs due to round-off errors. Robustness problems are especially * serious in geometric computation, since they can result in errors during topology building. *

* There are many approaches to dealing with the problem of robustness in geometrical computation. * Not surprisingly, most robust algorithms are substantially more complex and less performant than * the non-robust versions. Fortunately, JTS is sensitive to robustness problems in only a few key * functions (such as line intersection and the point-in-polygon test). There are efficient robust * algorithms available for these functions, and these algorithms are implemented in JTS. * *

Computational Performance

* * Runtime performance is an important consideration for a production-quality implementation of * geometric algorithms. The most computationally intensive algorithm used in JTS is intersection * detection. JTS methods need to determine both all intersection between the line segments in a * single Geometry (self-intersection) and all intersections between the line segments of two different * Geometries. *

* The obvious naive algorithm for intersection detection (comparing every segment with every other) * has unacceptably slow performance. There is a large literature of faster algorithms for intersection * detection. Unfortunately, many of them involve substantial code complexity. JTS tries to balance code * simplicity with performance gains. It uses some simple techniques to produce substantial performance * gains for common types of input data. * * *

Package Specification

* * * */ namespace algorithm { // geos::algorithm /** \brief * Classes which determine the Location of points in geometries. */ namespace locate { } // namespace geos::algorithm::locate } // namespace geos::algorithm } // namespace geos #endif geos-3.4.2/include/geos/index/0000755000175000017500000000000012206417225015765 5ustar frankiefrankiegeos-3.4.2/include/geos/index/ItemVisitor.h0000644000175000017500000000170312206417150020412 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_ITEMVISITOR_H #define GEOS_INDEX_ITEMVISITOR_H #include namespace geos { namespace index { /** \brief * A visitor for items in an index. * * Last port: index/ItemVisitor.java rev. 1.2 (JTS-1.7) */ class GEOS_DLL ItemVisitor { public: virtual void visitItem(void *)=0; virtual ~ItemVisitor() {} }; } // namespace geos.index } // namespace geos #endif // GEOS_INDEX_ITEMVISITOR_H geos-3.4.2/include/geos/index/Makefile.am0000644000175000017500000000043012206417150020013 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ intervalrtree \ sweepline \ strtree \ quadtree \ bintree \ chain EXTRA_DIST = geosdir = $(includedir)/geos/index geos_HEADERS = \ ItemVisitor.h \ SpatialIndex.h geos-3.4.2/include/geos/index/Makefile.in0000644000175000017500000005110112206417161020027 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ intervalrtree \ sweepline \ strtree \ quadtree \ bintree \ chain EXTRA_DIST = geosdir = $(includedir)/geos/index geos_HEADERS = \ ItemVisitor.h \ SpatialIndex.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/SpatialIndex.h0000644000175000017500000000576712206417150020537 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_SPATIALINDEX_H #define GEOS_INDEX_SPATIALINDEX_H #include #include // Forward declarations namespace geos { namespace geom { class Envelope; } namespace index { class ItemVisitor; } } namespace geos { namespace index { /** \brief * Abstract class defines basic insertion and query operations supported by * classes implementing spatial index algorithms. * * A spatial index typically provides a primary filter for range rectangle queries. A * secondary filter is required to test for exact intersection. Of course, this * secondary filter may consist of other tests besides intersection, such as * testing other kinds of spatial relationships. * * Last port: index/SpatialIndex.java rev. 1.11 (JTS-1.7) * */ class GEOS_DLL SpatialIndex { public: virtual ~SpatialIndex() {} /** \brief * Adds a spatial item with an extent specified by the given Envelope * to the index * * @param itemEnv * Envelope of the item, ownership left to caller. * TODO: Reference hold by this class ? * * @param item * Opaque item, ownership left to caller. * Reference hold by this class. */ virtual void insert(const geom::Envelope *itemEnv, void *item) = 0; /** \brief * Queries the index for all items whose extents intersect the given search Envelope * * Note that some kinds of indexes may also return objects which do not in fact * intersect the query envelope. * * @param searchEnv the envelope to query for * @return a list of the items found by the query in a newly allocated vector */ //virtual std::vector* query(const geom::Envelope *searchEnv)=0; virtual void query(const geom::Envelope* searchEnv, std::vector&) = 0; /** \brief * Queries the index for all items whose extents intersect the given search Envelope * and applies an ItemVisitor to them. * * Note that some kinds of indexes may also return objects which do not in fact * intersect the query envelope. * * @param searchEnv the envelope to query for * @param visitor a visitor object to apply to the items found */ virtual void query(const geom::Envelope *searchEnv, ItemVisitor& visitor) = 0; /** \brief * Removes a single item from the tree. * * @param itemEnv the Envelope of the item to remove * @param item the item to remove * @return true if the item was found */ virtual bool remove(const geom::Envelope* itemEnv, void* item) = 0; }; } // namespace geos.index } // namespace geos #endif // GEOS_INDEX_SPATIALINDEX_H geos-3.4.2/include/geos/index/bintree/0000755000175000017500000000000012206417226017416 5ustar frankiefrankiegeos-3.4.2/include/geos/index/bintree/Bintree.h0000644000175000017500000000634212206417150021160 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_BINTREE_H #define GEOS_IDX_BINTREE_BINTREE_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace index { namespace bintree { class Interval; class Root; } } } namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /** \brief * An BinTree (or "Binary Interval Tree") * is a 1-dimensional version of a quadtree. * * It indexes 1-dimensional intervals (which of course may * be the projection of 2-D objects on an axis). * It supports range searching * (where the range may be a single point). * * This implementation does not require specifying the extent of the inserted * items beforehand. It will automatically expand to accomodate any extent * of dataset. * * This index is different to the Interval Tree of Edelsbrunner * or the Segment Tree of Bentley. */ class GEOS_DLL Bintree { public: /** * Ensure that the Interval for the inserted item has non-zero extents. * Use the current minExtent to pad it, if necessary * * NOTE: in GEOS this function always return a newly allocated object * with ownership transferred to caller. TODO: change this ? * * @param itemInterval * Source interval, ownership left to caller, no references hold. */ static Interval* ensureExtent(const Interval *itemInterval, double minExtent); Bintree(); ~Bintree(); int depth(); int size(); int nodeSize(); /// @param itemInterval /// Ownership left to caller, NO reference hold by this class. /// /// @param item /// Ownership left to caller, reference kept by this class. /// void insert(Interval *itemInterval, void* item); std::vector* iterator(); std::vector* query(double x); std::vector* query(Interval *interval); void query(Interval *interval, std::vector *foundItems); private: std::vectornewIntervals; Root *root; /** * Statistics * * minExtent is the minimum extent of all items * inserted into the tree so far. It is used as a heuristic value * to construct non-zero extents for features with zero extent. * Start with a non-zero extent, in case the first feature inserted has * a zero extent in both directions. This value may be non-optimal, but * only one feature will be inserted with this value. */ double minExtent; void collectStats(Interval *interval); }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_IDX_BINTREE_BINTREE_H geos-3.4.2/include/geos/index/bintree/Interval.h0000644000175000017500000000270112206417150021347 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_INTERVAL_H #define GEOS_IDX_BINTREE_INTERVAL_H #include namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /// Represents an (1-dimensional) closed interval on the Real number line. class GEOS_DLL Interval { public: double min, max; Interval(); ~Interval(); Interval(double nmin, double nmax); /// TODO: drop this, rely on copy ctor Interval(const Interval *interval); void init(double nmin, double nmax); double getMin() const; double getMax() const; double getWidth() const; void expandToInclude(Interval *interval); bool overlaps(const Interval *interval) const; bool overlaps(double nmin, double nmax) const; bool contains(const Interval *interval) const; bool contains(double nmin, double nmax) const; bool contains(double p) const; }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_BINTREE_INTERVAL_H geos-3.4.2/include/geos/index/bintree/Key.h0000644000175000017500000000303212206417150020311 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_KEY_H #define GEOS_IDX_BINTREE_KEY_H #include // Forward declarations namespace geos { namespace index { namespace bintree { class Interval; } } } namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /** \brief * A Key is a unique identifier for a node in a tree. * * It contains a lower-left point and a level number. * The level number is the power of two for the size of the node envelope */ class GEOS_DLL Key { public: static int computeLevel(Interval *newInterval); Key(Interval *newInterval); ~Key(); double getPoint(); int getLevel(); Interval* getInterval(); void computeKey(Interval *itemInterval); private: // the fields which make up the key double pt; int level; // auxiliary data which is derived from the key for use in computation Interval *interval; void computeInterval(int level, Interval *itemInterval); }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_BINTREE_KEY_H geos-3.4.2/include/geos/index/bintree/Makefile.am0000644000175000017500000000037412206417150021452 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/bintree geos_HEADERS = \ Bintree.h \ Interval.h \ Key.h \ NodeBase.h \ Node.h \ Root.h geos-3.4.2/include/geos/index/bintree/Makefile.in0000644000175000017500000005107312206417161021467 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/bintree DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/bintree geos_HEADERS = \ Bintree.h \ Interval.h \ Key.h \ NodeBase.h \ Node.h \ Root.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/bintree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/bintree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/bintree/Node.h0000644000175000017500000000300512206417150020446 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_NODE_H #define GEOS_IDX_BINTREE_NODE_H #include #include // for inheritance // Forward declarations namespace geos { namespace index { namespace bintree { class Interval; } } } namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /// A node of a Bintree. class GEOS_DLL Node: public NodeBase { public: static Node* createNode(Interval *itemInterval); static Node* createExpanded(Node *node,Interval *addInterval); Node(Interval *newInterval,int newLevel); ~Node(); Interval* getInterval(); Node* getNode(Interval *searchInterval); NodeBase* find(Interval *searchInterval); void insert(Node *node); private: Interval *interval; double centre; int level; Node* getSubnode(int index); Node* createSubnode(int index); protected: bool isSearchMatch(Interval *itemInterval); }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_BINTREE_NODE_H geos-3.4.2/include/geos/index/bintree/NodeBase.h0000644000175000017500000000315512206417150021247 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_NODEBASE_H #define GEOS_IDX_BINTREE_NODEBASE_H #include #include // Forward declarations namespace geos { namespace index { namespace bintree { class Node; class Interval; } } } namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /// The base class for nodes in a Bintree. class GEOS_DLL NodeBase { public: static int getSubnodeIndex(Interval *interval, double centre); NodeBase(); virtual ~NodeBase(); virtual std::vector *getItems(); virtual void add(void* item); virtual std::vector* addAllItems(std::vector *newItems); virtual std::vector* addAllItemsFromOverlapping(Interval *interval, std::vector *resultItems); virtual int depth(); virtual int size(); virtual int nodeSize(); protected: std::vector* items; /** * subnodes are numbered as follows: * * 0 | 1 */ Node* subnode[2]; virtual bool isSearchMatch(Interval *interval)=0; }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_BINTREE_NODEBASE_H geos-3.4.2/include/geos/index/bintree/Root.h0000644000175000017500000000317512206417150020514 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IDX_BINTREE_ROOT_H #define GEOS_IDX_BINTREE_ROOT_H #include #include // for inheritance // Forward declarations namespace geos { namespace index { namespace bintree { class Interval; class Node; } } } namespace geos { namespace index { // geos::index namespace bintree { // geos::index::bintree /** \brief * The root node of a single Bintree. * * It is centred at the origin, * and does not have a defined extent. */ class GEOS_DLL Root: public NodeBase { private: // the singleton root node is centred at the origin. static double origin; void insertContained(Node *tree, Interval *itemInterval, void* item); public: Root() {} ~Root() {} /// @param itemInterval /// Ownership left to caller, references kept in this class. /// /// @param item /// Ownership left to caller, references kept in this class. /// void insert(Interval *itemInterval, void* item); protected: bool isSearchMatch(Interval* /*interval*/) { return true; } }; } // namespace geos::index::bintree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_BINTREE_ROOT_H geos-3.4.2/include/geos/index/chain/0000755000175000017500000000000012206417226017050 5ustar frankiefrankiegeos-3.4.2/include/geos/index/chain/Makefile.am0000644000175000017500000000042312206417150021077 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/chain geos_HEADERS = \ MonotoneChain.h \ MonotoneChainBuilder.h \ MonotoneChainOverlapAction.h \ MonotoneChainSelectAction.h geos-3.4.2/include/geos/index/chain/Makefile.in0000644000175000017500000005111512206417161021116 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/chain DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/chain geos_HEADERS = \ MonotoneChain.h \ MonotoneChainBuilder.h \ MonotoneChainOverlapAction.h \ MonotoneChainSelectAction.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/chain/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/chain/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/chain/MonotoneChain.h0000644000175000017500000001217012206417150021757 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChain.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_CHAIN_MONOTONECHAIN_H #define GEOS_IDX_CHAIN_MONOTONECHAIN_H #include #include // for inline #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class Envelope; class LineSegment; class CoordinateSequence; } namespace index { namespace chain { class MonotoneChainSelectAction; class MonotoneChainOverlapAction; } } } namespace geos { namespace index { // geos::index namespace chain { // geos::index::chain /** \brief * Monotone Chains are a way of partitioning the segments of a linestring to * allow for fast searching of intersections. * * They have the following properties: * * - the segments within a monotone chain never intersect each other * - the envelope of any contiguous subset of the segments in a monotone * chain is equal to the envelope of the endpoints of the subset. * * Property 1 means that there is no need to test pairs of segments from * within the same monotone chain for intersection. * Property 2 allows an efficient binary search to be used to find the * intersection points of two monotone chains. * * For many types of real-world data, these properties eliminate * a large number of segment comparisons, producing substantial speed gains. * * One of the goals of this implementation of MonotoneChains is to be * as space and time efficient as possible. One design choice that aids this * is that a MonotoneChain is based on a subarray of a list of points. * This means that new arrays of points (potentially very large) do not * have to be allocated. * * MonotoneChains support the following kinds of queries: * * - Envelope select: determine all the segments in the chain which * intersect a given envelope * - Overlap: determine all the pairs of segments in two chains whose * envelopes overlap * * This implementation of MonotoneChains uses the concept of internal iterators * to return the resultsets for the above queries. * This has time and space advantages, since it * is not necessary to build lists of instantiated objects to represent the segments * returned by the query. * However, it does mean that the queries are not thread-safe. * */ class GEOS_DLL MonotoneChain { public: /// @param pts /// Ownership left to caller, this class holds a reference. /// /// @param start /// /// @param end /// /// @param context /// Ownership left to caller, this class holds a reference. /// MonotoneChain(const geom::CoordinateSequence& pts, std::size_t start, std::size_t end, void* context); ~MonotoneChain(); /// Returned envelope is owned by this class const geom::Envelope& getEnvelope() const; size_t getStartIndex() const { return start; } size_t getEndIndex() const { return end; } /** \brief * Set given LineSegment with points of the segment starting * at the given index. */ void getLineSegment(std::size_t index, geom::LineSegment& ls) const; /** * Return the subsequence of coordinates forming this chain. * Allocates a new CoordinateSequence to hold the Coordinates * */ std::auto_ptr getCoordinates() const; /** * Determine all the line segments in the chain whose envelopes overlap * the searchEnvelope, and process them */ void select(const geom::Envelope& searchEnv, MonotoneChainSelectAction& mcs); void computeOverlaps(MonotoneChain *mc, MonotoneChainOverlapAction *mco); void setId(int nId) { id=nId; } inline int getId() const { return id; } void* getContext() { return context; } private: void computeSelect(const geom::Envelope& searchEnv, size_t start0, size_t end0, MonotoneChainSelectAction& mcs); void computeOverlaps(std::size_t start0, std::size_t end0, MonotoneChain& mc, std::size_t start1, std::size_t end1, MonotoneChainOverlapAction& mco); /// Externally owned const geom::CoordinateSequence& pts; /// Owned by this class, lazely created mutable geom::Envelope* env; /// user-defined information void* context; /// Index of chain start vertex into the CoordinateSequence, 0 based. size_t start; /// Index of chain end vertex into the CoordinateSequence, 0 based. size_t end; /// useful for optimizing chain comparisons int id; // Declare type as noncopyable MonotoneChain(const MonotoneChain& other); MonotoneChain& operator=(const MonotoneChain& rhs); }; } // namespace geos::index::chain } // namespace geos::index } // namespace geos #endif // GEOS_IDX_CHAIN_MONOTONECHAIN_H geos-3.4.2/include/geos/index/chain/MonotoneChainBuilder.h0000644000175000017500000000561112206417150023270 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChainBuilder.java r388 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_IDX_CHAIN_MONOTONECHAINBUILDER_H #define GEOS_IDX_CHAIN_MONOTONECHAINBUILDER_H #include #include #include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; } namespace index { namespace chain { class MonotoneChain; } } } namespace geos { namespace index { // geos::index namespace chain { // geos::index::chain /** \brief * Constructs {@link MonotoneChain}s * for sequences of {@link Coordinate}s. * * TODO: use vector instead ? */ class GEOS_DLL MonotoneChainBuilder { public: MonotoneChainBuilder(){} /** \brief * Return a newly-allocated vector of newly-allocated * MonotoneChain objects for the given CoordinateSequence. * Remember to deep-delete the result. */ static std::vector* getChains( const geom::CoordinateSequence *pts, void* context); /** \brief * Fill the provided vector with newly-allocated MonotoneChain objects * for the given CoordinateSequence. * Remember to delete vector elements! */ static void getChains(const geom::CoordinateSequence *pts, void* context, std::vector& mcList); static std::vector* getChains(const geom::CoordinateSequence *pts) { return getChains(pts, NULL); } /** \brief * Fill the given vector with start/end indexes of the monotone chains * for the given CoordinateSequence. * The last entry in the array points to the end point of the point * array, * for use as a sentinel. */ static void getChainStartIndices(const geom::CoordinateSequence& pts, std::vector& startIndexList); private: /** * Finds the index of the last point in a monotone chain * starting at a given point. * Any repeated points (0-length segments) will be included * in the monotone chain returned. * * @return the index of the last point in the monotone chain * starting at start. * * NOTE: aborts if 'start' is >= pts.getSize() */ static std::size_t findChainEnd(const geom::CoordinateSequence& pts, std::size_t start); }; } // namespace geos::index::chain } // namespace geos::index } // namespace geos #endif // GEOS_IDX_CHAIN_MONOTONECHAINBUILDER_H geos-3.4.2/include/geos/index/chain/MonotoneChainOverlapAction.h0000644000175000017500000000437012206417150024451 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChainOverlapAction.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_CHAIN_MONOTONECHAINOVERLAPACTION_H #define GEOS_IDX_CHAIN_MONOTONECHAINOVERLAPACTION_H #include #include #include // Forward declarations namespace geos { namespace index { namespace chain { class MonotoneChain; } } } namespace geos { namespace index { // geos::index namespace chain { // geos::index::chain /** * The action for the internal iterator for performing * overlap queries on a MonotoneChain */ class GEOS_DLL MonotoneChainOverlapAction { protected: geom::LineSegment overlapSeg1; geom::LineSegment overlapSeg2; public: MonotoneChainOverlapAction() {} virtual ~MonotoneChainOverlapAction() {} /** * This function can be overridden if the original chains are needed * * @param start1 the index of the start of the overlapping segment * from mc1 * @param start2 the index of the start of the overlapping segment * from mc2 */ virtual void overlap(MonotoneChain& mc1, std::size_t start1, MonotoneChain& mc2, std::size_t start2); /** * This is a convenience function which can be overridden to * obtain the actual line segments which overlap * @param seg1 * @param seg2 */ virtual void overlap(const geom::LineSegment& /*seg1*/, const geom::LineSegment& /*seg2*/) {} // these envelopes are used during the MonotoneChain search process geom::Envelope tempEnv1; geom::Envelope tempEnv2; }; } // namespace geos::index::chain } // namespace geos::index } // namespace geos #endif // GEOS_IDX_CHAIN_MONOTONECHAINOVERLAPACTION_H geos-3.4.2/include/geos/index/chain/MonotoneChainSelectAction.h0000644000175000017500000000370712206417150024263 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChainSelectAction.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_CHAIN_MONOTONECHAINSELECTACTION_H #define GEOS_IDX_CHAIN_MONOTONECHAINSELECTACTION_H #include #include // composition #include // composition // Forward declarations namespace geos { namespace index { namespace chain { class MonotoneChain; } } } namespace geos { namespace index { // geos::index namespace chain { // geos::index::chain /** * The action for the internal iterator for performing * Envelope select queries on a MonotoneChain * */ class GEOS_DLL MonotoneChainSelectAction { protected: geom::LineSegment selectedSegment; public: MonotoneChainSelectAction() {} virtual ~MonotoneChainSelectAction() {} /// This function can be overridden if the original chain is needed virtual void select(MonotoneChain& mc, unsigned int start); /** * This is a convenience function which can be overridden * to obtain the actual line segment which is selected * * @param seg */ virtual void select(const geom::LineSegment& seg) = 0; // these envelopes are used during the MonotoneChain search process // should only be visible by classes in this package geom::Envelope tempEnv1; }; } // namespace geos::index::chain } // namespace geos::index } // namespace geos #endif // GEOS_IDX_CHAIN_MONOTONECHAINSELECTACTION_H geos-3.4.2/include/geos/index/intervalrtree/0000755000175000017500000000000012206417226020654 5ustar frankiefrankiegeos-3.4.2/include/geos/index/intervalrtree/IntervalRTreeBranchNode.h0000644000175000017500000000317212206417150025476 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREEBRANCHNODE_H #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREEBRANCHNODE_H #include // inherited #include // forward declarations namespace geos { namespace index { class ItemVisitor; } } namespace geos { namespace index { namespace intervalrtree { class IntervalRTreeBranchNode : public IntervalRTreeNode { private: const IntervalRTreeNode * node1; const IntervalRTreeNode * node2; //void buildExtent( IntervalRTreeNode * n1, IntervalRTreeNode * n2) //{ // min = std::min( n1->min, n2->min); // max = std::max( n1->max, n2->max); //} protected: public: IntervalRTreeBranchNode( const IntervalRTreeNode * n1, const IntervalRTreeNode * n2) : IntervalRTreeNode( std::min( n1->getMin(), n2->getMin()), std::max( n1->getMax(), n2->getMax())), node1( n1), node2( n2) { } ~IntervalRTreeBranchNode() { delete node1; delete node2; } void query(double queryMin, double queryMax, index::ItemVisitor * visitor) const; }; } // geos::intervalrtree } // geos::index } // geos #endif // GEOS_INDEX_INTERVALRTREE_INTERVALRTREEBRANCHNODE_H geos-3.4.2/include/geos/index/intervalrtree/IntervalRTreeLeafNode.h0000644000175000017500000000246712206417150025156 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREELEAFNODE_H #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREELEAFNODE_H #include // inherited // forward declarations namespace geos { namespace index { class ItemVisitor; } } namespace geos { namespace index { namespace intervalrtree { class IntervalRTreeLeafNode : public IntervalRTreeNode { private: /// externally owned void * item; protected: public: /// @param item externally owned IntervalRTreeLeafNode( double min, double max, void * item) : IntervalRTreeNode( min, max), item( item) { } ~IntervalRTreeLeafNode() { } void query( double queryMin, double queryMax, index::ItemVisitor * visitor) const; }; } // geos::intervalrtree } // geos::index } // geos #endif // GEOS_INDEX_INTERVALRTREE_INTERVALRTREELEAFNODE_H geos-3.4.2/include/geos/index/intervalrtree/IntervalRTreeNode.h0000644000175000017500000000423612206417150024362 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H #include #include #include // forward declarations namespace geos { namespace index { class ItemVisitor; } } namespace geos { namespace index { namespace intervalrtree { class IntervalRTreeNode { private: protected: double min; double max; bool intersects( double queryMin, double queryMax) const { if (min > queryMax || max < queryMin) return false; return true; } public: typedef std::vector ConstVect; IntervalRTreeNode() : min( DoubleInfinity ), max( DoubleNegInfinity ) { } IntervalRTreeNode( double min, double max) : min( min ), max( max ) { } virtual ~IntervalRTreeNode() { } double getMin() const { return min; } double getMax() const { return max; } virtual void query( double queryMin, double queryMax, ItemVisitor * visitor) const =0; //std::string toString() //{ // return WKTWriter.toLineString(new Coordinate(min, 0), new Coordinate(max, 0)); //} //class NodeComparator //{ //public: static bool compare( const IntervalRTreeNode * n1, const IntervalRTreeNode * n2) { //IntervalRTreeNode * n1 = dynamic_cast( o1); //IntervalRTreeNode * n2 = dynamic_cast( o2); double mid1 = (n1->getMin() + n1->getMax()) / 2; double mid2 = (n2->getMin() + n2->getMax()) / 2; //if (mid1 < mid2) return -1; //if (mid1 > mid2) return 1; //return 0; return mid1 > mid2; } //}; }; } // geos::index::intervalrtree } // geos::index } // geos #endif // GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H geos-3.4.2/include/geos/index/intervalrtree/Makefile.am0000644000175000017500000000043512206417150022706 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/intervalrtree geos_HEADERS = \ IntervalRTreeBranchNode.h \ IntervalRTreeLeafNode.h \ IntervalRTreeNode.h \ SortedPackedIntervalRTree.h geos-3.4.2/include/geos/index/intervalrtree/Makefile.in0000644000175000017500000005115712206417161022730 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/intervalrtree DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/intervalrtree geos_HEADERS = \ IntervalRTreeBranchNode.h \ IntervalRTreeLeafNode.h \ IntervalRTreeNode.h \ SortedPackedIntervalRTree.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/intervalrtree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/intervalrtree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/intervalrtree/SortedPackedIntervalRTree.h0000644000175000017500000000523612206417150026046 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_INDEX_INTERVALRTREE_SORTEDPACKEDINTERVALRTREE_H #define GEOS_INDEX_INTERVALRTREE_SORTEDPACKEDINTERVALRTREE_H #include // forward declarations namespace geos { namespace index { class ItemVisitor; } } namespace geos { namespace index { namespace intervalrtree { /** \brief * A static index on a set of 1-dimensional intervals, * using an R-Tree packed based on the order of the interval midpoints. * * It supports range searching, * where the range is an interval of the real line (which may be a single point). * A common use is to index 1-dimensional intervals which * are the projection of 2-D objects onto an axis of the coordinate system. * * This index structure is static * - items cannot be added or removed once the first query has been made. * The advantage of this characteristic is that the index performance * can be optimized based on a fixed set of items. * * @author Martin Davis * */ class SortedPackedIntervalRTree { private: IntervalRTreeNode::ConstVect * leaves; const IntervalRTreeNode * root; int level; void init(); void buildLevel( IntervalRTreeNode::ConstVect * src, IntervalRTreeNode::ConstVect * dest); const IntervalRTreeNode * buildTree(); protected: public: SortedPackedIntervalRTree(); ~SortedPackedIntervalRTree(); /** * Adds an item to the index which is associated with the given interval * * @param min the lower bound of the item interval * @param max the upper bound of the item interval * @param item the item to insert, ownership left to caller * * @throw IllegalStateException if the index has already been queried */ void insert( double min, double max, void * item); /** * Search for intervals in the index which intersect the given closed interval * and apply the visitor to them. * * @param min the lower bound of the query interval * @param max the upper bound of the query interval * @param visitor the visitor to pass any matched items to */ void query( double min, double max, index::ItemVisitor * visitor); }; } // geos::intervalrtree } // geos::index } // geos #endif // GEOS_INDEX_INTERVALRTREE_SORTEDPACKEDINTERVALRTREE_H geos-3.4.2/include/geos/index/quadtree/0000755000175000017500000000000012206417226017600 5ustar frankiefrankiegeos-3.4.2/include/geos/index/quadtree/DoubleBits.h0000644000175000017500000000500112206417150021775 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/DoubleBits.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_DOUBLEBITS_H #define GEOS_IDX_QUADTREE_DOUBLEBITS_H #include #include // for int64 #include namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** \brief * DoubleBits manipulates Double numbers * by using bit manipulation and bit-field extraction. * * For some operations (such as determining the exponent) * this is more accurate than using mathematical operations * (which suffer from round-off error). * * The algorithms and constants in this class * apply only to IEEE-754 double-precision floating point format. * */ class GEOS_DLL DoubleBits { public: static const int EXPONENT_BIAS=1023; static double powerOf2(int exp); static int exponent(double d); static double truncateToPowerOfTwo(double d); static std::string toBinaryString(double d); static double maximumCommonMantissa(double d1, double d2); DoubleBits(double nx); double getDouble() const; /// Determines the exponent for the number int64 biasedExponent() const; /// Determines the exponent for the number int getExponent() const; void zeroLowerBits(int nBits); int getBit(int i) const; /** \brief * This computes the number of common most-significant bits in * the mantissa. * * It does not count the hidden bit, which is always 1. * It does not determine whether the numbers have the same exponent; * if they do not, the value computed by this function is meaningless. * * @param db * * @return the number of common most-significant mantissa bits */ int numCommonMantissaBits(const DoubleBits& db) const; /// A representation of the Double bits formatted for easy readability std::string toString() const; private: double x; int64 xBits; }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_QUADTREE_DOUBLEBITS_H geos-3.4.2/include/geos/index/quadtree/IntervalSize.h0000644000175000017500000000401012206417150022357 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/IntervalSize.java rev 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_INTERVALSIZE_H #define GEOS_IDX_QUADTREE_INTERVALSIZE_H #include namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \class IntervalSize indexQuadtree.h geos/indexQuadtree.h * * \brief * Provides a test for whether an interval is * so small it should be considered as zero for the purposes of * inserting it into a binary tree. * * The reason this check is necessary is that round-off error can * cause the algorithm used to subdivide an interval to fail, by * computing a midpoint value which does not lie strictly between the * endpoints. */ class GEOS_DLL IntervalSize { public: /** * This value is chosen to be a few powers of 2 less than the * number of bits available in the double representation (i.e. 53). * This should allow enough extra precision for simple computations * to be correct, at least for comparison purposes. */ static const int MIN_BINARY_EXPONENT = -50; /** * Computes whether the interval [min, max] is effectively zero width. * I.e. the width of the interval is so much less than the * location of the interval that the midpoint of the interval * cannot be represented precisely. */ static bool isZeroWidth(double min, double max); }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_QUADTREE_INTERVALSIZE_H geos-3.4.2/include/geos/index/quadtree/Key.h0000644000175000017500000000463612206417150020506 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Key.java rev 1.8 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_KEY_H #define GEOS_IDX_QUADTREE_KEY_H #include #include // for composition #include // for composition // Forward declarations // ... namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \brief * A Key is a unique identifier for a node in a quadtree. * * It contains a lower-left point and a level number. The level number * is the power of two for the size of the node envelope */ class GEOS_DLL Key { public: // Doesn't touch the Envelope, might as well be const static int computeQuadLevel(const geom::Envelope& env); // Reference to argument won't be used after construction Key(const geom::Envelope& itemEnv); // used to be virtual, but I don't see subclasses... ~Key(); /// Returned object ownership retained by this class const geom::Coordinate& getPoint() const; int getLevel() const; /// Returned object ownership retained by this class const geom::Envelope& getEnvelope() const; /// Returns newly allocated object (ownership transferred) geom::Coordinate* getCentre() const; /** * return a square envelope containing the argument envelope, * whose extent is a power of two and which is based at a power of 2 */ void computeKey(const geom::Envelope& itemEnv); private: // the fields which make up the key // Owned by this class geom::Coordinate pt; int level; // auxiliary data which is derived from the key for use in computation geom::Envelope env; void computeKey(int level, const geom::Envelope& itemEnv); }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_QUADTREE_KEY_H geos-3.4.2/include/geos/index/quadtree/Makefile.am0000644000175000017500000000041612206417150021631 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/quadtree geos_HEADERS = \ DoubleBits.h \ IntervalSize.h \ Key.h \ NodeBase.h \ Node.h \ Quadtree.h \ Root.h geos-3.4.2/include/geos/index/quadtree/Makefile.in0000644000175000017500000005112112206417161021643 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/quadtree DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/quadtree geos_HEADERS = \ DoubleBits.h \ IntervalSize.h \ Key.h \ NodeBase.h \ Node.h \ Quadtree.h \ Root.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/quadtree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/quadtree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/quadtree/Node.h0000644000175000017500000000627112206417150020640 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Node.java rev 1.8 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_NODE_H #define GEOS_IDX_QUADTREE_NODE_H #include #include // for inheritance #include // for composition #include // for inline #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class Coordinate; class Envelope; } } namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \brief * Represents a node of a Quadtree. * * Nodes contain items which have a spatial extent corresponding to * the node's position in the quadtree. * */ class GEOS_DLL Node: public NodeBase { private: /// Owned by this class std::auto_ptr env; geom::Coordinate centre; int level; /** * Get the subquad for the index. * If it doesn't exist, create it. * * Ownership of the returned object belongs to this class. */ Node* getSubnode(int index); std::auto_ptr createSubnode(int index); protected: bool isSearchMatch(const geom::Envelope& searchEnv) const { return env->intersects(searchEnv); } public: // Create a node computing level from given envelope static std::auto_ptr createNode(const geom::Envelope& env); /// Create a node containing the given node and envelope // /// @param node if not null, will be inserted to the returned node /// @param addEnv minimum envelope to use for the node /// static std::auto_ptr createExpanded(std::auto_ptr node, const geom::Envelope& addEnv); Node(std::auto_ptr nenv, int nlevel) : env(nenv), centre((env->getMinX()+env->getMaxX())/2, (env->getMinY()+env->getMaxY())/2), level(nlevel) { } virtual ~Node() {} /// Return Envelope associated with this node /// ownership retained by this object geom::Envelope* getEnvelope() { return env.get(); } /** \brief * Returns the subquad containing the envelope. * Creates the subquad if * it does not already exist. */ Node* getNode(const geom::Envelope *searchEnv); /** \brief * Returns the smallest existing * node containing the envelope. */ NodeBase* find(const geom::Envelope *searchEnv); void insertNode(std::auto_ptr node); std::string toString() const; }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_IDX_QUADTREE_NODE_H geos-3.4.2/include/geos/index/quadtree/NodeBase.h0000644000175000017500000000633212206417150021431 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/NodeBase.java rev 1.9 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_NODEBASE_H #define GEOS_IDX_QUADTREE_NODEBASE_H #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Envelope; } namespace index { class ItemVisitor; namespace quadtree { class Node; } } } namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \brief * The base class for nodes in a Quadtree. * */ class GEOS_DLL NodeBase { private: void visitItems(const geom::Envelope* searchEnv, ItemVisitor& visitor); public: static int getSubnodeIndex(const geom::Envelope *env, const geom::Coordinate& centre); NodeBase(); virtual ~NodeBase(); std::vector& getItems(); /// Add an item to this node. /// Ownership of the item is left to caller. void add(void* item); /// Push all node items to the given vector, return the argument std::vector& addAllItems(std::vector& resultItems) const; virtual void addAllItemsFromOverlapping(const geom::Envelope& searchEnv, std::vector& resultItems) const; unsigned int depth() const; unsigned int size() const; unsigned int getNodeCount() const; virtual std::string toString() const; virtual void visit(const geom::Envelope* searchEnv, ItemVisitor& visitor); /** * Removes a single item from this subtree. * * @param searchEnv the envelope containing the item * @param item the item to remove * @return true if the item was found and removed */ bool remove(const geom::Envelope* itemEnv, void* item); bool hasItems() const; bool hasChildren() const; bool isPrunable() const; protected: /// Actual items are NOT owned by this class std::vector items; /** * subquads are numbered as follows: *
	 *  2 | 3
	 *  --+--
	 *  0 | 1
	 * 
* * Nodes are owned by this class */ Node* subnode[4]; virtual bool isSearchMatch(const geom::Envelope& searchEnv) const=0; }; // INLINES, To be moved in NodeBase.inl inline bool NodeBase::hasChildren() const { for (int i = 0; i < 4; i++) if (subnode[i]) return true; return false; } inline bool NodeBase::isPrunable() const { return ! (hasChildren() || hasItems()); } inline bool NodeBase::hasItems() const { return ! items.empty(); } } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_IDX_QUADTREE_NODEBASE_H geos-3.4.2/include/geos/index/quadtree/Quadtree.h0000644000175000017500000001330512206417150021521 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Quadtree.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_QUADTREE_H #define GEOS_IDX_QUADTREE_QUADTREE_H #include #include // for inheritance #include // for composition #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Envelope; } namespace index { namespace quadtree { // class Root; } } } namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \brief * A Quadtree is a spatial index structure for efficient querying * of 2D rectangles. If other kinds of spatial objects * need to be indexed they can be represented by their * envelopes * * The quadtree structure is used to provide a primary filter * for range rectangle queries. The query() method returns a list of * all objects which may intersect the query rectangle. Note that * it may return objects which do not in fact intersect. * A secondary filter is required to test for exact intersection. * Of course, this secondary filter may consist of other tests besides * intersection, such as testing other kinds of spatial relationships. * * This implementation does not require specifying the extent of the inserted * items beforehand. It will automatically expand to accomodate any extent * of dataset. * * This data structure is also known as an MX-CIF quadtree * following the usage of Samet and others. */ class GEOS_DLL Quadtree: public SpatialIndex { private: std::vector newEnvelopes; void collectStats(const geom::Envelope& itemEnv); Root root; /** * Statistics * * minExtent is the minimum envelope extent of all items * inserted into the tree so far. It is used as a heuristic value * to construct non-zero envelopes for features with zero X and/or * Y extent. * Start with a non-zero extent, in case the first feature inserted has * a zero extent in both directions. This value may be non-optimal, but * only one feature will be inserted with this value. */ double minExtent; public: /** * \brief * Ensure that the envelope for the inserted item has non-zero extents. * * Use the current minExtent to pad the envelope, if necessary. * Can return a new Envelope or the given one (casted to non-const). */ static geom::Envelope* ensureExtent(const geom::Envelope *itemEnv, double minExtent); /** * \brief * Constructs a Quadtree with zero items. */ Quadtree() : root(), minExtent(1.0) {} ~Quadtree(); /// Returns the number of levels in the tree. int depth(); /// Returns the number of items in the tree. int size(); void insert(const geom::Envelope *itemEnv, void *item); /** \brief * Queries the tree and returns items which may lie * in the given search envelope. * * Precisely, the items that are returned are all items in the tree * whose envelope may intersect the search Envelope. * Note that some items with non-intersecting envelopes may be * returned as well; * the client is responsible for filtering these out. * In most situations there will be many items in the tree which do not * intersect the search envelope and which are not returned - thus * providing improved performance over a simple linear scan. * * @param searchEnv the envelope of the desired query area. * @param ret a vector where items which may intersect the * search envelope are pushed */ void query(const geom::Envelope *searchEnv, std::vector& ret); /** \brief * Queries the tree and visits items which may lie in * the given search envelope. * * Precisely, the items that are visited are all items in the tree * whose envelope may intersect the search Envelope. * Note that some items with non-intersecting envelopes may be * visited as well; * the client is responsible for filtering these out. * In most situations there will be many items in the tree which do not * intersect the search envelope and which are not visited - thus * providing improved performance over a simple linear scan. * * @param searchEnv the envelope of the desired query area. * @param visitor a visitor object which is passed the visited items */ void query(const geom::Envelope *searchEnv, ItemVisitor& visitor) { /* * the items that are matched are the items in quads which * overlap the search envelope */ root.visit(searchEnv, visitor); } /** * Removes a single item from the tree. * * @param itemEnv the Envelope of the item to be removed * @param item the item to remove * @return true if the item was found (and thus removed) */ bool remove(const geom::Envelope* itemEnv, void* item); /// Return a list of all items in the Quadtree std::vector* queryAll(); std::string toString() const; }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_IDX_QUADTREE_QUADTREE_H geos-3.4.2/include/geos/index/quadtree/Root.h0000644000175000017500000000401012206417150020663 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Root.java rev 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IDX_QUADTREE_ROOT_H #define GEOS_IDX_QUADTREE_ROOT_H #include #include // for inheritance #include // for composition // Forward declarations namespace geos { namespace geom { class Envelope; } namespace index { namespace quadtree { class Node; } } } namespace geos { namespace index { // geos::index namespace quadtree { // geos::index::quadtree /** * \class Root indexQuadtree.h geos/indexQuadtree.h * * \brief * QuadRoot is the root of a single Quadtree. It is centred at the origin, * and does not have a defined extent. */ class GEOS_DLL Root: public NodeBase { //friend class Unload; private: static const geom::Coordinate origin; /** * insert an item which is known to be contained in the tree rooted at * the given QuadNode root. Lower levels of the tree will be created * if necessary to hold the item. */ void insertContained(Node *tree, const geom::Envelope *itemEnv, void* item); public: Root() {} virtual ~Root() {} /** * Insert an item into the quadtree this is the root of. */ void insert(const geom::Envelope *itemEnv, void* item); protected: bool isSearchMatch(const geom::Envelope& /* searchEnv */) const { return true; } }; } // namespace geos::index::quadtree } // namespace geos::index } // namespace geos #endif // GEOS_IDX_QUADTREE_ROOT_H geos-3.4.2/include/geos/index/strtree/0000755000175000017500000000000012206417226017456 5ustar frankiefrankiegeos-3.4.2/include/geos/index/strtree/AbstractNode.h0000644000175000017500000000500412206417150022173 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_ABSTRACTNODE_H #define GEOS_INDEX_STRTREE_ABSTRACTNODE_H #include #include // for inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /** \brief * A node of the STR tree. * * The children of this node are either more nodes * (AbstractNodes) or real data (ItemBoundables). * * If this node contains real data (rather than nodes), * then we say that this node is a "leaf node". * */ class GEOS_DLL AbstractNode: public Boundable { private: std::vector childBoundables; int level; public: AbstractNode(int newLevel, int capacity=10); virtual ~AbstractNode(); // TODO: change signature to return by ref, // document ownership of the return inline std::vector* getChildBoundables() { return &childBoundables; } // TODO: change signature to return by ref, // document ownership of the return inline const std::vector* getChildBoundables() const { return &childBoundables; } /** * Returns a representation of space that encloses this Boundable, * preferably not much bigger than this Boundable's boundary yet fast to * test for intersection with the bounds of other Boundables. * The class of object returned depends on the subclass of * AbstractSTRtree. * * @return an Envelope (for STRtrees), an Interval (for SIRtrees), * or other object (for other subclasses of AbstractSTRtree) * * @see AbstractSTRtree::IntersectsOp */ const void* getBounds() const; int getLevel(); void addChildBoundable(Boundable *childBoundable); protected: virtual void* computeBounds() const=0; mutable void* bounds; }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_INDEX_STRTREE_ABSTRACTNODE_H geos-3.4.2/include/geos/index/strtree/AbstractSTRtree.h0000644000175000017500000002021112206417150022633 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H #define GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H #include #include // for inlines #include #include #include // for auto_ptr #include // for inlines #include // Forward declarations namespace geos { namespace index { class ItemVisitor; namespace strtree { class Boundable; class AbstractNode; } } } namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /// A list of boundables. TODO: use a list typedef std::vector BoundableList; //typedef std::list BoundableList; /// list contains boundables or lists of boundables. The lists are owned by /// this class, the plain boundables are held by reference only. class ItemsList; class ItemsListItem { public: enum type { item_is_geometry, item_is_list }; ItemsListItem(void *item_) : t(item_is_geometry) { item.g = item_; } ItemsListItem(ItemsList* item_) : t(item_is_list) { item.l = item_; } type get_type() const { return t; } void* get_geometry() const { assert(t == item_is_geometry); return item.g; } ItemsList* get_itemslist() const { assert(t == item_is_list); return item.l; } type t; union { void* g; ItemsList* l; } item; }; class ItemsList : public std::vector { private: typedef std::vector base_type; static void delete_item(ItemsListItem& item) { if (ItemsListItem::item_is_list == item.t) delete item.item.l; } public: ~ItemsList() { std::for_each(begin(), end(), &ItemsList::delete_item); } // lists of items need to be deleted in the end void push_back(void* item) { this->base_type::push_back(ItemsListItem(item)); } // lists of items need to be deleted in the end void push_back_owned(ItemsList* itemList) { this->base_type::push_back(ItemsListItem(itemList)); } }; /** \brief * Base class for STRtree and SIRtree. * * STR-packed R-trees are described in: * P. Rigaux, Michel Scholl and Agnes Voisard. Spatial Databases With * Application To GIS. Morgan Kaufmann, San Francisco, 2002. * * This implementation is based on Boundables rather than just AbstractNodes, * because the STR algorithm operates on both nodes and * data, both of which are treated here as Boundables. * */ class GEOS_DLL AbstractSTRtree { private: bool built; BoundableList* itemBoundables; /** * Creates the levels higher than the given level * * @param boundablesOfALevel * the level to build on * @param level * the level of the Boundables, or -1 if the boundables are item * boundables (that is, below level 0) * @return the root, which may be a ParentNode or a LeafNode */ virtual AbstractNode* createHigherLevels( BoundableList* boundablesOfALevel, int level); virtual std::auto_ptr sortBoundables(const BoundableList* input)=0; bool remove(const void* searchBounds, AbstractNode& node, void* item); bool removeItem(AbstractNode& node, void* item); ItemsList* itemsTree(AbstractNode* node); protected: /** \brief * A test for intersection between two bounds, necessary because * subclasses of AbstractSTRtree have different implementations of * bounds. */ class GEOS_DLL IntersectsOp { public: /** * For STRtrees, the bounds will be Envelopes; for * SIRtrees, Intervals; for other subclasses of * AbstractSTRtree, some other class. * @param aBounds the bounds of one spatial object * @param bBounds the bounds of another spatial object * @return whether the two bounds intersect */ virtual bool intersects(const void* aBounds, const void* bBounds)=0; virtual ~IntersectsOp() {} }; AbstractNode *root; std::vector *nodes; // Ownership to caller (TODO: return by auto_ptr) virtual AbstractNode* createNode(int level)=0; /** * Sorts the childBoundables then divides them into groups of size M, where * M is the node capacity. */ virtual std::auto_ptr createParentBoundables( BoundableList* childBoundables, int newLevel); virtual AbstractNode* lastNode(BoundableList* nodes) { assert(!nodes->empty()); // Cast from Boundable to AbstractNode return static_cast( nodes->back() ); } virtual AbstractNode* getRoot() { assert(built); return root; } /// Also builds the tree, if necessary. virtual void insert(const void* bounds,void* item); /// Also builds the tree, if necessary. void query(const void* searchBounds, std::vector& foundItems); #if 0 /// Also builds the tree, if necessary. std::vector* query(const void* searchBounds) { vector* matches = new vector(); query(searchBounds, *matches); return matches; } #endif /// Also builds the tree, if necessary. void query(const void* searchBounds, ItemVisitor& visitor); void query(const void* searchBounds, const AbstractNode& node, ItemVisitor& visitor); /// Also builds the tree, if necessary. bool remove(const void* itemEnv, void* item); std::auto_ptr boundablesAtLevel(int level); // @@ should be size_t, probably std::size_t nodeCapacity; /** * @return a test for intersection between two bounds, * necessary because subclasses * of AbstractSTRtree have different implementations of bounds. * @see IntersectsOp */ virtual IntersectsOp *getIntersectsOp()=0; public: /** * Constructs an AbstractSTRtree with the specified maximum number of child * nodes that a node may have */ AbstractSTRtree(std::size_t newNodeCapacity) : built(false), itemBoundables(new BoundableList()), nodes(new std::vector()), nodeCapacity(newNodeCapacity) { assert(newNodeCapacity>1); } static bool compareDoubles(double a, double b) { // NOTE - strk: // Ternary operation is a workaround for // a probable MingW bug, see // http://trac.osgeo.org/geos/ticket/293 return ( a < b ) ? true : false; } virtual ~AbstractSTRtree(); /** * Creates parent nodes, grandparent nodes, and so forth up to the root * node, for the data that has been inserted into the tree. Can only be * called once, and thus can be called only after all of the data has been * inserted into the tree. */ virtual void build(); /** * Returns the maximum number of child nodes that a node may have */ virtual std::size_t getNodeCapacity() { return nodeCapacity; } virtual void query(const void* searchBounds, const AbstractNode* node, std::vector* matches); /** * Iterate over all items added thus far. Explicitly does not build * the tree. */ void iterate(ItemVisitor& visitor); /** * @param level -1 to get items */ virtual void boundablesAtLevel(int level, AbstractNode* top, BoundableList* boundables); /** * Gets a tree structure (as a nested list) * corresponding to the structure of the items and nodes in this tree. *

* The returned {@link List}s contain either {@link Object} items, * or Lists which correspond to subtrees of the tree * Subtrees which do not contain any items are not included. *

* Builds the tree if necessary. * * @note The caller is responsible for releasing the list * * @return a List of items and/or Lists */ ItemsList* itemsTree(); }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #endif // GEOS_INDEX_STRTREE_ABSTRACTSTRTREE_H geos-3.4.2/include/geos/index/strtree/Boundable.h0000644000175000017500000000264212206417150021522 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_BOUNDABLE_H #define GEOS_INDEX_STRTREE_BOUNDABLE_H #include namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /// A spatial object in an AbstractSTRtree. class GEOS_DLL Boundable { public: /** * Returns a representation of space that encloses this Boundable, * preferably not much bigger than this Boundable's boundary yet * fast to test for intersection with the bounds of other Boundables. * * The class of object returned depends * on the subclass of AbstractSTRtree. * * @return an Envelope (for STRtrees), an Interval (for SIRtrees), * or other object (for other subclasses of AbstractSTRtree) * * @see AbstractSTRtree::IntersectsOp */ virtual const void* getBounds() const=0; virtual ~Boundable() {} }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #endif // GEOS_INDEX_STRTREE_BOUNDABLE_H geos-3.4.2/include/geos/index/strtree/Interval.h0000644000175000017500000000222212206417150021405 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_INTERVAL_H #define GEOS_INDEX_STRTREE_INTERVAL_H #include namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /// A contiguous portion of 1D-space. Used internally by SIRtree. // /// @see SIRtree /// class GEOS_DLL Interval { public: Interval(Interval *other); Interval(double newMin, double newMax); double getCentre(); Interval* expandToInclude(Interval *other); bool intersects(Interval *other); bool equals(void *o); private: double imin; double imax; }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #endif // GEOS_INDEX_STRTREE_INTERVAL_H geos-3.4.2/include/geos/index/strtree/ItemBoundable.h0000644000175000017500000000250112206417150022333 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_ITEMBOUNDABLE_H #define GEOS_INDEX_STRTREE_ITEMBOUNDABLE_H #include #include // for inheritance namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /** * \brief * Boundable wrapper for a non-Boundable spatial object. * Used internally by AbstractSTRtree. * * \todo TODO: It's unclear who takes ownership of passed newBounds and newItem objects. */ class GEOS_DLL ItemBoundable: public Boundable { public: ItemBoundable(const void* newBounds, void* newItem); virtual ~ItemBoundable(); const void* getBounds() const; void* getItem() const; private: const void* bounds; void* item; }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #endif // GEOS_INDEX_STRTREE_ITEMBOUNDABLE_H geos-3.4.2/include/geos/index/strtree/Makefile.am0000644000175000017500000000044312206417150021507 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/strtree geos_HEADERS = \ AbstractNode.h \ AbstractSTRtree.h \ Boundable.h \ Interval.h \ ItemBoundable.h \ SIRtree.h \ STRtree.h geos-3.4.2/include/geos/index/strtree/Makefile.in0000644000175000017500000005114312206417161021525 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/strtree DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/strtree geos_HEADERS = \ AbstractNode.h \ AbstractSTRtree.h \ Boundable.h \ Interval.h \ ItemBoundable.h \ SIRtree.h \ STRtree.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/strtree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/strtree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/strtree/SIRtree.h0000644000175000017500000000531712206417150021146 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_SIRTREE_H #define GEOS_INDEX_STRTREE_SIRTREE_H #include #include // for inheritance #include // for inline #include #include namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /** \brief * One-dimensional version of an STR-packed R-tree. * * SIR stands for "Sort-Interval-Recursive". * * STR-packed R-trees are described in: * P. Rigaux, Michel Scholl and Agnes Voisard. Spatial Databases With * Application To GIS. Morgan Kaufmann, San Francisco, 2002. * * @see STRtree */ class GEOS_DLL SIRtree: public AbstractSTRtree { using AbstractSTRtree::insert; using AbstractSTRtree::query; public: /** \brief * Constructs an SIRtree with the default node capacity. */ SIRtree(); /** \brief * Constructs an SIRtree with the given maximum number of child nodes * that a node may have */ SIRtree(std::size_t nodeCapacity); virtual ~SIRtree(); void insert(double x1, double x2, void* item); /** * Returns items whose bounds intersect the given bounds. * @param x1 possibly equal to x2 */ std::vector* query(double x1, double x2) { std::vector* results = new std::vector(); Interval interval(std::min(x1, x2), std::max(x1, x2)); AbstractSTRtree::query(&interval, *results); return results; } /** * Returns items whose bounds intersect the given value. */ std::vector* query(double x) { return query(x,x); } protected: class SIRIntersectsOp:public AbstractSTRtree::IntersectsOp { public: bool intersects(const void* aBounds, const void* bBounds); }; /** \brief * Sorts the childBoundables then divides them into groups of size M, where * M is the node capacity. */ std::auto_ptr createParentBoundables( BoundableList* childBoundables, int newLevel); AbstractNode* createNode(int level); IntersectsOp* getIntersectsOp() {return intersectsOp;} std::auto_ptr sortBoundables(const BoundableList* input); private: IntersectsOp* intersectsOp; }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #endif // GEOS_INDEX_STRTREE_SIRTREE_H geos-3.4.2/include/geos/index/strtree/STRtree.h0000644000175000017500000001033312206417150021153 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/strtree/STRtree.java rev. 1.11 * **********************************************************************/ #ifndef GEOS_INDEX_STRTREE_STRTREE_H #define GEOS_INDEX_STRTREE_STRTREE_H #include #include // for inheritance #include // for inheritance #include // for inlines #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace index { namespace strtree { class Boundable; } } } namespace geos { namespace index { // geos::index namespace strtree { // geos::index::strtree /** * \brief * A query-only R-tree created using the Sort-Tile-Recursive (STR) algorithm. * For two-dimensional spatial data. * * The STR packed R-tree is simple to implement and maximizes space * utilization; that is, as many leaves as possible are filled to capacity. * Overlap between nodes is far less than in a basic R-tree. However, once the * tree has been built (explicitly or on the first call to #query), items may * not be added or removed. * * Described in: P. Rigaux, Michel Scholl and Agnes Voisard. Spatial * Databases With Application To GIS. Morgan Kaufmann, San Francisco, 2002. * */ class GEOS_DLL STRtree: public AbstractSTRtree, public SpatialIndex { using AbstractSTRtree::insert; using AbstractSTRtree::query; private: class GEOS_DLL STRIntersectsOp: public AbstractSTRtree::IntersectsOp { public: bool intersects(const void* aBounds, const void* bBounds); }; /** * Creates the parent level for the given child level. First, orders the items * by the x-values of the midpoints, and groups them into vertical slices. * For each slice, orders the items by the y-values of the midpoints, and * group them into runs of size M (the node capacity). For each run, creates * a new (parent) node. */ std::auto_ptr createParentBoundables(BoundableList* childBoundables, int newLevel); std::auto_ptr createParentBoundablesFromVerticalSlices(std::vector* verticalSlices, int newLevel); STRIntersectsOp intersectsOp; std::auto_ptr sortBoundables(const BoundableList* input); std::auto_ptr createParentBoundablesFromVerticalSlice( BoundableList* childBoundables, int newLevel); /** * @param childBoundables Must be sorted by the x-value of * the envelope midpoints * @return */ std::vector* verticalSlices( BoundableList* childBoundables, size_t sliceCount); protected: AbstractNode* createNode(int level); IntersectsOp* getIntersectsOp() { return &intersectsOp; } public: ~STRtree(); /** * Constructs an STRtree with the given maximum number of child nodes that * a node may have */ STRtree(std::size_t nodeCapacity=10); void insert(const geom::Envelope *itemEnv,void* item); //static double centreX(const geom::Envelope *e); static double avg(double a, double b) { return (a + b) / 2.0; } static double centreY(const geom::Envelope *e) { return STRtree::avg(e->getMinY(), e->getMaxY()); } void query(const geom::Envelope *searchEnv, std::vector& matches) { AbstractSTRtree::query(searchEnv, matches); } void query(const geom::Envelope *searchEnv, ItemVisitor& visitor) { return AbstractSTRtree::query(searchEnv, visitor); } bool remove(const geom::Envelope *itemEnv, void* item) { return AbstractSTRtree::remove(itemEnv, item); } }; } // namespace geos::index::strtree } // namespace geos::index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_INDEX_STRTREE_STRTREE_H geos-3.4.2/include/geos/index/sweepline/0000755000175000017500000000000012206417226017761 5ustar frankiefrankiegeos-3.4.2/include/geos/index/sweepline/Makefile.am0000644000175000017500000000045112206417150022011 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/sweepline geos_HEADERS = \ SweepLineEvent.h \ SweepLineIndex.h \ SweepLineInterval.h \ SweepLineOverlapAction.h geos-3.4.2/include/geos/index/sweepline/Makefile.in0000644000175000017500000005114212206417161022027 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/index/sweepline DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/index/sweepline geos_HEADERS = \ SweepLineEvent.h \ SweepLineIndex.h \ SweepLineInterval.h \ SweepLineOverlapAction.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/index/sweepline/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/index/sweepline/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/index/sweepline/SweepLineEvent.h0000644000175000017500000000416112206417150023025 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_SWEEPLINE_SWEEPLINEEVENT_H #define GEOS_INDEX_SWEEPLINE_SWEEPLINEEVENT_H #include // Forward declarations namespace geos { namespace index { namespace sweepline { class SweepLineInterval; } } } namespace geos { namespace index { // geos.index namespace sweepline { // geos:index:sweepline class GEOS_DLL SweepLineEvent { public: enum { INSERT_EVENT = 1, DELETE_EVENT }; SweepLineEvent(double x, SweepLineEvent *newInsertEvent, SweepLineInterval *newSweepInt); bool isInsert(); bool isDelete(); SweepLineEvent* getInsertEvent(); int getDeleteEventIndex(); void setDeleteEventIndex(int newDeleteEventIndex); SweepLineInterval* getInterval(); /** * ProjectionEvents are ordered first by their x-value, and then by their eventType. * It is important that Insert events are sorted before Delete events, so that * items whose Insert and Delete events occur at the same x-value will be * correctly handled. */ int compareTo(const SweepLineEvent *pe) const; //int compareTo(void *o) const; private: double xValue; int eventType; /// null if this is an INSERT_EVENT event SweepLineEvent *insertEvent; int deleteEventIndex; SweepLineInterval *sweepInt; }; // temp typedefs for backward compatibility //typedef SweepLineEvent indexSweepLineEvent; struct GEOS_DLL SweepLineEventLessThen { bool operator() (const SweepLineEvent* first, const SweepLineEvent* second) const; }; //bool isleLessThen(SweepLineEvent *first, SweepLineEvent *second); } // namespace geos:index:sweepline } // namespace geos:index } // namespace geos #endif // GEOS_INDEX_SWEEPLINE_SWEEPLINEEVENT_H geos-3.4.2/include/geos/index/sweepline/SweepLineIndex.h0000644000175000017500000000402312206417150023010 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_SWEEPLINE_SWEEPLINEINDEX_H #define GEOS_INDEX_SWEEPLINE_SWEEPLINEINDEX_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace index { namespace sweepline { class SweepLineInterval; class SweepLineEvent; class SweepLineOverlapAction; } } } namespace geos { namespace index { // geos.index namespace sweepline { // geos:index:sweepline /** \brief * A sweepline implements a sorted index on a set of intervals. * * It is used to compute all overlaps between the interval in the index. */ class GEOS_DLL SweepLineIndex { public: SweepLineIndex(); ~SweepLineIndex(); void add(SweepLineInterval *sweepInt); void computeOverlaps(SweepLineOverlapAction *action); private: // FIXME: make it a real vector rather then a pointer std::vector events; bool indexBuilt; // statistics information int nOverlaps; /** * Because Delete Events have a link to their corresponding Insert event, * it is possible to compute exactly the range of events which must be * compared to a given Insert event object. */ void buildIndex(); void processOverlaps(int start, int end, SweepLineInterval *s0, SweepLineOverlapAction *action); }; } // namespace geos:index:sweepline } // namespace geos:index } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_INDEX_SWEEPLINE_SWEEPLINEINDEX_H geos-3.4.2/include/geos/index/sweepline/SweepLineInterval.h0000644000175000017500000000203412206417150023525 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_SWEEPLINE_SWEEPLINEINTERVAL_H #define GEOS_INDEX_SWEEPLINE_SWEEPLINEINTERVAL_H #include namespace geos { namespace index { // geos.index namespace sweepline { // geos:index:sweepline class GEOS_DLL SweepLineInterval { public: SweepLineInterval(double newMin, double newMax, void* newItem=0); double getMin(); double getMax(); void* getItem(); private: double min, max; void* item; }; } // namespace geos:index:sweepline } // namespace geos:index } // namespace geos #endif // GEOS_INDEX_SWEEPLINE_SWEEPLINEINTERVAL_H geos-3.4.2/include/geos/index/sweepline/SweepLineOverlapAction.h0000644000175000017500000000217012206417150024510 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_SWEEPLINE_SWEEPLINEOVERLAPACTION_H #define GEOS_INDEX_SWEEPLINE_SWEEPLINEOVERLAPACTION_H #include // Forward declarations namespace geos { namespace index { namespace sweepline { class SweepLineInterval; } } } namespace geos { namespace index { // geos.index namespace sweepline { // geos:index:sweepline class GEOS_DLL SweepLineOverlapAction { public: virtual void overlap(SweepLineInterval *s0,SweepLineInterval *s1)=0; virtual ~SweepLineOverlapAction() {} }; } // namespace geos:index:sweepline } // namespace geos:index } // namespace geos #endif // GEOS_INDEX_SWEEPLINE_SWEEPLINEOVERLAPACTION_H geos-3.4.2/include/geos/indexBintree.h0000644000175000017500000000207112206417150017444 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEXBINTREE_H #define GEOS_INDEXBINTREE_H namespace geos { namespace index { // geos.index /// Contains classes that implement a Binary Interval Tree index namespace bintree { // geos.index.bintree } // namespace geos.index.bintree } // namespace geos.index } // namespace geos #include #include //#include //#include //#include //#include #endif geos-3.4.2/include/geos/indexChain.h0000644000175000017500000000172512206417150017103 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEXCHAIN_H #define GEOS_INDEXCHAIN_H namespace geos { namespace index { // geos.index /// Contains classes that implement Monotone Chains namespace chain { // geos.index.chain } // namespace geos.index.chain } // namespace geos.index } // namespace geos #include //#include #include #include #endif geos-3.4.2/include/geos/indexQuadtree.h0000644000175000017500000000216212206417150017627 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEXQUADTREE_H #define GEOS_INDEXQUADTREE_H namespace geos { namespace index { // geos.index /// Contains classes that implement a Quadtree spatial index namespace quadtree { // geos.index.quadtree } // namespace geos.index.quadtree } // namespace geos.index } // namespace geos //#include //#include //#include //#include #include #include #include #endif geos-3.4.2/include/geos/indexStrtree.h0000644000175000017500000000225512206417150017510 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEXSTRTREE_H #define GEOS_INDEXSTRTREE_H namespace geos { namespace index { // geos.index /// Contains 2-D and 1-D versions of the Sort-Tile-Recursive (STR) tree, a query-only R-tree. namespace strtree { // geos.index.strtree } // namespace geos.index.strtree } // namespace geos.index } // namespace geos #include #include #include #include //#include #include #include #endif // GEOS_INDEXSTRTREE_H geos-3.4.2/include/geos/indexSweepline.h0000644000175000017500000000213512206417150020010 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEXSWEEPLINE_H #define GEOS_INDEXSWEEPLINE_H namespace geos { namespace index { // geos.index /// \brief /// Contains classes which implement a sweepline algorithm /// for scanning geometric data structures. /// namespace sweepline { // geos.index.sweepline } // namespace geos.index.sweepline } // namespace geos.index } // namespace geos //#include //#include //#include #include #endif geos-3.4.2/include/geos/inline.h0000644000175000017500000000120112206417150016274 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INLINE_H #define GEOS_INLINE_H #ifdef GEOS_INLINE # define INLINE inline #else # define INLINE #endif #endif // ndef GEOS_INLINE_H geos-3.4.2/include/geos/io/0000755000175000017500000000000012206417227015267 5ustar frankiefrankiegeos-3.4.2/include/geos/io/ByteOrderDataInStream.h0000644000175000017500000000365412206417150021577 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ByteOrderDataInStream.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IO_BYTEORDERDATAINSTREAM_H #define GEOS_IO_BYTEORDERDATAINSTREAM_H #include //#include //#include //#include #include #include // ostream, istream (if we remove inlines) namespace geos { namespace io { /* * \class ByteOrderDataInStream io.h geos.h * * Allows reading an stream of primitive datatypes from an underlying * istream, with the representation being in either common byte ordering. * */ class GEOS_DLL ByteOrderDataInStream { public: ByteOrderDataInStream(std::istream *s=NULL); ~ByteOrderDataInStream(); /** * Allows a single ByteOrderDataInStream to be reused * on multiple istream. */ void setInStream(std::istream *s); void setOrder(int order); unsigned char readByte(); // throws ParseException int readInt(); // throws ParseException long readLong(); // throws ParseException double readDouble(); // throws ParseException private: int byteOrder; std::istream *stream; // buffers to hold primitive datatypes unsigned char buf[8]; }; } // namespace io } // namespace geos #ifdef GEOS_INLINE #include #endif #endif // #ifndef GEOS_IO_BYTEORDERDATAINSTREAM_H geos-3.4.2/include/geos/io/ByteOrderDataInStream.inl0000644000175000017500000000452112206417150022124 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ByteOrderDataInStream.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IO_BYTEORDERDATAINSTREAM_INL #define GEOS_IO_BYTEORDERDATAINSTREAM_INL #include #include #include #include // for getMachineByteOrder #include // ostream, istream namespace geos { namespace io { INLINE ByteOrderDataInStream::ByteOrderDataInStream(std::istream *s) : byteOrder(getMachineByteOrder()), stream(s) { } INLINE ByteOrderDataInStream::~ByteOrderDataInStream() { } INLINE void ByteOrderDataInStream::setInStream(std::istream *s) { stream=s; } INLINE void ByteOrderDataInStream::setOrder(int order) { byteOrder=order; } INLINE unsigned char ByteOrderDataInStream::readByte() // throws ParseException { stream->read(reinterpret_cast(buf), 1); if ( stream->eof() ) throw ParseException("Unexpected EOF parsing WKB"); return buf[0]; } INLINE int ByteOrderDataInStream::readInt() { stream->read(reinterpret_cast(buf), 4); if ( stream->eof() ) throw ParseException("Unexpected EOF parsing WKB"); return ByteOrderValues::getInt(buf, byteOrder); } INLINE long ByteOrderDataInStream::readLong() { stream->read(reinterpret_cast(buf), 8); if ( stream->eof() ) throw ParseException("Unexpected EOF parsing WKB"); return static_cast(ByteOrderValues::getLong(buf, byteOrder)); } INLINE double ByteOrderDataInStream::readDouble() { stream->read(reinterpret_cast(buf), 8); if ( stream->eof() ) throw ParseException("Unexpected EOF parsing WKB"); return ByteOrderValues::getDouble(buf, byteOrder); } } // namespace io } // namespace geos #endif // #ifndef GEOS_IO_BYTEORDERDATAINSTREAM_INL geos-3.4.2/include/geos/io/ByteOrderValues.h0000644000175000017500000000324112206417150020512 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ByteOrderValues.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IO_BYTEORDERVALUES_H #define GEOS_IO_BYTEORDERVALUES_H #include #include namespace geos { namespace io { /* * \class ByteOrderValues io.h geos.h * * Methods to read and write primitive datatypes from/to byte * sequences, allowing the byte order to be specified * * Similar to the standard Java ByteBuffer class. */ class GEOS_DLL ByteOrderValues { public: enum EndianType { ENDIAN_BIG = 0, ENDIAN_LITTLE = 1 }; static int getInt(const unsigned char *buf, int byteOrder); static void putInt(int intValue, unsigned char *buf, int byteOrder); static int64 getLong(const unsigned char *buf, int byteOrder); static void putLong(int64 longValue, unsigned char *buf, int byteOrder); static double getDouble(const unsigned char *buf, int byteOrder); static void putDouble(double doubleValue, unsigned char *buf, int byteOrder); }; } // namespace io } // namespace geos #endif // #ifndef GEOS_IO_BYTEORDERVALUES_H geos-3.4.2/include/geos/io/CLocalizer.h0000644000175000017500000000217412206417150017466 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2008 Sean Gillies * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK * **********************************************************************/ #ifndef GEOS_IO_CLOCALIZER_H #define GEOS_IO_CLOCALIZER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace io { /** * \class CLocalizer io.h geos.h */ class GEOS_DLL CLocalizer { public: CLocalizer(); ~CLocalizer(); private: std::string saved_locale; }; #ifdef _MSC_VER #pragma warning(pop) #endif } // namespace io } // namespace geos #endif // GEOS_IO_CLOCALIZER_H geos-3.4.2/include/geos/io/Makefile.am0000644000175000017500000000065212206417150017321 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/io geos_HEADERS = \ ByteOrderDataInStream.h \ ByteOrderDataInStream.inl \ ByteOrderValues.h \ CLocalizer.h \ ParseException.h \ StringTokenizer.h \ WKBConstants.h \ WKBReader.h \ WKBWriter.h \ WKTReader.h \ WKTReader.inl \ WKTWriter.h \ Writer.h geos-3.4.2/include/geos/io/Makefile.in0000644000175000017500000005131112206417161017332 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/io DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/io geos_HEADERS = \ ByteOrderDataInStream.h \ ByteOrderDataInStream.inl \ ByteOrderValues.h \ CLocalizer.h \ ParseException.h \ StringTokenizer.h \ WKBConstants.h \ WKBReader.h \ WKBWriter.h \ WKTReader.h \ WKTReader.inl \ WKTWriter.h \ Writer.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/io/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/io/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/io/ParseException.h0000644000175000017500000000250012206417150020361 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ParseException.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IO_PARSEEXCEPTION_H #define GEOS_IO_PARSEEXCEPTION_H #include #include namespace geos { namespace io { /** * \class ParseException io.h geos.h * \brief Notifies a parsing error */ class GEOS_DLL ParseException : public util::GEOSException { public: ParseException(); ParseException(const std::string& msg); ParseException(const std::string& msg, const std::string& var); ParseException(const std::string& msg, double num); ~ParseException() throw() {} private: static std::string stringify(double num); }; } // namespace io } // namespace geos #endif // #ifndef GEOS_IO_PARSEEXCEPTION_H geos-3.4.2/include/geos/io/StringTokenizer.h0000644000175000017500000000307412206417150020600 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK * **********************************************************************/ #ifndef GEOS_IO_STRINGTOKENIZER_H #define GEOS_IO_STRINGTOKENIZER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace io { class GEOS_DLL StringTokenizer { public: enum { TT_EOF, TT_EOL, TT_NUMBER, TT_WORD }; //StringTokenizer(); StringTokenizer(const std::string& txt); ~StringTokenizer() {} int nextToken(); int peekNextToken(); double getNVal(); std::string getSVal(); private: const std::string &str; std::string stok; double ntok; std::string::const_iterator iter; // Declare type as noncopyable StringTokenizer(const StringTokenizer& other); StringTokenizer& operator=(const StringTokenizer& rhs); }; } // namespace io } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // #ifndef GEOS_IO_STRINGTOKENIZER_H geos-3.4.2/include/geos/io/WKBConstants.h0000644000175000017500000000231612206417150017755 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKBConstants.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_IO_WKBCONSTANTS_H #define GEOS_IO_WKBCONSTANTS_H namespace geos { namespace io { /// Constant values used by the WKB format namespace WKBConstants { /// Big Endian const int wkbXDR = 0; /// Little Endian const int wkbNDR = 1; const int wkbPoint = 1; const int wkbLineString = 2; const int wkbPolygon = 3; const int wkbMultiPoint = 4; const int wkbMultiLineString = 5; const int wkbMultiPolygon = 6; const int wkbGeometryCollection = 7; } } // namespace geos::io } // namespace geos #endif // #ifndef GEOS_IO_WKBCONSTANTS_H geos-3.4.2/include/geos/io/WKBReader.h0000644000175000017500000001022412206417150017200 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKBReader.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_IO_WKBREADER_H #define GEOS_IO_WKBREADER_H #include #include #include // for composition #include // ostream, istream #include #include #define BAD_GEOM_TYPE_MSG "Bad geometry type encountered in" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class GeometryFactory; class Coordinate; class Geometry; class GeometryCollection; class Point; class LineString; class LinearRing; class Polygon; class MultiPoint; class MultiLineString; class MultiPolygon; class PrecisionModel; } // namespace geom } // namespace geos namespace geos { namespace io { /** * \class WKBReader io.h geos.h * * \brief Reads a Geometry from Well-Known Binary format. * * This class is designed to support reuse of a single instance to read * multiple geometries. This class is not thread-safe; each thread should * create its own instance. * * The Well-known Binary format is defined in the OpenGIS Simple Features * Specification for SQL. * This implementation supports the extended WKB standard which allows * representing 3-dimensional coordinates. * */ class GEOS_DLL WKBReader { public: WKBReader(geom::GeometryFactory const& f): factory(f) {} /// Inizialize parser with default GeometryFactory. WKBReader(); /** * \brief Reads a Geometry from an istream. * * @param is the stream to read from * @return the Geometry read * @throws IOException * @throws ParseException */ geom::Geometry* read(std::istream &is); // throws IOException, ParseException /** * \brief Reads a Geometry from an istream in hex format. * * @param is the stream to read from * @return the Geometry read * @throws IOException * @throws ParseException */ geom::Geometry *readHEX(std::istream &is); // throws IOException, ParseException /** * \brief Print WKB in HEX form to out stream * * @param is is the stream to read from * @param os is the stream to write to */ static std::ostream &printHEX(std::istream &is, std::ostream &os); private: const geom::GeometryFactory &factory; // for now support the WKB standard only - may be generalized later unsigned int inputDimension; ByteOrderDataInStream dis; std::vector ordValues; geom::Geometry *readGeometry(); // throws IOException, ParseException geom::Point *readPoint(); // throws IOException geom::LineString *readLineString(); // throws IOException geom::LinearRing *readLinearRing(); // throws IOException geom::Polygon *readPolygon(); // throws IOException geom::MultiPoint *readMultiPoint(); // throws IOException, ParseException geom::MultiLineString *readMultiLineString(); // throws IOException, ParseException geom::MultiPolygon *readMultiPolygon(); // throws IOException, ParseException geom::GeometryCollection *readGeometryCollection(); // throws IOException, ParseException geom::CoordinateSequence *readCoordinateSequence(int); // throws IOException void readCoordinate(); // throws IOException // Declare type as noncopyable WKBReader(const WKBReader& other); WKBReader& operator=(const WKBReader& rhs); }; } // namespace io } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // #ifndef GEOS_IO_WKBREADER_H geos-3.4.2/include/geos/io/WKBWriter.h0000644000175000017500000001236012206417150017255 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKBWriter.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_IO_WKBWRITER_H #define GEOS_IO_WKBWRITER_H #include #include // for getMachineByteOrder #include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class Geometry; class GeometryCollection; class Point; class LineString; class LinearRing; class Polygon; class MultiPoint; class MultiLineString; class MultiPolygon; class PrecisionModel; } // namespace geom } // namespace geos namespace geos { namespace io { /** * * \class WKBWriter io.h geos.h * * \brief Writes a Geometry into Well-Known Binary format. * * The WKB format is specified in the OGC Simple Features for SQL specification. * This implementation supports the extended WKB standard for representing * 3-dimensional coordinates. The presence of 3D coordinates is signified * by setting the high bit of the wkbType word. * * Empty Points cannot be represented in WKB; an * IllegalArgumentException will be thrown if one is * written. The WKB specification does not support representing LinearRing * they will be written as LineString * * This class is designed to support reuse of a single instance to read multiple * geometries. This class is not thread-safe; each thread should create its own * instance. * * @see WKBReader */ class GEOS_DLL WKBWriter { public: /* * \brief * Initializes writer with target coordinate dimension, endianness * flag and SRID value. * * @param dims Supported values are 2 or 3. Note that 3 indicates * up to 3 dimensions will be written but 2D WKB is still produced for 2D geometries. * @param bo output byte order - default to native machine byte order. * Legal values include 0 (big endian/xdr) and 1 (little endian/ndr). * @param incudeSRID true if SRID should be included in WKB (an * extension). */ WKBWriter(int dims=2, int bo=getMachineByteOrder(), bool includeSRID=false); /* * \brief * Destructor. */ virtual ~WKBWriter(); /* * \brief * Returns the output dimension used by the * WKBWriter. */ virtual int getOutputDimension() const { return defaultOutputDimension; } /* * Sets the output dimension used by the WKBWriter. * * @param newOutputDimension Supported values are 2 or 3. * Note that 3 indicates up to 3 dimensions will be written but * 2D WKB is still produced for 2D geometries. */ virtual void setOutputDimension(int newOutputDimension); /* * \brief * Returns the byte order used by the * WKBWriter. */ virtual int getByteOrder() const { return byteOrder; } /* * Sets the byte order used by the * WKBWriter. */ virtual void setByteOrder(int newByteOrder); /* * \brief * Returns whether SRID values are output by the * WKBWriter. */ virtual int getIncludeSRID() const { return includeSRID; } /* * Sets whether SRID values should be output by the * WKBWriter. */ virtual void setIncludeSRID(int newIncludeSRID) { includeSRID = (0 == newIncludeSRID ? false : true); } /** * \brief Write a Geometry to an ostream. * * @param g the geometry to write * @param os the output stream * @throws IOException */ void write(const geom::Geometry &g, std::ostream &os); // throws IOException, ParseException /** * \brief Write a Geometry to an ostream in binary hex format. * * @param g the geometry to write * @param os the output stream * @throws IOException */ void writeHEX(const geom::Geometry &g, std::ostream &os); // throws IOException, ParseException private: int defaultOutputDimension; int outputDimension; int byteOrder; bool includeSRID; std::ostream *outStream; unsigned char buf[8]; void writePoint(const geom::Point &p); // throws IOException void writeLineString(const geom::LineString &ls); // throws IOException void writePolygon(const geom::Polygon &p); // throws IOException void writeGeometryCollection(const geom::GeometryCollection &c, int wkbtype); // throws IOException, ParseException void writeCoordinateSequence(const geom::CoordinateSequence &cs, bool sized); // throws IOException void writeCoordinate(const geom::CoordinateSequence &cs, int idx, bool is3d); // throws IOException void writeGeometryType(int geometryType, int SRID); // throws IOException void writeSRID(int SRID); // throws IOException void writeByteOrder(); // throws IOException void writeInt(int intValue); // throws IOException }; } // namespace io } // namespace geos #endif // #ifndef GEOS_IO_WKBWRITER_H geos-3.4.2/include/geos/io/WKTReader.h0000644000175000017500000000662212206417150017231 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKTReader.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_IO_WKTREADER_H #define GEOS_IO_WKTREADER_H #include #include #include #include // Forward declarations namespace geos { namespace io { class StringTokenizer; } namespace geom { class Coordinate; class Geometry; class GeometryCollection; class Point; class LineString; class LinearRing; class Polygon; class MultiPoint; class MultiLineString; class MultiPolygon; class PrecisionModel; } } namespace geos { namespace io { /** * \class WKTReader io.h geos.h * \brief WKT parser class; see also WKTWriter. */ class GEOS_DLL WKTReader { public: //WKTReader(); /** * \brief Inizialize parser with given GeometryFactory. * * Note that all Geometry objects created by the * parser will contain a pointer to the given factory * so be sure you'll keep the factory alive for the * whole WKTReader and created Geometry life. */ WKTReader(const geom::GeometryFactory &gf); /** @deprecated in 3.4.0 */ WKTReader(const geom::GeometryFactory *gf); /** * \brief Inizialize parser with default GeometryFactory. * */ WKTReader(); ~WKTReader(); /// Parse a WKT string returning a Geometry geom::Geometry* read(const std::string &wellKnownText); // Geometry* read(Reader& reader); //Not implemented yet protected: geom::CoordinateSequence* getCoordinates(io::StringTokenizer *tokenizer); double getNextNumber(io::StringTokenizer *tokenizer); std::string getNextEmptyOrOpener(io::StringTokenizer *tokenizer); std::string getNextCloserOrComma(io::StringTokenizer *tokenizer); std::string getNextCloser(io::StringTokenizer *tokenizer); std::string getNextWord(io::StringTokenizer *tokenizer); geom::Geometry* readGeometryTaggedText(io::StringTokenizer *tokenizer); geom::Point* readPointText(io::StringTokenizer *tokenizer); geom::LineString* readLineStringText(io::StringTokenizer *tokenizer); geom::LinearRing* readLinearRingText(io::StringTokenizer *tokenizer); geom::MultiPoint* readMultiPointText(io::StringTokenizer *tokenizer); geom::Polygon* readPolygonText(io::StringTokenizer *tokenizer); geom::MultiLineString* readMultiLineStringText(io::StringTokenizer *tokenizer); geom::MultiPolygon* readMultiPolygonText(io::StringTokenizer *tokenizer); geom::GeometryCollection* readGeometryCollectionText(io::StringTokenizer *tokenizer); private: const geom::GeometryFactory *geometryFactory; const geom::PrecisionModel *precisionModel; void getPreciseCoordinate(io::StringTokenizer *tokenizer, geom::Coordinate&, std::size_t &dim ); bool isNumberNext(io::StringTokenizer *tokenizer); }; } // namespace io } // namespace geos #ifdef GEOS_INLINE # include #endif #endif // #ifndef GEOS_IO_WKTREADER_H geos-3.4.2/include/geos/io/WKTReader.inl0000644000175000017500000000331512206417150017560 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKTReader.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_IO_WKTREADER_INL #define GEOS_IO_WKTREADER_INL #include #include #if GEOS_DEBUG # include #endif namespace geos { namespace io { INLINE WKTReader::WKTReader(const geom::GeometryFactory *gf) : geometryFactory(gf), precisionModel(gf->getPrecisionModel()) { #if GEOS_DEBUG std::cerr << "\nGEOS_DEBUG: WKTReader::WKTReader(const GeometryFactory *gf)\n"; #endif } INLINE WKTReader::WKTReader(const geom::GeometryFactory &gf) : geometryFactory(&gf), precisionModel(gf.getPrecisionModel()) { #if GEOS_DEBUG std::cerr << "\nGEOS_DEBUG: WKTReader::WKTReader(const GeometryFactory &gf)\n"; #endif } INLINE WKTReader::WKTReader() : geometryFactory(geom::GeometryFactory::getDefaultInstance()), precisionModel(geometryFactory->getPrecisionModel()) { #if GEOS_DEBUG std::cerr << "\nGEOS_DEBUG: WKTReader::WKTReader()\n"; #endif } INLINE WKTReader::~WKTReader() { #if GEOS_DEBUG std::cerr << "\nGEOS_DEBUG: WKTReader::~WKTReader()\n"; #endif } } // namespace io } // namespace geos #endif // #ifndef GEOS_IO_WKTREADER_INL geos-3.4.2/include/geos/io/WKTWriter.h0000644000175000017500000001505312206417150017301 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKTWriter.java rev. 1.34 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_IO_WKTWRITER_H #define GEOS_IO_WKTWRITER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateSequence; class Geometry; class GeometryCollection; class Point; class LineString; class LinearRing; class Polygon; class MultiPoint; class MultiLineString; class MultiPolygon; class PrecisionModel; } namespace io { class Writer; } } namespace geos { namespace io { /** * \class WKTWriter io.h geos.h * * \brief Outputs the textual representation of a Geometry. * See also WKTReader. * * The WKTWriter outputs coordinates rounded to the precision * model. No more than the maximum number of necessary decimal places will be * output. * * The Well-known Text format is defined in the OpenGIS Simple Features * Specification for SQL. * * A non-standard "LINEARRING" tag is used for LinearRings. The WKT spec does * not define a special tag for LinearRings. The standard tag to use is * "LINESTRING". * * See WKTReader for parsing. * */ class GEOS_DLL WKTWriter { public: WKTWriter(); ~WKTWriter(); //string(count, ch) can be used for this //static string stringOfChar(char ch, int count); /// Returns WKT string for the given Geometry std::string write(const geom::Geometry *geometry); // Send Geometry's WKT to the given Writer void write(const geom::Geometry *geometry, Writer *writer); std::string writeFormatted(const geom::Geometry *geometry); void writeFormatted(const geom::Geometry *geometry, Writer *writer); /** * Generates the WKT for a N-point LineString. * * @param seq the sequence to outpout * * @return the WKT */ static std::string toLineString(const geom::CoordinateSequence& seq); /** * Generates the WKT for a 2-point LineString. * * @param p0 the first coordinate * @param p1 the second coordinate * * @return the WKT */ static std::string toLineString(const geom::Coordinate& p0, const geom::Coordinate& p1); /** * Generates the WKT for a Point. * * @param p0 the point coordinate * * @return the WKT */ static std::string toPoint(const geom::Coordinate& p0); /** * Sets the rounding precision when writing the WKT * a precision of -1 disables it * * @param p0 the new precision to use * */ void setRoundingPrecision(int p0); /** * Enables/disables trimming of unnecessary decimals * * @param p0 the trim boolean * */ void setTrim(bool p0); /** * Enable old style 3D/4D WKT generation. * * By default the WKBWriter produces new style 3D/4D WKT * (ie. "POINT Z (10 20 30)") but if this method is used * to turn on old style WKT production then the WKT will * be formatted in the style "POINT (10 20 30)". * * @param useOld3D true or false */ void setOld3D(bool useOld3D ) { old3D = useOld3D; } /* * \brief * Returns the output dimension used by the * WKBWriter. */ int getOutputDimension() const { return defaultOutputDimension; } /* * Sets the output dimension used by the WKBWriter. * * @param newOutputDimension Supported values are 2 or 3. * Note that 3 indicates up to 3 dimensions will be * written but 2D WKB is still produced for 2D geometries. */ void setOutputDimension(int newOutputDimension); protected: int decimalPlaces; void appendGeometryTaggedText(const geom::Geometry *geometry, int level, Writer *writer); void appendPointTaggedText( const geom::Coordinate* coordinate, int level, Writer *writer); void appendLineStringTaggedText( const geom::LineString *lineString, int level, Writer *writer); void appendLinearRingTaggedText( const geom::LinearRing *lineString, int level, Writer *writer); void appendPolygonTaggedText( const geom::Polygon *polygon, int level, Writer *writer); void appendMultiPointTaggedText( const geom::MultiPoint *multipoint, int level, Writer *writer); void appendMultiLineStringTaggedText( const geom::MultiLineString *multiLineString, int level,Writer *writer); void appendMultiPolygonTaggedText( const geom::MultiPolygon *multiPolygon, int level, Writer *writer); void appendGeometryCollectionTaggedText( const geom::GeometryCollection *geometryCollection, int level,Writer *writer); void appendPointText(const geom::Coordinate* coordinate, int level, Writer *writer); void appendCoordinate(const geom::Coordinate* coordinate, Writer *writer); std::string writeNumber(double d); void appendLineStringText( const geom::LineString *lineString, int level, bool doIndent, Writer *writer); void appendPolygonText( const geom::Polygon *polygon, int level, bool indentFirst, Writer *writer); void appendMultiPointText( const geom::MultiPoint *multiPoint, int level, Writer *writer); void appendMultiLineStringText( const geom::MultiLineString *multiLineString, int level, bool indentFirst,Writer *writer); void appendMultiPolygonText( const geom::MultiPolygon *multiPolygon, int level, Writer *writer); void appendGeometryCollectionText( const geom::GeometryCollection *geometryCollection, int level,Writer *writer); private: enum { INDENT = 2 }; // static const int INDENT = 2; bool isFormatted; int roundingPrecision; bool trim; int level; int defaultOutputDimension; int outputDimension; bool old3D; void writeFormatted( const geom::Geometry *geometry, bool isFormatted, Writer *writer); void indent(int level, Writer *writer); }; } // namespace geos::io } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // #ifndef GEOS_IO_WKTWRITER_H geos-3.4.2/include/geos/io/Writer.h0000644000175000017500000000237712206417150016720 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK to be used like java.io.Writer * **********************************************************************/ #ifndef GEOS_IO_WRITER_H #define GEOS_IO_WRITER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace io { class GEOS_DLL Writer { public: Writer(); void reserve(std::size_t capacity); ~Writer(); void write(const std::string& txt); const std::string& toString(); private: std::string str; }; } // namespace geos::io } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // #ifndef GEOS_IO_WRITER_H geos-3.4.2/include/geos/io.h0000644000175000017500000000431112206417150015432 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_IO_H #define GEOS_IO_H namespace geos { /// Contains the interfaces for converting JTS objects to and from other formats. // /// The Java Topology Suite (JTS) is a Java API that implements a core /// set of spatial data operations usin g an explicit precision model /// and robust geometric algorithms. JTS is intended to be used in the /// devel opment of applications that support the validation, cleaning, /// integration and querying of spatial data sets. /// /// JTS attempts to implement the OpenGIS Simple Features Specification /// (SFS) as accurately as possible. In some cases the SFS is unclear /// or omits a specification; in this case JTS attempts to choose a reaso /// nable and consistent alternative. Differences from and elaborations /// of the SFS are documented in this specification. /// ///

Package Specification

/// /// /// namespace io { // geos.io } // namespace geos.io } // namespace geos #include #include #include //#include #include #include #include #include #include #include //#include #ifdef __GNUC__ #warning *** DEPRECATED: You are using deprecated header io.h. Please, update your sources according to new layout of GEOS headers and namespaces #endif using namespace geos::io; #endif geos-3.4.2/include/geos/linearref/0000755000175000017500000000000012206417227016627 5ustar frankiefrankiegeos-3.4.2/include/geos/linearref/ExtractLineByLocation.h0000644000175000017500000000465312206417147023217 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/ExtractLineByLocation.java rev. 1.10 * **********************************************************************/ #ifndef GEOS_LINEARREF_EXTRACTLINEBYLOCATION_H #define GEOS_LINEARREF_EXTRACTLINEBYLOCATION_H #include #include #include namespace geos { namespace linearref // geos::linearref { /** * Extracts the subline of a linear {@link Geometry} between * two {@link LinearLocation}s on the line. */ class ExtractLineByLocation { private: const geom::Geometry *line; geom::Geometry *reverse(const geom::Geometry *linear); /** * Assumes input is valid (e.g. start <= end) * * @param start * @param end * @return a linear geometry */ geom::LineString* computeLine(const LinearLocation& start, const LinearLocation& end); /** * Assumes input is valid (e.g. start <= end) * * @param start * @param end * @return a linear geometry */ geom::Geometry *computeLinear(const LinearLocation& start, const LinearLocation& end); public: /** * Computes the subline of a {@link LineString} between * two {@link LineStringLocation}s on the line. * If the start location is after the end location, * the computed geometry is reversed. * * @param line the line to use as the baseline * @param start the start location * @param end the end location * @return the extracted subline */ static geom::Geometry *extract(const geom::Geometry *line, const LinearLocation& start, const LinearLocation& end); ExtractLineByLocation(const geom::Geometry *line); /** * Extracts a subline of the input. * If end < start the linear geometry computed will be reversed. * * @param start the start location * @param end the end location * @return a linear geometry */ geom::Geometry *extract(const LinearLocation& start, const LinearLocation& end); }; } } #endif geos-3.4.2/include/geos/linearref/LengthIndexOfPoint.h0000644000175000017500000000531712206417147022517 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LengthIndexOfPoint.java rev. 1.10 * **********************************************************************/ #ifndef GEOS_LINEARREF_LENGTHINDEXOFPOINT_H #define GEOS_LINEARREF_LENGTHINDEXOFPOINT_H #include #include #include #include #include namespace geos { namespace linearref // geos::linearref { /** * \brief * Computes the length index of the point * on a linear Geometry nearest a given Coordinate. * * The nearest point is not necessarily unique; this class * always computes the nearest point closest to * the start of the geometry. */ class LengthIndexOfPoint { private: const geom::Geometry *linearGeom; double indexOfFromStart(const geom::Coordinate& inputPt, const double minIndex) const; double segmentNearestMeasure(const geom::LineSegment *seg, const geom::Coordinate& inputPt, double segmentStartMeasure) const; public: static double indexOf(const geom::Geometry *linearGeom, const geom::Coordinate& inputPt); static double indexOfAfter(const geom::Geometry *linearGeom, const geom::Coordinate& inputPt, double minIndex); LengthIndexOfPoint(const geom::Geometry *linearGeom); /** * Find the nearest location along a linear Geometry to a given point. * * @param inputPt the coordinate to locate * @return the location of the nearest point */ double indexOf(const geom::Coordinate& inputPt) const; /** \brief * Finds the nearest index along the linear Geometry * to a given Coordinate after the specified minimum index. * * If possible the location returned will be strictly greater than the * minLocation. * If this is not possible, the * value returned will equal minLocation. * (An example where this is not possible is when * minLocation = [end of line] ). * * @param inputPt the coordinate to locate * @param minLocation the minimum location for the point location * @return the location of the nearest point */ double indexOfAfter(const geom::Coordinate& inputPt, double minIndex) const; }; } } #endif geos-3.4.2/include/geos/linearref/LengthIndexedLine.h0000644000175000017500000001524112206417147022336 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LengthIndexedLine.java r463 * **********************************************************************/ #ifndef GEOS_LINEARREF_LENGTHINDEXEDLINE_H #define GEOS_LINEARREF_LENGTHINDEXEDLINE_H #include #include #include #include namespace geos { namespace linearref // geos::linearref { /** \brief * Supports linear referencing along a linear {@link Geometry} * using the length along the line as the index. * Negative length values are taken as measured in the reverse direction * from the end of the geometry. * Out-of-range index values are handled by clamping * them to the valid range of values. * Non-simple lines (i.e. which loop back to cross or touch * themselves) are supported. */ class GEOS_DLL LengthIndexedLine { private: const geom::Geometry *linearGeom; LinearLocation locationOf(double index) const; LinearLocation locationOf(double index, bool resolveLower) const; double positiveIndex(double index) const; public: /** \brief * Constructs an object which allows a linear {@link Geometry} * to be linearly referenced using length as an index. * * @param linearGeom the linear geometry to reference along */ LengthIndexedLine(const geom::Geometry *linearGeom); /** \brief * Computes the {@link Coordinate} for the point * on the line at the given index. * If the index is out of range the first or last point on the * line will be returned. * The Z-ordinate of the computed point will be interpolated from * the Z-ordinates of the line segment containing it, if they exist. * * @param index the index of the desired point * @return the Coordinate at the given index */ geom::Coordinate extractPoint(double index) const; /** * \brief * Computes the {@link Coordinate} for the point * on the line at the given index, offset by the given distance. * * If the index is out of range the first or last point on the * line will be returned. * The computed point is offset to the left of the line if the * offset distance is positive, to the right if negative. * * The Z-ordinate of the computed point will be interpolated from * the Z-ordinates of the line segment containing it, if they exist. * * @param index the index of the desired point * @param offsetDistance the distance the point is offset from the segment * (positive is to the left, negative is to the right) * @return the Coordinate at the given index */ geom::Coordinate extractPoint(double index, double offsetDistance) const; /** * Computes the {@link LineString} for the interval * on the line between the given indices. * If the endIndex lies before the startIndex, * the computed geometry is reversed. * * @param startIndex the index of the start of the interval * @param endIndex the index of the end of the interval * @return the linear interval between the indices */ geom::Geometry *extractLine(double startIndex, double endIndex) const; /** * Computes the minimum index for a point on the line. * If the line is not simple (i.e. loops back on itself) * a single point may have more than one possible index. * In this case, the smallest index is returned. * * The supplied point does not necessarily have to lie precisely * on the line, but if it is far from the line the accuracy and * performance of this function is not guaranteed. * Use {@link #project} to compute a guaranteed result for points * which may be far from the line. * * @param pt a point on the line * @return the minimum index of the point * * @see project */ double indexOf(const geom::Coordinate& pt) const; /** * Finds the index for a point on the line * which is greater than the given index. * If no such index exists, returns minIndex. * This method can be used to determine all indexes for * a point which occurs more than once on a non-simple line. * It can also be used to disambiguate cases where the given point lies * slightly off the line and is equidistant from two different * points on the line. * * The supplied point does not necessarily have to lie precisely * on the line, but if it is far from the line the accuracy and * performance of this function is not guaranteed. * Use {@link #project} to compute a guaranteed result for points * which may be far from the line. * * @param pt a point on the line * @param minIndex the value the returned index must be greater than * @return the index of the point greater than the given minimum index * * @see project */ double indexOfAfter(const geom::Coordinate& pt, double minIndex) const; /** * Computes the indices for a subline of the line. * (The subline must conform to the line; that is, * all vertices in the subline (except possibly the first and last) * must be vertices of the line and occcur in the same order). * * @param subLine a subLine of the line * @return a pair of indices for the start and end of the subline. */ double* indicesOf(const geom::Geometry *subLine) const; /** * Computes the index for the closest point on the line to the given point. * If more than one point has the closest distance the first one along the line * is returned. * (The point does not necessarily have to lie precisely on the line.) * * @param pt a point on the line * @return the index of the point */ double project(const geom::Coordinate& pt) const; /** * Returns the index of the start of the line * @return the start index */ double getStartIndex() const; /** * Returns the index of the end of the line * @return the end index */ double getEndIndex() const; /** * Tests whether an index is in the valid index range for the line. * * @param length the index to test * @return true if the index is in the valid range */ bool isValidIndex(double index) const; /** * Computes a valid index for this line * by clamping the given index to the valid range of index values * * @return a valid index value */ double clampIndex(double index) const; }; } } #endif geos-3.4.2/include/geos/linearref/LengthLocationMap.h0000644000175000017500000000764412206417147022364 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LengthLocationMap.java r463 * **********************************************************************/ #ifndef GEOS_LINEARREF_LENGTHLOCATIONMAP_H #define GEOS_LINEARREF_LENGTHLOCATIONMAP_H #include #include #include namespace geos { namespace linearref { // geos::linearref /** * Computes the {@link LinearLocation} for a given length * along a linear {@link Geometry}. * Negative lengths are measured in reverse from end of the linear geometry. * Out-of-range values are clamped. */ class LengthLocationMap { private: const geom::Geometry *linearGeom; LinearLocation getLocationForward(double length) const; LinearLocation resolveHigher(const LinearLocation& loc) const; public: // TODO: cache computed cumulative length for each vertex // TODO: support user-defined measures // TODO: support measure index for fast mapping to a location /** * \brief * Computes the {@link LinearLocation} for a * given length along a linear {@link Geometry}. * * @param line the linear geometry to use * @param length the length index of the location * @return the {@link LinearLocation} for the length */ static LinearLocation getLocation(const geom::Geometry *linearGeom, double length) { LengthLocationMap locater(linearGeom); return locater.getLocation(length); } /** * \brief * Computes the {@link LinearLocation} for a * given length along a linear {@link Geometry}. * * @param line the linear geometry to use * @param length the length index of the location * @param resolveLower if true lengths are resolved to the * lowest possible index * @return the {@link LinearLocation} for the length */ static LinearLocation getLocation(const geom::Geometry *linearGeom, double length, bool resolveLower) { LengthLocationMap locater(linearGeom); return locater.getLocation(length, resolveLower); } /** * Computes the length for a given {@link LinearLocation} * on a linear {@link Geometry}. * * @param line the linear geometry to use * @param loc the {@link LinearLocation} index of the location * @return the length for the {@link LinearLocation} */ static double getLength(const geom::Geometry *linearGeom, const LinearLocation& loc); LengthLocationMap(const geom::Geometry *linearGeom); /** * \brief * Compute the {@link LinearLocation} corresponding to a length. * * Negative lengths are measured in reverse from end of the linear geometry. * Out-of-range values are clamped. * Ambiguous indexes are resolved to the lowest possible location value, * depending on the value of resolveLower. * * @param length the length index * @return the corresponding LinearLocation */ LinearLocation getLocation(double length, bool resolveLower) const; /** * \brief * Compute the {@link LinearLocation} corresponding to a length. * * Negative lengths are measured in reverse from end of the linear geometry. * Out-of-range values are clamped. * Ambiguous indexes are resolved to the lowest possible location value. * * @param length the length index * @return the corresponding LinearLocation */ LinearLocation getLocation(double length) const; double getLength(const LinearLocation& loc) const; }; } // geos.linearref } // geos #endif geos-3.4.2/include/geos/linearref/LinearGeometryBuilder.h0000644000175000017500000000523312206417147023241 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearGeometryBuilder.java rev. 1.1 * **********************************************************************/ #ifndef GEOS_LINEARREF_LINEARGEOMETRYBUILDER_H #define GEOS_LINEARREF_LINEARGEOMETRYBUILDER_H #include #include #include #include #include #include namespace geos { namespace linearref // geos::linearref { /** * Builds a linear geometry ({@link LineString} or {@link MultiLineString}) * incrementally (point-by-point). * * @version 1.7 */ class LinearGeometryBuilder { private: const geom::GeometryFactory* geomFact; typedef std::vector GeomPtrVect; // Geometry elements owned by this class GeomPtrVect lines; bool ignoreInvalidLines; bool fixInvalidLines; geom::CoordinateSequence* coordList; geom::Coordinate lastPt; public: LinearGeometryBuilder(const geom::GeometryFactory* geomFact); ~LinearGeometryBuilder(); /** * Allows invalid lines to be ignored rather than causing Exceptions. * An invalid line is one which has only one unique point. * * @param ignoreShortLines true if short lines are * to be ignored */ void setIgnoreInvalidLines(bool ignoreInvalidLines); /** * Allows invalid lines to be ignored rather than causing Exceptions. * An invalid line is one which has only one unique point. * * @param ignoreShortLines true if short lines are * to be ignored */ void setFixInvalidLines(bool fixInvalidLines); /** * Adds a point to the current line. * * @param pt the Coordinate to add */ void add(const geom::Coordinate& pt); /** * Adds a point to the current line. * * @param pt the Coordinate to add */ void add(const geom::Coordinate& pt, bool allowRepeatedPoints); /// NOTE strk: why return by value ? geom::Coordinate getLastCoordinate() const; /// Terminate the current LineString. void endLine(); geom::Geometry *getGeometry(); }; } // namespace geos.linearref } // namespace geos #endif geos-3.4.2/include/geos/linearref/LinearIterator.h0000644000175000017500000001037012206417147021726 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearIterator.java r463 * **********************************************************************/ #ifndef GEOS_LINEARREF_LINEARITERATOR_H #define GEOS_LINEARREF_LINEARITERATOR_H #include #include #include #include #include namespace geos { namespace linearref { /** \brief * An iterator over the components and coordinates of a linear geometry * (LineString or MultiLineString). * * The standard usage pattern for a LinearIterator is: * *
 * for (LinearIterator it = new LinearIterator(...); it.hasNext(); it.next()) {
 *   ...
 *   int ci = it.getComponentIndex();   // for example
 *   int vi = it.getVertexIndex();      // for example
 *   ...
 * }
 * 
* * @version 1.7 */ class LinearIterator { public: /** * Creates an iterator initialized to the start of a linear Geometry * * @param linear the linear geometry to iterate over */ LinearIterator(const geom::Geometry *linear); /** * Creates an iterator starting at * a {@link LinearLocation} on a linear {@link Geometry} * * @param linear the linear geometry to iterate over * @param start the location to start at */ LinearIterator(const geom::Geometry *linear, const LinearLocation& start); /** * Creates an iterator starting at * a component and vertex in a linear {@link Geometry} * * @param linear the linear geometry to iterate over * @param componentIndex the component to start at * @param vertexIndex the vertex to start at */ LinearIterator(const geom::Geometry *linear, unsigned int componentIndex, unsigned int vertexIndex); /** * Tests whether there are any vertices left to iterator over. * @return true if there are more vertices to scan */ bool hasNext() const; /** * Moves the iterator ahead to the next vertex and (possibly) linear component. */ void next(); /** * Checks whether the iterator cursor is pointing to the * endpoint of a component {@link LineString}. * * @return true if the iterator is at an endpoint */ bool isEndOfLine() const; /** * The component index of the vertex the iterator is currently at. * @return the current component index */ unsigned int getComponentIndex() const; /** * The vertex index of the vertex the iterator is currently at. * @return the current vertex index */ unsigned int getVertexIndex() const; /** * Gets the {@link LineString} component the iterator is current at. * @return a linestring */ const geom::LineString* getLine() const; /** * Gets the first {@link Coordinate} of the current segment. * (the coordinate of the current vertex). * @return a {@link Coordinate} */ geom::Coordinate getSegmentStart() const; /** * Gets the second {@link Coordinate} of the current segment. * (the coordinate of the next vertex). * If the iterator is at the end of a line, null is returned. * * @return a {@link Coordinate} or null */ geom::Coordinate getSegmentEnd() const; private: static unsigned int segmentEndVertexIndex(const LinearLocation& loc); const geom::LineString *currentLine; unsigned int vertexIndex; unsigned int componentIndex; const geom::Geometry *linear; const unsigned int numLines; /** * Invariant: currentLine <> null if the iterator is pointing * at a valid coordinate * * @throws IllegalArgumentException if linearGeom is not {@link Lineal} */ void loadCurrentLine(); // Declare type as noncopyable LinearIterator(const LinearIterator& other); LinearIterator& operator=(const LinearIterator& rhs); }; }} // namespace geos::linearref #endif // GEOS_LINEARREF_LINEARITERATOR_H geos-3.4.2/include/geos/linearref/LinearLocation.h0000644000175000017500000001706312206417147021713 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearLocation.java r463 * **********************************************************************/ #ifndef GEOS_LINEARREF_LINEARLOCATION_H #define GEOS_LINEARREF_LINEARLOCATION_H #include #include // for std::auto_ptr #include #include #include namespace geos { namespace linearref { // geos::linearref /** \brief * Represents a location along a {@link LineString} or {@link MultiLineString}. * * The referenced geometry is not maintained within * this location, but must be provided for operations which require it. * Various methods are provided to manipulate the location value * and query the geometry it references. */ class LinearLocation { private: unsigned int componentIndex; unsigned int segmentIndex; double segmentFraction; /** * Ensures the individual values are locally valid. * Does not ensure that the indexes are valid for * a particular linear geometry. * * @see clamp */ void normalize(); public: /** * Gets a location which refers to the end of a linear {@link Geometry}. * @param linear the linear geometry * @return a new LinearLocation */ static LinearLocation getEndLocation(const geom::Geometry* linear); /** * Computes the {@link Coordinate} of a point a given fraction * along the line segment (p0, p1). * If the fraction is greater than 1.0 the last * point of the segment is returned. * If the fraction is less than or equal to 0.0 the first point * of the segment is returned. * The Z ordinate is interpolated from the Z-ordinates of * the given points, if they are specified. * * @param p0 the first point of the line segment * @param p1 the last point of the line segment * @param frac the length to the desired point * @return the Coordinate of the desired point */ static geom::Coordinate pointAlongSegmentByFraction(const geom::Coordinate& p0, const geom::Coordinate& p1, double frac); /** * Creates a location referring to the start of a linear geometry */ LinearLocation(unsigned int segmentIndex = 0, double segmentFraction = 0.0); LinearLocation(unsigned int componentIndex, unsigned int segmentIndex, double segmentFraction); /** * Ensures the indexes are valid for a given linear {@link Geometry}. * * @param linear a linear geometry */ void clamp(const geom::Geometry* linear); /** * Snaps the value of this location to * the nearest vertex on the given linear {@link Geometry}, * if the vertex is closer than minDistance. * * @param linearGeom a linear geometry * @param minDistance the minimum allowable distance to a vertex */ void snapToVertex(const geom::Geometry* linearGeom, double minDistance); /** * Gets the length of the segment in the given * Geometry containing this location. * * @param linearGeom a linear geometry * @return the length of the segment */ double getSegmentLength(const geom::Geometry* linearGeom) const; /** * Sets the value of this location to * refer the end of a linear geometry * * @param linear the linear geometry to set */ void setToEnd(const geom::Geometry* linear); /** * Gets the component index for this location. * * @return the component index */ unsigned int getComponentIndex() const; /** * Gets the segment index for this location * * @return the segment index */ unsigned int getSegmentIndex() const; /** * Gets the segment fraction for this location * * @return the segment fraction */ double getSegmentFraction() const; /** * Tests whether this location refers to a vertex * * @return true if the location is a vertex */ bool isVertex() const; /** * Gets the {@link Coordinate} along the * given linear {@link Geometry} which is * referenced by this location. * * @param linearGeom the linear geometry referenced by this location * @return the Coordinate at the location */ geom::Coordinate getCoordinate(const geom::Geometry* linearGeom) const; /** * Gets a {@link LineSegment} representing the segment of the * given linear {@link Geometry} which contains this location. * * @param linearGeom a linear geometry * @return the LineSegment containing the location */ std::auto_ptr getSegment(const geom::Geometry* linearGeom) const; /** * Tests whether this location refers to a valid * location on the given linear {@link Geometry}. * * @param linearGeom a linear geometry * @return true if this location is valid */ bool isValid(const geom::Geometry* linearGeom) const; /** * Compares this object with the specified object for order. * *@param o the LineStringLocation with which this Coordinate * is being compared *@return a negative integer, zero, or a positive integer as this LineStringLocation * is less than, equal to, or greater than the specified LineStringLocation */ int compareTo(const LinearLocation& other) const; /** * Compares this object with the specified index values for order. * * @param componentIndex1 a component index * @param segmentIndex1 a segment index * @param segmentFraction1 a segment fraction * @return a negative integer, zero, or a positive integer as this LineStringLocation * is less than, equal to, or greater than the specified locationValues */ int compareLocationValues(unsigned int componentIndex1, unsigned int segmentIndex1, double segmentFraction1) const; /** * Compares two sets of location values for order. * * @param componentIndex0 a component index * @param segmentIndex0 a segment index * @param segmentFraction0 a segment fraction * @param componentIndex1 another component index * @param segmentIndex1 another segment index * @param segmentFraction1 another segment fraction *@return a negative integer, zero, or a positive integer * as the first set of location values * is less than, equal to, or greater than the second set of locationValues */ static int compareLocationValues( unsigned int componentIndex0, unsigned int segmentIndex0, double segmentFraction0, unsigned int componentIndex1, unsigned int segmentIndex1, double segmentFraction1); /** * Tests whether two locations * are on the same segment in the parent {@link Geometry}. * * @param loc a location on the same geometry * @return true if the locations are on the same segment of the parent geometry */ bool isOnSameSegment(const LinearLocation& loc) const; /** * \brief * Tests whether this location is an endpoint of * the linear component it refers to. * * @param linearGeom the linear geometry referenced by this location * @return true if the location is a component endpoint */ bool isEndpoint(const geom::Geometry& linearGeom) const; friend std::ostream& operator<< (std::ostream& out, const LinearLocation& obj ); }; } // namespace geos.linearref } // namespace geos #endif geos-3.4.2/include/geos/linearref/LocationIndexOfLine.h0000644000175000017500000000460212206417147022640 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LocationIndexOfLine.java r731 * **********************************************************************/ #ifndef GEOS_LINEARREF_LOCATIONINDEXOFLINE_H #define GEOS_LINEARREF_LOCATIONINDEXOFLINE_H #include #include #include namespace geos { namespace linearref // geos::linearref { /** * Determines the location of a subline along a linear {@link Geometry}. * The location is reported as a pair of {@link LinearLocation}s. *

* Note: Currently this algorithm is not guaranteed to * return the correct substring in some situations where * an endpoint of the test line occurs more than once in the input line. * (However, the common case of a ring is always handled correctly). */ class LocationIndexOfLine { /** * MD - this algorithm has been extracted into a class * because it is intended to validate that the subline truly is a subline, * and also to use the internal vertex information to unambiguously locate the subline. */ private: const geom::Geometry* linearGeom; public: /** \brief * Determines the location of a subline along a linear {@link Geometry}. * * The location is reported as a pair of {@link LinearLocation}s. * * Note: Currently this algorithm is not guaranteed to * return the correct substring in some situations where * an endpoint of the test line occurs more than once in the input line. * (However, the common case of a ring is always handled correctly). * * Caller must take of releasing with delete[] * */ static LinearLocation* indicesOf(const geom::Geometry* linearGeom, const geom::Geometry* subLine); LocationIndexOfLine(const geom::Geometry* linearGeom); /// Caller must take of releasing with delete[] LinearLocation* indicesOf(const geom::Geometry* subLine) const; }; } } #endif geos-3.4.2/include/geos/linearref/LocationIndexOfPoint.h0000644000175000017500000000524312206417147023044 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearGeometryBuilder.java r466 * **********************************************************************/ #ifndef GEOS_LINEARREF_LOCATIONINDEXOFPOINT_H #define GEOS_LINEARREF_LOCATIONINDEXOFPOINT_H #include #include #include namespace geos { namespace linearref // geos::linearref { /** * Computes the {@link LinearLocation} of the point * on a linear {@link Geometry} nearest a given {@link Coordinate}. * The nearest point is not necessarily unique; this class * always computes the nearest point closest to * the start of the geometry. */ class LocationIndexOfPoint { private: const geom::Geometry *linearGeom; LinearLocation indexOfFromStart(const geom::Coordinate& inputPt, const LinearLocation* minIndex) const; public: static LinearLocation indexOf(const geom::Geometry *linearGeom, const geom::Coordinate& inputPt); static LinearLocation indexOfAfter(const geom::Geometry *linearGeom, const geom::Coordinate& inputPt, const LinearLocation* minIndex); LocationIndexOfPoint(const geom::Geometry *linearGeom); /** * Find the nearest location along a linear {@link Geometry} to a given point. * * @param inputPt the coordinate to locate * @return the location of the nearest point */ LinearLocation indexOf(const geom::Coordinate& inputPt) const; /** * Find the nearest {@link LinearLocation} along the linear {@link Geometry} * to a given {@link Coordinate} * after the specified minimum {@link LinearLocation}. * If possible the location returned will be strictly greater than the * minLocation. * If this is not possible, the * value returned will equal minLocation. * (An example where this is not possible is when * minLocation = [end of line] ). * * @param inputPt the coordinate to locate * @param minLocation the minimum location for the point location * @return the location of the nearest point */ LinearLocation indexOfAfter(const geom::Coordinate& inputPt, const LinearLocation* minIndex) const; }; } } #endif geos-3.4.2/include/geos/linearref/LocationIndexedLine.h0000644000175000017500000001733012206417147022666 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LocationIndexedLine.java r466 * **********************************************************************/ #ifndef GEOS_LINEARREF_LOCATIONINDEXEDLINE_H #define GEOS_LINEARREF_LOCATIONINDEXEDLINE_H #include #include #include #include #include #include #include #include namespace geos { namespace linearref { // geos::linearref /** * \brief * Supports linear referencing * along a linear {@link Geometry} * using {@link LinearLocation}s as the index. */ class GEOS_DLL LocationIndexedLine { private: const geom::Geometry *linearGeom; void checkGeometryType() { if ( ! dynamic_cast(linearGeom) ) throw util::IllegalArgumentException("Input geometry must be linear"); } public: /** * \brief * Constructs an object which allows linear referencing along * a given linear {@link Geometry}. * * @param linearGeom the linear geometry to reference along */ LocationIndexedLine(const geom::Geometry *linearGeom) : linearGeom(linearGeom) { checkGeometryType(); } /** * \brief * Computes the {@link Coordinate} for the point * on the line at the given index. * * If the index is out of range the first or last point on the * line will be returned. * The Z-ordinate of the computed point will be interpolated from * the Z-ordinates of the line segment containing it, if they exist. * * @param index the index of the desired point * @return the Coordinate at the given index */ geom::Coordinate extractPoint(const LinearLocation& index) const { return index.getCoordinate(linearGeom); } /** * \brief * Computes the {@link Coordinate} for the point * on the line at the given index, offset by the given distance. * * If the index is out of range the first or last point on the * line will be returned. * The computed point is offset to the left of the line if the offset * distance is positive, to the right if negative. * * The Z-ordinate of the computed point will be interpolated from * the Z-ordinates of the line segment containing it, if they exist. * * @param index the index of the desired point * @param offsetDistance the distance the point is offset from the segment * (positive is to the left, negative is to the right) * @return the Coordinate at the given index */ geom::Coordinate extractPoint(const LinearLocation& index, double offsetDistance) const { geom::Coordinate ret; index.getSegment(linearGeom)->pointAlongOffset( index.getSegmentFraction(), offsetDistance, ret ); return ret; } /** * \brief * Computes the {@link LineString} for the interval * on the line between the given indices. * * If the endIndex lies before the startIndex, * the computed geometry is reversed. * * @param startIndex the index of the start of the interval * @param endIndex the index of the end of the interval * @return the linear interval between the indices */ geom::Geometry *extractLine(const LinearLocation& startIndex, const LinearLocation& endIndex) const { return ExtractLineByLocation::extract(linearGeom, startIndex, endIndex); } /** * \brief * Computes the index for a given point on the line. * * The supplied point does not necessarily have to lie precisely * on the line, but if it is far from the line the accuracy and * performance of this function is not guaranteed. * Use {@link #project} to compute a guaranteed result for points * which may be far from the line. * * @param pt a point on the line * @return the index of the point * * @see project */ LinearLocation indexOf(const geom::Coordinate& pt) const { return LocationIndexOfPoint::indexOf(linearGeom, pt); } /** * \brief * Finds the index for a point on the line * which is greater than the given index. * * If no such index exists, returns minIndex. * This method can be used to determine all indexes for * a point which occurs more than once on a non-simple line. * It can also be used to disambiguate cases where the given point lies * slightly off the line and is equidistant from two different * points on the line. * * The supplied point does not necessarily have to lie precisely * on the line, but if it is far from the line the accuracy and * performance of this function is not guaranteed. * Use {@link #project} to compute a guaranteed result for points * which may be far from the line. * * @param pt a point on the line * @param minIndex the value the returned index must be greater than * @return the index of the point greater than the given minimum index * * @see project */ LinearLocation indexOfAfter(const geom::Coordinate& pt, const LinearLocation& minIndex) const { return LocationIndexOfPoint::indexOfAfter(linearGeom, pt, &minIndex); } /** * \brief * Computes the indices for a subline of the line. * * (The subline must conform to the line; that is, * all vertices in the subline (except possibly the first and last) * must be vertices of the line and occur in the same order). * * @param subLine a subLine of the line * @return a pair of indices for the start and end of the subline. */ LinearLocation* indicesOf(const geom::Geometry *subLine) const { return LocationIndexOfLine::indicesOf(linearGeom, subLine); } /** * \brief * Computes the index for the closest point on the line to the given point. * * If more than one point has the closest distance the first one along * the line is returned. * (The point does not necessarily have to lie precisely on the line.) * * @param pt a point on the line * @return the index of the point */ LinearLocation project(const geom::Coordinate& pt) const { return LocationIndexOfPoint::indexOf(linearGeom, pt); } /** * \brief * Returns the index of the start of the line * * @return the start index */ LinearLocation getStartIndex() const { return LinearLocation(); } /** * \brief * Returns the index of the end of the line * * @return the end index */ LinearLocation getEndIndex() const { return LinearLocation::getEndLocation(linearGeom); } /** * \brief * Tests whether an index is in the valid index range for the line. * * @param length the index to test * @return true if the index is in the valid range */ bool isValidIndex(const LinearLocation& index) const { return index.isValid(linearGeom); } /** * \brief * Computes a valid index for this line * by clamping the given index to the valid range of index values * * @return a valid index value */ LinearLocation clampIndex(const LinearLocation& index) const { LinearLocation loc = index; loc.clamp(linearGeom); return loc; } }; } // geos::linearref } // geos #endif geos-3.4.2/include/geos/linearref/Makefile.am0000644000175000017500000000063312206417147020666 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # EXTRA_DIST = geosdir = $(includedir)/geos/linearref geos_HEADERS = \ ExtractLineByLocation.h \ LengthIndexedLine.h \ LengthIndexOfPoint.h \ LengthLocationMap.h \ LinearIterator.h \ LinearGeometryBuilder.h \ LinearLocation.h \ LocationIndexedLine.h \ LocationIndexOfLine.h \ LocationIndexOfPoint.h geos-3.4.2/include/geos/linearref/Makefile.in0000644000175000017500000003657212206417161020706 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/linearref DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # EXTRA_DIST = geosdir = $(includedir)/geos/linearref geos_HEADERS = \ ExtractLineByLocation.h \ LengthIndexedLine.h \ LengthIndexOfPoint.h \ LengthLocationMap.h \ LinearIterator.h \ LinearGeometryBuilder.h \ LinearLocation.h \ LocationIndexedLine.h \ LocationIndexOfLine.h \ LocationIndexOfPoint.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/linearref/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/linearref/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/noding/0000755000175000017500000000000012206417227016136 5ustar frankiefrankiegeos-3.4.2/include/geos/noding/BasicSegmentString.h0000644000175000017500000000547012206417150022043 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/BasicSegmentString.java rev. 1.1 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_BASICSEGMENTSTRING_H #define GEOS_NODING_BASICSEGMENTSTRING_H #include #include // for inheritance #include // for inlines (size()) #include #include // Forward declarations namespace geos { namespace algorithm { //class LineIntersector; } } namespace geos { namespace noding { // geos.noding /** * Represents a list of contiguous line segments, * and supports noding the segments. * The line segments are represented by an array of {@link Coordinate}s. * Intended to optimize the noding of contiguous segments by * reducing the number of allocated objects. * SegmentStrings can carry a context object, which is useful * for preserving topological or parentage information. * All noded substrings are initialized with the same context object. */ class GEOS_DLL BasicSegmentString : public SegmentString { public: /// Construct a BasicSegmentString. // /// @param newPts CoordinateSequence representing the string, /// externally owned /// @param newContext the context associated to this SegmentString /// BasicSegmentString(geom::CoordinateSequence *newPts, const void* newContext) : SegmentString(newContext), pts(newPts) {} virtual ~BasicSegmentString() {} /// see dox in SegmentString.h virtual unsigned int size() const { return pts->size(); } /// see dox in SegmentString.h virtual const geom::Coordinate& getCoordinate(unsigned int i) const; /// see dox in SegmentString.h virtual geom::CoordinateSequence* getCoordinates() const; /// see dox in SegmentString.h virtual bool isClosed() const; /// see dox in SegmentString.h virtual std::ostream& print(std::ostream& os) const; /** \brief * Gets the octant of the segment starting at vertex index. * * @param index the index of the vertex starting the segment. * Must not be the last index in the vertex list * @return the octant of the segment at the vertex */ int getSegmentOctant(unsigned int index) const; private: geom::CoordinateSequence *pts; }; } // namespace geos.noding } // namespace geos #endif // ndef GEOS_NODING_BASICSEGMENTSTRING_H geos-3.4.2/include/geos/noding/FastNodingValidator.h0000644000175000017500000000554612206417150022216 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/FastNodingValidator.java rev. ??? (JTS-1.8) * **********************************************************************/ #ifndef GEOS_NODING_FASTNODINGVALIDATOR_H #define GEOS_NODING_FASTNODINGVALIDATOR_H #include // for composition #include // for composition #include #include #include // Forward declarations namespace geos { namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** \brief * Validates that a collection of {@link SegmentString}s is correctly noded. * * Uses indexes to improve performance. * Does NOT check a-b-a collapse situations. * Also does not check for endpt-interior vertex intersections. * This should not be a problem, since the noders should be * able to compute intersections between vertices correctly. * User may either test the valid condition, or request that a * {@link TopologyException} * be thrown. * * @version 1.7 */ class FastNodingValidator { public: FastNodingValidator(std::vector& newSegStrings) : li(), // robust... segStrings(newSegStrings), segInt(), isValidVar(true) { } /** * Checks for an intersection and * reports if one is found. * * @return true if the arrangement contains an interior intersection */ bool isValid() { execute(); return isValidVar; } /** * Returns an error message indicating the segments containing * the intersection. * * @return an error message documenting the intersection location */ std::string getErrorMessage() const; /** * Checks for an intersection and throws * a TopologyException if one is found. * * @throws TopologyException if an intersection is found */ void checkValid(); private: geos::algorithm::LineIntersector li; std::vector& segStrings; std::auto_ptr segInt; bool isValidVar; void execute() { if (segInt.get() != NULL) return; checkInteriorIntersections(); } void checkInteriorIntersections(); // Declare type as noncopyable FastNodingValidator(const FastNodingValidator& other); FastNodingValidator& operator=(const FastNodingValidator& rhs); }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_FASTNODINGVALIDATOR_H geos-3.4.2/include/geos/noding/FastSegmentSetIntersectionFinder.h0000644000175000017500000000425212206417150024720 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: noding/FastSegmentSetIntersectionFinder.java r388 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_FASTSEGMENTSETINTERSECTIONFINDER_H #define GEOS_NODING_FASTSEGMENTSETINTERSECTIONFINDER_H #include #include //forward declarations namespace geos { namespace noding { class SegmentIntersectionDetector; class SegmentSetMutualIntersector; //class MCIndexSegmentSetMutualIntersector : public SegmentSetMutualIntersector; } } namespace geos { namespace noding { // geos::noding /** \brief * Finds if two sets of {@link SegmentStrings}s intersect. * * Uses indexing for fast performance and to optimize repeated tests * against a target set of lines. * Short-circuited to return as soon an intersection is found. * * @version 1.7 */ class FastSegmentSetIntersectionFinder { private: MCIndexSegmentSetMutualIntersector * segSetMutInt; geos::algorithm::LineIntersector * lineIntersector; protected: public: FastSegmentSetIntersectionFinder( SegmentString::ConstVect * baseSegStrings); ~FastSegmentSetIntersectionFinder(); /** * Gets the segment set intersector used by this class. * This allows other uses of the same underlying indexed structure. * * @return the segment set intersector used */ SegmentSetMutualIntersector * getSegmentSetIntersector() { return segSetMutInt; } bool intersects( SegmentString::ConstVect * segStrings); bool intersects( SegmentString::ConstVect * segStrings, SegmentIntersectionDetector * intDetector); }; } // geos::noding } // geos #endif // GEOS_NODING_FASTSEGMENTSETINTERSECTIONFINDER_H geos-3.4.2/include/geos/noding/GeometryNoder.h0000644000175000017500000000334512206417150021072 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * NOTE: this is not in JTS. JTS has a snapround/GeometryNoder though * **********************************************************************/ #ifndef GEOS_NODING_GEOMETRYNODER_H #define GEOS_NODING_GEOMETRYNODER_H #include #include // for NonConstVect #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class Geometry; } namespace noding { class Noder; } } namespace geos { namespace noding { // geos.noding class GEOS_DLL GeometryNoder { public: static std::auto_ptr node(const geom::Geometry& geom); GeometryNoder(const geom::Geometry& g); std::auto_ptr getNoded(); private: const geom::Geometry& argGeom; SegmentString::NonConstVect lineList; static void extractSegmentStrings(const geom::Geometry& g, SegmentString::NonConstVect& to); Noder& getNoder(); std::auto_ptr noder; std::auto_ptr toGeometry(SegmentString::NonConstVect& noded); GeometryNoder(GeometryNoder const&); /*= delete*/ GeometryNoder& operator=(GeometryNoder const&); /*= delete*/ }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_NODER_H geos-3.4.2/include/geos/noding/IntersectionAdder.h0000644000175000017500000001145512206417150021716 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IntersectionAdder.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_INTERSECTIONADDER_H #define GEOS_NODING_INTERSECTIONADDER_H #include #include #include #include // for abs() #include #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace noding { class SegmentString; } namespace algorithm { class LineIntersector; } } namespace geos { namespace noding { // geos.noding /** * Computes the intersections between two line segments in SegmentString * and adds them to each string. * The {@link SegmentIntersector} is passed to a {@link Noder}. * The {@link addIntersections} method is called whenever the {@link Noder} * detects that two SegmentStrings might intersect. * This class is an example of the Strategy pattern. * */ class GEOS_DLL IntersectionAdder: public SegmentIntersector { private: /** * These variables keep track of what types of intersections were * found during ALL edges that have been intersected. */ bool hasIntersectionVar; bool hasProper; bool hasProperInterior; bool hasInterior; // the proper intersection point found const geom::Coordinate* properIntersectionPoint; algorithm::LineIntersector& li; bool isSelfIntersection; //bool intersectionFound; /** * A trivial intersection is an apparent self-intersection which * in fact is simply the point shared by adjacent line segments. * Note that closed edges require a special check for the point * shared by the beginning and end segments. */ bool isTrivialIntersection(const SegmentString* e0, int segIndex0, const SegmentString* e1, int segIndex1); // Declare type as noncopyable IntersectionAdder(const IntersectionAdder& other); IntersectionAdder& operator=(const IntersectionAdder& rhs); public: int numIntersections; int numInteriorIntersections; int numProperIntersections; // testing only int numTests; IntersectionAdder(algorithm::LineIntersector& newLi) : hasIntersectionVar(false), hasProper(false), hasProperInterior(false), hasInterior(false), properIntersectionPoint(NULL), li(newLi), numIntersections(0), numInteriorIntersections(0), numProperIntersections(0), numTests(0) {} algorithm::LineIntersector& getLineIntersector() { return li; } /** * @return the proper intersection point, or NULL * if none was found */ const geom::Coordinate* getProperIntersectionPoint() { return properIntersectionPoint; } bool hasIntersection() { return hasIntersectionVar; } /** * A proper intersection is an intersection which is interior to * at least two line segments. Note that a proper intersection * is not necessarily in the interior of the entire Geometry, * since another edge may have an endpoint equal to the intersection, * which according to SFS semantics can result in the point being * on the Boundary of the Geometry. */ bool hasProperIntersection() { return hasProper; } /** * A proper interior intersection is a proper intersection which is * not contained in the set of boundary nodes set for this * SegmentIntersector. */ bool hasProperInteriorIntersection() { return hasProperInterior; } /** * An interior intersection is an intersection which is * in the interior of some segment. */ bool hasInteriorIntersection() { return hasInterior; } /** * This method is called by clients * of the {@link SegmentIntersector} class to process * intersections for two segments of the SegmentStrings being * intersected. * Note that some clients (such as MonotoneChains) may optimize away * this call for segment pairs which they have determined do not * intersect (e.g. by an disjoint envelope test). */ void processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1); static bool isAdjacentSegments(int i1, int i2) { return std::abs(i1 - i2) == 1; } /** * Always process all intersections * * @return false always */ virtual bool isDone() const { return false; } }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_INTERSECTIONADDER_H geos-3.4.2/include/geos/noding/IntersectionFinderAdder.h0000644000175000017500000000545012206417150023044 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IntersectionFinderAdder.java rev. 1.5 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_INTERSECTIONFINDERADDER_H #define GEOS_NODING_INTERSECTIONFINDERADDER_H #include #include #include #include #include // for use in vector #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace noding { class SegmentString; } namespace algorithm { class LineIntersector; } } namespace geos { namespace noding { // geos.noding /** \brief * Finds proper and interior intersections in a set of SegmentStrings, * and adds them as nodes. * */ class GEOS_DLL IntersectionFinderAdder: public SegmentIntersector { public: /** * Creates an intersection finder which finds all proper intersections * and stores them in the provided Coordinate array * * @param li the LineIntersector to use * @param v the Vector to push interior intersections to */ IntersectionFinderAdder(algorithm::LineIntersector& newLi, std::vector& v) : li(newLi), interiorIntersections(v) {} /** * This method is called by clients * of the {@link SegmentIntersector} class to process * intersections for two segments of the {@link SegmentStrings} * being intersected. * Note that some clients (such as {@link MonotoneChain}s) may * optimize away this call for segment pairs which they have * determined do not intersect * (e.g. by an disjoint envelope test). */ void processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1); std::vector& getInteriorIntersections() { return interiorIntersections; } /** * Always process all intersections * * @return false always */ virtual bool isDone() const { return false; } private: algorithm::LineIntersector& li; std::vector& interiorIntersections; // Declare type as noncopyable IntersectionFinderAdder(const IntersectionFinderAdder& other); IntersectionFinderAdder& operator=(const IntersectionFinderAdder& rhs); }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_INTERSECTIONFINDERADDER_H geos-3.4.2/include/geos/noding/IteratedNoder.h0000644000175000017500000000575112206417150021043 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IteratedNoder.java r591 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_NODING_ITERATEDNODER_H #define GEOS_NODING_ITERATEDNODER_H #include #include #include #include #include #include // due to inlines #include // for inheritance // Forward declarations namespace geos { namespace geom { class PrecisionModel; } } namespace geos { namespace noding { // geos::noding /** \brief * Nodes a set of SegmentStrings completely. * * The set of segmentStrings is fully noded; * i.e. noding is repeated until no further * intersections are detected. * * Iterated noding using a FLOATING precision model is not guaranteed to converge, * due to roundoff error. This problem is detected and an exception is thrown. * Clients can choose to rerun the noding using a lower precision model. * */ class GEOS_DLL IteratedNoder : public Noder { // implements Noder private: static const int MAX_ITER = 5; const geom::PrecisionModel *pm; algorithm::LineIntersector li; std::vector* nodedSegStrings; int maxIter; /** * Node the input segment strings once * and create the split edges between the nodes */ void node(std::vector* segStrings, int *numInteriorIntersections); public: IteratedNoder(const geom::PrecisionModel *newPm) : pm(newPm), li(pm), maxIter(MAX_ITER) { } virtual ~IteratedNoder() {} /** * Sets the maximum number of noding iterations performed before * the noding is aborted. * Experience suggests that this should rarely need to be changed * from the default. * The default is MAX_ITER. * * @param n the maximum number of iterations to perform */ void setMaximumIterations(int n) { maxIter = n; } std::vector* getNodedSubstrings() const { return nodedSegStrings; } /** * Fully nodes a list of {@link SegmentStrings}, i.e. peforms noding iteratively * until no intersections are found between segments. * Maintains labelling of edges correctly through * the noding. * * @param segStrings a collection of SegmentStrings to be noded * @throws TopologyException if the iterated noding fails to converge. */ void computeNodes(std::vector* inputSegmentStrings); // throw(GEOSException); }; } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_ITERATEDNODER_H geos-3.4.2/include/geos/noding/MCIndexNoder.h0000644000175000017500000000637512206417150020574 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/MCIndexNoder.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_MCINDEXNODER_H #define GEOS_NODING_MCINDEXNODER_H #include #include #include // for inheritance #include // for inheritance #include // for composition #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineSegment; } namespace noding { class SegmentString; class SegmentIntersector; } } namespace geos { namespace noding { // geos.noding /** \brief * Nodes a set of SegmentString using a index based * on index::chain::MonotoneChain and a index::SpatialIndex. * * The {@link SpatialIndex} used should be something that supports * envelope (range) queries efficiently (such as a index::quadtree::Quadtree * or index::strtree::STRtree. * * Last port: noding/MCIndexNoder.java rev. 1.4 (JTS-1.7) */ class GEOS_DLL MCIndexNoder : public SinglePassNoder { private: std::vector monoChains; index::strtree::STRtree index; int idCounter; std::vector* nodedSegStrings; // statistics int nOverlaps; void intersectChains(); void add(SegmentString* segStr); public: MCIndexNoder(SegmentIntersector *nSegInt=NULL) : SinglePassNoder(nSegInt), idCounter(0), nodedSegStrings(NULL), nOverlaps(0) {} ~MCIndexNoder(); /// Return a reference to this instance's std::vector of MonotoneChains std::vector& getMonotoneChains() { return monoChains; } index::SpatialIndex& getIndex(); std::vector* getNodedSubstrings() const; void computeNodes(std::vector* inputSegmentStrings); class SegmentOverlapAction : public index::chain::MonotoneChainOverlapAction { public: SegmentOverlapAction(SegmentIntersector& newSi) : index::chain::MonotoneChainOverlapAction(), si(newSi) {} void overlap(index::chain::MonotoneChain& mc1, std::size_t start1, index::chain::MonotoneChain& mc2, std::size_t start2); private: SegmentIntersector& si; // Declare type as noncopyable SegmentOverlapAction(const SegmentOverlapAction& other); SegmentOverlapAction& operator=(const SegmentOverlapAction& rhs); }; }; } // namespace geos.noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef GEOS_INLINE # include #endif #endif // GEOS_NODING_MCINDEXNODER_H geos-3.4.2/include/geos/noding/MCIndexNoder.inl0000644000175000017500000000237212206417150021120 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/MCIndexNoder.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODINGMCINDEXNODER_INL #define GEOS_NODINGMCINDEXNODER_INL #include #include #include #include namespace geos { namespace noding { // geos::noding INLINE index::SpatialIndex& MCIndexNoder::getIndex() { return index; } INLINE std::vector* MCIndexNoder::getNodedSubstrings() const { assert(nodedSegStrings); // must have colled computeNodes before! return NodedSegmentString::getNodedSubstrings(*nodedSegStrings); } } // namespace geos::noding } // namespace geos #endif // GEOS_NODINGMCINDEXNODER_INL geos-3.4.2/include/geos/noding/MCIndexSegmentSetMutualIntersector.h0000644000175000017500000000660312206417150025207 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: noding/MCIndexSegmentSetMutualIntersector.java r388 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_MCINDEXSEGMENTSETMUTUALINTERSECTOR_H #define GEOS_NODING_MCINDEXSEGMENTSETMUTUALINTERSECTOR_H #include // inherited #include // inherited namespace geos { namespace index { class SpatialIndex; namespace chain { class MonotoneChain; } namespace strtree { //class STRtree; } } namespace noding { class SegmentString; class SegmentIntersector; } } //using namespace geos::index::strtree; namespace geos { namespace noding { // geos::noding /** \brief * Intersects two sets of {@link SegmentStrings} using a index based * on {@link MonotoneChain}s and a {@link SpatialIndex}. * * @version 1.7 */ class MCIndexSegmentSetMutualIntersector : public SegmentSetMutualIntersector { public: MCIndexSegmentSetMutualIntersector(); ~MCIndexSegmentSetMutualIntersector(); /* Returns a reference to a vector of MonotoneChain objects owned * by this class and destroyed on next call to ::process. * Copy them if you need them alive for longer. */ std::vector& getMonotoneChains() { return monoChains; } index::SpatialIndex* getIndex() { return index; } void setBaseSegments(SegmentString::ConstVect* segStrings); // NOTE: re-populates the MonotoneChain vector with newly created chains void process(SegmentString::ConstVect* segStrings); class SegmentOverlapAction : public index::chain::MonotoneChainOverlapAction { private: SegmentIntersector & si; // Declare type as noncopyable SegmentOverlapAction(const SegmentOverlapAction& other); SegmentOverlapAction& operator=(const SegmentOverlapAction& rhs); public: SegmentOverlapAction(SegmentIntersector & si) : index::chain::MonotoneChainOverlapAction(), si(si) {} void overlap(index::chain::MonotoneChain& mc1, std::size_t start1, index::chain::MonotoneChain& mc2, std::size_t start2); }; private: typedef std::vector MonoChains; MonoChains monoChains; /* * The {@link SpatialIndex} used should be something that supports * envelope (range) queries efficiently (such as a {@link Quadtree} * or {@link STRtree}. */ index::SpatialIndex * index; int indexCounter; int processCounter; // statistics int nOverlaps; /* memory management helper, holds MonotoneChain objects used * in the SpatialIndex. It's cleared when the SpatialIndex is */ MonoChains chainStore; void addToIndex( SegmentString * segStr); void intersectChains(); void addToMonoChains( SegmentString * segStr); }; } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_MCINDEXSEGMENTSETMUTUALINTERSECTOR_H geos-3.4.2/include/geos/noding/Makefile.am0000644000175000017500000000161712206417150020172 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snapround EXTRA_DIST = geosdir = $(includedir)/geos/noding geos_HEADERS = \ BasicSegmentString.h \ FastNodingValidator.h \ FastSegmentSetIntersectionFinder.h \ GeometryNoder.h \ IntersectionAdder.h \ IntersectionFinderAdder.h \ IteratedNoder.h \ MCIndexNoder.h \ MCIndexNoder.inl \ MCIndexSegmentSetMutualIntersector.h \ NodableSegmentString.h \ NodedSegmentString.h \ Noder.h \ NodingValidator.h \ Octant.h \ OrientedCoordinateArray.h \ ScaledNoder.h \ SegmentIntersectionDetector.h \ SegmentIntersector.h \ SegmentNode.h \ SegmentNodeList.h \ SegmentPointComparator.h \ SegmentSetMutualIntersector.h \ SegmentString.h \ SegmentStringUtil.h \ SimpleNoder.h \ SingleInteriorIntersectionFinder.h \ SinglePassNoder.h geos-3.4.2/include/geos/noding/Makefile.in0000644000175000017500000005227312206417161020211 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/noding DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snapround EXTRA_DIST = geosdir = $(includedir)/geos/noding geos_HEADERS = \ BasicSegmentString.h \ FastNodingValidator.h \ FastSegmentSetIntersectionFinder.h \ GeometryNoder.h \ IntersectionAdder.h \ IntersectionFinderAdder.h \ IteratedNoder.h \ MCIndexNoder.h \ MCIndexNoder.inl \ MCIndexSegmentSetMutualIntersector.h \ NodableSegmentString.h \ NodedSegmentString.h \ Noder.h \ NodingValidator.h \ Octant.h \ OrientedCoordinateArray.h \ ScaledNoder.h \ SegmentIntersectionDetector.h \ SegmentIntersector.h \ SegmentNode.h \ SegmentNodeList.h \ SegmentPointComparator.h \ SegmentSetMutualIntersector.h \ SegmentString.h \ SegmentStringUtil.h \ SimpleNoder.h \ SingleInteriorIntersectionFinder.h \ SinglePassNoder.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/noding/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/noding/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/noding/NodableSegmentString.h0000644000175000017500000000271712206417150022367 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_NODING_NODABLESEGMENTSTRING_H #define GEOS_NODING_NODABLESEGMENTSTRING_H #include #include // for inheritance namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace noding { // geos::noding /** \brief * An interface for classes which support adding nodes to * a segment string. * * @author Martin Davis */ class GEOS_DLL NodableSegmentString : public SegmentString { private: protected: public: NodableSegmentString(const void* newContext) : SegmentString( newContext ) { } /** * Adds an intersection node for a given point and segment to this segment string. * * @param intPt the location of the intersection * @param segmentIndex the index of the segment containing the intersection */ //virtual void addIntersection( const geom::Coordinate * intPt, int segmentIndex) =0; }; } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_NODABLESEGMENTSTRING_H geos-3.4.2/include/geos/noding/NodedSegmentString.h0000644000175000017500000001436512206417150022056 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: noding/NodedSegmentString.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_NODEDSEGMENTSTRING_H #define GEOS_NODING_NODEDSEGMENTSTRING_H #include #include // for inheritance #include // for inlines #include #include #include #include //#include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251 4355) // warning C4355: 'this' : used in base member initializer list #endif namespace geos { namespace noding { // geos::noding /** \brief * Represents a list of contiguous line segments, * and supports noding the segments. * * The line segments are represented by an array of {@link Coordinate}s. * Intended to optimize the noding of contiguous segments by * reducing the number of allocated objects. * SegmentStrings can carry a context object, which is useful * for preserving topological or parentage information. * All noded substrings are initialized with the same context object. * */ class GEOS_DLL NodedSegmentString : public NodableSegmentString { public: // TODO: provide a templated method using an output iterator template static void getNodedSubstrings(II from, II too_far, SegmentString::NonConstVect* resultEdgelist) { for (II i=from; i != too_far; ++i) { NodedSegmentString * nss = dynamic_cast(*i); assert(nss); nss->getNodeList().addSplitEdges(resultEdgelist); } } template static void getNodedSubstrings(C *segStrings, SegmentString::NonConstVect* resultEdgelist) { getNodedSubstrings(segStrings->begin(), segStrings->end(), resultEdgelist); } static void getNodedSubstrings(const SegmentString::NonConstVect& segStrings, SegmentString::NonConstVect* resultEdgeList); /// Returns allocated object static SegmentString::NonConstVect* getNodedSubstrings( const SegmentString::NonConstVect& segStrings); /** * Creates a new segment string from a list of vertices. * * @param newPts CoordinateSequence representing the string, * ownership transferred. * * @param data the user-defined data of this segment string * (may be null) */ NodedSegmentString(geom::CoordinateSequence *newPts, const void* newContext) : NodableSegmentString(newContext) , nodeList(this) , pts(newPts) {} ~NodedSegmentString() { delete pts; } /** * Adds an intersection node for a given point and segment to this segment string. * If an intersection already exists for this exact location, the existing * node will be returned. * * @param intPt the location of the intersection * @param segmentIndex the index of the segment containing the intersection * @return the intersection node for the point */ SegmentNode* addIntersectionNode( geom::Coordinate * intPt, std::size_t segmentIndex) { std::size_t normalizedSegmentIndex = segmentIndex; // normalize the intersection point location std::size_t nextSegIndex = normalizedSegmentIndex + 1; if (nextSegIndex < size()) { geom::Coordinate const& nextPt = getCoordinate(static_cast(nextSegIndex)); // Normalize segment index if intPt falls on vertex // The check for point equality is 2D only - Z values are ignored if ( intPt->equals2D( nextPt )) { normalizedSegmentIndex = nextSegIndex; } } // Add the intersection point to edge intersection list. SegmentNode * ei = getNodeList().add( *intPt, normalizedSegmentIndex); return ei; } SegmentNodeList& getNodeList(); const SegmentNodeList& getNodeList() const; virtual unsigned int size() const { return static_cast(pts->size()); } virtual const geom::Coordinate& getCoordinate(unsigned int i) const; virtual geom::CoordinateSequence* getCoordinates() const; virtual bool isClosed() const; virtual std::ostream& print(std::ostream& os) const; /** \brief * Gets the octant of the segment starting at vertex index. * * @param index the index of the vertex starting the segment. * Must not be the last index in the vertex list * @return the octant of the segment at the vertex */ int getSegmentOctant(unsigned int index) const; /** \brief * Add {SegmentNode}s for one or both * intersections found for a segment of an edge to the edge * intersection list. */ void addIntersections(algorithm::LineIntersector *li, unsigned int segmentIndex, int geomIndex); /** \brief * Add an SegmentNode for intersection intIndex. * * An intersection that falls exactly on a vertex * of the SegmentString is normalized * to use the higher of the two possible segmentIndexes */ void addIntersection(algorithm::LineIntersector *li, unsigned int segmentIndex, int geomIndex, int intIndex); /** \brief * Add an SegmentNode for intersection intIndex. * * An intersection that falls exactly on a vertex of the * edge is normalized * to use the higher of the two possible segmentIndexes */ void addIntersection(const geom::Coordinate& intPt, unsigned int segmentIndex); private: SegmentNodeList nodeList; geom::CoordinateSequence *pts; static int safeOctant(const geom::Coordinate& p0, const geom::Coordinate& p1); }; } // namespace geos::noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_NODING_NODEDSEGMENTSTRING_H geos-3.4.2/include/geos/noding/Noder.h0000644000175000017500000000417712206417150017362 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_NODER_H #define GEOS_NODING_NODER_H #include #include #include #include // Forward declarations namespace geos { namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** \brief * Computes all intersections between segments in a set of SegmentString. * * Intersections found are represented as {@link SegmentNode}s and added to the * {@link SegmentString}s in which they occur. * As a final step in the noding a new set of segment strings split * at the nodes may be returned. * * Last port: noding/Noder.java rev. 1.8 (JTS-1.7) * * TODO: this was really an interface, we should avoid making it a Base class * */ class GEOS_DLL Noder { public: /** \brief * Computes the noding for a collection of {@link SegmentString}s. * * Some Noders may add all these nodes to the input SegmentStrings; * others may only add some or none at all. * * @param segStrings a collection of {@link SegmentString}s to node */ virtual void computeNodes(std::vector* segStrings)=0; /** \brief * Returns a {@link Collection} of fully noded {@link SegmentStrings}. * The SegmentStrings have the same context as their parent. * * @return a newly allocated std::vector of const SegmentStrings. * Caller is responsible to delete container and elements. */ virtual std::vector* getNodedSubstrings() const=0; virtual ~Noder() {} protected: Noder(){} }; } // namespace geos.noding } // namespace geos //#ifdef GEOS_INLINE //# include "geos/noding/Noder.inl" //#endif #endif // GEOS_NODING_NODER_H geos-3.4.2/include/geos/noding/NodingValidator.h0000644000175000017500000000551512206417150021374 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_NODINGVALIDATOR_H #define GEOS_NODING_NODINGVALIDATOR_H #include #include #include #include #include //#include // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** * Validates that a collection of {@link SegmentString}s is correctly noded. * Throws a TopologyException if a noding error is found. * * Last port: noding/NodingValidator.java rev. 1.6 (JTS-1.7) * */ class GEOS_DLL NodingValidator { private: algorithm::LineIntersector li; const std::vector& segStrings; /** * Checks if a segment string contains a segment * pattern a-b-a (which implies a self-intersection) */ void checkCollapses() const; void checkCollapses(const SegmentString& ss) const; void checkCollapse(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) const; /** * Checks all pairs of segments for intersections at an * interior point of a segment */ void checkInteriorIntersections(); void checkInteriorIntersections(const SegmentString& ss0, const SegmentString& ss1); void checkInteriorIntersections( const SegmentString& e0, unsigned int segIndex0, const SegmentString& e1, unsigned int segIndex1); /** * Checks for intersections between an endpoint of a segment string * and an interior vertex of another segment string */ void checkEndPtVertexIntersections() const; void checkEndPtVertexIntersections(const geom::Coordinate& testPt, const std::vector& segStrings) const; /** * @return true if there is an intersection point which is not an * endpoint of the segment p0-p1 */ bool hasInteriorIntersection(const algorithm::LineIntersector& aLi, const geom::Coordinate& p0, const geom::Coordinate& p1) const; // Declare type as noncopyable NodingValidator(const NodingValidator& other); NodingValidator& operator=(const NodingValidator& rhs); public: NodingValidator(const std::vector& newSegStrings): segStrings(newSegStrings) {} ~NodingValidator() {} void checkValid(); }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_NODINGVALIDATOR_H geos-3.4.2/include/geos/noding/Octant.h0000644000175000017500000000331212206417150017531 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_OCTANT_H #define GEOS_NODING_OCTANT_H #include #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace noding { // geos.noding /** \brief * Methods for computing and working with octants of the Cartesian plane. * * Octants are numbered as follows: * * 2|1 * 3 | 0 * ---+-- * 4 | 7 * 5|6 * * If line segments lie along a coordinate axis, the octant is the lower of the two * possible values. * * Last port: noding/Octant.java rev. 1.2 (JTS-1.7) */ class GEOS_DLL Octant { private: Octant() {} // Can't instanciate it public: /** * Returns the octant of a directed line segment (specified * as x and y displacements, which cannot both be 0). */ static int octant(double dx, double dy); /** * Returns the octant of a directed line segment from p0 to p1. */ static int octant(const geom::Coordinate& p0, const geom::Coordinate& p1); static int octant(const geom::Coordinate* p0, const geom::Coordinate* p1) { ::geos::ignore_unused_variable_warning(p0); return octant(*p0, *p1); } }; } // namespace geos.noding } // namespace geos #endif geos-3.4.2/include/geos/noding/OrientedCoordinateArray.h0000644000175000017500000000566112206417150023072 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/OrientedCoordinateArray.java rev. 1.1 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_ORIENTEDCOORDINATEARRAY_H #define GEOS_NODING_ORIENTEDCOORDINATEARRAY_H #include //#include //#include //#include // Forward declarations namespace geos { namespace geom { class CoordinateSequence; } namespace noding { //class SegmentString; } } namespace geos { namespace noding { // geos.noding /** \brief * Allows comparing {@link geom::CoordinateSequence}s * in an orientation-independent way. */ class GEOS_DLL OrientedCoordinateArray { public: /** * Creates a new {@link OrientedCoordinateArray} * for the given {@link geom::CoordinateSequence}. * * @param pts the coordinates to orient */ OrientedCoordinateArray(const geom::CoordinateSequence& pts) : pts(&pts), orientationVar(orientation(pts)) { } /** \brief * Compares two {@link OrientedCoordinateArray}s for their * relative order * * @return -1 this one is smaller * @return 0 the two objects are equal * @return 1 this one is greater * * In JTS, this is used automatically by ordered lists. * In C++, operator< would be used instead.... */ int compareTo(const OrientedCoordinateArray& o1) const; private: static int compareOriented(const geom::CoordinateSequence& pts1, bool orientation1, const geom::CoordinateSequence& pts2, bool orientation2); /** * Computes the canonical orientation for a coordinate array. * * @param pts the array to test * @return true if the points are oriented forwards * @return false #include #include #include #include // for inheritance //#include // for inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateSequence; } namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** \brief * Wraps a {@link Noder} and transforms its input * into the integer domain. * * This is intended for use with Snap-Rounding noders, * which typically are only intended to work in the integer domain. * Offsets can be provided to increase the number of digits of * available precision. * */ class GEOS_DLL ScaledNoder : public Noder { // , public geom::CoordinateFilter { // implements Noder public: bool isIntegerPrecision() { return (scaleFactor == 1.0); } ScaledNoder(Noder& n, double nScaleFactor, double nOffsetX=0.0, double nOffsetY=0.0) : noder(n), scaleFactor(nScaleFactor), offsetX(nOffsetX), offsetY(nOffsetY), isScaled(nScaleFactor!=1.0) {} ~ScaledNoder(); std::vector* getNodedSubstrings() const; void computeNodes(std::vector* inputSegStr); //void filter(Coordinate& c); void filter_ro(const geom::Coordinate* c) { ::geos::ignore_unused_variable_warning(c); assert(0); } void filter_rw(geom::Coordinate* c) const; private: Noder& noder; double scaleFactor; double offsetX; double offsetY; bool isScaled; void rescale(std::vector& segStrings) const; void scale(std::vector& segStrings) const; class Scaler; class ReScaler; friend class ScaledNoder::Scaler; friend class ScaledNoder::ReScaler; mutable std::vector newCoordSeq; // Declare type as noncopyable ScaledNoder(const ScaledNoder& other); ScaledNoder& operator=(const ScaledNoder& rhs); }; } // namespace geos.noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_NODING_SCALEDNODER_H geos-3.4.2/include/geos/noding/SegmentIntersectionDetector.h0000644000175000017500000001015312206417150023765 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_GEOM_PREP_SEGMENTINTERSECTIONDETECTOR_H #define GEOS_GEOM_PREP_SEGMENTINTERSECTIONDETECTOR_H #include #include #include #include #include using namespace geos::algorithm; namespace geos { namespace noding { // geos::noding /** \brief * Detects and records an intersection between two {@link SegmentString}s, * if one exists. * * This strategy can be configured to search for proper intersections. * In this case, the presence of any intersection will still be recorded, * but searching will continue until either a proper intersection has been found * or no intersections are detected. * * Only a single intersection is recorded. * * @version 1.7 */ class SegmentIntersectionDetector : public SegmentIntersector { private: LineIntersector * li; bool findProper; bool findAllTypes; bool _hasIntersection; bool _hasProperIntersection; bool _hasNonProperIntersection; const geom::Coordinate * intPt; geom::CoordinateSequence * intSegments; protected: public: SegmentIntersectionDetector( LineIntersector * li) : li( li), findProper(false), findAllTypes(false), _hasIntersection(false), _hasProperIntersection(false), _hasNonProperIntersection(false), intPt( NULL), intSegments( NULL) { } ~SegmentIntersectionDetector() { //delete intPt; delete intSegments; } void setFindProper( bool findProper) { this->findProper = findProper; } void setFindAllIntersectionTypes( bool findAllTypes) { this->findAllTypes = findAllTypes; } /** * Tests whether an intersection was found. * * @return true if an intersection was found */ bool hasIntersection() const { return _hasIntersection; } /** * Tests whether a proper intersection was found. * * @return true if a proper intersection was found */ bool hasProperIntersection() const { return _hasProperIntersection; } /** * Tests whether a non-proper intersection was found. * * @return true if a non-proper intersection was found */ bool hasNonProperIntersection() const { return _hasNonProperIntersection; } /** * Gets the computed location of the intersection. * Due to round-off, the location may not be exact. * * @return the coordinate for the intersection location */ const geom::Coordinate * const getIntersection() const { return intPt; } /** * Gets the endpoints of the intersecting segments. * * @return an array of the segment endpoints (p00, p01, p10, p11) */ const geom::CoordinateSequence * getIntersectionSegments() const { return intSegments; } bool isDone() const { // If finding all types, we can stop // when both possible types have been found. if (findAllTypes) return _hasProperIntersection && _hasNonProperIntersection; // If searching for a proper intersection, only stop if one is found if (findProper) return _hasProperIntersection; return _hasIntersection; } /** * This method is called by clients * of the {@link SegmentIntersector} class to process * intersections for two segments of the {@link SegmentStrings} being intersected. * Note that some clients (such as {@link MonotoneChain}s) may optimize away * this call for segment pairs which they have determined do not intersect * (e.g. by an disjoint envelope test). */ void processIntersections( noding::SegmentString * e0, int segIndex0, noding::SegmentString * e1, int segIndex1 ); }; } // namespace geos::noding } // namespace geos #endif // GEOS_GEOM_PREP_SEGMENTINTERSECTIONDETECTOR_H geos-3.4.2/include/geos/noding/SegmentIntersector.h0000644000175000017500000000433112206417150022127 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTINTERSECTOR_H #define GEOS_NODING_SEGMENTINTERSECTOR_H #include #include // Forward declarations namespace geos { namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** * \brief * Processes possible intersections detected by a Noder. * * The SegmentIntersector is passed to a Noder. * The addIntersections method is called whenever the Noder * detects that two SegmentStrings might intersect. * This class may be used either to find all intersections, or * to detect the presence of an intersection. In the latter case, * Noders may choose to short-circuit their computation by calling the * isDone method. * This class is an example of the Strategy pattern. * * @version 1.7 */ class GEOS_DLL SegmentIntersector { public: /** * This method is called by clients * of the SegmentIntersector interface to process * intersections for two segments of the SegmentStrings * being intersected. */ virtual void processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1)=0; /** * \brief * Reports whether the client of this class * needs to continue testing all intersections in an arrangement. * * @return true if there is not need to continue testing segments * * The default implementation always return false (process all intersections). */ virtual bool isDone() const { return false; } virtual ~SegmentIntersector() { } protected: SegmentIntersector() {} }; /// Temporary typedef for namespace transition typedef SegmentIntersector nodingSegmentIntersector; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SEGMENTINTERSECTOR_H geos-3.4.2/include/geos/noding/SegmentNode.h0000644000175000017500000000565712206417150020527 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentNode.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTNODE_H #define GEOS_NODING_SEGMENTNODE_H #include #include #include #include #include // Forward declarations namespace geos { namespace noding { class NodedSegmentString; } } namespace geos { namespace noding { // geos.noding /// Represents an intersection point between two NodedSegmentString. // /// Final class. /// class GEOS_DLL SegmentNode { private: const NodedSegmentString& segString; int segmentOctant; bool isInteriorVar; // Declare type as noncopyable SegmentNode(const SegmentNode& other); SegmentNode& operator=(const SegmentNode& rhs); public: friend std::ostream& operator<< (std::ostream& os, const SegmentNode& n); /// the point of intersection (own copy) geom::Coordinate coord; /// the index of the containing line segment in the parent edge unsigned int segmentIndex; /// Construct a node on the given NodedSegmentString // /// @param ss the parent NodedSegmentString /// /// @param coord the coordinate of the intersection, will be copied /// /// @param nSegmentIndex the index of the segment on parent /// NodedSegmentString /// where the Node is located. /// /// @param nSegmentOctant /// SegmentNode(const NodedSegmentString& ss, const geom::Coordinate& nCoord, unsigned int nSegmentIndex, int nSegmentOctant); ~SegmentNode() {} /// \brief /// Return true if this Node is *internal* (not on the boundary) /// of the corresponding segment. Currently only the *first* /// segment endpoint is checked, actually. /// bool isInterior() const { return isInteriorVar; } bool isEndPoint(unsigned int maxSegmentIndex) const; /** * @return -1 this EdgeIntersection is located before * the argument location * @return 0 this EdgeIntersection is at the argument location * @return 1 this EdgeIntersection is located after the * argument location */ int compareTo(const SegmentNode& other); //string print() const; }; std::ostream& operator<< (std::ostream& os, const SegmentNode& n); struct GEOS_DLL SegmentNodeLT { bool operator()(SegmentNode *s1, SegmentNode *s2) const { return s1->compareTo(*s2)<0; } }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SEGMENTNODE_H geos-3.4.2/include/geos/noding/SegmentNodeList.h0000644000175000017500000001264612206417150021357 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentNodeList.java rev. 1.8 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTNODELIST_H #define GEOS_NODING_SEGMENTNODELIST_H #include #include #include #include #include #include #include // for composition #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class CoordinateSequence; } namespace noding { class SegmentString; class NodedSegmentString; } } namespace geos { namespace noding { // geos::noding /** \brief * A list of the SegmentNode present along a * NodedSegmentString. */ class GEOS_DLL SegmentNodeList { private: std::set nodeMap; // the parent edge const NodedSegmentString& edge; /** * Checks the correctness of the set of split edges corresponding * to this edge * * @param splitEdges the split edges for this edge (in order) */ void checkSplitEdgesCorrectness(std::vector& splitEdges); /** * Create a new "split edge" with the section of points between * (and including) the two intersections. * The label for the new edge is the same as the label for the * parent edge. * * ownership of return value is transferred */ SegmentString* createSplitEdge(SegmentNode *ei0, SegmentNode *ei1); /** * Adds nodes for any collapsed edge pairs. * Collapsed edge pairs can be caused by inserted nodes, or they * can be pre-existing in the edge vertex list. * In order to provide the correct fully noded semantics, * the vertex at the base of a collapsed pair must also be added * as a node. */ void addCollapsedNodes(); /** * Adds nodes for any collapsed edge pairs * which are pre-existing in the vertex list. */ void findCollapsesFromExistingVertices( std::vector& collapsedVertexIndexes); /** * Adds nodes for any collapsed edge pairs caused by inserted nodes * Collapsed edge pairs occur when the same coordinate is inserted * as a node both before and after an existing edge vertex. * To provide the correct fully noded semantics, * the vertex must be added as a node as well. */ void findCollapsesFromInsertedNodes( std::vector& collapsedVertexIndexes); bool findCollapseIndex(SegmentNode& ei0, SegmentNode& ei1, size_t& collapsedVertexIndex); // Declare type as noncopyable SegmentNodeList(const SegmentNodeList& other); SegmentNodeList& operator=(const SegmentNodeList& rhs); public: friend std::ostream& operator<< (std::ostream& os, const SegmentNodeList& l); typedef std::set container; typedef container::iterator iterator; typedef container::const_iterator const_iterator; SegmentNodeList(const NodedSegmentString* newEdge): edge(*newEdge) {} SegmentNodeList(const NodedSegmentString& newEdge): edge(newEdge) {} const NodedSegmentString& getEdge() const { return edge; } // TODO: Is this a final class ? // Should remove the virtual in that case virtual ~SegmentNodeList(); /** * Adds an intersection into the list, if it isn't already there. * The input segmentIndex is expected to be normalized. * * @return the SegmentIntersection found or added. It will be * destroyed at SegmentNodeList destruction time. * * @param intPt the intersection Coordinate, will be copied * @param segmentIndex */ SegmentNode* add(const geom::Coordinate& intPt, std::size_t segmentIndex); SegmentNode* add(const geom::Coordinate *intPt, std::size_t segmentIndex) { return add(*intPt, segmentIndex); } /* * returns the set of SegmentNodes */ //replaces iterator() // TODO: obsolete this function std::set* getNodes() { return &nodeMap; } /// Return the number of nodes in this list size_t size() const { return nodeMap.size(); } container::iterator begin() { return nodeMap.begin(); } container::const_iterator begin() const { return nodeMap.begin(); } container::iterator end() { return nodeMap.end(); } container::const_iterator end() const { return nodeMap.end(); } /** * Adds entries for the first and last points of the edge to the list */ void addEndpoints(); /** * Creates new edges for all the edges that the intersections in this * list split the parent edge into. * Adds the edges to the input list (this is so a single list * can be used to accumulate all split edges for a Geometry). */ void addSplitEdges(std::vector& edgeList); void addSplitEdges(std::vector* edgeList) { assert(edgeList); addSplitEdges(*edgeList); } //string print(); }; std::ostream& operator<< (std::ostream& os, const SegmentNodeList& l); } // namespace geos::noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif geos-3.4.2/include/geos/noding/SegmentPointComparator.h0000644000175000017500000000516212206417150022752 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentPointComparator.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTPOINTCOMPARATOR_H #define GEOS_NODING_SEGMENTPOINTCOMPARATOR_H #include #include #include namespace geos { namespace noding { // geos.noding /** * Implements a robust method of comparing the relative position of two * points along the same segment. * The coordinates are assumed to lie "near" the segment. * This means that this algorithm will only return correct results * if the input coordinates * have the same precision and correspond to rounded values * of exact coordinates lying on the segment. * */ class GEOS_DLL SegmentPointComparator { public: /** * Compares two Coordinates for their relative position along a * segment lying in the specified Octant. * * @return -1 node0 occurs first * @return 0 the two nodes are equal * @return 1 node1 occurs first */ static int compare(int octant, const geom::Coordinate& p0, const geom::Coordinate& p1) { // nodes can only be equal if their coordinates are equal if (p0.equals2D(p1)) return 0; int xSign = relativeSign(p0.x, p1.x); int ySign = relativeSign(p0.y, p1.y); switch (octant) { case 0: return compareValue(xSign, ySign); case 1: return compareValue(ySign, xSign); case 2: return compareValue(ySign, -xSign); case 3: return compareValue(-xSign, ySign); case 4: return compareValue(-xSign, -ySign); case 5: return compareValue(-ySign, -xSign); case 6: return compareValue(-ySign, xSign); case 7: return compareValue(xSign, -ySign); } assert(0); // invalid octant value return 0; } static int relativeSign(double x0, double x1) { if (x0 < x1) return -1; if (x0 > x1) return 1; return 0; } static int compareValue(int compareSign0, int compareSign1) { if (compareSign0 < 0) return -1; if (compareSign0 > 0) return 1; if (compareSign1 < 0) return -1; if (compareSign1 > 0) return 1; return 0; } }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SEGMENTPOINTCOMPARATOR_H geos-3.4.2/include/geos/noding/SegmentSetMutualIntersector.h0000644000175000017500000000407712206417150024002 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTSETMUTUALINTERSECTOR_H #define GEOS_NODING_SEGMENTSETMUTUALINTERSECTOR_H #include #include namespace geos { namespace noding { // geos::noding /** \brief * An intersector for the red-blue intersection problem. * * In this class of line arrangement problem, * two disjoint sets of linestrings are provided. * It is assumed that within * each set, no two linestrings intersect except possibly at their endpoints. * Implementations can take advantage of this fact to optimize processing. * * @author Martin Davis * @version 1.10 */ class SegmentSetMutualIntersector { public: SegmentSetMutualIntersector() : segInt(0) {} virtual ~SegmentSetMutualIntersector() {} /** * Sets the {@link SegmentIntersector} to use with this intersector. * The SegmentIntersector will either rocord or add intersection nodes * for the input segment strings. * * @param segInt the segment intersector to use */ void setSegmentIntersector(SegmentIntersector* si) { segInt = si; } /** * * @param segStrings0 a collection of {@link SegmentString}s to node */ virtual void setBaseSegments(SegmentString::ConstVect* segStrings) = 0; /** * Computes the intersections for two collections of {@link SegmentString}s. * * @param segStrings1 a collection of {@link SegmentString}s to node */ virtual void process(SegmentString::ConstVect* segStrings) = 0; protected: SegmentIntersector* segInt; }; } // geos::noding } // geos #endif // GEOS_NODING_SEGMENTSETMUTUALINTERSECTOR_H geos-3.4.2/include/geos/noding/SegmentString.h0000644000175000017500000000533512206417150021101 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentString.java r430 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTSTRING_H #define GEOS_NODING_SEGMENTSTRING_H #include #include #include // Forward declarations namespace geos { namespace algorithm { class LineIntersector; } } namespace geos { namespace noding { // geos.noding /** \brief * An interface for classes which represent a sequence of contiguous * line segments. * * SegmentStrings can carry a context object, which is useful * for preserving topological or parentage information. */ class GEOS_DLL SegmentString { public: typedef std::vector ConstVect; typedef std::vector NonConstVect; friend std::ostream& operator<< (std::ostream& os, const SegmentString& ss); /// Construct a SegmentString. // /// @param newContext the context associated to this SegmentString /// SegmentString(const void* newContext) : context(newContext) {} virtual ~SegmentString() {} /** * Gets the user-defined data for this segment string. * * @return the user-defined data */ const void* getData() const { return context; } /** * Sets the user-defined data for this segment string. * * @param data an Object containing user-defined data */ void setData(const void* data) { context=data; } virtual unsigned int size() const=0; virtual const geom::Coordinate& getCoordinate(unsigned int i) const=0; /// \brief /// Return a pointer to the CoordinateSequence associated /// with this SegmentString. // /// Note that the CoordinateSequence is owned by this SegmentString! /// virtual geom::CoordinateSequence* getCoordinates() const=0; virtual bool isClosed() const=0; virtual std::ostream& print(std::ostream& os) const; private: const void* context; // Declare type as noncopyable SegmentString(const SegmentString& other); SegmentString& operator=(const SegmentString& rhs); }; std::ostream& operator<< (std::ostream& os, const SegmentString& ss); } // namespace geos.noding } // namespace geos #endif geos-3.4.2/include/geos/noding/SegmentStringUtil.h0000644000175000017500000000411612206417150021733 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ********************************************************************** * * Last port: noding/SegmentStringUtil.java rev. 1.2 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_SEGMENTSTRINGUTIL_H #define GEOS_NODING_SEGMENTSTRINGUTIL_H #include #include #include #include namespace geos { namespace noding { // geos::noding /** \brief * Utility methods for processing {@link SegmentString}s. * * @author Martin Davis * */ class SegmentStringUtil { public: /** \brief * Extracts all linear components from a given {@link Geometry} * to {@link SegmentString}s. * * The SegmentString data item is set to be the source Geometry. * * @param geom the geometry to extract from * @param segStr a List of SegmentStrings (output parameter). * Ownership of elements pushed to the vector * is transferred to caller. */ static void extractSegmentStrings(const geom::Geometry * g, SegmentString::ConstVect& segStr) { geom::LineString::ConstVect lines; geom::util::LinearComponentExtracter::getLines(*g, lines); for (std::size_t i=0, n=lines.size(); igetCoordinates(); segStr.push_back(new NodedSegmentString(pts, g)); } } }; } // geos::noding } // geos #endif // GEOS_NODING_SEGMENTSTRINGUTIL_H geos-3.4.2/include/geos/noding/SimpleNoder.h0000644000175000017500000000344112206417150020525 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SimpleNoder.java rev. 1.7 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_NODING_SIMPLENODER_H #define GEOS_NODING_SIMPLENODER_H #include #include #include #include #include // for inlined (FIXME) // Forward declarations namespace geos { namespace noding { //class SegmentString; } } namespace geos { namespace noding { // geos.noding /** \brief * Nodes a set of {@link SegmentString}s by * performing a brute-force comparison of every segment to every other one. * * This has n^2 performance, so is too slow for use on large numbers * of segments. * * @version 1.7 */ class GEOS_DLL SimpleNoder: public SinglePassNoder { private: std::vector* nodedSegStrings; virtual void computeIntersects(SegmentString *e0, SegmentString *e1); public: SimpleNoder(SegmentIntersector* nSegInt=NULL) : SinglePassNoder(nSegInt) {} void computeNodes(std::vector* inputSegmentStrings); std::vector* getNodedSubstrings() const { return NodedSegmentString::getNodedSubstrings(*nodedSegStrings); } }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SIMPLENODER_H geos-3.4.2/include/geos/noding/SingleInteriorIntersectionFinder.h0000644000175000017500000000621612206417150024763 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_SINGLEINTERIORINTERSECTIONFINDER_H #define GEOS_NODING_SINGLEINTERIORINTERSECTIONFINDER_H #include // for inheritance #include // for composition #include // Forward declarations namespace geos { namespace algorithm { class LineIntersector; } namespace noding { class SegmentString; } } namespace geos { namespace noding { // geos.noding /** * \brief * Finds an interior intersection in a set of SegmentString, * if one exists. Only the first intersection found is reported. * * @version 1.7 */ class SingleInteriorIntersectionFinder: public SegmentIntersector { public: /** \brief * Creates an intersection finder which finds an interior intersection * if one exists * * @param li the LineIntersector to use */ SingleInteriorIntersectionFinder(algorithm::LineIntersector& newLi) : li(newLi), interiorIntersection(geom::Coordinate::getNull()) { } /** \brief * Tests whether an intersection was found. * * @return true if an intersection was found */ bool hasIntersection() const { return !interiorIntersection.isNull(); } /** \brief * Gets the computed location of the intersection. * Due to round-off, the location may not be exact. * * @return the coordinate for the intersection location */ const geom::Coordinate& getInteriorIntersection() const { return interiorIntersection; } /** \brief * Gets the endpoints of the intersecting segments. * * @return an array of the segment endpoints (p00, p01, p10, p11) */ const std::vector& getIntersectionSegments() const { return intSegments; } /** \brief * This method is called by clients * of the {@link SegmentIntersector} class to process * intersections for two segments of the {@link SegmentStrings} being intersected. * * Note that some clients (such as {@link MonotoneChain}s) may optimize away * this call for segment pairs which they have determined do not intersect * (e.g. by an disjoint envelope test). */ void processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1); bool isDone() const { return !interiorIntersection.isNull(); } private: algorithm::LineIntersector& li; geom::Coordinate interiorIntersection; std::vector intSegments; // Declare type as noncopyable SingleInteriorIntersectionFinder(const SingleInteriorIntersectionFinder& other); SingleInteriorIntersectionFinder& operator=(const SingleInteriorIntersectionFinder& rhs); }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SINGLEINTERIORINTERSECTIONFINDER_H geos-3.4.2/include/geos/noding/SinglePassNoder.h0000644000175000017500000000462212206417150021346 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_SINGLEPASSNODER_H #define GEOS_NODING_SINGLEPASSNODER_H #include #include #include #include // Forward declarations namespace geos { namespace noding { class SegmentString; class SegmentIntersector; } } namespace geos { namespace noding { // geos.noding /** * Base class for {@link Noder}s which make a single * pass to find intersections. * This allows using a custom {@link SegmentIntersector} * (which for instance may simply identify intersections, rather than * insert them). * * Last port: noding/SinglePassNoder.java rev. 1.3 (JTS-1.7) * * TODO: Noder inheritance (that's just an interface!) * */ class GEOS_DLL SinglePassNoder : public Noder { // implements Noder protected: /// Externally owned SegmentIntersector* segInt; public: SinglePassNoder(SegmentIntersector* nSegInt=NULL): segInt(nSegInt) {} virtual ~SinglePassNoder() {} /** * Sets the SegmentIntersector to use with this noder. * A SegmentIntersector will normally add intersection nodes * to the input segment strings, but it may not - it may * simply record the presence of intersections. * However, some Noders may require that intersections be added. * * @param newSegInt */ virtual void setSegmentIntersector(SegmentIntersector* newSegInt) { segInt = newSegInt; } /** * Computes the noding for a collection of {@link SegmentString}s. * * @param segStrings a collection of {@link SegmentString}s to node */ virtual void computeNodes(std::vector* segStrings)=0; /** * Returns a {@link Collection} of fully noded {@link SegmentStrings}. * The SegmentStrings have the same context as their parent. * * @return a Collection of SegmentStrings */ virtual std::vector* getNodedSubstrings() const=0; }; } // namespace geos.noding } // namespace geos #endif // GEOS_NODING_SINGLEPASSNODER_H geos-3.4.2/include/geos/noding/snapround/0000755000175000017500000000000012206417227020147 5ustar frankiefrankiegeos-3.4.2/include/geos/noding/snapround/HotPixel.h0000644000175000017500000001316712206417150022057 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/HotPixel.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_HOTPIXEL_H #define GEOS_NODING_SNAPROUND_HOTPIXEL_H #include #include #include // for composition #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Envelope; } namespace algorithm { class LineIntersector; } namespace noding { class NodedSegmentString; } } namespace geos { namespace noding { // geos::noding namespace snapround { // geos::noding::snapround /** \brief * Implements a "hot pixel" as used in the Snap Rounding algorithm. * * A hot pixel contains the interior of the tolerance square and * the boundary * minus the top and right segments. * * The hot pixel operations are all computed in the integer domain * to avoid rounding problems. * */ class GEOS_DLL HotPixel { private: algorithm::LineIntersector& li; geom::Coordinate pt; const geom::Coordinate& originalPt; geom::Coordinate ptScaled; mutable geom::Coordinate p0Scaled; mutable geom::Coordinate p1Scaled; double scaleFactor; double minx; double maxx; double miny; double maxy; /** \brief * The corners of the hot pixel * * In the order: * 1 0 * 2 3 */ std::vector corner; /// Owned by this class, constructed on demand mutable std::auto_ptr safeEnv; void initCorners(const geom::Coordinate& pt); double scale(double val) const; void copyScaled(const geom::Coordinate& p, geom::Coordinate& pScaled) const; /** \brief * Tests whether the segment p0-p1 intersects the hot pixel * tolerance square. * * Because the tolerance square point set is partially open (along the * top and right) the test needs to be more sophisticated than * simply checking for any intersection. However, it * can take advantage of the fact that because the hot pixel edges * do not lie on the coordinate grid. It is sufficient to check * if there is at least one of: * * - a proper intersection with the segment and any hot pixel edge * - an intersection between the segment and both the left * and bottom edges * - an intersection between a segment endpoint and the hot * pixel coordinate * * @param p0 * @param p1 * @return */ bool intersectsToleranceSquare(const geom::Coordinate& p0, const geom::Coordinate& p1) const; /** \brief * Test whether the given segment intersects * the closure of this hot pixel. * * This is NOT the test used in the standard snap-rounding * algorithm, which uses the partially closed tolerance square * instead. * This routine is provided for testing purposes only. * * @param p0 the start point of a line segment * @param p1 the end point of a line segment * @return true if the segment intersects the * closure of the pixel's tolerance square */ bool intersectsPixelClosure(const geom::Coordinate& p0, const geom::Coordinate& p1); bool intersectsScaled(const geom::Coordinate& p0, const geom::Coordinate& p1) const; // Declare type as noncopyable HotPixel(const HotPixel& other); HotPixel& operator=(const HotPixel& rhs); public: /** * Creates a new hot pixel. * * @param pt the coordinate at the centre of the pixel. * Will be kept by reference, so make sure to keep it alive. * @param scaleFact the scaleFactor determining the pixel size * @param li the intersector to use for testing intersection with * line segments */ HotPixel(const geom::Coordinate& pt, double scaleFact, algorithm::LineIntersector& li); /// \brief /// Return reference to original Coordinate /// (the one provided at construction time) const geom::Coordinate& getCoordinate() const { return originalPt; } /** \brief * Returns a "safe" envelope that is guaranteed to contain * the hot pixel. Keeps ownership of it. * * The envelope returned will be larger than the exact envelope of the * pixel. */ const geom::Envelope& getSafeEnvelope() const; /** * Tests whether the line segment (p0-p1) intersects this hot pixel. * * @param p0 the first coordinate of the line segment to test * @param p1 the second coordinate of the line segment to test * @return true if the line segment intersects this hot pixel */ bool intersects(const geom::Coordinate& p0, const geom::Coordinate& p1) const; /** * Adds a new node (equal to the snap pt) to the specified segment * if the segment passes through the hot pixel * * @param segStr * @param segIndex * @return true if a node was added to the segment */ bool addSnappedNode(NodedSegmentString& segStr, std::size_t segIndex); }; } // namespace geos::noding::snapround } // namespace geos::noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef GEOS_INLINE # include "geos/noding/snapround/HotPixel.inl" #endif #endif // GEOS_NODING_SNAPROUND_HOTPIXEL_H geos-3.4.2/include/geos/noding/snapround/HotPixel.inl0000644000175000017500000000250712206417150022406 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/HotPixel.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_HOTPIXEL_INL #define GEOS_NODING_SNAPROUND_HOTPIXEL_INL #include #include #include namespace geos { namespace noding { // geos::noding namespace snapround { // geos::noding::snapround INLINE double HotPixel::scale(double val) const { // Math.round //return round(val*scaleFactor); return util::round(val*scaleFactor); } INLINE void HotPixel::copyScaled(const geom::Coordinate& p, geom::Coordinate& pScaled) const { pScaled.x = scale(p.x); pScaled.y = scale(p.y); } } // namespace geos::noding::snapround } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_SNAPROUND_HOTPIXEL_INL geos-3.4.2/include/geos/noding/snapround/MCIndexPointSnapper.h0000644000175000017500000000447212206417150024154 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/MCIndexPointSnapper.java r486 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_MCINDEXPOINTSNAPPER_H #define GEOS_NODING_SNAPROUND_MCINDEXPOINTSNAPPER_H #include #include // Forward declarations namespace geos { namespace index { class SpatialIndex; } namespace noding { class SegmentString; namespace snapround { class HotPixel; } } } namespace geos { namespace noding { // geos::noding namespace snapround { // geos::noding::snapround /** \brief * "Snaps" all {@link SegmentString}s in a {@link SpatialIndex} containing * {@link MonotoneChain}s to a given {@link HotPixel}. * */ class GEOS_DLL MCIndexPointSnapper { public: MCIndexPointSnapper(index::SpatialIndex& nIndex) : index(nIndex) {} /** * Snaps (nodes) all interacting segments to this hot pixel. * The hot pixel may represent a vertex of an edge, * in which case this routine uses the optimization * of not noding the vertex itself * * @param hotPixel the hot pixel to snap to * @param parentEdge the edge containing the vertex, * if applicable, or null * @param vertexIndex the index of the vertex, if applicable, or -1 * @return true if a node was added for this pixel */ bool snap(HotPixel& hotPixel, SegmentString* parentEdge, unsigned int vertexIndex); bool snap(HotPixel& hotPixel) { return snap(hotPixel, 0, 0); } private: index::SpatialIndex& index; // Declare type as noncopyable MCIndexPointSnapper(const MCIndexPointSnapper& other); MCIndexPointSnapper& operator=(const MCIndexPointSnapper& rhs); }; } // namespace geos::noding::snapround } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_SNAPROUND_MCINDEXPOINTSNAPPER_H geos-3.4.2/include/geos/noding/snapround/MCIndexSnapRounder.h0000644000175000017500000001062112206417150023763 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/MCIndexSnapRounder.java r486 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_MCINDEXSNAPROUNDER_H #define GEOS_NODING_SNAPROUND_MCINDEXSNAPROUNDER_H #include #include // for inheritance #include // for inlines #include // for inines #include // for composition #include // for use in vector #include // for inlines #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace algorithm { class LineIntersector; } namespace noding { class SegmentString; class MCIndexNoder; } } namespace geos { namespace noding { // geos::noding namespace snapround { // geos::noding::snapround /** \brief * Uses Snap Rounding to compute a rounded, * fully noded arrangement from a set of SegmentString * * Implements the Snap Rounding technique described in Hobby, Guibas & Marimont, * and Goodrich et al. * * Snap Rounding assumes that all vertices lie on a uniform grid * (hence the precision model of the input must be fixed precision, * and all the input vertices must be rounded to that precision). * * This implementation uses a monotone chains and a spatial index to * speed up the intersection tests. * * This implementation appears to be fully robust using an integer * precision model. * * It will function with non-integer precision models, but the * results are not 100% guaranteed to be correctly noded. */ class GEOS_DLL MCIndexSnapRounder: public Noder { // implments Noder public: MCIndexSnapRounder(const geom::PrecisionModel& nPm) : pm(nPm), scaleFactor(nPm.getScale()), pointSnapper(0) { li.setPrecisionModel(&pm); } std::vector* getNodedSubstrings() const { return NodedSegmentString::getNodedSubstrings(*nodedSegStrings); } void computeNodes(std::vector* segStrings); /** * Computes nodes introduced as a result of * snapping segments to vertices of other segments * * @param edges the list of segment strings to snap together * NOTE: they *must* be instances of NodedSegmentString, or * an assertion will fail. */ void computeVertexSnaps(std::vector& edges); private: /// externally owned const geom::PrecisionModel& pm; algorithm::LineIntersector li; double scaleFactor; std::vector* nodedSegStrings; std::auto_ptr pointSnapper; void snapRound(MCIndexNoder& noder, std::vector* segStrings); /** * Computes all interior intersections in the collection of SegmentStrings, * and push their Coordinate to the provided vector. * * Does NOT node the segStrings. * */ void findInteriorIntersections(MCIndexNoder& noder, std::vector* segStrings, std::vector& intersections); /** * Computes nodes introduced as a result of snapping * segments to snap points (hot pixels) */ void computeIntersectionSnaps(std::vector& snapPts); /** * Performs a brute-force comparison of every segment in each {@link SegmentString}. * This has n^2 performance. */ void computeVertexSnaps(NodedSegmentString* e); void checkCorrectness(std::vector& inputSegmentStrings); // Declare type as noncopyable MCIndexSnapRounder(const MCIndexSnapRounder& other); MCIndexSnapRounder& operator=(const MCIndexSnapRounder& rhs); }; } // namespace geos::noding::snapround } // namespace geos::noding } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_NODING_SNAPROUND_MCINDEXSNAPROUNDER_H geos-3.4.2/include/geos/noding/snapround/Makefile.am0000644000175000017500000000042712206417150022201 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/noding/snapround geos_HEADERS = \ HotPixel.h \ HotPixel.inl \ MCIndexPointSnapper.h \ MCIndexSnapRounder.h \ SimpleSnapRounder.h geos-3.4.2/include/geos/noding/snapround/Makefile.in0000644000175000017500000003641312206417161022220 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/noding/snapround DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/noding/snapround geos_HEADERS = \ HotPixel.h \ HotPixel.inl \ MCIndexPointSnapper.h \ MCIndexSnapRounder.h \ SimpleSnapRounder.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/noding/snapround/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/noding/snapround/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/noding/snapround/SimpleSnapRounder.h0000644000175000017500000001060312206417150023725 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/SimpleSnapRounder.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_SIMPLESNAPROUNDER_H #define GEOS_NODING_SNAPROUND_SIMPLESNAPROUNDER_H #include #include #include #include // for inheritance #include // for composition #include // for use in vector #include // for inlines (should drop) // Forward declarations namespace geos { namespace geom { //class PrecisionModel; } namespace algorithm { class LineIntersector; } namespace noding { class SegmentString; class NodedSegmentString; namespace snapround { class HotPixel; } } } namespace geos { namespace noding { // geos::noding namespace snapround { // geos::noding::snapround /** \brief * Uses Snap Rounding to compute a rounded, * fully noded arrangement from a set of {@link SegmentString}s. * * Implements the Snap Rounding technique described in * Hobby, Guibas & Marimont, and Goodrich et al. * Snap Rounding assumes that all vertices lie on a uniform grid * (hence the precision model of the input must be fixed precision, * and all the input vertices must be rounded to that precision). * * This implementation uses simple iteration over the line segments. * * This is not the most efficient approach for large sets of segments. * * This implementation appears to be fully robust using an integer * precision model. * It will function with non-integer precision models, but the * results are not 100% guaranteed to be correctly noded. * */ class GEOS_DLL SimpleSnapRounder: public Noder { // implements NoderIface public: SimpleSnapRounder(const geom::PrecisionModel& newPm); std::vector* getNodedSubstrings() const; void computeNodes(std::vector* inputSegmentStrings); void add(const SegmentString* segStr); /** * Computes nodes introduced as a result of * snapping segments to vertices of other segments * * @param edges the list of segment strings to snap together. * Must be NodedSegmentString or an assertion will fail. */ void computeVertexSnaps(const std::vector& edges); private: const geom::PrecisionModel& pm; algorithm::LineIntersector li; double scaleFactor; std::vector* nodedSegStrings; void checkCorrectness(std::vector& inputSegmentStrings); void snapRound(std::vector* segStrings, algorithm::LineIntersector& li); /** * Computes all interior intersections in the vector * of SegmentString, and fill the given vector * with their Coordinates. * * Does NOT node the segStrings. * * @param segStrings a vector of const Coordinates for the intersections * @param li the algorithm::LineIntersector to use * @param ret the vector to push intersection Coordinates to */ void findInteriorIntersections(std::vector& segStrings, algorithm::LineIntersector& li, std::vector& ret); /** \brief * Computes nodes introduced as a result of snapping segments to * snap points (hot pixels) * @param li */ void computeSnaps(const std::vector& segStrings, std::vector& snapPts); void computeSnaps(NodedSegmentString* ss, std::vector& snapPts); /** \brief * Performs a brute-force comparison of every segment in each * {@link SegmentString}. * This has n^2 performance. */ void computeVertexSnaps(NodedSegmentString* e0, NodedSegmentString* e1); // Declare type as noncopyable SimpleSnapRounder(const SimpleSnapRounder& other); SimpleSnapRounder& operator=(const SimpleSnapRounder& rhs); }; } // namespace geos::noding::snapround } // namespace geos::noding } // namespace geos #endif // GEOS_NODING_SNAPROUND_SIMPLESNAPROUNDER_H geos-3.4.2/include/geos/noding.h0000644000175000017500000000302212206417150016277 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Kept for backward compatibility, avoid to include * directly, include instead. * **********************************************************************/ #ifndef GEOS_NODING_H #define GEOS_NODING_H //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include //#include namespace geos { /// Classes to compute nodings for arrangements of line segments and line segment sequences. namespace noding { // geos.noding } // namespace geos.noding } // namespace geos #endif geos-3.4.2/include/geos/nodingSnapround.h0000644000175000017500000000213012206417150020170 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_NODING_SNAPROUND_H #define GEOS_NODING_SNAPROUND_H namespace geos { namespace noding { // geos.noding /// \brief /// Contains classes to implement the Snap Rounding algorithm for /// noding linestrings. namespace snapround { // geos.noding.snapround } // namespace geos.noding.snapround } // namespace geos.noding } // namespace geos //#include //#include //#include //#include #endif geos-3.4.2/include/geos/opBuffer.h0000644000175000017500000000234512206417150016600 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPBUFFER_H #define GEOS_OPBUFFER_H namespace geos { namespace operation { // geos.operation /// Provides classes for computing buffers of geometries namespace buffer { } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos #include // This is needed for enum values #include //#include //#include //#include //#include //#include #endif // ndef GEOS_OPBUFFER_H geos-3.4.2/include/geos/opDistance.h0000644000175000017500000000212012206417150017110 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPDISTANCE_H #define GEOS_OPDISTANCE_H namespace geos { namespace operation { // geos.operation /// Provides classes for computing the distance between geometries namespace distance { // geos.operation.distance } // namespace geos.operation.distance } // namespace geos.operation } // namespace geos //#include //#include #include //#include #endif geos-3.4.2/include/geos/opLinemerge.h0000644000175000017500000000212512206417150017272 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPLINEMERGE_H #define GEOS_OPLINEMERGE_H namespace geos { namespace operation { // geos::operation /// Line merging package namespace linemerge { // geos::operation::linemerge } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos //#include //#include //#include //#include #include //#include #endif geos-3.4.2/include/geos/opOverlay.h0000644000175000017500000000545112206417150017011 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPOVERLAY_H #define GEOS_OPOVERLAY_H namespace geos { namespace operation { /** \brief * Contains classes that perform a topological overlay to compute boolean * spatial functions. * * The Overlay Algorithm is used in spatial analysis methods for computing * set-theoretic operations (boolean combinations) of input {@link Geometry}s. * The algorithm for computing the overlay uses the intersection operations * supported by topology graphs. * To compute an overlay it is necessary to explicitly compute the resultant * graph formed by the computed intersections. * * The algorithm to compute a set-theoretic spatial analysis method has the * following steps: * * - Build topology graphs of the two input geometries. For each geometry all * self-intersection nodes are computed and added to the graph. * - Compute nodes for all intersections between edges and nodes of the graphs. * - Compute the labeling for the computed nodes by merging the labels from * the input graphs. * - Compute new edges between the compute intersection nodes. * Label the edges appropriately. * - Build the resultant graph from the new nodes and edges. * - Compute the labeling for isolated components of the graph. Add the * isolated components to the resultant graph. * - Compute the result of the boolean combination by selecting the node * and edges with the appropriate labels. Polygonize areas and sew linear * geometries together. * *

Package Specification

* * - Java Topology Suite Technical Specifications * - * OpenGIS Simple Features Specification for SQL * */ namespace overlay { // geos.operation.overlay } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos #include //#include //#include //#include //#include //#include //#include //#include //#include #endif geos-3.4.2/include/geos/opPolygonize.h0000644000175000017500000000201412206417150017517 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPPOLYGONIZE_H #define GEOS_OPPOLYGONIZE_H namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos //#include //#include //#include //#include #include #endif geos-3.4.2/include/geos/opPredicate.h0000644000175000017500000000160212206417150017262 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPPREDICATE_H #define GEOS_OPPREDICATE_H namespace geos { namespace operation { namespace predicate { } // namespace predicate } // namespace operation } // namespace geos //#include //#include //#include #endif // ifndef GEOS_OPPREDICATE_H geos-3.4.2/include/geos/opRelate.h0000644000175000017500000000677712206417150016620 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPRELATE_H #define GEOS_OPRELATE_H namespace geos { namespace operation { // geos::operation /** \brief * Contains classes to implement the computation of the spatial relationships of Geometrys. * * The relate algorithm computes the IntersectionMatrix describing the * relationship of two Geometrys. The algorithm for computing relate * uses the intersection operations supported by topology graphs. Although the relate * result depends on the resultant graph formed by the computed intersections, there is * no need to explicitly compute the entire graph. * It is sufficient to compute the local structure of the graph * at each intersection node. *

* The algorithm to compute relate has the following steps: *

    *
  • Build topology graphs of the two input geometries. For each geometry * all self-intersection nodes are computed and added to the graph. *
  • Compute nodes for all intersections between edges and nodes of the graphs. *
  • Compute the labeling for the computed nodes by merging the labels from the input graphs. *
  • Compute the labeling for isolated components of the graph (see below) *
  • Compute the IntersectionMatrix from the labels on the nodes and edges. *
* *

Labeling isolated components

* * Isolated components are components (edges or nodes) of an input Geometry which * do not contain any intersections with the other input Geometry. The * topological relationship of these components to the other input Geometry * must be computed in order to determine the complete labeling of the component. This can * be done by testing whether the component lies in the interior or exterior of the other * Geometry. If the other Geometry is 1-dimensional, the isolated * component must lie in the exterior (since otherwise it would have an intersection with an * edge of the Geometry). If the other Geometry is 2-dimensional, * a Point-In-Polygon test can be used to determine whether the isolated component is in the * interior or exterior. * *

Package Specification

* * * */ namespace relate { // geos.operation.relate } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos //#include //#include //#include #include //#include //#include //#include #include #endif geos-3.4.2/include/geos/opValid.h0000644000175000017500000000242712206417150016427 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OPVALID_H #define GEOS_OPVALID_H namespace geos { namespace operation { // geos.operation /// Provides classes for testing the validity of geometries. namespace valid { // geos.operation.valid } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos //#include //#include #include //#include //#include //#include //#include #include #endif geos-3.4.2/include/geos/operation/0000755000175000017500000000000012206417227016660 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/GeometryGraphOperation.h0000644000175000017500000000422612206417150023466 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/GeometryGraphOperation.java rev. 1.18 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OPERATION_GEOMETRYGRAPHOPERATION_H #define GEOS_OPERATION_GEOMETRYGRAPHOPERATION_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geom { class Geometry; class PrecisionModel; } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace operation { // geos.operation /// The base class for operations that require GeometryGraph class GEOS_DLL GeometryGraphOperation { public: GeometryGraphOperation(const geom::Geometry *g0, const geom::Geometry *g1); GeometryGraphOperation(const geom::Geometry *g0, const geom::Geometry *g1, const algorithm::BoundaryNodeRule& boundaryNodeRule); GeometryGraphOperation(const geom::Geometry *g0); virtual ~GeometryGraphOperation(); const geom::Geometry* getArgGeometry(unsigned int i) const; protected: algorithm::LineIntersector li; const geom::PrecisionModel* resultPrecisionModel; /** \brief * The operation args into an array so they can be accessed by index */ std::vector arg; void setComputationPrecision(const geom::PrecisionModel* pm); }; } // namespace geos.operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif geos-3.4.2/include/geos/operation/IsSimpleOp.h0000644000175000017500000001351012206417150021050 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/IsSimpleOp.java rev. 1.22 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OPERATION_ISSIMPLEOP_H #define GEOS_OPERATION_ISSIMPLEOP_H #include #include // for dtor visibility by auto_ptr (compos) #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geom { class LineString; class MultiLineString; class MultiPoint; class Geometry; struct CoordinateLessThen; } namespace geomgraph { class GeometryGraph; } namespace operation { class EndpointInfo; } } namespace geos { namespace operation { // geos.operation /** \brief * Tests whether a Geometry is simple. * * In general, the SFS specification of simplicity follows the rule: * * - A Geometry is simple if and only if the only self-intersections * are at boundary points. * * This definition relies on the definition of boundary points. * The SFS uses the Mod-2 rule to determine which points are on the boundary of * lineal geometries, but this class supports * using other {@link BoundaryNodeRule}s as well. * * Simplicity is defined for each {@link Geometry} subclass as follows: * * - Valid polygonal geometries are simple by definition, so * isSimple trivially returns true. * (Hint: in order to check if a polygonal geometry has self-intersections, * use {@link Geometry::isValid}). * * - Linear geometries are simple iff they do not self-intersect at points * other than boundary points. * (Using the Mod-2 rule, this means that closed linestrings * cannot be touched at their endpoints, since these are * interior points, not boundary points). * * - Zero-dimensional geometries (points) are simple iff they have no * repeated points. * * - Empty Geometrys are always simple * * @see algorithm::BoundaryNodeRule * */ class GEOS_DLL IsSimpleOp { public: /** \brief * Creates a simplicity checker using the default * SFS Mod-2 Boundary Node Rule * * @deprecated use IsSimpleOp(Geometry) */ IsSimpleOp(); /** \brief * Creates a simplicity checker using the default * SFS Mod-2 Boundary Node Rule * * @param geom The geometry to test. * Will store a reference: keep it alive. */ IsSimpleOp(const geom::Geometry& geom); /** \brief * Creates a simplicity checker using a given * algorithm::BoundaryNodeRule * * @param geom the geometry to test * @param boundaryNodeRule the rule to use. */ IsSimpleOp(const geom::Geometry& geom, const algorithm::BoundaryNodeRule& boundaryNodeRule); /** * Tests whether the geometry is simple. * * @return true if the geometry is simple */ bool isSimple(); /** * Gets a coordinate for the location where the geometry * fails to be simple. * (i.e. where it has a non-boundary self-intersection). * {@link #isSimple} must be called before this method is called. * * @return a coordinate for the location of the non-boundary * self-intersection. Ownership retained. * @return the null coordinate if the geometry is simple */ const geom::Coordinate* getNonSimpleLocation() const { return nonSimpleLocation.get(); } /** * Reports whether a geom::LineString is simple. * * @param geom the lineal geometry to test * @return true if the geometry is simple * * @deprecated use isSimple() */ bool isSimple(const geom::LineString *geom); /** * Reports whether a geom::MultiLineString is simple. * * @param geom the lineal geometry to test * @return true if the geometry is simple * * @deprecated use isSimple() */ bool isSimple(const geom::MultiLineString *geom); /** * A MultiPoint is simple iff it has no repeated points * * @deprecated use isSimple() */ bool isSimple(const geom::MultiPoint *mp); bool isSimpleLinearGeometry(const geom::Geometry *geom); private: /** * For all edges, check if there are any intersections which are * NOT at an endpoint. * The Geometry is not simple if there are intersections not at * endpoints. */ bool hasNonEndpointIntersection(geomgraph::GeometryGraph &graph); /** * Tests that no edge intersection is the endpoint of a closed line. * This ensures that closed lines are not touched at their endpoint, * which is an interior point according to the Mod-2 rule * To check this we compute the degree of each endpoint. * The degree of endpoints of closed lines * must be exactly 2. */ bool hasClosedEndpointIntersection(geomgraph::GeometryGraph &graph); /** * Add an endpoint to the map, creating an entry for it if none exists */ void addEndpoint(std::map&endPoints, const geom::Coordinate *p, bool isClosed); bool isClosedEndpointsInInterior; bool isSimpleMultiPoint(const geom::MultiPoint& mp); const geom::Geometry* geom; std::auto_ptr nonSimpleLocation; }; } // namespace geos.operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif geos-3.4.2/include/geos/operation/Makefile.am0000644000175000017500000000053612206417150020713 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ buffer \ distance \ linemerge \ overlay \ polygonize \ predicate \ relate \ union \ sharedpaths \ valid #EXTRA_DIST = geosdir = $(includedir)/geos/operation geos_HEADERS = \ GeometryGraphOperation.h \ IsSimpleOp.h geos-3.4.2/include/geos/operation/Makefile.in0000644000175000017500000005122412206417161020726 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ buffer \ distance \ linemerge \ overlay \ polygonize \ predicate \ relate \ union \ sharedpaths \ valid #EXTRA_DIST = geosdir = $(includedir)/geos/operation geos_HEADERS = \ GeometryGraphOperation.h \ IsSimpleOp.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/buffer/0000755000175000017500000000000012206417230020123 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/buffer/BufferBuilder.h0000644000175000017500000001570412206417150023024 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2008-2010 Safe Software Inc. * Copyright (C) 2006-2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferBuilder.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_BUFFERBUILDER_H #define GEOS_OP_BUFFER_BUFFERBUILDER_H #include #include #include // for inlines (BufferOp enums) #include // for inline (OffsetCurveBuilder enums) #include // for composition #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class PrecisionModel; class Geometry; class GeometryFactory; } namespace algorithm { class CGAlgorithms; class LineIntersector; } namespace noding { class Noder; class SegmentString; class IntersectionAdder; } namespace geomgraph { class Edge; class Label; class PlanarGraph; } namespace operation { namespace buffer { class BufferSubgraph; } namespace overlay { class PolygonBuilder; } } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * * \brief * Builds the buffer geometry for a given input geometry and precision model. * * Allows setting the level of approximation for circular arcs, * and the precision model in which to carry out the computation. * * When computing buffers in floating point double-precision * it can happen that the process of iterated noding can fail to converge * (terminate). * * In this case a TopologyException will be thrown. * Retrying the computation in a fixed precision * can produce more robust results. * */ class GEOS_DLL BufferBuilder { public: /** * Creates a new BufferBuilder * * @param nBufParams buffer parameters, this object will * keep a reference to the passed parameters * so caller must make sure the object is * kept alive for the whole lifetime of * the buffer builder. */ BufferBuilder(const BufferParameters& nBufParams) : bufParams(nBufParams), workingPrecisionModel(NULL), li(NULL), intersectionAdder(NULL), workingNoder(NULL), geomFact(NULL), edgeList() {} ~BufferBuilder(); /** * Sets the precision model to use during the curve computation * and noding, * if it is different to the precision model of the Geometry. * If the precision model is less than the precision of the * Geometry precision model, * the Geometry must have previously been rounded to that precision. * * @param pm the precision model to use */ void setWorkingPrecisionModel(const geom::PrecisionModel *pm) { workingPrecisionModel=pm; } /** * Sets the {@link noding::Noder} to use during noding. * This allows choosing fast but non-robust noding, or slower * but robust noding. * * @param noder the noder to use */ void setNoder(noding::Noder* newNoder) { workingNoder = newNoder; } geom::Geometry* buffer(const geom::Geometry *g, double distance); // throw (GEOSException); /** * Generates offset curve for linear geometry. * * @param g non-areal geometry object * @param distance width of offset * @param leftSide controls on which side of the input geometry * offset curve is generated. * * @note For left-side offset curve, the offset will be at the left side * of the input line and retain the same direction. * For right-side offset curve, it'll be at the right side * and in the opposite direction. * * @note BufferParameters::setSingleSided parameter, which is specific to * areal geometries only, is ignored by this routine. * * @note Not in JTS: this is a GEOS extension */ geom::Geometry* bufferLineSingleSided( const geom::Geometry* g, double distance, bool leftSide ) ; // throw (GEOSException); private: /** * Compute the change in depth as an edge is crossed from R to L */ static int depthDelta(const geomgraph::Label& label); const BufferParameters& bufParams; const geom::PrecisionModel* workingPrecisionModel; algorithm::LineIntersector* li; noding::IntersectionAdder* intersectionAdder; noding::Noder* workingNoder; const geom::GeometryFactory* geomFact; geomgraph::EdgeList edgeList; std::vector newLabels; void computeNodedEdges(std::vector& bufSegStr, const geom::PrecisionModel *precisionModel); // throw(GEOSException); /** * Inserted edges are checked to see if an identical edge already * exists. * If so, the edge is not inserted, but its label is merged * with the existing edge. * * The function takes responsability of releasing the Edge parameter * memory when appropriate. */ void insertUniqueEdge(geomgraph::Edge *e); void createSubgraphs(geomgraph::PlanarGraph *graph, std::vector& list); /** * Completes the building of the input subgraphs by * depth-labelling them, * and adds them to the PolygonBuilder. * The subgraph list must be sorted in rightmost-coordinate order. * * @param subgraphList the subgraphs to build * @param polyBuilder the PolygonBuilder which will build * the final polygons */ void buildSubgraphs(const std::vector& subgraphList, overlay::PolygonBuilder& polyBuilder); /// \brief /// Return the externally-set noding::Noder OR a newly created /// one using the given precisionModel. // /// NOTE: if an externally-set noding::Noder is available no /// check is performed to ensure it will use the /// given PrecisionModel /// noding::Noder* getNoder(const geom::PrecisionModel* precisionModel); /** * Gets the standard result for an empty buffer. * Since buffer always returns a polygonal result, * this is chosen to be an empty polygon. * * @return the empty result geometry, transferring ownership to caller. */ geom::Geometry* createEmptyResultGeometry() const; // Declare type as noncopyable BufferBuilder(const BufferBuilder& other); BufferBuilder& operator=(const BufferBuilder& rhs); }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_BUFFERBUILDER_H geos-3.4.2/include/geos/operation/buffer/BufferInputLineSimplifier.h0000644000175000017500000001346412206417147025400 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferInputLineSimplifier.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H #define GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H #include // complete type required #include // for enum #include #include // for composition // Forward declarations namespace geos { namespace geom { class CoordinateSequence; //class PrecisionModel; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** \brief * Simplifies a buffer input line to * remove concavities with shallow depth. * * The most important benefit of doing this * is to reduce the number of points and the complexity of * shape which will be buffered. * It also reduces the risk of gores created by * the quantized fillet arcs (although this issue * should be eliminated in any case by the * offset curve generation logic). * * A key aspect of the simplification is that it * affects inside (concave or inward) corners only. * Convex (outward) corners are preserved, since they * are required to ensure that the generated buffer curve * lies at the correct distance from the input geometry. * * Another important heuristic used is that the end segments * of the input are never simplified. This ensures that * the client buffer code is able to generate end caps faithfully. * * No attempt is made to avoid self-intersections in the output. * This is acceptable for use for generating a buffer offset curve, * since the buffer algorithm is insensitive to invalid polygonal * geometry. However, * this means that this algorithm * cannot be used as a general-purpose polygon simplification technique. * * @author Martin Davis * */ class BufferInputLineSimplifier { public: /** * Simplify the input coordinate list. * * If the distance tolerance is positive, * concavities on the LEFT side of the line are simplified. * If the supplied distance tolerance is negative, * concavities on the RIGHT side of the line are simplified. * * @param inputLine the coordinate sequence to simplify * @param distanceTol simplification distance tolerance to use * @return a simplified version of the coordinate sequence */ static std::auto_ptr simplify( const geom::CoordinateSequence& inputLine, double distanceTol); BufferInputLineSimplifier(const geom::CoordinateSequence& input); /** * Simplify the input coordinate list. * If the distance tolerance is positive, * concavities on the LEFT side of the line are simplified. * If the supplied distance tolerance is negative, * concavities on the RIGHT side of the line are simplified. * * @param distanceTol simplification distance tolerance to use * @return the simplified coordinate list */ std::auto_ptr simplify(double distanceTol); private: /** * Uses a sliding window containing 3 vertices to detect shallow angles * in which the middle vertex can be deleted, since it does not * affect the shape of the resulting buffer in a significant way. * @return */ bool deleteShallowConcavities(); /** * Finds the next non-deleted index, * or the end of the point array if none * * @param index * @return the next non-deleted index, if any * @return inputLine.size() if there are no more non-deleted indices */ unsigned int findNextNonDeletedIndex(unsigned int index) const; std::auto_ptr collapseLine() const; bool isDeletable(int i0, int i1, int i2, double distanceTol) const; bool isShallowConcavity(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2, double distanceTol) const; /** * Checks for shallowness over a sample of points in the given section. * * This helps prevents the siplification from incrementally * "skipping" over points which are in fact non-shallow. * * @param p0 start coordinate of section * @param p2 end coordinate of section * @param i0 start index of section * @param i2 end index of section * @param distanceTol distance tolerance * @return */ bool isShallowSampled(const geom::Coordinate& p0, const geom::Coordinate& p2, int i0, int i2, double distanceTol) const; bool isShallow(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2, double distanceTol) const; bool isConcave(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) const; static const int NUM_PTS_TO_CHECK = 10; static const int INIT = 0; static const int DELETE = 1; static const int KEEP = 1; const geom::CoordinateSequence& inputLine; double distanceTol; std::vector isDeleted; int angleOrientation; // Declare type as noncopyable BufferInputLineSimplifier(const BufferInputLineSimplifier& other); BufferInputLineSimplifier& operator=(const BufferInputLineSimplifier& rhs); }; } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos #endif // ndef GEOS_OP_BUFFER_BUFFERINPUTLINESIMPLIFIER_H geos-3.4.2/include/geos/operation/buffer/BufferOp.h0000644000175000017500000001666112206417150022017 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2005-2007 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferOp.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_BUFFEROP_H #define GEOS_OP_BUFFER_BUFFEROP_H #include #include // for enum values #include // for composition #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class PrecisionModel; class Geometry; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \class BufferOp opBuffer.h geos/opBuffer.h * * \brief * Computes the buffer of a geometry, for both positive and negative * buffer distances. * * In GIS, the positive (or negative) buffer of a geometry is defined as * the Minkowski sum (or difference) of the geometry * with a circle with radius equal to the absolute value of the buffer * distance. * In the CAD/CAM world buffers are known as offset curves. * In morphological analysis the operation of positive and negative buffering * is referred to as erosion and dilation. * * The buffer operation always returns a polygonal result. * The negative or zero-distance buffer of lines and points is always * an empty Polygon. * * Since true buffer curves may contain circular arcs, * computed buffer polygons can only be approximations to the true geometry. * The user can control the accuracy of the curve approximation by specifying * the number of linear segments with which to approximate a curve. * * The end cap style of a linear buffer may be specified. * The following end cap styles are supported: * - CAP_ROUND - the usual round end caps * - CAP_BUTT - end caps are truncated flat at the line ends * - CAP_SQUARE - end caps are squared off at the buffer distance * beyond the line ends * */ class GEOS_DLL BufferOp { private: /** * A number of digits of precision which leaves some computational "headroom" * for floating point operations. * * This value should be less than the decimal precision of double-precision values (16). */ static const int MAX_PRECISION_DIGITS = 12; /** * Compute a reasonable scale factor to limit the precision of * a given combination of Geometry and buffer distance. * The scale factor is based on a heuristic. * * @param g the Geometry being buffered * * @param distance the buffer distance * * @param maxPrecisionDigits the mzx # of digits that should be * allowed by the precision determined by the * computed scale factor * * @return a scale factor that allows a reasonable amount of * precision for the buffer computation */ static double precisionScaleFactor(const geom::Geometry *g, double distance, int maxPrecisionDigits); const geom::Geometry *argGeom; util::TopologyException saveException; double distance; //int quadrantSegments; //int endCapStyle; BufferParameters bufParams; geom::Geometry* resultGeometry; void computeGeometry(); void bufferOriginalPrecision(); void bufferReducedPrecision(int precisionDigits); void bufferReducedPrecision(); void bufferFixedPrecision(const geom::PrecisionModel& fixedPM); public: enum { /// Specifies a round line buffer end cap style. /// @deprecated use BufferParameters CAP_ROUND = BufferParameters::CAP_ROUND, /// Specifies a butt (or flat) line buffer end cap style. /// @deprecated use BufferParameters CAP_BUTT = BufferParameters::CAP_FLAT, /// Specifies a square line buffer end cap style. /// @deprecated use BufferParameters CAP_SQUARE = BufferParameters::CAP_SQUARE }; /** * Computes the buffer for a geometry for a given buffer distance * and accuracy of approximation. * * @param g the geometry to buffer * @param distance the buffer distance * @param quadrantSegments the number of segments used to * approximate a quarter circle * @return the buffer of the input geometry * */ static geom::Geometry* bufferOp(const geom::Geometry *g, double distance, int quadrantSegments= BufferParameters::DEFAULT_QUADRANT_SEGMENTS, int endCapStyle=BufferParameters::CAP_ROUND); /** * Initializes a buffer computation for the given geometry * * @param g the geometry to buffer */ BufferOp(const geom::Geometry *g) : argGeom(g), bufParams(), resultGeometry(NULL) { } /** * Initializes a buffer computation for the given geometry * with the given set of parameters * * @param g the geometry to buffer * @param params the buffer parameters to use. This class will * copy it to private memory. */ BufferOp(const geom::Geometry* g, const BufferParameters& params) : argGeom(g), bufParams(params), resultGeometry(NULL) { } /** * Specifies the end cap style of the generated buffer. * The styles supported are CAP_ROUND, CAP_BUTT, and CAP_SQUARE. * The default is CAP_ROUND. * * @param endCapStyle the end cap style to specify */ inline void setEndCapStyle(int nEndCapStyle); /** * Specifies the end cap style of the generated buffer. * The styles supported are CAP_ROUND, CAP_BUTT, and CAP_SQUARE. * The default is CAP_ROUND. * * @param endCapStyle the end cap style to specify */ inline void setQuadrantSegments(int nQuadrantSegments); /** * Sets whether the computed buffer should be single-sided. * * A single-sided buffer is constructed on only one side * of each input line. * * The side used is determined by the sign of the buffer distance: * - a positive distance indicates the left-hand side * - a negative distance indicates the right-hand side * * The single-sided buffer of point geometries is * the same as the regular buffer. * * The End Cap Style for single-sided buffers is * always ignored, * and forced to the equivalent of CAP_FLAT. * * @param isSingleSided true if a single-sided buffer * should be constructed */ inline void setSingleSided(bool isSingleSided); /** * Returns the buffer computed for a geometry for a given buffer * distance. * * @param g the geometry to buffer * @param distance the buffer distance * @return the buffer of the input geometry */ geom::Geometry* getResultGeometry(double nDistance); }; // BufferOp inlines void BufferOp::setQuadrantSegments(int q) { bufParams.setQuadrantSegments(q); } void BufferOp::setEndCapStyle(int s) { bufParams.setEndCapStyle((BufferParameters::EndCapStyle)s); } void BufferOp::setSingleSided(bool isSingleSided) { bufParams.setSingleSided(isSingleSided); } } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_BUFFEROP_H geos-3.4.2/include/geos/operation/buffer/BufferParameters.h0000644000175000017500000002005712206417147023544 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferParameters.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_BUFFERPARAMETERS_H #define GEOS_OP_BUFFER_BUFFERPARAMETERS_H #include //#include //#include // for composition //#include // for composition //#include // for composition #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class PrecisionModel; } namespace operation { namespace buffer { class OffsetCurveVertexList; } } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** \brief * Contains the parameters which * describe how a buffer should be constructed. * */ class GEOS_DLL BufferParameters { public: /// End cap styles enum EndCapStyle { /// Specifies a round line buffer end cap style. CAP_ROUND=1, /// Specifies a flat line buffer end cap style. CAP_FLAT=2, /// Specifies a square line buffer end cap style. CAP_SQUARE=3 }; /// Join styles enum JoinStyle { /// Specifies a round join style. JOIN_ROUND=1, /// Specifies a mitre join style. JOIN_MITRE=2, /// Specifies a bevel join style. JOIN_BEVEL=3 }; /// \brief /// The default number of facets into which to divide a fillet /// of 90 degrees. // /// A value of 8 gives less than 2% max error in the buffer distance. /// For a max error of < 1%, use QS = 12. /// For a max error of < 0.1%, use QS = 18. /// static const int DEFAULT_QUADRANT_SEGMENTS = 8; /// The default mitre limit // /// Allows fairly pointy mitres. /// static const double DEFAULT_MITRE_LIMIT; // 5.0 (in .cpp file) /// Creates a default set of parameters BufferParameters(); /// Creates a set of parameters with the given quadrantSegments value. // /// @param quadrantSegments the number of quadrant segments to use /// BufferParameters(int quadrantSegments); /// \brief /// Creates a set of parameters with the /// given quadrantSegments and endCapStyle values. // /// @param quadrantSegments the number of quadrant segments to use /// @param endCapStyle the end cap style to use /// BufferParameters(int quadrantSegments, EndCapStyle endCapStyle); /// \brief /// Creates a set of parameters with the /// given parameter values. // /// @param quadrantSegments the number of quadrant segments to use /// @param endCapStyle the end cap style to use /// @param joinStyle the join style to use /// @param mitreLimit the mitre limit to use /// BufferParameters(int quadrantSegments, EndCapStyle endCapStyle, JoinStyle joinStyle, double mitreLimit); /// Gets the number of quadrant segments which will be used // /// @return the number of quadrant segments /// int getQuadrantSegments() const { return quadrantSegments; } /// \brief /// Sets the number of line segments used to approximate /// an angle fillet. // /// - If quadSegs >= 1, joins are round, /// and quadSegs indicates the number of /// segments to use to approximate a quarter-circle. /// - If quadSegs = 0, joins are bevelled (flat) /// - If quadSegs < 0, joins are mitred, and the value of qs /// indicates the mitre ration limit as ///
	///    mitreLimit = |quadSegs|
	///    
/// /// For round joins, quadSegs determines the maximum /// error in the approximation to the true buffer curve. /// /// The default value of 8 gives less than 2% max error in the /// buffer distance. /// /// For a max error of < 1%, use QS = 12. /// For a max error of < 0.1%, use QS = 18. /// The error is always less than the buffer distance /// (in other words, the computed buffer curve is always inside /// the true curve). /// /// @param quadrantSegments the number of segments in a /// fillet for a quadrant //// void setQuadrantSegments(int quadSegs); /// \brief /// Computes the maximum distance error due to a given level /// of approximation to a true arc. // /// @param quadSegs the number of segments used to approximate /// a quarter-circle /// @return the error of approximation /// static double bufferDistanceError(int quadSegs); /// Gets the end cap style. // /// @return the end cap style /// EndCapStyle getEndCapStyle() const { return endCapStyle; } /// Specifies the end cap style of the generated buffer. // /// The styles supported are CAP_ROUND, CAP_BUTT, /// and CAP_SQUARE. /// /// The default is CAP_ROUND. /// /// @param style the end cap style to specify /// void setEndCapStyle(EndCapStyle style) { endCapStyle = style; } /// Gets the join style. // /// @return the join style /// JoinStyle getJoinStyle() const { return joinStyle; } /// \brief /// Sets the join style for outside (reflex) corners between /// line segments. // /// Allowable values are JOIN_ROUND (which is the default), /// JOIN_MITRE and JOIN_BEVEL. // /// @param style the code for the join style /// void setJoinStyle(JoinStyle style) { joinStyle = style; } /// Gets the mitre ratio limit. // /// @return the limit value /// double getMitreLimit() const { return mitreLimit; } /// Sets the limit on the mitre ratio used for very sharp corners. // /// The mitre ratio is the ratio of the distance from the corner /// to the end of the mitred offset corner. /// When two line segments meet at a sharp angle, /// a miter join will extend far beyond the original geometry. /// (and in the extreme case will be infinitely far.) /// To prevent unreasonable geometry, the mitre limit /// allows controlling the maximum length of the join corner. /// Corners with a ratio which exceed the limit will be beveled. /// /// @param limit the mitre ratio limit /// void setMitreLimit(double limit) { mitreLimit = limit; } /** * Sets whether the computed buffer should be single-sided. * A single-sided buffer is constructed on only one side of each input line. * * The side used is determined by the sign of the buffer distance: * - a positive distance indicates the left-hand side * - a negative distance indicates the right-hand side * * The single-sided buffer of point geometries is * the same as the regular buffer. * * The End Cap Style for single-sided buffers is * always ignored, * and forced to the equivalent of CAP_FLAT. * * @param isSingleSided true if a single-sided buffer should be constructed */ void setSingleSided(bool isSingleSided) { _isSingleSided = isSingleSided; } /** * Tests whether the buffer is to be generated on a single side only. * * @return true if the generated buffer is to be single-sided */ bool isSingleSided() const { return _isSingleSided; } private: /// Defaults to DEFAULT_QUADRANT_SEGMENTS; int quadrantSegments; /// Defaults to CAP_ROUND; EndCapStyle endCapStyle; /// Defaults to JOIN_ROUND; JoinStyle joinStyle; /// Defaults to DEFAULT_MITRE_LIMIT; double mitreLimit; bool _isSingleSided; }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_BUFFERPARAMETERS_H geos-3.4.2/include/geos/operation/buffer/BufferSubgraph.h0000644000175000017500000001201512206417150023201 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferSubgraph.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_BUFFERSUBGRAPH_H #define GEOS_OP_BUFFER_BUFFERSUBGRAPH_H #include #include // for composition #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Envelope; } namespace algorithm { class CGAlgorithms; } namespace geomgraph { class DirectedEdge; class Node; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \brief * A connected subset of the graph of DirectedEdge and geomgraph::Node. * * Its edges will generate either * - a single polygon in the complete buffer, with zero or more holes, or * - ne or more connected holes */ class GEOS_DLL BufferSubgraph { private: RightmostEdgeFinder finder; std::vector dirEdgeList; std::vector nodes; geom::Coordinate *rightMostCoord; geom::Envelope *env; /** \brief * Adds all nodes and edges reachable from this node to the subgraph. * * Uses an explicit stack to avoid a large depth of recursion. * * @param node a node known to be in the subgraph */ void addReachable(geomgraph::Node *startNode); /// Adds the argument node and all its out edges to the subgraph // /// @param node the node to add /// @param nodeStack the current set of nodes being traversed /// void add(geomgraph::Node* node, std::vector* nodeStack); void clearVisitedEdges(); /** \brief * Compute depths for all dirEdges via breadth-first traversal * of nodes in graph * * @param startEdge edge to start processing with */ // MD - use iteration & queue rather than recursion, for speed and robustness void computeDepths(geomgraph::DirectedEdge *startEdge); void computeNodeDepth(geomgraph::Node *n); void copySymDepths(geomgraph::DirectedEdge *de); bool contains(std::set& nodes, geomgraph::Node *node); public: friend std::ostream& operator<< (std::ostream& os, const BufferSubgraph& bs); BufferSubgraph(); ~BufferSubgraph(); std::vector* getDirectedEdges(); std::vector* getNodes(); /** \brief * Gets the rightmost coordinate in the edges of the subgraph */ geom::Coordinate* getRightmostCoordinate(); /** \brief * Creates the subgraph consisting of all edges reachable from * this node. * * Finds the edges in the graph and the rightmost coordinate. * * @param node a node to start the graph traversal from */ void create(geomgraph::Node *node); void computeDepth(int outsideDepth); /** \brief * Find all edges whose depths indicates that they are in the * result area(s). * * Since we want polygon shells to be * oriented CW, choose dirEdges with the interior of the result * on the RHS. * Mark them as being in the result. * Interior Area edges are the result of dimensional collapses. * They do not form part of the result area boundary. */ void findResultEdges(); /** \brief * BufferSubgraphs are compared on the x-value of their rightmost * Coordinate. * * This defines a partial ordering on the graphs such that: * * g1 >= g2 <==> Ring(g2) does not contain Ring(g1) * * where Polygon(g) is the buffer polygon that is built from g. * * This relationship is used to sort the BufferSubgraphs so * that shells are guaranteed to * be built before holes. */ int compareTo(BufferSubgraph *); /** \brief * Computes the envelope of the edges in the subgraph. * The envelope is cached after being computed. * * @return the envelope of the graph. */ geom::Envelope *getEnvelope(); }; std::ostream& operator<< (std::ostream& os, const BufferSubgraph& bs); // INLINES inline geom::Coordinate* BufferSubgraph::getRightmostCoordinate() {return rightMostCoord;} inline std::vector* BufferSubgraph::getNodes() { return &nodes; } inline std::vector* BufferSubgraph::getDirectedEdges() { return &dirEdgeList; } bool BufferSubgraphGT(BufferSubgraph *first, BufferSubgraph *second); } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_BUFFERSUBGRAPH_H geos-3.4.2/include/geos/operation/buffer/Makefile.am0000644000175000017500000000064412206417150022164 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/buffer geos_HEADERS = \ BufferBuilder.h \ BufferInputLineSimplifier.h \ BufferOp.h \ BufferParameters.h \ BufferSubgraph.h \ OffsetCurveBuilder.h \ OffsetCurveSetBuilder.h \ OffsetSegmentGenerator.h \ OffsetSegmentString.h \ RightmostEdgeFinder.h \ SubgraphDepthLocater.h geos-3.4.2/include/geos/operation/buffer/Makefile.in0000644000175000017500000003663012206417162022204 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/buffer DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/buffer geos_HEADERS = \ BufferBuilder.h \ BufferInputLineSimplifier.h \ BufferOp.h \ BufferParameters.h \ BufferSubgraph.h \ OffsetCurveBuilder.h \ OffsetCurveSetBuilder.h \ OffsetSegmentGenerator.h \ OffsetSegmentString.h \ RightmostEdgeFinder.h \ SubgraphDepthLocater.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/buffer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/buffer/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/buffer/OffsetCurveBuilder.h0000644000175000017500000001366212206417150024047 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2006-2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetCurveBuilder.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_OFFSETCURVEBUILDER_H #define GEOS_OP_BUFFER_OFFSETCURVEBUILDER_H #include #include // for composition #include #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class PrecisionModel; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \class OffsetCurveBuilder opBuffer.h geos/opBuffer.h * * \brief * Computes the raw offset curve for a * single Geometry component (ring, line or point). * * A raw offset curve line is not noded - * it may contain self-intersections (and usually will). * The final buffer polygon is computed by forming a topological graph * of all the noded raw curves and tracing outside contours. * The points in the raw curve are rounded to a given geom::PrecisionModel. * */ class GEOS_DLL OffsetCurveBuilder { public: /* * @param nBufParams buffer parameters, this object will * keep a reference to the passed parameters * so caller must make sure the object is * kept alive for the whole lifetime of * the buffer builder. */ OffsetCurveBuilder(const geom::PrecisionModel *newPrecisionModel, const BufferParameters& nBufParams) : distance(0.0), precisionModel(newPrecisionModel), bufParams(nBufParams) {} /** * Gets the buffer parameters being used to generate the curve. * * @return the buffer parameters being used */ const BufferParameters& getBufferParameters() const { return bufParams; } /** * This method handles single points as well as lines. * Lines are assumed to not be closed (the function will not * fail for closed lines, but will generate superfluous line caps). * * @param lineList the std::vector to which the newly created * CoordinateSequences will be pushed_back. * Caller is responsible to delete these new elements. */ void getLineCurve(const geom::CoordinateSequence* inputPts, double distance, std::vector& lineList); /** * This method handles single points as well as lines. * * Lines are assumed to not be closed (the function will not * fail for closed lines, but will generate superfluous line caps). * * @param lineList the std::vector to which newly created * CoordinateSequences will be pushed_back. * Caller will be responsible to delete them. * @param leftSide indicates that the left side buffer will be * obtained/skipped * @param rightSide indicates that the right side buffer will * be obtained/skipped * * NOTE: this is a GEOS extension */ void getSingleSidedLineCurve(const geom::CoordinateSequence* inputPts, double distance, std::vector& lineList, bool leftSide, bool rightSide ) ; /** * This method handles the degenerate cases of single points and lines, * as well as rings. * * @param lineList the std::vector to which CoordinateSequences will * be pushed_back */ void getRingCurve(const geom::CoordinateSequence *inputPts, int side, double distance, std::vector& lineList); private: double distance; const geom::PrecisionModel* precisionModel; const BufferParameters& bufParams; /** * Use a value which results in a potential distance error which is * significantly less than the error due to * the quadrant segment discretization. * For QS = 8 a value of 100 is reasonable. * This should produce a maximum of 1% distance error. */ static const double SIMPLIFY_FACTOR; // 100.0; /** \brief * Computes the distance tolerance to use during input * line simplification. * * @param distance the buffer distance * @return the simplification tolerance */ double simplifyTolerance(double bufDistance); void computeLineBufferCurve(const geom::CoordinateSequence& inputPts, OffsetSegmentGenerator& segGen); void computeSingleSidedBufferCurve(const geom::CoordinateSequence& inputPts, bool isRightSide, OffsetSegmentGenerator& segGen); void computeRingBufferCurve(const geom::CoordinateSequence& inputPts, int side, OffsetSegmentGenerator& segGen); std::auto_ptr getSegGen(double dist); void computePointCurve(const geom::Coordinate& pt, OffsetSegmentGenerator& segGen); // Declare type as noncopyable OffsetCurveBuilder(const OffsetCurveBuilder& other); OffsetCurveBuilder& operator=(const OffsetCurveBuilder& rhs); }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_OFFSETCURVEBUILDER_H geos-3.4.2/include/geos/operation/buffer/OffsetCurveSetBuilder.h0000644000175000017500000001403112206417150024512 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetCurveSetBuilder.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_OFFSETCURVESETBUILDER_H #define GEOS_OP_BUFFER_OFFSETCURVESETBUILDER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class CoordinateSequence; class GeometryCollection; class Point; class LineString; class LinearRing; class Polygon; } namespace geomgraph { class Label; } namespace noding { class SegmentString; } namespace operation { namespace buffer { class OffsetCurveBuilder; } } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \class OffsetCurveSetBuilder opBuffer.h geos/opBuffer.h * * \brief * Creates all the raw offset curves for a buffer of a Geometry. * * Raw curves need to be noded together and polygonized to form the * final buffer area. * */ class GEOS_DLL OffsetCurveSetBuilder { private: // To keep track of newly-created Labels. // Labels will be relesed by object dtor std::vector newLabels; const geom::Geometry& inputGeom; double distance; OffsetCurveBuilder& curveBuilder; /// The raw offset curves computed. /// This class holds ownership of std::vector elements. /// std::vector curveList; /** * Creates a noding::SegmentString for a coordinate list which is a raw * offset curve, and adds it to the list of buffer curves. * The noding::SegmentString is tagged with a geomgraph::Label * giving the topology of the curve. * The curve may be oriented in either direction. * If the curve is oriented CW, the locations will be: * - Left: Location.EXTERIOR * - Right: Location.INTERIOR * * @param coord is raw offset curve, ownership transferred here */ void addCurve(geom::CoordinateSequence *coord, int leftLoc, int rightLoc); void add(const geom::Geometry& g); void addCollection(const geom::GeometryCollection *gc); /** * Add a Point to the graph. */ void addPoint(const geom::Point *p); void addLineString(const geom::LineString *line); void addPolygon(const geom::Polygon *p); /** * Add an offset curve for a polygon ring. * The side and left and right topological location arguments * assume that the ring is oriented CW. * If the ring is in the opposite orientation, * the left and right locations must be interchanged and the side * flipped. * * @param coord the coordinates of the ring (must not contain * repeated points) * @param offsetDistance the distance at which to create the buffer * @param side the side of the ring on which to construct the buffer * line * @param cwLeftLoc the location on the L side of the ring * (if it is CW) * @param cwRightLoc the location on the R side of the ring * (if it is CW) */ void addPolygonRing(const geom::CoordinateSequence *coord, double offsetDistance, int side, int cwLeftLoc, int cwRightLoc); /** * The ringCoord is assumed to contain no repeated points. * It may be degenerate (i.e. contain only 1, 2, or 3 points). * In this case it has no area, and hence has a minimum diameter of 0. * * @param ring * @param offsetDistance * @return */ bool isErodedCompletely(const geom::LinearRing* ringCoord, double bufferDistance); /** * Tests whether a triangular ring would be eroded completely by * the given buffer distance. * This is a precise test. It uses the fact that the inner buffer * of a triangle converges on the inCentre of the triangle (the * point equidistant from all sides). If the buffer distance is * greater than the distance of the inCentre from a side, the * triangle will be eroded completely. * * This test is important, since it removes a problematic case where * the buffer distance is slightly larger than the inCentre distance. * In this case the triangle buffer curve "inverts" with incorrect * topology, producing an incorrect hole in the buffer. * * @param triCoord * @param bufferDistance * @return */ bool isTriangleErodedCompletely(const geom::CoordinateSequence *triCoords, double bufferDistance); // Declare type as noncopyable OffsetCurveSetBuilder(const OffsetCurveSetBuilder& other); OffsetCurveSetBuilder& operator=(const OffsetCurveSetBuilder& rhs); public: /// Constructor OffsetCurveSetBuilder(const geom::Geometry& newInputGeom, double newDistance, OffsetCurveBuilder& newCurveBuilder); /// Destructor ~OffsetCurveSetBuilder(); /** \brief * Computes the set of raw offset curves for the buffer. * * Each offset curve has an attached {@link geomgraph::Label} indicating * its left and right location. * * @return a Collection of SegmentStrings representing the raw * buffer curves */ std::vector& getCurves(); /// Add raw curves for a set of CoordinateSequences // /// @param lineList is a list of CoordinateSequence, ownership /// of which is transferred here. /// void addCurves(const std::vector& lineList, int leftLoc, int rightLoc); }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_OFFSETCURVESETBUILDER_H geos-3.4.2/include/geos/operation/buffer/OffsetSegmentGenerator.h0000644000175000017500000002507212206417147024731 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetSegmentGenerator.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_OFFSETSEGMENTGENERATOR_H #define GEOS_OP_BUFFER_OFFSETSEGMENTGENERATOR_H #include #include #include // for composition #include // for composition #include // for composition #include // for composition #include // for composition #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class PrecisionModel; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * Generates segments which form an offset curve. * Supports all end cap and join options * provided for buffering. * Implements various heuristics to * produce smoother, simpler curves which are * still within a reasonable tolerance of the * true curve. * * @author Martin Davis * */ class GEOS_DLL OffsetSegmentGenerator { public: /* * @param nBufParams buffer parameters, this object will * keep a reference to the passed parameters * so caller must make sure the object is * kept alive for the whole lifetime of * the buffer builder. */ OffsetSegmentGenerator(const geom::PrecisionModel *newPrecisionModel, const BufferParameters& bufParams, double distance); /** * Tests whether the input has a narrow concave angle * (relative to the offset distance). * In this case the generated offset curve will contain self-intersections * and heuristic closing segments. * This is expected behaviour in the case of buffer curves. * For pure offset curves, * the output needs to be further treated * before it can be used. * * @return true if the input has a narrow concave angle */ bool hasNarrowConcaveAngle() const { return _hasNarrowConcaveAngle; } void initSideSegments(const geom::Coordinate &nS1, const geom::Coordinate &nS2, int nSide); /// Get coordinates by taking ownership of them // /// After this call, the coordinates reference in /// this object are dropped. Calling twice will /// segfault... /// /// FIXME: refactor memory management of this /// void getCoordinates(std::vector& to) { to.push_back(segList.getCoordinates()); } void closeRing() { segList.closeRing(); } /// Adds a CW circle around a point void createCircle(const geom::Coordinate &p, double distance); /// Adds a CW square around a point void createSquare(const geom::Coordinate &p, double distance); /// Add first offset point void addFirstSegment() { segList.addPt(offset1.p0); } /// Add last offset point void addLastSegment() { segList.addPt(offset1.p1); } void addNextSegment(const geom::Coordinate &p, bool addStartPoint); /// \brief /// Add an end cap around point p1, terminating a line segment /// coming from p0 void addLineEndCap(const geom::Coordinate &p0, const geom::Coordinate &p1); void addSegments(const geom::CoordinateSequence& pts, bool isForward) { segList.addPts(pts, isForward); } private: /** * Factor which controls how close offset segments can be to * skip adding a filler or mitre. */ static const double OFFSET_SEGMENT_SEPARATION_FACTOR; // 1.0E-3; /** * Factor which controls how close curve vertices on inside turns * can be to be snapped */ static const double INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR; // 1.0E-3; /** * Factor which controls how close curve vertices can be to be snapped */ static const double CURVE_VERTEX_SNAP_DISTANCE_FACTOR; // 1.0E-6; /** * Factor which determines how short closing segs can be for round buffers */ static const int MAX_CLOSING_SEG_LEN_FACTOR = 80; /** \brief * the max error of approximation (distance) between a quad segment and * the true fillet curve */ double maxCurveSegmentError; // 0.0 /** \brief * The angle quantum with which to approximate a fillet curve * (based on the input # of quadrant segments) */ double filletAngleQuantum; /// The Closing Segment Factor controls how long "closing /// segments" are. Closing segments are added at the middle of /// inside corners to ensure a smoother boundary for the buffer /// offset curve. In some cases (particularly for round joins /// with default-or-better quantization) the closing segments /// can be made quite short. This substantially improves /// performance (due to fewer intersections being created). /// /// A closingSegFactor of 0 results in lines to the corner vertex. /// A closingSegFactor of 1 results in lines halfway /// to the corner vertex. /// A closingSegFactor of 80 results in lines 1/81 of the way /// to the corner vertex (this option is reasonable for the very /// common default situation of round joins and quadrantSegs >= 8). /// /// The default is 1. /// int closingSegLengthFactor; // 1; /// Owned by this object, destroyed by dtor // /// This actually gets created multiple times /// and each of the old versions is pushed /// to the ptLists std::vector to ensure all /// created CoordinateSequences are properly /// destroyed. /// OffsetSegmentString segList; double distance; const geom::PrecisionModel* precisionModel; const BufferParameters& bufParams; algorithm::LineIntersector li; geom::Coordinate s0, s1, s2; geom::LineSegment seg0; geom::LineSegment seg1; geom::LineSegment offset0; geom::LineSegment offset1; int side; bool _hasNarrowConcaveAngle; // =false void addCollinear(bool addStartPoint); /// The mitre will be beveled if it exceeds the mitre ratio limit. // /// @param offset0 the first offset segment /// @param offset1 the second offset segment /// @param distance the offset distance /// void addMitreJoin(const geom::Coordinate& p, const geom::LineSegment& offset0, const geom::LineSegment& offset1, double distance); /// Adds a limited mitre join connecting the two reflex offset segments. // /// A limited mitre is a mitre which is beveled at the distance /// determined by the mitre ratio limit. /// /// @param offset0 the first offset segment /// @param offset1 the second offset segment /// @param distance the offset distance /// @param mitreLimit the mitre limit ratio /// void addLimitedMitreJoin( const geom::LineSegment& offset0, const geom::LineSegment& offset1, double distance, double mitreLimit); /// \brief /// Adds a bevel join connecting the two offset segments /// around a reflex corner. // /// @param offset0 the first offset segment /// @param offset1 the second offset segment /// void addBevelJoin(const geom::LineSegment& offset0, const geom::LineSegment& offset1); static const double PI; // 3.14159265358979 // Not in JTS, used for single-sided buffers int endCapIndex; void init(double newDistance); /** * Use a value which results in a potential distance error which is * significantly less than the error due to * the quadrant segment discretization. * For QS = 8 a value of 100 is reasonable. * This should produce a maximum of 1% distance error. */ static const double SIMPLIFY_FACTOR; // 100.0; /// Adds the offset points for an outside (convex) turn // /// @param orientation /// @param addStartPoint /// void addOutsideTurn(int orientation, bool addStartPoint); /// Adds the offset points for an inside (concave) turn // /// @param orientation /// @param addStartPoint /// void addInsideTurn(int orientation, bool addStartPoint); /** \brief * Compute an offset segment for an input segment on a given * side and at a given distance. * * The offset points are computed in full double precision, * for accuracy. * * @param seg the segment to offset * @param side the side of the segment the offset lies on * @param distance the offset distance * @param offset the points computed for the offset segment */ void computeOffsetSegment(const geom::LineSegment& seg, int side, double distance, geom::LineSegment& offset); /** * Adds points for a circular fillet around a reflex corner. * * Adds the start and end points * * @param p base point of curve * @param p0 start point of fillet curve * @param p1 endpoint of fillet curve * @param direction the orientation of the fillet * @param radius the radius of the fillet */ void addFillet(const geom::Coordinate &p, const geom::Coordinate &p0, const geom::Coordinate &p1, int direction, double radius); /** * Adds points for a circular fillet arc between two specified angles. * * The start and end point for the fillet are not added - * the caller must add them if required. * * @param direction is -1 for a CW angle, 1 for a CCW angle * @param radius the radius of the fillet */ void addFillet(const geom::Coordinate &p, double startAngle, double endAngle, int direction, double radius); private: // An OffsetSegmentGenerator cannot be copied because of member "const BufferParameters& bufParams" // Not declaring these functions triggers MSVC warning C4512: "assignment operator could not be generated" OffsetSegmentGenerator(const OffsetSegmentGenerator&); void operator=(const OffsetSegmentGenerator&); }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_BUFFER_OFFSETSEGMENTGENERATOR_H geos-3.4.2/include/geos/operation/buffer/OffsetSegmentString.h0000644000175000017500000001112712206417147024245 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetSegmentString.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_OFFSETSEGMENTSTRING_H #define GEOS_OP_BUFFER_OFFSETSEGMENTSTRING_H #include // for inlines #include // for inlines #include // for composition #include // for inlines #include #include #include namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /// A dynamic list of the vertices in a constructed offset curve. // /// Automatically removes close vertices /// which are closer than a given tolerance. /// /// @author Martin Davis /// class OffsetSegmentString { private: geom::CoordinateArraySequence* ptList; const geom::PrecisionModel* precisionModel; /** \brief * The distance below which two adjacent points on the curve * are considered to be coincident. * * This is chosen to be a small fraction of the offset distance. */ double minimumVertexDistance; /** \brief * Tests whether the given point is redundant relative to the previous * point in the list (up to tolerance) * * @param pt * @return true if the point is redundant */ bool isRedundant(const geom::Coordinate& pt) const { if (ptList->size() < 1) return false; const geom::Coordinate& lastPt = ptList->back(); double ptDist = pt.distance(lastPt); if (ptDist < minimumVertexDistance) return true; return false; } public: friend std::ostream& operator<< (std::ostream& os, const OffsetSegmentString& node); OffsetSegmentString() : ptList(new geom::CoordinateArraySequence()), precisionModel(NULL), minimumVertexDistance (0.0) { } ~OffsetSegmentString() { delete ptList; } void reset() { if ( ptList ) ptList->clear(); else ptList = new geom::CoordinateArraySequence(); precisionModel = NULL; minimumVertexDistance = 0.0; } void setPrecisionModel(const geom::PrecisionModel* nPrecisionModel) { precisionModel = nPrecisionModel; } void setMinimumVertexDistance(double nMinVertexDistance) { minimumVertexDistance = nMinVertexDistance; } void addPt(const geom::Coordinate& pt) { assert(precisionModel); geom::Coordinate bufPt = pt; precisionModel->makePrecise(bufPt); // don't add duplicate (or near-duplicate) points if (isRedundant(bufPt)) { return; } // we ask to allow repeated as we checked this ourself // (JTS uses a vector for ptList, not a CoordinateSequence, // we should do the same) ptList->add(bufPt, true); } void addPts(const geom::CoordinateSequence& pts, bool isForward) { if ( isForward ) { for (size_t i=0, n=pts.size(); i0; --i) { addPt(pts[i-1]); } } } /// Check that points are a ring // /// add the startpoint again if they are not void closeRing() { if (ptList->size() < 1) return; const geom::Coordinate& startPt = ptList->front(); const geom::Coordinate& lastPt = ptList->back(); if (startPt.equals(lastPt)) return; // we ask to allow repeated as we checked this ourself ptList->add(startPt, true); } /// Get coordinates by taking ownership of them // /// After this call, the coordinates reference in /// this object are dropped. Calling twice will /// segfault... /// /// FIXME: refactor memory management of this /// geom::CoordinateSequence* getCoordinates() { closeRing(); geom::CoordinateSequence* ret = ptList; ptList = 0; return ret; } inline size_t size() const { return ptList ? ptList->size() : 0 ; } }; inline std::ostream& operator<< (std::ostream& os, const OffsetSegmentString& lst) { if ( lst.ptList ) { os << *(lst.ptList); } else { os << "empty (consumed?)"; } return os; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos #endif // ndef GEOS_OP_BUFFER_OFFSETSEGMENTSTRING_H geos-3.4.2/include/geos/operation/buffer/RightmostEdgeFinder.h0000644000175000017500000000467412206417150024205 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/RightmostEdgeFinder.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_RIGHTMOSTEDGEFINDER_H #define GEOS_OP_BUFFER_RIGHTMOSTEDGEFINDER_H #include #include // for composition #include // Forward declarations namespace geos { namespace geom { } namespace geomgraph { class DirectedEdge; } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \brief * A RightmostEdgeFinder find the geomgraph::DirectedEdge in a list which has * the highest coordinate, and which is oriented L to R at that point. * (I.e. the right side is on the RHS of the edge.) */ class GEOS_DLL RightmostEdgeFinder { private: int minIndex; geom::Coordinate minCoord; geomgraph::DirectedEdge *minDe; geomgraph::DirectedEdge *orientedDe; void findRightmostEdgeAtNode(); void findRightmostEdgeAtVertex(); void checkForRightmostCoordinate(geomgraph::DirectedEdge *de); int getRightmostSide(geomgraph::DirectedEdge *de, int index); int getRightmostSideOfSegment(geomgraph::DirectedEdge *de, int i); public: /** \brief * A RightmostEdgeFinder finds the geomgraph::DirectedEdge with the * rightmost coordinate. * * The geomgraph::DirectedEdge returned is guaranteed to have the R of * the world on its RHS. */ RightmostEdgeFinder(); geomgraph::DirectedEdge* getEdge(); geom::Coordinate& getCoordinate(); /// Note that only Forward DirectedEdges will be checked void findEdge(std::vector* dirEdgeList); }; /*public*/ inline geomgraph::DirectedEdge* RightmostEdgeFinder::getEdge() { return orientedDe; } /*public*/ inline geom::Coordinate& RightmostEdgeFinder::getCoordinate() { return minCoord; } } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_BUFFER_RIGHTMOSTEDGEFINDER_H geos-3.4.2/include/geos/operation/buffer/SubgraphDepthLocater.h0000644000175000017500000000652212206417147024362 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/SubgraphDepthLocater.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_BUFFER_SUBGRAPHDEPTHLOCATER_H #define GEOS_OP_BUFFER_SUBGRAPHDEPTHLOCATER_H #include #include #include // for composition // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class DirectedEdge; } namespace operation { namespace buffer { class BufferSubgraph; class DepthSegment; } } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /** * \class SubgraphDepthLocater opBuffer.h geos/opBuffer.h * * \brief * Locates a subgraph inside a set of subgraphs, * in order to determine the outside depth of the subgraph. * * The input subgraphs are assumed to have had depths * already calculated for their edges. * */ class GEOS_DLL SubgraphDepthLocater { public: SubgraphDepthLocater(std::vector *newSubgraphs) : subgraphs(newSubgraphs) {} ~SubgraphDepthLocater() {} int getDepth(const geom::Coordinate &p); private: std::vector *subgraphs; geom::LineSegment seg; /** * Finds all non-horizontal segments intersecting the stabbing line. * The stabbing line is the ray to the right of stabbingRayLeftPt. * * @param stabbingRayLeftPt the left-hand origin of the stabbing line * @param stabbedSegments a vector to which DepthSegments intersecting * the stabbing line will be added. */ void findStabbedSegments(const geom::Coordinate &stabbingRayLeftPt, std::vector& stabbedSegments); /** * Finds all non-horizontal segments intersecting the stabbing line * in the list of dirEdges. * The stabbing line is the ray to the right of stabbingRayLeftPt. * * @param stabbingRayLeftPt the left-hand origin of the stabbing line * @param stabbedSegments the current vector of DepthSegments * intersecting the stabbing line will be added. */ void findStabbedSegments(const geom::Coordinate &stabbingRayLeftPt, std::vector *dirEdges, std::vector& stabbedSegments); /** * Finds all non-horizontal segments intersecting the stabbing line * in the input dirEdge. * The stabbing line is the ray to the right of stabbingRayLeftPt. * * @param stabbingRayLeftPt the left-hand origin of the stabbing line * @param stabbedSegments the current list of DepthSegments intersecting * the stabbing line */ void findStabbedSegments(const geom::Coordinate &stabbingRayLeftPt, geomgraph::DirectedEdge *dirEdge, std::vector& stabbedSegments); }; } // namespace geos::operation::buffer } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_BUFFER_SUBGRAPHDEPTHLOCATER_H geos-3.4.2/include/geos/operation/distance/0000755000175000017500000000000012206417230020444 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/distance/ConnectedElementLocationFilter.h0000644000175000017500000000441212206417150026672 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/ConnectedElementLocationFilter.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_DISTANCE_CONNECTEDELEMENTLOCATIONFILTER_H #define GEOS_OP_DISTANCE_CONNECTEDELEMENTLOCATIONFILTER_H #include #include // for inheritance #include // Forward declarations namespace geos { namespace geom { class Geometry; } namespace operation { namespace distance { class GeometryLocation; } } } namespace geos { namespace operation { // geos::operation namespace distance { // geos::operation::distance /** \brief * A ConnectedElementPointFilter extracts a single point * from each connected element in a Geometry * (e.g. a polygon, linestring or point) * and returns them in a list. The elements of the list are * DistanceOp::GeometryLocation. */ class GEOS_DLL ConnectedElementLocationFilter: public geom::GeometryFilter { private: std::vector *locations; public: /** * Returns a list containing a point from each Polygon, LineString, and Point * found inside the specified geometry. Thus, if the specified geometry is * not a GeometryCollection, an empty list will be returned. The elements of the list * are {@link com.vividsolutions.jts.operation.distance.GeometryLocation}s. */ static std::vector* getLocations(const geom::Geometry *geom); ConnectedElementLocationFilter(std::vector *newLocations) : locations(newLocations) {} void filter_ro(const geom::Geometry *geom); void filter_rw(geom::Geometry *geom); }; } // namespace geos::operation::distance } // namespace geos::operation } // namespace geos #endif // GEOS_OP_DISTANCE_CONNECTEDELEMENTLOCATIONFILTER_H geos-3.4.2/include/geos/operation/distance/ConnectedElementPointFilter.h0000644000175000017500000000400012206417150026204 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/ConnectedElementPointFilter.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_DISTANCE_CONNECTEDELEMENTPOINTFILTER_H #define GEOS_OP_DISTANCE_CONNECTEDELEMENTPOINTFILTER_H #include #include // for inheritance #include // Forward declarations namespace geos { namespace geom { class Coordinate; class Geometry; } } namespace geos { namespace operation { // geos::operation namespace distance { // geos::operation::distance /** \brief * Extracts a single point * from each connected element in a Geometry * (e.g. a polygon, linestring or point) * and returns them in a list */ class GEOS_DLL ConnectedElementPointFilter: public geom::GeometryFilter { private: std::vector *pts; public: /** * Returns a list containing a Coordinate from each Polygon, LineString, and Point * found inside the specified geometry. Thus, if the specified geometry is * not a GeometryCollection, an empty list will be returned. */ static std::vector* getCoordinates(const geom::Geometry *geom); ConnectedElementPointFilter(std::vector *newPts) : pts(newPts) {} void filter_ro(const geom::Geometry *geom); //void filter_rw(geom::Geometry * /*geom*/) {}; }; } // namespace geos::operation::distance } // namespace geos::operation } // namespace geos #endif // GEOS_OP_DISTANCE_CONNECTEDELEMENTPOINTFILTER_H geos-3.4.2/include/geos/operation/distance/DistanceOp.h0000644000175000017500000002026312206417150022652 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/DistanceOp.java r335 (JTS-1.12-) * **********************************************************************/ #ifndef GEOS_OP_DISTANCE_DISTANCEOP_H #define GEOS_OP_DISTANCE_DISTANCEOP_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Polygon; class LineString; class Point; class Geometry; class CoordinateSequence; } namespace operation { namespace distance { class GeometryLocation; } } } namespace geos { namespace operation { // geos::operation namespace distance { // geos::operation::distance /** * \brief * Find two points on two {@link Geometry}s which lie * within a given distance, or else are the nearest points * on the geometries (in which case this also * provides the distance between the geometries). * * The distance computation also finds a pair of points in the * input geometries which have the minimum distance between them. * If a point lies in the interior of a line segment, * the coordinate computed is a close * approximation to the exact point. * * The algorithms used are straightforward O(n^2) * comparisons. This worst-case performance could be improved on * by using Voronoi techniques or spatial indexes. * */ class GEOS_DLL DistanceOp { public: /** * \brief * Compute the distance between the nearest points of two geometries. * * @param g0 a {@link Geometry} * @param g1 another {@link Geometry} * @return the distance between the geometries * @return 0 if either input geometry is empty * @throws IllegalArgumentException if either input geometry is null */ static double distance(const geom::Geometry& g0, const geom::Geometry& g1); /// @deprecated, use the version taking references static double distance(const geom::Geometry *g0, const geom::Geometry *g1); /** * \brief * Test whether two geometries lie within a given distance of * each other. * * @param g0 a {@link Geometry} * @param g1 another {@link Geometry} * @param distance the distance to test * @return true if g0.distance(g1) <= distance */ static bool isWithinDistance(const geom::Geometry& g0, const geom::Geometry& g1, double distance); /** * Compute the the nearest points of two geometries. * * The points are presented in the same order as the input Geometries. * * @param g0 a {@link Geometry} * @param g1 another {@link Geometry} * * @return the nearest points in the geometries, ownership to caller. * A NULL return means one of the geometries is empty. * */ static geom::CoordinateSequence* nearestPoints( const geom::Geometry *g0, const geom::Geometry *g1); /** * Compute the the closest points of two geometries. * * The points are presented in the same order as the input Geometries. * * @param g0 a {@link Geometry} * @param g1 another {@link Geometry} * * @return the closest points in the geometries, ownership to caller. * A NULL return means one of the geometries is empty. * * @deprecated renamed to nearestPoints */ static geom::CoordinateSequence* closestPoints( const geom::Geometry *g0, const geom::Geometry *g1); /// @deprecated use the one taking references DistanceOp(const geom::Geometry *g0, const geom::Geometry *g1); /** * \brief * Constructs a DistanceOp that computes the distance and * nearest points between the two specified geometries. * * @param g0 a Geometry * @param g1 a Geometry */ DistanceOp(const geom::Geometry& g0, const geom::Geometry& g1); /** * \brief * Constructs a DistanceOp that computes the distance and nearest * points between the two specified geometries. * * @param g0 a Geometry * @param g1 a Geometry * @param terminateDistance the distance on which to terminate * the search */ DistanceOp(const geom::Geometry& g0, const geom::Geometry& g1, double terminateDistance); ~DistanceOp(); /** * Report the distance between the closest points on the input geometries. * * @return the distance between the geometries */ double distance(); /** * Report the coordinates of the closest points in the input geometries. * The points are presented in the same order as the input Geometries. * * @return a pair of {@link Coordinate}s of the closest points * as a newly allocated object (ownership to caller) * * @deprecated renamed to nearestPoints */ geom::CoordinateSequence* closestPoints(); /** * Report the coordinates of the nearest points in the input geometries. * The points are presented in the same order as the input Geometries. * * @return a pair of {@link Coordinate}s of the nearest points * as a newly allocated object (ownership to caller) * */ geom::CoordinateSequence* nearestPoints(); private: /** * Report the locations of the closest points in the input geometries. * The locations are presented in the same order as the input * Geometries. * * @return a pair of {@link GeometryLocation}s for the closest points. * Ownership of returned object is left to this instance and * it's reference will be alive for the whole lifetime of it. * * NOTE: this is public in JTS, but we aim at API reduction here... * */ std::vector* nearestLocations(); // input (TODO: use two references instead..) std::vector geom; double terminateDistance; // working algorithm::PointLocator ptLocator; // TODO: use auto_ptr std::vector *minDistanceLocation; double minDistance; // memory management std::vector newCoords; void updateMinDistance(std::vector& locGeom, bool flip); void computeMinDistance(); void computeContainmentDistance(); void computeInside(std::vector *locs, const std::vector& polys, std::vector *locPtPoly); void computeInside(GeometryLocation *ptLoc, const geom::Polygon *poly, std::vector *locPtPoly); /** * Computes distance between facets (lines and points) * of input geometries. */ void computeFacetDistance(); void computeMinDistanceLines( const std::vector& lines0, const std::vector& lines1, std::vector& locGeom); void computeMinDistancePoints( const std::vector& points0, const std::vector& points1, std::vector& locGeom); void computeMinDistanceLinesPoints( const std::vector& lines0, const std::vector& points1, std::vector& locGeom); void computeMinDistance(const geom::LineString *line0, const geom::LineString *line1, std::vector& locGeom); void computeMinDistance(const geom::LineString *line, const geom::Point *pt, std::vector& locGeom); }; } // namespace geos::operation::distance } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_DISTANCE_DISTANCEOP_H geos-3.4.2/include/geos/operation/distance/GeometryLocation.h0000644000175000017500000000641412206417150024107 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/GeometryLocation.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_DISTANCE_GEOMETRYLOCATION_H #define GEOS_OP_DISTANCE_GEOMETRYLOCATION_H #include #include // for composition // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace operation { // geos::operation namespace distance { // geos::operation::distance /** \brief * Represents the location of a point on a Geometry. * * Maintains both the actual point location * (which may not be exact, if the point is not a vertex) * as well as information about the component * and segment index where the point occurs. * Locations inside area Geometrys will not have an associated segment index, * so in this case the segment index will have the sentinel value of * INSIDE_AREA. */ class GEOS_DLL GeometryLocation { private: const geom::Geometry *component; int segIndex; geom::Coordinate pt; public: /** \brief * A Special value of segmentIndex used for locations * inside area geometries. * * These locations are not located on a segment, * and thus do not have an associated segment index. */ static const int INSIDE_AREA = -1; /** \brief * Constructs a GeometryLocation specifying a point on a geometry, * as well as the segment that the point is on (or INSIDE_AREA if * the point is not on a segment). * * @param component the component of the geometry containing the point * @param segIndex the segment index of the location, or INSIDE_AREA * @param pt the coordinate of the location */ GeometryLocation(const geom::Geometry *component, int segIndex, const geom::Coordinate &pt); /** \brief * Constructs a GeometryLocation specifying a point inside an * area geometry. * * @param component the component of the geometry containing the point * @param pt the coordinate of the location */ GeometryLocation(const geom::Geometry *component, const geom::Coordinate &pt); /** * Returns the geometry component on (or in) which this location occurs. */ const geom::Geometry* getGeometryComponent(); /** * Returns the segment index for this location. * * If the location is inside an * area, the index will have the value INSIDE_AREA; * * @return the segment index for the location, or INSIDE_AREA */ int getSegmentIndex(); /** * Returns the geom::Coordinate of this location. */ geom::Coordinate& getCoordinate(); /** \brief * Tests whether this location represents a point * inside an area geometry. */ bool isInsideArea(); }; } // namespace geos::operation::distance } // namespace geos::operation } // namespace geos #endif // GEOS_OP_DISTANCE_GEOMETRYLOCATION_H geos-3.4.2/include/geos/operation/distance/Makefile.am0000644000175000017500000000041712206417150022503 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/distance geos_HEADERS = \ ConnectedElementLocationFilter.h \ ConnectedElementPointFilter.h \ DistanceOp.h \ GeometryLocation.h geos-3.4.2/include/geos/operation/distance/Makefile.in0000644000175000017500000003641112206417162022522 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/distance DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/distance geos_HEADERS = \ ConnectedElementLocationFilter.h \ ConnectedElementPointFilter.h \ DistanceOp.h \ GeometryLocation.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/distance/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/distance/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/linemerge/0000755000175000017500000000000012206417230020621 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/linemerge/EdgeString.h0000644000175000017500000000440012206417147023032 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/EdgeString.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_EDGESTRING_H #define GEOS_OP_LINEMERGE_EDGESTRING_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class GeometryFactory; class CoordinateSequence; class LineString; } namespace operation { namespace linemerge { class LineMergeDirectedEdge; } } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** * \brief * A sequence of LineMergeDirectedEdge forming one of the lines that will * be output by the line-merging process. */ class GEOS_DLL EdgeString { private: const geom::GeometryFactory *factory; std::vector directedEdges; geom::CoordinateSequence *coordinates; geom::CoordinateSequence* getCoordinates(); public: /* * \brief * Constructs an EdgeString with the given factory used to * convert this EdgeString to a LineString */ EdgeString(const geom::GeometryFactory *newFactory); ~EdgeString(); /** * Adds a directed edge which is known to form part of this line. */ void add(LineMergeDirectedEdge *directedEdge); /* * Converts this EdgeString into a LineString. */ geom::LineString* toLineString(); }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_LINEMERGE_EDGESTRING_H geos-3.4.2/include/geos/operation/linemerge/LineMergeDirectedEdge.h0000644000175000017500000000423012206417147025100 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeDirectedEdge.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_LINEMERGEDIRECTEDEDGE_H #define GEOS_OP_LINEMERGE_LINEMERGEDIRECTEDEDGE_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; //class LineString; } namespace planargraph { class Node; } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** * \brief * A planargraph::DirectedEdge of a LineMergeGraph. * */ class GEOS_DLL LineMergeDirectedEdge: public planargraph::DirectedEdge { public: /** * Constructs a LineMergeDirectedEdge connecting the from * node to the to node. * * @param directionPt * specifies this DirectedEdge's direction (given by an * imaginary line from the from node to * directionPt) * * @param edgeDirection * whether this DirectedEdge's direction is the same as or * opposite to that of the parent Edge (if any) */ LineMergeDirectedEdge(planargraph::Node *from, planargraph::Node *to, const geom::Coordinate& directionPt, bool edgeDirection); /** * Returns the directed edge that starts at this directed edge's end point, or null * if there are zero or multiple directed edges starting there. * @return */ LineMergeDirectedEdge* getNext(); }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #endif // GEOS_OP_LINEMERGE_LINEMERGEDIRECTEDEDGE_H geos-3.4.2/include/geos/operation/linemerge/LineMergeEdge.h0000644000175000017500000000326212206417147023440 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeEdge.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_LINEMERGEEDGE_H #define GEOS_OP_LINEMERGE_LINEMERGEEDGE_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class LineString; } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** \brief * An edge of a LineMergeGraph. The marked field indicates * whether this Edge has been logically deleted from the graph. */ class GEOS_DLL LineMergeEdge: public planargraph::Edge { private: const geom::LineString *line; public: /** * Constructs a LineMergeEdge with vertices given by the specified * LineString. */ LineMergeEdge(const geom::LineString *newLine); /** * Returns the LineString specifying the vertices of this edge. */ const geom::LineString* getLine() const; }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #endif // GEOS_OP_LINEMERGE_LINEMERGEEDGE_H geos-3.4.2/include/geos/operation/linemerge/LineMergeGraph.h0000644000175000017500000000457312206417147023643 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeGraph.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_LINEMERGEGRAPH_H #define GEOS_OP_LINEMERGE_LINEMERGEGRAPH_H #include #include // for inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineString; class Coordinate; } namespace planargraph { class Node; class Edge; class DirectedEdge; } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** \brief * A planar graph of edges that is analyzed to sew the edges together. * * The marked flag on planargraph::Edge * and planargraph::Node indicates whether they have been * logically deleted from the graph. */ class GEOS_DLL LineMergeGraph: public planargraph::PlanarGraph { private: planargraph::Node* getNode(const geom::Coordinate &coordinate); std::vector newNodes; std::vector newEdges; std::vector newDirEdges; public: /** \brief * Adds an Edge, DirectedEdges, and Nodes for the given * LineString representation of an edge. * * Empty lines or lines with all coordinates equal are not added. * * @param lineString the linestring to add to the graph */ void addEdge(const geom::LineString *lineString); ~LineMergeGraph(); }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_LINEMERGE_LINEMERGEGRAPH_H geos-3.4.2/include/geos/operation/linemerge/LineMerger.h0000644000175000017500000000675112206417147023043 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMerger.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_LINEMERGER_H #define GEOS_OP_LINEMERGE_LINEMERGER_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineString; class GeometryFactory; class Geometry; } namespace planargraph { class Node; } namespace operation { namespace linemerge { class EdgeString; class LineMergeDirectedEdge; } } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** * * \brief * Sews together a set of fully noded LineStrings. * * Sewing stops at nodes of degree 1 or 3 or more. * The exception is an isolated loop, which only has degree-2 nodes, * in which case a node is simply chosen as a starting point. * The direction of each merged LineString will be that of the majority * of the LineStrings from which it was derived. * * Any dimension of Geometry is handled. * The constituent linework is extracted to form the edges. * The edges must be correctly noded; that is, they must only meet * at their endpoints. * * The LineMerger will still run on incorrectly noded input * but will not form polygons from incorrected noded edges. * */ class GEOS_DLL LineMerger { private: LineMergeGraph graph; std::vector *mergedLineStrings; std::vector edgeStrings; const geom::GeometryFactory *factory; void merge(); void buildEdgeStringsForObviousStartNodes(); void buildEdgeStringsForIsolatedLoops(); void buildEdgeStringsForUnprocessedNodes(); void buildEdgeStringsForNonDegree2Nodes(); void buildEdgeStringsStartingAt(planargraph::Node *node); EdgeString* buildEdgeStringStartingWith(LineMergeDirectedEdge *start); public: LineMerger(); ~LineMerger(); /** * \brief * Adds a collection of Geometries to be processed. * May be called multiple times. * * Any dimension of Geometry may be added; the constituent * linework will be extracted. */ void add(std::vector *geometries); /** * \brief * Adds a Geometry to be processed. * May be called multiple times. * * Any dimension of Geometry may be added; the constituent * linework will be extracted. */ void add(const geom::Geometry *geometry); /** * \brief * Returns the LineStrings built by the merging process. * * Ownership of vector _and_ its elements to caller. */ std::vector* getMergedLineStrings(); void add(const geom::LineString *lineString); }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_LINEMERGE_LINEMERGER_H geos-3.4.2/include/geos/operation/linemerge/LineSequencer.h0000644000175000017500000002076512206417147023555 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineSequencer.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_LINEMERGE_LINESEQUENCER_H #define GEOS_OP_LINEMERGE_LINESEQUENCER_H #include #include // for composition #include // for inlines #include // for inlines #include #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Geometry; class LineString; } namespace planargraph { class DirectedEdge; class Subgraph; class Node; } } namespace geos { namespace operation { // geos::operation namespace linemerge { // geos::operation::linemerge /** \brief * Builds a sequence from a set of LineStrings so that * they are ordered end to end. * * A sequence is a complete non-repeating list of the linear * components of the input. Each linestring is oriented * so that identical endpoints are adjacent in the list. * * A typical use case is to convert a set of * unoriented geometric links * from a linear network * (e.g. such as block faces on a bus route) * into a continuous oriented path through the network. * * The input linestrings may form one or more connected sets. * The input linestrings should be correctly noded, or the results may * not be what is expected. * The computed output is a single MultiLineString containing the ordered * linestrings in the sequence. * * The sequencing employs the classic Eulerian path graph algorithm. * Since Eulerian paths are not uniquely determined, * further rules are used to * make the computed sequence preserve as much as possible of the input * ordering. * Within a connected subset of lines, the ordering rules are: * * - If there is degree-1 node which is the start * node of an linestring, use that node as the start of the sequence * - If there is a degree-1 node which is the end * node of an linestring, use that node as the end of the sequence * - If the sequence has no degree-1 nodes, use any node as the start * * Note that not all arrangements of lines can be sequenced. * For a connected set of edges in a graph, * Euler's Theorem states that there is a sequence * containing each edge once * if and only if there are no more than 2 nodes of odd degree. * If it is not possible to find a sequence, the isSequenceable method * will return false. * */ class GEOS_DLL LineSequencer { private: typedef std::list DirEdgeList; typedef std::vector< DirEdgeList* > Sequences; LineMergeGraph graph; const geom::GeometryFactory *factory; unsigned int lineCount; bool isRun; std::auto_ptr sequencedGeometry; bool isSequenceableVar; void addLine(const geom::LineString *lineString); void computeSequence(); Sequences* findSequences(); DirEdgeList* findSequence(planargraph::Subgraph& graph); void delAll( Sequences& ); /// return a newly allocated LineString static geom::LineString* reverse(const geom::LineString *line); /** * Builds a geometry ({@link LineString} or {@link MultiLineString} ) * representing the sequence. * * @param sequences * a vector of vectors of const planarDirectedEdges * with LineMergeEdges as their parent edges. * Ownership of container _and_ contents retained by caller. * * @return the sequenced geometry, possibly NULL * if no sequence exists */ geom::Geometry* buildSequencedGeometry(const Sequences& sequences); static const planargraph::Node* findLowestDegreeNode( const planargraph::Subgraph& graph); void addReverseSubpath(const planargraph::DirectedEdge *de, DirEdgeList& deList, DirEdgeList::iterator lit, bool expectedClosed); /** * Finds an {@link DirectedEdge} for an unvisited edge (if any), * choosing the dirEdge which preserves orientation, if possible. * * @param node the node to examine * @return the dirEdge found, or null * if none were unvisited */ static const planargraph::DirectedEdge* findUnvisitedBestOrientedDE( const planargraph::Node* node); /** * Computes a version of the sequence which is optimally * oriented relative to the underlying geometry. * * Heuristics used are: * * - If the path has a degree-1 node which is the start * node of an linestring, use that node as the start of the sequence * - If the path has a degree-1 node which is the end * node of an linestring, use that node as the end of the sequence * - If the sequence has no degree-1 nodes, use any node as the start * (NOTE: in this case could orient the sequence according to the * majority of the linestring orientations) * * @param seq a List of planarDirectedEdges * @return the oriented sequence, possibly same as input if already * oriented */ DirEdgeList* orient(DirEdgeList* seq); /** * Reverse the sequence. * This requires reversing the order of the dirEdges, and flipping * each dirEdge as well * * @param seq a List of DirectedEdges, in sequential order * @return the reversed sequence */ DirEdgeList* reverse(DirEdgeList& seq); /** * Tests whether a complete unique path exists in a graph * using Euler's Theorem. * * @param graph the subgraph containing the edges * @return true if a sequence exists */ bool hasSequence(planargraph::Subgraph& graph); public: static geom::Geometry* sequence(const geom::Geometry& geom) { LineSequencer sequencer; sequencer.add(geom); return sequencer.getSequencedLineStrings(); } LineSequencer() : factory(0), lineCount(0), isRun(false), sequencedGeometry(0), isSequenceableVar(false) {} /** * Tests whether a {@link Geometry} is sequenced correctly. * {@llink LineString}s are trivially sequenced. * {@link MultiLineString}s are checked for correct sequencing. * Otherwise, isSequenced is defined * to be true for geometries that are not lineal. * * @param geom the geometry to test * @return true if the geometry is sequenced or is not lineal */ static bool isSequenced(const geom::Geometry* geom); /** * Tests whether the arrangement of linestrings has a valid * sequence. * * @return true if a valid sequence exists. */ bool isSequenceable() { computeSequence(); return isSequenceableVar; } /** * Adds a {@link Geometry} to be sequenced. * May be called multiple times. * Any dimension of Geometry may be added; the constituent * linework will be extracted. * * @param geometry the geometry to add */ void add(const geom::Geometry& geometry) { geometry.applyComponentFilter(*this); } template void add(TargetContainer& geoms) { for (typename TargetContainer::const_iterator i = geoms.begin(), e = geoms.end(); i != e; ++i) { const geom::Geometry* g = *i; add(*g); } } /** * Act as a GeometryComponentFilter so to extract * the linearworks */ void filter(const geom::Geometry* g) { if (const geom::LineString *ls=dynamic_cast(g)) { addLine(ls); } } /** * Returns the LineString or MultiLineString * built by the sequencing process, if one exists. * * @param release release ownership of computed Geometry * @return the sequenced linestrings, * or null if a valid sequence * does not exist. */ geom::Geometry* getSequencedLineStrings(bool release=1) { computeSequence(); if (release) return sequencedGeometry.release(); else return sequencedGeometry.get(); } }; } // namespace geos::operation::linemerge } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_LINEMERGE_LINESEQUENCER_H geos-3.4.2/include/geos/operation/linemerge/Makefile.am0000644000175000017500000000043312206417147022664 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/linemerge geos_HEADERS = \ EdgeString.h \ LineMergeDirectedEdge.h \ LineMergeEdge.h \ LineMergeGraph.h \ LineMerger.h \ LineSequencer.h geos-3.4.2/include/geos/operation/linemerge/Makefile.in0000644000175000017500000003643012206417162022700 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/linemerge DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/linemerge geos_HEADERS = \ EdgeString.h \ LineMergeDirectedEdge.h \ LineMergeEdge.h \ LineMergeGraph.h \ LineMerger.h \ LineSequencer.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/linemerge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/linemerge/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/overlay/0000755000175000017500000000000012206417230020333 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/overlay/EdgeSetNoder.h0000644000175000017500000000334612206417147023031 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/EdgeSetNoder.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_EDGESETNODER_H #define GEOS_OP_OVERLAY_EDGESETNODER_H #include #include // Forward declarations namespace geos { namespace geomgraph { class Edge; } namespace algorithm { class LineIntersector; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * Nodes a set of edges. * * Takes one or more sets of edges and constructs a * new set of edges consisting of all the split edges created by * noding the input edges together */ class GEOS_DLL EdgeSetNoder { private: algorithm::LineIntersector *li; std::vector* inputEdges; public: EdgeSetNoder(algorithm::LineIntersector *newLi) : li(newLi), inputEdges(new std::vector()) {} ~EdgeSetNoder() { delete inputEdges; // TODO: avoid heap allocation } void addEdges(std::vector *edges); std::vector* getNodedEdges(); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_OVERLAY_EDGESETNODER_H geos-3.4.2/include/geos/operation/overlay/ElevationMatrix.h0000644000175000017500000000575212206417147023637 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: original (by strk) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_ELEVATIONMATRIX_H #define GEOS_OP_OVERLAY_ELEVATIONMATRIX_H #include #include // for inheritance #include // for composition #include // for composition #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Geometry; } namespace operation { namespace overlay { class ElevationMatrixFilter; class ElevationMatrix; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /* * This is the CoordinateFilter used by ElevationMatrix. * filter_ro is used to add Geometry Coordinate's Z * values to the matrix. * filter_rw is used to actually elevate Geometries. */ class GEOS_DLL ElevationMatrixFilter: public geom::CoordinateFilter { public: ElevationMatrixFilter(ElevationMatrix &em); ~ElevationMatrixFilter(); void filter_rw(geom::Coordinate *c) const; void filter_ro(const geom::Coordinate *c); private: ElevationMatrix &em; double avgElevation; // Declare type as noncopyable ElevationMatrixFilter(const ElevationMatrixFilter& other); ElevationMatrixFilter& operator=(const ElevationMatrixFilter& rhs); }; /* */ class GEOS_DLL ElevationMatrix { friend class ElevationMatrixFilter; public: ElevationMatrix(const geom::Envelope &extent, unsigned int rows, unsigned int cols); ~ElevationMatrix(); void add(const geom::Geometry *geom); void elevate(geom::Geometry *geom) const; // set Z value for each cell w/out one double getAvgElevation() const; ElevationMatrixCell &getCell(const geom::Coordinate &c); const ElevationMatrixCell &getCell(const geom::Coordinate &c) const; std::string print() const; private: ElevationMatrixFilter filter; void add(const geom::Coordinate &c); geom::Envelope env; unsigned int cols; unsigned int rows; double cellwidth; double cellheight; mutable bool avgElevationComputed; mutable double avgElevation; std::vectorcells; }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_ELEVATIONMATRIX_H geos-3.4.2/include/geos/operation/overlay/ElevationMatrixCell.h0000644000175000017500000000303312206417147024425 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: original (by strk) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_ELEVATIONMATRIXCELL_H #define GEOS_OP_OVERLAY_ELEVATIONMATRIXCELL_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay class GEOS_DLL ElevationMatrixCell { public: ElevationMatrixCell(); ~ElevationMatrixCell(); void add(const geom::Coordinate &c); void add(double z); double getAvg(void) const; double getTotal(void) const; std::string print() const; private: std::setzvals; double ztot; }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_ELEVATIONMATRIXCELL_H geos-3.4.2/include/geos/operation/overlay/LineBuilder.h0000644000175000017500000000733712206417147022723 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/LineBuilder.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_LINEBUILDER_H #define GEOS_OP_OVERLAY_LINEBUILDER_H #include #include // for OverlayOp::OpCode enum #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class GeometryFactory; class CoordinateSequence; class LineString; } namespace geomgraph { class DirectedEdge; class Edge; } namespace algorithm { class PointLocator; } namespace operation { namespace overlay { class OverlayOp; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * Forms JTS LineStrings out of a the graph of geomgraph::DirectedEdge * created by an OverlayOp. * */ class GEOS_DLL LineBuilder { public: LineBuilder(OverlayOp *newOp, const geom::GeometryFactory *newGeometryFactory, algorithm::PointLocator *newPtLocator); ~LineBuilder(); /** * @return a list of the LineStrings in the result of the specified overlay operation */ std::vector* build(OverlayOp::OpCode opCode); /** * Collect line edges which are in the result. * * Line edges are in the result if they are not part of * an area boundary, if they are in the result of the overlay operation, * and if they are not covered by a result area. * * @param de the directed edge to test. * @param opCode the overlap operation * @param edges the list of included line edges. */ void collectLineEdge(geomgraph::DirectedEdge *de, OverlayOp::OpCode opCode, std::vector* edges); private: OverlayOp *op; const geom::GeometryFactory *geometryFactory; algorithm::PointLocator *ptLocator; std::vector lineEdgesList; std::vector* resultLineList; void findCoveredLineEdges(); void collectLines(OverlayOp::OpCode opCode); void buildLines(OverlayOp::OpCode opCode); void labelIsolatedLines(std::vector *edgesList); /** * Collect edges from Area inputs which should be in the result but * which have not been included in a result area. * This happens ONLY: * * - during an intersection when the boundaries of two * areas touch in a line segment * - OR as a result of a dimensional collapse. * */ void collectBoundaryTouchEdge(geomgraph::DirectedEdge *de, OverlayOp::OpCode opCode, std::vector* edges); /** * Label an isolated node with its relationship to the target geometry. */ void labelIsolatedLine(geomgraph::Edge *e, int targetIndex); /* * If the given CoordinateSequence has mixed 3d/2d vertexes * set Z for all vertexes missing it. * The Z value is interpolated between 3d vertexes and copied * from a 3d vertex to the end. */ void propagateZ(geom::CoordinateSequence *cs); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_LINEBUILDER_H geos-3.4.2/include/geos/operation/overlay/Makefile.am0000644000175000017500000000103012206417147022370 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snap #EXTRA_DIST = geosdir = $(includedir)/geos/operation/overlay geos_HEADERS = \ EdgeSetNoder.h \ ElevationMatrixCell.h \ ElevationMatrix.h \ LineBuilder.h \ MaximalEdgeRing.h \ MinimalEdgeRing.h \ MinimalEdgeRing.inl \ OverlayNodeFactory.h \ OverlayOp.h \ PointBuilder.h \ PolygonBuilder.h \ validate/FuzzyPointLocator.h \ validate/OffsetPointGenerator.h \ validate/OverlayResultValidator.h geos-3.4.2/include/geos/operation/overlay/Makefile.in0000644000175000017500000005154512206417162022416 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/overlay DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snap #EXTRA_DIST = geosdir = $(includedir)/geos/operation/overlay geos_HEADERS = \ EdgeSetNoder.h \ ElevationMatrixCell.h \ ElevationMatrix.h \ LineBuilder.h \ MaximalEdgeRing.h \ MinimalEdgeRing.h \ MinimalEdgeRing.inl \ OverlayNodeFactory.h \ OverlayOp.h \ PointBuilder.h \ PolygonBuilder.h \ validate/FuzzyPointLocator.h \ validate/OffsetPointGenerator.h \ validate/OverlayResultValidator.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/overlay/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/overlay/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/overlay/MaximalEdgeRing.h0000644000175000017500000000607712206417147023522 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/MaximalEdgeRing.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_MAXIMALEDGERING_H #define GEOS_OP_OVERLAY_MAXIMALEDGERING_H #include #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class GeometryFactory; } namespace geomgraph { class DirectedEdge; //class EdgeRing; } namespace operation { namespace overlay { class MinimalEdgeRing; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * A ring of {@link edges} which may contain nodes of degree > 2. * * A MaximalEdgeRing may represent two different spatial entities: * * - a single polygon possibly containing inversions (if the ring is oriented CW) * - a single hole possibly containing exversions (if the ring is oriented CCW) * * If the MaximalEdgeRing represents a polygon, * the interior of the polygon is strongly connected. * * These are the form of rings used to define polygons under some spatial data models. * However, under the OGC SFS model, {@link MinimalEdgeRings} are required. * A MaximalEdgeRing can be converted to a list of MinimalEdgeRings using the * {@link #buildMinimalRings() } method. * * @see com.vividsolutions.jts.operation.overlay.MinimalEdgeRing */ class GEOS_DLL MaximalEdgeRing: public geomgraph::EdgeRing { public: MaximalEdgeRing(geomgraph::DirectedEdge *start, const geom::GeometryFactory *geometryFactory); // throw(const TopologyException &) virtual ~MaximalEdgeRing(); geomgraph::DirectedEdge* getNext(geomgraph::DirectedEdge *de); void setEdgeRing(geomgraph::DirectedEdge* de, geomgraph::EdgeRing* er); /// \brief /// This function returns a newly allocated vector of /// pointers to newly allocated MinimalEdgeRing objects. /// /// @deprecated pass the vector yourself instead /// std::vector* buildMinimalRings(); /// \brief /// This function pushes pointers to newly allocated MinimalEdgeRing /// objects to the provided vector. /// void buildMinimalRings(std::vector& minEdgeRings); void buildMinimalRings(std::vector& minEdgeRings); /// \brief /// For all nodes in this EdgeRing, /// link the DirectedEdges at the node to form minimalEdgeRings /// void linkDirectedEdgesForMinimalEdgeRings(); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_OVERLAY_MAXIMALEDGERING_H geos-3.4.2/include/geos/operation/overlay/MinimalEdgeRing.h0000644000175000017500000000376512206417147023521 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/MinimalEdgeRing.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_MINIMALEDGERING_H #define GEOS_OP_OVERLAY_MINIMALEDGERING_H #include #include // for inheritance #include // for inlines #include #include // Forward declarations namespace geos { namespace geom { class GeometryFactory; } namespace geomgraph { class DirectedEdge; class EdgeRing; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * A ring of {@link Edge}s with the property that no node * has degree greater than 2. * * These are the form of rings required * to represent polygons under the OGC SFS spatial data model. * * @see operation::overlay::MaximalEdgeRing * */ class GEOS_DLL MinimalEdgeRing: public geomgraph::EdgeRing { public: // CGAlgorithms argument obsoleted MinimalEdgeRing(geomgraph::DirectedEdge *start, const geom::GeometryFactory *geometryFactory); virtual ~MinimalEdgeRing(); geomgraph::DirectedEdge* getNext(geomgraph::DirectedEdge *de); void setEdgeRing(geomgraph::DirectedEdge *de, geomgraph::EdgeRing *er); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef GEOS_INLINE #include #endif #endif // ndef GEOS_OP_OVERLAY_MINIMALEDGERING_H geos-3.4.2/include/geos/operation/overlay/MinimalEdgeRing.inl0000644000175000017500000000265312206417147024047 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/MinimalEdgeRing.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_MINIMALEDGERING_INL #define GEOS_OP_OVERLAY_MINIMALEDGERING_INL #include #if GEOS_DEBUG #include #endif namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay INLINE void MinimalEdgeRing::setEdgeRing(geomgraph::DirectedEdge *de, geomgraph::EdgeRing *er) { de->setMinEdgeRing(er); } INLINE geomgraph::DirectedEdge* MinimalEdgeRing::getNext(geomgraph::DirectedEdge *de) { return de->getNextMin(); } INLINE MinimalEdgeRing::~MinimalEdgeRing() { #if GEOS_DEBUG std::cerr << "MinimalEdgeRing[" << this << "] dtor" << std::endl; #endif } } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // GEOS_OP_OVERLAY_MINIMALEDGERING_INL geos-3.4.2/include/geos/operation/overlay/OverlayNodeFactory.h0000644000175000017500000000311312206417147024270 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/OverlayNodeFactory.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_OVERLAYNODEFACTORY_H #define GEOS_OP_OVERLAY_OVERLAYNODEFACTORY_H #include #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class Node; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * Creates nodes for use in the geomgraph::PlanarGraph constructed during * overlay operations. NOTE: also used by operation::valid */ class GEOS_DLL OverlayNodeFactory: public geomgraph::NodeFactory { public: OverlayNodeFactory():geomgraph::NodeFactory() {} geomgraph::Node* createNode(const geom::Coordinate &coord) const; static const geomgraph::NodeFactory &instance(); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_OVERLAY_OVERLAYNODEFACTORY_H geos-3.4.2/include/geos/operation/overlay/OverlayOp.h0000644000175000017500000002671612206417147022447 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/OverlayOp.java r567 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_OVERLAYOP_H #define GEOS_OP_OVERLAY_OVERLAYOP_H #include #include // for inheritance #include // for composition #include // for composition #include // for inline (GeometryGraph->PlanarGraph) #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class Coordinate; class GeometryFactory; class Polygon; class LineString; class Point; } namespace geomgraph { class Label; class Edge; class Node; } namespace operation { namespace overlay { class ElevationMatrix; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /// Computes the geometric overlay of two Geometry. // /// The overlay can be used to determine any /// boolean combination of the geometries. /// class GEOS_DLL OverlayOp: public GeometryGraphOperation { public: /// The spatial functions supported by this class. // /// These operations implement various boolean combinations of /// the resultants of the overlay. /// enum OpCode { /// The code for the Intersection overlay operation. opINTERSECTION = 1, /// The code for the Union overlay operation. opUNION = 2, /// The code for the Difference overlay operation. opDIFFERENCE = 3, /// The code for the Symmetric Difference overlay operation. opSYMDIFFERENCE = 4 }; /** * Computes an overlay operation for the given geometry arguments. * * @param geom0 the first geometry argument * @param geom1 the second geometry argument * @param opCode the code for the desired overlay operation * @return the result of the overlay operation * @throws TopologyException if a robustness problem is encountered */ static geom::Geometry* overlayOp(const geom::Geometry *geom0, const geom::Geometry *geom1, OpCode opCode); //throw(TopologyException *); /** * Tests whether a point with a given topological {@link Label} * relative to two geometries is contained in * the result of overlaying the geometries using * a given overlay operation. * * The method handles arguments of {@link Location#NONE} correctly * * @param label the topological label of the point * @param opCode the code for the overlay operation to test * @return true if the label locations correspond to the overlayOpCode */ static bool isResultOfOp(const geomgraph::Label& label, OpCode opCode); /// This method will handle arguments of Location.NULL correctly // /// @return true if the locations correspond to the opCode /// static bool isResultOfOp(int loc0, int loc1, OpCode opCode); /// Construct an OverlayOp with the given Geometry args. // /// Ownership of passed args will remain to caller, and /// the OverlayOp won't change them in any way. /// OverlayOp(const geom::Geometry *g0, const geom::Geometry *g1); virtual ~OverlayOp(); // FIXME: virtual ? /** * Gets the result of the overlay for a given overlay operation. * * Note: this method can be called once only. * * @param overlayOpCode the overlay operation to perform * @return the compute result geometry * @throws TopologyException if a robustness problem is encountered */ geom::Geometry* getResultGeometry(OpCode overlayOpCode); // throw(TopologyException *); /** * Gets the graph constructed to compute the overlay. * * @return the overlay graph */ geomgraph::PlanarGraph& getGraph() { return graph; } /** \brief * This method is used to decide if a point node should be included * in the result or not. * * @return true if the coord point is covered by a result Line * or Area geometry */ bool isCoveredByLA(const geom::Coordinate& coord); /** \brief * This method is used to decide if an L edge should be included * in the result or not. * * @return true if the coord point is covered by a result Area geometry */ bool isCoveredByA(const geom::Coordinate& coord); /* * @return true if the coord is located in the interior or boundary of * a geometry in the list. */ protected: /** \brief * Insert an edge from one of the noded input graphs. * * Checks edges that are inserted to see if an * identical edge already exists. * If so, the edge is not inserted, but its label is merged * with the existing edge. */ void insertUniqueEdge(geomgraph::Edge *e); private: algorithm::PointLocator ptLocator; const geom::GeometryFactory *geomFact; geom::Geometry *resultGeom; geomgraph::PlanarGraph graph; geomgraph::EdgeList edgeList; std::vector *resultPolyList; std::vector *resultLineList; std::vector *resultPointList; void computeOverlay(OpCode opCode); // throw(TopologyException *); void insertUniqueEdges(std::vector *edges); /* * If either of the GeometryLocations for the existing label is * exactly opposite to the one in the labelToMerge, * this indicates a dimensional collapse has happened. * In this case, convert the label for that Geometry to a Line label */ //Not needed //void checkDimensionalCollapse(geomgraph::Label labelToMerge, geomgraph::Label existingLabel); /** \brief * Update the labels for edges according to their depths. * * For each edge, the depths are first normalized. * Then, if the depths for the edge are equal, * this edge must have collapsed into a line edge. * If the depths are not equal, update the label * with the locations corresponding to the depths * (i.e. a depth of 0 corresponds to a Location of EXTERIOR, * a depth of 1 corresponds to INTERIOR) */ void computeLabelsFromDepths(); /** \brief * If edges which have undergone dimensional collapse are found, * replace them with a new edge which is a L edge */ void replaceCollapsedEdges(); /** \brief * Copy all nodes from an arg geometry into this graph. * * The node label in the arg geometry overrides any previously * computed label for that argIndex. * (E.g. a node may be an intersection node with * a previously computed label of BOUNDARY, * but in the original arg Geometry it is actually * in the interior due to the Boundary Determination Rule) */ void copyPoints(int argIndex); /** \brief * Compute initial labelling for all DirectedEdges at each node. * * In this step, DirectedEdges will acquire a complete labelling * (i.e. one with labels for both Geometries) * only if they * are incident on a node which has edges for both Geometries */ void computeLabelling(); // throw(TopologyException *); /** * For nodes which have edges from only one Geometry incident on them, * the previous step will have left their dirEdges with no * labelling for the other Geometry. * However, the sym dirEdge may have a labelling for the other * Geometry, so merge the two labels. */ void mergeSymLabels(); void updateNodeLabelling(); /** * Incomplete nodes are nodes whose labels are incomplete. * * (e.g. the location for one Geometry is NULL). * These are either isolated nodes, * or nodes which have edges from only a single Geometry incident * on them. * * Isolated nodes are found because nodes in one graph which * don't intersect nodes in the other are not completely * labelled by the initial process of adding nodes to the nodeList. * To complete the labelling we need to check for nodes that * lie in the interior of edges, and in the interior of areas. * * When each node labelling is completed, the labelling of the * incident edges is updated, to complete their labelling as well. */ void labelIncompleteNodes(); /** \brief * Label an isolated node with its relationship to the target geometry. */ void labelIncompleteNode(geomgraph::Node *n, int targetIndex); /** \brief * Find all edges whose label indicates that they are in the result * area(s), according to the operation being performed. * * Since we want polygon shells to be * oriented CW, choose dirEdges with the interior of the result * on the RHS. * Mark them as being in the result. * Interior Area edges are the result of dimensional collapses. * They do not form part of the result area boundary. */ void findResultAreaEdges(OpCode opCode); /** * If both a dirEdge and its sym are marked as being in the result, * cancel them out. */ void cancelDuplicateResultEdges(); /** * @return true if the coord is located in the interior or boundary of * a geometry in the list. */ bool isCovered(const geom::Coordinate& coord, std::vector *geomList); /** * @return true if the coord is located in the interior or boundary of * a geometry in the list. */ bool isCovered(const geom::Coordinate& coord, std::vector *geomList); /** * @return true if the coord is located in the interior or boundary of * a geometry in the list. */ bool isCovered(const geom::Coordinate& coord, std::vector *geomList); /** * Build a Geometry containing all Geometries in the given vectors. * Takes element's ownership, vector control is left to caller. */ geom::Geometry* computeGeometry( std::vector *nResultPointList, std::vector *nResultLineList, std::vector *nResultPolyList); /// Caches for memory management std::vectordupEdges; /** \brief * Merge Z values of node with those of the segment or vertex in * the given Polygon it is on. */ int mergeZ(geomgraph::Node *n, const geom::Polygon *poly) const; /** * Merge Z values of node with those of the segment or vertex in * the given LineString it is on. * @returns 1 if an intersection is found, 0 otherwise. */ int mergeZ(geomgraph::Node *n, const geom::LineString *line) const; /** * Average Z of input geometries */ double avgz[2]; bool avgzcomputed[2]; double getAverageZ(int targetIndex); static double getAverageZ(const geom::Polygon *poly); ElevationMatrix *elevationMatrix; /// Throw TopologyException if an obviously wrong result has /// been computed. void checkObviouslyWrongResult(OpCode opCode); }; /** \brief * OverlayOp::overlayOp Adapter for use with geom::BinaryOp */ struct overlayOp { OverlayOp::OpCode opCode; overlayOp(OverlayOp::OpCode code) : opCode(code) {} geom::Geometry* operator() (const geom::Geometry* g0, const geom::Geometry* g1) { return OverlayOp::overlayOp(g0, g1, opCode); } }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_OVERLAYOP_H geos-3.4.2/include/geos/operation/overlay/PointBuilder.h0000644000175000017500000000523012206417147023113 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/PointBuilder.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_POINTBUILDER_H #define GEOS_OP_OVERLAY_POINTBUILDER_H #include #include // for inlines #include // for OpCode enum #include #include // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Point; } namespace geomgraph { class Node; } namespace algorithm { class PointLocator; } namespace operation { namespace overlay { class OverlayOp; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * Constructs geom::Point s from the nodes of an overlay graph. */ class GEOS_DLL PointBuilder { private: OverlayOp *op; const geom::GeometryFactory *geometryFactory; void extractNonCoveredResultNodes(OverlayOp::OpCode opCode); /* * Converts non-covered nodes to Point objects and adds them to * the result. * * A node is covered if it is contained in another element Geometry * with higher dimension (e.g. a node point might be contained in * a polygon, in which case the point can be eliminated from * the result). * * @param n the node to test */ void filterCoveredNodeToPoint(const geomgraph::Node *); /// Allocated a construction time, but not owned. /// Make sure you take ownership of it, getting /// it from build() std::vector *resultPointList; public: PointBuilder(OverlayOp *newOp, const geom::GeometryFactory *newGeometryFactory, algorithm::PointLocator *newPtLocator=NULL) : op(newOp), geometryFactory(newGeometryFactory), resultPointList(new std::vector()) { ::geos::ignore_unused_variable_warning(newPtLocator); } /** * @return a list of the Points in the result of the specified * overlay operation */ std::vector* build(OverlayOp::OpCode opCode); }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_OVERLAY_POINTBUILDER_H geos-3.4.2/include/geos/operation/overlay/PolygonBuilder.h0000644000175000017500000001462112206417147023455 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/PolygonBuilder.java rev. 1.20 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_POLYGONBUILDER_H #define GEOS_OP_OVERLAY_POLYGONBUILDER_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class Coordinate; class GeometryFactory; } namespace geomgraph { class EdgeRing; class Node; class PlanarGraph; class DirectedEdge; } namespace operation { namespace overlay { class MaximalEdgeRing; class MinimalEdgeRing; } } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay /** \brief * Forms Polygon out of a graph of geomgraph::DirectedEdge. * * The edges to use are marked as being in the result Area. */ class GEOS_DLL PolygonBuilder { public: PolygonBuilder(const geom::GeometryFactory *newGeometryFactory); ~PolygonBuilder(); /** * Add a complete graph. * The graph is assumed to contain one or more polygons, * possibly with holes. */ void add(geomgraph::PlanarGraph *graph); // throw(const TopologyException &) /** * Add a set of edges and nodes, which form a graph. * The graph is assumed to contain one or more polygons, * possibly with holes. */ void add(const std::vector *dirEdges, const std::vector *nodes); // throw(const TopologyException &) std::vector* getPolygons(); /** \brief * Checks the current set of shells (with their associated holes) to * see if any of them contain the point. */ bool containsPoint(const geom::Coordinate& p); private: const geom::GeometryFactory *geometryFactory; std::vector shellList; /** * For all DirectedEdges in result, form them into MaximalEdgeRings * * @param maxEdgeRings * Formed MaximalEdgeRings will be pushed to this vector. * Ownership of the elements is transferred to caller. */ void buildMaximalEdgeRings( const std::vector *dirEdges, std::vector &maxEdgeRings); // throw(const TopologyException &) void buildMinimalEdgeRings( std::vector &maxEdgeRings, std::vector &newShellList, std::vector &freeHoleList, std::vector &edgeRings); /** * This method takes a list of MinimalEdgeRings derived from a * MaximalEdgeRing, and tests whether they form a Polygon. * This is the case if there is a single shell * in the list. In this case the shell is returned. * The other possibility is that they are a series of connected * holes, in which case no shell is returned. * * @return the shell geomgraph::EdgeRing, if there is one * @return NULL, if all the rings are holes */ geomgraph::EdgeRing* findShell(std::vector* minEdgeRings); /** * This method assigns the holes for a Polygon (formed from a list of * MinimalEdgeRings) to its shell. * Determining the holes for a MinimalEdgeRing polygon serves two * purposes: * * - it is faster than using a point-in-polygon check later on. * - it ensures correctness, since if the PIP test was used the point * chosen might lie on the shell, which might return an incorrect * result from the PIP test */ void placePolygonHoles(geomgraph::EdgeRing *shell, std::vector *minEdgeRings); /** * For all rings in the input list, * determine whether the ring is a shell or a hole * and add it to the appropriate list. * Due to the way the DirectedEdges were linked, * a ring is a shell if it is oriented CW, a hole otherwise. */ void sortShellsAndHoles(std::vector &edgeRings, std::vector &newShellList, std::vector &freeHoleList); /** \brief * This method determines finds a containing shell for all holes * which have not yet been assigned to a shell. * * These "free" holes should all be properly contained in * their parent shells, so it is safe to use the * findEdgeRingContaining method. * This is the case because any holes which are NOT * properly contained (i.e. are connected to their * parent shell) would have formed part of a MaximalEdgeRing * and been handled in a previous step. * * @throws TopologyException if a hole cannot be assigned to a shell */ void placeFreeHoles(std::vector& newShellList, std::vector& freeHoleList); // throw(const TopologyException&) /** \brief * Find the innermost enclosing shell geomgraph::EdgeRing containing the * argument geomgraph::EdgeRing, if any. * * The innermost enclosing ring is the smallest enclosing ring. * The algorithm used depends on the fact that: * * ring A contains ring B iff envelope(ring A) * contains envelope(ring B) * * This routine is only safe to use if the chosen point of the hole * is known to be properly contained in a shell * (which is guaranteed to be the case if the hole does not touch * its shell) * * @return containing geomgraph::EdgeRing, if there is one * @return NULL if no containing geomgraph::EdgeRing is found */ geomgraph::EdgeRing* findEdgeRingContaining(geomgraph::EdgeRing *testEr, std::vector& newShellList); std::vector* computePolygons( std::vector& newShellList); /** * Checks the current set of shells (with their associated holes) to * see if any of them contain the point. */ }; } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_POLYGONBUILDER_H geos-3.4.2/include/geos/operation/overlay/snap/0000755000175000017500000000000012206417230021274 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/overlay/snap/GeometrySnapper.h0000644000175000017500000001112412206417147024577 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/GeometrySnapper.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_SNAP_GEOMETRYSNAPPER_H #define GEOS_OP_OVERLAY_SNAP_GEOMETRYSNAPPER_H #include #include #include // Forward declarations namespace geos { namespace geom { //class PrecisionModel; class Geometry; class CoordinateSequence; struct GeomPtrPair; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace snap { // geos::operation::overlay::snap /** \brief * Snaps the vertices and segments of a {@link Geometry} * to another Geometry's vertices. * * A snap distance tolerance is used to control where snapping is performed. * Snapping one geometry to another can improve * robustness for overlay operations by eliminating * nearly-coincident edges * (which cause problems during noding and intersection calculation). * Too much snapping can result in invalid topology * being created, so the number and location of snapped vertices * is decided using heuristics to determine when it * is safe to snap. * This can result in some potential snaps being omitted, however. */ class GEOS_DLL GeometrySnapper { public: typedef std::auto_ptr GeomPtr; /** * Snaps two geometries together with a given tolerance. * * @param g0 a geometry to snap * @param g1 a geometry to snap * @param snapTolerance the tolerance to use * @param ret the snapped geometries as a pair of auto_ptrs * (output parameter) */ static void snap(const geom::Geometry& g0, const geom::Geometry& g1, double snapTolerance, geom::GeomPtrPair& ret); static GeomPtr snapToSelf(const geom::Geometry& g0, double snapTolerance, bool cleanResult); /** * Creates a new snapper acting on the given geometry * * @param g the geometry to snap */ GeometrySnapper(const geom::Geometry& g) : srcGeom(g) { } /** \brief * Snaps the vertices in the component {@link LineString}s * of the source geometry to the vertices of the given snap geometry * with a given snap tolerance * * @param g a geometry to snap the source to * @param snapTolerance * @return a new snapped Geometry */ std::auto_ptr snapTo(const geom::Geometry& g, double snapTolerance); /** \brief * Snaps the vertices in the component {@link LineString}s * of the source geometry to the vertices of itself * with a given snap tolerance and optionally cleaning the result. * * @param snapTolerance * @param cleanResult clean the result * @return a new snapped Geometry */ std::auto_ptr snapToSelf(double snapTolerance, bool cleanResult); /** \brief * Estimates the snap tolerance for a Geometry, taking into account * its precision model. * * @param g a Geometry * @return the estimated snap tolerance */ static double computeOverlaySnapTolerance(const geom::Geometry& g); static double computeSizeBasedSnapTolerance(const geom::Geometry& g); /** \brief * Computes the snap tolerance based on input geometries; */ static double computeOverlaySnapTolerance(const geom::Geometry& g1, const geom::Geometry& g2); private: // eventually this will be determined from the geometry topology //static const double snapTol; // = 0.000001; static const double snapPrecisionFactor; // = 10e-10 const geom::Geometry& srcGeom; /// Extract target (unique) coordinates std::auto_ptr extractTargetCoordinates( const geom::Geometry& g); // Declare type as noncopyable GeometrySnapper(const GeometrySnapper& other); GeometrySnapper& operator=(const GeometrySnapper& rhs); }; } // namespace geos::operation::overlay::snap } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // GEOS_OP_OVERLAY_SNAP_GEOMETRYSNAPPER_H geos-3.4.2/include/geos/operation/overlay/snap/LineStringSnapper.h0000644000175000017500000001221412206417147025063 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/LineStringSnapper.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_SNAP_LINESTRINGSNAPPER_H #define GEOS_OP_OVERLAY_SNAP_LINESTRINGSNAPPER_H #include #include #include #include // Forward declarations namespace geos { namespace geom { //class PrecisionModel; //class CoordinateSequence; class CoordinateList; class Geometry; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace snap { // geos::operation::overlay::snap /** \brief * Snaps the vertices and segments of a LineString to a set * of target snap vertices. * * A snapping distance tolerance is used to control where snapping is performed. * */ class GEOS_DLL LineStringSnapper { public: /** * Creates a new snapper using the given points * as source points to be snapped. * * @param nSrcPts the points to snap * @param nSnapTolerance the snap tolerance to use */ LineStringSnapper(const geom::Coordinate::Vect& nSrcPts, double nSnapTol) : srcPts(nSrcPts), snapTolerance(nSnapTol), allowSnappingToSourceVertices(false) { size_t s = srcPts.size(); isClosed = s < 2 ? false : srcPts[0].equals2D(srcPts[s-1]); } // Snap points are assumed to be all distinct points (a set would be better, uh ?) std::auto_ptr snapTo(const geom::Coordinate::ConstVect& snapPts); void setAllowSnappingToSourceVertices(bool allow) { allowSnappingToSourceVertices = allow; } private: const geom::Coordinate::Vect& srcPts; double snapTolerance; bool allowSnappingToSourceVertices; bool isClosed; // Modifies first arg void snapVertices(geom::CoordinateList& srcCoords, const geom::Coordinate::ConstVect& snapPts); // Returns snapPts.end() if no snap point is close enough (within snapTol distance) geom::Coordinate::ConstVect::const_iterator findSnapForVertex(const geom::Coordinate& pt, const geom::Coordinate::ConstVect& snapPts); /** \brief * Snap segments of the source to nearby snap vertices. * * Source segments are "cracked" at a snap vertex. * A single input segment may be snapped several times * to different snap vertices. * * For each distinct snap vertex, at most one source segment * is snapped to. This prevents "cracking" multiple segments * at the same point, which would likely cause * topology collapse when being used on polygonal linework. * * @param srcCoords the coordinates of the source linestring to be snapped * the object will be modified (coords snapped) * @param snapPts the target snap vertices */ void snapSegments(geom::CoordinateList& srcCoords, const geom::Coordinate::ConstVect& snapPts); /// \brief /// Finds a src segment which snaps to (is close to) the given snap /// point. // /// Only a single segment is selected for snapping. /// This prevents multiple segments snapping to the same snap vertex, /// which would almost certainly cause invalid geometry /// to be created. /// (The heuristic approach to snapping used here /// is really only appropriate when /// snap pts snap to a unique spot on the src geometry.) /// /// Also, if the snap vertex occurs as a vertex in the src /// coordinate list, no snapping is performed (may be changed /// using setAllowSnappingToSourceVertices). /// /// @param from /// an iterator to first point of first segment to be checked /// /// @param too_far /// an iterator to last point of last segment to be checked /// /// @returns an iterator to the snapped segment or /// too_far if no segment needs snapping /// (either none within snapTol distance, /// or one found on the snapPt) /// geom::CoordinateList::iterator findSegmentToSnap( const geom::Coordinate& snapPt, geom::CoordinateList::iterator from, geom::CoordinateList::iterator too_far); geom::CoordinateList::iterator findVertexToSnap( const geom::Coordinate& snapPt, geom::CoordinateList::iterator from, geom::CoordinateList::iterator too_far); // Declare type as noncopyable LineStringSnapper(const LineStringSnapper& other); LineStringSnapper& operator=(const LineStringSnapper& rhs); }; } // namespace geos::operation::overlay::snap } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // GEOS_OP_OVERLAY_SNAP_LINESTRINGSNAPPER_H geos-3.4.2/include/geos/operation/overlay/snap/Makefile.am0000644000175000017500000000041712206417147023341 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/overlay/snap geos_HEADERS = \ GeometrySnapper.h \ LineStringSnapper.h \ SnapIfNeededOverlayOp.h \ SnapOverlayOp.h geos-3.4.2/include/geos/operation/overlay/snap/Makefile.in0000644000175000017500000003642512206417162023357 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/overlay/snap DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/overlay/snap geos_HEADERS = \ GeometrySnapper.h \ LineStringSnapper.h \ SnapIfNeededOverlayOp.h \ SnapOverlayOp.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/overlay/snap/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/overlay/snap/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/overlay/snap/SnapIfNeededOverlayOp.h0000644000175000017500000000574412206417147025614 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/SnapIfNeededOverlayOp.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_SNAP_SNAPIFNEEDEDOVERLAYOP_H #define GEOS_OP_OVERLAY_SNAP_SNAPIFNEEDEDOVERLAYOP_H #include // for enums #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace snap { // geos::operation::overlay::snap /** \brief * Performs an overlay operation using snapping and enhanced precision * to improve the robustness of the result. * * This class only uses snapping * if an error is detected when running the standard JTS overlay code. * Errors detected include thrown exceptions * (in particular, {@link TopologyException}) * and invalid overlay computations. * */ class SnapIfNeededOverlayOp { public: static std::auto_ptr overlayOp(const geom::Geometry& g0, const geom::Geometry& g1, OverlayOp::OpCode opCode) { SnapIfNeededOverlayOp op(g0, g1); return op.getResultGeometry(opCode); } static std::auto_ptr intersection(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opINTERSECTION); } static std::auto_ptr Union(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opUNION); } static std::auto_ptr difference(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opDIFFERENCE); } static std::auto_ptr symDifference(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opSYMDIFFERENCE); } SnapIfNeededOverlayOp(const geom::Geometry& g1, const geom::Geometry& g2) : geom0(g1), geom1(g2) { } typedef std::auto_ptr GeomPtr; GeomPtr getResultGeometry(OverlayOp::OpCode opCode); private: const geom::Geometry& geom0; const geom::Geometry& geom1; // Declare type as noncopyable SnapIfNeededOverlayOp(const SnapIfNeededOverlayOp& other); SnapIfNeededOverlayOp& operator=(const SnapIfNeededOverlayOp& rhs); }; } // namespace geos::operation::overlay::snap } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #endif // ndef GEOS_OP_OVERLAY_SNAP_SNAPIFNEEDEDOVERLAYOP_H geos-3.4.2/include/geos/operation/overlay/snap/SnapOverlayOp.h0000644000175000017500000000723412206417147024224 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/SnapOverlayOp.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_SNAP_SNAPOVERLAYOP_H #define GEOS_OP_OVERLAY_SNAP_SNAPOVERLAYOP_H #include // for enums #include // for dtor visibility by auto_ptr #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; struct GeomPtrPair; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace snap { // geos::operation::overlay::snap /** \brief * Performs an overlay operation using snapping and enhanced precision * to improve the robustness of the result. * * This class always uses snapping. * This is less performant than the standard JTS overlay code, * and may even introduce errors which were not present in the original data. * For this reason, this class should only be used * if the standard overlay code fails to produce a correct result. * */ class GEOS_DLL SnapOverlayOp { public: static std::auto_ptr overlayOp(const geom::Geometry& g0, const geom::Geometry& g1, OverlayOp::OpCode opCode) { SnapOverlayOp op(g0, g1); return op.getResultGeometry(opCode); } static std::auto_ptr intersection(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opINTERSECTION); } static std::auto_ptr Union(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opUNION); } static std::auto_ptr difference(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opDIFFERENCE); } static std::auto_ptr symDifference(const geom::Geometry& g0, const geom::Geometry& g1) { return overlayOp(g0, g1, OverlayOp::opSYMDIFFERENCE); } SnapOverlayOp(const geom::Geometry& g1, const geom::Geometry& g2) : geom0(g1), geom1(g2) { computeSnapTolerance(); } typedef std::auto_ptr GeomPtr; GeomPtr getResultGeometry(OverlayOp::OpCode opCode); private: void computeSnapTolerance(); void snap(geom::GeomPtrPair& ret); void removeCommonBits(const geom::Geometry& geom0, const geom::Geometry& geom1, geom::GeomPtrPair& ret); // re-adds common bits to the given geom void prepareResult(geom::Geometry& geom); const geom::Geometry& geom0; const geom::Geometry& geom1; double snapTolerance; std::auto_ptr cbr; // Declare type as noncopyable SnapOverlayOp(const SnapOverlayOp& other); SnapOverlayOp& operator=(const SnapOverlayOp& rhs); }; } // namespace geos::operation::overlay::snap } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_SNAP_SNAPOVERLAYOP_H geos-3.4.2/include/geos/operation/overlay/validate/0000755000175000017500000000000012206417230022124 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/overlay/validate/FuzzyPointLocator.h0000644000175000017500000000555712206417147026005 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/FuzzyPointLocator.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_FUZZYPOINTLOCATOR_H #define GEOS_OP_OVERLAY_FUZZYPOINTLOCATOR_H #include #include // for composition #include // for auto_ptr visibility of dtor #include // for Location::Value enum #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class Coordinate; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace validate { // geos::operation::overlay::validate /** \brief * Finds the most likely Location of a point relative to * the polygonal components of a geometry, using a tolerance value. * * If a point is not clearly in the Interior or Exterior, * it is considered to be on the Boundary. * In other words, if the point is within the tolerance of the Boundary, * it is considered to be on the Boundary; otherwise, * whether it is Interior or Exterior is determined directly. */ class GEOS_DLL FuzzyPointLocator { public: FuzzyPointLocator(const geom::Geometry& geom, double nTolerance); geom::Location::Value getLocation(const geom::Coordinate& pt); private: const geom::Geometry& g; double tolerance; algorithm::PointLocator ptLocator; std::auto_ptr linework; // this function has been obsoleted std::auto_ptr getLineWork(const geom::Geometry& geom); /// Extracts linework for polygonal components. // /// @param g the geometry from which to extract /// @return a lineal geometry containing the extracted linework std::auto_ptr extractLineWork(const geom::Geometry& geom); // Declare type as noncopyable FuzzyPointLocator(const FuzzyPointLocator& other); FuzzyPointLocator& operator=(const FuzzyPointLocator& rhs); }; } // namespace geos::operation::overlay::validate } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_FUZZYPOINTLOCATOR_H geos-3.4.2/include/geos/operation/overlay/validate/OffsetPointGenerator.h0000644000175000017500000000471412206417147026421 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/OffsetPointGenerator.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_OFFSETPOINTGENERATOR_H #define GEOS_OP_OVERLAY_OFFSETPOINTGENERATOR_H #include #include // for composition #include // for auto_ptr visibility of dtor #include // for auto_ptr visibility of dtor #include // for use in vector #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class Geometry; //class MultiPoint; class LineString; //class Coordinate; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace validate { // geos::operation::overlay::validate /// Generates points offset from both sides of all segments in a geometry // class GEOS_DLL OffsetPointGenerator { public: OffsetPointGenerator(const geom::Geometry& geom, double offset); /// Gets the computed offset points. std::auto_ptr< std::vector > getPoints(); private: const geom::Geometry& g; double offsetDistance; std::auto_ptr< std::vector > offsetPts; void extractPoints(const geom::LineString* line); void computeOffsets(const geom::Coordinate& p0, const geom::Coordinate& p1); // Declare type as noncopyable OffsetPointGenerator(const OffsetPointGenerator& other); OffsetPointGenerator& operator=(const OffsetPointGenerator& rhs); }; } // namespace geos::operation::overlay::validate } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_OFFSETPOINTGENERATOR_H geos-3.4.2/include/geos/operation/overlay/validate/OverlayResultValidator.h0000644000175000017500000000706212206417147026777 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/OverlayResultValidator.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_OVERLAY_OVERLAYRESULTVALIDATOR_H #define GEOS_OP_OVERLAY_OVERLAYRESULTVALIDATOR_H #include #include // for OpCode enum #include // composition #include // for Location::Value type #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class Coordinate; } } namespace geos { namespace operation { // geos::operation namespace overlay { // geos::operation::overlay namespace validate { // geos::operation::overlay::validate /** \brief * Validates that the result of an overlay operation is * geometrically correct within a determined tolerance. * * Uses fuzzy point location to find points which are * definitely in either the interior or exterior of the result * geometry, and compares these results with the expected ones. * * This algorithm is only useful where the inputs are polygonal. * * This is a heuristic test, and may return false positive results * (I.e. it may fail to detect an invalid result.) * It should never return a false negative result, however * (I.e. it should never report a valid result as invalid.) * * @see OverlayOp */ class GEOS_DLL OverlayResultValidator { public: static bool isValid( const geom::Geometry& geom0, const geom::Geometry& geom1, OverlayOp::OpCode opCode, const geom::Geometry& result); OverlayResultValidator( const geom::Geometry& geom0, const geom::Geometry& geom1, const geom::Geometry& result); bool isValid(OverlayOp::OpCode opCode); geom::Coordinate& getInvalidLocation() { return invalidLocation; } private: double boundaryDistanceTolerance; const geom::Geometry& g0; const geom::Geometry& g1; const geom::Geometry& gres; FuzzyPointLocator fpl0; FuzzyPointLocator fpl1; FuzzyPointLocator fplres; geom::Coordinate invalidLocation; std::vector testCoords; void addTestPts(const geom::Geometry& g); void addVertices(const geom::Geometry& g); bool testValid(OverlayOp::OpCode overlayOp); bool testValid(OverlayOp::OpCode overlayOp, const geom::Coordinate& pt); bool isValidResult(OverlayOp::OpCode overlayOp, std::vector& location); static double computeBoundaryDistanceTolerance( const geom::Geometry& g0, const geom::Geometry& g1); // Declare type as noncopyable OverlayResultValidator(const OverlayResultValidator& other); OverlayResultValidator& operator=(const OverlayResultValidator& rhs); }; } // namespace geos::operation::overlay::validate } // namespace geos::operation::overlay } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_OP_OVERLAY_OVERLAYRESULTVALIDATOR_H geos-3.4.2/include/geos/operation/polygonize/0000755000175000017500000000000012206417230021051 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/polygonize/EdgeRing.h0000644000175000017500000001350512206417147022721 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/EdgeRing.java rev. 109/138 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_POLYGONIZE_EDGERING_H #define GEOS_OP_POLYGONIZE_EDGERING_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineString; class LinearRing; class Polygon; class CoordinateSequence; class Geometry; class GeometryFactory; class Coordinate; } namespace planargraph { class DirectedEdge; } } namespace geos { namespace operation { // geos::operation namespace polygonize { // geos::operation::polygonize /**\brief * Represents a ring of PolygonizeDirectedEdge which form * a ring of a polygon. The ring may be either an outer shell or a hole. */ class GEOS_DLL EdgeRing { private: const geom::GeometryFactory *factory; typedef std::vector DeList; DeList deList; // cache the following data for efficiency geom::LinearRing *ring; geom::CoordinateSequence *ringPts; typedef std::vector GeomVect; GeomVect *holes; /** \brief * Computes the list of coordinates which are contained in this ring. * The coordinatea are computed once only and cached. * * @return an array of the Coordinate in this ring */ geom::CoordinateSequence* getCoordinates(); static void addEdge(const geom::CoordinateSequence *coords, bool isForward, geom::CoordinateSequence *coordList); public: /** * \brief * Find the innermost enclosing shell EdgeRing * containing the argument EdgeRing, if any. * * The innermost enclosing ring is the smallest enclosing ring. * The algorithm used depends on the fact that: * * ring A contains ring B iff envelope(ring A) contains envelope(ring B) * * This routine is only safe to use if the chosen point of the hole * is known to be properly contained in a shell * (which is guaranteed to be the case if the hole does not touch * its shell) * * @return containing EdgeRing, if there is one * @return null if no containing EdgeRing is found */ static EdgeRing* findEdgeRingContaining( EdgeRing *testEr, std::vector *shellList); /** * \brief * Finds a point in a list of points which is not contained in * another list of points. * * @param testPts the CoordinateSequence to test * @param pts the CoordinateSequence to test the input points against * @return a Coordinate reference from testPts which is * not in pts, or Coordinate::nullCoord */ static const geom::Coordinate& ptNotInList( const geom::CoordinateSequence *testPts, const geom::CoordinateSequence *pts); /** \brief * Tests whether a given point is in an array of points. * Uses a value-based test. * * @param pt a Coordinate for the test point * @param pts an array of Coordinate to test * @return true if the point is in the array */ static bool isInList(const geom::Coordinate &pt, const geom::CoordinateSequence *pts); EdgeRing(const geom::GeometryFactory *newFactory); ~EdgeRing(); /** \brief * Adds a DirectedEdge which is known to form part of this ring. * * @param de the DirectedEdge to add. Ownership to the caller. */ void add(const planargraph::DirectedEdge *de); /** \brief * Tests whether this ring is a hole. * * Due to the way the edges in the polyongization graph are linked, * a ring is a hole if it is oriented counter-clockwise. * @return true if this ring is a hole */ bool isHole(); /** \brief * Adds a hole to the polygon formed by this ring. * * @param hole the LinearRing forming the hole. */ void addHole(geom::LinearRing *hole); /** \brief * Computes the Polygon formed by this ring and any contained holes. * * LinearRings ownership is transferred to returned polygon. * Subsequent calls to the function will return NULL. * * @return the Polygon formed by this ring and its holes. */ geom::Polygon* getPolygon(); /** \brief * Tests if the LinearRing ring formed by this edge ring * is topologically valid. */ bool isValid(); /** \brief * Gets the coordinates for this ring as a LineString. * * Used to return the coordinates in this ring * as a valid geometry, when it has been detected that the ring * is topologically invalid. * @return a LineString containing the coordinates in this ring */ geom::LineString* getLineString(); /** \brief * Returns this ring as a LinearRing, or null if an Exception * occurs while creating it (such as a topology problem). * * Ownership of ring is retained by the object. * Details of problems are written to standard output. */ geom::LinearRing* getRingInternal(); /** \brief * Returns this ring as a LinearRing, or null if an Exception * occurs while creating it (such as a topology problem). * * Details of problems are written to standard output. * Caller gets ownership of ring. */ geom::LinearRing* getRingOwnership(); }; } // namespace geos::operation::polygonize } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_POLYGONIZE_EDGERING_H geos-3.4.2/include/geos/operation/polygonize/Makefile.am0000644000175000017500000000043112206417147023112 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/polygonize geos_HEADERS = \ EdgeRing.h \ PolygonizeDirectedEdge.h \ PolygonizeEdge.h \ PolygonizeGraph.h \ Polygonizer.h geos-3.4.2/include/geos/operation/polygonize/Makefile.in0000644000175000017500000003643112206417162023131 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/polygonize DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/polygonize geos_HEADERS = \ EdgeRing.h \ PolygonizeDirectedEdge.h \ PolygonizeEdge.h \ PolygonizeGraph.h \ Polygonizer.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/polygonize/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/polygonize/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/polygonize/PolygonizeDirectedEdge.h0000644000175000017500000000604712206417147025630 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeDirectedEdge.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_POLYGONIZE_POLYGONIZEDIRECTEDEDGE_H #define GEOS_OP_POLYGONIZE_POLYGONIZEDIRECTEDEDGE_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { //class LineString; } namespace planargraph { class Node; } namespace operation { namespace polygonize { class EdgeRing; } } } namespace geos { namespace operation { // geos::operation namespace polygonize { // geos::operation::polygonize /** \brief * A DirectedEdge of a PolygonizeGraph, which represents * an edge of a polygon formed by the graph. * * May be logically deleted from the graph by setting the * marked flag. */ class GEOS_DLL PolygonizeDirectedEdge: public planargraph::DirectedEdge { private: EdgeRing *edgeRing; PolygonizeDirectedEdge *next; long label; public: /* * \brief * Constructs a directed edge connecting the from node * to the to node. * * @param directionPt * specifies this DirectedEdge's direction (given by an imaginary * line from the from node to directionPt) * * @param edgeDirection * whether this DirectedEdge's direction is the same as or * opposite to that of the parent Edge (if any) */ PolygonizeDirectedEdge(planargraph::Node *newFrom, planargraph::Node *newTo, const geom::Coordinate& newDirectionPt, bool nEdgeDirection); /* * Returns the identifier attached to this directed edge. */ long getLabel() const; /* * Attaches an identifier to this directed edge. */ void setLabel(long newLabel); /* * Returns the next directed edge in the EdgeRing that this * directed edge is a member of. */ PolygonizeDirectedEdge* getNext() const; /* * Sets the next directed edge in the EdgeRing that this * directed edge is a member of. */ void setNext(PolygonizeDirectedEdge *newNext); /* * Returns the ring of directed edges that this directed edge is * a member of, or null if the ring has not been set. * @see #setRing(EdgeRing) */ bool isInRing() const; /* * Sets the ring of directed edges that this directed edge is * a member of. */ void setRing(EdgeRing *newEdgeRing); }; } // namespace geos::operation::polygonize } // namespace geos::operation } // namespace geos #endif // GEOS_OP_POLYGONIZE_POLYGONIZEDIRECTEDEDGE_H geos-3.4.2/include/geos/operation/polygonize/PolygonizeEdge.h0000644000175000017500000000306412206417147024160 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeEdge.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_POLYGONIZE_POLYGONIZEEDGE_H #define GEOS_OP_POLYGONIZE_POLYGONIZEEDGE_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class LineString; } } namespace geos { namespace operation { // geos::operation namespace polygonize { // geos::operation::polygonize /* \brief * An edge of a polygonization graph. * * @version 1.4 */ class GEOS_DLL PolygonizeEdge: public planargraph::Edge { private: // Externally owned const geom::LineString *line; public: // Keep the given pointer (won't do anything to it) PolygonizeEdge(const geom::LineString *newLine); // Just return what it was given initially const geom::LineString* getLine(); }; } // namespace geos::operation::polygonize } // namespace geos::operation } // namespace geos #endif // GEOS_OP_POLYGONIZE_POLYGONIZEEDGE_H geos-3.4.2/include/geos/operation/polygonize/PolygonizeGraph.h0000644000175000017500000001435712206417147024364 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeGraph.java rev. 6/138 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H #define GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H #include #include // for inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LineString; class GeometryFactory; class Coordinate; class CoordinateSequence; } namespace planargraph { class Node; class Edge; class DirectedEdge; } namespace operation { namespace polygonize { class EdgeRing; class PolygonizeDirectedEdge; } } } namespace geos { namespace operation { // geos::operation namespace polygonize { // geos::operation::polygonize /** \brief * Represents a planar graph of edges that can be used to compute a * polygonization, and implements the algorithms to compute the * EdgeRings formed by the graph. * * The marked flag on DirectedEdge is used to indicate that a directed edge * has be logically deleted from the graph. * */ class GEOS_DLL PolygonizeGraph: public planargraph::PlanarGraph { public: /** * \brief * Deletes all edges at a node */ static void deleteAllEdges(planargraph::Node *node); /** * \brief * Create a new polygonization graph. */ PolygonizeGraph(const geom::GeometryFactory *newFactory); /** * \brief * Destroy a polygonization graph. */ ~PolygonizeGraph(); /** * \brief * Add a LineString forming an edge of the polygon graph. * @param line the line to add */ void addEdge(const geom::LineString *line); /** * \brief * Computes the EdgeRings formed by the edges in this graph. * * @param edgeRingList : the EdgeRing found by the * polygonization process will be pushed here. * */ void getEdgeRings(std::vector& edgeRingList); /** * \brief * Finds and removes all cut edges from the graph. * * @param cutLines : the list of the LineString forming the removed * cut edges will be pushed here. * * TODO: document ownership of the returned LineStrings */ void deleteCutEdges(std::vector &cutLines); /** \brief * Marks all edges from the graph which are "dangles". * * Dangles are which are incident on a node with degree 1. * This process is recursive, since removing a dangling edge * may result in another edge becoming a dangle. * In order to handle large recursion depths efficiently, * an explicit recursion stack is used * * @param dangleLines : the LineStrings that formed dangles will * be push_back'ed here */ void deleteDangles(std::vector &dangleLines); private: static int getDegreeNonDeleted(planargraph::Node *node); static int getDegree(planargraph::Node *node, long label); const geom::GeometryFactory *factory; planargraph::Node* getNode(const geom::Coordinate& pt); void computeNextCWEdges(); /** * \brief * Convert the maximal edge rings found by the initial graph traversal * into the minimal edge rings required by JTS polygon topology rules. * * @param ringEdges * the list of start edges for the edgeRings to convert. * */ void convertMaximalToMinimalEdgeRings( std::vector &ringEdges); /** * \brief * Finds all nodes in a maximal edgering * which are self-intersection nodes * * @param startDE * @param label * @param intNodes : intersection nodes found will be pushed here * the vector won't be cleared before pushing. */ static void findIntersectionNodes( PolygonizeDirectedEdge *startDE, long label, std::vector& intNodes ); /** * Finds and labels all edgerings in the graph. * * The edge rings are labelling with unique integers. * The labelling allows detecting cut edges. * * @param dirEdgesIn a list of the DirectedEdges in the graph * @param dirEdgesOut each ring found will be pushed here */ static void findLabeledEdgeRings( std::vector &dirEdgesIn, std::vector &dirEdgesOut); static void label(std::vector &dirEdges, long label); static void computeNextCWEdges(planargraph::Node *node); /** * \brief * Computes the next edge pointers going CCW around the given node, * for the given edgering label. * This algorithm has the effect of converting maximal edgerings * into minimal edgerings */ static void computeNextCCWEdges(planargraph::Node *node, long label); /** * \brief * Traverse a ring of DirectedEdges, accumulating them into a list. * This assumes that all dangling directed edges have been removed * from the graph, so that there is always a next dirEdge. * * @param startDE the DirectedEdge to start traversing at * @param edgesInRing : the DirectedEdges that form a ring will * be pushed here. */ static void findDirEdgesInRing(PolygonizeDirectedEdge *startDE, std::vector& edgesInRing); EdgeRing* findEdgeRing(PolygonizeDirectedEdge *startDE); /* Tese are for memory management */ std::vector newEdges; std::vector newDirEdges; std::vector newNodes; std::vector newEdgeRings; std::vector newCoords; }; } // namespace geos::operation::polygonize } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_POLYGONIZE_POLYGONIZEGRAPH_H geos-3.4.2/include/geos/operation/polygonize/Polygonizer.h0000644000175000017500000001466712206417147023570 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/Polygonizer.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_POLYGONIZE_POLYGONIZER_H #define GEOS_OP_POLYGONIZE_POLYGONIZER_H #include #include // for LineStringAdder inheritance #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Geometry; class LineString; class Polygon; } namespace operation { namespace polygonize { class EdgeRing; class PolygonizeGraph; } } } namespace geos { namespace operation { // geos::operation namespace polygonize { // geos::operation::polygonize /** \brief * Polygonizes a set of Geometrys which contain linework that * represents the edges of a planar graph. * * Any dimension of Geometry is handled - the constituent linework is extracted * to form the edges. * The edges must be correctly noded; that is, they must only meet * at their endpoints. The Polygonizer will still run on incorrectly noded input * but will not form polygons from incorrected noded edges. * * The Polygonizer reports the follow kinds of errors: * * - Dangles - edges which have one or both ends which are * not incident on another edge endpoint * - Cut Edges - edges which are connected at both ends but * which do not form part of polygon * - Invalid Ring Lines - edges which form rings which are invalid * (e.g. the component lines contain a self-intersection) * */ class GEOS_DLL Polygonizer { private: /** * Add every linear element in a geometry into the polygonizer graph. */ class GEOS_DLL LineStringAdder: public geom::GeometryComponentFilter { public: Polygonizer *pol; LineStringAdder(Polygonizer *p); //void filter_rw(geom::Geometry *g); void filter_ro(const geom::Geometry * g); }; // default factory LineStringAdder lineStringAdder; /** * Add a linestring to the graph of polygon edges. * * @param line the {@link LineString} to add */ void add(const geom::LineString *line); /** * Perform the polygonization, if it has not already been carried out. */ void polygonize(); void findValidRings(const std::vector& edgeRingList, std::vector& validEdgeRingList, std::vector& invalidRingList); void findShellsAndHoles(const std::vector& edgeRingList); static void assignHolesToShells(const std::vector& holeList, std::vector& shellList); static void assignHoleToShell(EdgeRing *holeER, std::vector& shellList); protected: PolygonizeGraph *graph; // initialize with empty collections, in case nothing is computed std::vector dangles; std::vector cutEdges; std::vector invalidRingLines; std::vector holeList; std::vector shellList; std::vector *polyList; public: /** \brief * Create a polygonizer with the same GeometryFactory * as the input Geometry */ Polygonizer(); ~Polygonizer(); /** \brief * Add a collection of geometries to be polygonized. * May be called multiple times. * Any dimension of Geometry may be added; * the constituent linework will be extracted and used * * @param geomList a list of Geometry with linework to be polygonized */ void add(std::vector *geomList); /** \brief * Add a collection of geometries to be polygonized. * May be called multiple times. * Any dimension of Geometry may be added; * the constituent linework will be extracted and used * * @param geomList a list of Geometry with linework to be polygonized */ void add(std::vector *geomList); /** * Add a geometry to the linework to be polygonized. * May be called multiple times. * Any dimension of Geometry may be added; * the constituent linework will be extracted and used * * @param g a Geometry with linework to be polygonized */ void add(geom::Geometry *g); /** * Add a geometry to the linework to be polygonized. * May be called multiple times. * Any dimension of Geometry may be added; * the constituent linework will be extracted and used * * @param g a Geometry with linework to be polygonized */ void add(const geom::Geometry *g); /** \brief * Gets the list of polygons formed by the polygonization. * * Ownership of vector is transferred to caller, subsequent * calls will return NULL. * @return a collection of Polygons */ std::vector* getPolygons(); /** \brief * Get the list of dangling lines found during polygonization. * * @return a (possibly empty) collection of pointers to * the input LineStrings which are dangles. * */ const std::vector& getDangles(); /** \brief * Get the list of cut edges found during polygonization. * * @return a (possibly empty) collection of pointers to * the input LineStrings which are cut edges. * */ const std::vector& getCutEdges(); /** \brief * Get the list of lines forming invalid rings found during * polygonization. * * @return a (possibly empty) collection of pointers to * the input LineStrings which form invalid rings * */ const std::vector& getInvalidRingLines(); // This seems to be needed by GCC 2.95.4 friend class Polygonizer::LineStringAdder; }; } // namespace geos::operation::polygonize } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_POLYGONIZE_POLYGONIZER_H geos-3.4.2/include/geos/operation/predicate/0000755000175000017500000000000012206417231020613 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/predicate/Makefile.am0000644000175000017500000000036412206417147022660 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/predicate geos_HEADERS = \ RectangleContains.h \ RectangleIntersects.h \ SegmentIntersectionTester.h geos-3.4.2/include/geos/operation/predicate/Makefile.in0000644000175000017500000003636112206417162022674 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/predicate DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/predicate geos_HEADERS = \ RectangleContains.h \ RectangleIntersects.h \ SegmentIntersectionTester.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/predicate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/predicate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/predicate/RectangleContains.h0000644000175000017500000000620212206417147024375 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/RectangleContains.java rev 1.5 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_PREDICATE_RECTANGLECONTAINS_H #define GEOS_OP_PREDICATE_RECTANGLECONTAINS_H #include #include // for inlines // Forward declarations namespace geos { namespace geom { class Envelope; class Geometry; class Point; class Coordinate; class LineString; //class Polygon; } } namespace geos { namespace operation { // geos::operation namespace predicate { // geos::operation::predicate /** \brief * Optimized implementation of spatial predicate "contains" * for cases where the first Geometry is a rectangle. * * As a further optimization, * this class can be used directly to test many geometries against a single * rectangle. * */ class GEOS_DLL RectangleContains { private: const geom::Polygon& rectangle; const geom::Envelope& rectEnv; bool isContainedInBoundary(const geom::Geometry& geom); bool isPointContainedInBoundary(const geom::Point& geom); /** \brief * Tests if a point is contained in the boundary of the target * rectangle. * * @param pt the point to test * @return true if the point is contained in the boundary */ bool isPointContainedInBoundary(const geom::Coordinate &pt); /** \brief * Tests if a linestring is completely contained in the boundary * of the target rectangle. * * @param line the linestring to test * @return true if the linestring is contained in the boundary */ bool isLineStringContainedInBoundary(const geom::LineString &line); /** \brief * Tests if a line segment is contained in the boundary of the * target rectangle. * * @param p0 an endpoint of the segment * @param p1 an endpoint of the segment * @return true if the line segment is contained in the boundary */ bool isLineSegmentContainedInBoundary(const geom::Coordinate& p0, const geom::Coordinate& p1); public: static bool contains(const geom::Polygon& rect, const geom::Geometry& b) { RectangleContains rc(rect); return rc.contains(b); } /** * Create a new contains computer for two geometries. * * @param rect a rectangular geometry */ RectangleContains(const geom::Polygon& rect) : rectangle(rect), rectEnv(*(rect.getEnvelopeInternal())) {} bool contains(const geom::Geometry& geom); // Declare type as noncopyable RectangleContains(const RectangleContains& other); RectangleContains& operator=(const RectangleContains& rhs); }; } // namespace geos::operation::predicate } // namespace geos::operation } // namespace geos #endif // ifndef GEOS_OP_PREDICATE_RECTANGLECONTAINS_H geos-3.4.2/include/geos/operation/predicate/RectangleIntersects.h0000644000175000017500000000476512206417147024756 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/RectangleIntersects.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_PREDICATE_RECTANGLEINTERSECTS_H #define GEOS_OP_PREDICATE_RECTANGLEINTERSECTS_H #include #include // for inlines // Forward declarations namespace geos { namespace geom { class Envelope; //class Polygon; } } namespace geos { namespace operation { // geos::operation namespace predicate { // geos::operation::predicate /** \brief * Optimized implementation of the "intersects" spatial predicate * for cases where one Geometry is a rectangle. * * This class works for all input geometries, including * {@link GeometryCollection}s. * * As a further optimization, * this class can be used to test * many geometries against a single * rectangle in a slightly more efficient way. * */ class GEOS_DLL RectangleIntersects { private: const geom::Polygon &rectangle; const geom::Envelope &rectEnv; // Declare type as noncopyable RectangleIntersects(const RectangleIntersects& other); RectangleIntersects& operator=(const RectangleIntersects& rhs); public: /** \brief * Create a new intersects computer for a rectangle. * * @param newRect a rectangular geometry */ RectangleIntersects(const geom::Polygon &newRect) : rectangle(newRect), rectEnv(*(newRect.getEnvelopeInternal())) {} bool intersects(const geom::Geometry& geom); /** \brief * Tests whether a rectangle intersects a given geometry. * * @param rectangle a rectangular Polygon * @param b a Geometry of any type * @return true if the geometries intersect */ static bool intersects(const geom::Polygon &rectangle, const geom::Geometry &b) { RectangleIntersects rp(rectangle); return rp.intersects(b); } }; } // namespace geos::operation::predicate } // namespace geos::operation } // namespace geos #endif // ifndef GEOS_OP_PREDICATE_RECTANGLEINTERSECTS_H geos-3.4.2/include/geos/operation/predicate/SegmentIntersectionTester.h0000644000175000017500000000530112206417147026151 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/SegmentIntersectionTester.java r378 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_PREDICATE_SEGMENTINTERSECTIONTESTER_H #define GEOS_OP_PREDICATE_SEGMENTINTERSECTIONTESTER_H #include #include // for composition #include // for composition // Forward declarations namespace geos { namespace geom { class LineString; class CoordinateSequence; } } namespace geos { namespace operation { // geos::operation namespace predicate { // geos::operation::predicate /** \brief * Tests if any line segments in two sets of CoordinateSequences intersect. * * The algorithm is optimized for use when the first input has smaller extent * than the set of test lines. * The code is short-circuited to return as soon an intersection is found. * */ class GEOS_DLL SegmentIntersectionTester { private: /// \brief /// For purposes of intersection testing, /// don't need to set precision model /// algorithm::LineIntersector li; // Robust bool hasIntersectionVar; geom::Coordinate pt10; geom::Coordinate pt11; geom::Coordinate pt00; geom::Coordinate pt01; public: SegmentIntersectionTester(): hasIntersectionVar(false) {} bool hasIntersectionWithLineStrings(const geom::LineString &line, const std::vector& lines); bool hasIntersection(const geom::LineString &line, const geom::LineString &testLine); /** * Tests the segments of a LineString against the segs in * another LineString for intersection. * Uses the envelope of the query LineString * to filter before testing segments directly. * This is optimized for the case when the query * LineString is a rectangle. * * Testing shows this is somewhat faster than not checking the envelope. * * @param line * @param testLine * @return */ bool hasIntersectionWithEnvelopeFilter(const geom::LineString &line, const geom::LineString &testLine); }; } // namespace geos::operation::predicate } // namespace geos::operation } // namespace geos #endif // ifndef GEOS_OP_PREDICATE_SEGMENTINTERSECTIONTESTER_H geos-3.4.2/include/geos/operation/relate/0000755000175000017500000000000012206417231020127 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/relate/EdgeEndBuilder.h0000644000175000017500000000354612206417150023112 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBuilder.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_EDGEENDBUILDER_H #define GEOS_OP_RELATE_EDGEENDBUILDER_H #include #include // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; class Coordinate; } namespace geomgraph { class Edge; class EdgeIntersection; class EdgeEnd; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Computes the geomgraph::EdgeEnd objects which arise * from a noded geomgraph::Edge. */ class GEOS_DLL EdgeEndBuilder { public: EdgeEndBuilder() {} std::vector *computeEdgeEnds(std::vector *edges); void computeEdgeEnds(geomgraph::Edge *edge,std::vector *l); protected: void createEdgeEndForPrev(geomgraph::Edge *edge, std::vector *l, geomgraph::EdgeIntersection *eiCurr, geomgraph::EdgeIntersection *eiPrev); void createEdgeEndForNext(geomgraph::Edge *edge, std::vector *l, geomgraph::EdgeIntersection *eiCurr, geomgraph::EdgeIntersection *eiNext); }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_EDGEENDBUILDER_H geos-3.4.2/include/geos/operation/relate/EdgeEndBundle.h0000644000175000017500000000601512206417150022727 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBundle.java rev. 1.17 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_EDGEENDBUNDLE_H #define GEOS_OP_RELATE_EDGEENDBUNDLE_H #include #include // for EdgeEndBundle inheritance #include // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geom { class IntersectionMatrix; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * A collection of geomgraph::EdgeEnd objects which * originate at the same point and have the same direction. */ class GEOS_DLL EdgeEndBundle: public geomgraph::EdgeEnd { public: EdgeEndBundle(geomgraph::EdgeEnd *e); virtual ~EdgeEndBundle(); std::vector* getEdgeEnds(); void insert(geomgraph::EdgeEnd *e); void computeLabel(const algorithm::BoundaryNodeRule& bnr); /** * \brief * Update the IM with the contribution for the computed label for * the EdgeStubs. */ void updateIM(geom::IntersectionMatrix& im); std::string print(); protected: std::vector *edgeEnds; /** * Compute the overall ON location for the list of EdgeStubs. * * (This is essentially equivalent to computing the self-overlay of * a single Geometry) * * edgeStubs can be either on the boundary (eg Polygon edge) * OR in the interior (e.g. segment of a LineString) * of their parent Geometry. * * In addition, GeometryCollections use a algorithm::BoundaryNodeRule * to determine whether a segment is on the boundary or not. * * Finally, in GeometryCollections it can occur that an edge * is both * on the boundary and in the interior (e.g. a LineString segment * lying on * top of a Polygon edge.) In this case the Boundary is * given precendence. * * These observations result in the following rules for computing * the ON location: * - if there are an odd number of Bdy edges, the attribute is Bdy * - if there are an even number >= 2 of Bdy edges, the attribute * is Int * - if there are any Int edges, the attribute is Int * - otherwise, the attribute is NULL. * */ void computeLabelOn(int geomIndex, const algorithm::BoundaryNodeRule& boundaryNodeRule); void computeLabelSides(int geomIndex); void computeLabelSide(int geomIndex,int side); }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_EDGEENDBUNDLE_H geos-3.4.2/include/geos/operation/relate/EdgeEndBundleStar.h0000644000175000017500000000336212206417150023563 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBundleStar.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_EDGEENDBUNDLESTAR_H #define GEOS_OP_RELATE_EDGEENDBUNDLESTAR_H #include #include // for EdgeEndBundleStar inheritance // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; } namespace geomgraph { class EdgeEnd; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * An ordered list of EdgeEndBundle objects around a RelateNode. * * They are maintained in CCW order (starting with the positive x-axis) * around the node * for efficient lookup and topology building. */ class GEOS_DLL EdgeEndBundleStar: public geomgraph::EdgeEndStar { public: /// Creates a new empty EdgeEndBundleStar EdgeEndBundleStar() {} virtual ~EdgeEndBundleStar(); void insert(geomgraph::EdgeEnd *e); /** * Update the IM with the contribution for the EdgeStubs around the node. */ void updateIM(geom::IntersectionMatrix& im); }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_EDGEENDBUNDLESTAR_H geos-3.4.2/include/geos/operation/relate/Makefile.am0000644000175000017500000000056212206417150022166 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/relate geos_HEADERS = \ EdgeEndBuilder.h \ EdgeEndBundle.h \ EdgeEndBundleStar.h \ RelateComputer.h \ RelateNodeFactory.h \ RelateNodeGraph.h \ RelateNode.h \ RelateOp.h geos-3.4.2/include/geos/operation/relate/Makefile.in0000644000175000017500000003653512206417162022213 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/relate DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/relate geos_HEADERS = \ EdgeEndBuilder.h \ EdgeEndBundle.h \ EdgeEndBundleStar.h \ RelateComputer.h \ RelateNodeFactory.h \ RelateNodeGraph.h \ RelateNode.h \ RelateOp.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/relate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/relate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/relate/RelateComputer.h0000644000175000017500000001174312206417150023241 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateComputer.java rev. 1.24 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_RELATECOMPUTER_H #define GEOS_OP_RELATE_RELATECOMPUTER_H #include #include // for RelateComputer composition #include // for RelateComputer composition #include // for RelateComputer composition #include // for RelateComputer composition #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; class Geometry; } namespace geomgraph { class GeometryGraph; class Edge; class EdgeEnd; class Node; namespace index { class SegmentIntersector; } } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Computes the topological relationship between two Geometries. * * RelateComputer does not need to build a complete graph structure to compute * the IntersectionMatrix. The relationship between the geometries can * be computed by simply examining the labelling of edges incident on each node. * * RelateComputer does not currently support arbitrary GeometryCollections. * This is because GeometryCollections can contain overlapping Polygons. * In order to correct compute relate on overlapping Polygons, they * would first need to be noded and merged (if not explicitly, at least * implicitly). * */ class GEOS_DLL RelateComputer { public: RelateComputer(std::vector *newArg); ~RelateComputer(); geom::IntersectionMatrix* computeIM(); private: algorithm::LineIntersector li; algorithm::PointLocator ptLocator; /// the arg(s) of the operation std::vector *arg; geomgraph::NodeMap nodes; /// this intersection matrix will hold the results compute for the relate std::auto_ptr im; std::vector isolatedEdges; /// the intersection point found (if any) geom::Coordinate invalidPoint; void insertEdgeEnds(std::vector *ee); void computeProperIntersectionIM( geomgraph::index::SegmentIntersector *intersector, geom::IntersectionMatrix *imX); void copyNodesAndLabels(int argIndex); void computeIntersectionNodes(int argIndex); void labelIntersectionNodes(int argIndex); /** * If the Geometries are disjoint, we need to enter their dimension and * boundary dimension in the Ext rows in the IM */ void computeDisjointIM(geom::IntersectionMatrix *imX); void labelNodeEdges(); /** * update the IM with the sum of the IMs for each component */ void updateIM(geom::IntersectionMatrix& imX); /** * Processes isolated edges by computing their labelling and adding them * to the isolated edges list. * Isolated edges are guaranteed not to touch the boundary of the target * (since if they * did, they would have caused an intersection to be computed and hence would * not be isolated) */ void labelIsolatedEdges(int thisIndex,int targetIndex); /** * Label an isolated edge of a graph with its relationship to the target * geometry. * If the target has dim 2 or 1, the edge can either be in the interior * or the exterior. * If the target has dim 0, the edge must be in the exterior */ void labelIsolatedEdge(geomgraph::Edge *e,int targetIndex, const geom::Geometry *target); /** * Isolated nodes are nodes whose labels are incomplete * (e.g. the location for one Geometry is null). * This is the case because nodes in one graph which don't intersect * nodes in the other are not completely labelled by the initial process * of adding nodes to the nodeList. * To complete the labelling we need to check for nodes that lie in the * interior of edges, and in the interior of areas. */ void labelIsolatedNodes(); /** * Label an isolated node with its relationship to the target geometry. */ void labelIsolatedNode(geomgraph::Node *n,int targetIndex); }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_RELATE_RELATECOMPUTER_H geos-3.4.2/include/geos/operation/relate/RelateNode.h0000644000175000017500000000316712206417150022331 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNode.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_RELATENODE_H #define GEOS_OP_RELATE_RELATENODE_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; class Coordinate; } namespace geomgraph { class EdgeEndStar; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Represents a node in the topological graph used to compute spatial * relationships. */ class GEOS_DLL RelateNode: public geomgraph::Node { public: RelateNode(const geom::Coordinate& coord, geomgraph::EdgeEndStar *edges); virtual ~RelateNode(); /** * Update the IM with the contribution for the EdgeEnds incident on this node. */ void updateIMFromEdges(geom::IntersectionMatrix& im); protected: void computeIM(geom::IntersectionMatrix& im); }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_RELATENODE_H geos-3.4.2/include/geos/operation/relate/RelateNodeFactory.h0000644000175000017500000000276612206417150023665 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNodeFactory.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_RELATENODEFACTORY_H #define GEOS_OP_RELATE_RELATENODEFACTORY_H #include #include // for RelateNodeFactory inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace geomgraph { class Node; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Used by the geomgraph::NodeMap in a RelateNodeGraph to create RelateNode objects. */ class GEOS_DLL RelateNodeFactory: public geomgraph::NodeFactory { public: geomgraph::Node* createNode(const geom::Coordinate &coord) const; static const geomgraph::NodeFactory &instance(); private: RelateNodeFactory() {} }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_RELATENODEFACTORY_H geos-3.4.2/include/geos/operation/relate/RelateNodeGraph.h0000644000175000017500000000530012206417150023302 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNodeGraph.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_RELATENODEGRAPH_H #define GEOS_OP_RELATE_RELATENODEGRAPH_H #include #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; struct CoordinateLessThen; } namespace geomgraph { //class EdgeEndStar; class Node; class GeometryGraph; class EdgeEnd; class NodeMap; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Implements the simple graph of Nodes and geomgraph::EdgeEnd which is all that is * required to determine topological relationships between Geometries. * * Also supports building a topological graph of a single Geometry, to * allow verification of valid topology. * * It is not necessary to create a fully linked * PlanarGraph to determine relationships, since it is sufficient * to know how the Geometries interact locally around the nodes. * In fact, this is not even feasible, since it is not possible to compute * exact intersection points, and hence the topology around those nodes * cannot be computed robustly. * The only Nodes that are created are for improper intersections; * that is, nodes which occur at existing vertices of the Geometries. * Proper intersections (e.g. ones which occur between the interior of * line segments) * have their topology determined implicitly, without creating a geomgraph::Node object * to represent them. * */ class GEOS_DLL RelateNodeGraph { public: RelateNodeGraph(); virtual ~RelateNodeGraph(); std::map &getNodeMap(); void build(geomgraph::GeometryGraph *geomGraph); void computeIntersectionNodes(geomgraph::GeometryGraph *geomGraph, int argIndex); void copyNodesAndLabels(geomgraph::GeometryGraph *geomGraph,int argIndex); void insertEdgeEnds(std::vector *ee); private: geomgraph::NodeMap *nodes; }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_RELATENODEGRAPH_H geos-3.4.2/include/geos/operation/relate/RelateOp.h0000644000175000017500000000776612206417150022033 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateOp.java rev. 1.19 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_RELATE_RELATEOP_H #define GEOS_OP_RELATE_RELATEOP_H #include #include // for inheritance #include // for composition // Forward declarations namespace geos { namespace algorithm { class BoundaryNodeRule; } namespace geom { class IntersectionMatrix; class Geometry; } } namespace geos { namespace operation { // geos::operation namespace relate { // geos::operation::relate /** \brief * Implements the SFS relate() operation on two * geom::Geometry objects. * * This class supports specifying a custom algorithm::BoundaryNodeRule * to be used during the relate computation. * * Note: custom Boundary Node Rules do not (currently) * affect the results of other Geometry methods (such * as {@link Geometry::getBoundary}. The results of * these methods may not be consistent with the relationship computed by * a custom Boundary Node Rule. * */ class GEOS_DLL RelateOp: public GeometryGraphOperation { public: /** \brief * Computes the geom::IntersectionMatrix for the spatial relationship * between two geom::Geometry objects, using the default (OGC SFS) * Boundary Node Rule * * @param a a Geometry to test. Ownership left to caller. * @param b a Geometry to test. Ownership left to caller. * * @return the IntersectonMatrix for the spatial relationship * between the geometries. Ownership transferred. */ static geom::IntersectionMatrix* relate( const geom::Geometry *a, const geom::Geometry *b); /** \brief * Computes the geom::IntersectionMatrix for the spatial relationship * between two geom::Geometry objects, using a specified * Boundary Node Rule * * @param a a Geometry to test. Ownership left to caller. * @param b a Geometry to test. Ownership left to caller. * @param boundaryNodeRule the Boundary Node Rule to use. * * @return the IntersectonMatrix for the spatial relationship * between the geometries. Ownership transferred. */ static geom::IntersectionMatrix* relate( const geom::Geometry *a, const geom::Geometry *b, const algorithm::BoundaryNodeRule& boundaryNodeRule); /** \brief * Creates a new Relate operation, using the default (OGC SFS) * Boundary Node Rule. * * @param g0 a Geometry to relate. Ownership left to caller. * @param g1 another Geometry to relate. Ownership to caller. */ RelateOp(const geom::Geometry *g0, const geom::Geometry *g1); /** \brief * Creates a new Relate operation with a specified * Boundary Node Rule. * * @param g0 a Geometry to relate. Ownership left to caller. * @param g1 another Geometry to relate. Ownership to caller. * @param boundaryNodeRule the Boundary Node Rule to use */ RelateOp(const geom::Geometry *g0, const geom::Geometry *g1, const algorithm::BoundaryNodeRule& boundaryNodeRule); virtual ~RelateOp(); /** \brief * Gets the IntersectionMatrix for the spatial relationship * between the input geometries. * * @return the geom::IntersectionMatrix for the spatial * relationship between the input geometries. * Ownership transferred. */ geom::IntersectionMatrix* getIntersectionMatrix(); private: RelateComputer relateComp; }; } // namespace geos:operation:relate } // namespace geos:operation } // namespace geos #endif // GEOS_OP_RELATE_RELATEOP_H geos-3.4.2/include/geos/operation/sharedpaths/0000755000175000017500000000000012206417231021161 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/sharedpaths/Makefile.am0000644000175000017500000000027612206417147023230 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/sharedpaths geos_HEADERS = \ SharedPathsOp.h geos-3.4.2/include/geos/operation/sharedpaths/Makefile.in0000644000175000017500000003630112206417162023234 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/sharedpaths DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/sharedpaths geos_HEADERS = \ SharedPathsOp.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/sharedpaths/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/sharedpaths/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/sharedpaths/SharedPathsOp.h0000644000175000017500000001127412206417147024052 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: original work * * Developed by Sandro Santilli (strk@keybit.net) * for Faunalia (http://www.faunalia.it) * with funding from Regione Toscana - Settore SISTEMA INFORMATIVO * TERRITORIALE ED AMBIENTALE - for the project: "Sviluppo strumenti * software per il trattamento di dati geografici basati su QuantumGIS * e Postgis (CIG 0494241492)" * **********************************************************************/ #ifndef GEOS_OPERATION_SHAREDPATHSOP_H #define GEOS_OPERATION_SHAREDPATHSOP_H #include // for GEOS_DLL #include // Forward declarations namespace geos { namespace geom { class LineString; class Geometry; class GeometryFactory; } } namespace geos { namespace operation { // geos.operation namespace sharedpaths { // geos.operation.sharedpaths /** \brief * Find shared paths among two linear Geometry objects * * For each shared path report if it direction is the same * or opposite. * * Paths reported as shared are given in the direction they * appear in the first geometry. * * Developed by Sandro Santilli (strk@keybit.net) * for Faunalia (http://www.faunalia.it) * with funding from Regione Toscana - Settore SISTEMA INFORMATIVO * TERRITORIALE ED AMBIENTALE - for the project: "Sviluppo strumenti * software per il trattamento di dati geografici basati su QuantumGIS * e Postgis (CIG 0494241492)" * */ class GEOS_DLL SharedPathsOp { public: /// LineString vector (list of edges) typedef std::vector PathList; /// Find paths shared between two linear geometries // /// @param g1 /// First geometry. Must be linear. /// /// @param g2 /// Second geometry. Must be linear. /// /// @param sameDir /// Shared edges having the same direction are pushed /// onto this vector. They'll be of type LineString. /// Ownership of the edges is tranferred. /// /// @param oppositeDir /// Shared edges having the opposite direction are pushed /// onto this vector. They'll be of type geom::LineString. /// Ownership of the edges is tranferred. /// static void sharedPathsOp(const geom::Geometry& g1, const geom::Geometry& g2, PathList& sameDirection, PathList& oppositeDirection); /// Constructor // /// @param g1 /// First geometry. Must be linear. /// /// @param g2 /// Second geometry. Must be linear. /// SharedPathsOp(const geom::Geometry& g1, const geom::Geometry& g2); /// Get shared paths // /// @param sameDir /// Shared edges having the same direction are pushed /// onto this vector. They'll be of type geom::LineString. /// Ownership of the edges is tranferred. /// /// @param oppositeDir /// Shared edges having the opposite direction are pushed /// onto this vector. They'll be of type geom::LineString. /// Ownership of the edges is tranferred. /// void getSharedPaths(PathList& sameDirection, PathList& oppositeDirection); /// Delete all edges in the list static void clearEdges(PathList& from); private: /// Get all the linear intersections // /// Ownership of linestring pushed to the given container /// is transferred to caller. See clearEdges for a deep /// release if you need one. /// void findLinearIntersections(PathList& to); /// Check if the given edge goes forward or backward on the given line. // /// PRECONDITION: It is assumed the edge fully lays on the geometry /// bool isForward(const geom::LineString& edge, const geom::Geometry& geom); /// Check if the given edge goes in the same direction over /// the two geometries. bool isSameDirection(const geom::LineString& edge) { return (isForward(edge, _g1) == isForward(edge, _g2)); } /// Throw an IllegalArgumentException if the geom is not linear void checkLinealInput(const geom::Geometry& g); const geom::Geometry& _g1; const geom::Geometry& _g2; const geom::GeometryFactory& _gf; // Declare type as noncopyable SharedPathsOp(const SharedPathsOp& other); SharedPathsOp& operator=(const SharedPathsOp& rhs); }; } // namespace geos.operation.sharedpaths } // namespace geos.operation } // namespace geos #endif geos-3.4.2/include/geos/operation/union/0000755000175000017500000000000012206417231020003 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/union/CascadedPolygonUnion.h0000644000175000017500000001741712206417147024244 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/union/CascadedPolygonUnion.java r487 (JTS-1.12+) * **********************************************************************/ #ifndef GEOS_OP_UNION_CASCADEDPOLYGONUNION_H #define GEOS_OP_UNION_CASCADEDPOLYGONUNION_H #include #include #include #include #include "GeometryListHolder.h" // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Geometry; class Polygon; class MultiPolygon; class Envelope; } namespace index { namespace strtree { class ItemsList; } } } namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /** * \brief * Provides an efficient method of unioning a collection of * {@link Polygonal} geometries. * This algorithm is faster and likely more robust than * the simple iterated approach of * repeatedly unioning each polygon to a result geometry. * * The buffer(0) trick is sometimes faster, but can be less robust and * can sometimes take an exceptionally long time to complete. * This is particularly the case where there is a high degree of overlap * between the polygons. In this case, buffer(0) is forced to compute * with all line segments from the outset, * whereas cascading can eliminate many segments * at each stage of processing. * The best case for buffer(0) is the trivial case * where there is no overlap between the input geometries. * However, this case is likely rare in practice. */ class GEOS_DLL CascadedPolygonUnion { private: std::vector* inputPolys; geom::GeometryFactory const* geomFactory; /** * The effectiveness of the index is somewhat sensitive * to the node capacity. * Testing indicates that a smaller capacity is better. * For an STRtree, 4 is probably a good number (since * this produces 2x2 "squares"). */ static int const STRTREE_NODE_CAPACITY = 4; /** * Computes a {@link Geometry} containing only {@link Polygonal} components. * * Extracts the {@link Polygon}s from the input * and returns them as an appropriate {@link Polygonal} geometry. * * If the input is already Polygonal, it is returned unchanged. * * A particular use case is to filter out non-polygonal components * returned from an overlay operation. * * @param g the geometry to filter * @return a Polygonal geometry */ static std::auto_ptr restrictToPolygons(std::auto_ptr g); public: CascadedPolygonUnion(); /** * Computes the union of * a collection of {@link Polygonal} {@link Geometry}s. * * @param polys a collection of {@link Polygonal} {@link Geometry}s. * ownership of elements _and_ vector are left to caller. */ static geom::Geometry* Union(std::vector* polys); /** * Computes the union of a set of {@link Polygonal} {@link Geometry}s. * * @tparam T an iterator yelding something castable to const Polygon * * @param start start iterator * @param end end iterator */ template static geom::Geometry* Union(T start, T end) { std::vector polys; for (T i=start; i!=end; ++i) { const geom::Polygon* p = dynamic_cast(*i); polys.push_back(const_cast(p)); } return Union(&polys); } /** * Computes the union of * a collection of {@link Polygonal} {@link Geometry}s. * * @param polys a collection of {@link Polygonal} {@link Geometry}s * ownership of elements _and_ vector are left to caller. */ static geom::Geometry* Union(const geom::MultiPolygon* polys); /** * Creates a new instance to union * the given collection of {@link Geometry}s. * * @param geoms a collection of {@link Polygonal} {@link Geometry}s * ownership of elements _and_ vector are left to caller. */ CascadedPolygonUnion(std::vector* polys) : inputPolys(polys), geomFactory(NULL) {} /** * Computes the union of the input geometries. * * @return the union of the input geometries * @return null if no input geometries were provided */ geom::Geometry* Union(); private: geom::Geometry* unionTree(index::strtree::ItemsList* geomTree); /** * Unions a list of geometries * by treating the list as a flattened binary tree, * and performing a cascaded union on the tree. */ geom::Geometry* binaryUnion(GeometryListHolder* geoms); /** * Unions a section of a list using a recursive binary union on each half * of the section. * * @param geoms the list of geometries containing the section to union * @param start the start index of the section * @param end the index after the end of the section * @return the union of the list section */ geom::Geometry* binaryUnion(GeometryListHolder* geoms, std::size_t start, std::size_t end); /** * Reduces a tree of geometries to a list of geometries * by recursively unioning the subtrees in the list. * * @param geomTree a tree-structured list of geometries * @return a list of Geometrys */ GeometryListHolder* reduceToGeometries(index::strtree::ItemsList* geomTree); /** * Computes the union of two geometries, * either of both of which may be null. * * @param g0 a Geometry * @param g1 a Geometry * @return the union of the input(s) * @return null if both inputs are null */ geom::Geometry* unionSafe(geom::Geometry* g0, geom::Geometry* g1); geom::Geometry* unionOptimized(geom::Geometry* g0, geom::Geometry* g1); /** * \brief * Unions two polygonal geometries, restricting computation * to the envelope intersection where possible. * * The case of MultiPolygons is optimized to union only * the polygons which lie in the intersection of the two geometry's * envelopes. * Polygons outside this region can simply be combined with the union * result, which is potentially much faster. * This case is likely to occur often during cascaded union, and may also * occur in real world data (such as unioning data for parcels on * different street blocks). * * @param g0 a polygonal geometry * @param g1 a polygonal geometry * @param common the intersection of the envelopes of the inputs * @return the union of the inputs */ geom::Geometry* unionUsingEnvelopeIntersection(geom::Geometry* g0, geom::Geometry* g1, geom::Envelope const& common); geom::Geometry* extractByEnvelope(geom::Envelope const& env, geom::Geometry* geom, std::vector& disjointGeoms); /** * Encapsulates the actual unioning of two polygonal geometries. * * @param g0 * @param g1 * @return */ static geom::Geometry* unionActual(geom::Geometry* g0, geom::Geometry* g1); }; } // namespace geos::operation::union } // namespace geos::operation } // namespace geos #endif geos-3.4.2/include/geos/operation/union/CascadedUnion.h0000644000175000017500000001351512206417147022667 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://trac.osgeo.org/geos * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK, generalization of CascadedPolygonUnion * **********************************************************************/ #ifndef GEOS_OP_UNION_CASCADEDUNION_H #define GEOS_OP_UNION_CASCADEDUNION_H #include #include #include #include "GeometryListHolder.h" // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Geometry; class Geometry; class Envelope; } namespace index { namespace strtree { class ItemsList; } } } namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /** * \brief * Provides an efficient method of unioning a collection of Geometries * * This algorithm is more robust than the simple iterated approach * of repeatedly unioning each geometry to a result geometry. */ class GEOS_DLL CascadedUnion { private: const std::vector* inputGeoms; geom::GeometryFactory const* geomFactory; /** * The effectiveness of the index is somewhat sensitive * to the node capacity. * Testing indicates that a smaller capacity is better. * For an STRtree, 4 is probably a good number (since * this produces 2x2 "squares"). */ static int const STRTREE_NODE_CAPACITY = 4; public: CascadedUnion(); /** * Computes the union of a collection of {@link Geometry}s. * * @param geoms a collection of {@link Geometry}s. * ownership of elements _and_ vector are left to caller. */ static geom::Geometry* Union(std::vector* geoms); /** * Computes the union of a set of {@link Geometry}s. * * @tparam T an iterator yelding something castable to const Geometry * * @param start start iterator * @param end end iterator */ template static geom::Geometry* Union(T start, T end) { std::vector polys; for (T i=start; i!=end; ++i) { const geom::Geometry* p = dynamic_cast(*i); polys.push_back(const_cast(p)); } return Union(&polys); } /** * Creates a new instance to union * the given collection of {@link Geometry}s. * * @param geoms a collection of {@link Geometryal} {@link Geometry}s * ownership of elements _and_ vector are left to caller. */ CascadedUnion(const std::vector* geoms) : inputGeoms(geoms), geomFactory(NULL) {} /** * Computes the union of the input geometries. * * @return the union of the input geometries * @return null if no input geometries were provided */ geom::Geometry* Union(); private: geom::Geometry* unionTree(index::strtree::ItemsList* geomTree); /** * Unions a list of geometries * by treating the list as a flattened binary tree, * and performing a cascaded union on the tree. */ geom::Geometry* binaryUnion(GeometryListHolder* geoms); /** * Unions a section of a list using a recursive binary union on each half * of the section. * * @param geoms * @param start * @param end * @return the union of the list section */ geom::Geometry* binaryUnion(GeometryListHolder* geoms, std::size_t start, std::size_t end); /** * Reduces a tree of geometries to a list of geometries * by recursively unioning the subtrees in the list. * * @param geomTree a tree-structured list of geometries * @return a list of Geometrys */ GeometryListHolder* reduceToGeometries(index::strtree::ItemsList* geomTree); /** * Computes the union of two geometries, * either of both of which may be null. * * @param g0 a Geometry * @param g1 a Geometry * @return the union of the input(s) * @return null if both inputs are null */ geom::Geometry* unionSafe(geom::Geometry* g0, geom::Geometry* g1); geom::Geometry* unionOptimized(geom::Geometry* g0, geom::Geometry* g1); /** * Unions two geometries. * The case of multi geometries is optimized to union only * the components which lie in the intersection of the two geometry's * envelopes. * Geometrys outside this region can simply be combined with the union * result, which is potentially much faster. * This case is likely to occur often during cascaded union, and may also * occur in real world data (such as unioning data for parcels on * different street blocks). * * @param g0 a geometry * @param g1 a geometry * @param common the intersection of the envelopes of the inputs * @return the union of the inputs */ geom::Geometry* unionUsingEnvelopeIntersection(geom::Geometry* g0, geom::Geometry* g1, geom::Envelope const& common); geom::Geometry* extractByEnvelope(geom::Envelope const& env, geom::Geometry* geom, std::vector& disjointGeoms); /** * Encapsulates the actual unioning of two polygonal geometries. * * @param g0 * @param g1 * @return */ static geom::Geometry* unionActual(geom::Geometry* g0, geom::Geometry* g1); }; } // namespace geos::operation::union } // namespace geos::operation } // namespace geos #endif geos-3.4.2/include/geos/operation/union/GeometryListHolder.h0000644000175000017500000000343412206417147023753 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_OP_UNION_GEOMETRYLISTHOLDER_H #define GEOS_OP_UNION_GEOMETRYLISTHOLDER_H // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /** * \brief Helper class holding Geometries, part of which are held by reference * others are held exclusively. */ class GeometryListHolder : public std::vector { private: typedef std::vector base_type; public: GeometryListHolder() {} ~GeometryListHolder() { std::for_each(ownedItems.begin(), ownedItems.end(), &GeometryListHolder::deleteItem); } // items need to be deleted in the end void push_back_owned(geom::Geometry* item) { this->base_type::push_back(item); ownedItems.push_back(item); } geom::Geometry* getGeometry(std::size_t index) { if (index >= this->base_type::size()) return NULL; return (*this)[index]; } private: static void deleteItem(geom::Geometry* item); private: std::vector ownedItems; }; } // namespace geos::operation::union } // namespace geos::operation } // namespace geos #endif geos-3.4.2/include/geos/operation/union/Makefile.am0000644000175000017500000000043712206417147022051 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/union geos_HEADERS = \ CascadedPolygonUnion.h \ CascadedUnion.h \ GeometryListHolder.h \ PointGeometryUnion.h \ UnaryUnionOp.h geos-3.4.2/include/geos/operation/union/Makefile.in0000644000175000017500000003642012206417162022060 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/union DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/union geos_HEADERS = \ CascadedPolygonUnion.h \ CascadedUnion.h \ GeometryListHolder.h \ PointGeometryUnion.h \ UnaryUnionOp.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/union/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/union/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/union/PointGeometryUnion.h0000644000175000017500000000357312206417147024010 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli #include #include // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Geometry; class Puntal; } } namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /** * \brief * Computes the union of a {@link Puntal} geometry with * another arbitrary {@link Geometry}. * * Does not copy any component geometries. * */ class GEOS_DLL PointGeometryUnion { public: static std::auto_ptr Union( const geom::Puntal& pointGeom, const geom::Geometry& otherGeom); PointGeometryUnion(const geom::Puntal& pointGeom, const geom::Geometry& otherGeom); std::auto_ptr Union() const; private: const geom::Geometry& pointGeom; const geom::Geometry& otherGeom; const geom::GeometryFactory* geomFact; // Declared as non-copyable PointGeometryUnion(const PointGeometryUnion& other); PointGeometryUnion& operator=(const PointGeometryUnion& rhs); }; } // namespace geos::operation::union } // namespace geos::operation } // namespace geos #endif geos-3.4.2/include/geos/operation/union/UnaryUnionOp.h0000644000175000017500000001473612206417147022603 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/union/UnaryUnionOp.java r320 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_UNION_UNARYUNION_H #define GEOS_OP_UNION_UNARYUNION_H #include #include #include #include #include #include #include #include #include #include //#include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class GeometryFactory; class Geometry; } } namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /** * Unions a collection of Geometry or a single Geometry * (which may be a collection) together. * By using this special-purpose operation over a collection of * geometries it is possible to take advantage of various optimizations * to improve performance. * Heterogeneous {@link GeometryCollection}s are fully supported. * * The result obeys the following contract: * * - Unioning a set of overlapping {@link Polygons}s has the effect of * merging the areas (i.e. the same effect as * iteratively unioning all individual polygons together). * - Unioning a set of {@link LineString}s has the effect of * fully noding and dissolving the input linework. * In this context "fully noded" means that there will be a node or * endpoint in the output for every endpoint or line segment crossing * in the input. * "Dissolved" means that any duplicate (e.g. coincident) line segments * or portions of line segments will be reduced to a single line segment * in the output. * This is consistent with the semantics of the * {@link Geometry#union(Geometry)} operation. * If merged linework is required, the {@link LineMerger} class * can be used. * - Unioning a set of {@link Points}s has the effect of merging * al identical points (producing a set with no duplicates). * * UnaryUnion always operates on the individual components of * MultiGeometries. * So it is possible to use it to "clean" invalid self-intersecting * MultiPolygons (although the polygon components must all still be * individually valid.) */ class GEOS_DLL UnaryUnionOp { public: template static std::auto_ptr Union(const T& geoms) { UnaryUnionOp op(geoms); return op.Union(); } template static std::auto_ptr Union(const T& geoms, geom::GeometryFactory& geomFact) { UnaryUnionOp op(geoms, geomFact); return op.Union(); } static std::auto_ptr Union(const geom::Geometry& geom) { UnaryUnionOp op(geom); return op.Union(); } template UnaryUnionOp(const T& geoms, geom::GeometryFactory& geomFactIn) : geomFact(&geomFactIn) { extractGeoms(geoms); } template UnaryUnionOp(const T& geoms) : geomFact(0) { extractGeoms(geoms); } UnaryUnionOp(const geom::Geometry& geom) : geomFact(geom.getFactory()) { extract(geom); } /** * \brief * Gets the union of the input geometries. * * If no input geometries were provided, a POINT EMPTY is returned. * * @return a Geometry containing the union * @return an empty GEOMETRYCOLLECTION if no geometries were provided * in the input */ std::auto_ptr Union(); private: template void extractGeoms(const T& geoms) { for (typename T::const_iterator i=geoms.begin(), e=geoms.end(); i!=e; ++i) { const geom::Geometry* geom = *i; extract(*geom); } } void extract(const geom::Geometry& geom) { using namespace geom::util; if ( ! geomFact ) geomFact = geom.getFactory(); GeometryExtracter::extract(geom, polygons); GeometryExtracter::extract(geom, lines); GeometryExtracter::extract(geom, points); } /** * Computes a unary union with no extra optimization, * and no short-circuiting. * Due to the way the overlay operations * are implemented, this is still efficient in the case of linear * and puntal geometries. * Uses robust version of overlay operation * to ensure identical behaviour to the union(Geometry) operation. * * @param g0 a geometry * @return the union of the input geometry */ std::auto_ptr unionNoOpt(const geom::Geometry& g0) { using geos::operation::overlay::OverlayOp; //using geos::operation::overlay::snap::SnapIfNeededOverlayOp; if ( ! empty.get() ) { empty.reset( geomFact->createEmptyGeometry() ); } //return SnapIfNeededOverlayOp::overlayOp(g0, *empty, OverlayOp::opUNION); return BinaryOp(&g0, empty.get(), overlay::overlayOp(OverlayOp::opUNION)); } /** * Computes the union of two geometries, * either of both of which may be null. * * @param g0 a Geometry (ownership transferred) * @param g1 a Geometry (ownership transferred) * @return the union of the input(s) * @return null if both inputs are null */ std::auto_ptr unionWithNull(std::auto_ptr g0, std::auto_ptr g1); std::vector polygons; std::vector lines; std::vector points; const geom::GeometryFactory* geomFact; std::auto_ptr empty; }; } // namespace geos::operation::union } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif geos-3.4.2/include/geos/operation/valid/0000755000175000017500000000000012206417231017752 5ustar frankiefrankiegeos-3.4.2/include/geos/operation/valid/ConnectedInteriorTester.h0000644000175000017500000001055012206417147024737 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/ConnectedInteriorTester.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_CONNECTEDINTERIORTESTER_H #define GEOS_OP_CONNECTEDINTERIORTESTER_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { //class Coordinate; class Geometry; class CoordinateSequence; class GeometryFactory; class LineString; } namespace geomgraph { class GeometryGraph; class PlanarGraph; class EdgeRing; class DirectedEdge; class EdgeEnd; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * This class tests that the interior of an area Geometry * (Polygon or MultiPolygon) * is connected. * * An area Geometry is invalid if the interior is disconnected. * This can happen if: * * - one or more holes either form a chain touching the shell at two places * - one or more holes form a ring around a portion of the interior * * If an inconsistency if found the location of the problem * is recorded. */ class GEOS_DLL ConnectedInteriorTester { public: ConnectedInteriorTester(geomgraph::GeometryGraph &newGeomGraph); ~ConnectedInteriorTester(); geom::Coordinate& getCoordinate(); bool isInteriorsConnected(); static const geom::Coordinate& findDifferentPoint( const geom::CoordinateSequence *coord, const geom::Coordinate& pt); protected: void visitLinkedDirectedEdges(geomgraph::DirectedEdge *start); private: geom::GeometryFactory *geometryFactory; geomgraph::GeometryGraph &geomGraph; /// Save a coordinate for any disconnected interior found /// the coordinate will be somewhere on the ring surrounding /// the disconnected interior geom::Coordinate disconnectedRingcoord; /// Used to track MaximalEdgeRings allocations std::vector maximalEdgeRings; void setInteriorEdgesInResult(geomgraph::PlanarGraph &graph); /** * \brief * Form DirectedEdges in graph into Minimal EdgeRings. * * Minimal Edgerings must be used, because only they are * guaranteed to provide a correct isHole computation. * * @param minEdgeRings : newly allocated minimal edge rings will * be push_back'ed here. * deletion responsibility is left to caller. */ void buildEdgeRings(std::vector *dirEdges, std::vector& minEdgeRings); /** * Mark all the edges for the edgeRings corresponding to the shells * of the input polygons. Note only ONE ring gets marked for each shell. */ void visitShellInteriors(const geom::Geometry *g, geomgraph::PlanarGraph &graph); void visitInteriorRing(const geom::LineString *ring, geomgraph::PlanarGraph &graph); /** * Check if any shell ring has an unvisited edge. * A shell ring is a ring which is not a hole and which has the interior * of the parent area on the RHS. * (Note that there may be non-hole rings with the interior on the LHS, * since the interior of holes will also be polygonized into CW rings * by the linkAllDirectedEdges() step) * * @return true if there is an unvisited edge in a non-hole ring */ bool hasUnvisitedShellEdge(std::vector *edgeRings); // Declare type as noncopyable ConnectedInteriorTester(const ConnectedInteriorTester& other); ConnectedInteriorTester& operator=(const ConnectedInteriorTester& rhs); }; } // namespace geos::operation::valid } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_CONNECTEDINTERIORTESTER_H geos-3.4.2/include/geos/operation/valid/ConsistentAreaTester.h0000644000175000017500000001061112206417147024241 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/ConsistentAreaTester.java rev. 1.14 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_CONSISTENTAREATESTER_H #define GEOS_OP_CONSISTENTAREATESTER_H #include #include // for composition #include // for composition #include // for composition // Forward declarations namespace geos { namespace algorithm { class LineIntersector; } namespace geomgraph { class GeometryGraph; } namespace operation { namespace relate { class RelateNodeGraph; } } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Checks that a {@link geomgraph::GeometryGraph} representing an area * (a {@link Polygon} or {@link MultiPolygon} ) * is consistent with the OGC-SFS semantics for area geometries. * * Checks include: * * - testing for rings which self-intersect (both properly * and at nodes) * - testing for duplicate rings * * If an inconsistency if found the location of the problem * is recorded. */ /** \brief * Checks that a geomgraph::GeometryGraph representing an area * (a geom::Polygon or geom::MultiPolygon) * has consistent semantics for area geometries. * This check is required for any reasonable polygonal model * (including the OGC-SFS model, as well as models which allow ring * self-intersection at single points) * * Checks include: * * - test for rings which properly intersect * (but not for ring self-intersection, or intersections at vertices) * - test for consistent labelling at all node points * (this detects vertex intersections with invalid topology, * i.e. where the exterior side of an edge lies in the interior of the area) * - test for duplicate rings * * If an inconsistency is found the location of the problem * is recorded and is available to the caller. * */ class GEOS_DLL ConsistentAreaTester { private: algorithm::LineIntersector li; /// Not owned geomgraph::GeometryGraph *geomGraph; relate::RelateNodeGraph nodeGraph; /// the intersection point found (if any) geom::Coordinate invalidPoint; /** * Check all nodes to see if their labels are consistent. * If any are not, return false */ bool isNodeEdgeAreaLabelsConsistent(); public: /** * Creates a new tester for consistent areas. * * @param geomGraph the topology graph of the area geometry. * Caller keeps responsibility for its deletion */ ConsistentAreaTester(geomgraph::GeometryGraph *newGeomGraph); ~ConsistentAreaTester(); /** * @return the intersection point, or null * if none was found */ geom::Coordinate& getInvalidPoint(); /** \brief * Check all nodes to see if their labels are consistent with * area topology. * * @return true if this area has a consistent node * labelling */ bool isNodeConsistentArea(); /** * Checks for two duplicate rings in an area. * Duplicate rings are rings that are topologically equal * (that is, which have the same sequence of points up to point order). * If the area is topologically consistent (determined by calling the * isNodeConsistentArea, * duplicate rings can be found by checking for EdgeBundles which contain * more than one geomgraph::EdgeEnd. * (This is because topologically consistent areas cannot have two rings sharing * the same line segment, unless the rings are equal). * The start point of one of the equal rings will be placed in * invalidPoint. * * @return true if this area Geometry is topologically consistent but has two duplicate rings */ bool hasDuplicateRings(); }; } // namespace geos::operation::valid } // namespace geos::operation } // namespace geos #endif // GEOS_OP_CONSISTENTAREATESTER_H geos-3.4.2/include/geos/operation/valid/IsValidOp.h0000644000175000017500000002023612206417147021766 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/IsValidOp.java r335 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_ISVALIDOP_H #define GEOS_OP_ISVALIDOP_H #include #include // for inlined destructor // Forward declarations namespace geos { namespace util { class TopologyValidationError; } namespace geom { class CoordinateSequence; class GeometryFactory; class Geometry; class Point; class LinearRing; class LineString; class Polygon; class GeometryCollection; class MultiPolygon; class MultiLineString; } namespace geomgraph { class DirectedEdge; class EdgeIntersectionList; class PlanarGraph; class GeometryGraph; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Implements the algorithsm required to compute the isValid() * method for {@link Geometry}s. */ class GEOS_DLL IsValidOp { friend class Unload; private: /// the base Geometry to be validated const geom::Geometry *parentGeometry; bool isChecked; // CHECKME: should this really be a pointer ? TopologyValidationError* validErr; // This is the version using 'isChecked' flag void checkValid(); void checkValid(const geom::Geometry *g); void checkValid(const geom::Point *g); void checkValid(const geom::LinearRing *g); void checkValid(const geom::LineString *g); void checkValid(const geom::Polygon *g); void checkValid(const geom::MultiPolygon *g); void checkValid(const geom::GeometryCollection *gc); void checkConsistentArea(geomgraph::GeometryGraph *graph); /** * Check that there is no ring which self-intersects * (except of course at its endpoints). * This is required by OGC topology rules (but not by other models * such as ESRI SDE, which allow inverted shells and exverted holes). * * @param graph the topology graph of the geometry */ void checkNoSelfIntersectingRings(geomgraph::GeometryGraph *graph); /** * check that a ring does not self-intersect, except at its endpoints. * Algorithm is to count the number of times each node along edge * occurs. * If any occur more than once, that must be a self-intersection. */ void checkNoSelfIntersectingRing( geomgraph::EdgeIntersectionList &eiList); void checkTooFewPoints(geomgraph::GeometryGraph *graph); /** * Test that each hole is inside the polygon shell. * This routine assumes that the holes have previously been tested * to ensure that all vertices lie on the shell or inside it. * A simple test of a single point in the hole can be used, * provide the point is chosen such that it does not lie on the * boundary of the shell. * * @param p the polygon to be tested for hole inclusion * @param graph a geomgraph::GeometryGraph incorporating the polygon */ void checkHolesInShell(const geom::Polygon *p, geomgraph::GeometryGraph *graph); /** * Tests that no hole is nested inside another hole. * This routine assumes that the holes are disjoint. * To ensure this, holes have previously been tested * to ensure that: * * - they do not partially overlap * (checked by checkRelateConsistency) * - they are not identical * (checked by checkRelateConsistency) * */ void checkHolesNotNested(const geom::Polygon *p, geomgraph::GeometryGraph *graph); /** * Tests that no element polygon is wholly in the interior of another * element polygon. * * Preconditions: * * - shells do not partially overlap * - shells do not touch along an edge * - no duplicate rings exist * * This routine relies on the fact that while polygon shells * may touch at one or more vertices, they cannot touch at * ALL vertices. */ void checkShellsNotNested(const geom::MultiPolygon *mp, geomgraph::GeometryGraph *graph); /** * Check if a shell is incorrectly nested within a polygon. * This is the case if the shell is inside the polygon shell, * but not inside a polygon hole. * (If the shell is inside a polygon hole, the nesting is valid.) * * The algorithm used relies on the fact that the rings must be * properly contained. * E.g. they cannot partially overlap (this has been previously * checked by checkRelateConsistency */ void checkShellNotNested(const geom::LinearRing *shell, const geom::Polygon *p, geomgraph::GeometryGraph *graph); /** * This routine checks to see if a shell is properly contained * in a hole. * It assumes that the edges of the shell and hole do not * properly intersect. * * @return null if the shell is properly contained, or * a Coordinate which is not inside the hole if it is not * */ const geom::Coordinate *checkShellInsideHole( const geom::LinearRing *shell, const geom::LinearRing *hole, geomgraph::GeometryGraph *graph); void checkConnectedInteriors(geomgraph::GeometryGraph &graph); void checkInvalidCoordinates(const geom::CoordinateSequence *cs); void checkInvalidCoordinates(const geom::Polygon *poly); void checkClosedRings(const geom::Polygon *poly); void checkClosedRing(const geom::LinearRing *ring); bool isSelfTouchingRingFormingHoleValid; public: /** * Find a point from the list of testCoords * that is NOT a node in the edge for the list of searchCoords * * @return the point found, or NULL if none found */ static const geom::Coordinate *findPtNotNode( const geom::CoordinateSequence *testCoords, const geom::LinearRing *searchRing, geomgraph::GeometryGraph *graph); /** * Checks whether a coordinate is valid for processing. * Coordinates are valid iff their x and y coordinates are in the * range of the floating point representation. * * @param coord the coordinate to validate * @return true if the coordinate is valid */ static bool isValid(const geom::Coordinate &coord); /** * Tests whether a {@link Geometry} is valid. * * @param geom the Geometry to test * @return true if the geometry is valid */ static bool isValid(const geom::Geometry &geom); IsValidOp(const geom::Geometry *geom) : parentGeometry(geom), isChecked(false), validErr(NULL), isSelfTouchingRingFormingHoleValid(false) {} /// TODO: validErr can't be a pointer! virtual ~IsValidOp() { delete validErr; } bool isValid(); TopologyValidationError* getValidationError(); /** \brief * Sets whether polygons using Self-Touching Rings to form * holes are reported as valid. * * If this flag is set, the following Self-Touching conditions * are treated as being valid: *
    *
  • the shell ring self-touches to create a hole touching the shell *
  • a hole ring self-touches to create two holes touching at a point *
*

* The default (following the OGC SFS standard) * is that this condition is not valid (false). *

* This does not affect whether Self-Touching Rings * disconnecting the polygon interior are considered valid * (these are considered to be invalid under the SFS, * and many other spatial models as well). * This includes "bow-tie" shells, * which self-touch at a single point causing the interior to * be disconnected, * and "C-shaped" holes which self-touch at a single point causing * an island to be formed. * * @param isValid states whether geometry with this condition is valid */ void setSelfTouchingRingFormingHoleValid(bool isValid) { isSelfTouchingRingFormingHoleValid = isValid; } }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos #endif // GEOS_OP_ISVALIDOP_H geos-3.4.2/include/geos/operation/valid/Makefile.am0000644000175000017500000000066212206417147022020 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/operation/valid geos_HEADERS = \ ConnectedInteriorTester.h \ ConsistentAreaTester.h \ IsValidOp.h \ QuadtreeNestedRingTester.h \ RepeatedPointTester.h \ SimpleNestedRingTester.h \ SweeplineNestedRingTester.h \ TopologyValidationError.h geos-3.4.2/include/geos/operation/valid/Makefile.in0000644000175000017500000003664312206417162022036 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/operation/valid DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/operation/valid geos_HEADERS = \ ConnectedInteriorTester.h \ ConsistentAreaTester.h \ IsValidOp.h \ QuadtreeNestedRingTester.h \ RepeatedPointTester.h \ SimpleNestedRingTester.h \ SweeplineNestedRingTester.h \ TopologyValidationError.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/operation/valid/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/operation/valid/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/operation/valid/QuadtreeNestedRingTester.h0000644000175000017500000000465412206417147025066 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/QuadtreeNestedRingTester.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_QUADTREENESTEDRINGTESTER_H #define GEOS_OP_QUADTREENESTEDRINGTESTER_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LinearRing; class Coordinate; } namespace index { namespace quadtree { class Quadtree; } } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Tests whether any of a set of {@link LinearRing}s are * nested inside another ring in the set, using a {@link Quadtree} * index to speed up the comparisons. * */ class GEOS_DLL QuadtreeNestedRingTester { public: /// Caller retains ownership of GeometryGraph QuadtreeNestedRingTester(geomgraph::GeometryGraph* newGraph); ~QuadtreeNestedRingTester(); /* * Be aware that the returned Coordinate (if != NULL) * will point to storage owned by one of the LinearRing * previously added. If you destroy them, this * will point to an invalid memory address. */ geom::Coordinate* getNestedPoint(); void add(const geom::LinearRing* ring); bool isNonNested(); private: geomgraph::GeometryGraph* graph; // used to find non-node vertices std::vector rings; geom::Envelope totalEnv; index::quadtree::Quadtree* qt; geom::Coordinate* nestedPt; void buildQuadtree(); }; } // namespace geos::operation::valid } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_QUADTREENESTEDRINGTESTER_H geos-3.4.2/include/geos/operation/valid/RepeatedPointTester.h0000644000175000017500000000361612206417147024071 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/RepeatedPointTester.java rev. 1.8 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_REPEATEDPOINTTESTER_H #define GEOS_OP_REPEATEDPOINTTESTER_H #include #include // for composition // Forward declarations namespace geos { namespace geom { //class Coordinate; class CoordinateSequence; class Geometry; class Polygon; class MultiPolygon; class MultiLineString; class GeometryCollection; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Implements the appropriate checks for repeated points * (consecutive identical coordinates) as defined in the * JTS spec. */ class GEOS_DLL RepeatedPointTester { public: RepeatedPointTester() {} geom::Coordinate& getCoordinate(); bool hasRepeatedPoint(const geom::Geometry *g); bool hasRepeatedPoint(const geom::CoordinateSequence *coord); private: geom::Coordinate repeatedCoord; bool hasRepeatedPoint(const geom::Polygon *p); bool hasRepeatedPoint(const geom::GeometryCollection *gc); bool hasRepeatedPoint(const geom::MultiPolygon *gc); bool hasRepeatedPoint(const geom::MultiLineString *gc); }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos #endif // GEOS_OP_REPEATEDPOINTTESTER_H geos-3.4.2/include/geos/operation/valid/SimpleNestedRingTester.h0000644000175000017500000000436612206417147024545 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/SimpleNestedRingTester.java rev. 1.14 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_SIMPLENESTEDRINGTESTER_H #define GEOS_OP_SIMPLENESTEDRINGTESTER_H #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class LinearRing; } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Tests whether any of a set of {@link LinearRing}s are * nested inside another ring in the set, using a simple O(n^2) * comparison. * */ class GEOS_DLL SimpleNestedRingTester { private: geomgraph::GeometryGraph *graph; // used to find non-node vertices std::vector rings; geom::Coordinate *nestedPt; public: SimpleNestedRingTester(geomgraph::GeometryGraph *newGraph) : graph(newGraph), rings(), nestedPt(NULL) {} ~SimpleNestedRingTester() { } void add(geom::LinearRing *ring) { rings.push_back(ring); } /* * Be aware that the returned Coordinate (if != NULL) * will point to storage owned by one of the LinearRing * previously added. If you destroy them, this * will point to an invalid memory address. */ geom::Coordinate *getNestedPoint() { return nestedPt; } bool isNonNested(); }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_SIMPLENESTEDRINGTESTER_H geos-3.4.2/include/geos/operation/valid/SweeplineNestedRingTester.h0000644000175000017500000000617212206417147025244 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/SweeplineNestedRingTester.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_SWEEPLINENESTEDRINGTESTER_H #define GEOS_OP_SWEEPLINENESTEDRINGTESTER_H #include #include // for inline //#include // for inline and inheritance #include // for inheritance #include // for inlines #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class LinearRing; class Envelope; class Coordinate; } namespace index { namespace sweepline { class SweepLineIndex; } } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Tests whether any of a set of {@link LinearRing}s are * nested inside another ring in the set, using an * index::sweepline::SweepLineIndex to speed up the comparisons. */ class GEOS_DLL SweeplineNestedRingTester { private: geomgraph::GeometryGraph *graph; // used to find non-node vertices std::vector rings; index::sweepline::SweepLineIndex *sweepLine; geom::Coordinate *nestedPt; void buildIndex(); public: SweeplineNestedRingTester(geomgraph::GeometryGraph *newGraph) : graph(newGraph), rings(), sweepLine(new index::sweepline::SweepLineIndex()), nestedPt(NULL) {} ~SweeplineNestedRingTester() { delete sweepLine; } /* * Be aware that the returned Coordinate (if != NULL) * will point to storage owned by one of the LinearRing * previously added. If you destroy them, this * will point to an invalid memory address. */ geom::Coordinate *getNestedPoint() { return nestedPt; } void add(geom::LinearRing* ring) { rings.push_back(ring); } bool isNonNested(); bool isInside(geom::LinearRing *innerRing, geom::LinearRing *searchRing); class OverlapAction: public index::sweepline::SweepLineOverlapAction { public: bool isNonNested; OverlapAction(SweeplineNestedRingTester *p); void overlap(index::sweepline::SweepLineInterval *s0, index::sweepline::SweepLineInterval *s1); private: SweeplineNestedRingTester *parent; }; }; } // namespace geos::operation::valid } // namespace geos::operation } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_OP_SWEEPLINENESTEDRINGTESTER_H geos-3.4.2/include/geos/operation/valid/TopologyValidationError.h0000644000175000017500000000362112206417147024774 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/TopologyValidationError.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_OP_TOPOLOGYVALIDATIONERROR_H #define GEOS_OP_TOPOLOGYVALIDATIONERROR_H #include #include #include // for composition // Forward declarations // none required namespace geos { namespace operation { // geos::operation namespace valid { // geos::operation::valid /** \brief * Contains information about the nature and location of a {@link Geometry} * validation error * */ class GEOS_DLL TopologyValidationError { public: enum errorEnum { eError, eRepeatedPoint, eHoleOutsideShell, eNestedHoles, eDisconnectedInterior, eSelfIntersection, eRingSelfIntersection, eNestedShells, eDuplicatedRings, eTooFewPoints, eInvalidCoordinate, eRingNotClosed }; TopologyValidationError(int newErrorType, const geom::Coordinate& newPt); TopologyValidationError(int newErrorType); geom::Coordinate& getCoordinate(); std::string getMessage(); int getErrorType(); std::string toString(); private: // Used const char* to reduce dynamic allocations static const char* errMsg[]; int errorType; geom::Coordinate pt; }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos #endif // GEOS_OP_TOPOLOGYVALIDATIONERROR_H geos-3.4.2/include/geos/operation.h0000644000175000017500000000176212206417150017032 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Don't include this file, rather include from * **********************************************************************/ #ifndef GEOS_OPERATION_H #define GEOS_OPERATION_H namespace geos { /// Provides classes for implementing operations on geometries namespace operation { // geos.operation } // namespace geos.operation } // namespace geos #include #include #endif geos-3.4.2/include/geos/planargraph/0000755000175000017500000000000012206417231017152 5ustar frankiefrankiegeos-3.4.2/include/geos/planargraph/DirectedEdge.h0000644000175000017500000001510012206417147021636 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_DIRECTEDEDGE_H #define GEOS_PLANARGRAPH_DIRECTEDEDGE_H #include #include // for inheritance #include // for composition #include // for typedefs #include // for typedefs // Forward declarations namespace geos { namespace planargraph { class Edge; class Node; } } namespace geos { namespace planargraph { // geos.planargraph /** * \brief Represents a directed edge in a PlanarGraph. * * A DirectedEdge may or may not have a reference to a parent Edge * (some applications of planar graphs may not require explicit Edge * objects to be created). Usually a client using a PlanarGraph * will subclass DirectedEdge to add its own application-specific * data and methods. */ class GEOS_DLL DirectedEdge: public GraphComponent { public: friend std::ostream& operator << (std::ostream&, const DirectedEdge&); typedef std::list NonConstList; typedef std::list ConstList; typedef std::vector NonConstVect; protected: Edge* parentEdge; Node* from; Node* to; geom::Coordinate p0, p1; DirectedEdge* sym; // optional bool edgeDirection; int quadrant; double angle; public: typedef std::vector ConstVect; typedef std::vector Vect; /** * \brief * Returns a List containing the parent Edge (possibly null) * for each of the given DirectedEdges. * * NOTE: ownership of the returned vector is left to * the caller, see the equivalent function taking a vector * reference to avoid this. */ static std::vector* toEdges( std::vector& dirEdges); /** * \brief * Add parent Edge (possibly null) of each of the given DirectedEdges * to the given parentEdges vector. * * NOTE: parents are pushed to the parentEdges vector, make sure * it is empty if index-based corrispondence is important. */ static void toEdges( std::vector& dirEdges, std::vector& parentEdges); /** * \brief Constructs a DirectedEdge connecting the from * node to the to node. * * @param directionPt specifies this DirectedEdge's direction * (given by an imaginary line from the * from node to * directionPt) * @param edgeDirection whether this DirectedEdge's direction * is the same as or opposite to that of the * parent Edge (if any) */ DirectedEdge(Node *newFrom, Node *newTo, const geom::Coordinate &directionPt, bool newEdgeDirection); /** * \brief Returns this DirectedEdge's parent Edge, * or null if it has none. */ Edge* getEdge() const; /** * \brief Associates this DirectedEdge with an Edge * (possibly null, indicating no associated Edge). */ void setEdge(Edge* newParentEdge); /** * \brief Returns 0, 1, 2, or 3, indicating the quadrant in which * this DirectedEdge's orientation lies. */ int getQuadrant() const; /** * \brief Returns a point to which an imaginary line is drawn * from the from-node to specify this DirectedEdge's orientation. */ const geom::Coordinate& getDirectionPt() const; /** * \brief Returns whether the direction of the parent Edge (if any) * is the same as that of this Directed Edge. */ bool getEdgeDirection() const; /** * \brief Returns the node from which this DirectedEdge leaves. */ Node* getFromNode() const; /** * \brief Returns the node to which this DirectedEdge goes. */ Node* getToNode() const; /** * \brief * Returns the coordinate of the from-node. */ geom::Coordinate& getCoordinate() const; /** * \brief * Returns the angle that the start of this DirectedEdge makes * with the positive x-axis, in radians. */ double getAngle() const; /** * \brief * Returns the symmetric DirectedEdge -- the other DirectedEdge * associated with this DirectedEdge's parent Edge. */ DirectedEdge* getSym() const; /** * \brief * Sets this DirectedEdge's symmetric DirectedEdge, which runs * in the opposite direction. */ void setSym(DirectedEdge *newSym); /** * \brief * Returns 1 if this DirectedEdge has a greater angle with the * positive x-axis than b", 0 if the DirectedEdges are collinear, * and -1 otherwise. * * Using the obvious algorithm of simply computing the angle is * not robust, since the angle calculation is susceptible to roundoff. * A robust algorithm is: * * - first compare the quadrants. * If the quadrants are different, it it * trivial to determine which std::vector is "greater". * - if the vectors lie in the same quadrant, the robust * RobustCGAlgorithms::computeOrientation(Coordinate, Coordinate, Coordinate) * function can be used to decide the relative orientation of * the vectors. * */ int compareTo(const DirectedEdge* obj) const; /** * \brief * Returns 1 if this DirectedEdge has a greater angle with the * positive x-axis than b", 0 if the DirectedEdges are collinear, * and -1 otherwise. * * Using the obvious algorithm of simply computing the angle is * not robust, since the angle calculation is susceptible to roundoff. * A robust algorithm is: * * - first compare the quadrants. * If the quadrants are different, it it trivial to determine * which std::vector is "greater". * - if the vectors lie in the same quadrant, the robust * RobustCGAlgorithms::computeOrientation(Coordinate, Coordinate, Coordinate) * function can be used to decide the relative orientation of * the vectors. * */ int compareDirection(const DirectedEdge *e) const; /** * \brief * Prints a detailed string representation of this DirectedEdge * to the given PrintStream. */ std::string print() const; }; /// Strict Weak comparator function for containers bool pdeLessThan(DirectedEdge *first, DirectedEdge * second); /// Output operator std::ostream& operator << (std::ostream&, const DirectedEdge&); } // namespace geos::planargraph } // namespace geos #endif // GEOS_PLANARGRAPH_DIRECTEDEDGE_H geos-3.4.2/include/geos/planargraph/DirectedEdgeStar.h0000644000175000017500000000703712206417147022502 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H #define GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace planargraph { class DirectedEdge; class Edge; } } namespace geos { namespace planargraph { // geos.planargraph /// A sorted collection of DirectedEdge which leave a Node in a PlanarGraph. class GEOS_DLL DirectedEdgeStar { protected: private: /** * \brief The underlying list of outgoing DirectedEdges */ mutable std::vector outEdges; mutable bool sorted; void sortEdges() const; public: /** * \brief Constructs a DirectedEdgeStar with no edges. */ DirectedEdgeStar(): sorted(false) {} virtual ~DirectedEdgeStar() {} /** * \brief Adds a new member to this DirectedEdgeStar. */ void add(DirectedEdge *de); /** * \brief Drops a member of this DirectedEdgeStar. */ void remove(DirectedEdge *de); /** * \brief Returns an Iterator over the DirectedEdges, * in ascending order by angle with the positive x-axis. */ std::vector::iterator iterator() { return begin(); } /// Returns an iterator to first DirectedEdge std::vector::iterator begin(); /// Returns an iterator to one-past last DirectedEdge std::vector::iterator end(); /// Returns an const_iterator to first DirectedEdge std::vector::const_iterator begin() const; /// Returns an const_iterator to one-past last DirectedEdge std::vector::const_iterator end() const; /** * \brief Returns the number of edges around the Node associated * with this DirectedEdgeStar. */ std::size_t getDegree() const { return outEdges.size(); } /** * \brief Returns the coordinate for the node at wich this * star is based */ geom::Coordinate& getCoordinate() const; /** * \brief Returns the DirectedEdges, in ascending order * by angle with the positive x-axis. */ std::vector& getEdges(); /** * \brief Returns the zero-based index of the given Edge, * after sorting in ascending order by angle with the * positive x-axis. */ int getIndex(const Edge *edge); /** * \brief Returns the zero-based index of the given DirectedEdge, * after sorting in ascending order * by angle with the positive x-axis. */ int getIndex(const DirectedEdge *dirEdge); /** * \brief Returns the remainder when i is divided by the number of * edges in this DirectedEdgeStar. */ int getIndex(int i) const; /** * \brief Returns the DirectedEdge on the left-hand side * of the given DirectedEdge (which must be a member of this * DirectedEdgeStar). */ DirectedEdge* getNextEdge(DirectedEdge *dirEdge); }; } // namespace geos::planargraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H geos-3.4.2/include/geos/planargraph/Edge.h0000644000175000017500000000716412206417147020205 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_EDGE_H #define GEOS_PLANARGRAPH_EDGE_H #include #include // for inheritance #include // for typedefs #include // for typedefs #include // ostream #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace planargraph { class DirectedEdgeStar; class DirectedEdge; class Edge; class Node; } } namespace geos { namespace planargraph { // geos.planargraph /** * \brief Represents an undirected edge of a PlanarGraph. * * An undirected edge in fact simply acts as a central point of reference * for two opposite DirectedEdge. * * Usually a client using a PlanarGraph will subclass Edge * to add its own application-specific data and methods. */ class GEOS_DLL Edge: public GraphComponent { public: friend std::ostream& operator<< (std::ostream& os, const Node&); /// Set of const Edges pointers typedef std::set ConstSet; /// Set of non-const Edges pointers typedef std::set NonConstSet; /// Vector of non-const Edges pointers typedef std::vector NonConstVect; /// Vector of const Edges pointers typedef std::vector ConstVect; protected: /** \brief The two DirectedEdges associated with this Edge */ std::vector dirEdge; /** * \brief Constructs an Edge whose DirectedEdges are not yet set. * * Be sure to call setDirectedEdges(DirectedEdge, DirectedEdge) */ public: /** \brief * Constructs a Edge whose DirectedEdges are * not yet set. * * Be sure to call * {@link setDirectedEdges(DirectedEdge, DirectedEdge)} */ Edge(): dirEdge() {} /** * \brief Constructs an Edge initialized with the given DirectedEdges. * * For each DirectedEdge: sets the Edge, sets the symmetric * DirectedEdge, and adds this Edge to its from-Node. */ Edge(DirectedEdge *de0, DirectedEdge *de1) : dirEdge() { setDirectedEdges(de0, de1); } /** * \brief Initializes this Edge's two DirectedEdges. * * For each DirectedEdge: * sets the Edge, sets the symmetric DirectedEdge, and * adds this Edge to its from-Node. */ void setDirectedEdges(DirectedEdge *de0, DirectedEdge *de1); /** * \brief Returns one of the DirectedEdges associated with this Edge. * @param i 0 or 1 */ DirectedEdge* getDirEdge(int i); /** * \brief Returns the DirectedEdge that starts from the given node, * or null if the node is not one of the two nodes associated * with this Edge. */ DirectedEdge* getDirEdge(Node *fromNode); /** * \brief If node is one of the two nodes associated * with this Edge, returns the other node; otherwise returns null. */ Node* getOppositeNode(Node *node); }; /// Print a Edge std::ostream& operator<<(std::ostream& os, const Edge& n); /// For backward compatibility //typedef Edge planarEdge; } // namespace geos::planargraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PLANARGRAPH_EDGE_H geos-3.4.2/include/geos/planargraph/GraphComponent.h0000644000175000017500000001065012206417147022257 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: planargraph/GraphComponent.java rev. 1.7 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_GRAPHCOMPONENT_H #define GEOS_PLANARGRAPH_GRAPHCOMPONENT_H #include namespace geos { namespace planargraph { // geos.planargraph /** * \brief The base class for all graph component classes. * * Maintains flags of use in generic graph algorithms. * Provides two flags: * * - marked - typically this is used to indicate a state that * persists for the course of the graph's lifetime. For instance, * it can be used to indicate that a component has been logically * deleted from the graph. * - visited - this is used to indicate that a component has been * processed or visited by an single graph algorithm. For instance, * a breadth-first traversal of the graph might use this to indicate * that a node has already been traversed. * The visited flag may be set and cleared many times during the * lifetime of a graph. * */ class GEOS_DLL GraphComponent { protected: /// Variable holding ''marked'' status bool isMarkedVar; /// Variable holding ''visited'' status bool isVisitedVar; public: GraphComponent() : isMarkedVar(false), isVisitedVar(false) {} virtual ~GraphComponent() {} /** \brief * Tests if a component has been visited during the course * of a graph algorithm. * * @return true if the component has been visited */ virtual bool isVisited() const { return isVisitedVar; } /** \brief * Sets the visited flag for this component. * @param isVisited the desired value of the visited flag */ virtual void setVisited(bool isVisited) { isVisitedVar=isVisited; } /** \brief * Sets the Visited state for the elements of a container, * from start to end iterator. * * @param start the start element * @param end one past the last element * @param visited the state to set the visited flag to */ template static void setVisited(T start, T end, bool visited) { for(T i=start; i!=end; ++i) { (*i)->setVisited(visited); } } /** \brief * Sets the Visited state for the values of each map * container element, from start to end iterator. * * @param start the start element * @param end one past the last element * @param visited the state to set the visited flag to */ template static void setVisitedMap(T start, T end, bool visited) { for(T i=start; i!=end; ++i) { i->second->setVisited(visited); } } /** \brief * Sets the Marked state for the elements of a container, * from start to end iterator. * * @param start the start element * @param end one past the last element * @param marked the state to set the marked flag to */ template static void setMarked(T start, T end, bool marked) { for(T i=start; i!=end; ++i) { (*i)->setMarked(marked); } } /** \brief * Sets the Marked state for the values of each map * container element, from start to end iterator. * * @param start the start element * @param end one past the last element * @param marked the state to set the visited flag to */ template static void setMarkedMap(T start, T end, bool marked) { for(T i=start; i!=end; ++i) { i->second->setMarked(marked); } } /** \brief * Tests if a component has been marked at some point * during the processing involving this graph. * @return true if the component has been marked */ virtual bool isMarked() const { return isMarkedVar; } /** \brief * Sets the marked flag for this component. * @param isMarked the desired value of the marked flag */ virtual void setMarked(bool isMarked) { isMarkedVar=isMarked; } }; // For backward compatibility //typedef GraphComponent planarGraphComponent; } // namespace geos::planargraph } // namespace geos #endif // GEOS_PLANARGRAPH_GRAPHCOMPONENT_H geos-3.4.2/include/geos/planargraph/Makefile.am0000644000175000017500000000047112206417147021216 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = algorithm #EXTRA_DIST = geosdir = $(includedir)/geos/planargraph geos_HEADERS = \ DirectedEdge.h \ DirectedEdgeStar.h \ Edge.h \ GraphComponent.h \ Node.h \ NodeMap.h \ PlanarGraph.h \ Subgraph.h geos-3.4.2/include/geos/planargraph/Makefile.in0000644000175000017500000005116412206417162021231 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/planargraph DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = algorithm #EXTRA_DIST = geosdir = $(includedir)/geos/planargraph geos_HEADERS = \ DirectedEdge.h \ DirectedEdgeStar.h \ Edge.h \ GraphComponent.h \ Node.h \ NodeMap.h \ PlanarGraph.h \ Subgraph.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/planargraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/planargraph/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/planargraph/Node.h0000644000175000017500000000636112206417147020224 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_NODE_H #define GEOS_PLANARGRAPH_NODE_H #include #include // for inheritance #include // for inlines #include // for composition // Forward declarations namespace geos { namespace planargraph { //class DirectedEdgeStar; class DirectedEdge; } } namespace geos { namespace planargraph { // geos.planargraph /** * \brief A node in a PlanarGraph is a location where 0 or more Edge meet. * * A node is connected to each of its incident Edges via an outgoing * DirectedEdge. Some clients using a PlanarGraph may want to * subclass Node to add their own application-specific * data and methods. * */ class GEOS_DLL Node: public GraphComponent { protected: /// The location of this Node geom::Coordinate pt; /// The collection of DirectedEdges that leave this Node DirectedEdgeStar *deStar; public: friend std::ostream& operator << (std::ostream& os, const Node&); /** \brief * Returns all Edges that connect the two nodes (which are * assumed to be different). * * Note: returned vector is newly allocated, ownership to * the caller. */ static std::vector* getEdgesBetween(Node *node0, Node *node1); /// Constructs a Node with the given location. Node(const geom::Coordinate& newPt) : pt(newPt) { deStar=new DirectedEdgeStar(); } virtual ~Node() { delete deStar; } /** * \brief * Constructs a Node with the given location and * collection of outgoing DirectedEdges. * Takes ownership of the given DirectedEdgeStar!! */ Node(geom::Coordinate& newPt, DirectedEdgeStar *newDeStar) : pt(newPt), deStar(newDeStar) {} /** * \brief Returns the location of this Node. */ geom::Coordinate& getCoordinate() { return pt; } /** * \brief Adds an outgoing DirectedEdge to this Node. */ void addOutEdge(DirectedEdge *de) { deStar->add(de); } /** * \brief Returns the collection of DirectedEdges that * leave this Node. */ DirectedEdgeStar* getOutEdges() { return deStar; } const DirectedEdgeStar* getOutEdges() const { return deStar; } /** * \brief Returns the number of edges around this Node. */ size_t getDegree() const { return deStar->getDegree(); } /** * \brief Returns the zero-based index of the given Edge, * after sorting in ascending order by angle with * the positive x-axis. */ int getIndex(Edge *edge) { return deStar->getIndex(edge); } }; /// Print a Node std::ostream& operator<<(std::ostream& os, const Node& n); /// For backward compatibility //typedef Node planarNode; } // namespace geos::planargraph } // namespace geos #endif // GEOS_PLANARGRAPH_NODE_H geos-3.4.2/include/geos/planargraph/NodeMap.h0000644000175000017500000000525612206417147020664 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_NODEMAP_H #define GEOS_PLANARGRAPH_NODEMAP_H #include #include // for use in container #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace planargraph { class DirectedEdgeStar; class DirectedEdge; class Edge; class Node; } } namespace geos { namespace planargraph { // geos.planargraph /** * \brief * A map of Node, indexed by the coordinate of the node. * */ class GEOS_DLL NodeMap { public: typedef std::map container; private: container nodeMap; public: /** * \brief Constructs a NodeMap without any Nodes. */ NodeMap(); container& getNodeMap(); virtual ~NodeMap(); /** * \brief * Adds a node to the std::map, replacing any that is already * at that location. * @return the added node */ Node* add(Node *n); /** * \brief * Removes the Node at the given location, and returns it * (or null if no Node was there). */ Node* remove(geom::Coordinate& pt); /** * \brief * Returns the Node at the given location, * or null if no Node was there. */ Node* find(const geom::Coordinate& coord); /** * \brief * Returns an Iterator over the Nodes in this NodeMap, * sorted in ascending order * by angle with the positive x-axis. */ container::iterator iterator() { return nodeMap.begin(); } container::iterator begin() { return nodeMap.begin(); } container::const_iterator begin() const { return nodeMap.begin(); } container::iterator end() { return nodeMap.end(); } container::const_iterator end() const { return nodeMap.end(); } /** * \brief * Returns the Nodes in this NodeMap, sorted in ascending order * by angle with the positive x-axis. * * @param nodes : the nodes are push_back'ed here */ void getNodes(std::vector& nodes); }; } // namespace geos::planargraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PLANARGRAPH_NODEMAP_H geos-3.4.2/include/geos/planargraph/PlanarGraph.h0000644000175000017500000001377212206417147021542 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: planargraph/PlanarGraph.java rev. 107/138 (JTS-1.10) * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_PLANARGRAPH_H #define GEOS_PLANARGRAPH_PLANARGRAPH_H #include #include // for composition #include // for typedefs #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; } namespace planargraph { class DirectedEdge; class Edge; class Node; } } namespace geos { namespace planargraph { // geos.planargraph /** * \class PlanarGraph planargraph.h geos/planargraph.h * \brief * Represents a directed graph which is embeddable in a planar surface. * * This class and the other classes in this package serve as a framework for * building planar graphs for specific algorithms. This class must be * subclassed to expose appropriate methods to construct the graph. This allows * controlling the types of graph components (DirectedEdge, Edge and Node) * which can be added to the graph. An application which uses the graph * framework will almost always provide subclasses for one or more graph * components, which hold application-specific data and graph algorithms. */ class GEOS_DLL PlanarGraph { protected: std::vector edges; std::vector dirEdges; NodeMap nodeMap; /** * \brief * Adds a node to the std::map, replacing any that is already at that * location. * * Only subclasses can add Nodes, to ensure Nodes are * of the right type. * @return the added node */ void add(Node *node) { nodeMap.add(node); } /** * \brief * Adds the Edge and its DirectedEdges with this PlanarGraph. * * Assumes that the Edge has already been created with its associated * DirectEdges. * Only subclasses can add Edges, to ensure the edges added are of * the right class. */ void add(Edge *edge); /** * \brief * Adds the Edge to this PlanarGraph. * * Only subclasses can add DirectedEdges, * to ensure the edges added are of the right class. */ void add(DirectedEdge *dirEdge) { dirEdges.push_back(dirEdge); } public: typedef std::vector EdgeContainer; typedef EdgeContainer::iterator EdgeIterator; /** * \brief * Constructs a PlanarGraph without any Edges, DirectedEdges, or Nodes. */ PlanarGraph() {} virtual ~PlanarGraph() {} /** * \brief * Returns the Node at the given location, * or null if no Node was there. */ Node* findNode(const geom::Coordinate& pt) { return nodeMap.find(pt); } /** * \brief * Returns an Iterator over the Nodes in this PlanarGraph. */ NodeMap::container::iterator nodeIterator() { return nodeMap.begin(); } NodeMap::container::iterator nodeBegin() { return nodeMap.begin(); } NodeMap::container::const_iterator nodeBegin() const { return nodeMap.begin(); } NodeMap::container::iterator nodeEnd() { return nodeMap.end(); } NodeMap::container::const_iterator nodeEnd() const { return nodeMap.end(); } /** * \brief * Returns the Nodes in this PlanarGraph. * * @param nodes : the nodes are push_back'ed here */ void getNodes(std::vector& nodes) { nodeMap.getNodes(nodes); } /** * \brief * Returns an Iterator over the DirectedEdges in this PlanarGraph, * in the order in which they were added. * * @see add(Edge) * @see add(DirectedEdge) */ std::vector::iterator dirEdgeIterator() { return dirEdges.begin(); } /// Alias for edgeBegin() std::vector::iterator edgeIterator() { return edges.begin(); } /// Returns an iterator to first Edge in this graph. // /// Edges are stored in the order they were added. /// @see add(Edge) /// std::vector::iterator edgeBegin() { return edges.begin(); } /// Returns an iterator to one-past last Edge in this graph. // /// Edges are stored in the order they were added. /// @see add(Edge) /// std::vector::iterator edgeEnd() { return edges.end(); } /** * \brief * Returns the Edges that have been added to this PlanarGraph * @see #add(Edge) */ std::vector* getEdges() { return &edges; } /** * \brief * Removes an Edge and its associated DirectedEdges from their * from-Nodes and from this PlanarGraph. * * Note: This method does not remove the Nodes associated * with the Edge, even if the removal of the Edge reduces the * degree of a Node to zero. */ void remove(Edge *edge); /** * \brief * Removes DirectedEdge from its from-Node and from this PlanarGraph. * * Note: * This method does not remove the Nodes associated with the * DirectedEdge, even if the removal of the DirectedEdge reduces * the degree of a Node to zero. */ void remove(DirectedEdge *de); /** * \brief * Removes a node from the graph, along with any associated * DirectedEdges and Edges. */ void remove(Node *node); /** * \brief * Returns all Nodes with the given number of Edges around it. * The return value is a newly allocated vector of existing nodes */ std::vector* findNodesOfDegree(std::size_t degree); /** * \brief * Get all Nodes with the given number of Edges around it. * * Found nodes are pushed to the given vector */ void findNodesOfDegree(std::size_t degree, std::vector& to); }; } // namespace geos::planargraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PLANARGRAPH_PLANARGRAPH_H geos-3.4.2/include/geos/planargraph/Subgraph.h0000644000175000017500000000764612206417147021121 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_SUBGRAPH_H #define GEOS_PLANARGRAPH_SUBGRAPH_H #include #include // for composition #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace planargraph { class PlanarGraph; class DirectedEdge; class Edge; } } namespace geos { namespace planargraph { // geos.planargraph /// A subgraph of a PlanarGraph. // /// A subgraph may contain any subset of geomgraph::Edges /// from the parent graph. /// It will also automatically contain all geomgraph::DirectedEdge /// and geomgraph::Node associated with those edges. /// No new objects are created when edges are added - /// all associated components must already exist in the parent graph. /// /// @@ Actually we'll be copying Coordinates in NodeMap. /// I guess that'll need to be changed soon. /// class GEOS_DLL Subgraph { public: /** * Creates a new subgraph of the given PlanarGraph * * @param parent the parent graph */ Subgraph(PlanarGraph &parent) : parentGraph(parent) {} /** * Gets the {@link PlanarGraph} which this subgraph * is part of. * * @return the parent PlanarGraph */ PlanarGraph& getParent() const { return parentGraph; } /** * Adds an {@link Edge} to the subgraph. * The associated {@link DirectedEdge}s and {@link planarNode}s * are also added. * * @param e the edge to add * * @return a pair with first element being an iterator * to the Edge in set and second element * being a boolean value indicating wheter * the Edge has been inserted now or was * already in the set. */ std::pair::iterator, bool> add(Edge *e); /** * Returns an iterator over the DirectedEdge in this graph, * in the order in which they were added. * * @return an iterator over the directed edges * * @see add(Edge) */ std::vector::iterator getDirEdgeBegin() { return dirEdges.begin(); } /** * Returns an {@link Iterator} over the {@link Edge}s in this * graph, in the order in which they were added. * * @return an iterator over the edges * * @see add(Edge) */ std::set::iterator edgeBegin() { return edges.begin(); } std::set::iterator edgeEnd() { return edges.end(); } /** * Returns a iterators over the planarNodesMap::container * in this graph. */ NodeMap::container::iterator nodeBegin() { return nodeMap.begin(); } NodeMap::container::const_iterator nodeEnd() const { return nodeMap.end(); } NodeMap::container::iterator nodeEnd() { return nodeMap.end(); } NodeMap::container::const_iterator nodeBegin() const { return nodeMap.begin(); } /** * Tests whether an {@link Edge} is contained in this subgraph * @param e the edge to test * @return true if the edge is contained in this subgraph */ bool contains(Edge *e) { return (edges.find(e) != edges.end()); } protected: PlanarGraph &parentGraph; std::set edges; std::vector dirEdges; NodeMap nodeMap; // Declare type as noncopyable Subgraph(const Subgraph& other); Subgraph& operator=(const Subgraph& rhs); }; } // namespace geos::planargraph } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PLANARGRAPH_SUBGRAPH_H geos-3.4.2/include/geos/planargraph/algorithm/0000755000175000017500000000000012206417231021140 5ustar frankiefrankiegeos-3.4.2/include/geos/planargraph/algorithm/ConnectedSubgraphFinder.h0000644000175000017500000000471412206417147026053 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_ALGO_CONNECTEDSUBGRAPHFINDER_H #define GEOS_PLANARGRAPH_ALGO_CONNECTEDSUBGRAPHFINDER_H #include #include // for inlines #include #include // Forward declarations namespace geos { namespace planargraph { class PlanarGraph; class Subgraph; class Node; } } namespace geos { namespace planargraph { // geos::planargraph namespace algorithm { // geos::planargraph::algorithm /** \brief * Finds all connected {@link Subgraph}s of a PlanarGraph. * * Note: uses the isVisited flag on the nodes. */ class GEOS_DLL ConnectedSubgraphFinder { public: ConnectedSubgraphFinder(PlanarGraph& newGraph) : graph(newGraph) {} /// \brief /// Store newly allocated connected Subgraphs into the /// given std::vector /// /// Caller take responsibility in releasing memory associated /// with the subgraphs themself. /// /// void getConnectedSubgraphs(std::vector& dest); private: PlanarGraph& graph; /// Returns a newly allocated Subgraph Subgraph* findSubgraph(Node* node); /** * Adds all nodes and edges reachable from this node to the subgraph. * Uses an explicit stack to avoid a large depth of recursion. * * @param node a node known to be in the subgraph */ void addReachable(Node* node, Subgraph* subgraph); /** * Adds the argument node and all its out edges to the subgraph. * @param node the node to add * @param nodeStack the current set of nodes being traversed */ void addEdges(Node* node, std::stack& nodeStack, Subgraph* subgraph); // Declare type as noncopyable ConnectedSubgraphFinder(const ConnectedSubgraphFinder& other); ConnectedSubgraphFinder& operator=(const ConnectedSubgraphFinder& rhs); }; } // namespace geos::planargraph::algorithm } // namespace geos::planargraph } // namespace geos #endif // GEOS_PLANARGRAPH_ALGO_CONNECTEDSUBGRAPHFINDER_H geos-3.4.2/include/geos/planargraph/algorithm/Makefile.am0000644000175000017500000000030712206417147023202 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/planargraph/algorithm geos_HEADERS = \ ConnectedSubgraphFinder.h geos-3.4.2/include/geos/planargraph/algorithm/Makefile.in0000644000175000017500000003631212206417162023215 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/planargraph/algorithm DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/planargraph/algorithm geos_HEADERS = \ ConnectedSubgraphFinder.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/planargraph/algorithm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/planargraph/algorithm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/planargraph.h0000644000175000017500000000244512206417150017330 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PLANARGRAPH_H #define GEOS_PLANARGRAPH_H namespace geos { /// Contains classes to implement a planar graph data structure. namespace planargraph { // geos::planargraph /// Planargraph algorithms namespace algorithm { // geos::planargraph::algorithm } // namespace geos::planargraph::algorithm } // namespace geos::planargraph } // namespace geos //#include //#include //#include //#include //#include #include #include //#include //#include #endif geos-3.4.2/include/geos/platform.h.cmake0000644000175000017500000001006112206417147017733 0ustar frankiefrankie/********************************************************************** * * platform.h - generated by CMake from platform.h.cmake * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Mateusz Loskot * Copyright (C) 2005-2009 Refractions Research Inc. * Copyright (C) 2001-2009 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************/ #ifndef GEOS_PLATFORM_H_INCLUDED #define GEOS_PLATFORM_H_INCLUDED /* Disable inclusion of platform.h not generated by CMake */ #define GEOS_PLATFORM_H 1 /* Set to 1 if you have stdint.h */ #cmakedefine HAVE_STDINT_H 1 /* Set to 1 if you have inttypes.h */ #cmakedefine HAVE_INTTYPES_H 1 /* Set to 1 if you have ieeefp.h */ #cmakedefine HAVE_IEEEFP_H 1 /* Set to 1 if you have `int64_t' type */ #cmakedefine HAVE_INT64_T_64 1 /* Set to 1 if `long int' is 64 bits */ #cmakedefine HAVE_LONG_INT_64 1 /* Set to 1 if `long long int' is 64 bits */ #cmakedefine HAVE_LONG_LONG_INT_64 1 /* Set to 1 if C++/C99 std::isnan is defined */ #cmakedefine HAVE_STD_ISNAN 1 /* Set to 1 if C99 isnan is defined */ #cmakedefine HAVE_ISNAN 1 /* Set to 1 if XCode __isnand is defined */ #cmakedefine HAVE_ISNAND_XCODE 1 /* Set to 1 if XCode __inline_isnand is defined */ #cmakedefine HAVE_INLINE_ISNAND_XCODE 1 /* Set to 1 if C++/C99 std::isfinite is defined */ #cmakedefine HAVE_STD_ISFINITE 1 /* Set to 1 if C99 isfinite is defined */ #cmakedefine HAVE_ISFINITE 1 /* Set to 1 if Visual C++ finite is defined */ #cmakedefine HAVE_FINITE 1 #ifdef HAVE_IEEEFP_H extern "C" { #include } #endif #ifdef HAVE_INTTYPES_H extern "C" { #include } # ifndef HAVE_INT64_T_64 # error Warning: inttypes.h included but HAVE_INT64_T_64 not defined # endif #endif /* We need M_PI, but on MSVC you need to define _USE_MATH_DEFINES before * including math.h to get it. If we are too late (math.h already included) * we will define it manually. */ #ifdef _MSC_VER #define _USE_MATH_DEFINES #include #include #else #include #endif #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* For MingW the appropriate definitions are included in math.h * and float.h but the definitions in math.h are only included * if __STRICT_ANSI__ is not defined. Since GEOS is compiled * with -ansi that means those definitions are not available. */ #if defined(__GNUC__) && defined(_WIN32) #include #endif #ifdef HAVE_INT64_T_64 # ifdef _MSC_VER typedef __int64 int64; # else typedef int64_t int64; # endif #else # ifdef HAVE_LONG_LONG_INT_64 typedef long long int int64; # else typedef long int int64; # ifndef HAVE_LONG_INT_64 # define INT64_IS_REALLY32 1 # warning "Could not find 64bit integer definition!" # endif # endif #endif #if defined(HAVE_STD_ISNAN) # define ISNAN(x) (std::isnan)(x) #elif defined(HAVE_INLINE_ISNAND_XCODE) # define ISNAN(x) __inline_isnand(static_cast(x)) #elif defined(HAVE_ISNAND_XCODE) # define ISNAN(x) __isnand(static_cast(x)) #elif defined(HAVE_ISNAN) # if defined(_MSC_VER) # define ISNAN(x) _isnan(static_cast(x)) # else # define ISNAN(x) isnan(x) # endif #else # error "Could not find isnan function or macro!" #endif #if defined(HAVE_STD_ISFINITE) # define FINITE(x) (std::isfinite)(x) #elif defined(HAVE_ISFINITE) # define FINITE(x) isfinite(x) #elif defined(HAVE_FINITE) # define FINITE(x) _finite(static_cast(x)) #else # error "Could not find finite or isfinite function or macro!" #endif #define DoubleNegInfinity (-(std::numeric_limits::infinity)()) #define DoubleMax (std::numeric_limits::max)() // Defines NaN for Intel platforms #define DoubleNotANumber std::numeric_limits::quiet_NaN() // Don't forget to define infinities #define DoubleInfinity (std::numeric_limits::infinity)() #endif // GEOS_PLATFORM_H_INCLUDED geos-3.4.2/include/geos/platform.h.in0000644000175000017500000000506412206417150017262 0ustar frankiefrankie#ifndef GEOS_PLATFORM_H #define GEOS_PLATFORM_H /* Set to 1 if you have `int64_t' type */ #undef HAVE_INT64_T_64 /* Set to 1 if `long int' is 64 bits */ #undef HAVE_LONG_INT_64 /* Set to 1 if `long long int' is 64 bits */ #undef HAVE_LONG_LONG_INT_64 /* Set to 1 if you have ieeefp.h */ #undef HAVE_IEEEFP_H /* Has finite */ #undef HAVE_FINITE /* Has isfinite */ #undef HAVE_ISFINITE /* Has isnan */ #undef HAVE_ISNAN #ifdef HAVE_IEEEFP_H extern "C" { #include } #endif #ifdef HAVE_INT64_T_64 extern "C" { #include } #endif #if defined(__GNUC__) && defined(_WIN32) /* For MingW the appropriate definitions are included in math.h and float.h but the definitions in math.h are only included if __STRICT_ANSI__ is not defined. Since GEOS is compiled with -ansi that means those definitions are not available. */ #include #endif #include // for std::numeric_limits //Defines NaN for intel platforms #define DoubleNotANumber std::numeric_limits::quiet_NaN() //Don't forget to define infinities #define DoubleInfinity std::numeric_limits::infinity() #define DoubleNegInfinity -std::numeric_limits::infinity() #define DoubleMax std::numeric_limits::max() #ifdef HAVE_INT64_T_64 typedef int64_t int64; #else # ifdef HAVE_LONG_LONG_INT_64 typedef long long int int64; # else typedef long int int64; # ifndef HAVE_LONG_INT_64 # define INT64_IS_REALLY32 1 # warning "Could not find 64bit integer definition!" # endif # endif #endif #if defined(HAVE_FINITE) && !defined(HAVE_ISFINITE) # define FINITE(x) (finite(x)) #else # if defined(_MSC_VER) # define FINITE(x) _finite(static_cast(x)) # else # define FINITE(x) (isfinite(x)) # endif #endif #if defined(HAVE_ISNAN) # define ISNAN(x) (isnan(x)) #else # if defined(_MSC_VER) # define ISNAN(x) _isnan(x) # elif defined(__MINGW32__) || defined(__CYGWIN__) // sandro furieri: sanitizing MinGW32 # define ISNAN(x) (std::isnan(x)) # elif defined(__OSX__) || defined(__APPLE__) || \ defined(__NetBSD__) || defined(__DragonFly__) || \ (defined(__sun) && defined(__GNUC__)) // Hack for OS/X incorrectly re-defining isnan() into oblivion. // It does leave a version in std. # define ISNAN(x) (std::isnan(x)) # elif (defined(__sun) || defined(__sun__)) && defined(__SUNPRO_CC) # include # define ISNAN(x) (::isnan(x)) # endif #endif #ifndef FINITE #error "Can not compile without finite or isfinite function or macro" #endif #ifndef ISNAN #error "Can not compile without isnan function or macro" #endif #endif geos-3.4.2/include/geos/platform.h.vc0000755000175000017500000000304012206417150017257 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2004 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * Manually created platform.h for use with x86 Microsoft Visual C++ */ #ifndef GEOS_PLATFORM_H #define GEOS_PLATFORM_H #ifndef _MSC_VER #error "This platform.h intended for use with MS Visual C++" #endif #ifndef WIN32 #define WIN32 #endif #ifndef NOMINMAX #define NOMINMAX #endif #include // We need M_PI, but on MSVC you need to define _USE_MATH_DEFINES before // including math.h to get it. If we are too late (math.h already included) // we will define it manually. #define _USE_MATH_DEFINES #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif //Defines NaN for intel platforms #define DoubleNotANumber std::numeric_limits::quiet_NaN() #define ISNAN(x) _isnan(x) //Don't forget to define infinities #define DoubleInfinity std::numeric_limits::infinity() #define DoubleNegInfinity -std::numeric_limits::infinity() #define DoubleMax (std::numeric_limits::max)() #define FINITE(x) _finite(static_cast(x)) #define finite(x) _finite(static_cast(x)) typedef __int64 int64; #endif geos-3.4.2/include/geos/precision/0000755000175000017500000000000012206417232016647 5ustar frankiefrankiegeos-3.4.2/include/geos/precision/CommonBits.h0000644000175000017500000000456712206417147021113 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PRECISION_COMMONBITS_H #define GEOS_PRECISION_COMMONBITS_H #include #include // for int64 namespace geos { namespace precision { // geos.precision /** \brief * Determines the maximum number of common most-significant * bits in the mantissa of one or numbers. * * Can be used to compute the double-precision number which * is represented by the common bits. * If there are no common bits, the number computed is 0.0. * */ class GEOS_DLL CommonBits { private: bool isFirst; int commonMantissaBitsCount; int64 commonBits; int64 commonSignExp; public: /** \brief * Computes the bit pattern for the sign and exponent of a * double-precision number. * * @param num * @return the bit pattern for the sign and exponent */ static int64 signExpBits(int64 num); /** \brief * This computes the number of common most-significant * bits in the mantissas of two double-precision numbers. * * It does not count the hidden bit, which is always 1. * It does not determine whether the numbers have the same * exponent - if they do not, the value computed by this * function is meaningless. * @param db * @return the number of common most-significant mantissa bits */ static int numCommonMostSigMantissaBits(int64 num1, int64 num2); /** \brief * Zeroes the lower n bits of a bitstring. * * @param bits the bitstring to alter * @param i the number of bits to zero * @return the zeroed bitstring */ static int64 zeroLowerBits(int64 bits, int nBits); /** \brief * Extracts the i'th bit of a bitstring. * * @param bits the bitstring to extract from * @param i the bit to extract * @return the value of the extracted bit */ static int getBit(int64 bits, int i); CommonBits(); void add(double num); double getCommon(); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_COMMONBITS_H geos-3.4.2/include/geos/precision/CommonBitsOp.h0000644000175000017500000001134112206417147021376 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PRECISION_COMMONBITSOP_H #define GEOS_PRECISION_COMMONBITSOP_H #include #include // for auto_ptr composition #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace geom { class Geometry; } namespace precision { //class CommonBitsRemover; } } namespace geos { namespace precision { // geos.precision /** \brief * Provides versions of Geometry spatial functions which use * common bit removal to reduce the likelihood of robustness problems. * * In the current implementation no rounding is performed on the * reshifted result geometry, which means that it is possible * that the returned Geometry is invalid. * Client classes should check the validity of the returned result themselves. */ class GEOS_DLL CommonBitsOp { private: bool returnToOriginalPrecision; std::auto_ptr cbr; /** \brief * Computes a copy of the input Geometry with the calculated * common bits removed from each coordinate. * * @param geom0 the Geometry to remove common bits from * @return a copy of the input Geometry with common bits removed * (caller takes responsibility of its deletion) */ geom::Geometry* removeCommonBits(const geom::Geometry *geom0); /** \brief * */ void removeCommonBits( const geom::Geometry* geom0, const geom::Geometry* geom1, std::auto_ptr& rgeom0, std::auto_ptr& rgeom1); public: /** * Creates a new instance of class, which reshifts result Geometry */ CommonBitsOp(); /** * Creates a new instance of class, specifying whether * the result {@link Geometry}s should be reshifted. * * @param returnToOriginalPrecision */ CommonBitsOp(bool nReturnToOriginalPrecision); /** * Computes the set-theoretic intersection of two Geometry, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic * intersection of the input Geometries. */ geom::Geometry* intersection( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic union of two Geometry, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic union * of the input Geometries. */ geom::Geometry* Union( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic difference of two Geometry, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry, to be subtracted from the first * @return the Geometry representing the set-theoretic difference * of the input Geometries. */ geom::Geometry* difference( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic symmetric difference of two geometries, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic symmetric * difference of the input Geometries. */ geom::Geometry* symDifference( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the buffer a geometry, * using enhanced precision. * @param geom0 the Geometry to buffer * @param distance the buffer distance * @return the Geometry representing the buffer of the input Geometry. */ geom::Geometry* buffer( const geom::Geometry *geom0, double distance); /** * If required, returning the result to the orginal precision * if required. * * In this current implementation, no rounding is performed on the * reshifted result geometry, which means that it is possible * that the returned Geometry is invalid. * * @param result the result Geometry to modify * @return the result Geometry with the required precision */ geom::Geometry* computeResultPrecision( geom::Geometry *result); }; } // namespace geos.precision } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_PRECISION_COMMONBITSOP_H geos-3.4.2/include/geos/precision/CommonBitsRemover.h0000644000175000017500000000434712206417147022447 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PRECISION_COMMONBITSREMOVER_H #define GEOS_PRECISION_COMMONBITSREMOVER_H #include #include // for composition // Forward declarations namespace geos { namespace geom { class Geometry; } namespace precision { class CommonBitsRemover; class CommonCoordinateFilter; } } namespace geos { namespace precision { // geos.precision /** \brief * Allow computing and removing common mantissa bits from one or * more Geometries. * */ class GEOS_DLL CommonBitsRemover { private: geom::Coordinate commonCoord; CommonCoordinateFilter *ccFilter; public: CommonBitsRemover(); ~CommonBitsRemover(); /** * Add a geometry to the set of geometries whose common bits are * being computed. After this method has executed the * common coordinate reflects the common bits of all added * geometries. * * @param geom a Geometry to test for common bits */ void add(const geom::Geometry *geom); /** * The common bits of the Coordinates in the supplied Geometries. */ geom::Coordinate& getCommonCoordinate(); /** \brief * Removes the common coordinate bits from a Geometry. * The coordinates of the Geometry are changed. * * @param geom the Geometry from which to remove the common * coordinate bits * @return the shifted Geometry */ geom::Geometry* removeCommonBits(geom::Geometry *geom); /** \brief * Adds the common coordinate bits back into a Geometry. * The coordinates of the Geometry are changed. * * @param geom the Geometry to which to add the common coordinate bits * @return the shifted Geometry */ geom::Geometry* addCommonBits(geom::Geometry *geom); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_COMMONBITSREMOVER_H geos-3.4.2/include/geos/precision/EnhancedPrecisionOp.h0000644000175000017500000000614112206417147022707 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: precision/EnhancedPrecisionOp.java rev. 1.9 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_PRECISION_ENHANCEDPRECISIONOP_H #define GEOS_PRECISION_ENHANCEDPRECISIONOP_H #include #include // for int64 // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace precision { // geos.precision /** \brief * Provides versions of Geometry spatial functions which use * enhanced precision techniques to reduce the likelihood of robustness * problems. */ class GEOS_DLL EnhancedPrecisionOp { public: /** \brief * Computes the set-theoretic intersection of two * Geometrys, using enhanced precision. * * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic * intersection of the input Geometries. */ static geom::Geometry* intersection( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic union of two Geometrys, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic * union of the input Geometries. */ static geom::Geometry* Union( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic difference of two Geometrys, * using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic * difference of the input Geometries. */ static geom::Geometry* difference( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the set-theoretic symmetric difference of two * Geometrys, using enhanced precision. * @param geom0 the first Geometry * @param geom1 the second Geometry * @return the Geometry representing the set-theoretic symmetric * difference of the input Geometries. */ static geom::Geometry* symDifference( const geom::Geometry *geom0, const geom::Geometry *geom1); /** * Computes the buffer of a Geometry, using enhanced precision. * This method should no longer be necessary, since the buffer * algorithm now is highly robust. * * @param geom0 the first Geometry * @param distance the buffer distance * @return the Geometry representing the buffer of the input Geometry. */ static geom::Geometry* buffer( const geom::Geometry *geom, double distance); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_ENHANCEDPRECISIONOP_H geos-3.4.2/include/geos/precision/GeometryPrecisionReducer.h0000644000175000017500000001136312206417147024012 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: precision/GeometryPrecisionReducer.cpp rev. 1.10 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H #define GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H #include #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class PrecisionModel; class GeometryFactory; class Geometry; } } namespace geos { namespace precision { // geos.precision /** \brief * Reduces the precision of a {@link Geometry} * according to the supplied {@link PrecisionModel}, * ensuring that the result is topologically valid. */ class GEOS_DLL GeometryPrecisionReducer { private: // Externally owned const geom::GeometryFactory *newFactory; const geom::PrecisionModel &targetPM; bool removeCollapsed; bool isPointwise; std::auto_ptr reducePointwise( const geom::Geometry& geom ); std::auto_ptr fixPolygonalTopology( const geom::Geometry& geom ); std::auto_ptr createFactory( const geom::GeometryFactory& oldGF, const geom::PrecisionModel& newPM ); GeometryPrecisionReducer(GeometryPrecisionReducer const&); /*= delete*/ GeometryPrecisionReducer& operator=(GeometryPrecisionReducer const&); /*= delete*/ public: /** * Convenience method for doing precision reduction * on a single geometry, * with collapses removed * and keeping the geometry precision model the same, * and preserving polygonal topology. * * @param g the geometry to reduce * @param precModel the precision model to use * @return the reduced geometry */ static std::auto_ptr reduce( const geom::Geometry &g, const geom::PrecisionModel &precModel ) { GeometryPrecisionReducer reducer(precModel); return reducer.reduce(g); } /** * Convenience method for doing precision reduction * on a single geometry, * with collapses removed * and keeping the geometry precision model the same, * but NOT preserving valid polygonal topology. * * @param g the geometry to reduce * @param precModel the precision model to use * @return the reduced geometry */ static std::auto_ptr reducePointwise( const geom::Geometry &g, const geom::PrecisionModel &precModel ) { GeometryPrecisionReducer reducer(precModel); reducer.setPointwise(true); return reducer.reduce(g); } GeometryPrecisionReducer(const geom::PrecisionModel &pm) : newFactory(0), targetPM(pm), removeCollapsed(true), isPointwise(false) {} /** * \brief * Create a reducer that will change the precision model of the * new reduced Geometry * * @param gf the factory for the created Geometry. * Its PrecisionModel will be used for the reduction. * NOTE: ownership left to caller must be kept alive for * the whole lifetime of the returned Geometry. */ GeometryPrecisionReducer(const geom::GeometryFactory &gf); /** * Sets whether the reduction will result in collapsed components * being removed completely, or simply being collapsed to an (invalid) * Geometry of the same type. * * @param remove if true collapsed components will be removed */ void setRemoveCollapsedComponents(bool remove) { removeCollapsed = remove; } /** \brief * Sets whether the precision reduction will be done * in pointwise fashion only. * * Pointwise precision reduction reduces the precision * of the individual coordinates only, but does * not attempt to recreate valid topology. * This is only relevant for geometries containing polygonal components. * * @param pointwise if reduction should be done pointwise only */ void setPointwise(bool pointwise) { isPointwise = pointwise; } std::auto_ptr reduce(const geom::Geometry& geom); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_GEOMETRYPRECISIONREDUCER_H geos-3.4.2/include/geos/precision/Makefile.am0000644000175000017500000000055512206417147020715 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/precision geos_HEADERS = \ CommonBits.h \ CommonBitsOp.h \ CommonBitsRemover.h \ EnhancedPrecisionOp.h \ GeometryPrecisionReducer.h \ PrecisionReducerCoordinateOperation.h \ SimpleGeometryPrecisionReducer.h geos-3.4.2/include/geos/precision/Makefile.in0000644000175000017500000003651412206417162020727 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/precision DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/precision geos_HEADERS = \ CommonBits.h \ CommonBitsOp.h \ CommonBitsRemover.h \ EnhancedPrecisionOp.h \ GeometryPrecisionReducer.h \ PrecisionReducerCoordinateOperation.h \ SimpleGeometryPrecisionReducer.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/precision/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/precision/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/precision/PrecisionReducerCoordinateOperation.h0000644000175000017500000000370212206417147026165 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: precision/PrecisionreducerCoordinateOperation.java r591 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_PRECISION_PRECISIONREDUCERCOORDINATEOPERATION_H #define GEOS_PRECISION_PRECISIONREDUCERCOORDINATEOPERATION_H #include // Forward declarations namespace geos { namespace geom { class PrecisionModel; class CoordinateSequence; class Geometry; } } namespace geos { namespace precision { // geos.precision class PrecisionReducerCoordinateOperation : public geom::util::CoordinateOperation { using CoordinateOperation::edit; private: const geom::PrecisionModel& targetPM; bool removeCollapsed; PrecisionReducerCoordinateOperation(PrecisionReducerCoordinateOperation const&); /*= delete*/ PrecisionReducerCoordinateOperation& operator=(PrecisionReducerCoordinateOperation const&); /*= delete*/ public: PrecisionReducerCoordinateOperation( const geom::PrecisionModel& pm, bool doRemoveCollapsed ) : targetPM(pm), removeCollapsed(doRemoveCollapsed) {} /// Ownership of returned CoordinateSequence to caller // /// virtual function geom::CoordinateSequence* edit(const geom::CoordinateSequence *coordinates, const geom::Geometry *geom); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_PRECISIONREDUCERCOORDINATEOPERATION_H geos-3.4.2/include/geos/precision/SimpleGeometryPrecisionReducer.h0000644000175000017500000000510112206417147025155 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PRECISION_SIMPLEGEOMETRYPRECISIONREDUCER_H #define GEOS_PRECISION_SIMPLEGEOMETRYPRECISIONREDUCER_H #include // Forward declarations namespace geos { namespace geom { class PrecisionModel; class Geometry; } } namespace geos { namespace precision { // geos.precision /** \brief * Reduces the precision of a {@link Geometry} * according to the supplied {@link PrecisionModel}, without * attempting to preserve valid topology. * * The topology of the resulting geometry may be invalid if * topological collapse occurs due to coordinates being shifted. * It is up to the client to check this and handle it if necessary. * Collapses may not matter for some uses. An example * is simplifying the input to the buffer algorithm. * The buffer algorithm does not depend on the validity of the input geometry. * */ class GEOS_DLL SimpleGeometryPrecisionReducer { private: const geom::PrecisionModel *newPrecisionModel; bool removeCollapsed; //bool changePrecisionModel; public: SimpleGeometryPrecisionReducer(const geom::PrecisionModel *pm); /** * Sets whether the reduction will result in collapsed components * being removed completely, or simply being collapsed to an (invalid) * Geometry of the same type. * * @param removeCollapsed if true collapsed * components will be removed */ void setRemoveCollapsedComponents(bool nRemoveCollapsed); /* * Sets whether the {@link PrecisionModel} of the new reduced Geometry * will be changed to be the {@link PrecisionModel} supplied to * specify the reduction. The default is to not change the * precision model * * @param changePrecisionModel if true the precision * model of the created Geometry will be the * the precisionModel supplied in the constructor. */ //void setChangePrecisionModel(bool nChangePrecisionModel); const geom::PrecisionModel* getPrecisionModel(); bool getRemoveCollapsed(); geom::Geometry* reduce(const geom::Geometry *geom); }; } // namespace geos.precision } // namespace geos #endif // GEOS_PRECISION_SIMPLEGEOMETRYPRECISIONREDUCER_H geos-3.4.2/include/geos/precision.h0000644000175000017500000000177412206417150017030 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PRECISION_H #define GEOS_PRECISION_H namespace geos { /// Provides classes for manipulating the precision model of Geometries namespace precision { // geos.precision } // namespace geos.precision } // namespace geos //#include #include //#include #include #include #endif geos-3.4.2/include/geos/profiler.h0000644000175000017500000000756212206417150016660 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_PROFILER_H #define GEOS_PROFILER_H #include /** need this to correctly detect MINGW64 **/ #include /* For MingW builds with __STRICT_ANSI__ (-ansi) */ /** MINGW64 doesn't have a config.h **/ #if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) /* Allow us to check for presence of gettimeofday in MingW */ #include #include extern "C" { extern _CRTIMP void __cdecl _tzset (void); __MINGW_IMPORT int _daylight; __MINGW_IMPORT long _timezone; __MINGW_IMPORT char *_tzname[2]; } #endif #if defined(_MSC_VER) || defined(__MINGW32__) && !defined(HAVE_GETTIMEOFDAY) && !defined(__MINGW64_VERSION_MAJOR) #include #else #include #endif #include #include #include #include #include #ifndef PROFILE #define PROFILE 0 #endif #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace util { /* * \class Profile utils.h geos.h * * \brief Profile statistics */ class GEOS_DLL Profile { public: /** \brief Create a named profile */ Profile(std::string name); /** \brief Destructor */ ~Profile(); /** \brief start a new timer */ void start() { gettimeofday(&starttime, NULL); } /** \brief stop current timer */ void stop() { gettimeofday(&stoptime, NULL); double elapsed = 1000000*(stoptime.tv_sec-starttime.tv_sec)+ (stoptime.tv_usec-starttime.tv_usec); timings.push_back(elapsed); totaltime += elapsed; if ( timings.size() == 1 ) max = min = elapsed; else { if ( elapsed > max ) max = elapsed; if ( elapsed < min ) min = elapsed; } avg = totaltime / timings.size(); } /** \brief Return Max stored timing */ double getMax() const; /** \brief Return Min stored timing */ double getMin() const; /** \brief Return total timing */ double getTot() const; /** \brief Return average timing */ double getAvg() const; /** \brief Return number of timings */ size_t getNumTimings() const; /** \brief Profile name */ std::string name; private: /* \brief current start and stop times */ struct timeval starttime, stoptime; /* \brief actual times */ std::vector timings; /* \brief total time */ double totaltime; /* \brief max time */ double max; /* \brief max time */ double min; /* \brief max time */ double avg; }; /* * \class Profiler utils.h geos.h * * \brief Profiling class * */ class GEOS_DLL Profiler { public: Profiler(); ~Profiler(); /** * \brief * Return the singleton instance of the * profiler. */ static Profiler *instance(void); /** * \brief * Start timer for named task. The task is * created if does not exist. */ void start(std::string name); /** * \brief * Stop timer for named task. * Elapsed time is registered in the given task. */ void stop(std::string name); /** \brief get Profile of named task */ Profile *get(std::string name); std::map profs; }; /** \brief Return a string representing the Profile */ std::ostream& operator<< (std::ostream& os, const Profile&); /** \brief Return a string representing the Profiler */ std::ostream& operator<< (std::ostream& os, const Profiler&); } // namespace geos::util } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // ndef GEOS_PROFILER_H geos-3.4.2/include/geos/simplify/0000755000175000017500000000000012206417232016510 5ustar frankiefrankiegeos-3.4.2/include/geos/simplify/DouglasPeuckerLineSimplifier.h0000644000175000017500000000513412206417147024442 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/DouglasPeuckerLineSimplifier.java rev. 1.4 * **********************************************************************/ #ifndef GEOS_SIMPLIFY_DOUBGLASPEUCKERLINESIMPLIFIER_H #define GEOS_SIMPLIFY_DOUBGLASPEUCKERLINESIMPLIFIER_H #include #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace simplify { // geos::simplify /** \brief * Simplifies a linestring (sequence of points) using * the standard Douglas-Peucker algorithm. */ class GEOS_DLL DouglasPeuckerLineSimplifier { public: typedef std::vector BoolVect; typedef std::auto_ptr BoolVectAutoPtr; typedef std::vector CoordsVect; typedef std::auto_ptr CoordsVectAutoPtr; /** \brief * Returns a newly allocated Coordinate vector, wrapped * into an auto_ptr */ static CoordsVectAutoPtr simplify( const CoordsVect& nPts, double distanceTolerance); DouglasPeuckerLineSimplifier(const CoordsVect& nPts); /** \brief * Sets the distance tolerance for the simplification. * * All vertices in the simplified linestring will be within this * distance of the original linestring. * * @param nDistanceTolerance the approximation tolerance to use */ void setDistanceTolerance(double nDistanceTolerance); /** \brief * Returns a newly allocated Coordinate vector, wrapped * into an auto_ptr */ CoordsVectAutoPtr simplify(); private: const CoordsVect& pts; BoolVectAutoPtr usePt; double distanceTolerance; void simplifySection(std::size_t i, std::size_t j); // Declare type as noncopyable DouglasPeuckerLineSimplifier(const DouglasPeuckerLineSimplifier& other); DouglasPeuckerLineSimplifier& operator=(const DouglasPeuckerLineSimplifier& rhs); }; } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_DOUBGLASPEUCKERLINESIMPLIFIER_H geos-3.4.2/include/geos/simplify/DouglasPeuckerSimplifier.h0000644000175000017500000000441712206417147023635 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/DouglasPeuckerSimplifier.java rev. 1.5 (JTS-1.7) * **********************************************************************/ #ifndef GEOS_SIMPLIFY_DOUBGLASPEUCKERSIMPLIFIER_H #define GEOS_SIMPLIFY_DOUBGLASPEUCKERSIMPLIFIER_H #include #include // for auto_ptr // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace simplify { // geos::simplify /** \brief * Simplifies a Geometry using the standard Douglas-Peucker algorithm. * * Ensures that any polygonal geometries returned are valid. * Simple lines are not guaranteed to remain simple after simplification. * * Note that in general D-P does not preserve topology - * e.g. polygons can be split, collapse to lines or disappear * holes can be created or disappear, * and lines can cross. * To simplify geometry while preserving topology use TopologyPreservingSimplifier. * (However, using D-P is significantly faster). * */ class GEOS_DLL DouglasPeuckerSimplifier { public: static std::auto_ptr simplify( const geom::Geometry* geom, double tolerance); DouglasPeuckerSimplifier(const geom::Geometry* geom); /** \brief * Sets the distance tolerance for the simplification. * * All vertices in the simplified geometry will be within this * distance of the original geometry. * The tolerance value must be non-negative. A tolerance value * of zero is effectively a no-op. * * @param distanceTolerance the approximation tolerance to use */ void setDistanceTolerance(double tolerance); std::auto_ptr getResultGeometry(); private: const geom::Geometry* inputGeom; double distanceTolerance; }; } // namespace geos::simplify } // namespace geos #endif // GEOS_SIMPLIFY_DOUBGLASPEUCKERSIMPLIFIER_H geos-3.4.2/include/geos/simplify/LineSegmentIndex.h0000644000175000017500000000371512206417147022076 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/LineSegmentIndex.java rev. 1.1 (JTS-1.7.1) * ********************************************************************** * * NOTES * **********************************************************************/ #ifndef GEOS_SIMPLIFY_LINESEGMENTINDEX_H #define GEOS_SIMPLIFY_LINESEGMENTINDEX_H #include #include #include // for auto_ptr #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Envelope; class LineSegment; } namespace simplify { class TaggedLineString; } namespace index { namespace quadtree { class Quadtree; } } } namespace geos { namespace simplify { // geos::simplify class GEOS_DLL LineSegmentIndex { public: LineSegmentIndex(); ~LineSegmentIndex(); void add(const TaggedLineString& line); void add(const geom::LineSegment* seg); void remove(const geom::LineSegment* seg); std::auto_ptr< std::vector > query(const geom::LineSegment* seg) const; private: std::auto_ptr index; std::vector newEnvelopes; // Copying is turned off LineSegmentIndex(const LineSegmentIndex&); LineSegmentIndex& operator=(const LineSegmentIndex&); }; } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_LINESEGMENTINDEX_H geos-3.4.2/include/geos/simplify/Makefile.am0000644000175000017500000000062012206417147020547 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = geosdir = $(includedir)/geos/simplify EXTRA_DIST = geos_HEADERS = \ DouglasPeuckerLineSimplifier.h \ DouglasPeuckerSimplifier.h \ LineSegmentIndex.h \ TaggedLineSegment.h \ TaggedLinesSimplifier.h \ TaggedLineString.h \ TaggedLineStringSimplifier.h \ TopologyPreservingSimplifier.h geos-3.4.2/include/geos/simplify/Makefile.in0000644000175000017500000005130112206417162020557 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/simplify DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = geosdir = $(includedir)/geos/simplify EXTRA_DIST = geos_HEADERS = \ DouglasPeuckerLineSimplifier.h \ DouglasPeuckerSimplifier.h \ LineSegmentIndex.h \ TaggedLineSegment.h \ TaggedLinesSimplifier.h \ TaggedLineString.h \ TaggedLineStringSimplifier.h \ TopologyPreservingSimplifier.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/simplify/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/simplify/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/simplify/TaggedLineSegment.h0000644000175000017500000000417712206417147022225 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineSegment.java rev. 1.1 (JTS-1.7) * ********************************************************************** * * NOTES: Use of this class by DP simplification algorithms * makes it useless for a TaggedLineSegment to store copies * of coordinates. Using pointers would be good enough here. * We don't do it to avoid having to break inheritance from * LineSegment, which has copies intead. Wheter LineSegment * itself should be refactored can be discussed. * --strk 2006-04-12 * **********************************************************************/ #ifndef GEOS_SIMPLIFY_TAGGEDLINESEGMENT_H #define GEOS_SIMPLIFY_TAGGEDLINESEGMENT_H #include #include // for inheritance // Forward declarations namespace geos { namespace geom { class Coordinate; class Geometry; } } namespace geos { namespace simplify { // geos::simplify /** \brief * A geom::LineSegment which is tagged with its location in a geom::Geometry. * * Used to index the segments in a geometry and recover the segment locations * from the index. */ class GEOS_DLL TaggedLineSegment: public geom::LineSegment { public: TaggedLineSegment(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Geometry* parent, unsigned int index); TaggedLineSegment(const geom::Coordinate& p0, const geom::Coordinate& p1); TaggedLineSegment(const TaggedLineSegment& ls); const geom::Geometry* getParent() const; unsigned int getIndex() const; private: const geom::Geometry* parent; unsigned int index; }; } // namespace geos::simplify } // namespace geos #endif // GEOS_SIMPLIFY_TAGGEDLINESEGMENT_H geos-3.4.2/include/geos/simplify/TaggedLineString.h0000644000175000017500000000611012206417147022056 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineString.java rev. 1.2 (JTS-1.7.1) * ********************************************************************** * * NOTES: This class can be optimized to work with vector * rather then with CoordinateSequence. Also, LineSegment should * be replaced with a class not copying Coordinates. * **********************************************************************/ #ifndef GEOS_SIMPLIFY_TAGGEDLINESTRING_H #define GEOS_SIMPLIFY_TAGGEDLINESTRING_H #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class CoordinateSequence; class Geometry; class LineString; class LinearRing; } namespace simplify { class TaggedLineSegment; } } namespace geos { namespace simplify { // geos::simplify /** \brief * * Contains and owns a list of TaggedLineSegments * */ class GEOS_DLL TaggedLineString { public: typedef std::vector CoordVect; typedef std::auto_ptr CoordVectPtr; typedef geom::CoordinateSequence CoordSeq; typedef std::auto_ptr CoordSeqPtr; TaggedLineString(const geom::LineString* nParentLine, std::size_t minimumSize=2); ~TaggedLineString(); std::size_t getMinimumSize() const; const geom::LineString* getParent() const; const CoordSeq* getParentCoordinates() const; CoordSeqPtr getResultCoordinates() const; std::size_t getResultSize() const; TaggedLineSegment* getSegment(std::size_t i); const TaggedLineSegment* getSegment(std::size_t i) const; std::vector& getSegments(); const std::vector& getSegments() const; void addToResult(std::auto_ptr seg); std::auto_ptr asLineString() const; std::auto_ptr asLinearRing() const; private: const geom::LineString* parentLine; // TaggedLineSegments owned by this object std::vector segs; // TaggedLineSegments owned by this object std::vector resultSegs; std::size_t minimumSize; void init(); static CoordVectPtr extractCoordinates( const std::vector& segs); // Copying is turned off TaggedLineString(const TaggedLineString&); TaggedLineString& operator= (const TaggedLineString&); }; } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_TAGGEDLINESTRING_H geos-3.4.2/include/geos/simplify/TaggedLineStringSimplifier.h0000644000175000017500000001025112206417147024103 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineStringSimplifier.java r536 (JTS-1.12+) * ********************************************************************** * * NOTES: This class can be optimized to work with vector * rather then with CoordinateSequence * **********************************************************************/ #ifndef GEOS_SIMPLIFY_TAGGEDLINESTRINGSIMPLIFIER_H #define GEOS_SIMPLIFY_TAGGEDLINESTRINGSIMPLIFIER_H #include #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace algorithm { class LineIntersector; } namespace geom { class CoordinateSequence; class LineSegment; } namespace simplify { class TaggedLineSegment; class TaggedLineString; class LineSegmentIndex; } } namespace geos { namespace simplify { // geos::simplify /** \brief * Simplifies a TaggedLineString, preserving topology * (in the sense that no new intersections are introduced). * Uses the recursive Douglas-Peucker algorithm. * */ class GEOS_DLL TaggedLineStringSimplifier { public: TaggedLineStringSimplifier(LineSegmentIndex* inputIndex, LineSegmentIndex* outputIndex); /** \brief * Sets the distance tolerance for the simplification. * * All vertices in the simplified geometry will be within this * distance of the original geometry. * * @param d the approximation tolerance to use */ void setDistanceTolerance(double d); /** * Simplifies the given {@link TaggedLineString} * using the distance tolerance specified. * * @param line the linestring to simplify */ void simplify(TaggedLineString* line); private: // externally owned LineSegmentIndex* inputIndex; // externally owned LineSegmentIndex* outputIndex; std::auto_ptr li; /// non-const as segments are possibly added to it TaggedLineString* line; const geom::CoordinateSequence* linePts; double distanceTolerance; void simplifySection(std::size_t i, std::size_t j, std::size_t depth); static std::size_t findFurthestPoint( const geom::CoordinateSequence* pts, std::size_t i, std::size_t j, double& maxDistance); bool hasBadIntersection(const TaggedLineString* parentLine, const std::vector& sectionIndex, const geom::LineSegment& candidateSeg); bool hasBadInputIntersection(const TaggedLineString* parentLine, const std::vector& sectionIndex, const geom::LineSegment& candidateSeg); bool hasBadOutputIntersection(const geom::LineSegment& candidateSeg); bool hasInteriorIntersection(const geom::LineSegment& seg0, const geom::LineSegment& seg1) const; std::auto_ptr flatten( std::size_t start, std::size_t end); /** \brief * Tests whether a segment is in a section of a TaggedLineString * * @param line * @param sectionIndex * @param seg * @return */ static bool isInLineSection( const TaggedLineString* parentLine, const std::vector& sectionIndex, const TaggedLineSegment* seg); /** \brief * Remove the segs in the section of the line * * @param line * @param pts * @param sectionStartIndex * @param sectionEndIndex */ void remove(const TaggedLineString* line, std::size_t start, std::size_t end); }; inline void TaggedLineStringSimplifier::setDistanceTolerance(double d) { distanceTolerance = d; } } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_TAGGEDLINESTRINGSIMPLIFIER_H geos-3.4.2/include/geos/simplify/TaggedLinesSimplifier.h0000644000175000017500000000606112206417147023103 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLinesSimplifier.java rev. 1.4 (JTS-1.7.1) * ********************************************************************** * * NOTES: changed from JTS design adding a private * TaggedLineStringSimplifier member and making * simplify(collection) method become a templated * function. * **********************************************************************/ #ifndef GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H #define GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H #include #include #include #include #include // for templated function body #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace simplify { class TaggedLineString; } } namespace geos { namespace simplify { // geos::simplify /** \brief * Simplifies a collection of TaggedLineStrings, preserving topology * (in the sense that no new intersections are introduced). */ class GEOS_DLL TaggedLinesSimplifier { public: TaggedLinesSimplifier(); /** \brief * Sets the distance tolerance for the simplification. * * All vertices in the simplified geometry will be within this * distance of the original geometry. * * @param tolerance the approximation tolerance to use */ void setDistanceTolerance(double tolerance); /** * Simplify a set of {@link TaggedLineString}s * * @param iterator_type * an iterator, must support assignment, increment, * inequality and dereference operators. * Dereference operator must return a TaggedLineString* * * @param begin iterator to the first element * to be simplified. * @param end an iterator to one-past-last element * to be simplified. */ template void simplify( iterator_type begin, iterator_type end) { // add lines to the index for (iterator_type it=begin; it != end; ++it) { assert(*it); inputIndex->add(*(*it)); } // Simplify lines for (iterator_type it=begin; it != end; ++it) { assert(*it); simplify(*(*it)); } } private: void simplify(TaggedLineString& line); std::auto_ptr inputIndex; std::auto_ptr outputIndex; std::auto_ptr taggedlineSimplifier; }; } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H geos-3.4.2/include/geos/simplify/TopologyPreservingSimplifier.h0000644000175000017500000000530112206417147024572 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TopologyPreservingSimplifier.java r536 (JTS-1.12+) * ********************************************************************** * * NOTES: * **********************************************************************/ #ifndef GEOS_SIMPLIFY_TOPOLOGYPRESERVINGSIMPLIFIER_H #define GEOS_SIMPLIFY_TOPOLOGYPRESERVINGSIMPLIFIER_H #include #include #include #include // for auto_ptr #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace simplify { // geos::simplify /** \brief * * Simplifies a geometry, ensuring that * the result is a valid geometry having the * same dimension and number of components as the input. * * The simplification uses a maximum distance difference algorithm * similar to the one used in the Douglas-Peucker algorithm. * * In particular, if the input is an areal geometry * ( Polygon or MultiPolygon ) * * - The result has the same number of shells and holes (rings) as the input, * in the same order * - The result rings touch at no more than the number of touching point in the input * (although they may touch at fewer points) * */ class GEOS_DLL TopologyPreservingSimplifier { public: static std::auto_ptr simplify( const geom::Geometry* geom, double tolerance); TopologyPreservingSimplifier(const geom::Geometry* geom); /** \brief * Sets the distance tolerance for the simplification. * * All vertices in the simplified geometry will be within this * distance of the original geometry. * The tolerance value must be non-negative. A tolerance value * of zero is effectively a no-op. * * @param distanceTolerance the approximation tolerance to use */ void setDistanceTolerance(double tolerance); std::auto_ptr getResultGeometry(); private: const geom::Geometry* inputGeom; std::auto_ptr lineSimplifier; }; } // namespace geos::simplify } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_SIMPLIFY_TOPOLOGYPRESERVINGSIMPLIFIER_H geos-3.4.2/include/geos/spatialIndex.h0000644000175000017500000000146412206417150017456 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_INDEX_H #define GEOS_INDEX_H namespace geos { /// Provides classes for various kinds of spatial indexes. namespace index { } // namespace geos.index } // namespace geos #include #include #endif // GEOS_INDEX_H geos-3.4.2/include/geos/timeval.h0000644000175000017500000000554212206417150016473 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Wu Yongwei * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Note: This code is in the public domain, see * http://wyw.dcweb.cn/time.htm * **********************************************************************/ #ifndef GEOS_TIMEVAL_H #define GEOS_TIMEVAL_H #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #if defined(_MSC_VER) || defined(__BORLANDC__) #define EPOCHFILETIME (116444736000000000i64) #else #define EPOCHFILETIME (116444736000000000LL) #endif struct timezone { int tz_minuteswest; /* minutes W of Greenwich */ int tz_dsttime; /* type of dst correction */ }; #if !defined(_WIN32_WCE) __inline int gettimeofday(struct timeval *tv, struct timezone *tz) { FILETIME ft; LARGE_INTEGER li; __int64 t; static int tzflag; if (tv) { GetSystemTimeAsFileTime(&ft); li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; t = li.QuadPart; /* In 100-nanosecond intervals */ t -= EPOCHFILETIME; /* Offset to the Epoch time */ t /= 10; /* In microseconds */ tv->tv_sec = (long)(t / 1000000); tv->tv_usec = (long)(t % 1000000); } if (tz) { if (!tzflag) { _tzset(); tzflag++; } tz->tz_minuteswest = _timezone / 60; tz->tz_dsttime = _daylight; } return 0; } #else __inline int gettimeofday(struct timeval *tv, struct timezone *tz) { SYSTEMTIME st; FILETIME ft; LARGE_INTEGER li; TIME_ZONE_INFORMATION tzi; __int64 t; static int tzflag; if (tv) { GetSystemTime(&st); SystemTimeToFileTime(&st, &ft); li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; t = li.QuadPart; /* In 100-nanosecond intervals */ t -= EPOCHFILETIME; /* Offset to the Epoch time */ t /= 10; /* In microseconds */ tv->tv_sec = (long)(t / 1000000); tv->tv_usec = (long)(t % 1000000); } if (tz) { GetTimeZoneInformation(&tzi); tz->tz_minuteswest = tzi.Bias; if (tzi.StandardDate.wMonth != 0) { tz->tz_minuteswest += tzi.StandardBias * 60; } if (tzi.DaylightDate.wMonth != 0) { tz->tz_dsttime = 1; } else { tz->tz_dsttime = 0; } } return 0; } #endif /* _WIN32_WCE */ #endif /* GEOS_TIMEVAL_H */ geos-3.4.2/include/geos/triangulate/0000755000175000017500000000000012206417232017173 5ustar frankiefrankiegeos-3.4.2/include/geos/triangulate/DelaunayTriangulationBuilder.h0000644000175000017500000001064112206417147025165 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/DelaunayTriangulationBuilder.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_DELAUNAYTRIANGULATIONBUILDER_H #define GEOS_TRIANGULATE_DELAUNAYTRIANGULATIONBUILDER_H #include namespace geos { namespace geom{ class CoordinateSequence; class Geometry; class MultiLineString; class GeometryCollection; class GeometryFactory; class Envelope; } namespace triangulate { namespace quadedge { class QuadEdgeSubdivision; } } } namespace geos { namespace triangulate { //geos.triangulate /** * A utility class which creates Delaunay Triangulations * from collections of points and extract the resulting * triangulation edges or triangles as geometries. * * @author JTS: Martin Davis * @author Benjamin Campbell * */ class GEOS_DLL DelaunayTriangulationBuilder { public: /** * Extracts the unique {@link Coordinate}s from the given {@link Geometry}. * @param geom the geometry to extract from * @return a List of the unique Coordinates. Caller takes ownership of the returned object. */ static geom::CoordinateSequence* extractUniqueCoordinates(const geom::Geometry& geom); static void unique(geom::CoordinateSequence& coords); /** * Converts all {@link Coordinate}s in a collection to {@link Vertex}es. * @param coords the coordinates to convert * @return a List of Vertex objects. Call takes ownership of returned object. */ static IncrementalDelaunayTriangulator::VertexList* toVertices(const geom::CoordinateSequence &coords); private: geom::CoordinateSequence* siteCoords; double tolerance; quadedge::QuadEdgeSubdivision *subdiv; public: /** * Creates a new triangulation builder. * */ DelaunayTriangulationBuilder(); ~DelaunayTriangulationBuilder(); /** * Sets the sites (vertices) which will be triangulated. * All vertices of the given geometry will be used as sites. * * @param geom the geometry from which the sites will be extracted. */ void setSites(const geom::Geometry& geom); /** * Sets the sites (vertices) which will be triangulated * from a collection of {@link Coordinate}s. * * @param geom a CoordinateSequence. */ void setSites(const geom::CoordinateSequence& coords); /** * Sets the snapping tolerance which will be used * to improved the robustness of the triangulation computation. * A tolerance of 0.0 specifies that no snapping will take place. * * @param tolerance the tolerance distance to use */ inline void setTolerance(double tolerance) { this->tolerance = tolerance; } private: void create(); public: /** * Gets the {@link quadedge::QuadEdgeSubdivision} which models the computed triangulation. * * @return the subdivision containing the triangulation */ quadedge::QuadEdgeSubdivision& getSubdivision(); /** * Gets the edges of the computed triangulation as a {@link MultiLineString}. * * @param geomFact the geometry factory to use to create the output * @return the edges of the triangulation. The caller takes ownership of the returned object. */ std::auto_ptr getEdges(const geom::GeometryFactory &geomFact); /** * Gets the faces of the computed triangulation as a {@link GeometryCollection} * of {@link Polygon}. * * @param geomFact the geometry factory to use to create the output * @return the faces of the triangulation. The caller takes ownership of the returned object. */ std::auto_ptr getTriangles(const geom::GeometryFactory& geomFact); /** * Computes the {@link Envelope} of a collection of {@link Coordinate}s. * * @param coords a List of Coordinates * @return the envelope of the set of coordinates */ static geom::Envelope envelope(const geom::CoordinateSequence& coords); }; } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_DELAUNAYTRIANGULATIONBUILDER_H geos-3.4.2/include/geos/triangulate/IncrementalDelaunayTriangulator.h0000644000175000017500000000476112206417147025701 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/IncrementalDelaunayTriangulator.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_INCREMENTALDELAUNAYTRIANGULATOR_H #define GEOS_TRIANGULATE_INCREMENTALDELAUNAYTRIANGULATOR_H #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { class QuadEdge; class QuadEdgeSubdivision; } /** * Computes a Delauanay Triangulation of a set of {@link Vertex}es, using an * incrementatal insertion algorithm. * * @author JTS: Martin Davis * @author Benjamin Campbell */ class GEOS_DLL IncrementalDelaunayTriangulator { private: quadedge::QuadEdgeSubdivision *subdiv; bool isUsingTolerance; public: /** * Creates a new triangulator using the given {@link QuadEdgeSubdivision}. * The triangulator uses the tolerance of the supplied subdivision. * * @param subdiv * a subdivision in which to build the TIN */ IncrementalDelaunayTriangulator(quadedge::QuadEdgeSubdivision *subdiv); typedef std::list VertexList; /** * Inserts all sites in a collection. The inserted vertices MUST be * unique up to the provided tolerance value. (i.e. no two vertices should be * closer than the provided tolerance value). They do not have to be rounded * to the tolerance grid, however. * * @param vertices a Collection of Vertex * * @throws LocateFailureException if the location algorithm * fails to converge in a reasonable number of iterations */ void insertSites(const VertexList& vertices); /** * Inserts a new point into a subdivision representing a Delaunay * triangulation, and fixes the affected edges so that the result * is still a Delaunay triangulation. *

* * @return a quadedge containing the inserted vertex */ quadedge::QuadEdge& insertSite(const quadedge::Vertex &v); }; } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_INCREMENTALDELAUNAYTRIANGULATOR_H geos-3.4.2/include/geos/triangulate/Makefile.am0000644000175000017500000000036112206417147021234 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ quadedge EXTRA_DIST = geosdir = $(includedir)/geos/triangulate geos_HEADERS = \ IncrementalDelaunayTriangulator.h \ DelaunayTriangulationBuilder.h geos-3.4.2/include/geos/triangulate/Makefile.in0000644000175000017500000005105412206417162021247 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/triangulate DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ quadedge EXTRA_DIST = geosdir = $(includedir)/geos/triangulate geos_HEADERS = \ IncrementalDelaunayTriangulator.h \ DelaunayTriangulationBuilder.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/triangulate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/triangulate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/triangulate/quadedge/0000755000175000017500000000000012206417232020752 5ustar frankiefrankiegeos-3.4.2/include/geos/triangulate/quadedge/LastFoundQuadEdgeLocator.h0000644000175000017500000000362712206417147025763 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/LastFoundQuadEdgeLocator.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_LASTFOUNDQUADEDGELOCATOR_H #define GEOS_TRIANGULATE_QUADEDGE_LASTFOUNDQUADEDGELOCATOR_H #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge //fwd declarations class QuadEdgeSubdivision; /** * Locates {@link QuadEdge}s in a {@link QuadEdgeSubdivision}, * optimizing the search by starting in the * locality of the last edge found. * * @author JTS: Martin Davis * @author Benjamin Campbell */ class LastFoundQuadEdgeLocator : public QuadEdgeLocator { private: QuadEdgeSubdivision* subdiv; QuadEdge* lastEdge; public: LastFoundQuadEdgeLocator(QuadEdgeSubdivision *subdiv); private: virtual void init(); virtual QuadEdge* findEdge(); public: /** * Locates an edge e, such that either v is on e, or e is an edge of a triangle containing v. * The search starts from the last located edge amd proceeds on the general direction of v. * @return The caller _does not_ take ownership of the returned object. */ virtual QuadEdge* locate(const Vertex &v); }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif // GEOS_TRIANGULATE_QUADEDGE_LASTFOUNDQUADEDGELOCATOR_H geos-3.4.2/include/geos/triangulate/quadedge/LocateFailureException.h0000644000175000017500000000222712206417147025531 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/LocateFailureException.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_LOCATEFAILUREEXCEPTION_H #define GEOS_TRIANGULATE_QUADEDGE_LOCATEFAILUREEXCEPTION_H #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge class GEOS_DLL LocateFailureException : public geos::util::GEOSException { public: LocateFailureException(std::string const&msg); }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_LOCATEFAILUREEXCEPTION_H geos-3.4.2/include/geos/triangulate/quadedge/Makefile.am0000644000175000017500000000053012206417147023011 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/triangulate/quadedge geos_HEADERS = \ QuadEdge.h \ Vertex.h \ TrianglePredicate.h \ QuadEdgeSubdivision.h \ QuadEdgeLocator.h \ LastFoundQuadEdgeLocator.h \ LocateFailureException.h \ TriangleVisitor.h geos-3.4.2/include/geos/triangulate/quadedge/Makefile.in0000644000175000017500000005125512206417162023031 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/triangulate/quadedge DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = EXTRA_DIST = geosdir = $(includedir)/geos/triangulate/quadedge geos_HEADERS = \ QuadEdge.h \ Vertex.h \ TrianglePredicate.h \ QuadEdgeSubdivision.h \ QuadEdgeLocator.h \ LastFoundQuadEdgeLocator.h \ LocateFailureException.h \ TriangleVisitor.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/triangulate/quadedge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/triangulate/quadedge/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/triangulate/quadedge/QuadEdge.h0000644000175000017500000002202312206417147022606 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdge.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H #include #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge /** * A class that represents the edge data structure which implements the quadedge algebra. * The quadedge algebra was described in a well-known paper by Guibas and Stolfi, * "Primitives for the manipulation of general subdivisions and the computation of Voronoi diagrams", * ACM Transactions on Graphics, 4(2), 1985, 75-123. * * Each edge object is part of a quartet of 4 edges, * linked via their _rot references. * Any edge in the group may be accessed using a series of {@link #rot()} operations. * Quadedges in a subdivision are linked together via their next references. * The linkage between the quadedge quartets determines the topology * of the subdivision. * * The edge class does not contain separate information for vertice or faces; a vertex is implicitly * defined as a ring of edges (created using the next field). * * @author JTS: David Skea * @author JTS: Martin Davis * @author Benjamin Campbell * */ class GEOS_DLL QuadEdge { public: /** * Creates a new QuadEdge quartet from {@link Vertex} o to {@link Vertex} d. * * @param o * the origin Vertex * @param d * the destination Vertex * @return the new QuadEdge* The caller is reponsible for * freeing the returned pointer */ static std::auto_ptr makeEdge(const Vertex &o, const Vertex &d); /** * Creates a new QuadEdge connecting the destination of a to the origin of * b, in such a way that all three have the same left face after the * connection is complete. Additionally, the data pointers of the new edge * are set. * * @return the new QuadEdge* The caller is reponsible for * freeing the returned pointer */ static std::auto_ptr connect(QuadEdge &a, QuadEdge &b); /** * Splices two edges together or apart. * Splice affects the two edge rings around the origins of a and b, and, independently, the two * edge rings around the left faces of a and b. * In each case, (i) if the two rings are distinct, * Splice will combine them into one, or (ii) if the two are the same ring, Splice will break it * into two separate pieces. Thus, Splice can be used both to attach the two edges together, and * to break them apart. * * @param a an edge to splice * @param b an edge to splice * */ static void splice(QuadEdge &a, QuadEdge &b); /** * Turns an edge counterclockwise inside its enclosing quadrilateral. * * @param e the quadedge to turn */ static void swap(QuadEdge &e); private: //// the dual of this edge, directed from right to left QuadEdge *_rot; Vertex vertex; // The vertex that this edge represents QuadEdge *next; // A reference to a connected edge void* data; bool isAlive; /** * Quadedges must be made using {@link makeEdge}, * to ensure proper construction. */ QuadEdge(); public: ~QuadEdge(); /** * Free the QuadEdge quartet associated with this QuadEdge by a connect() * or makeEdge() call. * DO NOT call this function on a QuadEdge that was not returned * by connect() or makeEdge(). */ virtual void free(); /** * Gets the primary edge of this quadedge and its sym. * The primary edge is the one for which the origin * and destination coordinates are ordered * according to the standard {@link Coordinate} ordering * * @return the primary quadedge */ const QuadEdge& getPrimary() const; /** * Sets the external data value for this edge. * * @param data an object containing external data */ virtual void setData(void* data); /** * Gets the external data value for this edge. * * @return the data object */ virtual void* getData(); /** * Marks this quadedge as being deleted. * This does not free the memory used by * this quadedge quartet, but indicates * that this quadedge quartet no longer participates * in a subdivision. * * NOTE: called "delete" in JTS * */ void remove(); /** * Tests whether this edge has been deleted. * * @return true if this edge has not been deleted. */ inline bool isLive() { return isAlive; } /** * Sets the connected edge * * @param nextEdge edge */ inline void setNext(QuadEdge *next) { this->next = next; } /*************************************************************************** * QuadEdge Algebra *************************************************************************** */ /** * Gets the dual of this edge, directed from its right to its left. * * @return the rotated edge */ inline QuadEdge& rot() const { return *_rot; } /** * Gets the dual of this edge, directed from its left to its right. * * @return the inverse rotated edge. */ inline QuadEdge& invRot() const { return rot().sym(); } /** * Gets the edge from the destination to the origin of this edge. * * @return the sym of the edge */ inline QuadEdge& sym() const { return rot().rot(); } /** * Gets the next CCW edge around the origin of this edge. * * @return the next linked edge. */ inline QuadEdge& oNext() const { return *next; } /** * Gets the next CW edge around (from) the origin of this edge. * * @return the previous edge. */ inline QuadEdge& oPrev() const { return rot().oNext().rot(); } /** * Gets the next CCW edge around (into) the destination of this edge. * * @return the next destination edge. */ inline QuadEdge& dNext() const { return sym().oNext().sym(); } /** * Gets the next CW edge around (into) the destination of this edge. * * @return the previous destination edge. */ inline QuadEdge& dPrev() const { return invRot().oNext().invRot(); } /** * Gets the CCW edge around the left face following this edge. * * @return the next left face edge. */ inline QuadEdge& lNext() const { return invRot().oNext().rot(); } /** * Gets the CCW edge around the left face before this edge. * * @return the previous left face edge. */ inline QuadEdge& lPrev() const { return oNext().sym(); } /** * Gets the edge around the right face ccw following this edge. * * @return the next right face edge. */ inline QuadEdge& rNext() { return rot().oNext().invRot(); } /** * Gets the edge around the right face ccw before this edge. * * @return the previous right face edge. */ inline QuadEdge& rPrev() { return sym().oNext(); } /*********************************************************************************************** * Data Access **********************************************************************************************/ /** * Sets the vertex for this edge's origin * * @param o the origin vertex */ inline void setOrig(const Vertex &o) { vertex = o; } /** * Sets the vertex for this edge's destination * * @param d the destination vertex */ inline void setDest(const Vertex &d) { sym().setOrig(d); } /** * Gets the vertex for the edge's origin * * @return the origin vertex */ const Vertex& orig() const { return vertex; } /** * Gets the vertex for the edge's destination * * @return the destination vertex */ const Vertex& dest() const { return sym().orig(); } /** * Gets the length of the geometry of this quadedge. * * @return the length of the quadedge */ inline double getLength() const { return orig().getCoordinate().distance(dest().getCoordinate()); } /** * Tests if this quadedge and another have the same line segment geometry, * regardless of orientation. * * @param qe a quadege * @return true if the quadedges are based on the same line segment regardless of orientation */ bool equalsNonOriented(const QuadEdge &qe) const; /** * Tests if this quadedge and another have the same line segment geometry * with the same orientation. * * @param qe a quadege * @return true if the quadedges are based on the same line segment */ bool equalsOriented(const QuadEdge &qe) const; /** * Creates a {@link LineSegment} representing the * geometry of this edge. * * @return a LineSegment */ std::auto_ptr toLineSegment() const; }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H geos-3.4.2/include/geos/triangulate/quadedge/QuadEdgeLocator.h0000644000175000017500000000274112206417147024137 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdgeLocator.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGELOCATOR_H #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGELOCATOR_H namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge class Vertex; class QuadEdge; /** * An interface for classes which locate an edge in a {@link QuadEdgeSubdivision} * which either contains a given {@link Vertex} V * or is an edge of a triangle which contains V. * Implementors may utilized different strategies for * optimizing locating containing edges/triangles. * * @author JTS: Martin Davis * @author Ben Campbell */ class QuadEdgeLocator { public: virtual ~QuadEdgeLocator() = 0; //not implemented virtual QuadEdge* locate(const Vertex &v) = 0; //not implemented }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_QUADEDGELOCATOR_H geos-3.4.2/include/geos/triangulate/quadedge/QuadEdgeSubdivision.h0000644000175000017500000003000712206417147025026 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdgeSubdivision.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H #include #include #include #include #include #include #include #include namespace geos { namespace geom { class CoordinateSequence; class GeometryCollection; class GeometryFactory; class Coordinate; } namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge class QuadEdge; class TriangleVisitor; const double EDGE_COINCIDENCE_TOL_FACTOR = 1000; /** * A class that contains the {@link QuadEdge}s representing a planar * subdivision that models a triangulation. * The subdivision is constructed using the * quadedge algebra defined in the classs {@link QuadEdge}. * All metric calculations * are done in the {@link Vertex} class. * In addition to a triangulation, subdivisions * support extraction of Voronoi diagrams. * This is easily accomplished, since the Voronoi diagram is the dual * of the Delaunay triangulation. *

* Subdivisions can be provided with a tolerance value. Inserted vertices which * are closer than this value to vertices already in the subdivision will be * ignored. Using a suitable tolerance value can prevent robustness failures * from happening during Delaunay triangulation. *

* Subdivisions maintain a frame triangle around the client-created * edges. The frame is used to provide a bounded "container" for all edges * within a TIN. Normally the frame edges, frame connecting edges, and frame * triangles are not included in client processing. * * @author JTS: David Skea * @author JTS: Martin Davis * @author Benjamin Campbell */ class GEOS_DLL QuadEdgeSubdivision { public: typedef std::list QuadEdgeList; /** * Gets the edges for the triangle to the left of the given {@link QuadEdge}. * * @param startQE * @param triEdge * * @throws IllegalArgumentException * if the edges do not form a triangle */ static void getTriangleEdges(const QuadEdge &startQE, const QuadEdge* triEdge[3]); private: QuadEdgeList quadEdges; QuadEdgeList createdEdges; QuadEdge* startingEdges[3]; double tolerance; double edgeCoincidenceTolerance; Vertex frameVertex[3]; geom::Envelope frameEnv; std::auto_ptr locator; public: /** * Creates a new instance of a quad-edge subdivision based on a frame triangle * that encloses a supplied bounding box. A new super-bounding box that * contains the triangle is computed and stored. * * @param env * the bouding box to surround * @param tolerance * the tolerance value for determining if two sites are equal */ QuadEdgeSubdivision(const geom::Envelope &env, double tolerance); ~QuadEdgeSubdivision(); private: virtual void createFrame(const geom::Envelope &env); virtual void initSubdiv(QuadEdge* initEdges[3]); public: /** * Gets the vertex-equality tolerance value * used in this subdivision * * @return the tolerance value */ inline double getTolerance() const { return tolerance; } /** * Gets the envelope of the Subdivision (including the frame). * * @return the envelope */ inline const geom::Envelope& getEnvelope() const { return frameEnv; } /** * Gets the collection of base {@link QuadEdge}s (one for every pair of * vertices which is connected). * * @return a QuadEdgeList */ inline const QuadEdgeList& getEdges() const { return quadEdges; } /** * Sets the {@link QuadEdgeLocator} to use for locating containing triangles * in this subdivision. * * @param locator * a QuadEdgeLocator */ inline void setLocator(std::auto_ptr locator) { this->locator = locator; } /** * Creates a new quadedge, recording it in the edges list. * * @param o * @param d * @return */ virtual QuadEdge& makeEdge(const Vertex &o, const Vertex &d); /** * Creates a new QuadEdge connecting the destination of a to the origin of b, * in such a way that all three have the same left face after the connection * is complete. The quadedge is recorded in the edges list. * * @param a * @param b * @return */ virtual QuadEdge& connect(QuadEdge &a, QuadEdge &b); /** * Deletes a quadedge from the subdivision. Linked quadedges are updated to * reflect the deletion. * * @param e * the quadedge to delete */ void remove(QuadEdge &e); /** * Locates an edge of a triangle which contains a location * specified by a Vertex v. * The edge returned has the * property that either v is on e, or e is an edge of a triangle containing v. * The search starts from startEdge amd proceeds on the general direction of v. *

* This locate algorithm relies on the subdivision being Delaunay. For * non-Delaunay subdivisions, this may loop for ever. * * @param v the location to search for * @param startEdge an edge of the subdivision to start searching at * @returns a QuadEdge which contains v, or is on the edge of a triangle containing v * @throws LocateFailureException * if the location algorithm fails to converge in a reasonable * number of iterations. The returned pointer should not be * freed be the caller. */ QuadEdge* locateFromEdge(const Vertex &v, const QuadEdge &startEdge) const; /** * Finds a quadedge of a triangle containing a location * specified by a {@link Vertex}, if one exists. * * @param x the vertex to locate * @return a quadedge on the edge of a triangle which touches or contains the location * @return null if no such triangle exists. The returned pointer should not be * freed be the caller. */ inline QuadEdge* locate(const Vertex &v) const { return locator->locate(v); } /** * Finds a quadedge of a triangle containing a location * specified by a {@link Coordinate}, if one exists. * * @param p the Coordinate to locate * @return a quadedge on the edge of a triangle which touches or contains the location * @return null if no such triangle exists. The returned pointer should not be * freed be the caller. */ inline QuadEdge* locate(const geom::Coordinate &p) { return locator->locate(Vertex(p)); } /** * Locates the edge between the given vertices, if it exists in the * subdivision. * * @param p0 a coordinate * @param p1 another coordinate * @return the edge joining the coordinates, if present * @return null if no such edge exists * @return the caller _should not_ free the returned pointer */ QuadEdge* locate(const geom::Coordinate &p0, const geom::Coordinate &p1); /** * Inserts a new site into the Subdivision, connecting it to the vertices of * the containing triangle (or quadrilateral, if the split point falls on an * existing edge). *

* This method does NOT maintain the Delaunay condition. If desired, this must * be checked and enforced by the caller. *

* This method does NOT check if the inserted vertex falls on an edge. This * must be checked by the caller, since this situation may cause erroneous * triangulation * * @param v * the vertex to insert * @return a new quad edge terminating in v */ QuadEdge& insertSite(const Vertex &v); /** * Tests whether a QuadEdge is an edge incident on a frame triangle vertex. * * @param e * the edge to test * @return true if the edge is connected to the frame triangle */ bool isFrameEdge(const QuadEdge &e) const; /** * Tests whether a QuadEdge is an edge on the border of the frame facets and * the internal facets. E.g. an edge which does not itself touch a frame * vertex, but which touches an edge which does. * * @param e * the edge to test * @return true if the edge is on the border of the frame */ bool isFrameBorderEdge(const QuadEdge &e) const; /** * Tests whether a vertex is a vertex of the outer triangle. * * @param v * the vertex to test * @return true if the vertex is an outer triangle vertex */ bool isFrameVertex(const Vertex &v) const; /** * Tests whether a {@link Coordinate} lies on a {@link QuadEdge}, up to a * tolerance determined by the subdivision tolerance. * * @param e * a QuadEdge * @param p * a point * @return true if the vertex lies on the edge */ bool isOnEdge(const QuadEdge &e, const geom::Coordinate &p) const; /** * Tests whether a {@link Vertex} is the start or end vertex of a * {@link QuadEdge}, up to the subdivision tolerance distance. * * @param e * @param v * @return true if the vertex is a endpoint of the edge */ bool isVertexOfEdge(const QuadEdge &e, const Vertex &v) const; /** * Gets all primary quadedges in the subdivision. * A primary edge is a {@link QuadEdge} * which occupies the 0'th position in its array of associated quadedges. * These provide the unique geometric edges of the triangulation. * * @param includeFrame true if the frame edges are to be included * @return a List of QuadEdges. The caller takes ownership of the returned QuadEdgeList but not the * items it contains. */ std::auto_ptr getPrimaryEdges(bool includeFrame); /***************************************************************************** * Visitors ****************************************************************************/ void visitTriangles(TriangleVisitor *triVisitor, bool includeFrame); private: typedef std::stack QuadEdgeStack; typedef std::set QuadEdgeSet; typedef std::list< geom::CoordinateSequence*> TriList; /** * The quadedges forming a single triangle. * Only one visitor is allowed to be active at a * time, so this is safe. */ QuadEdge* triEdges[3]; /** * Stores the edges for a visited triangle. Also pushes sym (neighbour) edges * on stack to visit later. * * @param edge * @param edgeStack * @param includeFrame * @return the visited triangle edges * @return null if the triangle should not be visited (for instance, if it is * outer) */ QuadEdge** fetchTriangleToVisit(QuadEdge *edge, QuadEdgeStack &edgeStack, bool includeFrame, QuadEdgeSet &visitedEdges); /** * Gets the coordinates for each triangle in the subdivision as an array. * * @param includeFrame * true if the frame triangles should be included * @param triList a list of Coordinate[4] representing each triangle */ void getTriangleCoordinates(TriList* triList, bool includeFrame); private: class TriangleCoordinatesVisitor; public: /** * Gets the geometry for the edges in the subdivision as a {@link MultiLineString} * containing 2-point lines. * * @param geomFact the GeometryFactory to use * @return a MultiLineString. The caller takes ownership of the returned object. */ std::auto_ptr getEdges(const geom::GeometryFactory& geomFact); /** * Gets the geometry for the triangles in a triangulated subdivision as a {@link GeometryCollection} * of triangular {@link Polygon}s. * * @param geomFact the GeometryFactory to use * @return a GeometryCollection of triangular Polygons. The caller takes ownership of the returned object. */ std::auto_ptr getTriangles(const geom::GeometryFactory &geomFact); }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif //GEOS_TRIANGULATE_QUADEDGE_QUADEDGESUBDIVISION_H geos-3.4.2/include/geos/triangulate/quadedge/TrianglePredicate.h0000644000175000017500000000707512206417147024527 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/TrianglePredicate.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_TRIANGLEPREDICATE_H #define GEOS_TRIANGULATE_QUADEDGE_TRIANGLEPREDICATE_H namespace geos { namespace geom { // geos.geom class Coordinate; /** * Algorithms for computing values and predicates * associated with triangles. * For some algorithms extended-precision * implementations are provided, which are more robust * (i.e. they produce correct answers in more cases). * Also, some more robust formulations of * some algorithms are provided, which utilize * normalization to the origin. * * @author JTS: Martin Davis * @author Benjamin Campbell * */ class TrianglePredicate { public: /** * Tests if a point is inside the circle defined by * the triangle with vertices a, b, c (oriented counter-clockwise). * This test uses simple * double-precision arithmetic, and thus may not be robust. * * @param a a vertex of the triangle * @param b a vertex of the triangle * @param c a vertex of the triangle * @param P the point to test * @return true if this point is inside the circle defined by the points a, b, c */ static bool isInCircleNonRobust( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p); /** * Tests if a point is inside the circle defined by * the triangle with vertices a, b, c (oriented counter-clockwise). * This test uses simple * double-precision arithmetic, and thus is not 10% robust. * However, by using normalization to the origin * it provides improved robustness and increased performance. *

* Based on code by J.R.Shewchuk. * * * @param a a vertex of the triangle * @param b a vertex of the triangle * @param c a vertex of the triangle * @param P the point to test * @return true if this point is inside the circle defined by the points a, b, c */ static bool isInCircleNormalized( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p); private: /** * Computes twice the area of the oriented triangle (a, b, c), i.e., the area is positive if the * triangle is oriented counterclockwise. * * @param a a vertex of the triangle * @param b a vertex of the triangle * @param c a vertex of the triangle */ static double triArea(const Coordinate &a, const Coordinate &b, const Coordinate &c); public: /** * Tests if a point is inside the circle defined by * the triangle with vertices a, b, c (oriented counter-clockwise). * This method uses more robust computation. * * @param a a vertex of the triangle * @param b a vertex of the triangle * @param c a vertex of the triangle * @param P the point to test * @return true if this point is inside the circle defined by the points a, b, c */ static bool isInCircleRobust( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p); } ; } // namespace geos.geom } // namespace geos #endif //GEOS_TRIANGULATE_QUADEDGE_TRIANGLEPREDICATE_H geos-3.4.2/include/geos/triangulate/quadedge/TriangleVisitor.h0000644000175000017500000000270612206417147024262 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/TriangleVisitor.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_TRIANGLEVISITOR_H #define GEOS_TRIANGULATE_QUADEDGE_TRIANGLEVISITOR_H #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge /** * An interface for algorithms which process the triangles in a {@link QuadEdgeSubdivision}. * * @author JTS: Martin Davis * @author Benjamin Campbell */ class GEOS_DLL TriangleVisitor { public: /** * Visits the {@link QuadEdge}s of a triangle. * * @param triEdges an array of the 3 quad edges in a triangle (in CCW order) */ virtual void visit(QuadEdge* triEdges[3]) = 0; virtual ~TriangleVisitor() = 0 ; private: } ; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes #endif // GEOS_TRIANGULATE_QUADEDGE_TRIANGLEVISITOR_H geos-3.4.2/include/geos/triangulate/quadedge/Vertex.h0000644000175000017500000001635512206417147022417 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/Vertex.java r524 * **********************************************************************/ #ifndef GEOS_TRIANGULATE_QUADEDGE_VERTEX_H #define GEOS_TRIANGULATE_QUADEDGE_VERTEX_H #include #include #include #include //fwd declarations namespace geos { namespace triangulate { namespace quadedge { class QuadEdge; } } } namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge /** * Models a site (node) in a {@link QuadEdgeSubdivision}. * The sites can be points on a line string representing a * linear site. * * The vertex can be considered as a vector with a norm, length, inner product, cross * product, etc. Additionally, point relations (e.g., is a point to the left of a line, the circle * defined by this point and two others, etc.) are also defined in this class. * * It is common to want to attach user-defined data to * the vertices of a subdivision. * One way to do this is to subclass Vertex * to carry any desired information (see {@link ConstraintVertex}). * * @author JTS: David Skea * @author JTS: Martin Davis * @author Benjamin Campbell * */ class GEOS_DLL Vertex { public: static const int LEFT = 0; static const int RIGHT = 1; static const int BEYOND = 2; static const int BEHIND = 3; static const int BETWEEN = 4; static const int ORIGIN = 5; static const int DESTINATION = 6; private: geom::Coordinate p; public: Vertex(double _x, double _y); Vertex(double _x, double _y, double _z); Vertex(const geom::Coordinate &_p); Vertex(); inline double getX() const { return p.x; } inline double getY() const { return p.y; } inline double getZ() const { return p.z; } inline void setZ(double _z) { p.z = _z; } inline const geom::Coordinate& getCoordinate() const { return p; } inline bool equals(const Vertex &_x) const { if (p.x == _x.getX() && p.y == _x.getY()) return true; return false; } inline bool equals(const Vertex &_x, double tolerance) const { if (p.distance(_x.getCoordinate()) < tolerance) return true; return false; } virtual int classify(const Vertex &p0, const Vertex &p1); /** * Computes the cross product k = u X v. * * @param v a vertex * @return returns the magnitude of u X v */ inline double crossProduct(const Vertex &v) const { return (p.x * v.getY() - p.y * v.getX()); } /** * Computes the inner or dot product * * @param v, a vertex * @return returns the dot product u.v */ inline double dot(Vertex v) const { return (p.x * v.getX() + p.y * v.getY()); } /** * Computes the scalar product c(v) * * @param v, a vertex * @return returns the scaled vector */ inline std::auto_ptr times(double c) const { return std::auto_ptr(new Vertex(c * p.x, c * p.y)); } /* Vector addition */ inline std::auto_ptr sum(Vertex v) const { return std::auto_ptr(new Vertex(p.x + v.getX(), p.y + v.getY())); } /* and subtraction */ inline std::auto_ptr sub(const Vertex &v) const { return std::auto_ptr(new Vertex(p.x - v.getX(), p.y - v.getY())); } /* magnitude of vector */ inline double magn() const { return (sqrt(p.x * p.x + p.y * p.y)); } /* returns k X v (cross product). this is a vector perpendicular to v */ inline std::auto_ptr cross() const { return std::auto_ptr(new Vertex(p.y, -p.x)); } /** ************************************************************* */ /*********************************************************************************************** * Geometric primitives / **********************************************************************************************/ /** * Tests if the vertex is inside the circle defined by * the triangle with vertices a, b, c (oriented counter-clockwise). * * @param a a vertex of the triangle * @param b a vertex of the triangle * @param c a vertex of the triangle * @return true if this vertex is in the circumcircle of (a,b,c) */ virtual bool isInCircle(const Vertex &a, const Vertex &b, const Vertex &c) const; /** * Tests whether the triangle formed by this vertex and two * other vertices is in CCW orientation. * * @param b a vertex * @param c a vertex * @returns true if the triangle is oriented CCW */ inline bool isCCW(const Vertex &b, const Vertex &c) const { // is equal to the signed area of the triangle return (b.p.x - p.x) * (c.p.y - p.y) - (b.p.y - p.y) * (c.p.x - p.x) > 0; } bool rightOf(const QuadEdge &e) const; bool leftOf(const QuadEdge &e) const; private: static std::auto_ptr bisector(const Vertex &a, const Vertex &b); inline double distance(const Vertex &v1, const Vertex &v2) { return sqrt(pow(v2.getX() - v1.getX(), 2.0) + pow(v2.getY() - v1.getY(), 2.0)); } /** * Computes the value of the ratio of the circumradius to shortest edge. If smaller than some * given tolerance B, the associated triangle is considered skinny. For an equal lateral * triangle this value is 0.57735. The ratio is related to the minimum triangle angle theta by: * circumRadius/shortestEdge = 1/(2sin(theta)). * * @param b second vertex of the triangle * @param c third vertex of the triangle * @return ratio of circumradius to shortest edge. */ virtual double circumRadiusRatio(const Vertex &b, const Vertex &c); /** * returns a new vertex that is mid-way between this vertex and another end point. * * @param a the other end point. * @return the point mid-way between this and that. */ virtual std::auto_ptr midPoint(const Vertex &a); /** * Computes the centre of the circumcircle of this vertex and two others. * * @param b * @param c * @return the Coordinate which is the circumcircle of the 3 points. */ virtual std::auto_ptr circleCenter(const Vertex &b, const Vertex &c) const; /** * For this vertex enclosed in a triangle defined by three verticies v0, v1 and v2, interpolate * a z value from the surrounding vertices. */ virtual double interpolateZValue(const Vertex &v0, const Vertex &v1, const Vertex &v2) const; /** * Interpolates the Z value of a point enclosed in a 3D triangle. */ static double interpolateZ(const geom::Coordinate &p, const geom::Coordinate &v0, const geom::Coordinate &v1, const geom::Coordinate &v2); /** * Computes the interpolated Z-value for a point p lying on the segment p0-p1 * * @param p * @param p0 * @param p1 * @return */ static double interpolateZ(const geom::Coordinate &p, const geom::Coordinate &p0, const geom::Coordinate &p1); }; } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace geos #endif //GEOS_TRIANGULATE_QUADEDGE_VERTEX_H geos-3.4.2/include/geos/unload.h0000644000175000017500000000136112206417150016307 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #ifndef GEOS_UNLOAD_H #define GEOS_UNLOAD_H //xie add for realse static memory 2003,10,06 namespace geos { namespace io { class GEOS_DLL Unload { private: Unload(void) {} ~Unload(void) {} public: static void Release(); }; } } #endif geos-3.4.2/include/geos/util/0000755000175000017500000000000012206417232015631 5ustar frankiefrankiegeos-3.4.2/include/geos/util/Assert.h0000644000175000017500000000266412206417150017252 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_ASSERT_H #define GEOS_UTIL_ASSERT_H #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace util { // geos.util class GEOS_DLL Assert { public: static void isTrue(bool assertion, const std::string& message); static void isTrue(bool assertion) { isTrue(assertion, std::string()); } static void equals(const geom::Coordinate& expectedValue, const geom::Coordinate& actualValue, const std::string& message); static void equals(const geom::Coordinate& expectedValue, const geom::Coordinate& actualValue) { equals(expectedValue, actualValue, std::string()); } static void shouldNeverReachHere(const std::string& message); static void shouldNeverReachHere() { shouldNeverReachHere(std::string()); } }; } // namespace geos.util } // namespace geos #endif // GEOS_UTIL_ASSERT_H geos-3.4.2/include/geos/util/AssertionFailedException.h0000644000175000017500000000235112206417150022735 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_ASSERTIONFAILEDEXCEPTION_H #define GEOS_UTIL_ASSERTIONFAILEDEXCEPTION_H #include #include #include namespace geos { namespace util { // geos.util /** \class AssertionFailedException util.h geos.h * \brief Indicates a bug in GEOS code. */ class GEOS_DLL AssertionFailedException: public GEOSException { public: AssertionFailedException() : GEOSException("AssertionFailedException", "") {} AssertionFailedException(const std::string& msg) : GEOSException("AssertionFailedException", msg) {} ~AssertionFailedException() throw() {} }; } // namespace geos.util } // namespace geos #endif // GEOS_UTIL_ASSERTIONFAILEDEXCEPTION_H geos-3.4.2/include/geos/util/CoordinateArrayFilter.h0000644000175000017500000000303112206417150022232 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_COORDINATEARRAYFILTER_H #define GEOS_UTIL_COORDINATEARRAYFILTER_H #include #include #include #include #include namespace geos { namespace util { // geos::util /** * A CoordinateFilter that adds read-only pointers * to every Coordinate in a Geometry to a given * vector. * * Last port: util/CoordinateArrayFilter.java rev. 1.15 */ class GEOS_DLL CoordinateArrayFilter: public geom::CoordinateFilter { private: geom::Coordinate::ConstVect &pts; // target vector reference public: /** * Constructs a CoordinateArrayFilter. * * @param target The destination vector. */ CoordinateArrayFilter(geom::Coordinate::ConstVect& target) : pts(target) {} virtual ~CoordinateArrayFilter() {} virtual void filter_ro(const geom::Coordinate *coord) { pts.push_back(coord); } }; } // namespace geos.util } // namespace geos #endif // GEOS_UTIL_COORDINATEARRAYFILTER_H geos-3.4.2/include/geos/util/GEOSException.h0000644000175000017500000000302012206417150020410 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_GEOSEXCEPTION_H #define GEOS_UTIL_GEOSEXCEPTION_H #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace util { // geos.util /** * * \brief Base class for all GEOS exceptions. * * Exceptions are thrown as pointers to this type. * Use toString() to get a readable message. */ class GEOS_DLL GEOSException: public std::exception { std::string _msg; public: GEOSException() : _msg("Unknown error") {} GEOSException(std::string const& msg) : _msg(msg) {} GEOSException(std::string const& name, std::string const& msg) : _msg(name+": "+msg) {} virtual ~GEOSException() throw() {} const char* what() const throw() { return _msg.c_str(); } }; } // namespace geos.util } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_UTIL_GEOSEXCEPTION_H geos-3.4.2/include/geos/util/GeometricShapeFactory.h0000644000175000017500000001136312206417150022234 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: util/GeometricShapeFactory.java rev 1.14 (JTS-1.10+) * (2009-03-19) * **********************************************************************/ #ifndef GEOS_UTIL_GEOMETRICSHAPEFACTORY_H #define GEOS_UTIL_GEOMETRICSHAPEFACTORY_H #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif // Forward declarations namespace geos { namespace geom { class Coordinate; class Envelope; class Polygon; class GeometryFactory; class PrecisionModel; class LineString; } } namespace geos { namespace util { // geos::util /** * Computes various kinds of common geometric shapes. * * Allows various ways of specifying the location and extent of the shapes, * as well as number of line segments used to form them. * * Example: *

 *  GeometricShapeFactory gsf(factory);
 *  gsf.setSize(100);
 *  gsf.setNumPoints(100);
 *  gsf.setBase(Coordinate(0, 0));
 *  std::auto_ptr rect ( gsf.createRectangle() );
 * 
* */ class GEOS_DLL GeometricShapeFactory { protected: class Dimensions { public: Dimensions(); geom::Coordinate base; geom::Coordinate centre; double width; double height; void setBase(const geom::Coordinate& newBase); void setCentre(const geom::Coordinate& newCentre); void setSize(double size); void setWidth(double nWidth); void setHeight(double nHeight); // Return newly-allocated object, ownership transferred geom::Envelope* getEnvelope() const; }; const geom::GeometryFactory* geomFact; // externally owned const geom::PrecisionModel* precModel; // externally owned Dimensions dim; int nPts; geom::Coordinate coord(double x, double y) const; public: /** * \brief * Create a shape factory which will create shapes using the given * GeometryFactory. * * @param factory the factory to use. You need to keep the * factory alive for the whole GeometricShapeFactory * life time. * */ GeometricShapeFactory(const geom::GeometryFactory *factory); virtual ~GeometricShapeFactory() {} /** * \brief Creates an elliptical arc, as a LineString. * * The arc is always created in a counter-clockwise direction. * * @param startAng start angle in radians * @param angExtent size of angle in radians * @return an elliptical arc */ geom::LineString* createArc(double startAng, double angExtent); /** * \brief Creates an elliptical arc polygon. * * The polygon is formed from the specified arc of an ellipse * and the two radii connecting the endpoints to the centre of * the ellipse. * * @param startAng start angle in radians * @param angExtent size of angle in radians * @return an elliptical arc polygon */ geom::Polygon* createArcPolygon(double startAng, double angExt); /** * \brief Creates a circular Polygon. * * @return a circle */ geom::Polygon* createCircle(); /** * \brief Creates a rectangular Polygon. * * @return a rectangular Polygon */ geom::Polygon* createRectangle(); /** * \brief * Sets the location of the shape by specifying the base coordinate * (which in most cases is the * lower left point of the envelope * containing the shape). * * @param base the base coordinate of the shape */ void setBase(const geom::Coordinate& base); /** * \brief * Sets the location of the shape by specifying the centre of * the shape's bounding box * * @param centre the centre coordinate of the shape */ void setCentre(const geom::Coordinate& centre); /** * \brief Sets the height of the shape. * * @param height the height of the shape */ void setHeight(double height); /** * \brief Sets the total number of points in the created Geometry */ void setNumPoints(int nNPts); /** * \brief * Sets the size of the extent of the shape in both x and y directions. * * @param size the size of the shape's extent */ void setSize(double size); /** * \brief Sets the width of the shape. * * @param width the width of the shape */ void setWidth(double width); }; } // namespace geos::util } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_UTIL_GEOMETRICSHAPEFACTORY_H geos-3.4.2/include/geos/util/IllegalArgumentException.h0000644000175000017500000000250512206417150022736 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_ILLEGALARGUMENTEXCEPTION_H #define GEOS_UTIL_ILLEGALARGUMENTEXCEPTION_H #include #include #include namespace geos { namespace util { // geos::util /** * \brief Indicates one or more legal arguments. * * This exception is thrown - for example - when * trying to apply set-theoretic methods to a * GeometryCollection object. */ class GEOS_DLL IllegalArgumentException: public GEOSException { public: IllegalArgumentException() : GEOSException("IllegalArgumentException", "") {} IllegalArgumentException(const std::string& msg) : GEOSException("IllegalArgumentException", msg) {} ~IllegalArgumentException() throw() {} }; } // namespace geos::util } // namespace geos #endif // GEOS_UTIL_ILLEGALARGUMENTEXCEPTION_H geos-3.4.2/include/geos/util/IllegalStateException.h0000644000175000017500000000214712206417150022236 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_ILLEGALSTATEEXCEPTION_H #define GEOS_UTIL_ILLEGALSTATEEXCEPTION_H #include #include #include namespace geos { namespace util { // geos::util /// Indicates an illegal state class GEOS_DLL IllegalStateException: public GEOSException { public: IllegalStateException() : GEOSException("IllegalStateException", "") {} IllegalStateException(const std::string& msg) : GEOSException("IllegalStateException", msg) {} ~IllegalStateException() throw() {} }; } // namespace geos::util } // namespace geos #endif // GEOS_UTIL_ILLEGALSTATEEXCEPTION_H geos-3.4.2/include/geos/util/Interrupt.h0000644000175000017500000000340712206417150020001 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_INTERRUPT_H #define GEOS_UTIL_INTERRUPT_H #include namespace geos { namespace util { // geos::util #define GEOS_CHECK_FOR_INTERRUPTS() geos::util::Interrupt::process() /** Used to manage interruption requests and callbacks */ class GEOS_DLL Interrupt { public: typedef void (Callback)(void); /** * Request interruption of operations * * Operations will be terminated by a GEOSInterrupt * exception at first occasion. */ static void request(); /** Cancel a pending interruption request */ static void cancel(); /** Check if an interruption request is pending */ static bool check(); /** \brief * Register a callback that will be invoked * before checking for interruption requests. * * NOTE that interruption request checking may happen * frequently so any callback would better be quick. * * The callback can be used to call Interrupt::request() * */ static Callback* registerCallback(Callback *cb); /** * Invoke the callback, if any. Process pending interruption, if any. * */ static void process(); /* Perform the actual interruption (simply throw an exception) */ static void interrupt(); }; } // namespace geos::util } // namespace geos #endif // GEOS_UTIL_INTERRUPT_H geos-3.4.2/include/geos/util/Machine.h0000644000175000017500000000143712206417150017352 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2009 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_MACHINE_H_INCLUDED #define GEOS_UTIL_MACHINE_H_INCLUDED /** * Check endianness of current machine. * @return 0 for big_endian | xdr; 1 == little_endian | ndr */ inline int getMachineByteOrder() { static int endian_check = 1; // don't modify !! return *((char *)&endian_check); } #endif geos-3.4.2/include/geos/util/Makefile.am0000644000175000017500000000075212206417150017670 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = geosdir = $(includedir)/geos/util geos_HEADERS = \ Assert.h \ AssertionFailedException.h \ CoordinateArrayFilter.h \ GeometricShapeFactory.h \ GEOSException.h \ IllegalArgumentException.h \ IllegalStateException.h \ Interrupt.h \ math.h \ Machine.h \ TopologyException.h \ UniqueCoordinateArrayFilter.h \ UnsupportedOperationException.h geos-3.4.2/include/geos/util/Makefile.in0000644000175000017500000003667212206417162017716 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = #EXTRA_DIST = VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/geos/util DIST_COMMON = $(geos_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(geosdir)" HEADERS = $(geos_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ geosdir = $(includedir)/geos/util geos_HEADERS = \ Assert.h \ AssertionFailedException.h \ CoordinateArrayFilter.h \ GeometricShapeFactory.h \ GEOSException.h \ IllegalArgumentException.h \ IllegalStateException.h \ Interrupt.h \ math.h \ Machine.h \ TopologyException.h \ UniqueCoordinateArrayFilter.h \ UnsupportedOperationException.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/geos/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/geos/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-geosHEADERS: $(geos_HEADERS) @$(NORMAL_INSTALL) test -z "$(geosdir)" || $(MKDIR_P) "$(DESTDIR)$(geosdir)" @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(geosdir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(geosdir)" || exit $$?; \ done uninstall-geosHEADERS: @$(NORMAL_UNINSTALL) @list='$(geos_HEADERS)'; test -n "$(geosdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(geosdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(geosdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(geosdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-geosHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-geosHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-geosHEADERS install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-geosHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/include/geos/util/TopologyException.h0000644000175000017500000000305312206417150021475 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_TOPOLOGYEXCEPTION_H #define GEOS_UTIL_TOPOLOGYEXCEPTION_H #include #include #include // to be removed when .inl is available #include namespace geos { namespace util { // geos.util /** * \class TopologyException util.h geos.h * * \brief * Indicates an invalid or inconsistent topological situation encountered * during processing */ class GEOS_DLL TopologyException: public GEOSException { public: TopologyException() : GEOSException("TopologyException", "") {} TopologyException(const std::string& msg) : GEOSException("TopologyException", msg) {} TopologyException(const std::string& msg, const geom::Coordinate& newPt) : GEOSException("TopologyException", msg + " at " + newPt.toString()), pt(newPt) {} ~TopologyException() throw() {} geom::Coordinate& getCoordinate() { return pt; } private: geom::Coordinate pt; }; } // namespace geos::util } // namespace geos #endif // GEOS_UTIL_TOPOLOGYEXCEPTION_H geos-3.4.2/include/geos/util/UniqueCoordinateArrayFilter.h0000644000175000017500000000475612206417150023440 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H #define GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H #include #include #include #include #include #include #include #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class #endif namespace geos { namespace util { // geos::util /* * A CoordinateFilter that fills a vector of Coordinate const pointers. * The set of coordinates contains no duplicate points. * * Last port: util/UniqueCoordinateArrayFilter.java rev. 1.17 */ class GEOS_DLL UniqueCoordinateArrayFilter: public geom::CoordinateFilter { public: /** * Constructs a CoordinateArrayFilter. * * @param target The destination set. */ UniqueCoordinateArrayFilter(geom::Coordinate::ConstVect &target) : pts(target) {} /** * Destructor. * Virtual dctor promises appropriate behaviour when someone will * delete a derived-class object via a base-class pointer. * http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7 */ virtual ~UniqueCoordinateArrayFilter() {} /** * Performs a filtering operation with or on coord in "read-only" mode. * @param coord The "read-only" Coordinate to which * the filter is applied. */ virtual void filter_ro(const geom::Coordinate *coord) { if ( uniqPts.insert(coord).second ) { pts.push_back(coord); } } private: geom::Coordinate::ConstVect &pts; // target set reference geom::Coordinate::ConstSet uniqPts; // unique points set // Declare type as noncopyable UniqueCoordinateArrayFilter(const UniqueCoordinateArrayFilter& other); UniqueCoordinateArrayFilter& operator=(const UniqueCoordinateArrayFilter& rhs); }; } // namespace geos::util } // namespace geos #ifdef _MSC_VER #pragma warning(pop) #endif #endif // GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H geos-3.4.2/include/geos/util/UnsupportedOperationException.h0000644000175000017500000000264112206417150024074 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_UNSUPPORTEDOPERATIONEXCEPTION_H #define GEOS_UTIL_UNSUPPORTEDOPERATIONEXCEPTION_H #include #include #include namespace geos { namespace util { // geos::util /** * \class UnsupportedOperationException util.h geos.h * * \brief Indicates that the requested operation is unsopported. * * This exception is thrown - for example - when requesting the * X or Y member of an empty Point */ class GEOS_DLL UnsupportedOperationException: public GEOSException { public: UnsupportedOperationException() : GEOSException("UnsupportedOperationException", "") {} UnsupportedOperationException(const std::string& msg) : GEOSException("UnsupportedOperationException", msg) {} ~UnsupportedOperationException() throw() {} }; } // namespace geos::util } // namespace geos #endif // GEOS_UTIL_UNSUPPORTEDOPERATIONEXCEPTION_H geos-3.4.2/include/geos/util/math.h0000644000175000017500000000213112206417150016727 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_UTIL_MATH_H #define GEOS_UTIL_MATH_H namespace geos { namespace util { /// Symmetric Rounding Algorithm double sym_round(double val); /// Asymmetric Rounding Algorithm double java_math_round(double val); /// Equivalent to Java Math.rint() double rint_vc(double val); /// Default rounding method for GEOS /// /// @note Always use this rounding method, to easy easy switching /// between different rounding method for the whole codebase. inline double round(double val) { return java_math_round(val); } }} // namespace geos::util #endif // GEOS_UTIL_MATH_H geos-3.4.2/include/geos/util.h0000644000175000017500000000246112206417150016004 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Utility header to retain a bit of backward compatibility. * Try to avoid including this header directly. * **********************************************************************/ #ifndef GEOS_UTIL_H #define GEOS_UTIL_H //#include #include #include #include //#include //#include //#include #include //#include // // Private macros definition // namespace geos { template void ignore_unused_variable_warning(T const& ) {} } #endif // GEOS_UTIL_H geos-3.4.2/include/geos/version.h.in0000644000175000017500000000166412206417150017125 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_VERSION_H_INCLUDED #define GEOS_VERSION_H_INCLUDED #ifndef GEOS_VERSION_MAJOR #define GEOS_VERSION_MAJOR @VERSION_MAJOR@ #endif #ifndef GEOS_VERSION_MINOR #define GEOS_VERSION_MINOR @VERSION_MINOR@ #endif #ifndef GEOS_VERSION_PATCH #define GEOS_VERSION_PATCH @VERSION_PATCH@ #endif #ifndef GEOS_VERSION #define GEOS_VERSION "@VERSION@" #endif #ifndef GEOS_JTS_PORT #define GEOS_JTS_PORT "@JTS_PORT@" #endif #endif // GEOS_VERSION_H_INCLUDED geos-3.4.2/include/geos/version.h.vc0000644000175000017500000000237112206417147017131 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2007 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * This is a version header dedicated for use with Microsoft Visual C++ * compiler. * NOTE: Remember to update this file manually when version * number changes. * **********************************************************************/ #ifndef GEOS_VERSION_H_INCLUDED #define GEOS_VERSION_H_INCLUDED #ifndef _MSC_VER #error "This version.h intended for use with MS Visual C++" #endif #ifndef GEOS_VERSION_MAJOR #define GEOS_VERSION_MAJOR 3 #endif #ifndef GEOS_VERSION_MINOR #define GEOS_VERSION_MINOR 4 #endif #ifndef GEOS_VERSION_PATCH #define GEOS_VERSION_PATCH 2 #endif #ifndef GEOS_VERSION #define GEOS_VERSION "3.4.2" #endif #ifndef GEOS_JTS_PORT #define GEOS_JTS_PORT "1.12.0" #endif #endif // GEOS_VERSION_H_INCLUDED geos-3.4.2/include/geos.h0000644000175000017500000000154212206417150015026 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_H #define GEOS_H /* * \file geos.h * \brief * This file is intended as an include wrapper for client application. * It includes commonly needed GEOS headers. */ #include #include #include #include #include /// Basic namespace for all GEOS functionalities. namespace geos { } #endif geos-3.4.2/install-sh0000755000175000017500000003253712206417160014312 0ustar frankiefrankie#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: geos-3.4.2/ltmain.sh0000755000175000017500000073337712206417154014146 0ustar frankiefrankie# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool 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 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION="2.2.6b Debian-2.2.6b-2" TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 geos-3.4.2/macros/0000755000175000017500000000000012206417240013557 5ustar frankiefrankiegeos-3.4.2/macros/Makefile.am0000644000175000017500000000024012206417150015607 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ GEOS_VERSION=@GEOS_VERSION@ EXTRA_DIST = geos.m4 geos-3.4.2/macros/Makefile.in0000644000175000017500000002653312206417162015640 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = macros DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ GEOS_VERSION = @GEOS_VERSION@ EXTRA_DIST = geos.m4 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu macros/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu macros/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/macros/ac_pkg_swig.m40000644000175000017500000001515312206417150016303 0ustar frankiefrankiednl @synopsis AC_PROG_SWIG([major.minor.micro]) dnl dnl This macro searches for a SWIG installation on your system. If dnl found you should call SWIG via $(SWIG). You can use the optional dnl first argument to check if the version of the available SWIG is dnl greater than or equal to the value of the argument. It should have dnl the format: N[.N[.N]] (N is a number between 0 and 999. Only the dnl first N is mandatory.) dnl dnl If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks dnl that the swig package is this version number or higher. dnl dnl In configure.in, use as: dnl dnl AC_PROG_SWIG(1.3.17) dnl SWIG_ENABLE_CXX dnl SWIG_MULTI_MODULE_SUPPORT dnl SWIG_PYTHON dnl dnl @category InstalledPackages dnl @author Sebastian Huber dnl @author Alan W. Irwin dnl @author Rafael Laboissiere dnl @author Andrew Collier dnl @version 2004-09-20 dnl @license GPLWithACException dnl dnl Fixed by Sandro Santilli to consider 2.0.0 > 1.3.37 (2010-06-15) dnl AC_DEFUN([AC_PROG_SWIG],[ AC_PATH_PROG([SWIG],[swig]) if test -z "$SWIG" ; then AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org]) SWIG='' elif test -n "$1" ; then AC_MSG_CHECKING([for SWIG version]) [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] AC_MSG_RESULT([$swig_version]) if test -n "$swig_version" ; then # Calculate the required version number components [required=$1] [required_major=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_major" ; then [required_major=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_minor=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_minor" ; then [required_minor=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_patch=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_patch" ; then [required_patch=0] fi # Calculate the available version number components [available=$swig_version] [available_major=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_major" ; then [available_major=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_minor=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_minor" ; then [available_minor=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_patch=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_patch" ; then [available_patch=0] fi [required_full=`printf %2.2d%2.2d%2.2d%2.2d $required_major $required_minor $required_patch]` [available_full=`printf %2.2d%2.2d%2.2d%2.2d $available_major $available_minor $available_patch]` if test $available_full -lt $required_full; then AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version. You should look at http://www.swig.org]) SWIG='' else AC_MSG_NOTICE([SWIG executable is '$SWIG']) SWIG_LIB=`$SWIG -swiglib | sed -e :a -e N -e 's/\n/ /' -e ta` AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB']) fi else AC_MSG_WARN([cannot determine SWIG version]) SWIG='' fi fi AC_SUBST([SWIG_LIB]) ]) # SWIG_ENABLE_CXX() # # Enable SWIG C++ support. This affects all invocations of $(SWIG). AC_DEFUN([SWIG_ENABLE_CXX],[ AC_REQUIRE([AC_PROG_SWIG]) AC_REQUIRE([AC_PROG_CXX]) SWIG="$SWIG -c++" ]) # SWIG_MULTI_MODULE_SUPPORT() # # Enable support for multiple modules. This effects all invocations # of $(SWIG). You have to link all generated modules against the # appropriate SWIG runtime library. If you want to build Python # modules for example, use the SWIG_PYTHON() macro and link the # modules against $(SWIG_PYTHON_LIBS). # AC_DEFUN([SWIG_MULTI_MODULE_SUPPORT],[ AC_REQUIRE([AC_PROG_SWIG]) SWIG="$SWIG -noruntime" ]) # SWIG_PYTHON([use-shadow-classes = {no, yes}]) # # Checks for Python and provides the $(SWIG_PYTHON_CPPFLAGS), # and $(SWIG_PYTHON_OPT) output variables. # # $(SWIG_PYTHON_OPT) contains all necessary SWIG options to generate # code for Python. Shadow classes are enabled unless the value of the # optional first argument is exactly 'no'. If you need multi module # support (provided by the SWIG_MULTI_MODULE_SUPPORT() macro) use # $(SWIG_PYTHON_LIBS) to link against the appropriate library. It # contains the SWIG Python runtime library that is needed by the type # check system for example. AC_DEFUN([SWIG_PYTHON],[ AC_REQUIRE([AC_PROG_SWIG]) AC_REQUIRE([AC_PYTHON_DEVEL]) test "x$1" != "xno" || swig_shadow=" -noproxy" AC_SUBST([SWIG_PYTHON_OPT],["-python -modern$swig_shadow"]) AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS]) ]) dnl @synopsis AC_LIB_WAD dnl dnl This macro searches for installed WAD library. dnl AC_DEFUN([AC_LIB_WAD], [ AC_REQUIRE([AC_PYTHON_DEVEL]) AC_ARG_ENABLE(wad, AC_HELP_STRING([--enable-wad], [enable wad module]), [ case "${enableval}" in no) ;; *) if test "x${enableval}" = xyes; then check_wad="yes" fi ;; esac ], []) if test -n "$check_wad"; then AC_CHECK_LIB(wadpy, _init, [WADPY=-lwadpy], [], $PYTHON_LDFLAGS $PYTHON_EXTRA_LIBS) AC_SUBST(WADPY) fi ]) geos-3.4.2/macros/ac_python_devel.m40000644000175000017500000000632512206417150017172 0ustar frankiefrankieAC_DEFUN([AC_PYTHON_DEVEL],[ # # should allow for checking of python version here... # AC_REQUIRE([AM_PATH_PYTHON]) base_python_path=`echo $PYTHON | sed "s,/bin.*$,,"` # Need to fix up a couple of problems on Windows/MingW: # 1. python lib is named with MAJOR.VERSION collapsed in a single value, # so libpython2.4 versus libpython24 # 2. Directory names have the same issue as item 1 so # python2.4 versus python24 # 3. Change paths from c:\python\include to c:/python/include. if test $am_cv_python_platform = "win32" ; then # Fix python path base_python_path=`echo $PYTHON | sed "s,/[[^/]]*$,,"` PYTHON_VERSION=`echo $PYTHON_VERSION | sed "s/\.//"` AC_SUBST([PYTHON_VERSION], [$PYTHON_VERSION]) pythondir=`echo $pythondir | sed 's,\\\,/,g'` AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) pyexecdir=`echo $pyexecdir | sed 's,\\\,/,g'` AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) fi # Check for Python include path AC_MSG_CHECKING([for Python include path]) for i in "$base_python_path/include/python$PYTHON_VERSION/" "$base_python_path/include/python/" "$base_python_path/include/" "$base_python_path/" ; do python_path=`find $i -type f -name Python.h -print 2> /dev/null | sed "1q"` if test -n "$python_path" ; then break fi done python_path=`echo $python_path | sed "s,/Python.h$,,"` AC_MSG_RESULT([$python_path]) if test -z "$python_path" ; then AC_MSG_ERROR([cannot find Python include path]) fi AC_SUBST([PYTHON_CPPFLAGS],[-I$python_path]) # Check for Python library path AC_MSG_CHECKING([for Python library path]) for i in "$base_python_path/lib/python$PYTHON_VERSION/config/" "$base_python_path/lib/python$PYTHON_VERSION/" "$base_python_path/lib/python/config/" "$base_python_path/lib/python/" "$base_python_path/" "$base_python_path/libs/" ; do python_path=`find $i -name libpython$PYTHON_VERSION.* -print 2> /dev/null | sed "1q"` if test -n "$python_path" ; then break fi done python_path=`echo $python_path | sed "s,/libpython.*$,,"` AC_MSG_RESULT([$python_path]) if test -z "$python_path" ; then AC_MSG_ERROR([cannot find Python library path]) fi AC_SUBST([PYTHON_LDFLAGS],["-L$python_path -lpython$PYTHON_VERSION"]) # python_site=`echo $base_python_path | sed "s/config/site-packages/"` AC_SUBST([PYTHON_SITE_PKG],[$python_site]) # # libraries which must be linked in when embedding # AC_MSG_CHECKING(python extra libraries) PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ conf = distutils.sysconfig.get_config_var; \ print (conf('LOCALMODLIBS') or '')+' '+(conf('LIBS') or '')" AC_MSG_RESULT($PYTHON_EXTRA_LIBS)` AC_SUBST(PYTHON_EXTRA_LIBS) ]) geos-3.4.2/macros/geos.m40000644000175000017500000000557112206417150014766 0ustar frankiefrankiednl dnl GEOS_INIT (MINIMUM_VERSION) dnl dnl Test for GEOS: define HAVE_GEOS, GEOS_LIBS, GEOS_C_LIBS, GEOS_CFLAGS, GEOS_VERSION dnl dnl Call as GEOS_INIT or GEOS_INIT(minimum version) in configure.in. Test dnl HAVE_GEOS (yes|no) afterwards. If yes, all other vars above can be dnl used in program. dnl dnl UPDATE 2006/07/06 dnl Now, --with-geos takes values: yes or no, or full path to the geos-config dnl utility. Note that the utility can have different name, dnl e.g. geos-config-cvs. dnl Example: --with-geos=/home/foo/usr/bin/geos-config-cvs dnl AC_DEFUN([GEOS_INIT],[ AC_SUBST(GEOS_LIBS) AC_SUBST(GEOS_CFLAGS) AC_SUBST(GEOS_C_LIBS) AC_SUBST(GEOS_C_CFLAGS) AC_SUBST(HAVE_GEOS) AC_SUBST(GEOS_VERSION) if test x"$with_geos" = x"no" ; then AC_MSG_RESULT([GEOS support disabled]) GEOS_CONFIG="no" HAVE_GEOS="no" elif test x"$with_geos" = x"yes" -o x"$with_geos" = x"" ; then AC_PATH_PROG([GEOS_CONFIG], [geos-config], [no]) else ac_geos_config=`basename $with_geos` ac_geos_config_dir=`dirname $with_geos` AC_CHECK_PROG( GEOS_CONFIG, $ac_geos_config, $with_geos, [no], [$ac_geos_config_dir], [] ) fi min_geos_version=ifelse([$1], ,0.0.1,$1) if test "$GEOS_CONFIG" = "no"; then no_geos_config="yes" else AC_MSG_CHECKING(for GEOS version >= $min_geos_version) geos_major_version=`$GEOS_CONFIG --version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` geos_minor_version=`$GEOS_CONFIG --version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` geos_micro_version=`$GEOS_CONFIG --version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` req_major=`echo $min_geos_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` req_minor=`echo $min_geos_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` req_micro=`echo $min_geos_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` version_ok="no" ac_req_version=`expr $req_major \* 100000 \+ $req_minor \* 100 \+ $req_micro` ac_geos_version=`expr $geos_major_version \* 100000 \+ $geos_minor_version \* 100 \+ $geos_micro_version` if test $ac_req_version -le $ac_geos_version; then version_ok="yes" fi if test $version_ok = "no"; then HAVE_GEOS="no" else if $GEOS_CONFIG --libs >/dev/null 2>&1; then AC_MSG_RESULT(yes) HAVE_GEOS="yes" GEOS_LIBS="`$GEOS_CONFIG --libs`" GEOS_C_LIBS="`$GEOS_CONFIG --ldflags` -lgeos_c" GEOS_CFLAGS="`$GEOS_CONFIG --cflags`" GEOS_VERSION="`$GEOS_CONFIG --version`" else AC_MSG_RESULT(no) HAVE_GEOS="no" no_geos_config="yes" fi fi fi ]) geos-3.4.2/macros/libtool.m40000644000175000017500000077464712206417154015522 0ustar frankiefrankie# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 56 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl _LT_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_INIT ]) # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2008 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. if test "$no_create" != yes; then lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) fi ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(whole_archive_flag_spec, $1)='' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line __oline__ "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then _LT_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) geos-3.4.2/macros/ltoptions.m40000644000175000017500000002724212206417154016067 0ustar frankiefrankie# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) geos-3.4.2/macros/ltsugar.m40000644000175000017500000001042412206417154015507 0ustar frankiefrankie# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) geos-3.4.2/macros/ltversion.m40000644000175000017500000000127712206417154016061 0ustar frankiefrankie# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) geos-3.4.2/macros/lt~obsolete.m40000644000175000017500000001311312206417154016376 0ustar frankiefrankie# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 4 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) geos-3.4.2/macros/python.m40000644000175000017500000001615112206417150015346 0ustar frankiefrankie## ------------------------ -*- Autoconf -*- ## Python file handling ## From Andrew Dalke ## Updated by James Henstridge ## ------------------------ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 1.5 are not dnl supported because the default installation locations changed from dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages dnl in 1.5. m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python2.4 python2.3 python2.2 dnl python2.1 python2.0 python1.6 python1.5]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT(yes)], [AC_MSG_ERROR(too old)]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. distutils does not exist in dnl Python 1.5, so we fall back to the hardcoded directory if it dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null || echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. distutils does not exist in dnl Python 1.5, so we fall back to the hardcoded directory if it dnl doesn't work. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null || echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # hexversion has been introduced in Python 1.5.2; it's probably not # worth to support older versions (1.5.1 was released on October 31, 1998). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys, string # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. minver = map(int, string.split('$2', '.')) + [[0, 0, 0]] minverhex = 0 for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) geos-3.4.2/macros/ruby.m40000644000175000017500000000473612206417150015014 0ustar frankiefrankie## ------------------------ ## Ruby file handling ## From Charlie Savage ## ------------------------ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([AC_RUBY_DEVEL], [ dnl Find a Ruby interpreter AC_PATH_PROG([RUBY],[ruby]) if test -z "$RUBY" ; then AC_MSG_ERROR([Could not find ruby interpreter.]) RUBY='' else dnl Get Ruby version number RUBY_VERSION=`$RUBY -e "puts RUBY_VERSION"` dnl Get Ruby bin directory RUBY_BIN_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["bindir"]] || Config::CONFIG[["bindir"]]'` dnl Get Ruby site arch RUBY_SITE_ARCH=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["sitearch"]] || Config::CONFIG[["sitearch"]]'` dnl Get Ruby include directory RUBY_INCLUDE_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]]'` dnl Get Ruby lib directory RUBY_LIB_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["libdir"]] || Config::CONFIG[["libdir"]]'` dnl Get Ruby extensions directory RUBY_EXTENSION_DIR=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["sitearchdir"]] || Config::CONFIG[["sitearchdir"]]'` dnl Get Ruby shared library name, this does not include the lib prefix or extension name RUBY_SO_NAME=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["LIBRUBY_SO"]] || Config::CONFIG[["RUBY_SO_NAME"]]'` dnl Get Ruby shared libary name RUBY_SHARED_LIB=`$RUBY -rrbconfig -e 'puts RbConfig::CONFIG[["LIBRUBY"]] || Config::CONFIG[["LIBRUBY"]]'` AC_MSG_NOTICE([Ruby executable is '$RUBY']) AC_MSG_NOTICE([Ruby version is '$RUBY_VERSION']) AC_MSG_NOTICE([Ruby bin directory is '$RUBY_BIN_DIR']) AC_MSG_NOTICE([Ruby site arch is '$RUBY_SITE_ARCH']) AC_MSG_NOTICE([Ruby include directory is '$RUBY_INCLUDE_DIR']) AC_MSG_NOTICE([Ruby library directory is '$RUBY_LIB_DIR']) AC_MSG_NOTICE([Ruby extension directory is '$RUBY_EXTENSION_DIR']) AC_MSG_NOTICE([Ruby library is '$RUBY_SO_NAME']) AC_MSG_NOTICE([Ruby import library is '$RUBY_SHARED_LIB']) AC_SUBST([RUBY_VERSION]) AC_SUBST([RUBY_BIN_DIR]) AC_SUBST([RUBY_SITE_ARCH]) AC_SUBST([RUBY_INCLUDE_DIR]) AC_SUBST([RUBY_LIB_DIR]) AC_SUBST([RUBY_EXTENSION_DIR]) AC_SUBST([RUBY_SO_NAME]) AC_SUBST([RUBY_SHARED_LIB]) fi AC_SUBST([RUBY]) ]) geos-3.4.2/makefile.vc0000644000175000017500000000155512206417145014414 0ustar frankiefrankie# # NMAKE Makefile to build GEOS on Windows ############################################################################### # This makefile.vc delegates making targets to src\makefile.vc # so it's just a thin wrapper. # # Building on Win32 with Visual Studio # ------------------------------------ # # 1) Requires Visual C++ 2002 or later # 2) Build running command "nmake /f makefile.vc" in top-level directory # # Produces: # src\geos.dll: DLL - only exports the C API # src\geos_i.lib: Stub library to link against for use of geos.dll. # src\geos.lib: static library for use of C or C++ API. ############################################################################### GEOS_ROOT=. !INCLUDE $(GEOS_ROOT)\nmake.opt default: src_dir src_dir: cd src $(MAKE) /f makefile.vc cd .. clean: cd src $(MAKE) /f makefile.vc clean cd .. geos-3.4.2/missing0000755000175000017500000002623312206417160013701 0ustar frankiefrankie#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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 2, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: geos-3.4.2/nmake.opt0000644000175000017500000001540712206417146014126 0ustar frankiefrankie# # nmake.opt - main configuration file for NMAKE makefiles # !MESSAGE ********************************************************************** !MESSAGE *** GEOS Build Configuration *** # TODO: Confirm as redundant and remove, nmake /P displays _NMAKE_VER anyway. #!INCLUDE ############################################################################### # For convenience, user may put custom settings to private mynmake.opt # and use EXT_NMAKE_OPT option while calling nmake.exe, as follows: # # nmake -f makefile.vc EXT_NMAKE_OPT=mynmake.opt !IFDEF EXT_NMAKE_OPT !MESSAGE *** Setting EXT_NMAKE_OPT $(EXT_NMAKE_OPT) !INCLUDE $(EXT_NMAKE_OPT) !ENDIF ############################################################################### # Set BUILD_DEBUG to YES if you want to make debug build # and to prepare not optimized binaries. !IFNDEF BUILD_DEBUG BUILD_DEBUG = NO !ENDIF !MESSAGE *** Setting BUILD_DEBUG $(BUILD_DEBUG) ############################################################################### # Set ENABLE_INLINE to YES if you want to make debug build # and to prepare not optimized binaries. !IFNDEF ENABLE_INLINE ENABLE_INLINE = NO !ENDIF !MESSAGE *** Setting ENABLE_INLINE $(ENABLE_INLINE) ############################################################################### # Set BUILD_BATCH to YES if you want feed compiler with all # source .c and .cpp files in single batch. !IFNDEF BUILD_BATCH BUILD_BATCH = NO !ENDIF !MESSAGE *** Setting BUILD_BATCH $(BUILD_BATCH) ############################################################################### # Set WIN64=YES if you are building for 64-bit windows (x64). # Alternatively, pass WIN64=YES as NMAKE command line argument. ############################################################################### !IFNDEF WIN64 WIN64 = NO !ENDIF !MESSAGE *** Setting WIN64 $(WIN64) ############################################################################### # Derive version of Visual C++ being used from NMAKE if not specified # # WARNING: # If we should expect variety of NMAKE build versions, tests below may fail # and we will need to fall back to setting GEOS_MSVC as command line parameter. !IF "$(_NMAKE_VER)" == "" GEOS_MSVC = 4.0 !ERROR *** Failed to determine version of Visual C++ !ELSEIF "$(_NMAKE_VER)" == "162" GEOS_MSVC = 5.0 !ERROR *** Detected Visual C++ 5.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "6.00.8168.0" GEOS_MSVC = 6.0 GEOS_MSC = 1200 !ERROR *** Detected Visual C++ 6.0 - NOT SUPPORTED !ELSEIF "$(_NMAKE_VER)" == "7.00.9466" GEOS_MSVC = 7.0 GEOS_MSC = 1300 !ELSEIF "$(_NMAKE_VER)" == "7.10.3077" GEOS_MSVC = 7.1 GEOS_MSC = 1310 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.42" GEOS_MSVC = 8.0 GEOS_MSC = 1400 !ELSEIF "$(_NMAKE_VER)" == "8.00.50727.762" GEOS_MSVC = 8.0 GEOS_MSC = 1400 !ELSEIF "$(_NMAKE_VER)" == "9.00.21022.08" GEOS_MSVC = 9.0 GEOS_MSC = 1500 !ELSEIF "$(_NMAKE_VER)" == "9.00.30729.01" GEOS_MSVC = 9.0 GEOS_MSC = 1500 !ELSEIF "$(_NMAKE_VER)" == "10.00.30128.01" GEOS_MSVC = 10.0 GEOS_MSC = 1600 !ELSEIF "$(_NMAKE_VER)" == "10.00.30319.01" GEOS_MSVC = 10.0 GEOS_MSC = 1600 !ELSEIF "$(_NMAKE_VER)" == "11.00.40825.2" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.51106.1" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.50727.1" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60315.1" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60430.2" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60521.0" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSEIF "$(_NMAKE_VER)" == "11.00.60610.1" GEOS_MSVC = 11.0 GEOS_MSC = 1700 !ELSE GEOS_MSVC = 0.0 GEOS_MSC = 0 !ENDIF !IF "$(GEOS_MSVC)" == "0.0" && "$(GEOS_MSC)" == "0" !MESSAGE *** Cannot determine Visual C++ version !ERROR *** Aborting make job !ELSE !MESSAGE *** Using Microsoft NMAKE version $(_NMAKE_VER) !MESSAGE *** Using Microsoft Visual C++ version $(GEOS_MSVC) !MESSAGE *** Using Microsoft C/C++ version $(GEOS_MSC) !ENDIF ############################################################################### # Optional use of Visual Leak Detector (VLD) http://vld.codeplex.com/ # Uncomment this line to use VLD in debug configuration only: !IF "$(BUILD_DEBUG)" == "YES" MSVC_VLD_DIR=$(EXTLIBDIR)\Source\vld\vld !ENDIF !IFDEF MSVC_VLD_DIR MSVC_VLD_FLAGS=-DMSVC_USE_VLD=1 -I$(MSVC_VLD_DIR)\include !IFDEF WIN64 MSVC_VLD_LIB=/LIBPATH:$(MSVC_VLD_DIR)/lib/Win64 !ELSE MSVC_VLD_LIB=/LIBPATH:$(MSVC_VLD_DIR)/lib/Win32 !ENDIF !ENDIF ############################################################################### # Include directories GEOS_INCLUDE = -I..\include -I..\capi !MESSAGE *** Setting GEOS_INCLUDE $(GEOS_INCLUDE) !MESSAGE *** Setting INCLUDE $(INCLUDE) ############################################################################### # Compilation flags for Release and Debug modes GEOS_CPPFLAGS = /D "NOMINMAX" /D "WIN32_LEAN_AND_MEAN" /D "NOGDI" GEOS_CPPFLAGS = $(GEOS_CPPFLAGS) /D "GEOS_DLL_EXPORT" $(MSVC_VLD_FLAGS) !IF "$(BUILD_DEBUG)" == "YES" BUILD_PREFIX=_d GEOS_CFLAGS = /nologo /MDd /GR /Od /W4 /Zi GEOS_CPPFLAGS = /D "DEBUG" /D "_DEBUG" $(GEOS_CPPFLAGS) !ELSE GEOS_CFLAGS = /nologo /MD /GR /O2 /W3 GEOS_CPPFLAGS = /D "NDEBUG" $(GEOS_CPPFLAGS) !ENDIF # Compiler version specific flags !IF $(GEOS_MSC) >= 1400 GEOS_CFLAGS = $(GEOS_CFLAGS) /EHs GEOS_CPPFLAGS = $(GEOS_CPPFLAGS) /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "_SCL_SECURE_NO_DEPRECATE" !ELSE GEOS_CFLAGS = $(GEOS_CFLAGS) /GX !ENDIF # For Visual C++ 9.0+ use multiple process build !IF "$(BUILD_BATCH)" == "YES" !IF $(GEOS_MSC) > 1400 MPFLAGS = /MP !MESSAGE *** Setting /MP flag to number of effective processors !ENDIF !ENDIF !IF "$(ENABLE_INLINE)" == "YES" GEOS_CFLAGS = /D "GEOS_INLINE" !ENDIF !MESSAGE *** Using GEOS_CFLAGS $(GEOS_CFLAGS) !MESSAGE *** Using GEOS_CPPFLAGS $(GEOS_CPPFLAGS) CFLAGS=$(MPFLAGS) $(GEOS_CFLAGS) $(GEOS_CPPFLAGS) $(GEOS_INCLUDE) !MESSAGE *** Complete CFLAGS $(CFLAGS) ############################################################################### # Output location LIBNAME = geos$(BUILD_PREFIX).lib DLLNAME = geos$(BUILD_PREFIX).dll SLIBNAME = geos_i$(BUILD_PREFIX).lib CDLLNAME = geos_c$(BUILD_PREFIX).dll CLIBNAME = geos_c_i$(BUILD_PREFIX).lib ############################################################################### # Building toolset programs MAKE = nmake CC = cl RM = del CP = copy # Linker executable # - Dynamic-Linked Libraries # $(LINK) /dll # - Static Libraries (use of lib.exe wrapper is not portable, see VC++ Toolkit 2003) # $(LINK) /lib LINK = link.exe LINKER_FLAGS = $(MSVC_VLD_LIB) !MESSAGE ********************************************************************** # EOF geos-3.4.2/php/0000755000175000017500000000000012206417241013063 5ustar frankiefrankiegeos-3.4.2/php/Makefile.am0000644000175000017500000000360712206417146015131 0ustar frankiefrankie####################################################################### # # GEOS - Geometry Engine Open Source # http://trac.osgeo.org/geos # # Copyright (C) 2010 Sandro Santilli # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser 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 St, Fifth Floor, # Boston, MA 02110-1301 USA # ####################################################################### if ENABLE_PHP SUBDIRS = . test EXTRA_DIST = README pkglib_LTLIBRARIES = geos.la geos_la_SOURCES = geos.c php_geos.h geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la # TODO: check if -no-undefined should be added geos_la_LDFLAGS = -module -avoid-version # -std is an attempt to fix interpretation # of Zend headers, failing with -ansi. # # As of gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2 # you need -std=gnu99 # while on OpenSuse's plain gcc 4.3.2 -std=c99 is fine # (argh) # geos_la_CFLAGS = $(AM_CFLAGS) -std=gnu99 # TODO: drop conditionals from geos.c and let it bound to current code geos_la_CPPFLAGS = $(AM_CPPFLAGS) \ `$(PHP_CONFIG) --includes` \ -DCOMPILE_DL_GEOS \ -I$(top_builddir)/capi \ -I$(top_srcdir)/include install: all $(INSTALL) -d "$(DESTDIR)"/`$(PHP_CONFIG) --extension-dir` $(INSTALL) -m 755 .libs/geos.so "$(DESTDIR)"/`php-config --extension-dir` endif geos-3.4.2/php/Makefile.in0000644000175000017500000006500712206417163015143 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ####################################################################### # # GEOS - Geometry Engine Open Source # http://trac.osgeo.org/geos # # Copyright (C) 2010 Sandro Santilli # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser 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 St, Fifth Floor, # Boston, MA 02110-1301 USA # ####################################################################### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = php DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) @ENABLE_PHP_TRUE@geos_la_DEPENDENCIES = \ @ENABLE_PHP_TRUE@ $(top_builddir)/capi/libgeos_c.la am__geos_la_SOURCES_DIST = geos.c php_geos.h @ENABLE_PHP_TRUE@am_geos_la_OBJECTS = geos_la-geos.lo geos_la_OBJECTS = $(am_geos_la_OBJECTS) geos_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(geos_la_CFLAGS) $(CFLAGS) \ $(geos_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_PHP_TRUE@am_geos_la_rpath = -rpath $(pkglibdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(geos_la_SOURCES) DIST_SOURCES = $(am__geos_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = . test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @ENABLE_PHP_TRUE@SUBDIRS = . test @ENABLE_PHP_TRUE@EXTRA_DIST = README @ENABLE_PHP_TRUE@pkglib_LTLIBRARIES = geos.la @ENABLE_PHP_TRUE@geos_la_SOURCES = geos.c php_geos.h @ENABLE_PHP_TRUE@geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la # TODO: check if -no-undefined should be added @ENABLE_PHP_TRUE@geos_la_LDFLAGS = -module -avoid-version # -std is an attempt to fix interpretation # of Zend headers, failing with -ansi. # # As of gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2 # you need -std=gnu99 # while on OpenSuse's plain gcc 4.3.2 -std=c99 is fine # (argh) # @ENABLE_PHP_TRUE@geos_la_CFLAGS = $(AM_CFLAGS) -std=gnu99 # TODO: drop conditionals from geos.c and let it bound to current code @ENABLE_PHP_TRUE@geos_la_CPPFLAGS = $(AM_CPPFLAGS) \ @ENABLE_PHP_TRUE@ `$(PHP_CONFIG) --includes` \ @ENABLE_PHP_TRUE@ -DCOMPILE_DL_GEOS \ @ENABLE_PHP_TRUE@ -I$(top_builddir)/capi \ @ENABLE_PHP_TRUE@ -I$(top_srcdir)/include all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu php/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu php/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done geos.la: $(geos_la_OBJECTS) $(geos_la_DEPENDENCIES) $(geos_la_LINK) $(am_geos_la_rpath) $(geos_la_OBJECTS) $(geos_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geos_la-geos.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< geos_la-geos.lo: geos.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geos_la_CPPFLAGS) $(CPPFLAGS) $(geos_la_CFLAGS) $(CFLAGS) -MT geos_la-geos.lo -MD -MP -MF $(DEPDIR)/geos_la-geos.Tpo -c -o geos_la-geos.lo `test -f 'geos.c' || echo '$(srcdir)/'`geos.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/geos_la-geos.Tpo $(DEPDIR)/geos_la-geos.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='geos.c' object='geos_la-geos.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geos_la_CPPFLAGS) $(CPPFLAGS) $(geos_la_CFLAGS) $(CFLAGS) -c -o geos_la-geos.lo `test -f 'geos.c' || echo '$(srcdir)/'`geos.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done @ENABLE_PHP_FALSE@install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-pkglibLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkglibLTLIBRARIES \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES @ENABLE_PHP_TRUE@install: all @ENABLE_PHP_TRUE@ $(INSTALL) -d "$(DESTDIR)"/`$(PHP_CONFIG) --extension-dir` @ENABLE_PHP_TRUE@ $(INSTALL) -m 755 .libs/geos.so "$(DESTDIR)"/`php-config --extension-dir` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/php/README0000644000175000017500000000176212206417146013755 0ustar frankiefrankiePHP module for GEOS =================== Date: Fri Jun 18 15:52:57 CEST 2010 Author: Sandro Santilli The code in this directory provides a PHP module to make use of functionalities of the GEOS library. The bindings are linked to the C-API, for betters stability. REQUIREMENTS ------------ You need php5 development tools, often found in packages named something like 'php5-dev'. BUILD ----- Just add --enable-php to your GEOS configure line and run 'make'. TESTING ------- Automated testing should be executed on 'make check' togheter with the rest of the GEOS testsuite. You can still run 'make check' from this dir for localized (php-only) testing. Note that you'll need phpunit installed for this to work. To install: sudo pear install --force --alldeps phpunit/phpunit INSTALL ------- As root (or owner with write access to the directory returned by php-config --extension-dir), run 'make install' USAGE ----- ... TODO ... (reference some automatically built doc?) geos-3.4.2/php/TODO0000644000175000017500000000064212206417146013561 0ustar frankiefrankieIn order of priority - Find a way to have GEOSGeometry contents shown on var_dump - Documentation !! (doxygen-based?) - Add WKBReader::read and WKBWriter::write (binary strings required) - Use the re-entrant C-API interface - Add interface for algorithms (Orientation Index) ? - Add interfaces for prepared geometries ? - Add interfaces for STRTree ? - Add interfaces for GEOSCoordSeq ? - Add Geometry Constructors ? geos-3.4.2/php/geos.c0000644000175000017500000021164512206417146014201 0ustar frankiefrankie/*********************************************************************** * * GEOS - Geometry Engine Open Source * http://trac.osgeo.org/geos * * Copyright (C) 2010 Sandro Santilli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser 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 St, Fifth Floor, * Boston, MA 02110-1301 USA * ***********************************************************************/ /* PHP stuff */ #include "php.h" #include "ext/standard/info.h" /* for php_info_... */ #include "Zend/zend_exceptions.h" /* for zend_throw_exception_object */ /* GEOS stuff */ #include "geos_c.h" /* Own stuff */ #include "php_geos.h" PHP_MINIT_FUNCTION(geos); PHP_MSHUTDOWN_FUNCTION(geos); PHP_RINIT_FUNCTION(geos); PHP_RSHUTDOWN_FUNCTION(geos); PHP_MINFO_FUNCTION(geos); PHP_FUNCTION(GEOSVersion); PHP_FUNCTION(GEOSPolygonize); PHP_FUNCTION(GEOSLineMerge); PHP_FUNCTION(GEOSSharedPaths); PHP_FUNCTION(GEOSRelateMatch); #if PHP_VERSION_ID < 50399 #define zend_function_entry function_entry #endif static zend_function_entry geos_functions[] = { PHP_FE(GEOSVersion, NULL) PHP_FE(GEOSPolygonize, NULL) PHP_FE(GEOSLineMerge, NULL) PHP_FE(GEOSSharedPaths, NULL) PHP_FE(GEOSRelateMatch, NULL) {NULL, NULL, NULL} }; zend_module_entry geos_module_entry = { STANDARD_MODULE_HEADER, PHP_GEOS_EXTNAME, geos_functions, PHP_MINIT(geos), /* module init function */ PHP_MSHUTDOWN(geos), /* module shutdown function */ PHP_RINIT(geos), /* request init function */ PHP_RSHUTDOWN(geos), /* request shutdown function */ PHP_MINFO(geos), /* module info function */ PHP_GEOS_VERSION, STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_GEOS ZEND_GET_MODULE(geos) #endif /* -- Utility functions ---------------------- */ static void noticeHandler(const char *fmt, ...) { char message[256]; va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", message); } static void errorHandler(const char *fmt, ...) { char message[256]; va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); /* TODO: use a GEOSException ? */ zend_throw_exception_ex(zend_exception_get_default(TSRMLS_CC), 1 TSRMLS_CC, "%s", message); } typedef struct Proxy_t { zend_object std; void* relay; } Proxy; static void setRelay(zval* val, void* obj) { Proxy* proxy = (Proxy*)zend_object_store_get_object(val TSRMLS_CC); proxy->relay = obj; } static inline void * getRelay(zval* val, zend_class_entry* ce) { Proxy *proxy = (Proxy*)zend_object_store_get_object(val TSRMLS_CC); if ( proxy->std.ce != ce ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Relay object is not an %s", ce->name); } if ( ! proxy->relay ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Relay object for object of type %s is not set", ce->name); } return proxy->relay; } static long getZvalAsLong(zval* val) { long ret; zval tmp; tmp = *val; zval_copy_ctor(&tmp); convert_to_long(&tmp); ret = Z_LVAL(tmp); zval_dtor(&tmp); return ret; } static long getZvalAsDouble(zval* val) { double ret; zval tmp; tmp = *val; zval_copy_ctor(&tmp); convert_to_double(&tmp); ret = Z_DVAL(tmp); zval_dtor(&tmp); return ret; } static zend_object_value Gen_create_obj (zend_class_entry *type TSRMLS_DC, zend_objects_free_object_storage_t st, zend_object_handlers* handlers) { zval *tmp; zend_object_value retval; Proxy *obj = (Proxy *)emalloc(sizeof(Proxy)); memset(obj, 0, sizeof(Proxy)); obj->std.ce = type; ALLOC_HASHTABLE(obj->std.properties); zend_hash_init(obj->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0); #if PHP_VERSION_ID < 50399 zend_hash_copy(obj->std.properties, &type->default_properties, (copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *)); #else object_properties_init(&(obj->std), type); #endif retval.handle = zend_objects_store_put(obj, NULL, st, NULL TSRMLS_CC); retval.handlers = handlers; return retval; } /* -- class GEOSGeometry -------------------- */ PHP_METHOD(Geometry, __construct); PHP_METHOD(Geometry, __toString); PHP_METHOD(Geometry, project); PHP_METHOD(Geometry, interpolate); PHP_METHOD(Geometry, buffer); PHP_METHOD(Geometry, offsetCurve); PHP_METHOD(Geometry, envelope); PHP_METHOD(Geometry, intersection); PHP_METHOD(Geometry, convexHull); PHP_METHOD(Geometry, difference); PHP_METHOD(Geometry, symDifference); PHP_METHOD(Geometry, boundary); PHP_METHOD(Geometry, union); /* also does union cascaded */ PHP_METHOD(Geometry, pointOnSurface); PHP_METHOD(Geometry, centroid); PHP_METHOD(Geometry, relate); PHP_METHOD(Geometry, relateBoundaryNodeRule); PHP_METHOD(Geometry, simplify); /* also does topology-preserving */ PHP_METHOD(Geometry, extractUniquePoints); PHP_METHOD(Geometry, disjoint); PHP_METHOD(Geometry, touches); PHP_METHOD(Geometry, intersects); PHP_METHOD(Geometry, crosses); PHP_METHOD(Geometry, within); PHP_METHOD(Geometry, contains); PHP_METHOD(Geometry, overlaps); PHP_METHOD(Geometry, covers); PHP_METHOD(Geometry, coveredBy); PHP_METHOD(Geometry, equals); PHP_METHOD(Geometry, equalsExact); PHP_METHOD(Geometry, isEmpty); PHP_METHOD(Geometry, checkValidity); PHP_METHOD(Geometry, isSimple); PHP_METHOD(Geometry, isRing); PHP_METHOD(Geometry, hasZ); PHP_METHOD(Geometry, isClosed); PHP_METHOD(Geometry, typeName); PHP_METHOD(Geometry, typeId); PHP_METHOD(Geometry, getSRID); PHP_METHOD(Geometry, setSRID); PHP_METHOD(Geometry, numGeometries); PHP_METHOD(Geometry, geometryN); PHP_METHOD(Geometry, numInteriorRings); PHP_METHOD(Geometry, numPoints); PHP_METHOD(Geometry, getX); PHP_METHOD(Geometry, getY); PHP_METHOD(Geometry, interiorRingN); PHP_METHOD(Geometry, exteriorRing); PHP_METHOD(Geometry, numCoordinates); PHP_METHOD(Geometry, dimension); PHP_METHOD(Geometry, coordinateDimension); PHP_METHOD(Geometry, pointN); PHP_METHOD(Geometry, startPoint); PHP_METHOD(Geometry, endPoint); PHP_METHOD(Geometry, area); PHP_METHOD(Geometry, length); PHP_METHOD(Geometry, distance); PHP_METHOD(Geometry, hausdorffDistance); PHP_METHOD(Geometry, snapTo); PHP_METHOD(Geometry, node); PHP_METHOD(Geometry, delaunayTriangulation); static zend_function_entry Geometry_methods[] = { PHP_ME(Geometry, __construct, NULL, 0) PHP_ME(Geometry, __toString, NULL, 0) PHP_ME(Geometry, project, NULL, 0) PHP_ME(Geometry, interpolate, NULL, 0) PHP_ME(Geometry, buffer, NULL, 0) PHP_ME(Geometry, offsetCurve, NULL, 0) PHP_ME(Geometry, envelope, NULL, 0) PHP_ME(Geometry, intersection, NULL, 0) PHP_ME(Geometry, convexHull, NULL, 0) PHP_ME(Geometry, difference, NULL, 0) PHP_ME(Geometry, symDifference, NULL, 0) PHP_ME(Geometry, boundary, NULL, 0) PHP_ME(Geometry, union, NULL, 0) PHP_ME(Geometry, pointOnSurface, NULL, 0) PHP_ME(Geometry, centroid, NULL, 0) PHP_ME(Geometry, relate, NULL, 0) PHP_ME(Geometry, relateBoundaryNodeRule, NULL, 0) PHP_ME(Geometry, simplify, NULL, 0) PHP_ME(Geometry, extractUniquePoints, NULL, 0) PHP_ME(Geometry, disjoint, NULL, 0) PHP_ME(Geometry, touches, NULL, 0) PHP_ME(Geometry, intersects, NULL, 0) PHP_ME(Geometry, crosses, NULL, 0) PHP_ME(Geometry, within, NULL, 0) PHP_ME(Geometry, contains, NULL, 0) PHP_ME(Geometry, overlaps, NULL, 0) PHP_ME(Geometry, covers, NULL, 0) PHP_ME(Geometry, coveredBy, NULL, 0) PHP_ME(Geometry, equals, NULL, 0) PHP_ME(Geometry, equalsExact, NULL, 0) PHP_ME(Geometry, isEmpty, NULL, 0) PHP_ME(Geometry, checkValidity, NULL, 0) PHP_ME(Geometry, isSimple, NULL, 0) PHP_ME(Geometry, isRing, NULL, 0) PHP_ME(Geometry, hasZ, NULL, 0) PHP_ME(Geometry, isClosed, NULL, 0) PHP_ME(Geometry, typeName, NULL, 0) PHP_ME(Geometry, typeId, NULL, 0) PHP_ME(Geometry, getSRID, NULL, 0) PHP_ME(Geometry, setSRID, NULL, 0) PHP_ME(Geometry, numGeometries, NULL, 0) PHP_ME(Geometry, geometryN, NULL, 0) PHP_ME(Geometry, numInteriorRings, NULL, 0) PHP_ME(Geometry, numPoints, NULL, 0) PHP_ME(Geometry, getX, NULL, 0) PHP_ME(Geometry, getY, NULL, 0) PHP_ME(Geometry, interiorRingN, NULL, 0) PHP_ME(Geometry, exteriorRing, NULL, 0) PHP_ME(Geometry, numCoordinates, NULL, 0) PHP_ME(Geometry, dimension, NULL, 0) PHP_ME(Geometry, coordinateDimension, NULL, 0) PHP_ME(Geometry, pointN, NULL, 0) PHP_ME(Geometry, startPoint, NULL, 0) PHP_ME(Geometry, endPoint, NULL, 0) PHP_ME(Geometry, area, NULL, 0) PHP_ME(Geometry, length, NULL, 0) PHP_ME(Geometry, distance, NULL, 0) PHP_ME(Geometry, hausdorffDistance, NULL, 0) PHP_ME(Geometry, snapTo, NULL, 0) PHP_ME(Geometry, node, NULL, 0) PHP_ME(Geometry, delaunayTriangulation, NULL, 0) {NULL, NULL, NULL} }; static zend_class_entry *Geometry_ce_ptr; static zend_object_handlers Geometry_object_handlers; /* Geometry serializer */ static GEOSWKBWriter* Geometry_serializer = 0; static GEOSWKBWriter* getGeometrySerializer() { if ( ! Geometry_serializer ) { Geometry_serializer = GEOSWKBWriter_create(); GEOSWKBWriter_setIncludeSRID(Geometry_serializer, 1); GEOSWKBWriter_setOutputDimension(Geometry_serializer, 3); } return Geometry_serializer; } static void delGeometrySerializer() { if ( Geometry_serializer ) { GEOSWKBWriter_destroy(Geometry_serializer); } } /* Geometry deserializer */ static GEOSWKBReader* Geometry_deserializer = 0; static GEOSWKBReader* getGeometryDeserializer() { if ( ! Geometry_deserializer ) { Geometry_deserializer = GEOSWKBReader_create(); } return Geometry_deserializer; } static void delGeometryDeserializer() { if ( Geometry_deserializer ) { GEOSWKBReader_destroy(Geometry_deserializer); } } /* Serializer function for GEOSGeometry */ static int Geometry_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC) { GEOSWKBWriter *serializer; GEOSGeometry *geom; char* ret; size_t retsize; serializer = getGeometrySerializer(); geom = (GEOSGeometry*)getRelay(object, Geometry_ce_ptr); /* NOTE: we might be fine using binary here */ ret = (char*)GEOSWKBWriter_writeHEX(serializer, geom, &retsize); /* we'll probably get an exception if ret is null */ if ( ! ret ) return FAILURE; *buffer = (unsigned char*)estrndup(ret, retsize); GEOSFree(ret); *buf_len = retsize; return SUCCESS; } static int Geometry_deserialize(zval **object, zend_class_entry *ce, const unsigned char *buf, zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC) { GEOSWKBReader* deserializer; GEOSGeometry* geom; deserializer = getGeometryDeserializer(); geom = GEOSWKBReader_readHEX(deserializer, buf, buf_len); /* TODO: check zend_class_entry being what we expect! */ if ( ce != Geometry_ce_ptr ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Geometry_deserialize called with unexpected zend_class_entry"); return FAILURE; } object_init_ex(*object, ce); setRelay(*object, geom); return SUCCESS; } /* * Push components of the given geometry * to the given array zval. * Components geometries are cloned. * NOTE: collection components are not descended into */ static void dumpGeometry(GEOSGeometry* g, zval* array) { int ngeoms, i; /* MAKE_STD_ZVAL(array); array_init(array); */ ngeoms = GEOSGetNumGeometries(g); for (i=0; irelay); zend_hash_destroy(obj->std.properties); FREE_HASHTABLE(obj->std.properties); efree(obj); } static zend_object_value Geometry_create_obj (zend_class_entry *type TSRMLS_DC) { return Gen_create_obj(type, Geometry_dtor, &Geometry_object_handlers); } PHP_METHOD(Geometry, __construct) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "GEOSGeometry can't be constructed using new, check WKTReader"); } PHP_METHOD(Geometry, __toString) { GEOSGeometry *geom; GEOSWKTWriter *writer; char *wkt; char *ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); writer = GEOSWKTWriter_create(); /* NOTE: if we get an exception before reaching * GEOSWKTWriter_destory below we'll be leaking memory. * One fix could be storing the object in a refcounted * zval. */ GEOSWKTWriter_setTrim(writer, 1); wkt = GEOSWKTWriter_write(writer, geom); /* we'll probably get an exception if wkt is null */ if ( ! wkt ) RETURN_NULL(); GEOSWKTWriter_destroy(writer); ret = estrdup(wkt); GEOSFree(wkt); RETURN_STRING(ret, 0); } PHP_METHOD(Geometry, project) { GEOSGeometry *this; GEOSGeometry *other; zval *zobj; zend_bool normalized = 0; double ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|b", &zobj, &normalized) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); if ( normalized ) { ret = GEOSProjectNormalized(this, other); } else { ret = GEOSProject(this, other); } if ( ret < 0 ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(ret); } PHP_METHOD(Geometry, interpolate) { GEOSGeometry *this; double dist; GEOSGeometry *ret; zend_bool normalized = 0; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|b", &dist, &normalized) == FAILURE) { RETURN_NULL(); } if ( normalized ) { ret = GEOSInterpolateNormalized(this, dist); } else { ret = GEOSInterpolate(this, dist); } if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::buffer(dist, []) * * styleArray keys supported: * 'quad_segs' * Type: int * Number of segments used to approximate * a quarter circle (defaults to 8). * 'endcap' * Type: long * Endcap style (defaults to GEOSBUF_CAP_ROUND) * 'join' * Type: long * Join style (defaults to GEOSBUF_JOIN_ROUND) * 'mitre_limit' * Type: double * mitre ratio limit (only affects joins with GEOSBUF_JOIN_MITRE style) * 'miter_limit' is also accepted as a synonym for 'mitre_limit'. * 'single_sided' * Type: bool * If true buffer lines only on one side, so that the input line * will be a portion of the boundary of the returned polygon. * Only applies to lineal input. Defaults to false. */ PHP_METHOD(Geometry, buffer) { GEOSGeometry *this; double dist; GEOSGeometry *ret; GEOSBufferParams *params; static const double default_mitreLimit = 5.0; static const int default_endCapStyle = GEOSBUF_CAP_ROUND; static const int default_joinStyle = GEOSBUF_JOIN_ROUND; static const int default_quadSegs = 8; long int quadSegs = default_quadSegs; long int endCapStyle = default_endCapStyle; long int joinStyle = default_joinStyle; double mitreLimit = default_mitreLimit; long singleSided = 0; zval *style_val = NULL; zval **data; HashTable *style; char *key; ulong index; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|a", &dist, &style_val) == FAILURE) { RETURN_NULL(); } params = GEOSBufferParams_create(); if ( style_val ) { style = HASH_OF(style_val); while(zend_hash_get_current_key(style, &key, &index, 0) == HASH_KEY_IS_STRING) { if(!strcmp(key, "quad_segs")) { zend_hash_get_current_data(style, (void**)&data); quadSegs = getZvalAsLong(*data); GEOSBufferParams_setQuadrantSegments(params, quadSegs); } else if(!strcmp(key, "endcap")) { zend_hash_get_current_data(style, (void**)&data); endCapStyle = getZvalAsLong(*data); GEOSBufferParams_setEndCapStyle(params, endCapStyle); } else if(!strcmp(key, "join")) { zend_hash_get_current_data(style, (void**)&data); joinStyle = getZvalAsLong(*data); GEOSBufferParams_setJoinStyle(params, joinStyle); } else if(!strcmp(key, "mitre_limit")) { zend_hash_get_current_data(style, (void**)&data); mitreLimit = getZvalAsDouble(*data); GEOSBufferParams_setMitreLimit(params, mitreLimit); } else if(!strcmp(key, "single_sided")) { zend_hash_get_current_data(style, (void**)&data); singleSided = getZvalAsLong(*data); GEOSBufferParams_setSingleSided(params, singleSided); } zend_hash_move_forward(style); } } ret = GEOSBufferWithParams(this, params, dist); GEOSBufferParams_destroy(params); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::offsetCurve(dist, []) * * styleArray keys supported: * 'quad_segs' * Type: int * Number of segments used to approximate * a quarter circle (defaults to 8). * 'join' * Type: long * Join style (defaults to GEOSBUF_JOIN_ROUND) * 'mitre_limit' * Type: double * mitre ratio limit (only affects joins with GEOSBUF_JOIN_MITRE style) * 'miter_limit' is also accepted as a synonym for 'mitre_limit'. */ PHP_METHOD(Geometry, offsetCurve) { GEOSGeometry *this; double dist; GEOSGeometry *ret; static const double default_mitreLimit = 5.0; static const int default_joinStyle = GEOSBUF_JOIN_ROUND; static const int default_quadSegs = 8; long int quadSegs = default_quadSegs; long int joinStyle = default_joinStyle; double mitreLimit = default_mitreLimit; zval *style_val = NULL; zval **data; HashTable *style; char *key; ulong index; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|a", &dist, &style_val) == FAILURE) { RETURN_NULL(); } if ( style_val ) { style = HASH_OF(style_val); while(zend_hash_get_current_key(style, &key, &index, 0) == HASH_KEY_IS_STRING) { if(!strcmp(key, "quad_segs")) { zend_hash_get_current_data(style, (void**)&data); quadSegs = getZvalAsLong(*data); } else if(!strcmp(key, "join")) { zend_hash_get_current_data(style, (void**)&data); joinStyle = getZvalAsLong(*data); } else if(!strcmp(key, "mitre_limit")) { zend_hash_get_current_data(style, (void**)&data); mitreLimit = getZvalAsDouble(*data); } zend_hash_move_forward(style); } } ret = GEOSOffsetCurve(this, dist, quadSegs, joinStyle, mitreLimit); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, envelope) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSEnvelope(this); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, intersection) { GEOSGeometry *this; GEOSGeometry *other; GEOSGeometry *ret; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSIntersection(this, other); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, convexHull) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSConvexHull(this); if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, difference) { GEOSGeometry *this; GEOSGeometry *other; GEOSGeometry *ret; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSDifference(this, other); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, symDifference) { GEOSGeometry *this; GEOSGeometry *other; GEOSGeometry *ret; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSSymDifference(this, other); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, boundary) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSBoundary(this); if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::union(otherGeom) * GEOSGeometry::union() */ PHP_METHOD(Geometry, union) { GEOSGeometry *this; GEOSGeometry *other; GEOSGeometry *ret; zval *zobj = NULL; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|o", &zobj) == FAILURE) { RETURN_NULL(); } if ( zobj ) { other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSUnion(this, other); } else { ret = GEOSUnaryUnion(this); } if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::pointOnSurface() */ PHP_METHOD(Geometry, pointOnSurface) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSPointOnSurface(this); if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::centroid() */ PHP_METHOD(Geometry, centroid) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGetCentroid(this); if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry::relate(otherGeom) * GEOSGeometry::relate(otherGeom, pattern) */ PHP_METHOD(Geometry, relate) { GEOSGeometry *this; GEOSGeometry *other; zval *zobj; char* pat = NULL; int patlen; int retInt; zend_bool retBool; char* retStr; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|s", &zobj, &pat, &patlen) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); if ( ! pat ) { /* we'll compute it */ pat = GEOSRelate(this, other); if ( ! pat ) RETURN_NULL(); /* should get an exception first */ retStr = estrdup(pat); GEOSFree(pat); RETURN_STRING(retStr, 0); } else { retInt = GEOSRelatePattern(this, other, pat); if ( retInt == 2 ) RETURN_NULL(); /* should get an exception first */ retBool = retInt; RETURN_BOOL(retBool); } } /** * GEOSGeometry::relateBoundaryNodeRule(otherGeom, rule) */ PHP_METHOD(Geometry, relateBoundaryNodeRule) { GEOSGeometry *this; GEOSGeometry *other; zval *zobj; char* pat; long int bnr = GEOSRELATE_BNR_OGC; char* retStr; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ol", &zobj, &bnr) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); /* we'll compute it */ pat = GEOSRelateBoundaryNodeRule(this, other, bnr); if ( ! pat ) RETURN_NULL(); /* should get an exception first */ retStr = estrdup(pat); GEOSFree(pat); RETURN_STRING(retStr, 0); } /** * GEOSGeometry GEOSGeometry::simplify(tolerance) * GEOSGeometry GEOSGeometry::simplify(tolerance, preserveTopology) */ PHP_METHOD(Geometry, simplify) { GEOSGeometry *this; double tolerance; zend_bool preserveTopology = 0; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d|b", &tolerance, &preserveTopology) == FAILURE) { RETURN_NULL(); } if ( preserveTopology ) { ret = GEOSTopologyPreserveSimplify(this, tolerance); } else { ret = GEOSSimplify(this, tolerance); } if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * GEOSGeometry GEOSGeometry::extractUniquePoints() */ PHP_METHOD(Geometry, extractUniquePoints) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeom_extractUniquePoints(this); if ( ret == NULL ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * bool GEOSGeometry::disjoint(GEOSGeometry) */ PHP_METHOD(Geometry, disjoint) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSDisjoint(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::touches(GEOSGeometry) */ PHP_METHOD(Geometry, touches) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSTouches(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::intersects(GEOSGeometry) */ PHP_METHOD(Geometry, intersects) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSIntersects(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::crosses(GEOSGeometry) */ PHP_METHOD(Geometry, crosses) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSCrosses(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::within(GEOSGeometry) */ PHP_METHOD(Geometry, within) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSWithin(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::contains(GEOSGeometry) */ PHP_METHOD(Geometry, contains) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSContains(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::overlaps(GEOSGeometry) */ PHP_METHOD(Geometry, overlaps) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSOverlaps(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::covers(GEOSGeometry) */ PHP_METHOD(Geometry, covers) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSCovers(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::coveredBy(GEOSGeometry) */ PHP_METHOD(Geometry, coveredBy) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSCoveredBy(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::equals(GEOSGeometry) */ PHP_METHOD(Geometry, equals) { GEOSGeometry *this; GEOSGeometry *other; int ret; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSEquals(this, other); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::equalsExact(GEOSGeometry) * bool GEOSGeometry::equalsExact(GEOSGeometry, double tolerance) */ PHP_METHOD(Geometry, equalsExact) { GEOSGeometry *this; GEOSGeometry *other; int ret; double tolerance = 0; zend_bool retBool; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|d", &zobj, &tolerance) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSEqualsExact(this, other, tolerance); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::isEmpty() */ PHP_METHOD(Geometry, isEmpty) { GEOSGeometry *this; int ret; zend_bool retBool; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSisEmpty(this); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * array GEOSGeometry::checkValidity() */ PHP_METHOD(Geometry, checkValidity) { GEOSGeometry *this; GEOSGeometry *location = NULL; int ret; char *reason = NULL; zend_bool retBool; char *reasonVal = NULL; zval *locationVal = NULL; long int flags = 0; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags) == FAILURE) { RETURN_NULL(); } ret = GEOSisValidDetail(this, flags, &reason, &location); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ if ( reason ) { reasonVal = estrdup(reason); GEOSFree(reason); } if ( location ) { MAKE_STD_ZVAL(locationVal); object_init_ex(locationVal, Geometry_ce_ptr); setRelay(locationVal, location); } retBool = ret; /* return value is an array */ array_init(return_value); add_assoc_bool(return_value, "valid", retBool); if ( reasonVal ) add_assoc_string(return_value, "reason", reasonVal, 0); if ( locationVal ) add_assoc_zval(return_value, "location", locationVal); } /** * bool GEOSGeometry::isSimple() */ PHP_METHOD(Geometry, isSimple) { GEOSGeometry *this; int ret; zend_bool retBool; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSisSimple(this); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::isRing() */ PHP_METHOD(Geometry, isRing) { GEOSGeometry *this; int ret; zend_bool retBool; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSisRing(this); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::hasZ() */ PHP_METHOD(Geometry, hasZ) { GEOSGeometry *this; int ret; zend_bool retBool; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSHasZ(this); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * bool GEOSGeometry::isClosed() */ PHP_METHOD(Geometry, isClosed) { GEOSGeometry *this; int ret; zend_bool retBool; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSisClosed(this); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /** * string GEOSGeometry::typeName() */ PHP_METHOD(Geometry, typeName) { GEOSGeometry *this; char *typ; char *typVal; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); /* TODO: define constant strings instead... */ typ = GEOSGeomType(this); if ( ! typ ) RETURN_NULL(); /* should get an exception first */ typVal = estrdup(typ); GEOSFree(typ); RETURN_STRING(typVal, 0); } /** * long GEOSGeometry::typeId() */ PHP_METHOD(Geometry, typeId) { GEOSGeometry *this; long typ; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); /* TODO: define constant strings instead... */ typ = GEOSGeomTypeId(this); if ( typ == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(typ); } /** * long GEOSGeometry::getSRID() */ PHP_METHOD(Geometry, getSRID) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGetSRID(geom); RETURN_LONG(ret); } /** * void GEOSGeometry::setSRID(long) */ PHP_METHOD(Geometry, setSRID) { GEOSGeometry *geom; long int srid; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &srid) == FAILURE) { RETURN_NULL(); } GEOSSetSRID(geom, srid); } /** * long GEOSGeometry::numGeometries() */ PHP_METHOD(Geometry, numGeometries) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGetNumGeometries(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * GEOSGeometry GEOSGeometry::geometryN() */ PHP_METHOD(Geometry, geometryN) { GEOSGeometry *geom; const GEOSGeometry *c; GEOSGeometry *cc; long int num; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &num) == FAILURE) { RETURN_NULL(); } if ( num >= GEOSGetNumGeometries(geom) ) RETURN_NULL(); c = GEOSGetGeometryN(geom, num); if ( ! c ) RETURN_NULL(); /* should get an exception first */ cc = GEOSGeom_clone(c); if ( ! cc ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, cc); } /** * long GEOSGeometry::numInteriorRings() */ PHP_METHOD(Geometry, numInteriorRings) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGetNumInteriorRings(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * long GEOSGeometry::numPoints() */ PHP_METHOD(Geometry, numPoints) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeomGetNumPoints(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * double GEOSGeometry::getX() */ PHP_METHOD(Geometry, getX) { GEOSGeometry *geom; int ret; double x; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeomGetX(geom, &x); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(x); } /** * double GEOSGeometry::getY() */ PHP_METHOD(Geometry, getY) { GEOSGeometry *geom; int ret; double y; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeomGetY(geom, &y); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(y); } /** * GEOSGeometry GEOSGeometry::interiorRingN() */ PHP_METHOD(Geometry, interiorRingN) { GEOSGeometry *geom; const GEOSGeometry *c; GEOSGeometry *cc; long int num; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &num) == FAILURE) { RETURN_NULL(); } if ( num >= GEOSGetNumInteriorRings(geom) ) RETURN_NULL(); c = GEOSGetInteriorRingN(geom, num); if ( ! c ) RETURN_NULL(); /* should get an exception first */ cc = GEOSGeom_clone(c); if ( ! cc ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, cc); } /** * GEOSGeometry GEOSGeometry::exteriorRing() */ PHP_METHOD(Geometry, exteriorRing) { GEOSGeometry *geom; const GEOSGeometry *c; GEOSGeometry *cc; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); c = GEOSGetExteriorRing(geom); if ( ! c ) RETURN_NULL(); /* should get an exception first */ cc = GEOSGeom_clone(c); if ( ! cc ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, cc); } /** * long GEOSGeometry::numCoordinates() */ PHP_METHOD(Geometry, numCoordinates) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGetNumCoordinates(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * long GEOSGeometry::dimension() * 0:puntual 1:lineal 2:areal */ PHP_METHOD(Geometry, dimension) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeom_getDimensions(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * long GEOSGeometry::coordinateDimension() */ PHP_METHOD(Geometry, coordinateDimension) { GEOSGeometry *geom; long int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSGeom_getCoordinateDimension(geom); if ( ret == -1 ) RETURN_NULL(); /* should get an exception first */ RETURN_LONG(ret); } /** * GEOSGeometry GEOSGeometry::pointN() */ PHP_METHOD(Geometry, pointN) { GEOSGeometry *geom; GEOSGeometry *c; long int num; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &num) == FAILURE) { RETURN_NULL(); } if ( num >= GEOSGeomGetNumPoints(geom) ) RETURN_NULL(); c = GEOSGeomGetPointN(geom, num); if ( ! c ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, c); } /** * GEOSGeometry GEOSGeometry::startPoint() */ PHP_METHOD(Geometry, startPoint) { GEOSGeometry *geom; GEOSGeometry *c; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); c = GEOSGeomGetStartPoint(geom); if ( ! c ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, c); } /** * GEOSGeometry GEOSGeometry::endPoint() */ PHP_METHOD(Geometry, endPoint) { GEOSGeometry *geom; GEOSGeometry *c; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); c = GEOSGeomGetEndPoint(geom); if ( ! c ) RETURN_NULL(); /* should get an exception first */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, c); } /** * double GEOSGeometry::area() */ PHP_METHOD(Geometry, area) { GEOSGeometry *geom; double area; int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSArea(geom, &area); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(area); } /** * double GEOSGeometry::length() */ PHP_METHOD(Geometry, length) { GEOSGeometry *geom; double length; int ret; geom = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSLength(geom, &length); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(length); } /** * double GEOSGeometry::distance(GEOSGeometry) */ PHP_METHOD(Geometry, distance) { GEOSGeometry *this; GEOSGeometry *other; zval *zobj; double dist; int ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSDistance(this, other, &dist); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(dist); } /** * double GEOSGeometry::hausdorffDistance(GEOSGeometry) */ PHP_METHOD(Geometry, hausdorffDistance) { GEOSGeometry *this; GEOSGeometry *other; zval *zobj; double dist; int ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSHausdorffDistance(this, other, &dist); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ RETURN_DOUBLE(dist); } PHP_METHOD(Geometry, snapTo) { GEOSGeometry *this; GEOSGeometry *other; GEOSGeometry *ret; double tolerance; zval *zobj; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "od", &zobj, &tolerance) == FAILURE) { RETURN_NULL(); } other = getRelay(zobj, Geometry_ce_ptr); ret = GEOSSnap(this, other, tolerance); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } PHP_METHOD(Geometry, node) { GEOSGeometry *this; GEOSGeometry *ret; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); ret = GEOSNode(this); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /* -- class GEOSWKTReader -------------------- */ PHP_METHOD(WKTReader, __construct); PHP_METHOD(WKTReader, read); static zend_function_entry WKTReader_methods[] = { PHP_ME(WKTReader, __construct, NULL, 0) PHP_ME(WKTReader, read, NULL, 0) {NULL, NULL, NULL} }; static zend_class_entry *WKTReader_ce_ptr; static zend_object_handlers WKTReader_object_handlers; static void WKTReader_dtor (void *object TSRMLS_DC) { Proxy *obj = (Proxy *)object; GEOSWKTReader_destroy((GEOSWKTReader*)obj->relay); zend_hash_destroy(obj->std.properties); FREE_HASHTABLE(obj->std.properties); efree(obj); } static zend_object_value WKTReader_create_obj (zend_class_entry *type TSRMLS_DC) { return Gen_create_obj(type, WKTReader_dtor, &WKTReader_object_handlers); } PHP_METHOD(WKTReader, __construct) { GEOSWKTReader* obj; zval *object = getThis(); obj = GEOSWKTReader_create(); if ( ! obj ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "GEOSWKTReader_create() failed (didn't initGEOS?)"); } setRelay(object, obj); } PHP_METHOD(WKTReader, read) { GEOSWKTReader *reader; GEOSGeometry *geom; char* wkt; int wktlen; reader = (GEOSWKTReader*)getRelay(getThis(), WKTReader_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &wkt, &wktlen) == FAILURE) { RETURN_NULL(); } geom = GEOSWKTReader_read(reader, wkt); /* we'll probably get an exception if geom is null */ if ( ! geom ) RETURN_NULL(); /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, geom); } /* -- class GEOSWKTWriter -------------------- */ PHP_METHOD(WKTWriter, __construct); PHP_METHOD(WKTWriter, write); PHP_METHOD(WKTWriter, setTrim); PHP_METHOD(WKTWriter, setRoundingPrecision); PHP_METHOD(WKTWriter, setOutputDimension); PHP_METHOD(WKTWriter, getOutputDimension); PHP_METHOD(WKTWriter, setOld3D); static zend_function_entry WKTWriter_methods[] = { PHP_ME(WKTWriter, __construct, NULL, 0) PHP_ME(WKTWriter, write, NULL, 0) PHP_ME(WKTWriter, setTrim, NULL, 0) PHP_ME(WKTWriter, setRoundingPrecision, NULL, 0) PHP_ME(WKTWriter, setOutputDimension, NULL, 0) PHP_ME(WKTWriter, getOutputDimension, NULL, 0) PHP_ME(WKTWriter, setOld3D, NULL, 0) {NULL, NULL, NULL} }; static zend_class_entry *WKTWriter_ce_ptr; static zend_object_handlers WKTWriter_object_handlers; static void WKTWriter_dtor (void *object TSRMLS_DC) { Proxy *obj = (Proxy *)object; GEOSWKTWriter_destroy((GEOSWKTWriter*)obj->relay); zend_hash_destroy(obj->std.properties); FREE_HASHTABLE(obj->std.properties); efree(obj); } static zend_object_value WKTWriter_create_obj (zend_class_entry *type TSRMLS_DC) { return Gen_create_obj(type, WKTWriter_dtor, &WKTWriter_object_handlers); } PHP_METHOD(WKTWriter, __construct) { GEOSWKTWriter* obj; zval *object = getThis(); obj = GEOSWKTWriter_create(); if ( ! obj ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "GEOSWKTWriter_create() failed (didn't initGEOS?)"); } setRelay(object, obj); } PHP_METHOD(WKTWriter, write) { GEOSWKTWriter *writer; zval *zobj; GEOSGeometry *geom; char* wkt; char* retstr; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } geom = getRelay(zobj, Geometry_ce_ptr); wkt = GEOSWKTWriter_write(writer, geom); /* we'll probably get an exception if wkt is null */ if ( ! wkt ) RETURN_NULL(); retstr = estrdup(wkt); GEOSFree(wkt); RETURN_STRING(retstr, 0); } PHP_METHOD(WKTWriter, setTrim) { GEOSWKTWriter *writer; zend_bool trimval; char trim; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &trimval) == FAILURE) { RETURN_NULL(); } trim = trimval; GEOSWKTWriter_setTrim(writer, trim); } PHP_METHOD(WKTWriter, setRoundingPrecision) { GEOSWKTWriter *writer; long int prec; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &prec) == FAILURE) { RETURN_NULL(); } GEOSWKTWriter_setRoundingPrecision(writer, prec); } /** * void GEOSWKTWriter::setOutputDimension() */ PHP_METHOD(WKTWriter, setOutputDimension) { GEOSWKTWriter *writer; long int dim; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dim) == FAILURE) { RETURN_NULL(); } GEOSWKTWriter_setOutputDimension(writer, dim); } /** * long GEOSWKTWriter::getOutputDimension() */ PHP_METHOD(WKTWriter, getOutputDimension) { GEOSWKTWriter *writer; long int ret; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); ret = GEOSWKTWriter_getOutputDimension(writer); RETURN_LONG(ret); } PHP_METHOD(WKTWriter, setOld3D) { GEOSWKTWriter *writer; zend_bool bval; int val; writer = (GEOSWKTWriter*)getRelay(getThis(), WKTWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &bval) == FAILURE) { RETURN_NULL(); } val = bval; GEOSWKTWriter_setOld3D(writer, val); } /* -- class GEOSWKBWriter -------------------- */ PHP_METHOD(WKBWriter, __construct); PHP_METHOD(WKBWriter, getOutputDimension); PHP_METHOD(WKBWriter, setOutputDimension); PHP_METHOD(WKBWriter, getByteOrder); PHP_METHOD(WKBWriter, setByteOrder); PHP_METHOD(WKBWriter, setIncludeSRID); PHP_METHOD(WKBWriter, getIncludeSRID); PHP_METHOD(WKBWriter, writeHEX); static zend_function_entry WKBWriter_methods[] = { PHP_ME(WKBWriter, __construct, NULL, 0) PHP_ME(WKBWriter, getOutputDimension, NULL, 0) PHP_ME(WKBWriter, setOutputDimension, NULL, 0) PHP_ME(WKBWriter, getByteOrder, NULL, 0) PHP_ME(WKBWriter, setByteOrder, NULL, 0) PHP_ME(WKBWriter, getIncludeSRID, NULL, 0) PHP_ME(WKBWriter, setIncludeSRID, NULL, 0) PHP_ME(WKBWriter, writeHEX, NULL, 0) {NULL, NULL, NULL} }; static zend_class_entry *WKBWriter_ce_ptr; static zend_object_handlers WKBWriter_object_handlers; static void WKBWriter_dtor (void *object TSRMLS_DC) { Proxy *obj = (Proxy *)object; GEOSWKBWriter_destroy((GEOSWKBWriter*)obj->relay); zend_hash_destroy(obj->std.properties); FREE_HASHTABLE(obj->std.properties); efree(obj); } static zend_object_value WKBWriter_create_obj (zend_class_entry *type TSRMLS_DC) { return Gen_create_obj(type, WKBWriter_dtor, &WKBWriter_object_handlers); } /** * GEOSWKBWriter w = new GEOSWKBWriter() */ PHP_METHOD(WKBWriter, __construct) { GEOSWKBWriter* obj; zval *object = getThis(); obj = GEOSWKBWriter_create(); if ( ! obj ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "GEOSWKBWriter_create() failed (didn't initGEOS?)"); } setRelay(object, obj); } /** * long GEOSWKBWriter::getOutputDimension(); */ PHP_METHOD(WKBWriter, getOutputDimension) { GEOSWKBWriter *writer; long int ret; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); ret = GEOSWKBWriter_getOutputDimension(writer); RETURN_LONG(ret); } /** * void GEOSWKBWriter::setOutputDimension(dims); */ PHP_METHOD(WKBWriter, setOutputDimension) { GEOSWKBWriter *writer; long int dim; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dim) == FAILURE) { RETURN_NULL(); } GEOSWKBWriter_setOutputDimension(writer, dim); } /** * string GEOSWKBWriter::writeHEX(GEOSGeometry) */ PHP_METHOD(WKBWriter, writeHEX) { GEOSWKBWriter *writer; zval *zobj; GEOSGeometry *geom; char *ret; size_t retsize; /* useless... */ char* retstr; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } geom = getRelay(zobj, Geometry_ce_ptr); ret = (char*)GEOSWKBWriter_writeHEX(writer, geom, &retsize); /* we'll probably get an exception if ret is null */ if ( ! ret ) RETURN_NULL(); retstr = estrndup(ret, retsize); GEOSFree(ret); RETURN_STRING(retstr, 0); } /** * long GEOSWKBWriter::getByteOrder(); */ PHP_METHOD(WKBWriter, getByteOrder) { GEOSWKBWriter *writer; long int ret; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); ret = GEOSWKBWriter_getByteOrder(writer); RETURN_LONG(ret); } /** * void GEOSWKBWriter::setByteOrder(dims); */ PHP_METHOD(WKBWriter, setByteOrder) { GEOSWKBWriter *writer; long int dim; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &dim) == FAILURE) { RETURN_NULL(); } GEOSWKBWriter_setByteOrder(writer, dim); } /** * bool GEOSWKBWriter::getIncludeSRID(); */ PHP_METHOD(WKBWriter, getIncludeSRID) { GEOSWKBWriter *writer; int ret; zend_bool retBool; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); ret = GEOSWKBWriter_getIncludeSRID(writer); retBool = ret; RETURN_BOOL(retBool); } /** * void GEOSWKBWriter::setIncludeSRID(bool); */ PHP_METHOD(WKBWriter, setIncludeSRID) { GEOSWKBWriter *writer; int inc; zend_bool incVal; writer = (GEOSWKBWriter*)getRelay(getThis(), WKBWriter_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &incVal) == FAILURE) { RETURN_NULL(); } inc = incVal; GEOSWKBWriter_setIncludeSRID(writer, inc); } /* -- class GEOSWKBReader -------------------- */ PHP_METHOD(WKBReader, __construct); PHP_METHOD(WKBReader, readHEX); static zend_function_entry WKBReader_methods[] = { PHP_ME(WKBReader, __construct, NULL, 0) PHP_ME(WKBReader, readHEX, NULL, 0) {NULL, NULL, NULL} }; static zend_class_entry *WKBReader_ce_ptr; static zend_object_handlers WKBReader_object_handlers; static void WKBReader_dtor (void *object TSRMLS_DC) { Proxy *obj = (Proxy *)object; GEOSWKBReader_destroy((GEOSWKBReader*)obj->relay); zend_hash_destroy(obj->std.properties); FREE_HASHTABLE(obj->std.properties); efree(obj); } static zend_object_value WKBReader_create_obj (zend_class_entry *type TSRMLS_DC) { return Gen_create_obj(type, WKBReader_dtor, &WKBReader_object_handlers); } PHP_METHOD(WKBReader, __construct) { GEOSWKBReader* obj; zval *object = getThis(); obj = GEOSWKBReader_create(); if ( ! obj ) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "GEOSWKBReader_create() failed (didn't initGEOS?)"); } setRelay(object, obj); } PHP_METHOD(WKBReader, readHEX) { GEOSWKBReader *reader; GEOSGeometry *geom; unsigned char* wkb; int wkblen; reader = (GEOSWKBReader*)getRelay(getThis(), WKBReader_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &wkb, &wkblen) == FAILURE) { RETURN_NULL(); } geom = GEOSWKBReader_readHEX(reader, wkb, wkblen); /* we'll probably get an exception if geom is null */ if ( ! geom ) RETURN_NULL(); /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, geom); } /* -- Free functions ------------------------- */ /** * string GEOSVersion() */ PHP_FUNCTION(GEOSVersion) { char *str; str = estrdup(GEOSversion()); RETURN_STRING(str, 0); } /** * array GEOSPolygonize(GEOSGeometry $geom) * * The returned array contains the following elements: * * - 'rings' * Type: array of GEOSGeometry * Rings that can be formed by the costituent * linework of geometry. * - 'cut_edges' (optional) * Type: array of GEOSGeometry * Edges which are connected at both ends but * which do not form part of polygon. * - 'dangles' * Type: array of GEOSGeometry * Edges which have one or both ends which are * not incident on another edge endpoint * - 'invalid_rings' * Type: array of GEOSGeometry * Edges which form rings which are invalid * (e.g. the component lines contain a self-intersection) * */ PHP_FUNCTION(GEOSPolygonize) { GEOSGeometry *this; GEOSGeometry *rings; GEOSGeometry *cut_edges; GEOSGeometry *dangles; GEOSGeometry *invalid_rings; zval *array_elem; zval *zobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } this = getRelay(zobj, Geometry_ce_ptr); rings = GEOSPolygonize_full(this, &cut_edges, &dangles, &invalid_rings); if ( ! rings ) RETURN_NULL(); /* should get an exception first */ /* return value should be an array */ array_init(return_value); MAKE_STD_ZVAL(array_elem); array_init(array_elem); dumpGeometry(rings, array_elem); GEOSGeom_destroy(rings); add_assoc_zval(return_value, "rings", array_elem); MAKE_STD_ZVAL(array_elem); array_init(array_elem); dumpGeometry(cut_edges, array_elem); GEOSGeom_destroy(cut_edges); add_assoc_zval(return_value, "cut_edges", array_elem); MAKE_STD_ZVAL(array_elem); array_init(array_elem); dumpGeometry(dangles, array_elem); GEOSGeom_destroy(dangles); add_assoc_zval(return_value, "dangles", array_elem); MAKE_STD_ZVAL(array_elem); array_init(array_elem); dumpGeometry(invalid_rings, array_elem); GEOSGeom_destroy(invalid_rings); add_assoc_zval(return_value, "invalid_rings", array_elem); } /** * array GEOSLineMerge(GEOSGeometry $geom) */ PHP_FUNCTION(GEOSLineMerge) { GEOSGeometry *geom_in; GEOSGeometry *geom_out; zval *zobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) == FAILURE) { RETURN_NULL(); } geom_in = getRelay(zobj, Geometry_ce_ptr); geom_out = GEOSLineMerge(geom_in); if ( ! geom_out ) RETURN_NULL(); /* should get an exception first */ /* return value should be an array */ array_init(return_value); dumpGeometry(geom_out, return_value); GEOSGeom_destroy(geom_out); } /** * GEOSGeometry GEOSSharedPaths(GEOSGeometry $geom1, GEOSGeometry *geom2) */ PHP_FUNCTION(GEOSSharedPaths) { GEOSGeometry *geom_in_1; GEOSGeometry *geom_in_2; GEOSGeometry *geom_out; zval *zobj1, *zobj2; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oo", &zobj1, &zobj2) == FAILURE) { RETURN_NULL(); } geom_in_1 = getRelay(zobj1, Geometry_ce_ptr); geom_in_2 = getRelay(zobj2, Geometry_ce_ptr); geom_out = GEOSSharedPaths(geom_in_1, geom_in_2); if ( ! geom_out ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, geom_out); } /** * GEOSGeometry::delaunayTriangulation([], []) * * styleArray keys supported: * 'tolerance' * Type: double * snapping tolerance to use for improved robustness * 'edgesOnly' * Type: boolean * if true will return a MULTILINESTRING, otherwise (the default) * it will return a GEOMETRYCOLLECTION containing triangular POLYGONs. */ PHP_METHOD(Geometry, delaunayTriangulation) { GEOSGeometry *this; GEOSGeometry *ret; double tolerance = 0.0; zend_bool edgeonly = 0; this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|db", &tolerance, &edgeonly) == FAILURE) { RETURN_NULL(); } ret = GEOSDelaunayTriangulation(this, tolerance, edgeonly ? 1 : 0); if ( ! ret ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ object_init_ex(return_value, Geometry_ce_ptr); setRelay(return_value, ret); } /** * bool GEOSRelateMatch(string matrix, string pattern) */ PHP_FUNCTION(GEOSRelateMatch) { char* mat = NULL; int matlen; char* pat = NULL; int patlen; int ret; zend_bool retBool; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &mat, &matlen, &pat, &patlen) == FAILURE) { RETURN_NULL(); } ret = GEOSRelatePatternMatch(mat, pat); if ( ret == 2 ) RETURN_NULL(); /* should get an exception first */ /* return_value is a zval */ retBool = ret; RETURN_BOOL(retBool); } /* ------ Initialization / Deinitialization / Meta ------------------ */ /* per-module initialization */ PHP_MINIT_FUNCTION(geos) { zend_class_entry ce; /* WKTReader */ INIT_CLASS_ENTRY(ce, "GEOSWKTReader", WKTReader_methods); WKTReader_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); WKTReader_ce_ptr->create_object = WKTReader_create_obj; memcpy(&WKTReader_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); WKTReader_object_handlers.clone_obj = NULL; /* WKTWriter */ INIT_CLASS_ENTRY(ce, "GEOSWKTWriter", WKTWriter_methods); WKTWriter_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); WKTWriter_ce_ptr->create_object = WKTWriter_create_obj; memcpy(&WKTWriter_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); WKTWriter_object_handlers.clone_obj = NULL; /* Geometry */ INIT_CLASS_ENTRY(ce, "GEOSGeometry", Geometry_methods); Geometry_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); Geometry_ce_ptr->create_object = Geometry_create_obj; memcpy(&Geometry_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); Geometry_object_handlers.clone_obj = NULL; /* Geometry serialization */ Geometry_ce_ptr->serialize = Geometry_serialize; Geometry_ce_ptr->unserialize = Geometry_deserialize; /* WKBWriter */ INIT_CLASS_ENTRY(ce, "GEOSWKBWriter", WKBWriter_methods); WKBWriter_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); WKBWriter_ce_ptr->create_object = WKBWriter_create_obj; memcpy(&WKBWriter_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); WKBWriter_object_handlers.clone_obj = NULL; /* WKBReader */ INIT_CLASS_ENTRY(ce, "GEOSWKBReader", WKBReader_methods); WKBReader_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); WKBReader_ce_ptr->create_object = WKBReader_create_obj; memcpy(&WKBReader_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); WKBReader_object_handlers.clone_obj = NULL; /* Constants */ REGISTER_LONG_CONSTANT("GEOSBUF_CAP_ROUND", GEOSBUF_CAP_ROUND, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSBUF_CAP_FLAT", GEOSBUF_CAP_FLAT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSBUF_CAP_SQUARE", GEOSBUF_CAP_SQUARE, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSBUF_JOIN_ROUND", GEOSBUF_JOIN_ROUND, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSBUF_JOIN_MITRE", GEOSBUF_JOIN_MITRE, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSBUF_JOIN_BEVEL", GEOSBUF_JOIN_BEVEL, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_POINT", GEOS_POINT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_LINESTRING", GEOS_LINESTRING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_LINEARRING", GEOS_LINEARRING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_POLYGON", GEOS_POLYGON, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_MULTIPOINT", GEOS_MULTIPOINT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_MULTILINESTRING", GEOS_MULTILINESTRING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_MULTIPOLYGON", GEOS_MULTIPOLYGON, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOS_GEOMETRYCOLLECTION", GEOS_GEOMETRYCOLLECTION, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE", GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSRELATE_BNR_MOD2", GEOSRELATE_BNR_MOD2, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSRELATE_BNR_OGC", GEOSRELATE_BNR_OGC, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSRELATE_BNR_ENDPOINT", GEOSRELATE_BNR_ENDPOINT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSRELATE_BNR_MULTIVALENT_ENDPOINT", GEOSRELATE_BNR_MULTIVALENT_ENDPOINT, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("GEOSRELATE_BNR_MONOVALENT_ENDPOINT", GEOSRELATE_BNR_MONOVALENT_ENDPOINT, CONST_CS|CONST_PERSISTENT); return SUCCESS; } /* per-module shutdown */ PHP_MSHUTDOWN_FUNCTION(geos) { delGeometrySerializer(); delGeometryDeserializer(); return SUCCESS; } /* per-request initialization */ PHP_RINIT_FUNCTION(geos) { initGEOS(noticeHandler, errorHandler); return SUCCESS; } /* pre-request destruction */ PHP_RSHUTDOWN_FUNCTION(geos) { finishGEOS(); return SUCCESS; } /* module info */ PHP_MINFO_FUNCTION(geos) { php_info_print_table_start(); php_info_print_table_row(2, "GEOS - Geometry Engine Open Source", "enabled"); php_info_print_table_row(2, "Version", PHP_GEOS_VERSION); php_info_print_table_end(); } geos-3.4.2/php/php_geos.h0000644000175000017500000000255312206417146015051 0ustar frankiefrankie/*********************************************************************** * * GEOS - Geometry Engine Open Source * http://trac.osgeo.org/geos * * Copyright (C) 2010 Sandro Santilli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser 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 St, Fifth Floor, * Boston, MA 02110-1301 USA * ***********************************************************************/ #ifndef PHP_GEOS_H #define PHP_GEOS_H /* TODO: generate from ./configure ? */ #define PHP_GEOS_VERSION "0.0" #define PHP_GEOS_EXTNAME "geos" #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" extern zend_module_entry geos_module_entry; #define phpext_geos_ptr &geos_module_entry; #endif /* PHP_GEOS_H */ geos-3.4.2/php/test/0000755000175000017500000000000012206417241014042 5ustar frankiefrankiegeos-3.4.2/php/test/Makefile.am0000644000175000017500000000274012206417146016105 0ustar frankiefrankie####################################################################### # # GEOS - Geometry Engine Open Source # http://trac.osgeo.org/geos # # Copyright (C) 2010 Sandro Santilli # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser 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 St, Fifth Floor, # Boston, MA 02110-1301 USA # ####################################################################### EXTRA_DIST = test.php crashme.php abs_topbuilddir=`cd $(top_builddir); pwd` abs_srcdir=`cd $(srcdir); pwd` if HAVE_PHP PHPOPTS = -n -d enable_dl=On -d extension_dir=$(abs_topbuilddir)/php/.libs crashtest: $(PHP) $(PHPOPTS) $(abs_srcdir)/crashme.php if HAVE_PHP_UNIT TESTS = phpunit phpunit: test.php echo "#!/bin/sh" > $@ echo "$(PHP) $(PHPOPTS) $(PHPUNIT) test $(abs_srcdir)/test.php $$@" >> $@ chmod +x $@ clean-local: rm -f phpunit endif endif geos-3.4.2/php/test/Makefile.in0000644000175000017500000003743112206417163016122 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ####################################################################### # # GEOS - Geometry Engine Open Source # http://trac.osgeo.org/geos # # Copyright (C) 2010 Sandro Santilli # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser 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 St, Fifth Floor, # Boston, MA 02110-1301 USA # ####################################################################### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = php/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = `cd $(srcdir); pwd` abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = test.php crashme.php abs_topbuilddir = `cd $(top_builddir); pwd` @HAVE_PHP_TRUE@PHPOPTS = -n -d enable_dl=On -d extension_dir=$(abs_topbuilddir)/php/.libs @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@TESTS = phpunit all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu php/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu php/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @HAVE_PHP_FALSE@clean-local: @HAVE_PHP_UNIT_FALSE@clean-local: clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool clean-local distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am @HAVE_PHP_TRUE@crashtest: @HAVE_PHP_TRUE@ $(PHP) $(PHPOPTS) $(abs_srcdir)/crashme.php @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@phpunit: test.php @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@ echo "#!/bin/sh" > $@ @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@ echo "$(PHP) $(PHPOPTS) $(PHPUNIT) test $(abs_srcdir)/test.php $$@" >> $@ @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@ chmod +x $@ @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@clean-local: @HAVE_PHP_TRUE@@HAVE_PHP_UNIT_TRUE@ rm -f phpunit # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/php/test/crashme.php0000644000175000017500000000061212206417146016200 0ustar frankiefrankietest(); geos-3.4.2/php/test/test.php0000644000175000017500000023450212206417146015544 0ustar frankiefrankieassertContains('-CAPI-', GEOSVersion()); } public function testConstants() { $this->assertEquals(1, GEOSBUF_CAP_ROUND); $this->assertEquals(2, GEOSBUF_CAP_FLAT); $this->assertEquals(3, GEOSBUF_CAP_SQUARE); $this->assertEquals(1, GEOSBUF_JOIN_ROUND); $this->assertEquals(2, GEOSBUF_JOIN_MITRE); $this->assertEquals(3, GEOSBUF_JOIN_BEVEL); $this->assertEquals(0, GEOS_POINT); $this->assertEquals(1, GEOS_LINESTRING); $this->assertEquals(2, GEOS_LINEARRING); $this->assertEquals(3, GEOS_POLYGON); $this->assertEquals(4, GEOS_MULTIPOINT); $this->assertEquals(5, GEOS_MULTILINESTRING); $this->assertEquals(6, GEOS_MULTIPOLYGON); $this->assertEquals(7, GEOS_GEOMETRYCOLLECTION); $this->assertEquals(1, GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE); $this->assertEquals(1, GEOSRELATE_BNR_MOD2); $this->assertEquals(1, GEOSRELATE_BNR_OGC); $this->assertEquals(2, GEOSRELATE_BNR_ENDPOINT); $this->assertEquals(3, GEOSRELATE_BNR_MULTIVALENT_ENDPOINT); $this->assertEquals(4, GEOSRELATE_BNR_MONOVALENT_ENDPOINT); } public function testWKTReader__construct() { $reader = new GEOSWKTReader(); $this->assertNotNull($reader); } public function testWKTReader_read() { $reader = new GEOSWKTReader(); /* Good WKT */ $geom = $reader->read('POINT(0 0)'); $this->assertNotNull($geom); $geom = $reader->read('POINT(0 0 0)'); $this->assertNotNull($geom); $geom = $reader->read('POINT Z (0 0 0)'); $this->assertNotNull($geom); $geom = $reader->read('POINT EMPTY'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOINT(0 0 1, 2 3 4)'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOINT Z (0 0 1, 2 3 4)'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOINT((0 0), (2 3))'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOINT EMPTY'); $this->assertNotNull($geom); $geom = $reader->read('LINESTRING(0 0 1, 2 3 4)'); $this->assertNotNull($geom); $geom = $reader->read('LINESTRING EMPTY'); $this->assertNotNull($geom); $geom = $reader->read('MULTILINESTRING((0 0 1, 2 3 4), (10 10 2, 3 4 5))'); $this->assertNotNull($geom); $geom = $reader->read('MULTILINESTRING Z ((0 0 1, 2 3 4), (10 10 2, 3 4 5))'); $this->assertNotNull($geom); $geom = $reader->read('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertNotNull($geom); $geom = $reader->read('POLYGON EMPTY'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOLYGON( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) )'); $this->assertNotNull($geom); $geom = $reader->read('MULTIPOLYGON EMPTY'); $this->assertNotNull($geom); $geom = $reader->read('GEOMETRYCOLLECTION( MULTIPOLYGON( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) ), POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING((0 0, 2 3), (10 10, 3 4)), LINESTRING(0 0, 2 3), MULTIPOINT(0 0, 2 3), POINT(9 0) )'); $this->assertNotNull($geom); $geom = $reader->read('GEOMETRYCOLLECTION EMPTY'); $this->assertNotNull($geom); /* BOGUS WKT */ try { $reader->read("MULTIDOT(0 1 2 3)"); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('ParseException', $e->getMessage()); } /* BOGUS call (#448) */ try { $reader->read(); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('expects exactly 1 parameter', $e->getMessage()); } } public function testWKTWriter__construct() { $writer = new GEOSWKTWriter(); $this->assertNotNull($writer); } public function testWKTWriter_write() { $writer = new GEOSWKTWriter(); $reader = new GEOSWKTReader(); try { $writer->write(1); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('expects parameter 1', $e->getMessage()); } $g = $reader->read('POINT(6 7)'); $this->assertEquals('POINT (6.0000000000000000 7.0000000000000000)', $writer->write($g)); } public function testWKTWriter_setTrim() { $writer = new GEOSWKTWriter(); $reader = new GEOSWKTReader(); $g = $reader->read('POINT(6 7)'); $this->assertNotNull($g); $writer->setTrim(TRUE); $this->assertEquals('POINT (6 7)', $writer->write($g)); $writer->setTrim(FALSE); $this->assertEquals('POINT (6.0000000000000000 7.0000000000000000)', $writer->write($g)); } public function testWKT_roundTrip() { $r = new GEOSWKTReader(); $w = new GEOSWKTWriter(); $w->setTrim(TRUE); $in[] = 'POINT (0 0)'; $in[] = 'POINT EMPTY'; $in[] = 'MULTIPOINT (0 1, 2 3)'; $in[] = 'MULTIPOINT EMPTY'; $in[] = 'LINESTRING (0 0, 2 3)'; $in[] = 'LINESTRING EMPTY'; $in[] = 'MULTILINESTRING ((0 1, 2 3), (10 10, 3 4))'; $in[] = 'MULTILINESTRING EMPTY'; $in[] = 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'; $in[] = 'POLYGON EMPTY'; $in[] = 'MULTIPOLYGON (((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)))'; $in[] = 'MULTIPOLYGON EMPTY'; $in[] = 'GEOMETRYCOLLECTION (MULTIPOLYGON (((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11))), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0))'; $in[] = 'GEOMETRYCOLLECTION EMPTY'; foreach ($in as $i) { $this->assertEquals($i, $w->write($r->read($i))); } } public function testWKTWriter_setRoundingPrecision() { $writer = new GEOSWKTWriter(); $reader = new GEOSWKTReader(); $g = $reader->read('POINT(6.123456 7.123456)'); $this->assertEquals('POINT (6.1234560000000000 7.1234560000000000)', $writer->write($g)); $writer->setRoundingPrecision(2); $this->assertEquals('POINT (6.12 7.12)', $writer->write($g)); $writer->setRoundingPrecision(5); /* rounds */ $this->assertEquals('POINT (6.12346 7.12346)', $writer->write($g)); $writer->setRoundingPrecision(1); $this->assertEquals('POINT (6.1 7.1)', $writer->write($g)); $writer->setRoundingPrecision(0); $this->assertEquals('POINT (6 7)', $writer->write($g)); } public function testWKTWriter_getOutputDimension() { $writer = new GEOSWKTWriter(); $this->assertEquals(2, $writer->getOutputDimension()); } public function testWKTWriter_setOutputDimension() { $reader = new GEOSWKTReader(); $g3d = $reader->read('POINT(1 2 3)'); $g2d = $reader->read('POINT(3 2)'); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); # Only 2d by default $this->assertEquals('POINT (1 2)', $writer->write($g3d)); # 3d if requested _and_ available $writer->setOutputDimension(3); $this->assertEquals('POINT Z (1 2 3)', $writer->write($g3d)); $this->assertEquals('POINT (3 2)', $writer->write($g2d)); # 1 is invalid try { $writer->setOutputDimension(1); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('must be 2 or 3', $e->getMessage()); } # 4 is invalid try { $writer->setOutputDimension(4); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('must be 2 or 3', $e->getMessage()); } } public function testWKTWriter_setOld3D() { $reader = new GEOSWKTReader(); $g3d = $reader->read('POINT(1 2 3)'); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); # New 3d WKT by default $writer->setOutputDimension(3); $this->assertEquals('POINT Z (1 2 3)', $writer->write($g3d)); # Switch to old $writer->setOld3D(TRUE); $this->assertEquals('POINT (1 2 3)', $writer->write($g3d)); # Old3d flag is not reset when changing dimensions $writer->setOutputDimension(2); $this->assertEquals('POINT (1 2)', $writer->write($g3d)); $writer->setOutputDimension(3); $this->assertEquals('POINT (1 2 3)', $writer->write($g3d)); # Likewise, dimensions spec is not reset when changing old3d flag $writer->setOld3D(FALSE); $this->assertEquals('POINT Z (1 2 3)', $writer->write($g3d)); } public function testGeometry_serialization() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); $writer->setOutputDimension(3); $g = $reader->read('POINT(6 7 8)'); $g->setSRID(54); $a = array('geom' => $g, 'name' => 'test geometry'); $srl = serialize($a); $a2 = unserialize($srl); $this->assertEquals('POINT Z (6 7 8)', $writer->write($a['geom'])); } public function testGeometry_project() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(1 2)'); $g2 = $reader->read('POINT(3 4)'); /* The method only accept lineal geometries */ try { $prj = $g->project($g2); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('lineal', $e->getMessage()); } $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('POINT(0 0)'); $prj = $g->project($g2); $this->assertEquals(0, $prj); $prj = $g->project($g2, TRUE); $this->assertEquals(0, $prj); $g2 = $reader->read('POINT(10 0)'); $prj = $g->project($g2); $this->assertEquals(10, $prj); $prj = $g->project($g2, TRUE); $this->assertEquals(1, $prj); $g2 = $reader->read('POINT(5 0)'); $prj = $g->project($g2); $this->assertEquals(5, $prj); $prj = $g->project($g2, TRUE); $this->assertEquals(0.5, $prj); $g = $reader->read('MULTILINESTRING((0 0, 10 0),(20 10, 20 20))'); $g2 = $reader->read('POINT(20 0)'); $prj = $g->project($g2); $this->assertEquals(10, $prj); $prj = $g->project($g2, TRUE); $this->assertEquals(0.5, $prj); $g2 = $reader->read('POINT(20 5)'); $prj = $g->project($g2); $this->assertEquals(10, $prj); $prj = $g->project($g2, TRUE); $this->assertEquals(0.5, $prj); } public function testGeometry_interpolate() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); /* The method only accept LineString geometries */ $g = $reader->read('POINT(1 2)'); try { $prj = $g->interpolate(0); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('LineString', $e->getMessage()); } $g = $reader->read('LINESTRING(0 0, 10 0)'); $prj = $g->interpolate(0); $this->assertNotNull($prj); $this->assertEquals('POINT (0 0)', $writer->write($prj)); $prj = $g->interpolate(0, TRUE); $this->assertNotNull($prj); $this->assertEquals('POINT (0 0)', $writer->write($prj)); $prj = $g->interpolate(5); $this->assertNotNull($prj); $this->assertEquals('POINT (5 0)', $writer->write($prj)); $prj = $g->interpolate(0.5, TRUE); $this->assertNotNull($prj); $this->assertEquals('POINT (5 0)', $writer->write($prj)); /* return closest on longer distance */ $prj = $g->interpolate(20); $this->assertNotNull($prj); $this->assertEquals('POINT (10 0)', $writer->write($prj)); $prj = $g->interpolate(2, TRUE); $this->assertNotNull($prj); $this->assertEquals('POINT (10 0)', $writer->write($prj)); } public function testGeometry_buffer() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->buffer(0); $this->assertEquals('POLYGON EMPTY', $writer->write($b)); $b = $g->buffer(10); $this->assertEquals( 'POLYGON ((10 0, 10 -2, 9 -4, 8 -6, 7 -7, 6 -8, 4 -9, 2 -10, 0 -10, -2 -10, -4 -9, -6 -8, -7 -7, -8 -6, -9 -4, -10 -2, -10 -0, -10 2, -9 4, -8 6, -7 7, -6 8, -4 9, -2 10, -0 10, 2 10, 4 9, 6 8, 7 7, 8 6, 9 4, 10 2, 10 0))' , $writer->write($b)); # One segment per quadrant $b = $g->buffer(10, array('quad_segs' => 1)); $this->assertEquals( 'POLYGON ((10 0, 0 -10, -10 -0, -0 10, 10 0))' , $writer->write($b)); /* End cap styles */ $g = $reader->read('LINESTRING(0 0, 100 0)'); $b = $g->buffer(10, array( 'quad_segs' => 1, 'endcap' => GEOSBUF_CAP_ROUND )); $this->assertEquals( 'POLYGON ((100 10, 110 0, 100 -10, 0 -10, -10 0, 0 10, 100 10))' , $writer->write($b)); $b = $g->buffer(10, array( 'quad_segs' => 1, 'endcap' => GEOSBUF_CAP_FLAT )); $this->assertEquals( 'POLYGON ((100 10, 100 -10, 0 -10, 0 10, 100 10))' , $writer->write($b)); $b = $g->buffer(10, array( 'quad_segs' => 1, 'endcap' => GEOSBUF_CAP_SQUARE )); $this->assertEquals( 'POLYGON ((100 10, 110 10, 110 -10, 0 -10, -10 -10, -10 10, 100 10))' , $writer->write($b)); /* Join styles */ $g = $reader->read('LINESTRING(0 0, 100 0, 100 100)'); $b = $g->buffer(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_ROUND )); $this->assertEquals( 'POLYGON ((90 10, 90 100, 93 107, 100 110, 107 107, 110 100, 110 0, 107 -7, 100 -10, 0 -10, -7 -7, -10 0, -7 7, 0 10, 90 10))' , $writer->write($b)); $b = $g->buffer(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_BEVEL )); $this->assertEquals( 'POLYGON ((90 10, 90 100, 93 107, 100 110, 107 107, 110 100, 110 0, 100 -10, 0 -10, -7 -7, -10 0, -7 7, 0 10, 90 10))' , $writer->write($b)); $b = $g->buffer(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_MITRE )); $this->assertEquals( 'POLYGON ((90 10, 90 100, 93 107, 100 110, 107 107, 110 100, 110 -10, 0 -10, -7 -7, -10 0, -7 7, 0 10, 90 10))' , $writer->write($b)); $b = $g->buffer(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_MITRE, 'mitre_limit' => 1.0 )); $this->assertEquals( 'POLYGON ((90 10, 90 100, 93 107, 100 110, 107 107, 110 100, 109 -5, 105 -9, 0 -10, -7 -7, -10 0, -7 7, 0 10, 90 10))' , $writer->write($b)); /* Check that elements of the passed style array are not * type-converted (buffer op will need to type-convert * internally) */ $ary = array('a' => 1); $myStyle = array( 'quad_segs' => "a string", 'join' => "1", 'endcap' => $ary, 'mitre_limit' => 2 /* an int.. */ ); $this->assertEquals('string', gettype($myStyle['quad_segs'])); $this->assertEquals('string', gettype($myStyle['join'])); $this->assertEquals('array', gettype($myStyle['endcap'])); $this->assertEquals('integer', gettype($myStyle['mitre_limit'])); $b = $g->buffer(10, $myStyle); $this->assertEquals('string', gettype($myStyle['quad_segs'])); $this->assertEquals('string', gettype($myStyle['join'])); $this->assertEquals('array', gettype($myStyle['endcap'])); $this->assertEquals('integer', gettype($myStyle['mitre_limit'])); /* Single-sided buffering */ $g = $reader->read('LINESTRING(0 0, 100 0)'); $b = $g->buffer(10, array( 'single_sided' => true )); $this->assertEquals( 'POLYGON ((100 0, 0 0, 0 10, 100 10, 100 0))' , $writer->write($b)); $b = $g->buffer(-10, array( 'single_sided' => true )); $this->assertEquals( 'POLYGON ((0 0, 100 0, 100 -10, 0 -10, 0 0))' , $writer->write($b)); } public function testGeometry_offsetCurve() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* Join styles */ $g = $reader->read('LINESTRING(0 0, 100 0, 100 100)'); /* left, round join */ $b = $g->offsetCurve(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_ROUND )); $this->assertEquals( 'LINESTRING (0 10, 90 10, 90 100)' , $writer->write($b)); /* right, round join */ $b = $g->offsetCurve(-10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_ROUND )); $this->assertEquals( 'LINESTRING (110 100, 110 0, 107 -7, 100 -10, 0 -10)' , $writer->write($b)); /* left, bevel join */ $b = $g->offsetCurve(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_BEVEL )); $this->assertEquals( 'LINESTRING (0 10, 90 10, 90 100)' , $writer->write($b)); /* right, bevel join */ $b = $g->offsetCurve(-10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_BEVEL )); $this->assertEquals( 'LINESTRING (110 100, 110 0, 100 -10, 0 -10)' , $writer->write($b)); /* left, mitre join */ $b = $g->offsetCurve(10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_MITRE )); $this->assertEquals( 'LINESTRING (0 10, 90 10, 90 100)' , $writer->write($b)); /* right, mitre join */ $b = $g->offsetCurve(-10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_MITRE )); $this->assertEquals( 'LINESTRING (110 100, 110 -10, 0 -10)' , $writer->write($b)); /* right, mitre join limited */ $b = $g->offsetCurve(-10, array( 'quad_segs' => 2, 'join' => GEOSBUF_JOIN_MITRE, 'mitre_limit' => 1.0 )); $this->assertEquals( 'LINESTRING (110 100, 109 -5, 105 -9, 0 -10)' , $writer->write($b)); } public function testGeometry_envelope() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->envelope(); $this->assertEquals( 'POINT (0 0)' , $writer->write($b)); $g = $reader->read('LINESTRING(0 0, 10 10)'); $b = $g->envelope(); $this->assertEquals( 'POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))' , $writer->write($b)); } public function testGeometry_intersection() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* POINT - POINT */ $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'POINT (0 0)' , $writer->write($gi)); $g2 = $reader->read('POINT(1 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY' , $writer->write($gi)); /* POINT - LINE */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('POINT(5 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'POINT (5 0)' , $writer->write($gi)); $g2 = $reader->read('POINT(12 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY' , $writer->write($gi)); /* LINE - LINE */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->intersection($g2); $this->assertEquals( 'POINT (5 0)' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(5 0, 20 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'LINESTRING (5 0, 10 0)' , $writer->write($gi)); /* LINE - POLY */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->intersection($g2); $this->assertEquals( 'LINESTRING (5 0, 5 10)' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(10 0, 20 0)'); $gi = $g->intersection($g2); $this->assertEquals( 'POINT (10 0)' , $writer->write($gi)); /* POLY - POLY */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'); $gi = $g->intersection($g2); $this->assertEquals( 'POLYGON ((10 5, 10 0, 5 0, 5 5, 10 5))' , $writer->write($gi)); $g2 = $reader->read('POLYGON((10 0, 20 0, 20 -5, 10 -5, 10 0))'); $gi = $g->intersection($g2); $this->assertEquals( 'POINT (10 0)' , $writer->write($gi)); $g2 = $reader->read('POLYGON((8 0, 20 0, 20 -5, 10 -5, 8 0))'); $gi = $g->intersection($g2); $this->assertEquals( 'LINESTRING (8 0, 10 0)' , $writer->write($gi)); } public function testGeometry_convexHull() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->convexHull(); $this->assertEquals( 'POINT (0 0)' , $writer->write($b)); $g = $reader->read('LINESTRING(0 0, 10 10)'); $b = $g->convexHull(); $this->assertEquals( 'LINESTRING (0 0, 10 10)' , $writer->write($b)); $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))'); $b = $g->convexHull(); $this->assertEquals( 'POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))' , $writer->write($b)); } public function testGeometry_difference() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* POINT - POINT */ $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $gi = $g->difference($g2); $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY' , $writer->write($gi)); $g2 = $reader->read('POINT(1 0)'); $gi = $g->difference($g2); $this->assertEquals( 'POINT (0 0)' , $writer->write($gi)); /* LINE - POINT */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('POINT(5 0)'); $gi = $g->difference($g2); $this->assertEquals('LINESTRING (0 0, 10 0)' , $writer->write($gi)); /* POINT - LINE */ $g = $reader->read('POINT(5 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $gi = $g->difference($g2); $this->assertEquals('GEOMETRYCOLLECTION EMPTY' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(0 1, 10 1)'); $gi = $g->difference($g2); $this->assertEquals( 'POINT (5 0)' , $writer->write($gi)); /* LINE - LINE */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->difference($g2); $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(5 0, 20 0)'); $gi = $g->difference($g2); $this->assertEquals( 'LINESTRING (0 0, 5 0)' , $writer->write($gi)); /* POLY - LINE */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->difference($g2); $this->assertEquals( 'POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(10 0, 20 0)'); $gi = $g->difference($g2); $this->assertEquals( 'POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0))' , $writer->write($gi)); /* POLY - POLY */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'); $gi = $g->difference($g2); $this->assertEquals( 'POLYGON ((5 0, 0 0, 0 10, 10 10, 10 5, 5 5, 5 0))' , $writer->write($gi)); } public function testGeometry_symdifference() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* POINT - POINT */ $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $gi = $g->symDifference($g2); $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY' , $writer->write($gi)); $g2 = $reader->read('POINT(1 0)'); $gi = $g->symDifference($g2); $this->assertEquals( 'MULTIPOINT (0 0, 1 0)' , $writer->write($gi)); /* LINE - POINT */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('POINT(5 0)'); $gi = $g->symDifference($g2); $this->assertEquals('LINESTRING (0 0, 10 0)' , $writer->write($gi)); /* POINT - LINE */ $g = $reader->read('POINT(5 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $gi = $g->symDifference($g2); $this->assertEquals( 'LINESTRING (0 0, 10 0)' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(0 1, 10 1)'); $gi = $g->symDifference($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (POINT (5 0), LINESTRING (0 1, 10 1))' , $writer->write($gi)); /* LINE - LINE */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->symDifference($g2); $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (5 -10, 5 0), (5 0, 5 10))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(5 0, 20 0)'); $gi = $g->symDifference($g2); $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (10 0, 20 0))' , $writer->write($gi)); /* POLY - LINE */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->symDifference($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (LINESTRING (5 -10, 5 0), POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0)))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(10 0, 20 0)'); $gi = $g->symDifference($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (LINESTRING (10 0, 20 0), POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0)))' , $writer->write($gi)); /* POLY - POLY */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'); $gi = $g->symDifference($g2); $this->assertEquals( 'MULTIPOLYGON (((5 0, 0 0, 0 10, 10 10, 10 5, 5 5, 5 0)), ((5 0, 10 0, 10 5, 15 5, 15 -5, 5 -5, 5 0)))' , $writer->write($gi)); } public function testGeometry_boundary() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->boundary(); $this->assertEquals( 'GEOMETRYCOLLECTION EMPTY' , $writer->write($b)); $g = $reader->read('LINESTRING(0 0, 10 10)'); $b = $g->boundary(); $this->assertEquals( 'MULTIPOINT (0 0, 10 10)' , $writer->write($b)); $g = $reader->read( 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),( 5 5, 5 6, 6 6, 6 5, 5 5))'); $b = $g->boundary(); $this->assertEquals( 'MULTILINESTRING ((0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 5 6, 6 6, 6 5, 5 5))' , $writer->write($b)); } public function testGeometry_union() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* POINT - POINT */ $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $gi = $g->union($g2); $this->assertEquals( 'POINT (0 0)' , $writer->write($gi)); $g2 = $reader->read('POINT(1 0)'); $gi = $g->union($g2); $this->assertEquals( 'MULTIPOINT (0 0, 1 0)' , $writer->write($gi)); /* LINE - POINT */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('POINT(5 0)'); $gi = $g->union($g2); $this->assertEquals('LINESTRING (0 0, 10 0)' , $writer->write($gi)); /* POINT - LINE */ $g = $reader->read('POINT(5 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $gi = $g->union($g2); $this->assertEquals( 'LINESTRING (0 0, 10 0)' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(0 1, 10 1)'); $gi = $g->union($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (POINT (5 0), LINESTRING (0 1, 10 1))' , $writer->write($gi)); /* LINE - LINE */ $g = $reader->read('LINESTRING(0 0, 10 0)'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->union($g2); $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (5 -10, 5 0), (5 0, 5 10))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(5 0, 20 0)'); $gi = $g->union($g2); $this->assertEquals( 'MULTILINESTRING ((0 0, 5 0), (5 0, 10 0), (10 0, 20 0))' , $writer->write($gi)); /* POLY - LINE */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('LINESTRING(5 -10, 5 10)'); $gi = $g->union($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (LINESTRING (5 -10, 5 0), POLYGON ((5 0, 0 0, 0 10, 5 10, 10 10, 10 0, 5 0)))' , $writer->write($gi)); $g2 = $reader->read('LINESTRING(10 0, 20 0)'); $gi = $g->union($g2); $this->assertEquals( 'GEOMETRYCOLLECTION (LINESTRING (10 0, 20 0), POLYGON ((10 0, 0 0, 0 10, 10 10, 10 0)))' , $writer->write($gi)); /* POLY - POLY */ $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'); $gi = $g->union($g2); $this->assertEquals( 'POLYGON ((5 0, 0 0, 0 10, 10 10, 10 5, 15 5, 15 -5, 5 -5, 5 0))' , $writer->write($gi)); } public function testGeometry_unaryunion() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('MULTIPOLYGON( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)), ((0 0, 11 0, 11 11, 0 11, 0 0)) ))'); $gu = $g->union(); $this->assertEquals( 'POLYGON ((1 0, 0 0, 0 1, 0 11, 10 11, 10 14, 14 14, 14 10, 11 10, 11 0, 1 0), (11 11, 12 11, 12 12, 11 12, 11 11))' , $writer->write($gu)); $g = $reader->read('MULTILINESTRING( (0 0, 1 0, 1 1, 0 1, 0 0), (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11), (0 0, 11 0, 11 11, 0 11, 0 0) )'); $gu = $g->union(); $this->assertEquals( 'MULTILINESTRING ((0 0, 1 0), (1 0, 1 1, 0 1), (0 1, 0 0), (1 0, 11 0, 11 10), (11 10, 11 11), (11 11, 10 11), (10 11, 0 11, 0 1), (11 11, 11 12, 12 12, 12 11, 11 11), (10 10, 10 11), (10 11, 10 14, 14 14, 14 10, 11 10), (11 10, 10 10))' , $writer->write($gu)); $g = $reader->read('MULTIPOINT( 0 0, 1 0, 1 1, 0 1, 0 0, 10 10, 10 14, 14 14, 14 10, 10 10, 11 11, 11 12, 12 12, 12 11, 11 11, 0 0, 11 0, 11 11, 0 11, 0 0 )'); $gu = $g->union(); $this->assertEquals( 'MULTIPOINT (0 0, 0 1, 0 11, 1 0, 1 1, 10 10, 10 14, 11 0, 11 11, 11 12, 12 11, 12 12, 14 10, 14 14)' , $writer->write($gu)); $g = $reader->read('GEOMETRYCOLLECTION( MULTIPOLYGON( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)), ((0 0, 11 0, 11 11, 0 11, 0 0)) ), MULTILINESTRING( (0 0, 1 0, 1 1, 0 1, 0 0), (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11), (0 0, 11 0, 11 11, 0 11, 0 0),(-8 8, -8 6) ), MULTIPOINT( 0 0, 1 0, 1 1, 0 1, 0 0, 10 10, 10 14, 14 14, 14 10, 10 10, 11 11, 11 12, 12 12, 12 11, 11 11, 0 0, 11 0, 11 11, 0 11, 0 0, -10 -10 ))'); $gu = $g->union(); $this->assertEquals( 'GEOMETRYCOLLECTION (POINT (-10 -10), LINESTRING (-8 8, -8 6), POLYGON ((1 0, 0 0, 0 1, 0 11, 10 11, 10 14, 14 14, 14 10, 11 10, 11 0, 1 0), (11 12, 11 11, 12 11, 12 12, 11 12)))' , $writer->write($gu)); } public function testGeometry_pointOnSurface() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->pointOnSurface(); $this->assertEquals( 'POINT (0 0)' , $writer->write($b)); $g = $reader->read('LINESTRING(0 0, 5 5, 10 10)'); $b = $g->pointOnSurface(); $this->assertEquals( 'POINT (5 5)' , $writer->write($b)); $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))'); $b = $g->pointOnSurface(); $this->assertEquals( 'POINT (1 8)' , $writer->write($b)); } public function testGeometry_centroid() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $b = $g->centroid(); $this->assertEquals( 'POINT (0 0)' , $writer->write($b)); $g = $reader->read('LINESTRING(0 0, 10 10)'); $b = $g->centroid(); $this->assertEquals( 'POINT (5 5)' , $writer->write($b)); $g = $reader->read('POLYGON((0 0, 0 10, 5 5, 10 10, 10 0, 0 0))'); $b = $g->centroid(); $this->assertEquals( 'POINT (5 4)' , $writer->write($b)); } public function testGeometry_relate() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $ret = $g->relate($g2); $this->assertEquals('0FFFFFFF2', $ret); $ret = $g->relate($g2, '0FFFFFFF2'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, '0*******T'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, '0*******1'); $this->assertEquals(FALSE, $ret); $g = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(1 0)'); $ret = $g->relate($g2); $this->assertEquals('FF0FFF0F2', $ret); $ret = $g->relate($g2, 'FF0FFF0F2'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, 'F*******2'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, 'T*******2'); $this->assertEquals(FALSE, $ret); $g = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POINT(1 0)'); $ret = $g->relate($g2); $this->assertEquals('FF20F1FF2', $ret); $ret = $g->relate($g2, 'FF20F1FF2'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, 'F****T**T'); $this->assertEquals(TRUE, $ret); $ret = $g->relate($g2, 'T*******2'); $this->assertEquals(FALSE, $ret); } public function testGeometry_relateBoundaryNodeRule() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('LINESTRING(0 0, 2 4, 5 5, 0 0)'); $g2 = $reader->read('POINT(0 0)'); $ret = $g->relateBoundaryNodeRule($g2, GEOSRELATE_BNR_OGC); $this->assertEquals('0F1FFFFF2', $ret); $ret = $g->relateBoundaryNodeRule($g2, GEOSRELATE_BNR_ENDPOINT); $this->assertEquals('FF10FFFF2', $ret); } public function testGeometry_polygonize() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('GEOMETRYCOLLECTION( LINESTRING(0 0, 10 10), LINESTRING(185 221, 100 100), LINESTRING(185 221, 88 275, 180 316), LINESTRING(185 221, 292 281, 180 316), LINESTRING(189 98, 83 187, 185 221), LINESTRING(189 98, 325 168, 185 221)) )'); $g2 = $reader->read('POINT(0 0)'); $ret = GEOSPolygonize($g); $this->assertEquals('array', gettype($ret)); $this->assertEquals('array', gettype($ret['rings'])); $this->assertEquals('array', gettype($ret['cut_edges'])); $this->assertEquals('array', gettype($ret['dangles'])); $this->assertEquals('array', gettype($ret['invalid_rings'])); $this->assertEquals(2, count($ret['rings'])); $this->assertEquals( 'POLYGON ((185 221, 88 275, 180 316, 292 281, 185 221))' # JTS-confirmed! , $writer->write($ret['rings'][0])); $this->assertEquals( 'POLYGON ((189 98, 83 187, 185 221, 325 168, 189 98))' # JTS-confirmed ! , $writer->write($ret['rings'][1])); $this->assertEquals(0, count($ret['cut_edges'])); $this->assertEquals(0, count($ret['invalid_rings'])); /* * FIXME: the duplicated dangle (0 0, 10 10) is unexpected */ $this->assertEquals(2, count($ret['dangles'])); $this->assertEquals( 'LINESTRING (185 221, 100 100)' # JTS-confirmed ! , $writer->write($ret['dangles'][0])); $this->assertEquals( 'LINESTRING (0 0, 10 10)' # JTS-confirmed ! , $writer->write($ret['dangles'][1])); ########################################################### $g = $g->union($g2); /* Now make sure linestrings are noded */ $ret = GEOSPolygonize($g); $this->assertEquals('array', gettype($ret)); $this->assertEquals('array', gettype($ret['rings'])); $this->assertEquals('array', gettype($ret['cut_edges'])); $this->assertEquals('array', gettype($ret['dangles'])); $this->assertEquals('array', gettype($ret['invalid_rings'])); $this->assertEquals(2, count($ret['dangles'])); $this->assertEquals( 'LINESTRING (132 146, 100 100)' , $writer->write($ret['dangles'][0])); $this->assertEquals( 'LINESTRING (0 0, 10 10)' , $writer->write($ret['dangles'][1])); $this->assertEquals(0, count($ret['invalid_rings'])); // TODO: test a polygonize run with cut lines and invalid_rings } public function testGeometry_lineMerge() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('MULTILINESTRING( (0 0, 10 10), (10 10, 10 0), (5 0, 10 0), (5 -5, 5 0) )'); $ret = GEOSLineMerge($g); $this->assertEquals('array', gettype($ret)); $this->assertEquals('1', count($ret)); $this->assertEquals( 'LINESTRING (0 0, 10 10, 10 0, 5 0, 5 -5)' , $writer->write($ret[0])); } public function testGeometry_sharedPaths() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); /* LINE - LINE */ $g1 = $reader->read('LINESTRING(0 0, 50 0)'); $g2 = $reader->read('MULTILINESTRING((5 0, 15 0),(40 0, 30 0))'); $gs = GEOSSharedPaths($g1, $g2); $this->assertEquals( 'GEOMETRYCOLLECTION (MULTILINESTRING ((5 0, 15 0)), MULTILINESTRING ((30 0, 40 0)))' , $writer->write($gs)); } public function testGeometry_simplify() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('LINESTRING(0 0, 3 4, 5 10, 10 0, 10 9, 5 11, 0 9)'); $gs = $g->simplify(2); $this->assertEquals( 'LINESTRING (0 0, 5 10, 10 0, 10 9, 0 9)' , $writer->write($gs)); $gs = $g->simplify(2, TRUE); $this->assertEquals( 'LINESTRING (0 0, 5 10, 10 0, 10 9, 5 11, 0 9)' , $writer->write($gs)); } public function testGeometry_extractUniquePoints() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read( 'GEOMETRYCOLLECTION ( MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) ), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0), POINT(1 0)), LINESTRING EMPTY '); $gs = $g->extractUniquePoints(); if ( ! $gs ) RETURN_NULL(); /* should get an exception before */ $this->assertEquals( 'MULTIPOINT (0 0, 1 0, 1 1, 0 1, 10 10, 10 14, 14 14, 14 10, 11 11, 11 12, 12 12, 12 11, 2 3, 3 4, 9 0)' , $writer->write($gs)); } public function testGeometry_relationalOps() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g1 = $reader->read('POINT(0 0)'); $g2 = $reader->read('POINT(0 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); /* no bounds, can't touch */ $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertTrue( $g1->within($g2) ); $this->assertTrue( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertTrue( $g1->equals($g2) ); $this->assertTrue( $g1->equalsExact($g2) ); $this->assertTrue( $g1->covers($g2) ); $this->assertTrue( $g1->coveredBy($g2) ); $g1 = $reader->read('POINT(0 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertTrue( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 10) ); $this->assertFalse( $g1->covers($g2) ); $this->assertTrue( $g1->coveredBy($g2) ); $g1 = $reader->read('POINT(5 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertTrue( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 10) ); $this->assertFalse( $g1->covers($g2) ); $this->assertTrue( $g1->coveredBy($g2) ); $g1 = $reader->read('LINESTRING(5 -5, 5 5)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertTrue( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertFalse( $g1->covers($g2) ); $this->assertFalse( $g1->coveredBy($g2) ); $g1 = $reader->read('LINESTRING(5 0, 15 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertTrue( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertFalse( $g1->covers($g2) ); $this->assertFalse( $g1->coveredBy($g2) ); $g1 = $reader->read('LINESTRING(0 0, 5 0, 10 0)'); $g2 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertTrue( $g1->within($g2) ); $this->assertTrue( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertTrue( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertTrue( $g1->covers($g2) ); $this->assertTrue( $g1->coveredBy($g2) ); $g1 = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POLYGON((5 -5, 5 5, 15 5, 15 -5, 5 -5))'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertTrue( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertFalse( $g1->covers($g2) ); $this->assertFalse( $g1->coveredBy($g2) ); $g1 = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POINT(15 15)'); $this->assertTrue( $g1->disjoint($g2) ); $this->assertFalse( $g1->touches($g2) ); $this->assertFalse( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertFalse( $g1->covers($g2) ); $this->assertFalse( $g1->coveredBy($g2) ); $g1 = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'); $g2 = $reader->read('POINT(5 0)'); $this->assertFalse( $g1->disjoint($g2) ); $this->assertTrue( $g1->touches($g2) ); $this->assertTrue( $g1->intersects($g2) ); $this->assertFalse( $g1->crosses($g2) ); $this->assertFalse( $g1->within($g2) ); $this->assertFalse( $g1->contains($g2) ); $this->assertFalse( $g1->overlaps($g2) ); $this->assertFalse( $g1->equals($g2) ); $this->assertFalse( $g1->equalsExact($g2, 1) ); $this->assertTrue( $g1->covers($g2) ); $this->assertFalse( $g1->coveredBy($g2) ); } public function testGeometry_isEmpty() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g1 = $reader->read('POINT(0 0)'); $this->assertFalse( $g1->isEmpty() ); $g1 = $reader->read('POINT EMPTY'); $this->assertTrue( $g1->isEmpty() ); $g1 = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertFalse( $g1->isEmpty() ); $g1 = $reader->read('LINESTRING EMPTY'); $this->assertTrue( $g1->isEmpty() ); $g1 = $reader->read('POLYGON((0 0, 10 0, 10 10, 0 0))'); $this->assertFalse( $g1->isEmpty() ); $g1 = $reader->read('POLYGON EMPTY'); $this->assertTrue( $g1->isEmpty() ); $g1 = $reader->read('GEOMETRYCOLLECTION(POINT(0 0))'); $this->assertFalse( $g1->isEmpty() ); $g1 = $reader->read('GEOMETRYCOLLECTION EMPTY'); $this->assertTrue( $g1->isEmpty() ); } public function testGeometry_checkValidity() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POINT(0 0)'); $val = $g->checkValidity(); $this->assertType( 'array', $val ); $this->assertTrue( $val['valid'] ); $this->assertFalse( isset($val['reason']) ); $this->assertFalse( isset($val['location']) ); $g = $reader->read('POINT(0 NaN)'); $val = $g->checkValidity(); $this->assertType( 'array', $val ); $this->assertFalse( $val['valid'] ); $this->assertEquals( 'Invalid Coordinate', $val['reason'] ); $this->assertEquals( 'POINT (0 nan)', $writer->write($val['location']) ); $g = $reader->read( 'POLYGON((0 0, -10 10, 10 10, 0 0, 4 5, -4 5, 0 0)))' ); $val = $g->checkValidity(); $this->assertType( 'array', $val ); $this->assertFalse( $val['valid'] ); $this->assertEquals( 'Ring Self-intersection', $val['reason'] ); $this->assertEquals( 'POINT (0 0)', $writer->write($val['location']) ); $g = $reader->read( 'POLYGON((0 0, -10 10, 10 10, 0 0, 4 5, -4 5, 0 0)))' ); $flags = GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE; $val = $g->checkValidity($flags); $this->assertType( 'array', $val ); $this->assertTrue( $val['valid'] ); $this->assertFalse( isset($val['reason']) ); $this->assertFalse( isset($val['location']) ); } public function testGeometry_isSimple() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertTrue( $g->isSimple() ); $g = $reader->read('LINESTRING(0 0, 10 0)'); $this->assertTrue( $g->isSimple() ); $g = $reader->read('LINESTRING(0 0, 10 0, 5 5, 5 -5)'); $this->assertFalse( $g->isSimple() ); } public function testGeometry_isRing() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertFalse( $g->isRing() ); $g = $reader->read('LINESTRING(0 0, 10 0, 5 5, 5 -5)'); $this->assertFalse( $g->isRing() ); $g = $reader->read('LINESTRING(0 0, 10 0, 5 5, 0 0)'); $this->assertTrue( $g->isRing() ); } public function testGeometry_hasZ() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertFalse( $g->hasZ() ); $g = $reader->read('POINT(0 0 0)'); $this->assertTrue( $g->hasZ() ); } public function testGeometry_isClosed() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); try { $this->assertFalse( $g->isClosed() ); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('LineString', $e->getMessage()); } $g = $reader->read('LINESTRING(0 0, 10 0, 5 5, 5 -5)'); $this->assertFalse( $g->isClosed() ); $g = $reader->read('LINESTRING(0 0, 10 0, 5 5, 0 0)'); $this->assertTrue( $g->isClosed() ); } public function testGeometry_type() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals('Point', $g->typeName()); $this->assertEquals(GEOS_POINT, $g->typeId()); $g = $reader->read('MULTIPOINT (0 1, 2 3)'); $this->assertEquals('MultiPoint', $g->typeName()); $this->assertEquals(GEOS_MULTIPOINT, $g->typeId()); $g = $reader->read('LINESTRING (0 0, 2 3)'); $this->assertEquals('LineString', $g->typeName()); $this->assertEquals(GEOS_LINESTRING, $g->typeId()); $g = $reader->read('MULTILINESTRING ((0 1, 2 3), (10 10, 3 4))'); $this->assertEquals('MultiLineString', $g->typeName()); $this->assertEquals(GEOS_MULTILINESTRING, $g->typeId()); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals('Polygon', $g->typeName()); $this->assertEquals(GEOS_POLYGON, $g->typeId()); $g = $reader->read('MULTIPOLYGON (((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)))'); $this->assertEquals('MultiPolygon', $g->typeName()); $this->assertEquals(GEOS_MULTIPOLYGON, $g->typeId()); $g = $reader->read('GEOMETRYCOLLECTION (MULTIPOLYGON (((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11))), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0))'); $this->assertEquals('GeometryCollection', $g->typeName()); $this->assertEquals(GEOS_GEOMETRYCOLLECTION, $g->typeId()); } public function testGeometry_srid() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals(0, $g->getSRID()); $g->setSRID(2); $this->assertEquals(2, $g->getSRID()); } public function testGeometry_numGeometries() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals(1, $g->numGeometries()); $g = $reader->read('MULTIPOINT (0 1, 2 3)'); $this->assertEquals(2, $g->numGeometries()); $g = $reader->read('LINESTRING (0 0, 2 3)'); $this->assertEquals(1, $g->numGeometries()); $g = $reader->read('MULTILINESTRING ((0 1, 2 3), (10 10, 3 4))'); $this->assertEquals(2, $g->numGeometries()); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals(1, $g->numGeometries()); $g = $reader->read('MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)))'); $this->assertEquals(2, $g->numGeometries()); $g = $reader->read('GEOMETRYCOLLECTION ( MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) ), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0))'); $this->assertEquals(6, $g->numGeometries()); } public function testGeometry_geometryN() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $c = $g->geometryN(0); $this->assertTrue( $g->equalsExact($c) ); $g = $reader->read('MULTIPOINT (0 1, 2 3)'); $this->assertEquals($reader->read('POINT(0 1)'), $g->geometryN(0)); $this->assertEquals($reader->read('POINT(2 3)'), $g->geometryN(1)); $c = $g->geometryN(2); $this->assertNull( $c ); } public function testGeometry_numInteriorRings() { $reader = new GEOSWKTReader(); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals(0, $g->numInteriorRings()); $g = $reader->read('POLYGON ( (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11))'); $this->assertEquals(1, $g->numInteriorRings()); $g = $reader->read('POLYGON ( (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11), (13 11, 13 12, 13.5 12, 13.5 11, 13 11))'); $this->assertEquals(2, $g->numInteriorRings()); $g = $reader->read('POINT (0 0)'); try { $g->numInteriorRings(); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'Polygon', $e->getMessage() ); } } public function testGeometry_numPoints() { $reader = new GEOSWKTReader(); $g = $reader->read('LINESTRING (0 0, 1 0, 1 1, 0 1)'); $this->assertEquals(4, $g->numPoints()); $g = $reader->read('POINT (0 0)'); try { $g->numPoints(); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'LineString', $e->getMessage() ); } } public function testGeometry_getXY() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT (1 2)'); $this->assertEquals(1, $g->getX()); $this->assertEquals(2, $g->getY()); $g = $reader->read('LINESTRING (0 0, 1 1)'); try { $g->getX(); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'Point', $e->getMessage() ); } try { $g->getY(); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'Point', $e->getMessage() ); } } public function testGeometry_interiorRingN() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POLYGON ( (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11))'); $r = $g->interiorRingN(0); $this->assertEquals('LINEARRING (11 11, 11 12, 12 12, 12 11, 11 11)', $writer->write($r) ); $g = $reader->read('POLYGON ( (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11), (13 11, 13 12, 13.5 12, 13.5 11, 13 11))'); $r = $g->interiorRingN(0); $this->assertEquals('LINEARRING (11 11, 11 12, 12 12, 12 11, 11 11)', $writer->write($r) ); $r = $g->interiorRingN(1); $this->assertEquals('LINEARRING (13 11, 13 12, 14 12, 14 11, 13 11)', $writer->write($r) ); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertNull($g->interiorRingN(0)); $g = $reader->read('POINT (0 0)'); try { $g->interiorRingN(0); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'Polygon', $e->getMessage() ); } } public function testGeometry_exteriorRing() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POLYGON ( (10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11))'); $r = $g->exteriorRing(); $this->assertEquals('LINEARRING (10 10, 10 14, 14 14, 14 10, 10 10)', $writer->write($r) ); $g = $reader->read('POINT (0 0)'); try { $g->exteriorRing(0); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'Polygon', $e->getMessage() ); } } public function testGeometry_numCoordinates() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals(1, $g->numCoordinates()); $g = $reader->read('MULTIPOINT (0 1, 2 3)'); $this->assertEquals(2, $g->numCoordinates()); $g = $reader->read('LINESTRING (0 0, 2 3)'); $this->assertEquals(2, $g->numCoordinates()); $g = $reader->read('MULTILINESTRING ((0 1, 2 3), (10 10, 3 4))'); $this->assertEquals(4, $g->numCoordinates()); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals(5, $g->numCoordinates()); $g = $reader->read('MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)))'); $this->assertEquals(15, $g->numCoordinates()); $g = $reader->read('GEOMETRYCOLLECTION ( MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) ), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0))'); $this->assertEquals(29, $g->numCoordinates()); } public function testGeometry_dimension() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals(0, $g->dimension()); $g = $reader->read('MULTIPOINT (0 1, 2 3)'); $this->assertEquals(0, $g->dimension()); $g = $reader->read('LINESTRING (0 0, 2 3)'); $this->assertEquals(1, $g->dimension()); $g = $reader->read('MULTILINESTRING ((0 1, 2 3), (10 10, 3 4))'); $this->assertEquals(1, $g->dimension()); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals(2, $g->dimension()); $g = $reader->read('MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)))'); $this->assertEquals(2, $g->dimension()); $g = $reader->read('GEOMETRYCOLLECTION ( MULTIPOLYGON ( ((0 0, 1 0, 1 1, 0 1, 0 0)), ((10 10, 10 14, 14 14, 14 10, 10 10), (11 11, 11 12, 12 12, 12 11, 11 11)) ), POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)), MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)), LINESTRING (0 0, 2 3), MULTIPOINT (0 0, 2 3), POINT (9 0))'); $this->assertEquals(2, $g->dimension()); } public function testGeometry_coordinateDimension() { $reader = new GEOSWKTReader(); $g = $reader->read('POINT(0 0)'); $this->assertEquals(2, $g->coordinateDimension()); $g = $reader->read('POINT(0 0 0)'); $this->assertEquals(3, $g->coordinateDimension()); } public function testGeometry_pointN() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('LINESTRING (10 10, 10 14, 14 14, 14 10)'); $this->assertEquals('POINT (10 10)', $writer->write($g->pointN(0)) ); $this->assertEquals('POINT (10 14)', $writer->write($g->pointN(1)) ); $this->assertEquals('POINT (14 14)', $writer->write($g->pointN(2)) ); $this->assertEquals('POINT (14 10)', $writer->write($g->pointN(3)) ); $this->assertNull( $g->pointN(4) ); $g = $reader->read('LINEARRING (11 11, 11 12, 12 11, 11 11)'); $this->assertEquals('POINT (11 11)', $writer->write($g->pointN(0)) ); $this->assertEquals('POINT (11 12)', $writer->write($g->pointN(1)) ); $this->assertEquals('POINT (12 11)', $writer->write($g->pointN(2)) ); $this->assertEquals('POINT (11 11)', $writer->write($g->pointN(3)) ); $g = $reader->read('POINT (0 0)'); try { $g->pointN(0); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'LineString', $e->getMessage() ); } } public function testGeometry_startendPoint() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('LINESTRING (10 10, 10 14, 14 14, 14 10)'); $this->assertEquals('POINT (10 10)', $writer->write($g->startPoint()) ); $this->assertEquals('POINT (14 10)', $writer->write($g->endPoint()) ); $this->assertNull( $g->pointN(4) ); $g = $reader->read('LINEARRING (11 11, 11 12, 12 11, 11 11)'); $this->assertEquals('POINT (11 11)', $writer->write($g->startPoint()) ); $this->assertEquals('POINT (11 11)', $writer->write($g->endPoint()) ); $g = $reader->read('POINT (0 0)'); try { $g->pointN(0); $this->assertTrue( FALSE ); } catch (Exception $e) { $this->assertContains( 'LineString', $e->getMessage() ); } } public function testGeometry_area() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals( 1.0, $g->area() ); $g = $reader->read('POINT (0 0)'); $this->assertEquals( 0.0, $g->area() ); $g = $reader->read('LINESTRING (0 0 , 10 0)'); $this->assertEquals( 0.0, $g->area() ); } public function testGeometry_length() { $reader = new GEOSWKTReader(); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $this->assertEquals( 4.0, $g->length() ); $g = $reader->read('POINT (0 0)'); $this->assertEquals( 0.0, $g->length() ); $g = $reader->read('LINESTRING (0 0 , 10 0)'); $this->assertEquals( 10.0, $g->length() ); } public function testGeometry_distance() { $reader = new GEOSWKTReader(); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $g2 = $reader->read('POINT(0.5 0.5)'); $this->assertEquals( 0.0, $g->distance($g2) ); $g2 = $reader->read('POINT (-1 0)'); $this->assertEquals( 1.0, $g->distance($g2) ); $g2 = $reader->read('LINESTRING (3 0 , 10 0)'); $this->assertEquals( 2.0, $g->distance($g2) ); } public function testGeometry_hausdorffDistance() { $reader = new GEOSWKTReader(); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $g2 = $reader->read('POINT(0 10)'); $this->assertEquals( 10.0, round($g->hausdorffDistance($g2)) ); $g2 = $reader->read('POINT (-1 0)'); $this->assertEquals( 2.0, round($g->hausdorffDistance($g2)) ); $g2 = $reader->read('LINESTRING (3 0 , 10 0)'); $this->assertEquals( 9.0, round($g->hausdorffDistance($g2)) ); } public function testGeometry_delaunayTriangulation() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setRoundingPrecision(0); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $b = $g->delaunayTriangulation(); $this->assertEquals( 'GEOMETRYCOLLECTION (POLYGON ((0 1, 0 0, 1 0, 0 1)), POLYGON ((0 1, 1 0, 1 1, 0 1)))' , $writer->write($b)); $b = $g->delaunayTriangulation(0,true); $this->assertEquals( 'MULTILINESTRING ((0 1, 1 1), (0 0, 0 1), (0 0, 1 0), (1 0, 1 1), (0 1, 1 0))' , $writer->write($b)); } public function testGeometry_snapTo() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(true); $g = $reader->read('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'); $g2 = $reader->read('POINT(0.1 0)'); $snapped = $g->snapTo($g2, 0); $this->assertEquals('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))' , $writer->write($snapped) ); $snapped = $g->snapTo($g2, 0.5); $this->assertEquals('POLYGON ((0.1 0, 1 0, 1 1, 0 1, 0.1 0))' , $writer->write($snapped) ); } public function testGeometry_node() { $reader = new GEOSWKTReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(true); $g = $reader->read('LINESTRING(0 0, 10 0, 5 -5, 5 5)'); $noded = $g->node(); $this->assertEquals('MULTILINESTRING ((0 0, 5 0), (5 0, 10 0, 5 -5, 5 0), (5 0, 5 5))' , $writer->write($noded) ); } public function testWKBWriter__construct() { $writer = new GEOSWKBWriter(); $this->assertNotNull($writer); } public function testWKBWriter_getOutputDimension() { $writer = new GEOSWKBWriter(); $this->assertEquals(2, $writer->getOutputDimension()); } public function testWKBWriter_setOutputDimension() { $writer = new GEOSWKBWriter(); $writer->setOutputDimension(3); $this->assertEquals(3, $writer->getOutputDimension()); $writer->setOutputDimension(2); $this->assertEquals(2, $writer->getOutputDimension()); # 1 is invalid try { $writer->setOutputDimension(1); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('must be 2 or 3', $e->getMessage()); } # 4 is invalid try { $writer->setOutputDimension(4); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('must be 2 or 3', $e->getMessage()); } } public function testWKBWriter_getsetByteOrder() { $writer = new GEOSWKBWriter(); /* Machine-dependent */ $bo = $writer->getByteOrder(); $obo = $bo ? 0 : 1; $writer->setByteOrder($obo); $this->assertEquals($obo, $writer->getByteOrder()); # Anything different from 0 (BIG_ENDIAN) or 1 (LITTLE_ENDIAN) # is invalid try { $writer->setByteOrder(5); $this->assertTrue(FALSE); } catch (Exception $e) { $this->assertContains('LITTLE (1) or BIG (0)', $e->getMessage()); } } public function testWKBWriter_getsetIncludeSRID() { $writer = new GEOSWKBWriter(); $this->assertEquals(FALSE, $writer->getIncludeSRID()); $writer->setIncludeSRID(TRUE); $this->assertEquals(TRUE, $writer->getIncludeSRID()); $writer->setIncludeSRID(FALSE); $this->assertEquals(FALSE, $writer->getIncludeSRID()); } public function testWKBWriter_writeHEX() { $writer = new GEOSWKBWriter(); $reader = new GEOSWKTReader(); try { $writer->writeHEX(1); $this->assertTrue(FALSE); # this is just to fail if we get here } catch (Exception $e) { $this->assertContains('expects parameter 1', $e->getMessage()); } $g = $reader->read('POINT(6 7)'); $g->setSRID(43); $writer->setOutputDimension(2); // 2D // 2D LITTLE endian $writer->setByteOrder(1); $this->assertEquals( '010100000000000000000018400000000000001C40', $writer->writeHEX($g)); // 2D LITTLE endian + SRID $writer->setIncludeSRID(TRUE); $this->assertEquals( '01010000202B00000000000000000018400000000000001C40', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); // 2D BIG endian $writer->setByteOrder(0); $this->assertEquals('00000000014018000000000000401C000000000000', $writer->writeHEX($g)); // 2D BIG endian + SRID $writer->setIncludeSRID(TRUE); $this->assertEquals( '00200000010000002B4018000000000000401C000000000000', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); $writer->setOutputDimension(3); // 3D // 3D LITTLE endian (2D input) $writer->setByteOrder(1); $this->assertEquals( '010100000000000000000018400000000000001C40', $writer->writeHEX($g)); // 3D LITTLE endian + SRID (2D input) $writer->setIncludeSRID(TRUE); $this->assertEquals( '01010000202B00000000000000000018400000000000001C40', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); // 3D BIG endian (2D input) $writer->setByteOrder(0); $this->assertEquals('00000000014018000000000000401C000000000000', $writer->writeHEX($g)); // 3D BIG endian + SRID (2D input) $writer->setIncludeSRID(TRUE); $this->assertEquals( '00200000010000002B4018000000000000401C000000000000', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); $g = $reader->read('POINT(6 7 8)'); $g->setSRID(53); $writer->setOutputDimension(2); // 2D // 2D LITTLE endian (3D input) $writer->setByteOrder(1); $this->assertEquals('010100000000000000000018400000000000001C40', $writer->writeHEX($g)); // 2D LITTLE endian + SRID (3D input) $writer->setIncludeSRID(TRUE); $writer->setByteOrder(1); $this->assertEquals( '01010000203500000000000000000018400000000000001C40', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); // 2D BIG endian (3D input) $writer->setByteOrder(0); $this->assertEquals('00000000014018000000000000401C000000000000', $writer->writeHEX($g)); // 2D BIG endian + SRID (3D input) $writer->setIncludeSRID(TRUE); $this->assertEquals( '0020000001000000354018000000000000401C000000000000', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); $writer->setOutputDimension(3); // 3D // 3D LITTLE endian (3D input) $writer->setByteOrder(1); $this->assertEquals( '010100008000000000000018400000000000001C400000000000002040', $writer->writeHEX($g)); // 3D BIG endian (3D input) $writer->setByteOrder(0); $this->assertEquals( '00800000014018000000000000401C0000000000004020000000000000', $writer->writeHEX($g)); // 3D BIG endian + SRID (3D input) $writer->setIncludeSRID(TRUE); $this->assertEquals( '00A0000001000000354018000000000000401C0000000000004020000000000000', $writer->writeHEX($g)); $writer->setIncludeSRID(FALSE); } public function testWKBReader__construct() { $reader = new GEOSWKBReader(); $this->assertNotNull($reader); } public function testWKBReader_readHEX() { $reader = new GEOSWKBReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); $writer->setOutputDimension(3); // 2D LITTLE endian $g = $reader->readHEX( '010100000000000000000018400000000000001C40' ); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 2D BIG endian $g = $reader->readHEX( '00000000014018000000000000401C000000000000' ); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 2D LITTLE endian + SRID $g = $reader->readHEX( '01010000202B00000000000000000018400000000000001C40' ); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(43, $g->getSRID()); // 2D BIG endian + SRID $g = $reader->readHEX( '00200000010000002B4018000000000000401C000000000000' ); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(43, $g->getSRID()); // 3D LITTLE endian $g = $reader->readHEX( '010100008000000000000018400000000000001C400000000000002040' ); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 3D BIG endian $g = $reader->readHEX( '00800000014018000000000000401C0000000000004020000000000000' ); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 3D BIG endian + SRID $g = $reader->readHEX( '00A0000001000000354018000000000000401C0000000000004020000000000000' ); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(53, $g->getSRID()); } public function testGEOSRelateMatch() { $this->assertTrue(GEOSRelateMatch('0FFFFFFF2', '0FFFFFFF2')); $this->assertTrue(GEOSRelateMatch('0FFFFFFF2', '0FFFFFFF*')); $this->assertTrue(GEOSRelateMatch('0FFFFFFF2', 'TFFFFFFF2')); $this->assertFalse(GEOSRelateMatch('0FFFFFFF2', '0FFFFFFFF')); } } geos-3.4.2/py-compile0000755000175000017500000001013512206417165014305 0ustar frankiefrankie#!/bin/sh # py-compile - Compile a Python program scriptversion=2009-04-28.21; # UTC # Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software # Foundation, Inc. # 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 2, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if [ -z "$PYTHON" ]; then PYTHON=python fi basedir= destdir= files= while test $# -ne 0; do case "$1" in --basedir) basedir=$2 if test -z "$basedir"; then echo "$0: Missing argument to --basedir." 1>&2 exit 1 fi shift ;; --destdir) destdir=$2 if test -z "$destdir"; then echo "$0: Missing argument to --destdir." 1>&2 exit 1 fi shift ;; -h|--h*) cat <<\EOF Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." Byte compile some python scripts FILES. Use --destdir to specify any leading directory path to the FILES that you don't want to include in the byte compiled file. Specify --basedir for any additional path information you do want to be shown in the byte compiled file. Example: py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py Report bugs to . EOF exit $? ;; -v|--v*) echo "py-compile $scriptversion" exit $? ;; *) files="$files $1" ;; esac shift done if test -z "$files"; then echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 exit 1 fi # if basedir was given, then it should be prepended to filenames before # byte compilation. if [ -z "$basedir" ]; then pathtrans="path = file" else pathtrans="path = os.path.join('$basedir', file)" fi # if destdir was given, then it needs to be prepended to the filename to # byte compile but not go into the compiled file. if [ -z "$destdir" ]; then filetrans="filepath = path" else filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" fi $PYTHON -c " import sys, os, py_compile files = '''$files''' sys.stdout.write('Byte-compiling python modules...\n') for file in files.split(): $pathtrans $filetrans if not os.path.exists(filepath) or not (len(filepath) >= 3 and filepath[-3:] == '.py'): continue sys.stdout.write(file) sys.stdout.flush() py_compile.compile(filepath, filepath + 'c', path) sys.stdout.write('\n')" || exit $? # this will fail for python < 1.5, but that doesn't matter ... $PYTHON -O -c " import sys, os, py_compile files = '''$files''' sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') for file in files.split(): $pathtrans $filetrans if not os.path.exists(filepath) or not (len(filepath) >= 3 and filepath[-3:] == '.py'): continue sys.stdout.write(file) sys.stdout.flush() py_compile.compile(filepath, filepath + 'o', path) sys.stdout.write('\n')" 2>/dev/null || : # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: geos-3.4.2/src/0000755000175000017500000000000012206417232013063 5ustar frankiefrankiegeos-3.4.2/src/CMakeLists.txt0000644000175000017500000002557212206417146015642 0ustar frankiefrankie################################################################################# # # GEOS C++ library build configuration for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# file(GLOB_RECURSE geos_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) file(GLOB_RECURSE geos_ALL_HEADERS ${CMAKE_SOURCE_DIR}/include/*.h) # fix source_group issue if(GEOS_ENABLE_MACOSX_FRAMEWORK) # OS X frameworks don't have static libs # also 1 binary, so include CAPI here # and, make name all caps set(geos_c_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/../capi/geos_c.cpp ${CMAKE_CURRENT_SOURCE_DIR}/../capi/geos_ts_c.cpp) add_library(GEOS SHARED ${geos_SOURCES} ${geos_c_SOURCES}) math(EXPR CVERSION "${VERSION_MAJOR} + 1") # VERSION = current version, SOVERSION = compatibility version set_target_properties(GEOS PROPERTIES CLEAN_DIRECT_OUTPUT 1 FRAMEWORK 1 VERSION "${CVERSION}.${VERSION_MINOR}.${VERSION_PATCH}" SOVERSION ${CVERSION} FRAMEWORK_VERSION ${VERSION_MAJOR} BUILD_WITH_INSTALL_RPATH TRUE INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}" MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in" MACOSX_FRAMEWORK_BUNDLE_VERSION "GEOS ${VERSION}" MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${VERSION} MACOSX_FRAMEWORK_IDENTIFIER org.osgeo.geos) install(TARGETS GEOS FRAMEWORK DESTINATION .) if(GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT) # Unix compatibility option, provides typical bin/lib/include folder # structure for framework-challenged projects set(GEOS_FWDIR "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/GEOS.framework") set(GEOS_FWDIR_VER "${GEOS_FWDIR}/Versions/${VERSION_MAJOR}") install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/bin\")") install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/include\")") install(CODE "execute_process(COMMAND mkdir -p \"${GEOS_FWDIR_VER}/unix/lib\")") install(CODE "execute_process(COMMAND ln -sfh ../../Headers \"${GEOS_FWDIR_VER}/unix/include/geos\")") install(CODE "execute_process(COMMAND ln -sf ../../Headers/geos_c.h \"${GEOS_FWDIR_VER}/unix/include/geos_c.h\")") install(CODE "execute_process(COMMAND ln -sf ../../GEOS \"${GEOS_FWDIR_VER}/unix/lib/libgeos.dylib\")") install(CODE "execute_process(COMMAND ln -sf ../../GEOS \"${GEOS_FWDIR_VER}/unix/lib/libgeos_c.dylib\")") install(CODE "execute_process(COMMAND ln -sfh Versions/Current/unix \"${GEOS_FWDIR}/unix\")") endif() else() add_library(geos SHARED ${geos_SOURCES} ${geos_ALL_HEADERS}) add_library(geos-static STATIC ${geos_SOURCES} ${geos_ALL_HEADERS}) set_target_properties(geos PROPERTIES DEFINE_SYMBOL GEOS_DLL_EXPORT VERSION ${VERSION} CLEAN_DIRECT_OUTPUT 1) set_target_properties(geos-static PROPERTIES OUTPUT_NAME "geos" PREFIX "lib" CLEAN_DIRECT_OUTPUT 1) endif() # if(APPLE) # set_target_properties(geos # PROPERTIES # BUILD_WITH_INSTALL_RPATH TRUE # INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}") # endif() ################################################################################# # Installation ################################################################################# if(NOT GEOS_ENABLE_MACOSX_FRAMEWORK) install(TARGETS geos geos-static RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) endif() ################################################################################# # Group source files for IDE source explorers (e.g. Visual Studio) ################################################################################# file(GLOB top_HEADERS ${CMAKE_SOURCE_DIR}/include/*.h) source_group("Header Files" FILES ${top_HEADERS}) file(GLOB geos_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/*.h) source_group("Header Files\\geos" FILES ${geos_HEADERS}) ### geos/algorithm file(GLOB geos_algorithm_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/algorithm/*.h) source_group("Header Files\\geos\\algorithm" FILES ${geos_algorithm_HEADERS}) file(GLOB geos_algorithm_distance_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/algorithm/distance/*.h) source_group("Header Files\\geos\\algorithm\\distance" FILES ${geos_algorithm_distance_HEADERS}) file(GLOB geos_algorithm_locate_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/algorithm/locate/*.h) source_group("Header Files\\geos\\algorithm\\locate" FILES ${geos_algorithm_locate_HEADERS}) ### geos/geom file(GLOB geos_geom_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/geom/*.h) source_group("Header Files\\geos\\geom" FILES ${geos_geom_HEADERS}) file(GLOB geos_geom_prep_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/geom/prep/*.h) source_group("Header Files\\geos\\geom\\prep" FILES ${geos_geom_prep_HEADERS}) file(GLOB geos_geom_util_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/geom/util/*.h) source_group("Header Files\\geos\\geom\\util" FILES ${geos_geom_util_HEADERS}) ### geos/geomgraph file(GLOB geos_geomgraph_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/geomgraph/*.h) source_group("Header Files\\geos\\geomgraph" FILES ${geos_geomgraph_HEADERS}) file(GLOB geos_geomgraph_index_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/geomgraph/index/*.h) source_group("Header Files\\geos\\geomgraph\\index" FILES ${geos_geomgraph_index_HEADERS}) ### geos/index file(GLOB geos_index_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/*.h) source_group("Header Files\\geos\\index" FILES ${geos_index_HEADERS}) file(GLOB geos_index_bintree_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/bintree/*.h) source_group("Header Files\\geos\\index\\bintree" FILES ${geos_index_bintree_HEADERS}) file(GLOB geos_index_chain_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/chain/*.h) source_group("Header Files\\geos\\index\\chain" FILES ${geos_index_chain_HEADERS}) file(GLOB geos_index_intervalrtree_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/intervalrtree/*.h) source_group("Header Files\\geos\\index\\intervalrtree" FILES ${geos_index_intervalrtree_HEADERS}) file(GLOB geos_index_quadtree_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/quadtree/*.h) source_group("Header Files\\geos\\index\\quadtree" FILES ${geos_index_quadtree_HEADERS}) file(GLOB geos_index_strtree_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/strtree/*.h) source_group("Header Files\\geos\\index\\strtree" FILES ${geos_index_strtree_HEADERS}) file(GLOB geos_index_sweepline_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/index/sweepline/*.h) source_group("Header Files\\geos\\index\\sweepline" FILES ${geos_index_sweepline_HEADERS}) ### geos/io file(GLOB geos_io_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/io/*.h) source_group("Header Files\\geos\\io" FILES ${geos_io_HEADERS}) ### geos/linearref file(GLOB geos_linearref_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/linearref/*.h) source_group("Header Files\\geos\\linearref" FILES ${geos_linearref_HEADERS}) ### geos/noding file(GLOB geos_noding_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/noding/*.h) source_group("Header Files\\geos\\noding" FILES ${geos_noding_HEADERS}) file(GLOB geos_noding_snapround_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/noding/snapround/*.h) source_group("Header Files\\geos\\noding\\snapround" FILES ${geos_noding_snapround_HEADERS}) ### geos/operation file(GLOB geos_operation_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/*.h) source_group("Header Files\\geos\\operation" FILES ${geos_operation_HEADERS}) file(GLOB geos_operation_buffer_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/buffer/*.h) source_group("Header Files\\geos\\operation\\buffer" FILES ${geos_operation_buffer_HEADERS}) file(GLOB geos_operation_distance_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/distance/*.h) source_group("Header Files\\geos\\operation\\distance" FILES ${geos_operation_distance_HEADERS}) file(GLOB geos_operation_linemerge_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/linemerge/*.h) source_group("Header Files\\geos\\operation\\linemerge" FILES ${geos_operation_linemerge_HEADERS}) file(GLOB geos_operation_overlay_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/overlay/*.h) source_group("Header Files\\geos\\operation\\overlay" FILES ${geos_operation_overlay_HEADERS}) file(GLOB geos_operation_overlay_snap_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/overlay/snap/*.h) source_group("Header Files\\geos\\operation\\overlay\\snap" FILES ${geos_operation_overlay_snap_HEADERS}) file(GLOB geos_operation_overlay_validate_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/overlay/validate/*.h) source_group("Header Files\\geos\\operation\\overlay\\validate" FILES ${geos_operation_overlay_validate_HEADERS}) file(GLOB geos_operation_polygonize_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/polygonize/*.h) source_group("Header Files\\geos\\operation\\polygonize" FILES ${geos_operation_polygonize_HEADERS}) file(GLOB geos_operation_predicate_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/predicate/*.h) source_group("Header Files\\geos\\operation\\predicate" FILES ${geos_operation_predicate_HEADERS}) file(GLOB geos_operation_relate_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/relate/*.h) source_group("Header Files\\geos\\operation\\relate" FILES ${geos_operation_relate_HEADERS}) file(GLOB geos_operation_sharedpaths_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/sharedpaths/*.h) source_group("Header Files\\geos\\operation\\sharedpaths" FILES ${geos_operation_sharedpaths_HEADERS}) file(GLOB geos_operation_union_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/union/*.h) source_group("Header Files\\geos\\operation\\union" FILES ${geos_operation_union_HEADERS}) file(GLOB geos_operation_union_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/union/*.h) source_group("Header Files\\geos\\operation\\union" FILES ${geos_operation_union_HEADERS}) file(GLOB geos_operation_valid_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/operation/valid/*.h) source_group("Header Files\\geos\\operation\\valid" FILES ${geos_operation_valid_HEADERS}) ### geos/planargraph file(GLOB geos_planargraph_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/planargraph/*.h) source_group("Header Files\\geos\\planargraph" FILES ${geos_planargraph_HEADERS}) file(GLOB geos_planargraph_algorithm_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/planargraph/algorithm/*.h) source_group("Header Files\\geos\\planargraph\\algorithm" FILES ${geos_planargraph_algorithm_HEADERS}) ### geso/precision file(GLOB geos_precision_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/precision/*.h) source_group("Header Files\\geos\\precision" FILES ${geos_precision_HEADERS}) ### geso/simplify file(GLOB geos_simplify_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/simplify/*.h) source_group("Header Files\\geos\\simplify" FILES ${geos_simplify_HEADERS}) ### geso/util file(GLOB geos_util_HEADERS ${CMAKE_SOURCE_DIR}/include/geos/util/*.h) source_group("Header Files\\geos\\util" FILES ${geos_util_HEADERS}) geos-3.4.2/src/Makefile.am0000644000175000017500000000222712206417146015126 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ algorithm \ geom \ index \ io \ linearref \ noding \ operation \ planargraph \ geomgraph \ precision \ simplify \ triangulate \ util EXTRA_DIST = Makefile.vc dirlist.mk CMakeLists.txt info.plist.in INCLUDES = -I$(top_srcdir)/include lib_LTLIBRARIES = libgeos.la # libgeos uses -release because it is not feasible to know if the ABI # has changed between releases; the project chooses not to expend the # effort to determine this because depending programs should not be # using the C++ library. libgeos_la_LDFLAGS = \ -release @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@ \ -no-undefined libgeos_la_SOURCES = \ inlines.cpp libgeos_la_LIBADD = \ algorithm/libalgorithm.la \ geom/libgeom.la \ geomgraph/libgeomgraph.la \ index/libindex.la \ io/libio.la \ linearref/liblinearref.la \ noding/libnoding.la \ operation/liboperation.la \ planargraph/libplanargraph.la \ precision/libprecision.la \ simplify/libsimplify.la \ triangulate/libtriangulate.la \ util/libutil.la geos-3.4.2/src/Makefile.in0000644000175000017500000006145312206417163015144 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgeos_la_DEPENDENCIES = algorithm/libalgorithm.la geom/libgeom.la \ geomgraph/libgeomgraph.la index/libindex.la io/libio.la \ linearref/liblinearref.la noding/libnoding.la \ operation/liboperation.la planargraph/libplanargraph.la \ precision/libprecision.la simplify/libsimplify.la \ triangulate/libtriangulate.la util/libutil.la am_libgeos_la_OBJECTS = inlines.lo libgeos_la_OBJECTS = $(am_libgeos_la_OBJECTS) libgeos_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libgeos_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgeos_la_SOURCES) DIST_SOURCES = $(libgeos_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ algorithm \ geom \ index \ io \ linearref \ noding \ operation \ planargraph \ geomgraph \ precision \ simplify \ triangulate \ util EXTRA_DIST = Makefile.vc dirlist.mk CMakeLists.txt info.plist.in INCLUDES = -I$(top_srcdir)/include lib_LTLIBRARIES = libgeos.la # libgeos uses -release because it is not feasible to know if the ABI # has changed between releases; the project chooses not to expend the # effort to determine this because depending programs should not be # using the C++ library. libgeos_la_LDFLAGS = \ -release @VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@ \ -no-undefined libgeos_la_SOURCES = \ inlines.cpp libgeos_la_LIBADD = \ algorithm/libalgorithm.la \ geom/libgeom.la \ geomgraph/libgeomgraph.la \ index/libindex.la \ io/libio.la \ linearref/liblinearref.la \ noding/libnoding.la \ operation/liboperation.la \ planargraph/libplanargraph.la \ precision/libprecision.la \ simplify/libsimplify.la \ triangulate/libtriangulate.la \ util/libutil.la all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgeos.la: $(libgeos_la_OBJECTS) $(libgeos_la_DEPENDENCIES) $(libgeos_la_LINK) -rpath $(libdir) $(libgeos_la_OBJECTS) $(libgeos_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inlines.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/Makefile.vc0000644000175000017500000003440212206417146015141 0ustar frankiefrankie# # Building on Win32 with Visual C++ 7.0, 7.1, 8.0 or 9.0 ############################################################################### # # Produces: # geos.lib: static library for use of C or C++ API. # geos.dll: DLL - only exports the C API # geos_i.lib: stub library to link against for use of geos.dll. # # geos_d.lib: debug static library for use of C or C++ API. # geos_d.dll: debug DLL - only exports the C API # geos_i_d.lib: debug stub library to link against for use of geos.dll. # # This makefile mostly maintained by Frank Warmerdam # with support by Mateusz Loskot ############################################################################### GEOS_ROOT=.. !INCLUDE $(GEOS_ROOT)\nmake.opt !INCLUDE dirlist.mk ############################################################################### # Output location # TODO: not yet supported #OUT_DIR = $(GEOS_ROOT)\bin\$(BUILD_DIR) ############################################################################### # List of objects OBJ_EXT = obj EXT = $(OBJ_EXT) OBJ = \ algorithm\Angle.$(EXT) \ algorithm\BoundaryNodeRule.$(EXT) \ algorithm\Centroid.$(EXT) \ algorithm\CentroidArea.$(EXT) \ algorithm\CentroidLine.$(EXT) \ algorithm\CentroidPoint.$(EXT) \ algorithm\CGAlgorithms.$(EXT) \ algorithm\ConvexHull.$(EXT) \ algorithm\HCoordinate.$(EXT) \ algorithm\InteriorPointArea.$(EXT) \ algorithm\InteriorPointLine.$(EXT) \ algorithm\InteriorPointPoint.$(EXT) \ algorithm\LineIntersector.$(EXT) \ algorithm\MCPointInRing.$(EXT) \ algorithm\MinimumDiameter.$(EXT) \ algorithm\NotRepresentableException.$(EXT) \ algorithm\PointLocator.$(EXT) \ algorithm\RayCrossingCounter.$(EXT) \ algorithm\RobustDeterminant.$(EXT) \ algorithm\SimplePointInRing.$(EXT) \ algorithm\SIRtreePointInRing.$(EXT) \ algorithm\distance\DiscreteHausdorffDistance.$(EXT) \ algorithm\distance\DistanceToPoint.$(EXT) \ algorithm\locate\IndexedPointInAreaLocator.$(EXT) \ algorithm\locate\PointOnGeometryLocator.$(EXT) \ algorithm\locate\SimplePointInAreaLocator.$(EXT) \ geom\Coordinate.$(EXT) \ geom\CoordinateArraySequence.$(EXT) \ geom\CoordinateArraySequenceFactory.$(EXT) \ geom\CoordinateSequence.$(EXT) \ geom\CoordinateSequenceFactory.$(EXT) \ geom\Dimension.$(EXT) \ geom\Envelope.$(EXT) \ geom\Geometry.$(EXT) \ geom\GeometryCollection.$(EXT) \ geom\GeometryComponentFilter.$(EXT) \ geom\GeometryFactory.$(EXT) \ geom\GeometryList.$(EXT) \ geom\IntersectionMatrix.$(EXT) \ geom\LinearRing.$(EXT) \ geom\LineSegment.$(EXT) \ geom\LineString.$(EXT) \ geom\Location.$(EXT) \ geom\MultiLineString.$(EXT) \ geom\MultiPoint.$(EXT) \ geom\MultiPolygon.$(EXT) \ geom\Point.$(EXT) \ geom\Polygon.$(EXT) \ geom\PrecisionModel.$(EXT) \ geom\Triangle.$(EXT) \ geom\util\ComponentCoordinateExtracter.$(EXT) \ geom\util\CoordinateOperation.$(EXT) \ geom\util\GeometryEditor.$(EXT) \ geom\util\GeometryTransformer.$(EXT) \ geom\util\GeometryCombiner.$(EXT) \ geom\util\ShortCircuitedGeometryVisitor.$(EXT) \ geom\util\SineStarFactory.$(EXT) \ geom\prep\AbstractPreparedPolygonContains.$(EXT) \ geom\prep\BasicPreparedGeometry.$(EXT) \ geom\prep\PreparedGeometry.$(EXT) \ geom\prep\PreparedGeometryFactory.$(EXT) \ geom\prep\PreparedLineString.$(EXT) \ geom\prep\PreparedLineStringIntersects.$(EXT) \ geom\prep\PreparedPoint.$(EXT) \ geom\prep\PreparedPolygon.$(EXT) \ geom\prep\PreparedPolygonContains.$(EXT) \ geom\prep\PreparedPolygonContainsProperly.$(EXT) \ geom\prep\PreparedPolygonCovers.$(EXT) \ geom\prep\PreparedPolygonIntersects.$(EXT) \ geom\prep\PreparedPolygonPredicate.$(EXT) \ geomgraph\Depth.$(EXT) \ geomgraph\DirectedEdge.$(EXT) \ geomgraph\DirectedEdgeStar.$(EXT) \ geomgraph\Edge.$(EXT) \ geomgraph\EdgeEnd.$(EXT) \ geomgraph\EdgeEndStar.$(EXT) \ geomgraph\EdgeIntersectionList.$(EXT) \ geomgraph\EdgeList.$(EXT) \ geomgraph\EdgeNodingValidator.$(EXT) \ geomgraph\EdgeRing.$(EXT) \ geomgraph\GeometryGraph.$(EXT) \ geomgraph\GraphComponent.$(EXT) \ geomgraph\Label.$(EXT) \ geomgraph\Node.$(EXT) \ geomgraph\NodeFactory.$(EXT) \ geomgraph\NodeMap.$(EXT) \ geomgraph\PlanarGraph.$(EXT) \ geomgraph\Position.$(EXT) \ geomgraph\Quadrant.$(EXT) \ geomgraph\TopologyLocation.$(EXT) \ geomgraph\index\MonotoneChainEdge.$(EXT) \ geomgraph\index\MonotoneChainIndexer.$(EXT) \ geomgraph\index\SegmentIntersector.$(EXT) \ geomgraph\index\SimpleEdgeSetIntersector.$(EXT) \ geomgraph\index\SimpleMCSweepLineIntersector.$(EXT) \ geomgraph\index\SimpleSweepLineIntersector.$(EXT) \ geomgraph\index\SweepLineEvent.$(EXT) \ geomgraph\index\SweepLineSegment.$(EXT) \ index\bintree\Bintree.$(EXT) \ index\bintree\Interval.$(EXT) \ index\bintree\Key.$(EXT) \ index\bintree\Node.$(EXT) \ index\bintree\NodeBase.$(EXT) \ index\bintree\Root.$(EXT) \ index\chain\MonotoneChain.$(EXT) \ index\chain\MonotoneChainBuilder.$(EXT) \ index\chain\MonotoneChainOverlapAction.$(EXT) \ index\chain\MonotoneChainSelectAction.$(EXT) \ index\intervalrtree\IntervalRTreeBranchNode.$(EXT) \ index\intervalrtree\IntervalRTreeLeafNode.$(EXT) \ index\intervalrtree\IntervalRTreeNode.$(EXT) \ index\intervalrtree\SortedPackedIntervalRTree.$(EXT) \ index\quadtree\DoubleBits.$(EXT) \ index\quadtree\IntervalSize.$(EXT) \ index\quadtree\Key.$(EXT) \ index\quadtree\Node.$(EXT) \ index\quadtree\NodeBase.$(EXT) \ index\quadtree\Root.$(EXT) \ index\quadtree\Quadtree.$(EXT) \ index\strtree\AbstractNode.$(EXT) \ index\strtree\AbstractSTRtree.$(EXT) \ index\strtree\Interval.$(EXT) \ index\strtree\ItemBoundable.$(EXT) \ index\strtree\SIRtree.$(EXT) \ index\strtree\STRtree.$(EXT) \ index\sweepline\SweepLineEvent.$(EXT) \ index\sweepline\SweepLineIndex.$(EXT) \ index\sweepline\SweepLineInterval.$(EXT) \ io\ByteOrderDataInStream.$(EXT) \ io\ByteOrderValues.$(EXT) \ io\CLocalizer.$(EXT) \ io\ParseException.$(EXT) \ io\StringTokenizer.$(EXT) \ io\Unload.$(EXT) \ io\WKBReader.$(EXT) \ io\WKBWriter.$(EXT) \ io\WKTReader.$(EXT) \ io\WKTWriter.$(EXT) \ io\Writer.$(EXT) \ noding\BasicSegmentString.$(EXT) \ noding\FastNodingValidator.$(EXT) \ noding\FastSegmentSetIntersectionFinder.$(EXT) \ noding\GeometryNoder.$(EXT) \ noding\IntersectionAdder.$(EXT) \ noding\IntersectionFinderAdder.$(EXT) \ noding\IteratedNoder.$(EXT) \ noding\MCIndexNoder.$(EXT) \ noding\MCIndexSegmentSetMutualIntersector.$(EXT) \ noding\NodedSegmentString.$(EXT) \ noding\NodingValidator.$(EXT) \ noding\Octant.$(EXT) \ noding\OrientedCoordinateArray.$(EXT) \ noding\ScaledNoder.$(EXT) \ noding\SegmentIntersectionDetector.$(EXT) \ noding\SegmentNode.$(EXT) \ noding\SegmentNodeList.$(EXT) \ noding\SegmentString.$(EXT) \ noding\SegmentStringUtil.$(EXT) \ noding\SimpleNoder.$(EXT) \ noding\SingleInteriorIntersectionFinder.$(EXT) \ noding\snapround\HotPixel.$(EXT) \ noding\snapround\MCIndexPointSnapper.$(EXT) \ noding\snapround\MCIndexSnapRounder.$(EXT) \ noding\snapround\SimpleSnapRounder.$(EXT) \ operation\GeometryGraphOperation.$(EXT) \ operation\IsSimpleOp.$(EXT) \ operation\buffer\BufferBuilder.$(EXT) \ operation\buffer\BufferInputLineSimplifier.$(EXT) \ operation\buffer\BufferParameters.$(EXT) \ operation\buffer\BufferOp.$(EXT) \ operation\buffer\BufferSubgraph.$(EXT) \ operation\buffer\OffsetCurveBuilder.$(EXT) \ operation\buffer\OffsetCurveSetBuilder.$(EXT) \ operation\buffer\OffsetSegmentGenerator.$(EXT) \ operation\buffer\RightmostEdgeFinder.$(EXT) \ operation\buffer\SubgraphDepthLocater.$(EXT) \ operation\distance\ConnectedElementLocationFilter.$(EXT) \ operation\distance\ConnectedElementPointFilter.$(EXT) \ operation\distance\DistanceOp.$(EXT) \ operation\distance\GeometryLocation.$(EXT) \ operation\linemerge\EdgeString.$(EXT) \ operation\linemerge\LineMergeDirectedEdge.$(EXT) \ operation\linemerge\LineMergeEdge.$(EXT) \ operation\linemerge\LineMergeGraph.$(EXT) \ operation\linemerge\LineMerger.$(EXT) \ operation\linemerge\LineSequencer.$(EXT) \ operation\overlay\EdgeSetNoder.$(EXT) \ operation\overlay\ElevationMatrix.$(EXT) \ operation\overlay\ElevationMatrixCell.$(EXT) \ operation\overlay\LineBuilder.$(EXT) \ operation\overlay\MaximalEdgeRing.$(EXT) \ operation\overlay\MinimalEdgeRing.$(EXT) \ operation\overlay\OverlayNodeFactory.$(EXT) \ operation\overlay\OverlayOp.$(EXT) \ operation\overlay\PointBuilder.$(EXT) \ operation\overlay\PolygonBuilder.$(EXT) \ operation\overlay\snap\GeometrySnapper.$(EXT) \ operation\overlay\snap\LineStringSnapper.$(EXT) \ operation\overlay\snap\SnapOverlayOp.$(EXT) \ operation\overlay\snap\SnapIfNeededOverlayOp.$(EXT) \ operation\overlay\validate\FuzzyPointLocator.$(EXT) \ operation\overlay\validate\OffsetPointGenerator.$(EXT) \ operation\overlay\validate\OverlayResultValidator.$(EXT) \ operation\polygonize\PolygonizeDirectedEdge.$(EXT) \ operation\polygonize\PolygonizeEdge.$(EXT) \ operation\polygonize\EdgeRing.$(EXT) \ operation\polygonize\PolygonizeGraph.$(EXT) \ operation\polygonize\Polygonizer.$(EXT) \ operation\predicate\RectangleContains.$(EXT) \ operation\predicate\RectangleIntersects.$(EXT) \ operation\predicate\SegmentIntersectionTester.$(EXT) \ operation\relate\EdgeEndBuilder.$(EXT) \ operation\relate\EdgeEndBundle.$(EXT) \ operation\relate\EdgeEndBundleStar.$(EXT) \ operation\relate\RelateComputer.$(EXT) \ operation\relate\RelateNode.$(EXT) \ operation\relate\RelateNodeFactory.$(EXT) \ operation\relate\RelateNodeGraph.$(EXT) \ operation\relate\RelateOp.$(EXT) \ operation\sharedpaths\SharedPathsOp.$(EXT) \ operation\union\CascadedPolygonUnion.$(EXT) \ operation\union\CascadedUnion.$(EXT) \ operation\union\PointGeometryUnion.$(EXT) \ operation\union\UnaryUnionOp.$(EXT) \ operation\valid\ConnectedInteriorTester.$(EXT) \ operation\valid\ConsistentAreaTester.$(EXT) \ operation\valid\IndexedNestedRingTester.$(EXT) \ operation\valid\IsValidOp.$(EXT) \ operation\valid\QuadtreeNestedRingTester.$(EXT) \ operation\valid\RepeatedPointTester.$(EXT) \ operation\valid\SimpleNestedRingTester.$(EXT) \ operation\valid\SweeplineNestedRingTester.$(EXT) \ operation\valid\TopologyValidationError.$(EXT) \ planargraph\DirectedEdge.$(EXT) \ planargraph\DirectedEdgeStar.$(EXT) \ planargraph\Edge.$(EXT) \ planargraph\Node.$(EXT) \ planargraph\NodeMap.$(EXT) \ planargraph\PlanarGraph.$(EXT) \ planargraph\Subgraph.$(EXT) \ planargraph\algorithm\ConnectedSubgraphFinder.$(EXT) \ precision\CommonBits.$(EXT) \ precision\CommonBitsOp.$(EXT) \ precision\CommonBitsRemover.$(EXT) \ precision\EnhancedPrecisionOp.$(EXT) \ precision\GeometryPrecisionReducer.$(EXT) \ precision\PrecisionReducerCoordinateOperation.$(EXT) \ precision\SimpleGeometryPrecisionReducer.$(EXT) \ simplify\DouglasPeuckerLineSimplifier.$(EXT) \ simplify\DouglasPeuckerSimplifier.$(EXT) \ simplify\LineSegmentIndex.$(EXT) \ simplify\TaggedLineSegment.$(EXT) \ simplify\TaggedLinesSimplifier.$(EXT) \ simplify\TaggedLineString.$(EXT) \ simplify\TaggedLineStringSimplifier.$(EXT) \ simplify\TopologyPreservingSimplifier.$(EXT) \ triangulate\DelaunayTriangulationBuilder.$(EXT) \ triangulate\IncrementalDelaunayTriangulator.$(EXT) \ triangulate\quadedge\LastFoundQuadEdgeLocator.$(EXT) \ triangulate\quadedge\LocateFailureException.$(EXT) \ triangulate\quadedge\QuadEdge.$(EXT) \ triangulate\quadedge\QuadEdgeLocator.$(EXT) \ triangulate\quadedge\QuadEdgeSubdivision.$(EXT) \ triangulate\quadedge\TrianglePredicate.$(EXT) \ triangulate\quadedge\TriangleVisitor.$(EXT) \ triangulate\quadedge\Vertex.$(EXT) \ util\Assert.$(EXT) \ util\GeometricShapeFactory.$(EXT) \ util\Interrupt.$(EXT) \ util\math.$(EXT) \ util\Profiler.$(EXT) \ linearref\ExtractLineByLocation.$(EXT) \ linearref\LengthIndexOfPoint.$(EXT) \ linearref\LengthIndexedLine.$(EXT) \ linearref\LengthLocationMap.$(EXT) \ linearref\LinearGeometryBuilder.$(EXT) \ linearref\LinearIterator.$(EXT) \ linearref\LinearLocation.$(EXT) \ linearref\LocationIndexOfLine.$(EXT) \ linearref\LocationIndexOfPoint.$(EXT) \ ..\capi\geos_c.$(EXT) \ ..\capi\geos_ts_c.$(EXT) \ inlines.$(EXT) TEST_EXE = TestSweepLineSpeed.exe ############################################################################### # Build targets default: $(LIBNAME) $(DLLNAME) $(CDLLNAME) all: $(LIBNAME) $(DLLNAME) $(CDLLNAME) TestSweepLineSpeed.exe geostest.exe check: all TestSweepLineSpeed.exe $(LIBNAME): $(GEOS_ROOT)\include\geos\platform.h $(GEOS_ROOT)\include\geos\version.h ..\capi\geos_c.h $(OBJ) if exist $(LIBNAME) del $(LIBNAME) $(LINK) /lib /out:$(LIBNAME) $(OBJ) $(DLLNAME): $(OBJ) $(LINK) /dll /debug $(LINKER_FLAGS) $(OBJ) /out:$(DLLNAME) /implib:$(SLIBNAME) if exist $(DLLNAME).manifest mt -manifest $(DLLNAME).manifest -outputresource:$(DLLNAME);2 $(CDLLNAME): ..\capi\geos_c.obj ..\capi\geos_ts_c.obj $(DLLNAME) $(LINK) /dll /debug $(LINKER_FLAGS) ..\capi\geos_c.obj ..\capi\geos_ts_c.obj $(LIBNAME) /out:$(CDLLNAME) /implib:$(CLIBNAME) if exist $(CDLLNAME).manifest mt -manifest $(CDLLNAME).manifest -outputresource:$(CDLLNAME);2 $(GEOS_ROOT)\include\geos\platform.h: $(GEOS_ROOT)\include\geos\platform.h.vc $(CP) $(GEOS_ROOT)\include\geos\platform.h.vc $(GEOS_ROOT)\include\geos\platform.h $(GEOS_ROOT)\include\geos\version.h: $(GEOS_ROOT)\include\geos\version.h.vc if not exist $(GEOS_ROOT)\include\geos\version.h $(CP) $(GEOS_ROOT)\include\geos\version.h.vc $(GEOS_ROOT)\include\geos\version.h # geos_c.h should already be in distribution, if is not you'll # have to run ./configure to recreate ../capi/geos_c.h: ../capi/geos_c.h.in. $(CP) ..\capi\geos_c.h.in ..\capi\geos_c.h .cpp.obj: $(CC) $(CFLAGS) /c $*.cpp /Fo$@ {..\capi}.cpp.obj: $(CC) $(CFLAGS) /D "GEOS_DLL_EXPORT" /c $*.cpp /Fo$@ .c.obj: $(CC) $(CFLAGS) /c $*.c /Fo$@ clean: @ECHO "*** Cleaning GEOS source tree" @IF EXIST $(LIBNAME) $(RM) $(LIBNAME) @IF EXIST $(SLIBNAME) $(RM) $(SLIBNAME) @IF EXIST $(DLLNAME) $(RM) $(DLLNAME) @IF EXIST $(SLIBNAME) $(RM) $(SLIBNAME) @IF EXIST $(CLIBNAME) $(RM) $(CLIBNAME) @IF EXIST $(CDLLNAME) $(RM) $(CDLLNAME) -@del /s *.exe -@del /s *.exp -@del /s *.ilk -@del /s *.manifest -@del /s *.obj -@del /s *.pdb TestSweepLineSpeed.exe: $(LIBNAME) \ ..\tests\bigtest\GeometryTestFactory.obj \ ..\tests\bigtest\TestSweepLineSpeed.obj $(LINK) /debug /out:TestSweepLineSpeed.exe \ ..\tests\bigtest\TestSweepLineSpeed.obj \ ..\tests\bigtest\GeometryTestFactory.obj \ $(LIBNAME) geostest.exe: $(CDLLNAME) ..\tests\unit\capi\geostest.obj $(LINK) /debug ..\tests\unit\capi\geostest.obj $(CLIBNAME) # EOF geos-3.4.2/src/algorithm/0000755000175000017500000000000012206417232015051 5ustar frankiefrankiegeos-3.4.2/src/algorithm/Angle.cpp0000644000175000017500000001044512206417145016612 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/Angle.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include namespace geos { namespace algorithm { // geos.algorithm namespace { const double PI = 3.14159265358979323846; } const double Angle::PI_TIMES_2 = 2.0 * PI; const double Angle::PI_OVER_2 = PI / 2.0; const double Angle::PI_OVER_4 = PI / 4.0; /* public static */ double Angle::toDegrees(double radians) { return (radians * 180) / (PI); } /* public static */ double Angle::toRadians(double angleDegrees) { return (angleDegrees * PI) / 180.0; } /* public static */ double Angle::angle(const geom::Coordinate& p0, const geom::Coordinate& p1) { double dx = p1.x - p0.x; double dy = p1.y - p0.y; return atan2(dy, dx); } /* public static */ double Angle::angle(const geom::Coordinate& p) { return atan2(p.y, p.x); } /* public static */ bool Angle::isAcute(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) { // relies on fact that A dot B is positive iff A ang B is acute double dx0 = p0.x - p1.x; double dy0 = p0.y - p1.y; double dx1 = p2.x - p1.x; double dy1 = p2.y - p1.y; double dotprod = dx0 * dx1 + dy0 * dy1; return dotprod > 0; } /* public static */ bool Angle::isObtuse(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) { // relies on fact that A dot B is negative iff A ang B is obtuse double dx0 = p0.x - p1.x; double dy0 = p0.y - p1.y; double dx1 = p2.x - p1.x; double dy1 = p2.y - p1.y; double dotprod = dx0 * dx1 + dy0 * dy1; return dotprod < 0; } /* public static */ double Angle::angleBetween(const geom::Coordinate& tip1, const geom::Coordinate& tail, const geom::Coordinate& tip2) { double a1 = angle(tail, tip1); double a2 = angle(tail, tip2); return diff(a1, a2); } /* public static */ double Angle::angleBetweenOriented(const geom::Coordinate& tip1, const geom::Coordinate& tail, const geom::Coordinate& tip2) { double a1 = angle(tail, tip1); double a2 = angle(tail, tip2); double angDel = a2 - a1; // normalize, maintaining orientation if (angDel <= -PI) return angDel + PI_TIMES_2; if (angDel > PI) return angDel - PI_TIMES_2; return angDel; } /* public static */ double Angle::interiorAngle(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) { double anglePrev = angle(p1, p0); double angleNext = angle(p1, p2); return fabs(angleNext - anglePrev); } /* public static */ int Angle::getTurn(double ang1, double ang2) { double crossproduct = sin(ang2 - ang1); if (crossproduct > 0) { return COUNTERCLOCKWISE; } if (crossproduct < 0) { return CLOCKWISE; } return NONE; } /* public static */ double Angle::normalize(double angle) { while (angle > PI) angle -= PI_TIMES_2; while (angle <= -PI) angle += PI_TIMES_2; return angle; } /* public static */ double Angle::normalizePositive(double angle) { if (angle < 0.0) { while (angle < 0.0) angle += PI_TIMES_2; // in case round-off error bumps the value over if (angle >= PI_TIMES_2) angle = 0.0; } else { while (angle >= PI_TIMES_2) angle -= PI_TIMES_2; // in case round-off error bumps the value under if (angle < 0.0) angle = 0.0; } return angle; } /* public static */ double Angle::diff(double ang1, double ang2) { double delAngle; if (ang1 < ang2) { delAngle = ang2 - ang1; } else { delAngle = ang1 - ang2; } if (delAngle > PI) { delAngle = (2 * PI) - delAngle; } return delAngle; } } // namespace geos.algorithm } //namespace geos geos-3.4.2/src/algorithm/BoundaryNodeRule.cpp0000644000175000017500000001125612206417145021006 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/BoundaryNodeRule.java rev 1.4 (JTS-1.10) * **********************************************************************/ #include namespace geos { namespace algorithm { // geos.algorithm // These classes are public in JTS, and under the BoundaryNodeRule // namespace. In GEOS they are hidden and only accessible as singleton // from BoundaryNodeRule static const references // namespace { /** * A {@link BoundaryNodeRule} specifies that points are in the * boundary of a lineal geometry iff * the point lies on the boundary of an odd number * of components. * Under this rule {@link LinearRing}s and closed * {@link LineString}s have an empty boundary. *

* This is the rule specified by the OGC SFS, * and is the default rule used in JTS. * * @author Martin Davis * @version 1.7 */ class Mod2BoundaryNodeRule : public BoundaryNodeRule { public: bool isInBoundary(int boundaryCount) const { // the "Mod-2 Rule" return boundaryCount % 2 == 1; } }; /** * A {@link BoundaryNodeRule} which specifies that any points * which are endpoints * of lineal components are in the boundary of the * parent geometry. * This corresponds to the "intuitive" topological definition * of boundary. * Under this rule {@link LinearRing}s have a non-empty boundary * (the common endpoint of the underlying LineString). *

* This rule is useful when dealing with linear networks. * For example, it can be used to check * whether linear networks are correctly noded. * The usual network topology constraint is that linear segments may * touch only at endpoints. * In the case of a segment touching a closed segment (ring) at one * point, * the Mod2 rule cannot distinguish between the permitted case of * touching at the * node point and the invalid case of touching at some other interior * (non-node) point. * The EndPoint rule does distinguish between these cases, * so is more appropriate for use. * * @author Martin Davis * @version 1.7 */ class EndPointBoundaryNodeRule : public BoundaryNodeRule { bool isInBoundary(int boundaryCount) const { return boundaryCount > 0; } }; /** * A {@link BoundaryNodeRule} which determines that only * endpoints with valency greater than 1 are on the boundary. * This corresponds to the boundary of a {@link MultiLineString} * being all the "attached" endpoints, but not * the "unattached" ones. * * @author Martin Davis * @version 1.7 */ class MultiValentEndPointBoundaryNodeRule : public BoundaryNodeRule { bool isInBoundary(int boundaryCount) const { return boundaryCount > 1; } }; /** * A {@link BoundaryNodeRule} which determines that only * endpoints with valency of exactly 1 are on the boundary. * This corresponds to the boundary of a {@link MultiLineString} * being all the "unattached" endpoints. * * @author Martin Davis * @version 1.7 */ class MonoValentEndPointBoundaryNodeRule : public BoundaryNodeRule { bool isInBoundary(int boundaryCount) const { return boundaryCount == 1; } }; Mod2BoundaryNodeRule mod2Rule; EndPointBoundaryNodeRule endPointRule; MultiValentEndPointBoundaryNodeRule multiValentRule; MonoValentEndPointBoundaryNodeRule monoValentRule; } // anonymous namespace //const BoundaryNodeRule& BoundaryNodeRule::MOD2_BOUNDARY_RULE = mod2Rule; const BoundaryNodeRule& BoundaryNodeRule::getBoundaryRuleMod2() { return mod2Rule; } //const BoundaryNodeRule& BoundaryNodeRule::ENDPOINT_BOUNDARY_RULE = endPointRule; const BoundaryNodeRule& BoundaryNodeRule::getBoundaryEndPoint() { return endPointRule; } //const BoundaryNodeRule& BoundaryNodeRule::MULTIVALENT_ENDPOINT_BOUNDARY_RULE = multiValentRule; const BoundaryNodeRule& BoundaryNodeRule::getBoundaryMultivalentEndPoint() { return multiValentRule; } //const BoundaryNodeRule& BoundaryNodeRule::MONOVALENT_ENDPOINT_BOUNDARY_RULE = monoValentRule; const BoundaryNodeRule& BoundaryNodeRule::getBoundaryMonovalentEndPoint() { return monoValentRule; } //const BoundaryNodeRule& BoundaryNodeRule::OGC_SFS_BOUNDARY_RULE = BoundaryNodeRule::MOD2_BOUNDARY_RULE; const BoundaryNodeRule& BoundaryNodeRule::getBoundaryOGCSFS() { return getBoundaryRuleMod2(); } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/CGAlgorithms.cpp0000644000175000017500000002274112206417145020111 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/CGAlgorithms.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include //#include #include using namespace std; using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /*public static*/ int CGAlgorithms::orientationIndex(const Coordinate& p1,const Coordinate& p2,const Coordinate& q) { // travelling along p1->p2, turn counter clockwise to get to q return 1, // travelling along p1->p2, turn clockwise to get to q return -1, // p1, p2 and q are colinear return 0. double dx1=p2.x-p1.x; double dy1=p2.y-p1.y; double dx2=q.x-p2.x; double dy2=q.y-p2.y; return RobustDeterminant::signOfDet2x2(dx1,dy1,dx2,dy2); } /*public static*/ bool CGAlgorithms::isPointInRing(const Coordinate& p, const CoordinateSequence* ring) { return locatePointInRing(p, *ring) != Location::EXTERIOR; } /*public static*/ bool CGAlgorithms::isPointInRing(const Coordinate& p, const Coordinate::ConstVect& ring) { return locatePointInRing(p, ring) != Location::EXTERIOR; } /*public static*/ int CGAlgorithms::locatePointInRing(const Coordinate& p, const CoordinateSequence& ring) { return RayCrossingCounter::locatePointInRing(p, ring); } /*public static*/ int CGAlgorithms::locatePointInRing(const Coordinate& p, const std::vector& ring) { return RayCrossingCounter::locatePointInRing(p, ring); } /*public static*/ bool CGAlgorithms::isOnLine(const Coordinate& p, const CoordinateSequence* pt) { //LineIntersector lineIntersector; size_t ptsize = pt->getSize(); if ( ptsize == 0 ) return false; const Coordinate *pp=&(pt->getAt(0)); for(size_t i=1; igetAt(i); if ( LineIntersector::hasIntersection(p, *pp, p1) ) return true; pp=&p1; } return false; } /*public static*/ bool CGAlgorithms::isCCW(const CoordinateSequence* ring) { // # of points without closing endpoint const std::size_t nPts=ring->getSize()-1; // sanity check if (nPts < 3) { throw util::IllegalArgumentException("Ring has fewer than 3 points, so orientation cannot be determined"); } // find highest point const Coordinate *hiPt=&ring->getAt(0); int hiIndex=0; for (std::size_t i=1; i<=nPts; ++i) { const Coordinate *p=&ring->getAt(i); if (p->y > hiPt->y) { hiPt = p; hiIndex = static_cast(i); } } // find distinct point before highest point int iPrev = hiIndex; do { iPrev = iPrev - 1; if (iPrev < 0) iPrev = static_cast(nPts); } while (ring->getAt(iPrev)==*hiPt && iPrev!=hiIndex); // find distinct point after highest point int iNext = hiIndex; do { iNext = (iNext + 1) % static_cast(nPts); } while (ring->getAt(iNext)==*hiPt && iNext != hiIndex); const Coordinate *prev=&ring->getAt(iPrev); const Coordinate *next=&ring->getAt(iNext); /* * This check catches cases where the ring contains an A-B-A * configuration of points. * This can happen if the ring does not contain 3 distinct points * (including the case where the input array has fewer than 4 elements), * or it contains coincident line segments. */ if ( prev->equals2D(*hiPt) || next->equals2D(*hiPt) || prev->equals2D(*next) ) { return false; // MD - don't bother throwing exception, // since this isn't a complete check for ring validity //throw IllegalArgumentException("degenerate ring (does not contain 3 distinct points)"); } int disc = computeOrientation(*prev, *hiPt, *next); /** * If disc is exactly 0, lines are collinear. * There are two possible cases: * (1) the lines lie along the x axis in opposite directions * (2) the lines lie on top of one another * * (1) is handled by checking if next is left of prev ==> CCW * (2) should never happen, so we're going to ignore it! * (Might want to assert this) */ bool isCCW=false; if (disc == 0) { // poly is CCW if prev x is right of next x isCCW = (prev->x > next->x); } else { // if area is positive, points are ordered CCW isCCW = (disc > 0); } return isCCW; } /*public static*/ int CGAlgorithms::computeOrientation(const Coordinate& p1, const Coordinate& p2, const Coordinate& q) { return orientationIndex(p1,p2,q); } /*public static*/ double CGAlgorithms::distancePointLine(const Coordinate& p, const Coordinate& A, const Coordinate& B) { //if start==end, then use pt distance if (A==B) return p.distance(A); // otherwise use comp.graphics.algorithms Frequently Asked Questions method /*(1) AC dot AB r = --------- ||AB||^2 r has the following meaning: r=0 P = A r=1 P = B r<0 P is on the backward extension of AB r>1 P is on the forward extension of AB 0=1.0) return p.distance(B); /*(2) (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) s = ----------------------------- L^2 Then the distance from C to P = |s|*L. */ double s=((A.y-p.y)*(B.x-A.x)-(A.x-p.x)*(B.y-A.y))/ ((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y)); return fabs(s)*sqrt(((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y))); } /*public static*/ double CGAlgorithms::distancePointLinePerpendicular(const Coordinate& p,const Coordinate& A,const Coordinate& B) { // use comp.graphics.algorithms Frequently Asked Questions method /*(2) (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) s = ----------------------------- L^2 Then the distance from C to P = |s|*L. */ double s = ((A.y - p.y) *(B.x - A.x) - (A.x - p.x)*(B.y - A.y) ) / ((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y) ); return fabs(s)*sqrt(((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y))); } /*public static*/ double CGAlgorithms::distanceLineLine(const Coordinate& A, const Coordinate& B, const Coordinate& C, const Coordinate& D) { // check for zero-length segments if (A==B) return distancePointLine(A,C,D); if (C==D) return distancePointLine(D,A,B); // AB and CD are line segments /* from comp.graphics.algo Solving the above for r and s yields (Ay-Cy)(Dx-Cx)-(Ax-Cx)(Dy-Cy) r = ----------------------------- (eqn 1) (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) (Ay-Cy)(Bx-Ax)-(Ax-Cx)(By-Ay) s = ----------------------------- (eqn 2) (Bx-Ax)(Dy-Cy)-(By-Ay)(Dx-Cx) Let P be the position vector of the intersection point, then P=A+r(B-A) or Px=Ax+r(Bx-Ax) Py=Ay+r(By-Ay) By examining the values of r & s, you can also determine some other limiting conditions: If 0<=r<=1 & 0<=s<=1, intersection exists r<0 or r>1 or s<0 or s>1 line segments do not intersect If the denominator in eqn 1 is zero, AB & CD are parallel If the numerator in eqn 1 is also zero, AB & CD are collinear. */ double r_top=(A.y-C.y)*(D.x-C.x)-(A.x-C.x)*(D.y-C.y); double r_bot=(B.x-A.x)*(D.y-C.y)-(B.y-A.y)*(D.x-C.x); double s_top=(A.y-C.y)*(B.x-A.x)-(A.x-C.x)*(B.y-A.y); double s_bot=(B.x-A.x)*(D.y-C.y)-(B.y-A.y)*(D.x-C.x); if ((r_bot==0)||(s_bot==0)) { return (std::min)(distancePointLine(A,C,D), (std::min)(distancePointLine(B,C,D), (std::min)(distancePointLine(C,A,B), distancePointLine(D,A,B)))); } double s=s_top/s_bot; double r=r_top/r_bot; if ((r<0)||( r>1)||(s<0)||(s>1)) { //no intersection return (std::min)(distancePointLine(A,C,D), (std::min)(distancePointLine(B,C,D), (std::min)(distancePointLine(C,A,B), distancePointLine(D,A,B)))); } return 0.0; //intersection exists } /*public static*/ double CGAlgorithms::signedArea(const CoordinateSequence* ring) { size_t npts=ring->getSize(); if (npts<3) return 0.0; Coordinate pp; Coordinate cp = ring->getAt(0); Coordinate np = ring->getAt(1); double x0 = cp.x; np.x -= x0; double sum=0.0; for (size_t i=1; igetAt(i, np); np.x -= x0; sum += cp.x * (np.y - pp.y); } return -sum/2.0; } /*public static*/ double CGAlgorithms::length(const CoordinateSequence* pts) { // optimized for processing CoordinateSequences size_t npts=pts->getSize(); if (npts <= 1) return 0.0; double len = 0.0; const Coordinate& p = pts->getAt(0); double x0 = p.x; double y0 = p.y; for(size_t i = 1; i < npts; ++i) { const Coordinate& p = pts->getAt(i); double x1 = p.x; double y1 = p.y; double dx = x1 - x0; double dy = y1 - y0; len += sqrt(dx * dx + dy * dy); x0 = x1; y0 = y1; } return len; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/Centroid.cpp0000644000175000017500000001124412206417145017331 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2013 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/Centroid.java r728 (JTS-0.13+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include // for std::abs using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /* static public */ bool Centroid::getCentroid(const Geometry& geom, Coordinate& pt) { Centroid cent(geom); return cent.getCentroid(pt); } /* public */ bool Centroid::getCentroid(Coordinate& cent) const { if (std::abs(areasum2) > 0.0) { cent.x = cg3.x / 3 / areasum2; cent.y = cg3.y / 3 / areasum2; } else if (totalLength > 0.0) { // if polygon was degenerate, compute linear centroid instead cent.x = lineCentSum.x / totalLength; cent.y = lineCentSum.y / totalLength; } else if (ptCount > 0){ cent.x = ptCentSum.x / ptCount; cent.y = ptCentSum.y / ptCount; } else { return false; } return true; } /* private */ void Centroid::add(const Geometry& geom) { if (geom.isEmpty()) return; if (const Point* g = dynamic_cast(&geom)) { addPoint(*g->getCoordinate()); } else if (const LineString* g = dynamic_cast(&geom)) { addLineSegments(*g->getCoordinatesRO()); } else if (const Polygon* g = dynamic_cast(&geom)) { add(*g); } else if (const GeometryCollection* g = dynamic_cast(&geom)) { for (size_t i = 0; i < g->getNumGeometries(); i++) { add(*g->getGeometryN(i)); } } } /* private */ void Centroid::setBasePoint(const Coordinate& basePt) { if ( ! areaBasePt.get() ) areaBasePt.reset( new Coordinate(basePt) ); } /* private */ void Centroid::add(const Polygon& poly) { addShell(*poly.getExteriorRing()->getCoordinatesRO()); for (size_t i = 0; i < poly.getNumInteriorRing(); i++) { addHole(*poly.getInteriorRingN(i)->getCoordinatesRO()); } } /* private */ void Centroid::addShell(const CoordinateSequence& pts) { size_t len = pts.size(); if (len > 0) setBasePoint(pts[0]); bool isPositiveArea = ! CGAlgorithms::isCCW(&pts); for (size_t i = 0; i < len - 1; ++i) { addTriangle(*areaBasePt, pts[i], pts[i+1], isPositiveArea); } addLineSegments(pts); } /* private */ void Centroid::addHole(const CoordinateSequence& pts) { bool isPositiveArea = CGAlgorithms::isCCW(&pts); for (size_t i = 0, e = pts.size() - 1; i < e; ++i) { addTriangle(*areaBasePt, pts[i], pts[i+1], isPositiveArea); } addLineSegments(pts); } /* private */ void Centroid::addTriangle(const Coordinate& p0, const Coordinate& p1, const Coordinate& p2, bool isPositiveArea) { double sign = (isPositiveArea) ? 1.0 : -1.0; centroid3( p0, p1, p2, triangleCent3 ); double a2 = area2( p0, p1, p2 ); cg3.x += sign * a2 * triangleCent3.x; cg3.y += sign * a2 * triangleCent3.y; areasum2 += sign * a2; } /* static private */ void Centroid::centroid3(const Coordinate& p1, const Coordinate& p2, const Coordinate& p3, Coordinate& c ) { c.x = p1.x + p2.x + p3.x; c.y = p1.y + p2.y + p3.y; return; } /* static private */ double Centroid::area2(const Coordinate& p1, const Coordinate& p2, const Coordinate& p3 ) { return (p2.x - p1.x) * (p3.y - p1.y) - (p3.x - p1.x) * (p2.y - p1.y); } /* private */ void Centroid::addLineSegments(const CoordinateSequence& pts) { size_t npts = pts.size(); double lineLen = 0.0; for (size_t i = 0; i < npts - 1; i++) { double segmentLen = pts[i].distance(pts[i + 1]); if (segmentLen == 0.0) continue; lineLen += segmentLen; double midx = (pts[i].x + pts[i + 1].x) / 2; lineCentSum.x += segmentLen * midx; double midy = (pts[i].y + pts[i + 1].y) / 2; lineCentSum.y += segmentLen * midy; } totalLength += lineLen; if (lineLen == 0.0 && npts > 0) addPoint(pts[0]); } /* private */ void Centroid::addPoint(const Coordinate& pt) { ptCount += 1; ptCentSum.x += pt.x; ptCentSum.y += pt.y; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/CentroidArea.cpp0000644000175000017500000001035412206417145020123 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/CentroidArea.java r612 * **********************************************************************/ #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /*public*/ void CentroidArea::add(const Geometry *geom) { if(geom->isEmpty()) return; else if(const Polygon *poly=dynamic_cast(geom)) { setBasePoint(poly->getExteriorRing()->getCoordinateN(0)); add(poly); } else if(const GeometryCollection *gc=dynamic_cast(geom)) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } /*public*/ void CentroidArea::add(const CoordinateSequence *ring) { setBasePoint(ring->getAt(0)); addShell(ring); } /* TODO: deprecate this */ Coordinate* CentroidArea::getCentroid() const { Coordinate *cent = new Coordinate(); getCentroid(*cent); // or return NULL on failure ! return cent; } bool CentroidArea::getCentroid(Coordinate& ret) const { if ( areasum2 ) { ret = Coordinate(cg3.x/3.0/areasum2, cg3.y/3.0/areasum2); } else if ( totalLength ) { ret = Coordinate(centSum.x/totalLength, centSum.y/totalLength); } else { return false; } return true; } void CentroidArea::setBasePoint(const Coordinate &newbasePt) { basePt=newbasePt; } void CentroidArea::add(const Polygon *poly) { addShell(poly->getExteriorRing()->getCoordinatesRO()); for(size_t i=0, n=poly->getNumInteriorRing(); igetInteriorRingN(i)->getCoordinatesRO()); } } void CentroidArea::addShell(const CoordinateSequence *pts) { bool isPositiveArea=!CGAlgorithms::isCCW(pts); std::size_t const n=pts->getSize()-1; for(std::size_t i=0; igetAt(i), pts->getAt(i+1), isPositiveArea); } addLinearSegments(*pts); } void CentroidArea::addHole(const CoordinateSequence *pts) { bool isPositiveArea=CGAlgorithms::isCCW(pts); std::size_t const n=pts->getSize()-1; for(std::size_t i=0; igetAt(i), pts->getAt(i+1), isPositiveArea); } addLinearSegments(*pts); } void CentroidArea::addTriangle(const Coordinate &p0, const Coordinate &p1, const Coordinate &p2, bool isPositiveArea) { double sign=(isPositiveArea)?1.0:-1.0; centroid3(p0,p1,p2,triangleCent3); double area2res=area2(p0,p1,p2); cg3.x+=sign*area2res*triangleCent3.x; cg3.y+=sign*area2res*triangleCent3.y; areasum2+=sign*area2res; } /** * Returns three times the centroid of the triangle p1-p2-p3. * The factor of 3 is * left in to permit division to be avoided until later. */ void CentroidArea::centroid3(const Coordinate &p1, const Coordinate &p2, const Coordinate &p3, Coordinate &c) { c.x=p1.x+p2.x+p3.x; c.y=p1.y+p2.y+p3.y; } /** * Returns twice the signed area of the triangle p1-p2-p3, * positive if a,b,c are oriented ccw, and negative if cw. */ double CentroidArea::area2(const Coordinate &p1, const Coordinate &p2, const Coordinate &p3) { return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y); } void CentroidArea::addLinearSegments(const geom::CoordinateSequence& pts) { std::size_t const n = pts.size()-1; for (std::size_t i = 0; i < n; ++i) { double segmentLen = pts[i].distance(pts[i + 1]); totalLength += segmentLen; double midx = (pts[i].x + pts[i + 1].x) / 2; centSum.x += segmentLen * midx; double midy = (pts[i].y + pts[i + 1].y) / 2; centSum.y += segmentLen * midy; } } } // namespace geos.algorithm } //namespace geos geos-3.4.2/src/algorithm/CentroidLine.cpp0000644000175000017500000000404112206417145020136 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * **********************************************************************/ #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /*public*/ void CentroidLine::add(const Geometry *geom) { const LineString* ls = dynamic_cast(geom); if ( ls ) { add(ls->getCoordinatesRO()); return; } const GeometryCollection* gc = dynamic_cast(geom); if (gc) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } /*public*/ void CentroidLine::add(const CoordinateSequence *pts) { std::size_t const npts=pts->getSize(); for(std::size_t i=1; igetAt(i-1); const Coordinate &p2=pts->getAt(i); double segmentLen=p1.distance(p2); totalLength+=segmentLen; double midx=(p1.x+p2.x)/2; centSum.x+=segmentLen*midx; double midy=(p1.y+p2.y)/2; centSum.y+=segmentLen*midy; } } Coordinate * CentroidLine::getCentroid() const { return new Coordinate(centSum.x/totalLength, centSum.y/totalLength); } bool CentroidLine::getCentroid(Coordinate& c) const { if ( totalLength == 0.0 ) return false; c=Coordinate(centSum.x/totalLength, centSum.y/totalLength); return true; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/CentroidPoint.cpp0000644000175000017500000000310612206417145020341 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm void CentroidPoint::add(const Geometry *geom) { if ( const Point *p = dynamic_cast(geom) ) { add(p->getCoordinate()); } else if ( const GeometryCollection *gc = dynamic_cast(geom) ) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } void CentroidPoint::add(const Coordinate *pt) { ptCount+=1; centSum.x += pt->x; centSum.y += pt->y; } Coordinate* CentroidPoint::getCentroid() const { return new Coordinate(centSum.x/ptCount, centSum.y/ptCount); } bool CentroidPoint::getCentroid(Coordinate& ret) const { if ( ptCount == 0.0 ) return false; ret=Coordinate(centSum.x/ptCount, centSum.y/ptCount); return true; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/ConvexHull.cpp0000644000175000017500000002647412206417145017664 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/ConvexHull.java r407 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include "geos/algorithm/ConvexHull.inl" #endif using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm namespace { /** * This is the class used to sort in radial order. * It's defined here as it's a static one. */ class RadiallyLessThen { private: const Coordinate *origin; int polarCompare(const Coordinate *o, const Coordinate *p, const Coordinate *q) { double dxp=p->x-o->x; double dyp=p->y-o->y; double dxq=q->x-o->x; double dyq=q->y-o->y; int orient = CGAlgorithms::computeOrientation(*o, *p, *q); if (orient == CGAlgorithms::COUNTERCLOCKWISE) return 1; if (orient == CGAlgorithms::CLOCKWISE) return -1; // points are collinear - check distance double op = dxp * dxp + dyp * dyp; double oq = dxq * dxq + dyq * dyq; if (op < oq) { return -1; } if (op > oq) { return 1; } return 0; } public: RadiallyLessThen(const Coordinate *c): origin(c) {} bool operator() (const Coordinate *p1, const Coordinate *p2) { return ( polarCompare(origin, p1, p2) == -1 ); } }; } // unnamed namespace /* private */ CoordinateSequence * ConvexHull::toCoordinateSequence(Coordinate::ConstVect &cv) { const CoordinateSequenceFactory *csf = geomFactory->getCoordinateSequenceFactory(); // Create a new Coordinate::Vect for feeding it to // the CoordinateSequenceFactory Coordinate::Vect *vect=new Coordinate::Vect(); size_t n=cv.size(); vect->reserve(n); // avoid multiple reallocs for (size_t i=0; ipush_back(*(cv[i])); // Coordinate copy } return csf->create(vect); // takes ownership of the vector } /* private */ void ConvexHull::computeOctPts(const Coordinate::ConstVect &inputPts, Coordinate::ConstVect &pts) { // Initialize all slots with first input coordinate pts = Coordinate::ConstVect(8, inputPts[0]); for (size_t i=1, n=inputPts.size(); ix < pts[0]->x) { pts[0] = inputPts[i]; } if (inputPts[i]->x - inputPts[i]->y < pts[1]->x - pts[1]->y) { pts[1] = inputPts[i]; } if (inputPts[i]->y > pts[2]->y) { pts[2] = inputPts[i]; } if (inputPts[i]->x + inputPts[i]->y > pts[3]->x + pts[3]->y) { pts[3] = inputPts[i]; } if (inputPts[i]->x > pts[4]->x) { pts[4] = inputPts[i]; } if (inputPts[i]->x - inputPts[i]->y > pts[5]->x - pts[5]->y) { pts[5] = inputPts[i]; } if (inputPts[i]->y < pts[6]->y) { pts[6] = inputPts[i]; } if (inputPts[i]->x + inputPts[i]->y < pts[7]->x + pts[7]->y) { pts[7] = inputPts[i]; } } } /* private */ bool ConvexHull::computeOctRing(const Coordinate::ConstVect &inputPts, Coordinate::ConstVect &dest) { computeOctPts(inputPts, dest); // Remove consecutive equal Coordinates // unique() returns an iterator to the end of the resulting // sequence, we erase from there to the end. dest.erase( std::unique(dest.begin(),dest.end()), dest.end() ); // points must all lie in a line if ( dest.size() < 3 ) return false; // close ring dest.push_back(dest[0]); return true; } /* private */ void ConvexHull::reduce(Coordinate::ConstVect &pts) { Coordinate::ConstVect polyPts; if ( ! computeOctRing(pts, polyPts) ) { // unable to compute interior polygon for some reason return; } // add points defining polygon Coordinate::ConstSet reducedSet; reducedSet.insert(polyPts.begin(), polyPts.end()); /** * Add all unique points not in the interior poly. * CGAlgorithms.isPointInRing is not defined for points * actually on the ring, but this doesn't matter since * the points of the interior polygon are forced to be * in the reduced set. * * @@TIP: there should be a std::algo for this */ for (size_t i=0, n=pts.size(); icreateEmptyGeometry(); if (nInputPts==1) // Return a Point { // Copy the Coordinate from the ConstVect return geomFactory->createPoint(*(inputPts[0])); } if (nInputPts==2) // Return a LineString { // Copy all Coordinates from the ConstVect CoordinateSequence *cs = toCoordinateSequence(inputPts); return geomFactory->createLineString(cs); } // use heuristic to reduce points, if large if (nInputPts > 50 ) { reduce(inputPts); } // sort points for Graham scan. preSort(inputPts); // Use Graham scan to find convex hull. Coordinate::ConstVect cHS; grahamScan(inputPts, cHS); return lineOrPolygon(cHS); } /* private */ void ConvexHull::preSort(Coordinate::ConstVect &pts) { // find the lowest point in the set. If two or more points have // the same minimum y coordinate choose the one with the minimum x. // This focal point is put in array location pts[0]. for(size_t i=1, n=pts.size(); iyy) || ((pi->y==p0->y) && (pi->xx)) ) { const Coordinate *t=p0; pts[0]=pi; pts[i]=t; } } // sort the points radially around the focal point. std::sort(pts.begin(), pts.end(), RadiallyLessThen(pts[0])); } /*private*/ void ConvexHull::grahamScan(const Coordinate::ConstVect &c, Coordinate::ConstVect &ps) { ps.push_back(c[0]); ps.push_back(c[1]); ps.push_back(c[2]); for(size_t i=3, n=c.size(); i 0) { p = ps.back(); ps.pop_back(); } ps.push_back(p); ps.push_back(c[i]); } ps.push_back(c[0]); } ///* // * Returns a pointer to input, modifying input // */ //CoordinateSequence* //ConvexHull::preSort(CoordinateSequence *pts) //{ // Coordinate t; // // // find the lowest point in the set. If two or more points have // // the same minimum y coordinate choose the one with the minimu x. // // This focal point is put in array location pts[0]. // size_t npts=pts->getSize(); // for(size_t i=1; igetAt(0); // this will change // const Coordinate &pi=pts->getAt(i); // if ( (pi.ysetAt(pi, 0); // pts->setAt( t, i); // } // } // // sort the points radially around the focal point. // radialSort(pts); // return pts; //} ///* // * Returns a newly allocated CoordinateSequence object // */ //CoordinateSequence* //ConvexHull::grahamScan(const CoordinateSequence *c) //{ // const Coordinate *p; // // vector *ps=new vector(); // ps->push_back(c->getAt(0)); // ps->push_back(c->getAt(1)); // ps->push_back(c->getAt(2)); // // p=&(c->getAt(2)); // size_t npts=c->getSize(); // for(size_t i=3; iback()); // ps->pop_back(); // while (CGAlgorithms::computeOrientation(ps->back(), *p, c->getAt(i)) > 0) // { // p=&(ps->back()); // ps->pop_back(); // } // ps->push_back(*p); // ps->push_back(c->getAt(i)); // } // ps->push_back(c->getAt(0)); // // return geomFactory->getCoordinateSequenceFactory()->create(ps); //} //void //ConvexHull::radialSort(CoordinateSequence *p) //{ // // A selection sort routine, assumes the pivot point is // // the first point (i.e., p[0]). // // const Coordinate &p0=p->getAt(0); // the pivot point // // Coordinate t; // size_t npts=p->getSize(); // for(size_t i=1; igetAt(j); // // if ( polarCompare(p0, pj, p->getAt(min)) < 0 ) // { // min=j; // } // } // // /* // * Swap point[i] and point[min] // * We can skip this if they have // * the same value // */ // if ( i != min ) // { // t=p->getAt(i); // p->setAt(p->getAt(min), i); // p->setAt(t, min); // } // } //} /*private*/ bool ConvexHull::isBetween(const Coordinate &c1, const Coordinate &c2, const Coordinate &c3) { if (CGAlgorithms::computeOrientation(c1, c2, c3)!=0) { return false; } if (c1.x!=c3.x) { if (c1.x<=c2.x && c2.x<=c3.x) { return true; } if (c3.x<=c2.x && c2.x<=c1.x) { return true; } } if (c1.y!=c3.y) { if (c1.y<=c2.y && c2.y<=c3.y) { return true; } if (c3.y<=c2.y && c2.y<=c1.y) { return true; } } return false; } //void //ConvexHull::makeBigQuad(const CoordinateSequence *pts, BigQuad &bigQuad) //{ // bigQuad.northmost=bigQuad.southmost= // bigQuad.westmost=bigQuad.eastmost=pts->getAt(0); // // size_t npts=pts->getSize(); // for (size_t i=1; igetAt(i); // // if (pi.xbigQuad.eastmost.x) // bigQuad.eastmost=pi; // // if (pi.ybigQuad.northmost.y) // bigQuad.northmost=pi; // } //} /* private */ Geometry* ConvexHull::lineOrPolygon(const Coordinate::ConstVect &input) { Coordinate::ConstVect cleaned; cleanRing(input, cleaned); if (cleaned.size()==3) { // shouldn't this be 2 ?? cleaned.resize(2); CoordinateSequence *cl1=toCoordinateSequence(cleaned); LineString *ret = geomFactory->createLineString(cl1); return ret; } CoordinateSequence *cl2=toCoordinateSequence(cleaned); LinearRing *linearRing=geomFactory->createLinearRing(cl2); return geomFactory->createPolygon(linearRing,NULL); } /*private*/ void ConvexHull::cleanRing(const Coordinate::ConstVect &original, Coordinate::ConstVect &cleaned) { size_t npts=original.size(); const Coordinate *last = original[npts-1]; //util::Assert::equals(*(original[0]), *last); assert(last); assert(original[0]->equals2D(*last)); const Coordinate *prev = NULL; for (size_t i=0; iequals2D(*next)) continue; if ( prev != NULL && isBetween(*prev, *curr, *next) ) { continue; } cleaned.push_back(curr); prev=curr; } cleaned.push_back(last); } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/HCoordinate.cpp0000644000175000017500000000711312206417145017761 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/HCoordinate.java r386 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /*public static*/ void HCoordinate::intersection(const Coordinate &p1, const Coordinate &p2, const Coordinate &q1, const Coordinate &q2, Coordinate &ret) { #if GEOS_DEBUG cerr << __FUNCTION__ << ":" << endl << setprecision(20) << " p1: " << p1 << endl << " p2: " << p2 << endl << " q1: " << q1 << endl << " q2: " << q2 << endl; #endif // unrolled computation double px = p1.y - p2.y; double py = p2.x - p1.x; double pw = p1.x * p2.y - p2.x * p1.y; double qx = q1.y - q2.y; double qy = q2.x - q1.x; double qw = q1.x * q2.y - q2.x * q1.y; double x = py * qw - qy * pw; double y = qx * pw - px * qw; double w = px * qy - qx * py; double xInt = x/w; double yInt = y/w; if ( (!FINITE(xInt)) || (!FINITE(yInt)) ) { throw NotRepresentableException(); } ret = Coordinate(xInt, yInt); } /*public*/ HCoordinate::HCoordinate() : x(0.0), y(0.0), w(1.0) { } /*public*/ HCoordinate::HCoordinate(double _x, double _y, double _w) : x(_x), y(_y), w(_w) { } /*public*/ HCoordinate::HCoordinate(const Coordinate& p) : x(p.x), y(p.y), w(1.0) { } /*public*/ HCoordinate::HCoordinate(const Coordinate& p1, const Coordinate& p2) : // optimization when it is known that w = 1 x ( p1.y - p2.y ), y ( p2.x - p1.x ), w ( p1.x * p2.y - p2.x * p1.y ) { } /*public*/ HCoordinate::HCoordinate(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2) { // unrolled computation double px = p1.y - p2.y; double py = p2.x - p1.x; double pw = p1.x * p2.y - p2.x * p1.y; double qx = q1.y - q2.y; double qy = q2.x - q1.x; double qw = q1.x * q2.y - q2.x * q1.y; x = py * qw - qy * pw; y = qx * pw - px * qw; w = px * qy - qx * py; } /*public*/ HCoordinate::HCoordinate(const HCoordinate &p1, const HCoordinate &p2) : x( p1.y*p2.w - p2.y*p1.w ), y( p2.x*p1.w - p1.x*p2.w ), w( p1.x*p2.y - p2.x*p1.y ) { } /*public*/ double HCoordinate::getX() const { double a = x/w; if ( !FINITE(a) ) { throw NotRepresentableException(); } return a; } /*public*/ double HCoordinate::getY() const { double a = y/w; if ( !FINITE(a) ) { throw NotRepresentableException(); } return a; } /*public*/ void HCoordinate::getCoordinate(Coordinate &ret) const { ret = Coordinate(static_cast(getX()), static_cast(getY())); } std::ostream& operator<< (std::ostream& o, const HCoordinate& c) { return o << "(" << c.x << ", " << c.y << ") [w: " << c.w << "]"; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/InteriorPointArea.cpp0000644000175000017500000001377712206417145021175 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2013 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/InteriorPointArea.java r728 (JTS-1.13+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include // for auto_ptr using namespace std; using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm // file-statics namespace { double avg(double a, double b){return (a+b)/2.0;} /** * Finds a safe bisector Y ordinate * by projecting to the Y axis * and finding the Y-ordinate interval * which contains the centre of the Y extent. * The centre of this interval is returned as the bisector Y-ordinate. * * @author mdavis * */ class SafeBisectorFinder { public: static double getBisectorY(const Polygon& poly) { SafeBisectorFinder finder(poly); return finder.getBisectorY(); } SafeBisectorFinder(const Polygon& nPoly) : poly(nPoly) { // initialize using extremal values hiY = poly.getEnvelopeInternal()->getMaxY(); loY = poly.getEnvelopeInternal()->getMinY(); centreY = avg(loY, hiY); } double getBisectorY() { process(*poly.getExteriorRing()); for (size_t i = 0; i < poly.getNumInteriorRing(); i++) { process(*poly.getInteriorRingN(i)); } double bisectY = avg(hiY, loY); return bisectY; } private: const Polygon& poly; double centreY; double hiY; double loY; void process(const LineString& line) { const CoordinateSequence* seq = line.getCoordinatesRO(); for (std::size_t i = 0, s = seq->size(); i < s; i++) { double y = seq->getY(i); updateInterval(y); } } void updateInterval(double y) { if (y <= centreY) { if (y > loY) loY = y; } else if (y > centreY) { if (y < hiY) { hiY = y; } } } SafeBisectorFinder(SafeBisectorFinder const&); /*= delete*/ SafeBisectorFinder& operator=(SafeBisectorFinder const&); /*= delete*/ }; } // anonymous namespace /*public*/ InteriorPointArea::InteriorPointArea(const Geometry *g) { foundInterior=false; maxWidth=0.0; factory=g->getFactory(); add(g); } /*public*/ InteriorPointArea::~InteriorPointArea() { } /*public*/ bool InteriorPointArea::getInteriorPoint(Coordinate& ret) const { if ( ! foundInterior ) return false; ret=interiorPoint; return true; } /*public*/ void InteriorPointArea::add(const Geometry *geom) { const Polygon *poly = dynamic_cast(geom); if ( poly ) { addPolygon(geom); return; } const GeometryCollection *gc = dynamic_cast(geom); if ( gc ) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } /*private*/ void InteriorPointArea::addPolygon(const Geometry *geometry) { if (geometry->isEmpty()) return; Coordinate intPt; double width; auto_ptr bisector ( horizontalBisector(geometry) ); if ( bisector->getLength() == 0.0 ) { width = 0; intPt = bisector->getCoordinateN(0); } else { auto_ptr intersections ( bisector->intersection(geometry) ); const Geometry *widestIntersection = widestGeometry(intersections.get()); const Envelope *env = widestIntersection->getEnvelopeInternal(); width=env->getWidth(); env->centre(intPt); } if (!foundInterior || width>maxWidth) { interiorPoint = intPt; maxWidth = width; foundInterior=true; } } //@return if geometry is a collection, the widest sub-geometry; otherwise, //the geometry itself const Geometry* InteriorPointArea::widestGeometry(const Geometry *geometry) { const GeometryCollection *gc = dynamic_cast(geometry); if ( gc ) { return widestGeometry(gc); } else { return geometry; } } const Geometry* InteriorPointArea::widestGeometry(const GeometryCollection* gc) { if (gc->isEmpty()) { return gc; } const Geometry* widestGeometry=gc->getGeometryN(0); // scan remaining geom components to see if any are wider for(std::size_t i=1, n=gc->getNumGeometries(); igetGeometryN(i)->getEnvelopeInternal()); const Envelope *env2(widestGeometry->getEnvelopeInternal()); if (env1->getWidth()>env2->getWidth()) { widestGeometry=gc->getGeometryN(i); } } return widestGeometry; } /* private */ LineString* InteriorPointArea::horizontalBisector(const Geometry *geometry) { const Envelope *envelope=geometry->getEnvelopeInternal(); /** * Original algorithm. Fails when geometry contains a horizontal * segment at the Y midpoint. */ // Assert: for areas, minx <> maxx //double avgY=avg(envelope->getMinY(),envelope->getMaxY()); double bisectY = SafeBisectorFinder::getBisectorY(*dynamic_cast(geometry)); vector*cv=new vector(2); (*cv)[0].x = envelope->getMinX(); (*cv)[0].y = bisectY; (*cv)[1].x = envelope->getMaxX(); (*cv)[1].y = bisectY; CoordinateSequence *cl = factory->getCoordinateSequenceFactory()->create(cv); LineString *ret = factory->createLineString(cl); return ret; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/InteriorPointLine.cpp0000644000175000017500000000676512206417145021213 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/InteriorPointLine.java r317 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm InteriorPointLine::InteriorPointLine(const Geometry *g) { minDistance=DoubleMax; hasInterior=false; if ( g->getCentroid(centroid) ) { #if GEOS_DEBUG std::cerr << "Centroid: " << centroid << std::endl; #endif addInterior(g); } if (!hasInterior) addEndpoints(g); } InteriorPointLine::~InteriorPointLine() { } /* private * * Tests the interior vertices (if any) * defined by a linear Geometry for the best inside point. * If a Geometry is not of dimension 1 it is not tested. * @param geom the geometry to add */ void InteriorPointLine::addInterior(const Geometry *geom) { const LineString *ls = dynamic_cast(geom); if ( ls ) { addInterior(ls->getCoordinatesRO()); return; } const GeometryCollection *gc = dynamic_cast(geom); if ( gc ) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } void InteriorPointLine::addInterior(const CoordinateSequence *pts) { const std::size_t n=pts->getSize()-1; for(std::size_t i=1; igetAt(i)); } } /* private * * Tests the endpoint vertices * defined by a linear Geometry for the best inside point. * If a Geometry is not of dimension 1 it is not tested. * @param geom the geometry to add */ void InteriorPointLine::addEndpoints(const Geometry *geom) { const LineString *ls = dynamic_cast(geom); if ( ls ) { addEndpoints(ls->getCoordinatesRO()); return; } const GeometryCollection *gc = dynamic_cast(geom); if ( gc ) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } void InteriorPointLine::addEndpoints(const CoordinateSequence *pts) { size_t npts = pts->size(); if ( npts ) { add(pts->getAt(0)); if ( npts > 1 ) add(pts->getAt(npts-1)); } } /*private*/ void InteriorPointLine::add(const Coordinate& point) { double dist=point.distance(centroid); #if GEOS_DEBUG std::cerr << "point " << point << " dist " << dist << ", minDistance " << minDistance << std::endl; #endif if (!hasInterior || dist #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /*public*/ InteriorPointPoint::InteriorPointPoint(const Geometry *g) { minDistance=DoubleMax; if ( ! g->getCentroid(centroid) ) { hasInterior=false; } else { hasInterior=true; add(g); } } /*private*/ void InteriorPointPoint::add(const Geometry *geom) { const Point *po = dynamic_cast(geom); if ( po ) { add(po->getCoordinate()); return; } const GeometryCollection *gc = dynamic_cast(geom); if ( gc ) { for(std::size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i)); } } } /*private*/ void InteriorPointPoint::add(const Coordinate *point) { assert ( point ); // we wouldn't been called if this was an empty geom double dist=point->distance(centroid); if (dist #include #include #include //#include #include #include #include //#include // changed to TopologyException //#include // we don't throw anymore #include #include // for fabs() #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif #ifndef COMPUTE_Z #define COMPUTE_Z 1 #endif // COMPUTE_Z using namespace std; using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm namespace { // anonymous /** * Finds the endpoint of the segments P and Q which * is closest to the other segment. * This is a reasonable surrogate for the true * intersection points in ill-conditioned cases * (e.g. where two segments are nearly coincident, * or where the endpoint of one segment lies almost on the other segment). *

* This replaces the older CentralEndpoint heuristic, * which chose the wrong endpoint in some cases * where the segments had very distinct slopes * and one endpoint lay almost on the other segment. * * @param p1 an endpoint of segment P * @param p2 an endpoint of segment P * @param q1 an endpoint of segment Q * @param q2 an endpoint of segment Q * @return the nearest endpoint to the other segment */ Coordinate nearestEndpoint(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2) { Coordinate nearestPt = p1; double minDist = CGAlgorithms::distancePointLine(p1, q1, q2); double dist = CGAlgorithms::distancePointLine(p2, q1, q2); if (dist < minDist) { minDist = dist; nearestPt = p2; } dist = CGAlgorithms::distancePointLine(q1, p1, p2); if (dist < minDist) { minDist = dist; nearestPt = q1; } dist = CGAlgorithms::distancePointLine(q2, p1, p2); if (dist < minDist) { minDist = dist; nearestPt = q2; } return nearestPt; } } // anonymous namespace /*public static*/ double LineIntersector::computeEdgeDistance(const Coordinate& p,const Coordinate& p0,const Coordinate& p1) { double dx=fabs(p1.x-p0.x); double dy=fabs(p1.y-p0.y); double dist=-1.0; // sentinel value if (p==p0) { dist=0.0; } else if (p==p1) { if (dx>dy) dist=dx; else dist=dy; } else { double pdx=fabs(p.x - p0.x); double pdy=fabs(p.y - p0.y); if (dx > dy) dist = pdx; else dist = pdy; // // hack to ensure that non-endpoints always have a non-zero distance if (dist == 0.0 && !(p==p0)) { dist=max(pdx,pdy); } } assert(!(dist == 0.0 && !(p==p0))); // Bad distance calculation return dist; } /*public*/ void LineIntersector::computeIntersection(const Coordinate& p1,const Coordinate& p2,const Coordinate& p3,const Coordinate& p4) { inputLines[0][0]=&p1; inputLines[0][1]=&p2; inputLines[1][0]=&p3; inputLines[1][1]=&p4; result=computeIntersect(p1,p2,p3,p4); //numIntersects++; } /*public*/ string LineIntersector::toString() const { string str=inputLines[0][0]->toString()+"_" +inputLines[0][1]->toString()+" " +inputLines[1][0]->toString()+"_" +inputLines[1][1]->toString()+" : "; if (isEndPoint()) { str+=" endpoint"; } if (isProperVar) { str+=" proper"; } if (isCollinear()) { str+=" collinear"; } return str; } /*public static*/ bool LineIntersector::isSameSignAndNonZero(double a,double b) { if (a==0 || b==0) { return false; } return (a<0 && b<0) || (a>0 && b>0); } /*private*/ void LineIntersector::computeIntLineIndex() { computeIntLineIndex(0); computeIntLineIndex(1); } /*public*/ bool LineIntersector::isIntersection(const Coordinate& pt) const { for (int i=0;idist1) { intLineIndex[segmentIndex][0]=0; intLineIndex[segmentIndex][1]=1; } else { intLineIndex[segmentIndex][0]=1; intLineIndex[segmentIndex][1]=0; } } /*public*/ double LineIntersector::getEdgeDistance(int segmentIndex,int intIndex) const { double dist=computeEdgeDistance(intPt[intIndex], *inputLines[segmentIndex][0], *inputLines[segmentIndex][1]); return dist; } /*public*/ bool LineIntersector::isInteriorIntersection() { if (isInteriorIntersection(0)) return true; if (isInteriorIntersection(1)) return true; return false; } /*public*/ bool LineIntersector::isInteriorIntersection(int inputLineIndex) { for (int i=0; i0 && Pq2>0) || (Pq1<0 && Pq2<0)) { #if GEOS_DEBUG cerr<<" NO_INTERSECTION"<0 && Qp2>0)||(Qp1<0 && Qp2<0)) { #if GEOS_DEBUG cerr<<" NO_INTERSECTION"<makePrecise(intPt); } #if COMPUTE_Z double ztot = 0; double zvals = 0; double zp = interpolateZ(intPt, p1, p2); double zq = interpolateZ(intPt, q1, q2); if ( !ISNAN(zp)) { ztot += zp; zvals++; } if ( !ISNAN(zq)) { ztot += zq; zvals++; } if ( zvals ) intPt.z = ztot/zvals; #endif // COMPUTE_Z } /*private*/ void LineIntersector::intersectionWithNormalization(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2, Coordinate &intPt) const { Coordinate n1=p1; Coordinate n2=p2; Coordinate n3=q1; Coordinate n4=q2; Coordinate normPt; normalizeToEnvCentre(n1, n2, n3, n4, normPt); safeHCoordinateIntersection(n1, n2, n3, n4, intPt); intPt.x += normPt.x; intPt.y += normPt.y; } /*private*/ double LineIntersector::smallestInAbsValue(double x1,double x2,double x3,double x4) const { double x=x1; double xabs=fabs(x); if(fabs(x2) n01.x ? n00.x : n01.x; double maxY0 = n00.y > n01.y ? n00.y : n01.y; double minX1 = n10.x < n11.x ? n10.x : n11.x; double minY1 = n10.y < n11.y ? n10.y : n11.y; double maxX1 = n10.x > n11.x ? n10.x : n11.x; double maxY1 = n10.y > n11.y ? n10.y : n11.y; double intMinX = minX0 > minX1 ? minX0 : minX1; double intMaxX = maxX0 < maxX1 ? maxX0 : maxX1; double intMinY = minY0 > minY1 ? minY0 : minY1; double intMaxY = maxY0 < maxY1 ? maxY0 : maxY1; double intMidX = (intMinX + intMaxX) / 2.0; double intMidY = (intMinY + intMaxY) / 2.0; normPt.x = intMidX; normPt.y = intMidY; n00.x -= normPt.x; n00.y -= normPt.y; n01.x -= normPt.x; n01.y -= normPt.y; n10.x -= normPt.x; n10.y -= normPt.y; n11.x -= normPt.x; n11.y -= normPt.y; #if COMPUTE_Z double minZ0 = n00.z < n01.z ? n00.z : n01.z; double minZ1 = n10.z < n11.z ? n10.z : n11.z; double maxZ0 = n00.z > n01.z ? n00.z : n01.z; double maxZ1 = n10.z > n11.z ? n10.z : n11.z; double intMinZ = minZ0 > minZ1 ? minZ0 : minZ1; double intMaxZ = maxZ0 < maxZ1 ? maxZ0 : maxZ1; double intMidZ = (intMinZ + intMaxZ) / 2.0; normPt.z = intMidZ; n00.z -= normPt.z; n01.z -= normPt.z; n10.z -= normPt.z; n11.z -= normPt.z; #endif } /*private*/ void LineIntersector::safeHCoordinateIntersection(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2, Coordinate& intPt) const { try { HCoordinate::intersection(p1, p2, q1, q2, intPt); #if GEOS_DEBUG cerr<<" HCoordinate found intersection h:"< #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; using namespace geos::index; namespace geos { namespace algorithm { // geos.algorithm MCPointInRing::MCSelecter::MCSelecter(const Coordinate& newP, MCPointInRing *prt) : MonotoneChainSelectAction() { p=newP; parent=prt; } /* public overridden */ void MCPointInRing::MCSelecter::select(const LineSegment& ls) { parent->testLineSegment(p, ls); } MCPointInRing::MCPointInRing(const LinearRing *newRing) : ring(newRing), interval(), pts(NULL), tree(NULL), crossings(0) { buildIndex(); } MCPointInRing::~MCPointInRing() { delete tree; delete pts; } void MCPointInRing::buildIndex() { //using namespace geos::index; // Envelope *env=ring->getEnvelopeInternal(); tree=new bintree::Bintree(); pts=CoordinateSequence::removeRepeatedPoints(ring->getCoordinatesRO()); // NOTE: we take ownership of mcList and it's elements vector *mcList = chain::MonotoneChainBuilder::getChains(pts); for(size_t i=0, n=mcList->size(); igetEnvelope(); interval.min = mcEnv.getMinY(); interval.max = mcEnv.getMaxY(); // TODO: is 'mc' ownership transferred here ? (see below) // by documentation SpatialIndex does NOT take // ownership of the items, so unless we query it // all later we've a leak problem here.. // Need a focused testcase. // tree->insert(&interval, mc); } // TODO: mcList elements ownership went to tree or what ? delete mcList; } bool MCPointInRing::isInside(const Coordinate& pt) { crossings=0; // test all segments intersected by ray from pt in positive x direction Envelope *rayEnv=new Envelope(DoubleNegInfinity,DoubleInfinity,pt.y,pt.y); interval.min=pt.y; interval.max=pt.y; vector *segs=tree->query(&interval); //System.out.println("query size=" + segs.size()); MCSelecter *mcSelecter=new MCSelecter(pt,this); for(int i=0;i<(int)segs->size();i++) { chain::MonotoneChain *mc=(chain::MonotoneChain*) (*segs)[i]; testMonotoneChain(rayEnv,mcSelecter,mc); } /* * p is inside if number of crossings is odd. */ // for(int i=0;i<(int)segs->size();i++) { // delete (chain::MonotoneChain*) (*segs)[i]; // } delete segs; delete rayEnv; delete mcSelecter; if((crossings%2)==1) { return true; } return false; } void MCPointInRing::testMonotoneChain(Envelope *rayEnv, MCSelecter *mcSelecter, chain::MonotoneChain *mc) { mc->select(*rayEnv, *mcSelecter); } void MCPointInRing::testLineSegment(const Coordinate& p, const LineSegment& seg) { double xInt; // x intersection of segment with ray double x1; // translated coordinates double y1; double x2; double y2; /* * Test if segment crosses ray from test point in positive x direction. */ const Coordinate& p1 = seg.p0; const Coordinate& p2 = seg.p1; x1 = p1.x - p.x; y1 = p1.y - p.y; x2 = p2.x - p.x; y2 = p2.y - p.y; if (((y1>0)&&(y2<=0)) || ((y2>0)&&(y1<=0))) { /* * segment straddles x axis, so compute intersection. */ xInt=RobustDeterminant::signOfDet2x2(x1,y1,x2,y2)/(y2-y1); /* * crosses ray if strictly positive intersection. */ if (0.0/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/algorithm/MinimumDiameter.cpp0000644000175000017500000001556012206417145020655 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * TODO: * - avoid heap allocation for LineSegment and Coordinate * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm /** * Computes the minimum diameter of a Geometry. * The minimum diameter is defined to be the * width of the smallest band that * contains the geometry, * where a band is a strip of the plane defined * by two parallel lines. * This can be thought of as the smallest hole that the geometry can be * moved through, with a single rotation. * * The first step in the algorithm is computing the convex hull of the Geometry. * If the input Geometry is known to be convex, a hint can be supplied to * avoid this computation. * * @see ConvexHull * * @version 1.4 */ /** * Compute a minimum diameter for a giver {@link Geometry}. * * @param geom a Geometry */ MinimumDiameter::MinimumDiameter(const Geometry* newInputGeom) { minBaseSeg=new LineSegment(); minWidthPt=NULL; minPtIndex=0; minWidth=0.0; inputGeom=newInputGeom; isConvex=false; } /** * Compute a minimum diameter for a giver Geometry, * with a hint if * the Geometry is convex * (e.g. a convex Polygon or LinearRing, * or a two-point LineString, or a Point). * * @param geom a Geometry which is convex * @param isConvex true if the input geometry is convex */ MinimumDiameter::MinimumDiameter(const Geometry* newInputGeom, const bool newIsConvex) { minBaseSeg=new LineSegment(); minWidthPt=NULL; minWidth=0.0; inputGeom=newInputGeom; isConvex=newIsConvex; } MinimumDiameter::~MinimumDiameter() { delete minBaseSeg; delete minWidthPt; } /** * Gets the length of the minimum diameter of the input Geometry * * @return the length of the minimum diameter */ double MinimumDiameter::getLength() { computeMinimumDiameter(); return minWidth; } /** * Gets the {@link Coordinate} forming one end of the minimum diameter * * @return a coordinate forming one end of the minimum diameter */ Coordinate* MinimumDiameter::getWidthCoordinate() { computeMinimumDiameter(); return minWidthPt; } /** * Gets the segment forming the base of the minimum diameter * * @return the segment forming the base of the minimum diameter */ LineString* MinimumDiameter::getSupportingSegment() { computeMinimumDiameter(); const GeometryFactory *fact = inputGeom->getFactory(); CoordinateSequence* cl=fact->getCoordinateSequenceFactory()->create(NULL); cl->add(minBaseSeg->p0); cl->add(minBaseSeg->p1); return fact->createLineString(cl); } /** * Gets a LineString which is a minimum diameter * * @return a LineString which is a minimum diameter */ LineString* MinimumDiameter::getDiameter() { computeMinimumDiameter(); // return empty linestring if no minimum width calculated if (minWidthPt==NULL) return inputGeom->getFactory()->createLineString(NULL); Coordinate basePt; minBaseSeg->project(*minWidthPt, basePt); CoordinateSequence* cl=inputGeom->getFactory()->getCoordinateSequenceFactory()->create(NULL); cl->add(basePt); cl->add(*minWidthPt); return inputGeom->getFactory()->createLineString(cl); } /* private */ void MinimumDiameter::computeMinimumDiameter() { // check if computation is cached if (minWidthPt!=NULL) return; if (isConvex) computeWidthConvex(inputGeom); else { ConvexHull ch(inputGeom); Geometry* convexGeom=ch.getConvexHull(); computeWidthConvex(convexGeom); delete convexGeom; } } /* private */ void MinimumDiameter::computeWidthConvex(const Geometry *geom) { //System.out.println("Input = " + geom); CoordinateSequence* pts=NULL; if (typeid(*geom)==typeid(Polygon)) { const Polygon* p = dynamic_cast(geom); pts=p->getExteriorRing()->getCoordinates(); } else { pts=geom->getCoordinates(); } // special cases for lines or points or degenerate rings switch(pts->getSize()) { case 0: minWidth=0.0; minWidthPt=NULL; minBaseSeg=NULL; break; case 1: minWidth = 0.0; minWidthPt=new Coordinate(pts->getAt(0)); minBaseSeg->p0=pts->getAt(0); minBaseSeg->p1=pts->getAt(0); break; case 2: case 3: minWidth = 0.0; minWidthPt=new Coordinate(pts->getAt(0)); minBaseSeg->p0=pts->getAt(0); minBaseSeg->p1=pts->getAt(1); break; default: computeConvexRingMinDiameter(pts); } delete pts; } /** * Compute the width information for a ring of {@link Coordinate}s. * Leaves the width information in the instance variables. * * @param pts * @return */ void MinimumDiameter::computeConvexRingMinDiameter(const CoordinateSequence* pts) { minWidth=DoubleMax; unsigned int currMaxIndex=1; LineSegment seg; // compute the max distance for all segments in the ring, and pick the minimum const std::size_t npts=pts->getSize(); for (std::size_t i=1; igetAt(i-1); seg.p1=pts->getAt(i); currMaxIndex=findMaxPerpDistance(pts, &seg, currMaxIndex); } } unsigned int MinimumDiameter::findMaxPerpDistance(const CoordinateSequence *pts, LineSegment* seg, unsigned int startIndex) { double maxPerpDistance=seg->distancePerpendicular(pts->getAt(startIndex)); double nextPerpDistance = maxPerpDistance; unsigned int maxIndex = startIndex; unsigned int nextIndex = maxIndex; while (nextPerpDistance >= maxPerpDistance) { maxPerpDistance = nextPerpDistance; maxIndex=nextIndex; nextIndex=getNextIndex(pts, maxIndex); nextPerpDistance = seg->distancePerpendicular(pts->getAt(nextIndex)); } // found maximum width for this segment - update global min dist if appropriate if (maxPerpDistance < minWidth) { minPtIndex = maxIndex; minWidth = maxPerpDistance; delete minWidthPt; minWidthPt = new Coordinate(pts->getAt(minPtIndex)); delete minBaseSeg; minBaseSeg = new LineSegment(*seg); // System.out.println(minBaseSeg); // System.out.println(minWidth); } return maxIndex; } unsigned int MinimumDiameter::getNextIndex(const CoordinateSequence *pts, unsigned int index) { if (++index >= pts->getSize()) index = 0; return index; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/NotRepresentableException.cpp0000644000175000017500000000172312206417145022716 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include namespace geos { namespace algorithm { // geos.algorithm NotRepresentableException::NotRepresentableException() : GEOSException( "NotRepresentableException", "Projective point not representable on the Cartesian plane.") { } NotRepresentableException::NotRepresentableException(std::string msg) : GEOSException( "NotRepresentableException", msg) { } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/PointLocator.cpp0000644000175000017500000001104212206417145020173 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2011 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/PointLocator.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm int PointLocator::locate(const Coordinate& p, const Geometry *geom) { if (geom->isEmpty()) return Location::EXTERIOR; const LineString *ls_geom = dynamic_cast(geom); if (ls_geom) return locate(p, ls_geom); const Polygon *poly_geom = dynamic_cast(geom); if (poly_geom) return locate(p, poly_geom); isIn=false; numBoundaries=0; computeLocation(p,geom); if (geomgraph::GeometryGraph::isInBoundary(numBoundaries)) return Location::BOUNDARY; if (numBoundaries>0 || isIn) return Location::INTERIOR; return Location::EXTERIOR; } /* private */ void PointLocator::computeLocation(const Coordinate& p, const Geometry *geom) { if (const LineString *ls=dynamic_cast(geom)) { updateLocationInfo(locate(p, ls)); } else if (const Polygon *po=dynamic_cast(geom)) { updateLocationInfo(locate(p, po)); } else if (const MultiLineString *mls=dynamic_cast(geom)) { for(std::size_t i=0, n=mls->getNumGeometries(); i(mls->getGeometryN(i)); updateLocationInfo(locate(p,l)); } } else if (const MultiPolygon *mpo=dynamic_cast(geom)) { for(std::size_t i=0, n=mpo->getNumGeometries(); i(mpo->getGeometryN(i)); updateLocationInfo(locate(p, po)); } } else if (const GeometryCollection *col=dynamic_cast(geom)) { for (GeometryCollection::const_iterator it=col->begin(), endIt=col->end(); it != endIt; ++it) { const Geometry *g2=*it; assert (g2!=geom); // is this check really needed ? computeLocation(p, g2); } } } /* private */ void PointLocator::updateLocationInfo(int loc) { if (loc==Location::INTERIOR) isIn=true; if (loc==Location::BOUNDARY) ++numBoundaries; } /* private */ int PointLocator::locate(const Coordinate& p, const LineString *l) { const CoordinateSequence* pt=l->getCoordinatesRO(); if (! l->isClosed()) { if ((p==pt->getAt(0)) || (p==pt->getAt(pt->getSize()-1))) { return Location::BOUNDARY; } } if (CGAlgorithms::isOnLine(p,pt)) return Location::INTERIOR; return Location::EXTERIOR; } /* private */ int PointLocator::locateInPolygonRing(const Coordinate& p, const LinearRing *ring) { // can this test be folded into isPointInRing ? const CoordinateSequence *cl = ring->getCoordinatesRO(); if (CGAlgorithms::isOnLine(p,cl)) return Location::BOUNDARY; if (CGAlgorithms::isPointInRing(p,cl)) return Location::INTERIOR; return Location::EXTERIOR; } /* private */ int PointLocator::locate(const Coordinate& p,const Polygon *poly) { if (poly->isEmpty()) return Location::EXTERIOR; const LinearRing *shell=dynamic_cast(poly->getExteriorRing()); assert(shell); int shellLoc=locateInPolygonRing(p, shell); if (shellLoc==Location::EXTERIOR) return Location::EXTERIOR; if (shellLoc==Location::BOUNDARY) return Location::BOUNDARY; // now test if the point lies in or on the holes for(size_t i=0, n=poly->getNumInteriorRing(); i(poly->getInteriorRingN(i)); int holeLoc=locateInPolygonRing(p,hole); if (holeLoc==Location::INTERIOR) return Location::EXTERIOR; if (holeLoc==Location::BOUNDARY) return Location::BOUNDARY; } return Location::INTERIOR; } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/RayCrossingCounter.cpp0000644000175000017500000001043412206417145021365 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/RayCrossingCounter.java rev. 1.2 (JTS-1.9) * **********************************************************************/ #include #include #include #include #include #include namespace geos { namespace algorithm { // // private: // // // protected: // // // public: // /*static*/ int RayCrossingCounter::locatePointInRing(const geom::Coordinate& point, const geom::CoordinateSequence& ring) { RayCrossingCounter rcc(point); for (std::size_t i = 1, ni = ring.size(); i < ni; i++) { const geom::Coordinate & p1 = ring[ i ]; const geom::Coordinate & p2 = ring[ i - 1 ]; rcc.countSegment(p1, p2); if ( rcc.isOnSegment() ) return rcc.getLocation(); } return rcc.getLocation(); } /*static*/ int RayCrossingCounter::locatePointInRing(const geom::Coordinate& point, const std::vector& ring) { RayCrossingCounter rcc(point); for (std::size_t i = 1, ni = ring.size(); i < ni; i++) { const geom::Coordinate & p1 = *ring[ i ]; const geom::Coordinate & p2 = *ring[ i - 1 ]; rcc.countSegment(p1, p2); if ( rcc.isOnSegment() ) return rcc.getLocation(); } return rcc.getLocation(); } void RayCrossingCounter::countSegment(const geom::Coordinate& p1, const geom::Coordinate& p2) { // For each segment, check if it crosses // a horizontal ray running from the test point in // the positive x direction. // check if the segment is strictly to the left of the test point if (p1.x < point.x && p2.x < point.x) return; // check if the point is equal to the current ring vertex if (point.x == p2.x && point.y == p2.y) { isPointOnSegment = true; return; } // For horizontal segments, check if the point is on the segment. // Otherwise, horizontal segments are not counted. if (p1.y == point.y && p2.y == point.y) { double minx = p1.x; double maxx = p2.x; if (minx > maxx) { minx = p2.x; maxx = p1.x; } if (point.x >= minx && point.x <= maxx) isPointOnSegment = true; return; } // Evaluate all non-horizontal segments which cross a horizontal ray // to the right of the test pt. // To avoid double-counting shared vertices, we use the convention that // - an upward edge includes its starting endpoint, and excludes its // final endpoint // - a downward edge excludes its starting endpoint, and includes its // final endpoint if (((p1.y > point.y) && (p2.y <= point.y)) || ((p2.y > point.y) && (p1.y <= point.y)) ) { // translate the segment so that the test point lies // on the origin double x1 = p1.x - point.x; double y1 = p1.y - point.y; double x2 = p2.x - point.x; double y2 = p2.y - point.y; // The translated segment straddles the x-axis. // Compute the sign of the ordinate of intersection // with the x-axis. (y2 != y1, so denominator // will never be 0.0) // MD - faster & more robust computation? double xIntSign = RobustDeterminant::signOfDet2x2(x1, y1, x2, y2); if (xIntSign == 0.0) { isPointOnSegment = true; return; } if (y2 < y1) xIntSign = -xIntSign; // The segment crosses the ray if the sign is strictly positive. if (xIntSign > 0.0) crossingCount++; } } int RayCrossingCounter::getLocation() { if (isPointOnSegment) return geom::Location::BOUNDARY; // The point is in the interior of the ring if the number // of X-crossings is odd. if ((crossingCount % 2) == 1) return geom::Location::INTERIOR; return geom::Location::EXTERIOR; } bool RayCrossingCounter::isPointInPolygon() { return getLocation() != geom::Location::EXTERIOR; } } // geos::algorithm } // geos geos-3.4.2/src/algorithm/RobustDeterminant.cpp0000644000175000017500000001167512206417145021243 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (c) 1995 Olivier Devillers * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * RobustDeterminant implements an algorithm to compute the * sign of a 2x2 determinant for double precision values robustly. * It is a direct translation of code developed by Olivier Devillers. * * The original code carries the following copyright notice: * * Author : Olivier Devillers * Olivier.Devillers@sophia.inria.fr * http:/www.inria.fr:/prisme/personnel/devillers/anglais/determinant.html * * Olivier Devillers has allowed the code to be distributed under * the LGPL (2012-02-16) saying "It is ok for LGPL distribution." * ************************************************************************** * * Last port: algorithm/RobustDeterminant.java 1.15 (JTS-1.10) * **********************************************************************/ #include #include #include #include // for ISNAN, FINITE #ifdef _MSC_VER #pragma warning(disable : 4127) #endif using namespace std; // for isfinite.. namespace geos { namespace algorithm { // geos.algorithm int RobustDeterminant::signOfDet2x2(double x1,double y1,double x2,double y2) { // returns -1 if the determinant is negative, // returns 1 if the determinant is positive, // retunrs 0 if the determinant is null. int sign=1; double swap; double k; // Protect against non-finite numbers if ( ISNAN(x1) || ISNAN(y1) || ISNAN(x2) || ISNAN(y2) || !FINITE(x1) || !FINITE(y1) || !FINITE(x2) || !FINITE(y2) ) { throw util::IllegalArgumentException("RobustDeterminant encountered non-finite numbers "); } /* * testing null entries */ if ((x1==0.0) || (y2==0.0)) { if ((y1==0.0) || (x2==0.0)) { return 0; } else if (y1>0) { if (x2>0) { return -sign; } else { return sign; } } else { if (x2>0) { return sign; } else { return -sign; } } } if ((y1==0.0) || (x2==0.0)) { if (y2>0) { if (x1>0) { return sign; } else { return -sign; } } else { if (x1>0) { return -sign; } else { return sign; } } } /* * making y coordinates positive and permuting the entries * so that y2 is the biggest one */ if (0.0=y2) { x1=-x1; y1=-y1; x2=-x2; y2=-y2; } else { sign=-sign; swap=-x1; x1=-x2; x2=swap; swap=-y1; y1=-y2; y2=swap; } } } /* * making x coordinates positive */ /* * if |x2|<|x1| one can conclude */ if (0.0= x2) { sign=-sign; x1=-x1; x2=-x2; } else { return -sign; } } } /* * all entries strictly positive x1 <= x2 and y1 <= y2 */ while (true) { k=std::floor(x2/x1); x2=x2-k*x1; y2=y2-k*y1; /* * testing if R (new U2) is in U1 rectangle */ if (y2<0.0) { return -sign; } if (y2>y1) { return sign; } /* * finding R' */ if (x1>x2+x2) { if (y1y2+y2) { return -sign; } else { x2=x1-x2; y2=y1-y2; sign=-sign; } } if (y2==0.0) { if (x2==0.0) { return 0; } else { return -sign; } } if (x2==0.0) { return sign; } /* * exchange 1 and 2 role. */ k=std::floor(x1/x2); x1=x1-k*x2; y1=y1-k*y2; /* * testing if R (new U1) is in U2 rectangle */ if (y1<0.0) { return sign; } if (y1>y2) { return -sign; } /* * finding R' */ if (x2>x1+x1) { if (y2y1+y1) { return sign; } else { x1=x2-x1; y1=y2-y1; sign=-sign; } } if (y1==0.0) { if (x1==0.0) { return 0; } else { return sign; } } if (x1==0.0) { return -sign; } } } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/SIRtreePointInRing.cpp0000644000175000017500000000546712206417145021232 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::index::strtree; using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm SIRtreePointInRing::SIRtreePointInRing(LinearRing *newRing): PointInRing(), ring(newRing), sirTree(NULL), crossings(0) { buildIndex(); } void SIRtreePointInRing::buildIndex() { //Envelope *env=ring->getEnvelopeInternal(); sirTree=new SIRtree(); const CoordinateSequence *pts=ring->getCoordinatesRO(); const std::size_t npts=pts->getSize(); for(std::size_t i=1; igetAt(i-1)==pts->getAt(i)) continue; // Optimization suggested by MD. [Jon Aquino] LineSegment *seg=new LineSegment(pts->getAt(i-1), pts->getAt(i)); sirTree->insert(seg->p0.y, seg->p1.y, seg); } } bool SIRtreePointInRing::isInside(const Coordinate& pt) { crossings=0; // test all segments intersected by vertical ray at pt vector *segs=sirTree->query(pt.y); //System.out.println("query size=" + segs.size()); for(int i=0;i<(int)segs->size();i++) { LineSegment *seg=(LineSegment*) (*segs)[i]; testLineSegment(pt,seg); } /* * p is inside if number of crossings is odd. */ if ((crossings%2)==1) { return true; } return false; } void SIRtreePointInRing::testLineSegment(const Coordinate& p,LineSegment *seg) { double xInt; // x intersection of segment with ray double x1; // translated coordinates double y1; double x2; double y2; /* * Test if segment crosses ray from test point in positive x direction. */ Coordinate& p1=seg->p0; Coordinate& p2=seg->p1; x1=p1.x-p.x; y1=p1.y-p.y; x2=p2.x-p.x; y2=p2.y-p.y; if (((y1>0) && (y2<=0)) || ((y2>0) && (y1<=0))) { /* * segment straddles x axis,so compute intersection. */ xInt=RobustDeterminant::signOfDet2x2(x1,y1,x2,y2)/(y2-y1); //xsave=xInt; /* * crosses ray if strictly positive intersection. */ if (0.0 #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; } } namespace geos { namespace algorithm { // geos.algorithm SimplePointInRing::SimplePointInRing(geom::LinearRing *ring){ pts=ring->getCoordinatesRO(); } SimplePointInRing::~SimplePointInRing(){ } bool SimplePointInRing::isInside(const geom::Coordinate& pt){ return CGAlgorithms::isPointInRing(pt,pts); } } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/distance/0000755000175000017500000000000012206417232016643 5ustar frankiefrankiegeos-3.4.2/src/algorithm/distance/DiscreteHausdorffDistance.cpp0000644000175000017500000000564712206417145024445 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/distance/DiscreteHausdorffDistance.java 1.5 (JTS-1.10) * **********************************************************************/ #include #include //#include //#include //#include //#include //#include //#include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm namespace distance { // geos.algorithm.distance void DiscreteHausdorffDistance::MaxDensifiedByFractionDistanceFilter::filter_ro( const geom::CoordinateSequence& seq, size_t index) { /** * This logic also handles skipping Point geometries */ if (index == 0) return; const geom::Coordinate& p0 = seq.getAt(index - 1); const geom::Coordinate& p1 = seq.getAt(index); double delx = (p1.x - p0.x)/numSubSegs; double dely = (p1.y - p0.y)/numSubSegs; for (size_t i = 0; i < numSubSegs; ++i) { double x = p0.x + i*delx; double y = p0.y + i*dely; Coordinate pt(x, y); minPtDist.initialize(); DistanceToPoint::computeDistance(geom, pt, minPtDist); maxPtDist.setMaximum(minPtDist); } } /* static public */ double DiscreteHausdorffDistance::distance(const geom::Geometry& g0, const geom::Geometry& g1) { DiscreteHausdorffDistance dist(g0, g1); return dist.distance(); } /* static public */ double DiscreteHausdorffDistance::distance(const geom::Geometry& g0, const geom::Geometry& g1, double densifyFrac) { DiscreteHausdorffDistance dist(g0, g1); dist.setDensifyFraction(densifyFrac); return dist.distance(); } /* private */ void DiscreteHausdorffDistance::computeOrientedDistance( const geom::Geometry& discreteGeom, const geom::Geometry& geom, PointPairDistance& ptDist) { MaxPointDistanceFilter distFilter(geom); discreteGeom.apply_ro(&distFilter); ptDist.setMaximum(distFilter.getMaxPointDistance()); if (densifyFrac > 0) { MaxDensifiedByFractionDistanceFilter fracFilter(geom, densifyFrac); discreteGeom.apply_ro(fracFilter); ptDist.setMaximum(fracFilter.getMaxPointDistance()); } } } // namespace geos.algorithm.distance } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/algorithm/distance/DistanceToPoint.cpp0000644000175000017500000000674212206417145022432 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/distance/DistanceToPoint.java 1.1 (JTS-1.9) * **********************************************************************/ #include #include #include #include #include #include #include #include #include // for dynamic_cast #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm namespace distance { // geos.algorithm.distance /* public static */ void DistanceToPoint::computeDistance(const geom::Geometry& geom, const geom::Coordinate& pt, PointPairDistance& ptDist) { if ( const LineString* ls = dynamic_cast(&geom) ) { computeDistance(*ls, pt, ptDist); } else if ( const Polygon* pl = dynamic_cast(&geom) ) { computeDistance(*pl, pt, ptDist); } else if ( const GeometryCollection* gc = dynamic_cast(&geom) ) { for (size_t i = 0; i < gc->getNumGeometries(); i++) { const Geometry* g = gc->getGeometryN(i); computeDistance(*g, pt, ptDist); } } else { // assume geom is Point ptDist.setMinimum(*(geom.getCoordinate()), pt); } } /* public static */ void DistanceToPoint::computeDistance(const geom::LineString& line, const geom::Coordinate& pt, PointPairDistance& ptDist) { const CoordinateSequence* coordsRO = line.getCoordinatesRO(); const CoordinateSequence& coords = *coordsRO; size_t npts = coords.size(); if ( ! npts ) return; // can this ever be ? LineSegment tempSegment; Coordinate closestPt; Coordinate* segPts[2] = { &(tempSegment.p0), &(tempSegment.p1) }; tempSegment.p0 = coords.getAt(0); for (size_t i=1; i/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/algorithm/locate/0000755000175000017500000000000012206417232016320 5ustar frankiefrankiegeos-3.4.2/src/algorithm/locate/IndexedPointInAreaLocator.cpp0000644000175000017500000000704012206417145024026 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace geos { namespace algorithm { namespace locate { // // private: // IndexedPointInAreaLocator::IntervalIndexedGeometry::IntervalIndexedGeometry( const geom::Geometry & g) { index = new index::intervalrtree::SortedPackedIntervalRTree(); init( g); } IndexedPointInAreaLocator::IntervalIndexedGeometry::~IntervalIndexedGeometry( ) { delete index; for ( size_t i = 0, ni = allocatedSegments.size(); i < ni; ++i ) { delete allocatedSegments[i]; } } void IndexedPointInAreaLocator::IntervalIndexedGeometry::init( const geom::Geometry & g) { geom::LineString::ConstVect lines; geom::util::LinearComponentExtracter::getLines( g, lines); for ( size_t i = 0, ni = lines.size(); i < ni; i++ ) { const geom::LineString * line = lines[ i ]; geom::CoordinateSequence * pts = line->getCoordinates(); addLine( pts); delete pts; } } void IndexedPointInAreaLocator::IntervalIndexedGeometry::addLine( geom::CoordinateSequence * pts) { for ( size_t i = 1, ni = pts->size(); i < ni; i++ ) { geom::LineSegment * seg = new geom::LineSegment( (*pts)[ i - 1 ], (*pts)[ i ]); double const min = (std::min)( seg->p0.y, seg->p1.y); double const max = (std::max)( seg->p0.y, seg->p1.y); // NOTE: seg ownership still ours allocatedSegments.push_back(seg); index->insert( min, max, seg); } } void IndexedPointInAreaLocator::buildIndex( const geom::Geometry & g) { index = new IndexedPointInAreaLocator::IntervalIndexedGeometry( g); } // // protected: // // // public: // IndexedPointInAreaLocator::IndexedPointInAreaLocator( const geom::Geometry & g) : areaGeom( g) { if ( typeid( areaGeom) != typeid( geom::Polygon) && typeid( areaGeom) != typeid( geom::MultiPolygon) ) throw new util::IllegalArgumentException("Argument must be Polygonal"); //areaGeom = g; buildIndex( areaGeom); } IndexedPointInAreaLocator::~IndexedPointInAreaLocator() { delete index; } int IndexedPointInAreaLocator::locate( const geom::Coordinate * /*const*/ p) { algorithm::RayCrossingCounter rcc(*p); IndexedPointInAreaLocator::SegmentVisitor visitor( &rcc); index->query( p->y, p->y, &visitor); return rcc.getLocation(); } void IndexedPointInAreaLocator::SegmentVisitor::visitItem( void * item) { geom::LineSegment * seg = (geom::LineSegment *)item; counter->countSegment( (*seg)[ 0 ], (*seg)[ 1 ]); } void IndexedPointInAreaLocator::IntervalIndexedGeometry::query( double min, double max, index::ItemVisitor * visitor) { index->query( min, max, visitor); } } // geos::algorithm::locate } // geos::algorithm } // geos geos-3.4.2/src/algorithm/locate/Makefile.am0000644000175000017500000000045712206417145020365 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liblocation.la INCLUDES = -I$(top_srcdir)/include liblocation_la_SOURCES = \ IndexedPointInAreaLocator.cpp \ PointOnGeometryLocator.cpp \ SimplePointInAreaLocator.cpp liblocation_la_LIBADD = geos-3.4.2/src/algorithm/locate/Makefile.in0000644000175000017500000005335212206417163020400 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/algorithm/locate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblocation_la_DEPENDENCIES = am_liblocation_la_OBJECTS = IndexedPointInAreaLocator.lo \ PointOnGeometryLocator.lo SimplePointInAreaLocator.lo liblocation_la_OBJECTS = $(am_liblocation_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liblocation_la_SOURCES) DIST_SOURCES = $(liblocation_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liblocation.la INCLUDES = -I$(top_srcdir)/include liblocation_la_SOURCES = \ IndexedPointInAreaLocator.cpp \ PointOnGeometryLocator.cpp \ SimplePointInAreaLocator.cpp liblocation_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/algorithm/locate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/algorithm/locate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liblocation.la: $(liblocation_la_OBJECTS) $(liblocation_la_DEPENDENCIES) $(CXXLINK) $(liblocation_la_OBJECTS) $(liblocation_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexedPointInAreaLocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PointOnGeometryLocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimplePointInAreaLocator.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/algorithm/locate/PointOnGeometryLocator.cpp0000644000175000017500000000131212206417145023452 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace algorithm { // geos::algorithm namespace locate { // geos::algorithm::locate } // geos::algorithm::locate } // geos::algorithm } // geos geos-3.4.2/src/algorithm/locate/SimplePointInAreaLocator.cpp0000644000175000017500000000516712206417145023707 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace algorithm { // geos.algorithm namespace locate { // geos.algorithm /** * locate is the main location function. It handles both single-element * and multi-element Geometries. The algorithm for multi-element Geometries * is more complex, since it has to take into account the boundaryDetermination rule */ int SimplePointInAreaLocator::locate(const Coordinate& p, const Geometry *geom) { if (geom->isEmpty()) return Location::EXTERIOR; if (containsPoint(p,geom)) return Location::INTERIOR; return Location::EXTERIOR; } bool SimplePointInAreaLocator::containsPoint(const Coordinate& p,const Geometry *geom) { if (const Polygon *poly = dynamic_cast(geom)) { return containsPointInPolygon(p, poly); } if (const GeometryCollection *col = dynamic_cast(geom)) { for (GeometryCollection::const_iterator it=col->begin(), endIt=col->end(); it != endIt; ++it) { const Geometry *g2=*it; assert (g2!=geom); if (containsPoint(p,g2)) return true; } } return false; } bool SimplePointInAreaLocator::containsPointInPolygon(const Coordinate& p, const Polygon *poly) { if (poly->isEmpty()) return false; const LineString *shell=poly->getExteriorRing(); const CoordinateSequence *cl; cl = shell->getCoordinatesRO(); if (!CGAlgorithms::isPointInRing(p,cl)) { return false; } // now test if the point lies in or on the holes for(size_t i=0, n=poly->getNumInteriorRing(); igetInteriorRingN(i); cl = hole->getCoordinatesRO(); if (CGAlgorithms::isPointInRing(p,cl)) { return false; } } return true; } } // namespace geos.algorithm.locate } // namespace geos.algorithm } // namespace geos geos-3.4.2/src/dirlist.mk0000644000175000017500000000144612206417146015077 0ustar frankiefrankie# # List of directories use by makefile.vc to clean .obj files # GEOS_DIRLIST = \ algorithm \ algorithm\distance \ algorithm\locate \ examples \ geom \ geom\util \ geom\prep \ geomgraph \ geomgraph\index \ headers \ headers\geos \ index \ index\bintree \ index\chain \ index\intervalrtree \ index\quadtree \ index\strtree \ index\sweepline \ io \ linearref \ noding \ noding\snapround \ operation \ operation\buffer \ operation\distance \ operation\linemerge \ operation\overlay \ operation\overlay\snap \ operation\overlay\validate \ operation\polygonize \ operation\predicate \ operation\relate \ operation\sharedpaths \ operation\union \ operation\valid \ planargraph \ planargraph\algorithm \ precision \ simplify \ triangulate \ triangulate\quadedge \ util geos-3.4.2/src/geom/0000755000175000017500000000000012206417232014012 5ustar frankiefrankiegeos-3.4.2/src/geom/Coordinate.cpp0000644000175000017500000000235312206417145016613 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include // for ISNAN #include #include #include #ifndef GEOS_INLINE # include #endif using namespace std; namespace geos { namespace geom { // geos::geom Coordinate Coordinate::nullCoord=Coordinate(DoubleNotANumber,DoubleNotANumber,DoubleNotANumber); Coordinate& Coordinate::getNull() { return nullCoord; } string Coordinate::toString() const { ostringstream s; s << std::setprecision(17) << *this; return s.str(); } std::ostream& operator<< (std::ostream& os, const Coordinate& c) { if ( ISNAN(c.z) ) { os << c.x << " " << c.y; } else { os << c.x << " " << c.y << " " << c.z; } return os; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/CoordinateArraySequence.cpp0000644000175000017500000001370412206417145021305 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom CoordinateArraySequence::CoordinateArraySequence(): vect(new vector()), dimension(3) { } CoordinateArraySequence::CoordinateArraySequence(size_t n, size_t dimension_in ): vect(new vector(n)), dimension(dimension_in) { } CoordinateArraySequence::CoordinateArraySequence( vector *coords, size_t dimension_in ) : vect(coords), dimension(dimension_in) { if ( ! vect ) vect = new vector(); } CoordinateArraySequence::CoordinateArraySequence( const CoordinateArraySequence &c ) : CoordinateSequence(c), vect(new vector(*(c.vect))), dimension(c.getDimension()) { } CoordinateArraySequence::CoordinateArraySequence( const CoordinateSequence &c ) : CoordinateSequence(c), vect(new vector(c.size())), dimension(c.getDimension()) { for (size_t i = 0, n = vect->size(); i < n; ++i) { (*vect)[i] = c.getAt(i); } } CoordinateSequence * CoordinateArraySequence::clone() const { return new CoordinateArraySequence(*this); } void CoordinateArraySequence::setPoints(const vector &v) { vect->assign(v.begin(), v.end()); } const vector* CoordinateArraySequence::toVector() const { return vect; //new vector(vect->begin(),vect->end()); } std::size_t CoordinateArraySequence::getDimension() const { if( dimension != 0 ) return dimension; if( vect->size() == 0 ) return 3; if( ISNAN((*vect)[0].z) ) dimension = 2; else dimension = 3; return dimension; } void CoordinateArraySequence::toVector(vector& out) const { // TODO: can this be optimized ? out.insert(out.end(), vect->begin(), vect->end()); } void CoordinateArraySequence::add(const Coordinate& c) { vect->push_back(c); } void CoordinateArraySequence::add(const Coordinate& c, bool allowRepeated) { if (!allowRepeated && ! vect->empty() ) { const Coordinate& last=vect->back(); if (last.equals2D(c)) return; } vect->push_back(c); } /*public*/ void CoordinateArraySequence::add(size_t i, const Coordinate& coord, bool allowRepeated) { // don't add duplicate coordinates if (! allowRepeated) { size_t sz = size(); if (sz > 0) { if (i > 0) { const Coordinate& prev = getAt(i - 1); if (prev.equals2D(coord)) return; } if (i < sz) { const Coordinate& next = getAt(i); if (next.equals2D(coord)) return; } } } vect->insert(vect->begin()+i, coord); } size_t CoordinateArraySequence::getSize() const { return vect->size(); } const Coordinate & CoordinateArraySequence::getAt(size_t pos) const { return (*vect)[pos]; } void CoordinateArraySequence::getAt(size_t pos, Coordinate &c) const { c=(*vect)[pos]; } void CoordinateArraySequence::setAt(const Coordinate& c, size_t pos) { (*vect)[pos]=c; } void CoordinateArraySequence::deleteAt(size_t pos) { vect->erase(vect->begin()+pos); } string CoordinateArraySequence::toString() const { string result("("); if (getSize()>0) { //char buffer[100]; for (size_t i=0, n=vect->size(); isize(); i::iterator i=vect->begin(), e=vect->end(); i!=e; ++i) { filter->filter_rw(&(*i)); } dimension = 0; // re-check (see http://trac.osgeo.org/geos/ticket/435) } void CoordinateArraySequence::apply_ro(CoordinateFilter *filter) const { for (vector::const_iterator i=vect->begin(), e=vect->end(); i!=e; ++i) { filter->filter_ro(&(*i)); } } CoordinateSequence& CoordinateArraySequence::removeRepeatedPoints() { // We use == operator, which is 2D only vector::iterator new_end = \ std::unique(vect->begin(), vect->end()); vect->erase(new_end, vect->end()); return *this; } } // namespace geos::geom } //namespace geos geos-3.4.2/src/geom/CoordinateArraySequenceFactory.cpp0000644000175000017500000000177412206417145022641 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #ifndef GEOS_INLINE # include "geos/geom/CoordinateArraySequenceFactory.inl" #endif namespace geos { namespace geom { // geos::geom static CoordinateArraySequenceFactory defaultCoordinateSequenceFactory; const CoordinateSequenceFactory * CoordinateArraySequenceFactory::instance() { return &defaultCoordinateSequenceFactory; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/CoordinateSequence.cpp0000644000175000017500000001464712206417145020315 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include // FIXME: we should probably not be using CoordinateArraySequenceFactory #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom #if PROFILE static Profiler *profiler = Profiler::instance(); #endif bool CoordinateSequence::hasRepeatedPoints() const { const std::size_t size=getSize(); for(std::size_t i=1; igetSize() >= n ) { return c; } else { // FIXME: return NULL rather then empty coordinate array return CoordinateArraySequenceFactory::instance()->create(NULL); } } bool CoordinateSequence::hasRepeatedPoints(const CoordinateSequence *cl) { const std::size_t size=cl->getSize(); for(std::size_t i=1;igetAt(i-1)==cl->getAt(i)) { return true; } } return false; } const Coordinate* CoordinateSequence::minCoordinate() const { const Coordinate* minCoord=NULL; const std::size_t size=getSize(); for(std::size_t i=0; icompareTo(getAt(i))>0) { minCoord=&getAt(i); } } return minCoord; } const Coordinate* CoordinateSequence::minCoordinate(CoordinateSequence *cl) { const Coordinate* minCoord=NULL; const std::size_t size=cl->getSize(); for(std::size_t i=0;icompareTo(cl->getAt(i))>0) { minCoord=&(cl->getAt(i)); } } return minCoord; } int CoordinateSequence::indexOf(const Coordinate *coordinate, const CoordinateSequence *cl) { size_t size=cl->getSize(); for (size_t i=0; igetAt(i)) { return static_cast(i); // FIXME: what if we overflow the int ? } } return -1; } void CoordinateSequence::scroll(CoordinateSequence* cl, const Coordinate* firstCoordinate) { // FIXME: use a standard algorithm instead std::size_t i, j=0; std::size_t ind=indexOf(firstCoordinate,cl); if (ind<1) return; // not found or already first const std::size_t length=cl->getSize(); vector v(length); for (i=ind; igetAt(i); } for (i=0; igetAt(i); } cl->setPoints(v); } int CoordinateSequence::increasingDirection(const CoordinateSequence& pts) { size_t ptsize = pts.size(); for (size_t i=0, n=ptsize/2; i(cl->getSize()) - 1; int mid=last/2; for(int i=0;i<=mid;i++) { const Coordinate tmp=cl->getAt(i); cl->setAt(cl->getAt(last-i),i); cl->setAt(tmp,last-i); } } bool CoordinateSequence::equals(const CoordinateSequence *cl1, const CoordinateSequence *cl2) { // FIXME: use std::equals() if (cl1==cl2) return true; if (cl1==NULL||cl2==NULL) return false; size_t npts1=cl1->getSize(); if (npts1!=cl2->getSize()) return false; for (size_t i=0; igetAt(i)==cl2->getAt(i))) return false; } return true; } /*public*/ void CoordinateSequence::add(const vector* vc, bool allowRepeated) { assert(vc); for(size_t i=0; isize(); ++i) { add((*vc)[i], allowRepeated); } } /*public*/ void CoordinateSequence::add(const Coordinate& c, bool allowRepeated) { if (!allowRepeated) { std::size_t npts=getSize(); if (npts>=1) { const Coordinate& last=getAt(npts-1); if (last.equals2D(c)) return; } } add(c); } /* Here for backward compatibility */ //void //CoordinateSequence::add(CoordinateSequence *cl, bool allowRepeated, // bool direction) //{ // add(cl, allowRepeated, direction); //} /*public*/ void CoordinateSequence::add(const CoordinateSequence *cl, bool allowRepeated, bool direction) { // FIXME: don't rely on negative values for 'j' (the reverse case) const int npts = static_cast(cl->getSize()); if (direction) { for (int i=0; igetAt(i), allowRepeated); } } else { for (int j=npts-1; j>=0; j--) { add(cl->getAt(j), allowRepeated); } } } /*public static*/ CoordinateSequence* CoordinateSequence::removeRepeatedPoints(const CoordinateSequence *cl) { #if PROFILE static Profile *prof= profiler->get("CoordinateSequence::removeRepeatedPoints()"); prof->start(); #endif const vector *v=cl->toVector(); vector *nv=new vector; nv->reserve(v->size()); unique_copy(v->begin(), v->end(), back_inserter(*nv)); CoordinateSequence* ret=CoordinateArraySequenceFactory::instance()->create(nv); #if PROFILE prof->stop(); #endif return ret; } void CoordinateSequence::expandEnvelope(Envelope &env) const { const std::size_t size = getSize(); for (std::size_t i=0; i namespace geos { namespace geom { // geos::geom CoordinateSequenceFactory::~CoordinateSequenceFactory() {} } // namespace geos::geom } geos-3.4.2/src/geom/Dimension.cpp0000644000175000017500000000453512206417145016455 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom /** * Converts the dimension value to a dimension symbol, for example, TRUE => 'T'. * *@param dimensionValue a number that can be stored in the IntersectionMatrix. * Possible values are {TRUE, FALSE, DONTCARE, 0, 1, 2}. *@return a character for use in the string representation of * an IntersectionMatrix. Possible values are {T, F, * , 0, 1, 2}. */ char Dimension::toDimensionSymbol(int dimensionValue) { switch (dimensionValue) { case False: return 'F'; case True: return 'T'; case DONTCARE: return '*'; case P: return '0'; case L: return '1'; case A: return '2'; default: ostringstream s; s<<"Unknown dimension value: "<'*' => DONTCARE. * *@param dimensionSymbol a character for use in the string representation of * an IntersectionMatrix. Possible values are {T, F, * , 0, 1, 2}. *@return a number that can be stored in the IntersectionMatrix. * Possible values are {TRUE, FALSE, DONTCARE, 0, 1, 2}. */ int Dimension::toDimensionValue(char dimensionSymbol) { switch (dimensionSymbol) { case 'F': case 'f': return False; case 'T': case 't': return True; case '*': return DONTCARE; case '0': return P; case '1': return L; case '2': return A; default: ostringstream s; s<<"Unknown dimension symbol: "< #include #include #include #include #ifndef GEOS_INLINE # include #endif #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; namespace geos { namespace geom { // geos::geom /*public*/ bool Envelope::intersects(const Coordinate& p1, const Coordinate& p2, const Coordinate& q) { //OptimizeIt shows that Math#min and Math#max here are a bottleneck. //Replace with direct comparisons. [Jon Aquino] if (((q.x >= (p1.x < p2.x ? p1.x : p2.x)) && (q.x <= (p1.x > p2.x ? p1.x : p2.x))) && ((q.y >= (p1.y < p2.y ? p1.y : p2.y)) && (q.y <= (p1.y > p2.y ? p1.y : p2.y)))) { return true; } return false; } /*public*/ bool Envelope::intersects(const Coordinate& p1, const Coordinate& p2, const Coordinate& q1, const Coordinate& q2) { double minq=min(q1.x,q2.x); double maxq=max(q1.x,q2.x); double minp=min(p1.x,p2.x); double maxp=max(p1.x,p2.x); if(minp>maxq) return false; if(maxpmaxq) return false; if(maxp values = split(coordString, ":,"); // create a new envelopet init(::atof(values[0].c_str()), ::atof(values[1].c_str()), ::atof(values[2].c_str()), ::atof(values[3].c_str())); } /*public*/ Envelope::~Envelope(void) {} /*public*/ void Envelope::init() { setToNull(); } /*public*/ void Envelope::init(double x1, double x2, double y1, double y2) { if (x1 < x2) { minx = x1; maxx = x2; } else { minx = x2; maxx = x1; } if (y1 < y2) { miny = y1; maxy = y2; } else { miny = y2; maxy = y1; } } /*public*/ void Envelope::init(const Coordinate& p1, const Coordinate& p2) { init(p1.x, p2.x, p1.y, p2.y); } /*public*/ void Envelope::init(const Coordinate& p) { init(p.x, p.x, p.y, p.y); } #if 0 /** * Initialize an Envelope from an existing Envelope. * *@param env the Envelope to initialize from */ void Envelope::init(Envelope env) { init(env.minx, env.maxx, env.miny, env.maxy); } #endif // 0 /*public*/ void Envelope::setToNull() { minx=0; maxx=-1; miny=0; maxy=-1; } /*public*/ double Envelope::getWidth() const { if (isNull()) { return 0; } return maxx - minx; } /*public*/ double Envelope::getHeight() const { if (isNull()) { return 0; } return maxy - miny; } /*public*/ void Envelope::expandToInclude(const Coordinate& p) { expandToInclude(p.x, p.y); } /*public*/ void Envelope::expandToInclude(double x, double y) { if (isNull()) { minx = x; maxx = x; miny = y; maxy = y; } else { if (x < minx) { minx = x; } if (x > maxx) { maxx = x; } if (y < miny) { miny = y; } if (y > maxy) { maxy = y; } } } /*public*/ void Envelope::expandToInclude(const Envelope* other) { if (other->isNull()) { return; } if (isNull()) { minx = other->getMinX(); maxx = other->getMaxX(); miny = other->getMinY(); maxy = other->getMaxY(); } else { if (other->minx < minx) { minx = other->minx; } if (other->maxx > maxx) { maxx = other->maxx; } if (other->miny < miny) { miny = other->miny; } if (other->maxy > maxy) { maxy = other->maxy; } } } /*public*/ bool Envelope::covers(double x, double y) const { if (isNull()) return false; return x >= minx && x <= maxx && y >= miny && y <= maxy; } /*public*/ bool Envelope::covers(const Envelope& other) const { if (isNull() || other.isNull()) return false; return other.getMinX() >= minx && other.getMaxX() <= maxx && other.getMinY() >= miny && other.getMaxY() <= maxy; } /*public*/ bool Envelope::equals(const Envelope* other) const { if (isNull() || other->isNull()) { return false; } return other->getMinX() == minx && other->getMaxX() == maxx && other->getMinY() == miny && other->getMaxY() == maxy; } /*public*/ string Envelope::toString() const { ostringstream s; s<<"Env["<minx) dx=env->minx-maxx; if(minx>env->maxx) dx=minx-env->maxx; double dy=0.0; if(maxyminy) dy=env->miny-maxy; if(miny>env->maxy) dy=miny-env->maxy; // if either is zero, the envelopes overlap either vertically or horizontally if (dx==0.0) return dy; if (dy==0.0) return dx; return sqrt(dx*dx+dy*dy); } /*public*/ bool operator==(const Envelope& a, const Envelope& b) { if (a.isNull()) { return b.isNull(); } if (b.isNull()) { return a.isNull(); } return a.getMaxX() == b.getMaxX() && a.getMaxY() == b.getMaxY() && a.getMinX() == b.getMinX() && a.getMinY() == b.getMinY(); } /*public*/ int Envelope::hashCode() const { //Algorithm from Effective Java by Joshua Bloch [Jon Aquino] int result = 17; result = 37 * result + Coordinate::hashCode(minx); result = 37 * result + Coordinate::hashCode(maxx); result = 37 * result + Coordinate::hashCode(miny); result = 37 * result + Coordinate::hashCode(maxy); return result; } /*public static*/ vector Envelope::split(const string &str, const string &delimiters) { vector tokens; // Find first "non-delimiter". string::size_type lastPos = 0; string::size_type pos = str.find_first_of(delimiters, lastPos); while (string::npos != pos || string::npos != lastPos) { // Found a token, add it to the vector. tokens.push_back(str.substr(lastPos, pos - lastPos)); // Skip delimiters. Note the "not_of" lastPos = str.find_first_not_of(delimiters, pos); // Find next "non-delimiter" pos = str.find_first_of(delimiters, lastPos); } return tokens; } /*public*/ bool Envelope::centre(Coordinate& centre) const { if (isNull()) return false; centre.x=(getMinX() + getMaxX()) / 2.0; centre.y=(getMinY() + getMaxY()) / 2.0; return true; } /*public*/ bool Envelope::intersection(const Envelope& env, Envelope& result) const { if (isNull() || env.isNull() || ! intersects(env)) return false; double intMinX = minx > env.minx ? minx : env.minx; double intMinY = miny > env.miny ? miny : env.miny; double intMaxX = maxx < env.maxx ? maxx : env.maxx; double intMaxY = maxy < env.maxy ? maxy : env.maxy; result.init(intMinX, intMaxX, intMinY, intMaxY); return true; } /*public*/ void Envelope::translate(double transX, double transY) { if (isNull()) return; init(getMinX() + transX, getMaxX() + transX, getMinY() + transY, getMaxY() + transY); } /*public*/ void Envelope::expandBy(double deltaX, double deltaY) { if (isNull()) return; minx -= deltaX; maxx += deltaX; miny -= deltaY; maxy += deltaY; // check for envelope disappearing if (minx > maxx || miny > maxy) setToNull(); } /*public*/ Envelope& Envelope::operator=(const Envelope& e) { #if GEOS_DEBUG std::cerr<<"Envelope assignment"< * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Geometry.java rev. 1.112 * **********************************************************************/ #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 #ifdef _MSC_VER # ifdef MSVC_USE_VLD # include # endif #endif #define SHORTCIRCUIT_PREDICATES 1 using namespace std; using namespace geos::algorithm; using namespace geos::operation::valid; using namespace geos::operation::relate; using namespace geos::operation::buffer; using namespace geos::operation::overlay; using namespace geos::operation::overlay::snap; using namespace geos::operation::distance; using namespace geos::operation; namespace geos { namespace geom { // geos::geom /* * Return current GEOS version */ string geosversion() { return GEOS_VERSION; } /* * Return the version of JTS this GEOS * release has been ported from. */ string jtsport() { return GEOS_JTS_PORT; } Geometry::GeometryChangedFilter Geometry::geometryChangedFilter; Geometry::Geometry(const GeometryFactory *newFactory) : envelope(NULL), factory(newFactory), userData(NULL) { if ( factory == NULL ) { factory = GeometryFactory::getDefaultInstance(); } SRID=factory->getSRID(); } Geometry::Geometry(const Geometry &geom) : SRID(geom.getSRID()), factory(geom.factory), userData(NULL) { if ( geom.envelope.get() ) { envelope.reset(new Envelope(*(geom.envelope))); } //factory=geom.factory; //envelope(new Envelope(*(geom.envelope.get()))); //SRID=geom.getSRID(); //userData=NULL; } bool Geometry::hasNonEmptyElements(const vector* geometries) { for (size_t i=0; isize(); i++) { if (!(*geometries)[i]->isEmpty()) { return true; } } return false; } bool Geometry::hasNullElements(const CoordinateSequence* list) { size_t npts=list->getSize(); for (size_t i=0; igetAt(i).isNull()) { return true; } } return false; } bool Geometry::hasNullElements(const vector* lrs) { size_t n=lrs->size(); for (size_t i=0; igetEnvelopeInternal(); double envDist=env0->distance(env1); //delete env0; //delete env1; if (envDist>cDistance) { return false; } // NOTE: this could be implemented more efficiently double geomDist=distance(geom); if (geomDist>cDistance) { return false; } return true; } /*public*/ Point* Geometry::getCentroid() const { Coordinate centPt; if ( ! getCentroid(centPt) ) return NULL; // We don't use createPointFromInternalCoord here // because ::getCentroid() takes care about rounding Point *pt=getFactory()->createPoint(centPt); return pt; } /*public*/ bool Geometry::getCentroid(Coordinate& ret) const { if ( isEmpty() ) { return false; } if ( ! Centroid::getCentroid(*this, ret) ) return false; getPrecisionModel()->makePrecise(ret); // not in JTS return true; } Point* Geometry::getInteriorPoint() const { Coordinate interiorPt; int dim=getDimension(); if (dim==0) { InteriorPointPoint intPt(this); if ( ! intPt.getInteriorPoint(interiorPt) ) return NULL; } else if (dim==1) { InteriorPointLine intPt(this); if ( ! intPt.getInteriorPoint(interiorPt) ) return NULL; } else { InteriorPointArea intPt(this); if ( ! intPt.getInteriorPoint(interiorPt) ) return NULL; } Point *p=getFactory()->createPointFromInternalCoord(&interiorPt, this); return p; } /** * Notifies this Geometry that its Coordinates have been changed by an external * party (using a CoordinateFilter, for example). The Geometry will flush * and/or update any information it has cached (such as its {@link Envelope} ). */ void Geometry::geometryChanged() { apply_rw(&geometryChangedFilter); } /** * Notifies this Geometry that its Coordinates have been changed by an external * party. When geometryChanged is called, this method will be called for * this Geometry and its component Geometries. * @see apply(GeometryComponentFilter *) */ void Geometry::geometryChangedAction() { //delete envelope; envelope.reset(NULL); } bool Geometry::isValid() const { return IsValidOp(this).isValid(); } Geometry* Geometry::getEnvelope() const { return getFactory()->toGeometry(getEnvelopeInternal()); } const Envelope * Geometry::getEnvelopeInternal() const { if (!envelope.get()) { envelope = computeEnvelopeInternal(); } return envelope.get(); } bool Geometry::disjoint(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->intersects(g->getEnvelopeInternal())) return true; #endif auto_ptr im ( relate(g) ); bool res=im->isDisjoint(); return res; } bool Geometry::touches(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->intersects(g->getEnvelopeInternal())) return false; #endif auto_ptr im ( relate(g) ); bool res=im->isTouches(getDimension(), g->getDimension()); return res; } bool Geometry::intersects(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->intersects(g->getEnvelopeInternal())) return false; #endif /** * TODO: (MD) Add optimizations: * * - for P-A case: * If P is in env(A), test for point-in-poly * * - for A-A case: * If env(A1).overlaps(env(A2)) * test for overlaps via point-in-poly first (both ways) * Possibly optimize selection of point to test by finding point of A1 * closest to centre of env(A2). * (Is there a test where we shouldn't bother - e.g. if env A * is much smaller than env B, maybe there's no point in testing * pt(B) in env(A)? */ // optimization for rectangle arguments if (isRectangle()) { const Polygon* p = dynamic_cast(this); return predicate::RectangleIntersects::intersects(*p, *g); } if (g->isRectangle()) { const Polygon* p = dynamic_cast(g); return predicate::RectangleIntersects::intersects(*p, *this); } auto_ptr im ( relate(g) ); bool res=im->isIntersects(); return res; } /*public*/ bool Geometry::covers(const Geometry* g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->covers(g->getEnvelopeInternal())) return false; #endif // optimization for rectangle arguments if (isRectangle()) { // since we have already tested that the test envelope // is covered return true; } auto_ptr im(relate(g)); return im->isCovers(); } bool Geometry::crosses(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->intersects(g->getEnvelopeInternal())) return false; #endif auto_ptr im ( relate(g) ); bool res=im->isCrosses(getDimension(), g->getDimension()); return res; } bool Geometry::within(const Geometry *g) const { return g->contains(this); } bool Geometry::contains(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->contains(g->getEnvelopeInternal())) return false; #endif // optimization for rectangle arguments if (isRectangle()) { const Polygon* p = dynamic_cast(this); return predicate::RectangleContains::contains(*p, *g); } // Incorrect: contains is not commutative //if (g->isRectangle()) { // return predicate::RectangleContains::contains((const Polygon&)*g, *this); //} auto_ptr im ( relate(g) ); bool res=im->isContains(); return res; } bool Geometry::overlaps(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->intersects(g->getEnvelopeInternal())) return false; #endif auto_ptr im ( relate(g) ); bool res=im->isOverlaps(getDimension(), g->getDimension()); return res; } bool Geometry::relate(const Geometry *g, const string &intersectionPattern) const { auto_ptr im ( relate(g) ); bool res=im->matches(intersectionPattern); return res; } bool Geometry::equals(const Geometry *g) const { #ifdef SHORTCIRCUIT_PREDICATES // short-circuit test if (! getEnvelopeInternal()->equals(g->getEnvelopeInternal())) return false; #endif auto_ptr im ( relate(g) ); bool res=im->isEquals(getDimension(), g->getDimension()); return res; } IntersectionMatrix* Geometry::relate(const Geometry *other) const //throw(IllegalArgumentException *) { return RelateOp::relate(this, other); } string Geometry::toString() const { return toText(); } std::ostream& operator<< (std::ostream& os, const Geometry& geom) { io::WKBWriter writer; writer.writeHEX(geom, os); return os; } string Geometry::toText() const { io::WKTWriter writer; return writer.write(this); } Geometry* Geometry::buffer(double distance) const { return BufferOp::bufferOp(this, distance); } Geometry* Geometry::buffer(double distance,int quadrantSegments) const { return BufferOp::bufferOp(this, distance, quadrantSegments); } Geometry* Geometry::buffer(double distance, int quadrantSegments, int endCapStyle) const { return BufferOp::bufferOp(this, distance, quadrantSegments, endCapStyle); } Geometry* Geometry::convexHull() const { return ConvexHull(this).getConvexHull(); } Geometry* Geometry::intersection(const Geometry *other) const { /** * TODO: MD - add optimization for P-A case using Point-In-Polygon */ // special case: if one input is empty ==> empty if (isEmpty() || other->isEmpty() ) { return getFactory()->createGeometryCollection(); } return BinaryOp(this, other, overlayOp(OverlayOp::opINTERSECTION)).release(); } Geometry* Geometry::Union(const Geometry *other) const //throw(TopologyException *, IllegalArgumentException *) { // special case: if one input is empty ==> other input if ( isEmpty() ) return other->clone(); if ( other->isEmpty() ) return clone(); Geometry *out = NULL; #ifdef SHORTCIRCUIT_PREDICATES // if envelopes are disjoint return a MULTI geom or // a geometrycollection if ( ! getEnvelopeInternal()->intersects(other->getEnvelopeInternal()) ) { //cerr<<"SHORTCIRCUITED-UNION engaged"<getNumGeometries(); // Allocated for ownership transfer vector *v = new vector(); v->reserve(ngeomsThis+ngeomsOther); if ( NULL != (coll = dynamic_cast(this)) ) { for (size_t i=0; ipush_back(coll->getGeometryN(i)->clone()); } else { v->push_back(this->clone()); } if ( NULL != (coll = dynamic_cast(other)) ) { for (size_t i=0; ipush_back(coll->getGeometryN(i)->clone()); } else { v->push_back(other->clone()); } out = factory->buildGeometry(v); return out; } #endif return BinaryOp(this, other, overlayOp(OverlayOp::opUNION)).release(); } /* public */ Geometry::AutoPtr Geometry::Union() const { using geos::operation::geounion::UnaryUnionOp; return UnaryUnionOp::Union(*this); } Geometry* Geometry::difference(const Geometry *other) const //throw(IllegalArgumentException *) { // special case: if A.isEmpty ==> empty; if B.isEmpty ==> A if (isEmpty()) return getFactory()->createGeometryCollection(); if (other->isEmpty()) return clone(); return BinaryOp(this, other, overlayOp(OverlayOp::opDIFFERENCE)).release(); } Geometry* Geometry::symDifference(const Geometry *other) const { // special case: if either input is empty ==> other input if ( isEmpty() ) return other->clone(); if ( other->isEmpty() ) return clone(); // if envelopes are disjoint return a MULTI geom or // a geometrycollection if ( ! getEnvelopeInternal()->intersects(other->getEnvelopeInternal()) ) { const GeometryCollection *coll; size_t ngeomsThis = getNumGeometries(); size_t ngeomsOther = other->getNumGeometries(); // Allocated for ownership transfer vector *v = new vector(); v->reserve(ngeomsThis+ngeomsOther); if ( NULL != (coll = dynamic_cast(this)) ) { for (size_t i=0; ipush_back(coll->getGeometryN(i)->clone()); } else { v->push_back(this->clone()); } if ( NULL != (coll = dynamic_cast(other)) ) { for (size_t i=0; ipush_back(coll->getGeometryN(i)->clone()); } else { v->push_back(other->clone()); } return factory->buildGeometry(v); } return BinaryOp(this, other, overlayOp(OverlayOp::opSYMDIFFERENCE)).release(); } int Geometry::compareTo(const Geometry *geom) const { // compare to self if ( this == geom ) return 0; if (getClassSortIndex()!=geom->getClassSortIndex()) { return getClassSortIndex()-geom->getClassSortIndex(); } if (isEmpty() && geom->isEmpty()) { return 0; } if (isEmpty()) { return -1; } if (geom->isEmpty()) { return 1; } return compareToSameClass(geom); } bool Geometry::isEquivalentClass(const Geometry *other) const { if (typeid(*this)==typeid(*other)) return true; else return false; } void Geometry::checkNotGeometryCollection(const Geometry *g) //throw(IllegalArgumentException *) { if ((typeid(*g)==typeid(GeometryCollection))) { throw geos::util::IllegalArgumentException("This method does not support GeometryCollection arguments\n"); } } int Geometry::getClassSortIndex() const { //const type_info &t=typeid(*this); if ( typeid(*this) == typeid(Point) ) return 0; else if ( typeid(*this) == typeid(MultiPoint) ) return 1; else if ( typeid(*this) == typeid(LineString) ) return 2; else if ( typeid(*this) == typeid(LinearRing) ) return 3; else if ( typeid(*this) == typeid(MultiLineString) ) return 4; else if ( typeid(*this) == typeid(Polygon) ) return 5; else if ( typeid(*this) == typeid(MultiPolygon) ) return 6; else { assert(typeid(*this) == typeid(GeometryCollection)); // unsupported class return 7; } #if 0 string str="Class not supported: "; str.append(typeid(*this).name()); str.append(""); Assert::shouldNeverReachHere(str); return -1; #endif } int Geometry::compare(vector a, vector b) const { size_t i=0; size_t j=0; while (i a, vector b) const { size_t i=0; size_t j=0; while (icompareTo(bGeom); if (comparison!=0) { return comparison; } i++; j++; } if (iGeometry. * Areal Geometries have a non-zero area. * They override this function to compute the area. * Others return 0.0 * * @return the area of the Geometry */ double Geometry::getArea() const { return 0.0; } /** * Returns the length of this Geometry. * Linear geometries return their length. * Areal geometries return their perimeter. * They override this function to compute the area. * Others return 0.0 * * @return the length of the Geometry */ double Geometry::getLength() const { return 0.0; } Geometry::~Geometry() { //delete envelope; } bool GeometryGreaterThen::operator()(const Geometry *first, const Geometry *second) { if (first->compareTo(second)>0) return true; else return false; } bool Geometry::equal(const Coordinate& a, const Coordinate& b, double tolerance) const { if (tolerance==0) { return a == b; // 2D only !!! } //double dist=a.distance(b); return a.distance(b)<=tolerance; } void Geometry::apply_ro(GeometryFilter *filter) const { filter->filter_ro(this); } void Geometry::apply_rw(GeometryFilter *filter) { filter->filter_rw(this); } void Geometry::apply_ro(GeometryComponentFilter *filter) const { filter->filter_ro(this); } void Geometry::apply_rw(GeometryComponentFilter *filter) { filter->filter_rw(this); } bool Geometry::isSimple() const { checkNotGeometryCollection(this); operation::IsSimpleOp op(*this); return op.isSimple(); } /* public */ const PrecisionModel* Geometry::getPrecisionModel() const { return factory->getPrecisionModel(); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/GeometryCollection.cpp0000644000175000017500000002003612206417145020331 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryCollection.java rev. 1.41 * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include #endif #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom /*protected*/ GeometryCollection::GeometryCollection(const GeometryCollection &gc) : Geometry(gc) { size_t ngeoms=gc.geometries->size(); geometries=new vector(ngeoms); for(size_t i=0; iclone(); // Drop SRID from inner geoms (*geometries)[i]->setSRID(0); } } /*protected*/ GeometryCollection::GeometryCollection(vector *newGeoms, const GeometryFactory *factory): Geometry(factory) { if (newGeoms==NULL) { geometries=new vector(); return; } if (hasNullElements(newGeoms)) { throw util::IllegalArgumentException("geometries must not contain null elements\n"); return; } geometries=newGeoms; // Drop SRID from inner geoms size_t ngeoms=geometries->size(); for(size_t i=0; isetSRID(0); } } /* * Collects all coordinates of all subgeometries into a CoordinateSequence. * * Returns a newly the collected coordinates * */ CoordinateSequence * GeometryCollection::getCoordinates() const { vector *coordinates = new vector(getNumPoints()); int k = -1; for (size_t i=0; isize(); ++i) { CoordinateSequence* childCoordinates=(*geometries)[i]->getCoordinates(); size_t npts=childCoordinates->getSize(); for (size_t j=0; jgetAt(j); } delete childCoordinates; } return CoordinateArraySequenceFactory::instance()->create(coordinates); } bool GeometryCollection::isEmpty() const { for (size_t i=0; isize(); ++i) { if (!(*geometries)[i]->isEmpty()) { return false; } } return true; } Dimension::DimensionType GeometryCollection::getDimension() const { Dimension::DimensionType dimension=Dimension::False; for (size_t i=0, n=geometries->size(); igetDimension()); } return dimension; } int GeometryCollection::getBoundaryDimension() const { int dimension=Dimension::False; for(size_t i=0; isize(); ++i) { dimension=max(dimension,(*geometries)[i]->getBoundaryDimension()); } return dimension; } int GeometryCollection::getCoordinateDimension() const { int dimension=2; for (size_t i=0, n=geometries->size(); igetCoordinateDimension()); } return dimension; } size_t GeometryCollection::getNumGeometries() const { return geometries->size(); } const Geometry* GeometryCollection::getGeometryN(size_t n) const { return (*geometries)[n]; } size_t GeometryCollection::getNumPoints() const { size_t numPoints = 0; for (size_t i=0, n=geometries->size(); igetNumPoints(); } return numPoints; } string GeometryCollection::getGeometryType() const { return "GeometryCollection"; } Geometry* GeometryCollection::getBoundary() const { throw util::IllegalArgumentException("Operation not supported by GeometryCollection\n"); } bool GeometryCollection::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) return false; const GeometryCollection* otherCollection=dynamic_cast(other); if ( ! otherCollection ) return false; if (geometries->size()!=otherCollection->geometries->size()) { return false; } for (size_t i=0; isize(); ++i) { if (!((*geometries)[i]->equalsExact((*(otherCollection->geometries))[i],tolerance))) { return false; } } return true; } void GeometryCollection::apply_rw(const CoordinateFilter *filter) { for (size_t i=0; isize(); ++i) { (*geometries)[i]->apply_rw(filter); } } void GeometryCollection::apply_ro(CoordinateFilter *filter) const { for (size_t i=0; isize(); ++i) { (*geometries)[i]->apply_ro(filter); } } void GeometryCollection::apply_ro(GeometryFilter *filter) const { filter->filter_ro(this); for(size_t i=0; isize(); ++i) { (*geometries)[i]->apply_ro(filter); } } void GeometryCollection::apply_rw(GeometryFilter *filter) { filter->filter_rw(this); for(size_t i=0; isize(); ++i) { (*geometries)[i]->apply_rw(filter); } } void GeometryCollection::normalize() { for (size_t i=0; isize(); ++i) { (*geometries)[i]->normalize(); } sort(geometries->begin(), geometries->end(), GeometryGreaterThen()); } Envelope::AutoPtr GeometryCollection::computeEnvelopeInternal() const { Envelope::AutoPtr envelope(new Envelope()); for (size_t i=0; isize(); i++) { const Envelope *env=(*geometries)[i]->getEnvelopeInternal(); envelope->expandToInclude(env); } return envelope; } int GeometryCollection::compareToSameClass(const Geometry *g) const { const GeometryCollection* gc = dynamic_cast(g); return compare(*geometries, *(gc->geometries)); } const Coordinate* GeometryCollection::getCoordinate() const { // should use auto_ptr here or return NULL or throw an exception ! // --strk; if (isEmpty()) return new Coordinate(); return (*geometries)[0]->getCoordinate(); } /** * @return the area of this collection */ double GeometryCollection::getArea() const { double area=0.0; for(size_t i=0; isize(); ++i) { area+=(*geometries)[i]->getArea(); } return area; } /** * @return the total length of this collection */ double GeometryCollection::getLength() const { double sum=0.0; for(size_t i=0; isize(); ++i) { sum+=(*geometries)[i]->getLength(); } return sum; } void GeometryCollection::apply_rw(GeometryComponentFilter *filter) { filter->filter_rw(this); for(size_t i=0; isize(); ++i) { (*geometries)[i]->apply_rw(filter); } } void GeometryCollection::apply_ro(GeometryComponentFilter *filter) const { filter->filter_ro(this); for(size_t i=0; isize(); ++i) { (*geometries)[i]->apply_ro(filter); } } void GeometryCollection::apply_rw(CoordinateSequenceFilter& filter) { size_t ngeoms = geometries->size(); if (ngeoms == 0 ) return; for (size_t i = 0; i < ngeoms; ++i) { (*geometries)[i]->apply_rw(filter); if (filter.isDone()) break; } if (filter.isGeometryChanged()) geometryChanged(); } void GeometryCollection::apply_ro(CoordinateSequenceFilter& filter) const { size_t ngeoms = geometries->size(); if (ngeoms == 0 ) return; for (size_t i = 0; i < ngeoms; ++i) { (*geometries)[i]->apply_ro(filter); if (filter.isDone()) break; } assert(!filter.isGeometryChanged()); // read-only filter... //if (filter.isGeometryChanged()) geometryChanged(); } GeometryCollection::~GeometryCollection() { for(size_t i=0; isize(); ++i) { delete (*geometries)[i]; } delete geometries; } GeometryTypeId GeometryCollection::getGeometryTypeId() const { return GEOS_GEOMETRYCOLLECTION; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/GeometryComponentFilter.cpp0000644000175000017500000000175212206417145021352 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include namespace geos { namespace geom { // geos::geom void GeometryComponentFilter::filter_rw(Geometry *geom) { ::geos::ignore_unused_variable_warning(geom); assert(0); } void GeometryComponentFilter::filter_ro(const Geometry *geom) { ::geos::ignore_unused_variable_warning(geom); assert(0); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/GeometryFactory.cpp0000644000175000017500000004170412206417145017652 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/GeometryFactory.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif #ifndef GEOS_INLINE # include #endif using namespace std; namespace geos { namespace geom { // geos::geom namespace { class gfCoordinateOperation: public util::CoordinateOperation { using CoordinateOperation::edit; const CoordinateSequenceFactory* _gsf; public: gfCoordinateOperation(const CoordinateSequenceFactory* gsf) : _gsf(gsf) {} CoordinateSequence* edit( const CoordinateSequence *coordSeq, const Geometry * ) { return _gsf->create(*coordSeq); } }; } // anonymous namespace /*public*/ GeometryFactory::GeometryFactory() : precisionModel(new PrecisionModel()), SRID(0), coordinateListFactory(CoordinateArraySequenceFactory::instance()) { #if GEOS_DEBUG std::cerr << "GEOS_DEBUG: GeometryFactory["<getPrecisionModel()->makePrecise(&newcoord); return exemplar->getFactory()->createPoint(newcoord); } /*public*/ Geometry* GeometryFactory::toGeometry(const Envelope* envelope) const { Coordinate coord; if (envelope->isNull()) { return createPoint(); } if (envelope->getMinX()==envelope->getMaxX() && envelope->getMinY()==envelope->getMaxY()) { coord.x = envelope->getMinX(); coord.y = envelope->getMinY(); return createPoint(coord); } CoordinateSequence *cl=CoordinateArraySequenceFactory::instance()-> create((size_t) 0, 2); coord.x = envelope->getMinX(); coord.y = envelope->getMinY(); cl->add(coord); coord.x = envelope->getMaxX(); coord.y = envelope->getMinY(); cl->add(coord); coord.x = envelope->getMaxX(); coord.y = envelope->getMaxY(); cl->add(coord); coord.x = envelope->getMinX(); coord.y = envelope->getMaxY(); cl->add(coord); coord.x = envelope->getMinX(); coord.y = envelope->getMinY(); cl->add(coord); Polygon *p = createPolygon(createLinearRing(cl), NULL); return p; } /*public*/ const PrecisionModel* GeometryFactory::getPrecisionModel() const { return precisionModel; } /*public*/ Point* GeometryFactory::createPoint() const { return new Point(NULL, this); } /*public*/ Point* GeometryFactory::createPoint(const Coordinate& coordinate) const { if (coordinate.isNull()) { return createPoint(); } else { std::size_t dim = ISNAN(coordinate.z) ? 2 : 3; CoordinateSequence *cl = coordinateListFactory->create(new vector(1, coordinate), dim); //cl->setAt(coordinate, 0); Point *ret = createPoint(cl); return ret; } } /*public*/ Point* GeometryFactory::createPoint(CoordinateSequence *newCoords) const { return new Point(newCoords,this); } /*public*/ Point* GeometryFactory::createPoint(const CoordinateSequence &fromCoords) const { CoordinateSequence *newCoords = fromCoords.clone(); Point *g = NULL; try { g = new Point(newCoords,this); } catch (...) { delete newCoords; throw; } return g; } /*public*/ MultiLineString* GeometryFactory::createMultiLineString() const { return new MultiLineString(NULL,this); } /*public*/ MultiLineString* GeometryFactory::createMultiLineString(vector *newLines) const { return new MultiLineString(newLines,this); } /*public*/ MultiLineString* GeometryFactory::createMultiLineString(const vector &fromLines) const { vector*newGeoms = new vector(fromLines.size()); for (size_t i=0; i(fromLines[i]); if ( ! line ) throw geos::util::IllegalArgumentException("createMultiLineString called with a vector containing non-LineStrings"); (*newGeoms)[i] = new LineString(*line); } MultiLineString *g = NULL; try { g = new MultiLineString(newGeoms,this); } catch (...) { for (size_t i=0; isize(); i++) { delete (*newGeoms)[i]; } delete newGeoms; throw; } return g; } /*public*/ GeometryCollection* GeometryFactory::createGeometryCollection() const { return new GeometryCollection(NULL,this); } /*public*/ Geometry* GeometryFactory::createEmptyGeometry() const { return new GeometryCollection(NULL,this); } /*public*/ GeometryCollection* GeometryFactory::createGeometryCollection(vector *newGeoms) const { return new GeometryCollection(newGeoms,this); } /*public*/ GeometryCollection* GeometryFactory::createGeometryCollection(const vector &fromGeoms) const { vector *newGeoms = new vector(fromGeoms.size()); for (size_t i=0; iclone(); } GeometryCollection *g = NULL; try { g = new GeometryCollection(newGeoms,this); } catch (...) { for (size_t i=0; isize(); i++) { delete (*newGeoms)[i]; } delete newGeoms; throw; } return g; } /*public*/ MultiPolygon* GeometryFactory::createMultiPolygon() const { return new MultiPolygon(NULL,this); } /*public*/ MultiPolygon* GeometryFactory::createMultiPolygon(vector *newPolys) const { return new MultiPolygon(newPolys,this); } /*public*/ MultiPolygon* GeometryFactory::createMultiPolygon(const vector &fromPolys) const { vector*newGeoms = new vector(fromPolys.size()); for (size_t i=0; iclone(); } MultiPolygon *g = NULL; try { g = new MultiPolygon(newGeoms,this); } catch (...) { for (size_t i=0; isize(); i++) { delete (*newGeoms)[i]; } delete newGeoms; throw; } return g; } /*public*/ LinearRing* GeometryFactory::createLinearRing() const { return new LinearRing(NULL,this); } /*public*/ LinearRing* GeometryFactory::createLinearRing(CoordinateSequence* newCoords) const { return new LinearRing(newCoords,this); } /*public*/ Geometry::AutoPtr GeometryFactory::createLinearRing(CoordinateSequence::AutoPtr newCoords) const { return Geometry::AutoPtr(new LinearRing(newCoords, this)); } /*public*/ LinearRing* GeometryFactory::createLinearRing(const CoordinateSequence& fromCoords) const { CoordinateSequence *newCoords = fromCoords.clone(); LinearRing *g = NULL; // construction failure will delete newCoords g = new LinearRing(newCoords, this); return g; } /*public*/ MultiPoint* GeometryFactory::createMultiPoint(vector *newPoints) const { return new MultiPoint(newPoints,this); } /*public*/ MultiPoint* GeometryFactory::createMultiPoint(const vector &fromPoints) const { vector*newGeoms = new vector(fromPoints.size()); for (size_t i=0; iclone(); } MultiPoint *g = NULL; try { g = new MultiPoint(newGeoms,this); } catch (...) { for (size_t i=0; isize(); i++) { delete (*newGeoms)[i]; } delete newGeoms; throw; } return g; } /*public*/ MultiPoint* GeometryFactory::createMultiPoint() const { return new MultiPoint(NULL, this); } /*public*/ MultiPoint* GeometryFactory::createMultiPoint(const CoordinateSequence &fromCoords) const { size_t npts=fromCoords.getSize(); vector *pts=new vector; pts->reserve(npts); for (size_t i=0; ipush_back(pt); } MultiPoint *mp = NULL; try { mp = createMultiPoint(pts); } catch (...) { for (size_t i=0; i &fromCoords) const { size_t npts=fromCoords.size(); vector *pts=new vector; pts->reserve(npts); for (size_t i=0; ipush_back(pt); } MultiPoint *mp = NULL; try { mp = createMultiPoint(pts); } catch (...) { for (size_t i=0; i *holes) const { return new Polygon(shell, holes, this); } /*public*/ Polygon* GeometryFactory::createPolygon(const LinearRing &shell, const vector &holes) const { LinearRing *newRing = dynamic_cast(shell.clone()); vector*newHoles = new vector(holes.size()); for (size_t i=0; iclone(); } Polygon *g = NULL; try { g = new Polygon(newRing, newHoles, this); } catch (...) { delete newRing; for (size_t i=0; i GeometryFactory::createLineString(const LineString& ls) const { return std::auto_ptr(new LineString(ls)); } /*public*/ LineString* GeometryFactory::createLineString(CoordinateSequence *newCoords) const { return new LineString(newCoords, this); } /*public*/ Geometry::AutoPtr GeometryFactory::createLineString(CoordinateSequence::AutoPtr newCoords) const { return Geometry::AutoPtr(new LineString(newCoords, this)); } /*public*/ LineString* GeometryFactory::createLineString(const CoordinateSequence &fromCoords) const { CoordinateSequence *newCoords = fromCoords.clone(); LineString *g = NULL; // construction failure will delete newCoords g = new LineString(newCoords, this); return g; } /*public*/ Geometry* GeometryFactory::buildGeometry(vector *newGeoms) const { string geomClass("NULL"); bool isHeterogeneous=false; bool hasGeometryCollection=false; for (size_t i=0, n=newGeoms->size(); i(geom) ) { hasGeometryCollection=true; } } // for the empty geometry, return an empty GeometryCollection if (geomClass=="NULL") { // we do not need the vector anymore delete newGeoms; return createGeometryCollection(); } if (isHeterogeneous || hasGeometryCollection) { return createGeometryCollection(newGeoms); } // At this point we know the collection is not hetereogenous. // Determine the type of the result from the first Geometry in the // list. This should always return a geometry, since otherwise // an empty collection would have already been returned Geometry *geom0=(*newGeoms)[0]; bool isCollection=newGeoms->size()>1; if (isCollection) { if (typeid(*geom0)==typeid(Polygon)) { return createMultiPolygon(newGeoms); } else if (typeid(*geom0)==typeid(LineString)) { return createMultiLineString(newGeoms); } else if (typeid(*geom0)==typeid(LinearRing)) { return createMultiLineString(newGeoms); } else if (typeid(*geom0)==typeid(Point)) { return createMultiPoint(newGeoms); } else { return createGeometryCollection(newGeoms); } } // since this is not a collection we can delete vector delete newGeoms; return geom0; } /*public*/ Geometry* GeometryFactory::buildGeometry(const vector &fromGeoms) const { string geomClass("NULL"); bool isHeterogeneous=false; bool isCollection=fromGeoms.size()>1; size_t i; for (i=0; iclone(); } /*public*/ Geometry* GeometryFactory::createGeometry(const Geometry *g) const { // could this be cached to make this more efficient? Or maybe it isn't enough overhead to bother //return g->clone(); util::GeometryEditor editor(this); gfCoordinateOperation coordOp(coordinateListFactory); Geometry *ret = editor.edit(g, &coordOp); return ret; } /*public*/ void GeometryFactory::destroyGeometry(Geometry *g) const { delete g; } /*public static*/ const GeometryFactory* GeometryFactory::getDefaultInstance() { static GeometryFactory* defInstance = new GeometryFactory(); return defInstance; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/GeometryList.cpp0000644000175000017500000000277312206417145017161 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK * **********************************************************************/ #include #include // for auto_ptr #include // for auto_ptr #include namespace geos { namespace geom { // geos.geom /*private*/ GeometryList::GeometryList() { } /*private*/ GeometryList::~GeometryList() { for (std::vector::size_type i=0, n=geoms.size(); i #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom const int IntersectionMatrix::firstDim = 3; const int IntersectionMatrix::secondDim = 3; /*public*/ IntersectionMatrix::IntersectionMatrix() { //matrix = new int[3][3]; setAll(Dimension::False); } /*public*/ IntersectionMatrix::IntersectionMatrix(const string& elements) { setAll(Dimension::False); set(elements); } /*public*/ IntersectionMatrix::IntersectionMatrix(const IntersectionMatrix& other) { matrix[Location::INTERIOR][Location::INTERIOR] = other.matrix[Location::INTERIOR][Location::INTERIOR]; matrix[Location::INTERIOR][Location::BOUNDARY] = other.matrix[Location::INTERIOR][Location::BOUNDARY]; matrix[Location::INTERIOR][Location::EXTERIOR] = other.matrix[Location::INTERIOR][Location::EXTERIOR]; matrix[Location::BOUNDARY][Location::INTERIOR] = other.matrix[Location::BOUNDARY][Location::INTERIOR]; matrix[Location::BOUNDARY][Location::BOUNDARY] = other.matrix[Location::BOUNDARY][Location::BOUNDARY]; matrix[Location::BOUNDARY][Location::EXTERIOR] = other.matrix[Location::BOUNDARY][Location::EXTERIOR]; matrix[Location::EXTERIOR][Location::INTERIOR] = other.matrix[Location::EXTERIOR][Location::INTERIOR]; matrix[Location::EXTERIOR][Location::BOUNDARY] = other.matrix[Location::EXTERIOR][Location::BOUNDARY]; matrix[Location::EXTERIOR][Location::EXTERIOR] = other.matrix[Location::EXTERIOR][Location::EXTERIOR]; } /*public*/ void IntersectionMatrix::add(IntersectionMatrix* other) { for(int i = 0; i < firstDim; i++) { for(int j = 0; j < secondDim; j++) { setAtLeast(i, j, other->get(i, j)); } } } /*public*/ bool IntersectionMatrix::matches(const string& requiredDimensionSymbols) const { if (requiredDimensionSymbols.length() != 9) { ostringstream s; s << "IllegalArgumentException: Should be length 9, is " << "[" << requiredDimensionSymbols << "] instead" << endl; throw util::IllegalArgumentException(s.str()); } for (int ai = 0; ai < firstDim; ai++) { for (int bi = 0; bi < secondDim; bi++) { if (!matches(matrix[ai][bi],requiredDimensionSymbols[3*ai+bi])) { return false; } } } return true; } /*public static*/ bool IntersectionMatrix::matches(int actualDimensionValue, char requiredDimensionSymbol) { if (requiredDimensionSymbol=='*') return true; if (requiredDimensionSymbol=='T' && (actualDimensionValue >= 0 || actualDimensionValue==Dimension::True)) { return true; } if (requiredDimensionSymbol=='F' && actualDimensionValue==Dimension::False) { return true; } if (requiredDimensionSymbol=='0' && actualDimensionValue==Dimension::P) { return true; } if (requiredDimensionSymbol=='1' && actualDimensionValue==Dimension::L) { return true; } if (requiredDimensionSymbol=='2' && actualDimensionValue==Dimension::A) { return true; } return false; } /*public static*/ bool IntersectionMatrix::matches(const string& actualDimensionSymbols, const string& requiredDimensionSymbols) { IntersectionMatrix m(actualDimensionSymbols); bool result=m.matches(requiredDimensionSymbols); return result; } /*public*/ void IntersectionMatrix::set(int row, int col, int dimensionValue) { assert( row >= 0 && row < firstDim ); assert( col >= 0 && col < secondDim ); matrix[row][col] = dimensionValue; } /*public*/ void IntersectionMatrix::set(const string& dimensionSymbols) { size_t limit = dimensionSymbols.length(); for (size_t i = 0; i < limit; i++) { int row = i / firstDim; int col = i % secondDim; matrix[row][col] = Dimension::toDimensionValue(dimensionSymbols[i]); } } /*public*/ void IntersectionMatrix::setAtLeast(int row, int col, int minimumDimensionValue) { assert( row >= 0 && row < firstDim ); assert( col >= 0 && col < secondDim ); if (matrix[row][col] < minimumDimensionValue) { matrix[row][col] = minimumDimensionValue; } } /*public*/ void IntersectionMatrix::setAtLeastIfValid(int row, int col, int minimumDimensionValue) { assert( row >= 0 && row < firstDim ); assert( col >= 0 && col < secondDim ); if (row >= 0 && col >= 0) { setAtLeast(row, col, minimumDimensionValue); } } /*public*/ void IntersectionMatrix::setAtLeast(string minimumDimensionSymbols) { size_t limit = minimumDimensionSymbols.length(); for (size_t i = 0; i < limit; i++) { int row = i / firstDim; int col = i % secondDim; setAtLeast(row, col, Dimension::toDimensionValue(minimumDimensionSymbols[i])); } } /*public*/ void IntersectionMatrix::setAll(int dimensionValue) { for (int ai = 0; ai < firstDim; ai++) { for (int bi = 0; bi < secondDim; bi++) { matrix[ai][bi] = dimensionValue; } } } /*public*/ int IntersectionMatrix::get(int row, int col) const { assert( row >= 0 && row < firstDim ); assert( col >= 0 && col < secondDim ); return matrix[row][col]; } /*public*/ bool IntersectionMatrix::isDisjoint() const { return matrix[Location::INTERIOR][Location::INTERIOR]==Dimension::False && matrix[Location::INTERIOR][Location::BOUNDARY]==Dimension::False && matrix[Location::BOUNDARY][Location::INTERIOR]==Dimension::False && matrix[Location::BOUNDARY][Location::BOUNDARY]==Dimension::False; } /*public*/ bool IntersectionMatrix::isIntersects() const { return !isDisjoint(); } /*public*/ bool IntersectionMatrix::isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) const { if (dimensionOfGeometryA > dimensionOfGeometryB) { //no need to get transpose because pattern matrix is symmetrical return isTouches(dimensionOfGeometryB, dimensionOfGeometryA); } if ((dimensionOfGeometryA==Dimension::A && dimensionOfGeometryB==Dimension::A) || (dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::L) || (dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::A) || (dimensionOfGeometryA==Dimension::P && dimensionOfGeometryB==Dimension::A) || (dimensionOfGeometryA==Dimension::P && dimensionOfGeometryB==Dimension::L)) { return matrix[Location::INTERIOR][Location::INTERIOR]==Dimension::False && (matches(matrix[Location::INTERIOR][Location::BOUNDARY], 'T') || matches(matrix[Location::BOUNDARY][Location::INTERIOR], 'T') || matches(matrix[Location::BOUNDARY][Location::BOUNDARY], 'T')); } return false; } /*public*/ bool IntersectionMatrix::isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) const { if ((dimensionOfGeometryA==Dimension::P && dimensionOfGeometryB==Dimension::L) || (dimensionOfGeometryA==Dimension::P && dimensionOfGeometryB==Dimension::A) || (dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::A)) { return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matches(matrix[Location::INTERIOR][Location::EXTERIOR], 'T'); } if ((dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::P) || (dimensionOfGeometryA==Dimension::A && dimensionOfGeometryB==Dimension::P) || (dimensionOfGeometryA==Dimension::A && dimensionOfGeometryB==Dimension::L)) { return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matches(matrix[Location::EXTERIOR][Location::INTERIOR], 'T'); } if (dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::L) { return matrix[Location::INTERIOR][Location::INTERIOR]==0; } return false; } /*public*/ bool IntersectionMatrix::isWithin() const { return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matrix[Location::INTERIOR][Location::EXTERIOR]==Dimension::False && matrix[Location::BOUNDARY][Location::EXTERIOR]==Dimension::False; } /*public*/ bool IntersectionMatrix::isContains() const { return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matrix[Location::EXTERIOR][Location::INTERIOR]==Dimension::False && matrix[Location::EXTERIOR][Location::BOUNDARY]==Dimension::False; } /*public*/ bool IntersectionMatrix::isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) const { if (dimensionOfGeometryA != dimensionOfGeometryB) { return false; } return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matrix[Location::EXTERIOR][Location::INTERIOR]==Dimension::False && matrix[Location::INTERIOR][Location::EXTERIOR]==Dimension::False && matrix[Location::EXTERIOR][Location::BOUNDARY]==Dimension::False && matrix[Location::BOUNDARY][Location::EXTERIOR]==Dimension::False; } /*public*/ bool IntersectionMatrix::isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) const { if ((dimensionOfGeometryA==Dimension::P && dimensionOfGeometryB==Dimension::P) || (dimensionOfGeometryA==Dimension::A && dimensionOfGeometryB==Dimension::A)) { return matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') && matches(matrix[Location::INTERIOR][Location::EXTERIOR], 'T') && matches(matrix[Location::EXTERIOR][Location::INTERIOR],'T'); } if (dimensionOfGeometryA==Dimension::L && dimensionOfGeometryB==Dimension::L) { return matrix[Location::INTERIOR][Location::INTERIOR]==1 && matches(matrix[Location::INTERIOR][Location::EXTERIOR], 'T') && matches(matrix[Location::EXTERIOR][Location::INTERIOR], 'T'); } return false; } /*public*/ bool IntersectionMatrix::isCovers() const { bool hasPointInCommon = matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') || matches(matrix[Location::INTERIOR][Location::BOUNDARY], 'T') || matches(matrix[Location::BOUNDARY][Location::INTERIOR], 'T') || matches(matrix[Location::BOUNDARY][Location::BOUNDARY], 'T'); return hasPointInCommon && matrix[Location::EXTERIOR][Location::INTERIOR] == Dimension::False && matrix[Location::EXTERIOR][Location::BOUNDARY] == Dimension::False; } /*public*/ bool IntersectionMatrix::isCoveredBy() const { bool hasPointInCommon = matches(matrix[Location::INTERIOR][Location::INTERIOR], 'T') || matches(matrix[Location::INTERIOR][Location::BOUNDARY], 'T') || matches(matrix[Location::BOUNDARY][Location::INTERIOR], 'T') || matches(matrix[Location::BOUNDARY][Location::BOUNDARY], 'T'); return hasPointInCommon && matrix[Location::INTERIOR][Location::EXTERIOR] == Dimension::False && matrix[Location::BOUNDARY][Location::EXTERIOR] == Dimension::False; } //Not sure IntersectionMatrix* IntersectionMatrix::transpose() { int temp = matrix[1][0]; matrix[1][0] = matrix[0][1]; matrix[0][1] = temp; temp = matrix[2][0]; matrix[2][0] = matrix[0][2]; matrix[0][2] = temp; temp = matrix[2][1]; matrix[2][1] = matrix[1][2]; matrix[1][2] = temp; return this; } /*public*/ string IntersectionMatrix::toString() const { string result(""); for (int ai = 0; ai < firstDim; ai++) { for (int bi = 0; bi < secondDim; bi++) { result += Dimension::toDimensionSymbol(matrix[ai][bi]); } } return result; } std::ostream& operator<< (std::ostream&os, const IntersectionMatrix& im) { return os << im.toString(); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/LineSegment.cpp0000644000175000017500000001706212206417145016741 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LineSegment.java r18 (JTS-1.11) * **********************************************************************/ #include #include // for toGeometry #include #include #include #include // should we really be using this? #include #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include #endif using namespace std; //using namespace geos::algorithm; using geos::algorithm::HCoordinate; using geos::algorithm::NotRepresentableException; using geos::algorithm::LineIntersector; namespace geos { namespace geom { // geos::geom /*public*/ void LineSegment::reverse() { // TODO: use std::swap<> Coordinate temp=p0; p0=p1; p1=temp; } /*public*/ double LineSegment::projectionFactor(const Coordinate& p) const { if (p==p0) return 0.0; if (p==p1) return 1.0; // Otherwise, use comp.graphics.algorithms Frequently Asked Questions method /*(1) AC dot AB r = --------- ||AB||^2 r has the following meaning: r=0 P = A r=1 P = B r<0 P is on the backward extension of AB r>1 P is on the forward extension of AB 0 1.0) segFrac = 1.0; return segFrac; } /*public*/ void LineSegment::project(const Coordinate& p, Coordinate& ret) const { if (p==p0 || p==p1) ret=p; double r=projectionFactor(p); ret=Coordinate(p0.x+r*(p1.x-p0.x),p0.y+r*(p1.y-p0.y)); } bool LineSegment::project(const LineSegment& seg, LineSegment& ret) const { double pf0=projectionFactor(seg.p0); double pf1=projectionFactor(seg.p1); // check if segment projects at all if (pf0>=1.0 && pf1>=1.0) return false; if (pf0<=0.0 && pf1<=0.0) return false; Coordinate newp0; project(seg.p0, newp0); Coordinate newp1; project(seg.p1, newp1); ret.setCoordinates(newp0, newp1); return true; } //Coordinate* void LineSegment::closestPoint(const Coordinate& p, Coordinate& ret) const { double factor=projectionFactor(p); if (factor>0 && factor<1) { project(p, ret); return; } double dist0=p0.distance(p); double dist1=p1.distance(p); if (dist0= 0 && orient1 >= 0) return max(orient0, orient1); // this handles the case where the points are R or collinear if (orient0 <= 0 && orient1 <= 0) return max(orient0, orient1); // points lie on opposite sides ==> indeterminate orientation return 0; } CoordinateSequence* LineSegment::closestPoints(const LineSegment& line) { // test for intersection Coordinate intPt; if ( intersection(line, intPt) ) { CoordinateSequence *cl=new CoordinateArraySequence(new vector(2, intPt)); return cl; } /* * if no intersection closest pair contains at least one endpoint. * Test each endpoint in turn. */ CoordinateSequence *closestPt=new CoordinateArraySequence(2); //vector *cv = new vector(2); double minDistance=DoubleMax; double dist; Coordinate close00; closestPoint(line.p0, close00); minDistance = close00.distance(line.p0); closestPt->setAt(close00, 0); closestPt->setAt(line.p0, 1); Coordinate close01; closestPoint(line.p1, close01); dist = close01.distance(line.p1); if (dist < minDistance) { minDistance = dist; closestPt->setAt(close01,0); closestPt->setAt(line.p1,1); //(*cv)[0] = close01; //(*cv)[1] = line.p1; } Coordinate close10; line.closestPoint(p0, close10); dist = close10.distance(p0); if (dist < minDistance) { minDistance = dist; closestPt->setAt(p0,0); closestPt->setAt(close10,1); //(*cv)[0] = p0; //(*cv)[1] = close10; } Coordinate close11; line.closestPoint(p1, close11); dist = close11.distance(p1); if (dist < minDistance) { minDistance = dist; closestPt->setAt(p1,0); closestPt->setAt(close11,1); //(*cv)[0] = p1; //(*cv)[1] = *close11; } return closestPt; } bool LineSegment::intersection(const LineSegment& line, Coordinate& ret) const { algorithm::LineIntersector li; li.computeIntersection(p0, p1, line.p0, line.p1); if (li.hasIntersection()) { ret=li.getIntersection(0); return true; } return false; } bool LineSegment::lineIntersection(const LineSegment& line, Coordinate& ret) const { try { HCoordinate::intersection(p0, p1, line.p0, line.p1, ret); return true; } catch (const NotRepresentableException& /*ex*/) { // eat this exception, and return null; } return false; } /* public */ void LineSegment::pointAlongOffset(double segmentLengthFraction, double offsetDistance, Coordinate& ret) const { // the point on the segment line double segx = p0.x + segmentLengthFraction * (p1.x - p0.x); double segy = p0.y + segmentLengthFraction * (p1.y - p0.y); double dx = p1.x - p0.x; double dy = p1.y - p0.y; double len = sqrt(dx * dx + dy * dy); double ux = 0.0; double uy = 0.0; if (offsetDistance != 0.0) { if (len <= 0.0) { throw util::IllegalStateException("Cannot compute offset from zero-length line segment"); } // u is the vector that is the length of the offset, // in the direction of the segment ux = offsetDistance * dx / len; uy = offsetDistance * dy / len; } // the offset point is the seg point plus the offset // vector rotated 90 degrees CCW double offsetx = segx - uy; double offsety = segy + ux; ret = Coordinate(offsetx, offsety); } /* public */ std::auto_ptr LineSegment::toGeometry(const GeometryFactory& gf) const { CoordinateSequence *cl=new CoordinateArraySequence(); cl->add(p0); cl->add(p1); return std::auto_ptr( gf.createLineString(cl) // ownership transferred ); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/LineString.cpp0000644000175000017500000002053112206417145016600 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/LineString.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for getBoundary #include #include #include #include #include using namespace std; using namespace geos::algorithm; namespace geos { namespace geom { // geos::geom /*protected*/ LineString::LineString(const LineString &ls) : Geometry(ls), points(ls.points->clone()) { //points=ls.points->clone(); } Geometry* LineString::reverse() const { assert(points.get()); CoordinateSequence* seq = points->clone(); CoordinateSequence::reverse(seq); assert(getFactory()); return getFactory()->createLineString(seq); } /*private*/ void LineString::validateConstruction() { if (points.get()==NULL) { points.reset(getFactory()->getCoordinateSequenceFactory()->create(NULL)); return; } if (points->size()==1) { throw util::IllegalArgumentException("point array must contain 0 or >1 elements\n"); } } /*protected*/ LineString::LineString(CoordinateSequence *newCoords, const GeometryFactory *factory) : Geometry(factory), points(newCoords) { validateConstruction(); } /*public*/ LineString::LineString(CoordinateSequence::AutoPtr newCoords, const GeometryFactory *factory) : Geometry(factory), points(newCoords) { validateConstruction(); } LineString::~LineString() { //delete points; } CoordinateSequence* LineString::getCoordinates() const { assert(points.get()); return points->clone(); //return points; } const CoordinateSequence* LineString::getCoordinatesRO() const { assert(0 != points.get()); return points.get(); } const Coordinate& LineString::getCoordinateN(int n) const { assert(points.get()); return points->getAt(n); } Dimension::DimensionType LineString::getDimension() const { return Dimension::L; // line } int LineString::getCoordinateDimension() const { return (int) points->getDimension(); } int LineString::getBoundaryDimension() const { if (isClosed()) { return Dimension::False; } return 0; } bool LineString::isEmpty() const { assert(points.get()); return points->isEmpty(); } size_t LineString::getNumPoints() const { assert(points.get()); return points->getSize(); } Point* LineString::getPointN(size_t n) const { assert(getFactory()); assert(points.get()); return getFactory()->createPoint(points->getAt(n)); } Point* LineString::getStartPoint() const { if (isEmpty()) { return NULL; //return new Point(NULL,NULL); } return getPointN(0); } Point* LineString::getEndPoint() const { if (isEmpty()) { return NULL; //return new Point(NULL,NULL); } return getPointN(getNumPoints() - 1); } bool LineString::isClosed() const { if (isEmpty()) { return false; } return getCoordinateN(0).equals2D(getCoordinateN(getNumPoints()-1)); } bool LineString::isRing() const { return isClosed() && isSimple(); } string LineString::getGeometryType() const { return "LineString"; } Geometry* LineString::getBoundary() const { if (isEmpty()) { return getFactory()->createMultiPoint(); } // using the default OGC_SFS MOD2 rule, the boundary of a // closed LineString is empty if (isClosed()) { return getFactory()->createMultiPoint(); } vector *pts=new vector(); pts->push_back(getStartPoint()); pts->push_back(getEndPoint()); MultiPoint *mp = getFactory()->createMultiPoint(pts); return mp; } bool LineString::isCoordinate(Coordinate& pt) const { assert(points.get()); std::size_t npts=points->getSize(); for (std::size_t i = 0; igetAt(i)==pt) { return true; } } return false; } /*protected*/ Envelope::AutoPtr LineString::computeEnvelopeInternal() const { if (isEmpty()) { // We don't return NULL here // as it would indicate "unknown" // envelope. In this case we // *know* the envelope is EMPTY. return Envelope::AutoPtr(new Envelope()); } assert(points.get()); const Coordinate& c=points->getAt(0); double minx = c.x; double miny = c.y; double maxx = c.x; double maxy = c.y; std::size_t npts=points->getSize(); for (std::size_t i=1; igetAt(i); minx = minx < c.x ? minx : c.x; maxx = maxx > c.x ? maxx : c.x; miny = miny < c.y ? miny : c.y; maxy = maxy > c.y ? maxy : c.y; } // caller expects a newly allocated Envelope. // this function won't be called twice, unless // cached Envelope is invalidated (set to NULL) return Envelope::AutoPtr(new Envelope(minx, maxx, miny, maxy)); } bool LineString::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) { return false; } const LineString *otherLineString=dynamic_cast(other); assert(otherLineString); size_t npts=points->getSize(); if (npts!=otherLineString->points->getSize()) { return false; } for (size_t i=0; igetAt(i),otherLineString->points->getAt(i),tolerance)) { return false; } } return true; } void LineString::apply_rw(const CoordinateFilter *filter) { assert(points.get()); points->apply_rw(filter); } void LineString::apply_ro(CoordinateFilter *filter) const { assert(points.get()); points->apply_ro(filter); } void LineString::apply_rw(GeometryFilter *filter) { assert(filter); filter->filter_rw(this); } void LineString::apply_ro(GeometryFilter *filter) const { assert(filter); filter->filter_ro(this); } /*public*/ void LineString::normalize() { assert(points.get()); std::size_t npts=points->getSize(); std::size_t n=npts/2; for (std::size_t i=0; igetAt(i)==points->getAt(j))) { if (points->getAt(i).compareTo(points->getAt(j)) > 0) { CoordinateSequence::reverse(points.get()); } return; } } } int LineString::compareToSameClass(const Geometry *ls) const { const LineString *line=dynamic_cast(ls); assert(line); // MD - optimized implementation std::size_t mynpts=points->getSize(); std::size_t othnpts=line->points->getSize(); if ( mynpts > othnpts ) return 1; if ( mynpts < othnpts ) return -1; for (std::size_t i=0; igetAt(i).compareTo(line->points->getAt(i)); if (cmp) return cmp; } return 0; } const Coordinate* LineString::getCoordinate() const { if (isEmpty()) return NULL; return &(points->getAt(0)); } double LineString::getLength() const { return CGAlgorithms::length(points.get()); } void LineString::apply_rw(GeometryComponentFilter *filter) { assert(filter); filter->filter_rw(this); } void LineString::apply_ro(GeometryComponentFilter *filter) const { assert(filter); filter->filter_ro(this); } void LineString::apply_rw(CoordinateSequenceFilter& filter) { size_t npts=points->size(); if (!npts) return; for (size_t i = 0; isize(); if (!npts) return; for (size_t i = 0; i #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom /*public*/ LinearRing::LinearRing(const LinearRing &lr): Geometry(lr), LineString(lr) {} /*public*/ LinearRing::LinearRing(CoordinateSequence* newCoords, const GeometryFactory *newFactory) : Geometry(newFactory), LineString(newCoords, newFactory) { validateConstruction(); } /*public*/ LinearRing::LinearRing(CoordinateSequence::AutoPtr newCoords, const GeometryFactory *newFactory) : Geometry(newFactory), LineString(newCoords, newFactory) { validateConstruction(); } void LinearRing::validateConstruction() { // Empty ring is valid if ( points->isEmpty() ) return; if ( !LineString::isClosed() ) { throw util::IllegalArgumentException( "Points of LinearRing do not form a closed linestring" ); } if ( points->getSize() < MINIMUM_VALID_SIZE ) { std::ostringstream os; os << "Invalid number of points in LinearRing found " << points->getSize() << " - must be 0 or >= 4"; throw util::IllegalArgumentException(os.str()); } } // superclass LineString will delete internal CoordinateSequence LinearRing::~LinearRing(){ } int LinearRing::getBoundaryDimension() const { return Dimension::False; } bool LinearRing::isSimple() const { return true; } bool LinearRing::isClosed() const { if ( points->isEmpty() ) { // empty LinearRings are closed by definition return true; } return LineString::isClosed(); } string LinearRing::getGeometryType() const { return "LinearRing"; } void LinearRing::setPoints(CoordinateSequence* cl){ const vector *v=cl->toVector(); points->setPoints(*(v)); //delete v; } GeometryTypeId LinearRing::getGeometryTypeId() const { return GEOS_LINEARRING; } Geometry* LinearRing::reverse() const { assert(points.get()); CoordinateSequence* seq = points->clone(); CoordinateSequence::reverse(seq); assert(getFactory()); return getFactory()->createLinearRing(seq); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/Location.cpp0000644000175000017500000000240412206417145016271 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom /** * Converts the location value to a location symbol, for example, EXTERIOR => 'e'. * *@param locationValue either EXTERIOR, BOUNDARY, INTERIOR or NULL *@return either 'e', 'b', 'i' or '-' */ char Location::toLocationSymbol(int locationValue) { switch (locationValue) { case EXTERIOR: return 'e'; case BOUNDARY: return 'b'; case INTERIOR: return 'i'; case UNDEF: //NULL return '-'; default: ostringstream s; s<<"Unknown location value: "</dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/geom/MultiLineString.cpp0000644000175000017500000000577012206417145017623 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiLineString.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include "geos/geom/MultiLineString.inl" #endif using namespace std; using namespace geos::algorithm; //using namespace geos::operation; using namespace geos::geomgraph; namespace geos { namespace geom { // geos::geom /*protected*/ MultiLineString::MultiLineString(vector *newLines, const GeometryFactory *factory) : Geometry(factory), GeometryCollection(newLines,factory) { } MultiLineString::~MultiLineString(){} Dimension::DimensionType MultiLineString::getDimension() const { return Dimension::L; // line } int MultiLineString::getBoundaryDimension() const { if (isClosed()) { return Dimension::False; } return 0; } string MultiLineString::getGeometryType() const { return "MultiLineString"; } bool MultiLineString::isClosed() const { if (isEmpty()) { return false; } for (size_t i = 0, n = geometries->size(); i < n; ++i) { LineString *ls = dynamic_cast((*geometries)[i]); if ( ! ls->isClosed() ) { return false; } } return true; } Geometry* MultiLineString::getBoundary() const { if (isEmpty()) { return getFactory()->createGeometryCollection(NULL); } //Geometry *in = toInternalGeometry(this); GeometryGraph gg(0, this); CoordinateSequence *pts=gg.getBoundaryPoints(); Geometry *ret = getFactory()->createMultiPoint(*pts); return ret; } bool MultiLineString::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) { return false; } return GeometryCollection::equalsExact(other, tolerance); } GeometryTypeId MultiLineString::getGeometryTypeId() const { return GEOS_MULTILINESTRING; } MultiLineString* MultiLineString::reverse() const { size_t nLines = geometries->size(); Geometry::NonConstVect *revLines = new Geometry::NonConstVect(nLines); for (size_t i=0; i((*geometries)[i]); assert(iLS); (*revLines)[nLines-1-i] = iLS->reverse(); } return getFactory()->createMultiLineString(revLines); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/MultiPoint.cpp0000644000175000017500000000361612206417145016633 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiPoint.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include using namespace std; //using namespace geos::operation; namespace geos { namespace geom { // geos::geom /*protected*/ MultiPoint::MultiPoint(vector *newPoints, const GeometryFactory *factory) : Geometry(factory), GeometryCollection(newPoints,factory) { } MultiPoint::~MultiPoint(){} Dimension::DimensionType MultiPoint::getDimension() const { return Dimension::P; // point } int MultiPoint::getBoundaryDimension() const { return Dimension::False; } string MultiPoint::getGeometryType() const { return "MultiPoint"; } Geometry* MultiPoint::getBoundary() const { return getFactory()->createGeometryCollection(); } bool MultiPoint::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) { return false; } return GeometryCollection::equalsExact(other,tolerance); } const Coordinate* MultiPoint::getCoordinateN(int n) const { return ((*geometries)[n])->getCoordinate(); } GeometryTypeId MultiPoint::getGeometryTypeId() const { return GEOS_MULTIPOINT; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/MultiPolygon.cpp0000644000175000017500000000542212206417145017166 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/MultiPolygon.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include "geos/geom/MultiPolygon.inl" #endif using namespace std; namespace geos { namespace geom { // geos::geom /*protected*/ MultiPolygon::MultiPolygon(vector *newPolys, const GeometryFactory *factory) : Geometry(factory), GeometryCollection(newPolys,factory) {} MultiPolygon::~MultiPolygon(){} Dimension::DimensionType MultiPolygon::getDimension() const { return Dimension::A; // area } int MultiPolygon::getBoundaryDimension() const { return 1; } string MultiPolygon::getGeometryType() const { return "MultiPolygon"; } bool MultiPolygon::isSimple() const { return true; } Geometry* MultiPolygon::getBoundary() const { if (isEmpty()) { return getFactory()->createMultiLineString(); } vector* allRings=new vector(); for (size_t i = 0; i < geometries->size(); i++) { Polygon *pg=dynamic_cast((*geometries)[i]); assert(pg); Geometry *g=pg->getBoundary(); if ( LineString *ls=dynamic_cast(g) ) { allRings->push_back(ls); } else { GeometryCollection* rings=dynamic_cast(g); for (size_t j=0, jn=rings->getNumGeometries(); jpush_back(new LineString(*(LineString*)rings->getGeometryN(j))); allRings->push_back(rings->getGeometryN(j)->clone()); } delete g; } } Geometry *ret=getFactory()->createMultiLineString(allRings); //for (int i=0; isize(); i++) delete (*allRings)[i]; //delete allRings; return ret; } bool MultiPolygon::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) { return false; } return GeometryCollection::equalsExact(other, tolerance); } GeometryTypeId MultiPolygon::getGeometryTypeId() const { return GEOS_MULTIPOLYGON; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/Point.cpp0000644000175000017500000001227112206417145015615 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Point.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos::geom /*protected*/ Point::Point(CoordinateSequence *newCoords, const GeometryFactory *factory) : Geometry(factory), coordinates(newCoords) { if (coordinates.get()==NULL) { coordinates.reset(factory->getCoordinateSequenceFactory()->create(NULL)); return; } if (coordinates->getSize() != 1) { throw util::IllegalArgumentException("Point coordinate list must contain a single element"); } } /*protected*/ Point::Point(const Point &p) : Geometry(p), coordinates(p.coordinates->clone()) { } CoordinateSequence * Point::getCoordinates() const { return coordinates->clone(); } size_t Point::getNumPoints() const { return isEmpty() ? 0 : 1; } bool Point::isEmpty() const { return coordinates->isEmpty(); } bool Point::isSimple() const { return true; } Dimension::DimensionType Point::getDimension() const { return Dimension::P; // point } int Point::getCoordinateDimension() const { return (int) coordinates->getDimension(); } int Point::getBoundaryDimension() const { return Dimension::False; } double Point::getX() const { if (isEmpty()) { throw util::UnsupportedOperationException("getX called on empty Point\n"); } return getCoordinate()->x; } double Point::getY() const { if (isEmpty()) { throw util::UnsupportedOperationException("getY called on empty Point\n"); } return getCoordinate()->y; } const Coordinate * Point::getCoordinate() const { return coordinates->getSize()!=0 ? &(coordinates->getAt(0)) : NULL; } string Point::getGeometryType() const { return "Point"; } Geometry * Point::getBoundary() const { return getFactory()->createGeometryCollection(NULL); } Envelope::AutoPtr Point::computeEnvelopeInternal() const { if (isEmpty()) { return Envelope::AutoPtr(new Envelope()); } return Envelope::AutoPtr(new Envelope(getCoordinate()->x, getCoordinate()->x, getCoordinate()->y, getCoordinate()->y)); } void Point::apply_ro(CoordinateFilter *filter) const { if (isEmpty()) {return;} filter->filter_ro(getCoordinate()); } void Point::apply_rw(const CoordinateFilter *filter) { if (isEmpty()) {return;} Coordinate newcoord = coordinates->getAt(0); filter->filter_rw(&newcoord); coordinates->setAt(newcoord, 0); } void Point::apply_rw(GeometryFilter *filter) { filter->filter_rw(this); } void Point::apply_ro(GeometryFilter *filter) const { filter->filter_ro(this); } void Point::apply_rw(GeometryComponentFilter *filter) { filter->filter_rw(this); } void Point::apply_ro(GeometryComponentFilter *filter) const { filter->filter_ro(this); } void Point::apply_rw(CoordinateSequenceFilter& filter) { if (isEmpty()) return; filter.filter_rw(*coordinates, 0); if (filter.isGeometryChanged()) geometryChanged(); } void Point::apply_ro(CoordinateSequenceFilter& filter) const { if (isEmpty()) return; filter.filter_ro(*coordinates, 0); //if (filter.isGeometryChanged()) geometryChanged(); } bool Point::equalsExact(const Geometry *other, double tolerance) const { if (!isEquivalentClass(other)) { return false; } // assume the isEquivalentClass would return false // if other is not a point assert(dynamic_cast(other)); if ( isEmpty() ) return other->isEmpty(); else if ( other->isEmpty() ) return false; const Coordinate* this_coord = getCoordinate(); const Coordinate* other_coord = other->getCoordinate(); // assume the isEmpty checks above worked :) assert(this_coord && other_coord); return equal(*this_coord, *other_coord, tolerance); } int Point::compareToSameClass(const Geometry *g) const { const Point* p = dynamic_cast(g); return getCoordinate()->compareTo(*(p->getCoordinate())); } Point::~Point() { //delete coordinates; } GeometryTypeId Point::getGeometryTypeId() const { return GEOS_POINT; } /*public*/ const CoordinateSequence* Point::getCoordinatesRO() const { return coordinates.get(); } } // namespace geos::geom } // namesapce geos geos-3.4.2/src/geom/Polygon.cpp0000644000175000017500000002556012206417145016160 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/Polygon.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include // for getBoundary() #include #include #include #include #include #include #include #include #include #include // for fabs #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; //using namespace geos::algorithm; namespace geos { namespace geom { // geos::geom /*protected*/ Polygon::Polygon(const Polygon &p) : Geometry(p) { shell=new LinearRing(*p.shell); size_t nholes=p.holes->size(); holes=new vector(nholes); for(size_t i=0; iclone instead ! const LinearRing* lr = dynamic_cast((*p.holes)[i]); LinearRing *h=new LinearRing(*lr); (*holes)[i]=h; } } /*protected*/ Polygon::Polygon(LinearRing *newShell, vector *newHoles, const GeometryFactory *newFactory): Geometry(newFactory) { if (newShell==NULL) { shell=getFactory()->createLinearRing(NULL); } else { if (newHoles != NULL && newShell->isEmpty() && hasNonEmptyElements(newHoles)) { throw util::IllegalArgumentException("shell is empty but holes are not"); } shell=newShell; } if (newHoles==NULL) { holes=new vector(); } else { if (hasNullElements(newHoles)) { throw util::IllegalArgumentException("holes must not contain null elements"); } for (size_t i=0; isize(); i++) if ( (*newHoles)[i]->getGeometryTypeId() != GEOS_LINEARRING) throw util::IllegalArgumentException("holes must be LinearRings"); holes=newHoles; } } CoordinateSequence* Polygon::getCoordinates() const { if (isEmpty()) { return getFactory()->getCoordinateSequenceFactory()->create(NULL); } vector *cl = new vector; // reserve space in the vector for all the polygon points cl->reserve(getNumPoints()); // Add shell points const CoordinateSequence* shellCoords=shell->getCoordinatesRO(); shellCoords->toVector(*cl); // Add holes points size_t nholes=holes->size(); for (size_t i=0; i((*holes)[i]); const CoordinateSequence* childCoords = lr->getCoordinatesRO(); childCoords->toVector(*cl); } return getFactory()->getCoordinateSequenceFactory()->create(cl); } size_t Polygon::getNumPoints() const { size_t numPoints = shell->getNumPoints(); for(size_t i=0, n=holes->size(); i((*holes)[i]); numPoints += lr->getNumPoints(); } return numPoints; } Dimension::DimensionType Polygon::getDimension() const { return Dimension::A; // area } int Polygon::getCoordinateDimension() const { int dimension=2; if( shell != NULL ) dimension = max(dimension,shell->getCoordinateDimension()); size_t nholes=holes->size(); for (size_t i=0; igetCoordinateDimension()); } return dimension; } int Polygon::getBoundaryDimension() const { return 1; } bool Polygon::isEmpty() const { return shell->isEmpty(); } bool Polygon::isSimple() const { return true; } const LineString* Polygon::getExteriorRing() const { return shell; } size_t Polygon::getNumInteriorRing() const { return holes->size(); } const LineString* Polygon::getInteriorRingN(size_t n) const { const LinearRing* lr = dynamic_cast((*holes)[n]); return lr; } string Polygon::getGeometryType() const { return "Polygon"; } // Returns a newly allocated Geometry object /*public*/ Geometry* Polygon::getBoundary() const { /* * We will make sure that what we * return is composed of LineString, * not LinearRings */ const GeometryFactory* gf = getFactory(); if (isEmpty()) { return gf->createMultiLineString(); } if ( ! holes->size() ) { return gf->createLineString(*shell).release(); } vector *rings = new vector(holes->size()+1); (*rings)[0] = gf->createLineString(*shell).release(); for(size_t i=0, n=holes->size(); i((*holes)[i]); assert( hole ); LineString* ls = gf->createLineString( *hole ).release(); (*rings)[i + 1] = ls; } MultiLineString *ret = getFactory()->createMultiLineString(rings); return ret; } Envelope::AutoPtr Polygon::computeEnvelopeInternal() const { return Envelope::AutoPtr(new Envelope(*(shell->getEnvelopeInternal()))); } bool Polygon::equalsExact(const Geometry *other, double tolerance) const { const Polygon* otherPolygon=dynamic_cast(other); if ( ! otherPolygon ) return false; if (!shell->equalsExact(otherPolygon->shell, tolerance)) { return false; } size_t nholes = holes->size(); if (nholes != otherPolygon->holes->size()) { return false; } for (size_t i=0; iholes))[i]; if (!hole->equalsExact(otherhole, tolerance)) { return false; } } return true; } void Polygon::apply_ro(CoordinateFilter *filter) const { shell->apply_ro(filter); for(size_t i=0, n=holes->size(); i((*holes)[i]); lr->apply_ro(filter); } } void Polygon::apply_rw(const CoordinateFilter *filter) { shell->apply_rw(filter); for(size_t i=0, n=holes->size(); i((*holes)[i]); lr->apply_rw(filter); } } void Polygon::apply_rw(GeometryFilter *filter) { filter->filter_rw(this); } void Polygon::apply_ro(GeometryFilter *filter) const { filter->filter_ro(this); } Geometry* Polygon::convexHull() const { return getExteriorRing()->convexHull(); } void Polygon::normalize() { normalize(shell, true); for(size_t i=0, n=holes->size(); i((*holes)[i]); normalize(lr, false); } sort(holes->begin(), holes->end(), GeometryGreaterThen()); } int Polygon::compareToSameClass(const Geometry *g) const { const Polygon* p = dynamic_cast(g); return shell->compareToSameClass(p->shell); } /* * TODO: check this function, there should be CoordinateSequence copy * reduction possibility. */ void Polygon::normalize(LinearRing *ring, bool clockwise) { if (ring->isEmpty()) { return; } CoordinateSequence* uniqueCoordinates=ring->getCoordinates(); uniqueCoordinates->deleteAt(uniqueCoordinates->getSize()-1); const Coordinate* minCoordinate=CoordinateSequence::minCoordinate(uniqueCoordinates); CoordinateSequence::scroll(uniqueCoordinates, minCoordinate); uniqueCoordinates->add(uniqueCoordinates->getAt(0)); if (algorithm::CGAlgorithms::isCCW(uniqueCoordinates)==clockwise) { CoordinateSequence::reverse(uniqueCoordinates); } ring->setPoints(uniqueCoordinates); delete(uniqueCoordinates); } const Coordinate* Polygon::getCoordinate() const { return shell->getCoordinate(); } /* * Returns the area of this Polygon * * @return the area of the polygon */ double Polygon::getArea() const { double area=0.0; area+=fabs(algorithm::CGAlgorithms::signedArea(shell->getCoordinatesRO())); for(size_t i=0, n=holes->size(); i((*holes)[i]); const CoordinateSequence *h=lr->getCoordinatesRO(); area-=fabs(algorithm::CGAlgorithms::signedArea(h)); } return area; } /** * Returns the perimeter of this Polygon * * @return the perimeter of the polygon */ double Polygon::getLength() const { double len=0.0; len+=shell->getLength(); for(size_t i=0, n=holes->size(); igetLength(); } return len; } void Polygon::apply_ro(GeometryComponentFilter *filter) const { filter->filter_ro(this); shell->apply_ro(filter); for(size_t i=0, n=holes->size(); iapply_ro(filter); } } void Polygon::apply_rw(GeometryComponentFilter *filter) { filter->filter_rw(this); shell->apply_rw(filter); for(size_t i=0, n=holes->size(); iapply_rw(filter); } } void Polygon::apply_rw(CoordinateSequenceFilter& filter) { shell->apply_rw(filter); if (! filter.isDone()) { for (size_t i=0, n=holes->size(); iapply_rw(filter); if (filter.isDone()) break; } } if (filter.isGeometryChanged()) geometryChanged(); } void Polygon::apply_ro(CoordinateSequenceFilter& filter) const { shell->apply_ro(filter); if (! filter.isDone()) { for (size_t i=0, n=holes->size(); iapply_ro(filter); if (filter.isDone()) break; } } //if (filter.isGeometryChanged()) geometryChanged(); } Polygon::~Polygon() { delete shell; for(size_t i=0, n=holes->size(); igetNumPoints() != 5 ) return false; const CoordinateSequence &seq = *(shell->getCoordinatesRO()); // check vertices have correct values const Envelope &env = *getEnvelopeInternal(); for (int i=0; i<5; i++) { double x = seq.getX(i); if (! (x == env.getMinX() || x == env.getMaxX())) return false; double y = seq.getY(i); if (! (y == env.getMinY() || y == env.getMaxY())) return false; } // check vertices are in right order double prevX = seq.getX(0); double prevY = seq.getY(0); for (int i = 1; i <= 4; i++) { double x = seq.getX(i); double y = seq.getY(i); bool xChanged = (x != prevX); bool yChanged = (y != prevY); if (xChanged == yChanged) return false; prevX = x; prevY = y; } return true; } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/PrecisionModel.cpp0000644000175000017500000001173712206417145017446 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/PrecisionModel.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef GEOS_INLINE # include #endif #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; namespace geos { namespace geom { // geos::geom const double PrecisionModel::maximumPreciseValue=9007199254740992.0; /*public*/ double PrecisionModel::makePrecise(double val) const { #if GEOS_DEBUG cerr<<"PrecisionModel["<(val); return static_cast(floatSingleVal); } if (modelType == FIXED) { // Use whatever happens to be the default rounding method const double ret = util::round(val*scale)/scale; return ret; } // modelType == FLOATING - no rounding necessary return val; } /*public*/ void PrecisionModel::makePrecise(Coordinate& coord) const { // optimization for full precision if (modelType==FLOATING) return; coord.x=makePrecise(coord.x); coord.y=makePrecise(coord.y); } /*public*/ PrecisionModel::PrecisionModel() : modelType(FLOATING), scale(0.0) { #if GEOS_DEBUG cerr<<"PrecisionModel["<( dgtsd > 0 ? std::ceil(dgtsd) : std::floor(dgtsd) ); maxSigDigits = dgts; } return maxSigDigits; } /*private*/ void PrecisionModel::setScale(double newScale) // throw IllegalArgumentException { if ( newScale <= 0 ) throw util::IllegalArgumentException("PrecisionModel scale cannot be 0"); scale = std::fabs(newScale); } /*public*/ double PrecisionModel::getOffsetX() const { return 0; } /*public*/ double PrecisionModel::getOffsetY() const { return 0; } string PrecisionModel::toString() const { ostringstream s; if (modelType == FLOATING) { s<<"Floating"; } else if (modelType == FLOATING_SINGLE) { s<<"Floating-Single"; } else if (modelType == FIXED) { s <<"Fixed (Scale=" << getScale() << " OffsetX=" << getOffsetX() << " OffsetY=" << getOffsetY() << ")"; } else { s<<"UNKNOWN"; } return s.str(); } bool operator==(const PrecisionModel& a, const PrecisionModel& b) { return a.isFloating() == b.isFloating() && a.getScale() == b.getScale(); } /*public*/ int PrecisionModel::compareTo(const PrecisionModel *other) const { int sigDigits=getMaximumSignificantDigits(); int otherSigDigits=other->getMaximumSignificantDigits(); return sigDigits #include namespace geos { namespace geom { // geos::geom void Triangle::inCentre(Coordinate& result) { // the lengths of the sides, labelled by their opposite vertex double len0 = p1.distance(p2); double len1 = p0.distance(p2); double len2 = p0.distance(p1); double circum = len0 + len1 + len2; double inCentreX = (len0 * p0.x + len1 * p1.x +len2 * p2.x) / circum; double inCentreY = (len0 * p0.y + len1 * p1.y +len2 * p2.y) / circum; result = Coordinate(inCentreX, inCentreY); } } // namespace geos::geom } // namespace geos geos-3.4.2/src/geom/prep/0000755000175000017500000000000012206417233014761 5ustar frankiefrankiegeos-3.4.2/src/geom/prep/AbstractPreparedPolygonContains.cpp0000644000175000017500000001516612206417145023775 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/AbstractPreparedPolygonContains.java r388 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include // std #include namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep // // private: // bool AbstractPreparedPolygonContains::isProperIntersectionImpliesNotContainedSituation( const geom::Geometry * testGeom) { // If the test geometry is polygonal we have the A/A situation. // In this case, a proper intersection indicates that // the Epsilon-Neighbourhood Exterior Intersection condition exists. // This condition means that in some small // area around the intersection point, there must exist a situation // where the interior of the test intersects the exterior of the target. // This implies the test is NOT contained in the target. if ( testGeom->getGeometryTypeId() == geos::geom::GEOS_MULTIPOLYGON || testGeom->getGeometryTypeId() == geos::geom::GEOS_POLYGON ) return true; // A single shell with no holes allows concluding that // a proper intersection implies not contained // (due to the Epsilon-Neighbourhood Exterior Intersection condition) if ( isSingleShell( prepPoly->getGeometry()) ) return true; return false; } bool AbstractPreparedPolygonContains::isSingleShell(const geom::Geometry& geom) { // handles single-element MultiPolygons, as well as Polygons if (geom.getNumGeometries() != 1) { return false; } const geom::Geometry* g = geom.getGeometryN(0); const geom::Polygon* poly = dynamic_cast(g); assert(poly); std::size_t numHoles = poly->getNumInteriorRing(); return (0 == numHoles); } void AbstractPreparedPolygonContains::findAndClassifyIntersections(const geom::Geometry* geom) { noding::SegmentString::ConstVect lineSegStr; noding::SegmentStringUtil::extractSegmentStrings(geom, lineSegStr); algorithm::LineIntersector li; noding::SegmentIntersectionDetector intDetector(&li); intDetector.setFindAllIntersectionTypes(true); prepPoly->getIntersectionFinder()->intersects(&lineSegStr, &intDetector); hasSegmentIntersection = intDetector.hasIntersection(); hasProperIntersection = intDetector.hasProperIntersection(); hasNonProperIntersection = intDetector.hasNonProperIntersection(); for (std::size_t i = 0, ni = lineSegStr.size(); i < ni; i++ ) { delete lineSegStr[i]; } } // // protected: // bool AbstractPreparedPolygonContains::eval( const geom::Geometry * geom) { // Do point-in-poly tests first, since they are cheaper and may result // in a quick negative result. // // If a point of any test components does not lie in target, // result is false bool isAllInTargetArea = isAllTestComponentsInTarget( geom); if ( !isAllInTargetArea ) return false; // If the test geometry consists of only Points, // then it is now sufficient to test if any of those // points lie in the interior of the target geometry. // If so, the test is contained. // If not, all points are on the boundary of the area, // which implies not contained. if ( requireSomePointInInterior && geom->getDimension() == 0 ) { bool isAnyInTargetInterior = isAnyTestComponentInTargetInterior( geom); return isAnyInTargetInterior; } // Check if there is any intersection between the line segments // in target and test. // In some important cases, finding a proper interesection implies that the // test geometry is NOT contained. // These cases are: // - If the test geometry is polygonal // - If the target geometry is a single polygon with no holes // In both of these cases, a proper intersection implies that there // is some portion of the interior of the test geometry lying outside // the target, which means that the test is not contained. bool properIntersectionImpliesNotContained = isProperIntersectionImpliesNotContainedSituation( geom); // find all intersection types which exist findAndClassifyIntersections( geom); if ( properIntersectionImpliesNotContained && hasProperIntersection ) return false; // If all intersections are proper // (i.e. no non-proper intersections occur) // we can conclude that the test geometry is not contained in the target area, // by the Epsilon-Neighbourhood Exterior Intersection condition. // In real-world data this is likely to be by far the most common situation, // since natural data is unlikely to have many exact vertex segment intersections. // Thus this check is very worthwhile, since it avoid having to perform // a full topological check. // // (If non-proper (vertex) intersections ARE found, this may indicate // a situation where two shells touch at a single vertex, which admits // the case where a line could cross between the shells and still be wholely contained in them. if ( hasSegmentIntersection && !hasNonProperIntersection ) return false; // If there is a segment intersection and the situation is not one // of the ones above, the only choice is to compute the full topological // relationship. This is because contains/covers is very sensitive // to the situation along the boundary of the target. if ( hasSegmentIntersection ) return fullTopologicalPredicate( geom); // This tests for the case where a ring of the target lies inside // a test polygon - which implies the exterior of the Target // intersects the interior of the Test, and hence the result is false if ( geom->getGeometryTypeId() == geos::geom::GEOS_MULTIPOLYGON || geom->getGeometryTypeId() == geos::geom::GEOS_POLYGON ) { // TODO: generalize this to handle GeometryCollections bool isTargetInTestArea = isAnyTargetComponentInAreaTest( geom, prepPoly->getRepresentativePoints()); if ( isTargetInTestArea ) return false; } return true; } // // public: // } // geos::geom::prep } // geos::geom } // geos geos-3.4.2/src/geom/prep/BasicPreparedGeometry.cpp0000644000175000017500000000651112206417145021712 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/BasicPreparedGeometry.java rev. 1.5 (JTS-1.10) * **********************************************************************/ #include #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep /* * * protected: * * */ void BasicPreparedGeometry::setGeometry( const geom::Geometry * geom ) { baseGeom = geom; geom::util::ComponentCoordinateExtracter::getCoordinates(*baseGeom, representativePts); } bool BasicPreparedGeometry::envelopesIntersect( const geom::Geometry* g) const { return baseGeom->getEnvelopeInternal()->intersects(g->getEnvelopeInternal()); } bool BasicPreparedGeometry::envelopeCovers( const geom::Geometry* g) const { return baseGeom->getEnvelopeInternal()->covers(g->getEnvelopeInternal()); } /* * public: */ BasicPreparedGeometry::BasicPreparedGeometry( const Geometry * geom) { setGeometry( geom); } BasicPreparedGeometry::~BasicPreparedGeometry( ) { } bool BasicPreparedGeometry::isAnyTargetComponentInTest( const geom::Geometry * testGeom) const { algorithm::PointLocator locator; for (size_t i=0, n=representativePts.size(); icontains(g); } bool BasicPreparedGeometry::containsProperly(const geom::Geometry * g) const { // since raw relate is used, provide some optimizations // short-circuit test if (! baseGeom->getEnvelopeInternal()->contains(g->getEnvelopeInternal())) { return false; } // otherwise, compute using relate mask return baseGeom->relate(g, "T**FF*FF*"); } bool BasicPreparedGeometry::coveredBy(const geom::Geometry * g) const { return baseGeom->coveredBy(g); } bool BasicPreparedGeometry::covers(const geom::Geometry * g) const { return baseGeom->covers(g); } bool BasicPreparedGeometry::crosses(const geom::Geometry * g) const { return baseGeom->crosses(g); } bool BasicPreparedGeometry::disjoint(const geom::Geometry * g) const { return ! intersects(g); } bool BasicPreparedGeometry::intersects(const geom::Geometry * g) const { return baseGeom->intersects(g); } bool BasicPreparedGeometry::overlaps(const geom::Geometry * g) const { return baseGeom->overlaps(g); } bool BasicPreparedGeometry::touches(const geom::Geometry * g) const { return baseGeom->touches(g); } bool BasicPreparedGeometry::within(const geom::Geometry * g) const { return baseGeom->within(g); } std::string BasicPreparedGeometry::toString() { return baseGeom->toString(); } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/Makefile.am0000644000175000017500000000130312206417145017014 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomprep.la INCLUDES = -I$(top_srcdir)/include ## these are full inlined # PolygonExtracter.cpp # PointExtracter.cpp # LinearComponentExtracter.cpp libgeomprep_la_SOURCES = \ AbstractPreparedPolygonContains.cpp \ BasicPreparedGeometry.cpp \ PreparedGeometry.cpp \ PreparedGeometryFactory.cpp \ PreparedLineString.cpp \ PreparedLineStringIntersects.cpp \ PreparedPoint.cpp \ PreparedPolygonContains.cpp \ PreparedPolygonContainsProperly.cpp \ PreparedPolygonCovers.cpp \ PreparedPolygon.cpp \ PreparedPolygonIntersects.cpp \ PreparedPolygonPredicate.cpp geos-3.4.2/src/geom/prep/Makefile.in0000644000175000017500000004355212206417163017041 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/geom/prep DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgeomprep_la_LIBADD = am_libgeomprep_la_OBJECTS = AbstractPreparedPolygonContains.lo \ BasicPreparedGeometry.lo PreparedGeometry.lo \ PreparedGeometryFactory.lo PreparedLineString.lo \ PreparedLineStringIntersects.lo PreparedPoint.lo \ PreparedPolygonContains.lo PreparedPolygonContainsProperly.lo \ PreparedPolygonCovers.lo PreparedPolygon.lo \ PreparedPolygonIntersects.lo PreparedPolygonPredicate.lo libgeomprep_la_OBJECTS = $(am_libgeomprep_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgeomprep_la_SOURCES) DIST_SOURCES = $(libgeomprep_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomprep.la INCLUDES = -I$(top_srcdir)/include # PolygonExtracter.cpp # PointExtracter.cpp # LinearComponentExtracter.cpp libgeomprep_la_SOURCES = \ AbstractPreparedPolygonContains.cpp \ BasicPreparedGeometry.cpp \ PreparedGeometry.cpp \ PreparedGeometryFactory.cpp \ PreparedLineString.cpp \ PreparedLineStringIntersects.cpp \ PreparedPoint.cpp \ PreparedPolygonContains.cpp \ PreparedPolygonContainsProperly.cpp \ PreparedPolygonCovers.cpp \ PreparedPolygon.cpp \ PreparedPolygonIntersects.cpp \ PreparedPolygonPredicate.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/geom/prep/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/geom/prep/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgeomprep.la: $(libgeomprep_la_OBJECTS) $(libgeomprep_la_DEPENDENCIES) $(CXXLINK) $(libgeomprep_la_OBJECTS) $(libgeomprep_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractPreparedPolygonContains.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BasicPreparedGeometry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedGeometry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedGeometryFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedLineString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedLineStringIntersects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygonContains.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygonContainsProperly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygonCovers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygonIntersects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedPolygonPredicate.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/geom/prep/PreparedGeometry.cpp0000644000175000017500000000150712206417145020750 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedGeometry.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedGeometryFactory.cpp0000644000175000017500000000401612206417145022276 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedGeometryFactory.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep const PreparedGeometry * PreparedGeometryFactory::create( const geom::Geometry * g) const { using geos::geom::GeometryTypeId; if (0 == g) { throw util::IllegalArgumentException("PreparedGeometry constructd with null Geometry object"); } PreparedGeometry* pg = 0; switch ( g->getGeometryTypeId() ) { case GEOS_MULTIPOINT: case GEOS_POINT: pg = new PreparedPoint( g); break; case GEOS_LINEARRING: case GEOS_LINESTRING: case GEOS_MULTILINESTRING: pg = new PreparedLineString( g); break; case GEOS_POLYGON: case GEOS_MULTIPOLYGON: pg = new PreparedPolygon( g); break; default: pg = new BasicPreparedGeometry( g); } return pg; } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedLineString.cpp0000644000175000017500000000341712206417145021235 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedLineString.java rev 1.3 (JTS-1.10) * **********************************************************************/ #include #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep /* * public: */ PreparedLineString::~PreparedLineString() { delete segIntFinder; for ( noding::SegmentString::ConstVect::size_type i = 0, ni = segStrings.size(); i < ni; ++i ) { delete segStrings[ i ]; } } noding::FastSegmentSetIntersectionFinder * PreparedLineString::getIntersectionFinder() { if (! segIntFinder) { noding::SegmentStringUtil::extractSegmentStrings( &getGeometry(), segStrings ); segIntFinder = new noding::FastSegmentSetIntersectionFinder( &segStrings ); } return segIntFinder; } bool PreparedLineString::intersects(const geom::Geometry * g) const { if (! envelopesIntersect(g)) { return false; } PreparedLineString& prep = *(const_cast(this)); return PreparedLineStringIntersects::intersects(prep, g); } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedLineStringIntersects.cpp0000644000175000017500000000536612206417145023306 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedLineStringIntersects.java r338 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include using namespace geos::algorithm; using namespace geos::geom::util; namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep bool PreparedLineStringIntersects::isAnyTestPointInTarget(const geom::Geometry * testGeom) const { /** * This could be optimized by using the segment index on the lineal target. * However, it seems like the L/P case would be pretty rare in practice. */ PointLocator locator; geom::Coordinate::ConstVect coords; ComponentCoordinateExtracter::getCoordinates( *testGeom, coords); for (size_t i=0, n=coords.size(); iintersects( &lineSegStr);// prepLine.getIntersectionFinder()->intersects(lineSegStr); for ( size_t i = 0, ni = lineSegStr.size(); i < ni; i++ ) { delete lineSegStr[ i ]; } if ( segsIntersect ) return true; // For L/L case we are done if ( g->getDimension() == 1 ) return false; // For L/A case, need to check for proper inclusion of the target in the test if ( g->getDimension() == 2 && prepLine.isAnyTargetComponentInTest(g) ) return true; // For L/P case, need to check if any points lie on line(s) if ( g->getDimension() == 0 ) return isAnyTestPointInTarget(g); return false; } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPoint.cpp0000644000175000017500000000201512206417145020241 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPoint.java rev. 1.2 (JTS-1.10) * **********************************************************************/ #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep bool PreparedPoint::intersects(const geom::Geometry* g) { if (! envelopesIntersect( g)) return false; // This avoids computing topology for the test geometry return isAnyTargetComponentInTest( g); } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPolygon.cpp0000644000175000017500000000744412206417145020612 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygon.java rev 1.7 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include // std #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep // // public: // PreparedPolygon::PreparedPolygon(const geom::Geometry * geom) : BasicPreparedGeometry(geom), segIntFinder(0), ptOnGeomLoc(0) { isRectangle = getGeometry().isRectangle(); } PreparedPolygon::~PreparedPolygon() { delete segIntFinder; delete ptOnGeomLoc; for ( std::size_t i = 0, ni = segStrings.size(); i < ni; i++ ) { delete segStrings[ i ]; } } noding::FastSegmentSetIntersectionFinder * PreparedPolygon:: getIntersectionFinder() const { if (! segIntFinder) { noding::SegmentStringUtil::extractSegmentStrings( &getGeometry(), segStrings ); segIntFinder = new noding::FastSegmentSetIntersectionFinder( &segStrings ); } return segIntFinder; } algorithm::locate::PointOnGeometryLocator * PreparedPolygon:: getPointLocator() const { if (! ptOnGeomLoc) ptOnGeomLoc = new algorithm::locate::IndexedPointInAreaLocator( getGeometry() ); return ptOnGeomLoc; } bool PreparedPolygon:: contains( const geom::Geometry * g) const { // short-circuit test if ( !envelopeCovers( g) ) return false; // optimization for rectangles if ( isRectangle ) { geom::Geometry const& geom = getGeometry(); geom::Polygon const& poly = dynamic_cast(geom); return operation::predicate::RectangleContains::contains(poly, *g); } return PreparedPolygonContains::contains(this, g); } bool PreparedPolygon:: containsProperly( const geom::Geometry* g) const { // short-circuit test if ( !envelopeCovers( g) ) return false; return PreparedPolygonContainsProperly::containsProperly( this, g); } bool PreparedPolygon:: covers( const geom::Geometry* g) const { // short-circuit test if ( !envelopeCovers( g) ) return false; // optimization for rectangle arguments if ( isRectangle) return true; return PreparedPolygonCovers::covers( this, g); } bool PreparedPolygon:: intersects( const geom::Geometry* g) const { // envelope test if ( !envelopesIntersect( g) ) return false; // optimization for rectangles if ( isRectangle ) { geom::Geometry const& geom = getGeometry(); geom::Polygon const& poly = dynamic_cast(geom); return operation::predicate::RectangleIntersects::intersects(poly, *g); } return PreparedPolygonIntersects::intersects( this, g); } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPolygonContains.cpp0000644000175000017500000000242212206417145022300 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygonContains.java rev 1.5 (JTS-1.10) * **********************************************************************/ #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep // // public: // PreparedPolygonContains::PreparedPolygonContains(const PreparedPolygon * const prepPoly) : AbstractPreparedPolygonContains( prepPoly) { } // // protected: // bool PreparedPolygonContains::fullTopologicalPredicate( const geom::Geometry * geom) { bool isContained = prepPoly->getGeometry().contains( geom); return isContained; } // // private: // } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPolygonContainsProperly.cpp0000644000175000017500000000501112206417145024032 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygonContainsProperly.java rev 1.5 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep // // private: // // // protected: // // // public: // bool PreparedPolygonContainsProperly::containsProperly( const geom::Geometry * geom) { // Do point-in-poly tests first, since they are cheaper and may result // in a quick negative result. // If a point of any test components does not lie in target, // result is false bool isAllInPrepGeomArea = isAllTestComponentsInTargetInterior( geom); if ( !isAllInPrepGeomArea ) return false; // If any segments intersect, result is false noding::SegmentString::ConstVect lineSegStr; noding::SegmentStringUtil::extractSegmentStrings( geom, lineSegStr); bool segsIntersect = prepPoly->getIntersectionFinder()->intersects( &lineSegStr); for ( size_t i = 0, ni = lineSegStr.size(); i < ni; i++ ) { delete lineSegStr[ i ]; } if (segsIntersect) return false; /** * Given that no segments intersect, if any vertex of the target * is contained in some test component. * the test is NOT properly contained. */ if ( geom->getGeometryTypeId() == geos::geom::GEOS_MULTIPOLYGON || geom->getGeometryTypeId() == geos::geom::GEOS_POLYGON ) { // TODO: generalize this to handle GeometryCollections bool isTargetGeomInTestArea = isAnyTargetComponentInAreaTest( geom, prepPoly->getRepresentativePoints()); if (isTargetGeomInTestArea) return false; } return true; } } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPolygonCovers.cpp0000644000175000017500000000220212206417145021757 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygonCovers.java rev 1.2 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #include #include #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep // // private: // // // protected: // bool PreparedPolygonCovers::fullTopologicalPredicate( const geom::Geometry * geom) { bool result = prepPoly->getGeometry().covers( geom); return result; } // // public: // } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/prep/PreparedPolygonIntersects.cpp0000644000175000017500000000513012206417145022644 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygonIntersects.java rev 1.6 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include namespace geos { namespace geom { // geos::geom namespace prep { // geos::geom::prep // // private: // // // protected: // // // public: // bool PreparedPolygonIntersects::intersects( const geom::Geometry * geom) { // Do point-in-poly tests first, since they are cheaper and may result // in a quick positive result. // If a point of any test components lie in target, result is true bool isInPrepGeomArea = isAnyTestComponentInTarget( geom); if ( isInPrepGeomArea ) return true; if ( dynamic_cast(geom) ) { // point-in-poly failed, no way there can be an intersection // (NOTE: isAnyTestComponentInTarget also checks for boundary) return false; } // If any segments intersect, result is true noding::SegmentString::ConstVect lineSegStr; noding::SegmentStringUtil::extractSegmentStrings( geom, lineSegStr ); bool segsIntersect = prepPoly->getIntersectionFinder()->intersects( &lineSegStr); for ( size_t i = 0, ni = lineSegStr.size(); i < ni; i++ ) { delete lineSegStr[ i ]; } if (segsIntersect) return true; // If the test has dimension = 2 as well, it is necessary to // test for proper inclusion of the target. // Since no segments intersect, it is sufficient to test representative points. if ( geom->getDimension() == 2) { // TODO: generalize this to handle GeometryCollections bool isPrepGeomInArea = isAnyTargetComponentInAreaTest( geom, prepPoly->getRepresentativePoints()); if ( isPrepGeomInArea ) return true; } return false; } } // geos::geom::prep } // geos::geom } // geos geos-3.4.2/src/geom/prep/PreparedPolygonPredicate.cpp0000644000175000017500000000732012206417145022424 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/prep/PreparedPolygonPredicate.java rev. 1.4 (JTS-1.10) * (2007-12-12) * **********************************************************************/ #include #include #include #include #include #include #include // std #include namespace geos { namespace geom { // geos.geom namespace prep { // geos.geom.prep // // private: // // // protected: // bool PreparedPolygonPredicate::isAllTestComponentsInTarget(const geom::Geometry* testGeom) const { geom::Coordinate::ConstVect pts; geom::util::ComponentCoordinateExtracter::getCoordinates(*testGeom, pts); for (std::size_t i = 0, ni = pts.size(); i < ni; i++) { const geom::Coordinate* pt = pts[i]; const int loc = prepPoly->getPointLocator()->locate(pt); if (geom::Location::EXTERIOR == loc) { return false; } } return true; } bool PreparedPolygonPredicate::isAllTestComponentsInTargetInterior( const geom::Geometry* testGeom) const { geom::Coordinate::ConstVect pts; geom::util::ComponentCoordinateExtracter::getCoordinates(*testGeom, pts); for (std::size_t i = 0, ni = pts.size(); i < ni; i++) { const geom::Coordinate * pt = pts[i]; const int loc = prepPoly->getPointLocator()->locate(pt); if (geom::Location::INTERIOR != loc) { return false; } } return true; } bool PreparedPolygonPredicate::isAnyTestComponentInTarget( const geom::Geometry* testGeom) const { geom::Coordinate::ConstVect pts; geom::util::ComponentCoordinateExtracter::getCoordinates(*testGeom, pts); for (std::size_t i = 0, ni = pts.size(); i < ni; i++) { const Coordinate* pt = pts[i]; const int loc = prepPoly->getPointLocator()->locate(pt); if (geom::Location::EXTERIOR != loc) { return true; } } return false; } bool PreparedPolygonPredicate::isAnyTestComponentInTargetInterior( const geom::Geometry * testGeom) const { geom::Coordinate::ConstVect pts; geom::util::ComponentCoordinateExtracter::getCoordinates(*testGeom, pts); for (std::size_t i = 0, ni = pts.size(); i < ni; i++) { const Coordinate * pt = pts[i]; const int loc = prepPoly->getPointLocator()->locate(pt); if (geom::Location::INTERIOR == loc) { return true; } } return false; } bool PreparedPolygonPredicate::isAnyTargetComponentInAreaTest( const geom::Geometry* testGeom, const geom::Coordinate::ConstVect* targetRepPts) const { algorithm::locate::SimplePointInAreaLocator piaLoc(testGeom); for (std::size_t i = 0, ni = targetRepPts->size(); i < ni; i++) { const geom::Coordinate * pt = (*targetRepPts)[i]; const int loc = piaLoc.locate(pt); if (geom::Location::EXTERIOR != loc) { return true; } } return false; } // // public: // } // namespace geos.geom.prep } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/0000755000175000017500000000000012206417233014770 5ustar frankiefrankiegeos-3.4.2/src/geom/util/ComponentCoordinateExtracter.cpp0000644000175000017500000000132612206417145023334 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/CoordinateOperation.cpp0000644000175000017500000000352712206417145021455 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util Geometry* CoordinateOperation::edit(const Geometry *geometry, const GeometryFactory *factory) { const LinearRing *ring = dynamic_cast(geometry); if (ring) { const CoordinateSequence *coords = ring->getCoordinatesRO(); CoordinateSequence *newCoords = edit(coords,geometry); // LinearRing instance takes over ownership of newCoords instance return factory->createLinearRing(newCoords); } const LineString *line = dynamic_cast(geometry); if (line) { const CoordinateSequence *coords = line->getCoordinatesRO(); CoordinateSequence *newCoords = edit(coords,geometry); return factory->createLineString(newCoords); } if (typeid(*geometry)==typeid(Point)) { CoordinateSequence *coords = geometry->getCoordinates(); CoordinateSequence *newCoords = edit(coords,geometry); delete coords; return factory->createPoint(newCoords); } return geometry->clone(); } } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/GeometryCombiner.cpp0000644000175000017500000000570012206417145020752 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006-2011 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryCombiner.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util Geometry* GeometryCombiner::combine(std::vector const& geoms) { GeometryCombiner combiner(geoms); return combiner.combine(); } Geometry* GeometryCombiner::combine(const Geometry* g0, const Geometry* g1) { std::vector geoms; geoms.push_back(const_cast(g0)); geoms.push_back(const_cast(g1)); GeometryCombiner combiner(geoms); return combiner.combine(); } Geometry* GeometryCombiner::combine(const Geometry* g0, const Geometry* g1, const Geometry* g2) { std::vector geoms; geoms.push_back(const_cast(g0)); geoms.push_back(const_cast(g1)); geoms.push_back(const_cast(g2)); GeometryCombiner combiner(geoms); return combiner.combine(); } GeometryCombiner::GeometryCombiner(std::vector const& geoms) : geomFactory(extractFactory(geoms)), skipEmpty(false), inputGeoms(geoms) { } GeometryFactory const* GeometryCombiner::extractFactory(std::vector const& geoms) { return geoms.empty() ? NULL : geoms.front()->getFactory(); } Geometry* GeometryCombiner::combine() { std::vector elems; std::vector::const_iterator end = inputGeoms.end(); for (std::vector::const_iterator i = inputGeoms.begin(); i != end; ++i) { extractElements(*i, elems); } if (elems.empty()) { if (geomFactory != NULL) { return geomFactory->createGeometryCollection(NULL); } return NULL; } // return the "simplest possible" geometry return geomFactory->buildGeometry(elems); } void GeometryCombiner::extractElements(Geometry* geom, std::vector& elems) { if (geom == NULL) return; for (std::size_t i = 0; i < geom->getNumGeometries(); ++i) { Geometry* elemGeom = const_cast(geom->getGeometryN(i)); if (skipEmpty && elemGeom->isEmpty()) continue; elems.push_back(elemGeom); } } } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/GeometryEditor.cpp0000644000175000017500000001225112206417145020441 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryEditor.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /** * Creates a new GeometryEditor object which will create * an edited Geometry with the same GeometryFactory as the input Geometry. */ GeometryEditor::GeometryEditor(){ factory=NULL; } /** * Creates a new GeometryEditor object which will create * the edited Geometry with the given {@link GeometryFactory} * * @param factory the GeometryFactory to create the edited Geometry with */ GeometryEditor::GeometryEditor(const GeometryFactory *newFactory){ factory=newFactory; } /** * Edit the input {@link Geometry} with the given edit operation. * Clients will create subclasses of GeometryEditorOperation or * CoordinateOperation to perform required modifications. * * @param geometry the Geometry to edit * @param operation the edit operation to carry out * @return a new {@link Geometry} which is the result of the editing */ Geometry* GeometryEditor::edit(const Geometry *geometry, GeometryEditorOperation *operation) { // if client did not supply a GeometryFactory, use the one from the input Geometry if (factory == NULL) factory=geometry->getFactory(); if ( const GeometryCollection *gc = dynamic_cast(geometry) ) { return editGeometryCollection(gc, operation); } if ( const Polygon *p = dynamic_cast(geometry) ) { return editPolygon(p, operation); } if ( dynamic_cast(geometry) ) { return operation->edit(geometry, factory); } if ( dynamic_cast(geometry) ) { return operation->edit(geometry, factory); } // Unsupported Geometry classes should be caught in the GeometryEditorOperation. assert(!"SHOULD NEVER GET HERE"); return NULL; } Polygon* GeometryEditor::editPolygon(const Polygon *polygon,GeometryEditorOperation *operation) { Polygon* newPolygon= dynamic_cast( operation->edit(polygon, factory) ); if (newPolygon->isEmpty()) { //RemoveSelectedPlugIn relies on this behaviour. [Jon Aquino] return newPolygon; } Geometry* editResult = edit(newPolygon->getExteriorRing(),operation); LinearRing* shell = dynamic_cast(editResult); if (shell->isEmpty()) { //RemoveSelectedPlugIn relies on this behaviour. [Jon Aquino] delete shell; delete newPolygon; return factory->createPolygon(NULL,NULL); } vector *holes=new vector; for (size_t i=0, n=newPolygon->getNumInteriorRing(); igetInteriorRingN(i), operation); LinearRing *hole = dynamic_cast(hole_geom); assert(hole); if (hole->isEmpty()) { continue; } holes->push_back(hole); } delete newPolygon; return factory->createPolygon(shell,holes); } GeometryCollection* GeometryEditor::editGeometryCollection(const GeometryCollection *collection, GeometryEditorOperation *operation) { GeometryCollection *newCollection = dynamic_cast( operation->edit(collection,factory) ); vector *geometries = new vector(); for (unsigned int i=0, n=newCollection->getNumGeometries(); igetGeometryN(i), operation); if (geometry->isEmpty()) { delete geometry; continue; } geometries->push_back(geometry); } if (typeid(*newCollection)==typeid(MultiPoint)) { delete newCollection; return factory->createMultiPoint(geometries); } else if (typeid(*newCollection)==typeid(MultiLineString)) { delete newCollection; return factory->createMultiLineString(geometries); } else if (typeid(*newCollection)==typeid(MultiPolygon)) { delete newCollection; return factory->createMultiPolygon(geometries); } else { delete newCollection; return factory->createGeometryCollection(geometries); } } } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/GeometryTransformer.cpp0000644000175000017500000002461412206417145021523 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/GeometryTransformer.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace std; namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util /*public*/ GeometryTransformer::GeometryTransformer() : factory(NULL), inputGeom(NULL), pruneEmptyGeometry(true), preserveGeometryCollectionType(true), preserveCollections(false), preserveType(false) {} GeometryTransformer::~GeometryTransformer() { } /*public*/ auto_ptr GeometryTransformer::transform(const Geometry* nInputGeom) { using geos::util::IllegalArgumentException; #if GEOS_DEBUG std::cerr << "GeometryTransformer::transform(Geometry " << nInputGeom << ");" << std::endl; #endif inputGeom = nInputGeom; factory = inputGeom->getFactory(); if ( const Point* p=dynamic_cast(inputGeom) ) return transformPoint(p, NULL); if ( const MultiPoint* mp=dynamic_cast(inputGeom) ) return transformMultiPoint(mp, NULL); if ( const LinearRing* lr=dynamic_cast(inputGeom) ) return transformLinearRing(lr, NULL); if ( const LineString* ls=dynamic_cast(inputGeom) ) return transformLineString(ls, NULL); if ( const MultiLineString* mls=dynamic_cast(inputGeom) ) return transformMultiLineString(mls, NULL); if ( const Polygon* p=dynamic_cast(inputGeom) ) return transformPolygon(p, NULL); if ( const MultiPolygon* mp=dynamic_cast(inputGeom) ) return transformMultiPolygon(mp, NULL); if ( const GeometryCollection* gc=dynamic_cast(inputGeom) ) return transformGeometryCollection(gc, NULL); throw IllegalArgumentException("Unknown Geometry subtype."); } std::auto_ptr GeometryTransformer::createCoordinateSequence( std::auto_ptr< std::vector > coords) { return std::auto_ptr( factory->getCoordinateSequenceFactory()->create( coords.release()) ); } std::auto_ptr GeometryTransformer::transformCoordinates( const CoordinateSequence* coords, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformCoordinates(CoordinateSequence " << coords <<", Geometry " << parent << ");" << std::endl; #endif return std::auto_ptr(coords->clone()); } Geometry::AutoPtr GeometryTransformer::transformPoint( const Point* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformPoint(Point " << geom <<", Geometry " << parent << ");" << std::endl; #endif CoordinateSequence::AutoPtr cs(transformCoordinates( geom->getCoordinatesRO(), geom)); return Geometry::AutoPtr(factory->createPoint(cs.release())); } Geometry::AutoPtr GeometryTransformer::transformMultiPoint( const MultiPoint* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformMultiPoint(MultiPoint " << geom <<", Geometry " << parent << ");" << std::endl; #endif vector* transGeomList = new vector(); for (unsigned int i=0, n=geom->getNumGeometries(); i(geom->getGeometryN(i)); assert(p); Geometry::AutoPtr transformGeom = transformPoint(p, geom); if ( transformGeom.get() == NULL ) continue; if ( transformGeom->isEmpty() ) continue; // If an exception is thrown we'll leak transGeomList->push_back(transformGeom.release()); } return Geometry::AutoPtr(factory->buildGeometry(transGeomList)); } Geometry::AutoPtr GeometryTransformer::transformLinearRing( const LinearRing* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformLinearRing(LinearRing " << geom <<", Geometry " << parent << ");" << std::endl; #endif CoordinateSequence::AutoPtr seq(transformCoordinates( geom->getCoordinatesRO(), geom)); unsigned int seqSize = seq->size(); // ensure a valid LinearRing if ( seqSize > 0 && seqSize < 4 && ! preserveType ) { return factory->createLineString(seq); } return factory->createLinearRing(seq); } Geometry::AutoPtr GeometryTransformer::transformLineString( const LineString* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformLineString(LineString " << geom <<", Geometry " << parent << ");" << std::endl; #endif // should check for 1-point sequences and downgrade them to points return factory->createLineString( transformCoordinates(geom->getCoordinatesRO(), geom)); } Geometry::AutoPtr GeometryTransformer::transformMultiLineString( const MultiLineString* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformMultiLineString(MultiLineString " << geom <<", Geometry " << parent << ");" << std::endl; #endif vector* transGeomList = new vector(); for (unsigned int i=0, n=geom->getNumGeometries(); i( geom->getGeometryN(i)); assert(l); Geometry::AutoPtr transformGeom = transformLineString(l, geom); if ( transformGeom.get() == NULL ) continue; if ( transformGeom->isEmpty() ) continue; // If an exception is thrown we'll leak transGeomList->push_back(transformGeom.release()); } return Geometry::AutoPtr(factory->buildGeometry(transGeomList)); } Geometry::AutoPtr GeometryTransformer::transformPolygon( const Polygon* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformPolygon(Polygon " << geom <<", Geometry " << parent << ");" << std::endl; #endif bool isAllValidLinearRings = true; const LinearRing* lr = dynamic_cast( geom->getExteriorRing()); assert(lr); Geometry::AutoPtr shell = transformLinearRing(lr, geom); if ( shell.get() == NULL || ! dynamic_cast(shell.get()) || shell->isEmpty() ) { isAllValidLinearRings = false; } vector* holes = new vector(); for (unsigned int i=0, n=geom->getNumInteriorRing(); i( geom->getInteriorRingN(i)); assert(lr); Geometry::AutoPtr hole(transformLinearRing(lr, geom)); if ( hole.get() == NULL || hole->isEmpty() ) { continue; } if ( ! dynamic_cast(hole.get()) ) { isAllValidLinearRings = false; } holes->push_back(hole.release()); } if ( isAllValidLinearRings) { Geometry* sh = shell.release(); LinearRing* lr = dynamic_cast(sh); assert(lr); return Geometry::AutoPtr(factory->createPolygon(lr, holes)); } else { // would like to use a manager constructor here vector* components = new vector(); if ( shell.get() != NULL ) { components->push_back(shell.release()); } components->insert(components->end(), holes->begin(), holes->end()); delete holes; // :( return Geometry::AutoPtr(factory->buildGeometry(components)); } } Geometry::AutoPtr GeometryTransformer::transformMultiPolygon( const MultiPolygon* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformMultiPolygon(MultiPolygon " << geom <<", Geometry " << parent << ");" << std::endl; #endif auto_ptr< vector > transGeomList( new vector() ); for (unsigned int i=0, n=geom->getNumGeometries(); i( geom->getGeometryN(i)); assert(p); Geometry::AutoPtr transformGeom = transformPolygon(p, geom); if ( transformGeom.get() == NULL ) continue; if ( transformGeom->isEmpty() ) continue; // If an exception is thrown we'll leak transGeomList->push_back(transformGeom.release()); } return Geometry::AutoPtr(factory->buildGeometry(transGeomList.release())); } Geometry::AutoPtr GeometryTransformer::transformGeometryCollection( const GeometryCollection* geom, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); #if GEOS_DEBUG std::cerr << "GeometryTransformer::transformGeometryCollection(GeometryCollection " << geom <<", Geometry " << parent << ");" << std::endl; #endif vector* transGeomList = new vector(); for (unsigned int i=0, n=geom->getNumGeometries(); igetGeometryN(i)); // no parent ? if ( transformGeom.get() == NULL ) continue; if ( pruneEmptyGeometry && transformGeom->isEmpty() ) continue; // If an exception is thrown we'll leak transGeomList->push_back(transformGeom.release()); } if ( preserveGeometryCollectionType ) { return Geometry::AutoPtr(factory->createGeometryCollection( transGeomList)); } else { return Geometry::AutoPtr(factory->buildGeometry(transGeomList)); } } } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/Makefile.am0000644000175000017500000000060312206417145017025 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomutil.la INCLUDES = -I$(top_srcdir)/include libgeomutil_la_SOURCES = \ ComponentCoordinateExtracter.cpp \ CoordinateOperation.cpp \ GeometryEditor.cpp \ GeometryTransformer.cpp \ ShortCircuitedGeometryVisitor.cpp \ SineStarFactory.cpp \ GeometryCombiner.cpp geos-3.4.2/src/geom/util/Makefile.in0000644000175000017500000004156312206417163017050 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/geom/util DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgeomutil_la_LIBADD = am_libgeomutil_la_OBJECTS = ComponentCoordinateExtracter.lo \ CoordinateOperation.lo GeometryEditor.lo \ GeometryTransformer.lo ShortCircuitedGeometryVisitor.lo \ SineStarFactory.lo GeometryCombiner.lo libgeomutil_la_OBJECTS = $(am_libgeomutil_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgeomutil_la_SOURCES) DIST_SOURCES = $(libgeomutil_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomutil.la INCLUDES = -I$(top_srcdir)/include libgeomutil_la_SOURCES = \ ComponentCoordinateExtracter.cpp \ CoordinateOperation.cpp \ GeometryEditor.cpp \ GeometryTransformer.cpp \ ShortCircuitedGeometryVisitor.cpp \ SineStarFactory.cpp \ GeometryCombiner.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/geom/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/geom/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgeomutil.la: $(libgeomutil_la_OBJECTS) $(libgeomutil_la_DEPENDENCIES) $(CXXLINK) $(libgeomutil_la_OBJECTS) $(libgeomutil_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ComponentCoordinateExtracter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoordinateOperation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryCombiner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryEditor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryTransformer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ShortCircuitedGeometryVisitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SineStarFactory.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/geom/util/ShortCircuitedGeometryVisitor.cpp0000644000175000017500000000252312206417145023527 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geom/util/ShortCircuitedGeometryVisitor.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #include #include #include using namespace geos::geom; namespace geos { namespace geom { // geos.geom namespace util { // geos.geom.util void ShortCircuitedGeometryVisitor::applyTo(const Geometry &geom) { for (unsigned int i=0, n=geom.getNumGeometries(); i(element)) { applyTo(*element); } else { // calls the abstract virtual visit(*element); if (isDone()) done = true; } if ( done ) return; } } } // namespace geos.geom.util } // namespace geos.geom } // namespace geos geos-3.4.2/src/geom/util/SineStarFactory.cpp0000644000175000017500000000553012206417145020561 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli #include #include #include #include #include #include #include #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif using namespace std; //using namespace geos::geom; namespace geos { namespace geom { // geos::geom namespace util { // geos::geom::util /* public */ auto_ptr SineStarFactory::createSineStar() const { auto_ptr env ( dim.getEnvelope() ); double radius = env->getWidth() / 2.0; double armRatio = armLengthRatio; if (armRatio < 0.0) armRatio = 0.0; if (armRatio > 1.0) armRatio = 1.0; double armMaxLen = armRatio * radius; double insideRadius = (1 - armRatio) * radius; double centreX = env->getMinX() + radius; double centreY = env->getMinY() + radius; auto_ptr< vector > pts ( new vector(nPts+1) ); int iPt = 0; for (int i = 0; i < nPts; i++) { // the fraction of the way thru the current arm - in [0,1] double ptArcFrac = (i / (double) nPts) * numArms; double armAngFrac = ptArcFrac - floor(ptArcFrac); // the angle for the current arm - in [0,2Pi] // (each arm is a complete sine wave cycle) double armAng = 2 * M_PI * armAngFrac; // the current length of the arm double armLenFrac = (cos(armAng) + 1.0) / 2.0; // the current radius of the curve (core + arm) double curveRadius = insideRadius + armMaxLen * armLenFrac; // the current angle of the curve double ang = i * (2 * M_PI / nPts); double x = curveRadius * cos(ang) + centreX; double y = curveRadius * sin(ang) + centreY; (*pts)[iPt++] = coord(x, y); } (*pts)[iPt] = Coordinate((*pts)[0]); auto_ptr cs ( geomFact->getCoordinateSequenceFactory()->create( pts.release() ) ); auto_ptr ring ( geomFact->createLinearRing( cs.release() ) ); auto_ptr poly ( geomFact->createPolygon(ring.release(), 0) ); return poly; } } // namespace geos::geom::util } // namespace geos::geom } // namespace geos geos-3.4.2/src/geomgraph/0000755000175000017500000000000012206417237015041 5ustar frankiefrankiegeos-3.4.2/src/geomgraph/Depth.cpp0000644000175000017500000000705712206417146016621 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Depth.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #define NULL_VALUE -1 using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph int Depth::depthAtLocation(int location) { if (location == Location::EXTERIOR) return 0; if (location == Location::INTERIOR) return 1; return NULL_VALUE; } Depth::Depth() { // initialize depth array to a sentinel value for (int i=0; i<2; i++) { for (int j=0; j<3;j++) { depth[i][j]=NULL_VALUE; } } } Depth::~Depth() { // delete[] &depth; } int Depth::getDepth(int geomIndex,int posIndex) const { return depth[geomIndex][posIndex]; } void Depth::setDepth(int geomIndex,int posIndex,int depthValue) { depth[geomIndex][posIndex] = depthValue; } int Depth::getLocation(int geomIndex,int posIndex) const { if (depth[geomIndex][posIndex] <= 0) return Location::EXTERIOR; return Location::INTERIOR; } void Depth::add(int geomIndex,int posIndex,int location) { if (location == Location::INTERIOR) depth[geomIndex][posIndex]++; } /** * A Depth object is null (has never been initialized) if all depths are null. */ bool Depth::isNull() const { for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { if (depth[i][j] != NULL_VALUE) return false; } } return true; } bool Depth::isNull(int geomIndex) const { return depth[geomIndex][1] == NULL_VALUE; } bool Depth::isNull(int geomIndex, int posIndex) const { return depth[geomIndex][posIndex] == NULL_VALUE; } int Depth::getDelta(int geomIndex) const { return depth[geomIndex][Position::RIGHT]-depth[geomIndex][Position::LEFT]; } /** * Normalize the depths for each geometry, if they are non-null. * A normalized depth * has depth values in the set { 0, 1 }. * Normalizing the depths * involves reducing the depths by the same amount so that at least * one of them is 0. If the remaining value is > 0, it is set to 1. */ void Depth::normalize() { for (int i=0; i<2; i++) { if (!isNull(i)) { int minDepth=depth[i][1]; if (depth[i][2]minDepth) newValue = 1; depth[i][j] = newValue; } } } } void Depth::add(const Label& lbl) { for (int i=0; i<2; i++) { for (int j=1; j<3; j++) { int loc=lbl.getLocation(i,j); if (loc==Location::EXTERIOR || loc==Location::INTERIOR) { // initialize depth if it is null, otherwise // add this location value if (isNull(i,j)) { depth[i][j]=depthAtLocation(loc); } else depth[i][j]+=depthAtLocation(loc); } } } } string Depth::toString() const { ostringstream s; s<<"A:"< * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/DirectedEdge.java r428 (JTS-1.12) * **********************************************************************/ #include #include #include // for printing #include #include #include #include #include #include #include #include #include using namespace geos::geom; #ifndef GEOS_INLINE # include "geos/geomgraph/DirectedEdge.inl" #endif namespace geos { namespace geomgraph { // geos.geomgraph /* public static */ int DirectedEdge::depthFactor(int currLocation, int nextLocation) { if (currLocation==Location::EXTERIOR && nextLocation==Location::INTERIOR) return 1; else if (currLocation==Location::INTERIOR && nextLocation==Location::EXTERIOR) return -1; return 0; } #if 0 DirectedEdge::DirectedEdge(): EdgeEnd(), isInResultVar(false), isVisitedVar(false), sym(NULL), next(NULL), nextMin(NULL), edgeRing(NULL), minEdgeRing(NULL) { depth[0]=0; depth[1]=-999; depth[2]=-999; } #endif DirectedEdge::DirectedEdge(Edge *newEdge, bool newIsForward): EdgeEnd(newEdge), isForwardVar(newIsForward), isInResultVar(false), isVisitedVar(false), sym(NULL), next(NULL), nextMin(NULL), edgeRing(NULL), minEdgeRing(NULL) { depth[0]=0; depth[1]=-999; depth[2]=-999; assert(newEdge); assert(newEdge->getNumPoints() >= 2); if (isForwardVar) { init(edge->getCoordinate(0), edge->getCoordinate(1)); } else { int n=edge->getNumPoints()-1; init(edge->getCoordinate(n), edge->getCoordinate(n-1)); } computeDirectedLabel(); } /*public*/ void DirectedEdge::setDepth(int position, int newDepth) { if (depth[position]!=-999) { if (depth[position]!=newDepth) throw util::TopologyException("assigned depths do not match", getCoordinate()); //Assert.isTrue(depth[position] == depthVal, "assigned depths do not match at " + getCoordinate()); } depth[position]=newDepth; } /*public*/ int DirectedEdge::getDepthDelta() { int depthDelta=edge->getDepthDelta(); if (!isForwardVar) depthDelta=-depthDelta; return depthDelta; } /*public*/ void DirectedEdge::setVisitedEdge(bool newIsVisited) { setVisited(newIsVisited); assert(sym); sym->setVisited(newIsVisited); } /*public*/ bool DirectedEdge::isLineEdge() { bool isLine = label.isLine(0) || label.isLine(1); bool isExteriorIfArea0=!label.isArea(0) || label.allPositionsEqual(0,Location::EXTERIOR); bool isExteriorIfArea1=!label.isArea(1) || label.allPositionsEqual(1,Location::EXTERIOR); return isLine && isExteriorIfArea0 && isExteriorIfArea1; } /*public*/ bool DirectedEdge::isInteriorAreaEdge() { bool isInteriorAreaEdge=true; for (int i=0; i<2; i++) { if (!(label.isArea(i) && label.getLocation(i,Position::LEFT )==Location::INTERIOR && label.getLocation(i,Position::RIGHT)==Location::INTERIOR)) { isInteriorAreaEdge=false; } } return isInteriorAreaEdge; } /*private*/ void DirectedEdge::computeDirectedLabel() { label = edge->getLabel(); if (!isForwardVar) label.flip(); } /*public*/ void DirectedEdge::setEdgeDepths(int position, int newDepth) { // get the depth transition delta from R to L for this directed Edge int depthDelta=getEdge()->getDepthDelta(); if (!isForwardVar) depthDelta=-depthDelta; // if moving from L to R instead of R to L must change sign of delta int directionFactor=1; if (position==Position::LEFT) directionFactor=-1; int oppositePos=Position::opposite(position); int delta=depthDelta*directionFactor; //TESTINGint delta = depthDelta * DirectedEdge.depthFactor(loc, oppositeLoc); int oppositeDepth=newDepth+delta; setDepth(position,newDepth); setDepth(oppositePos,oppositeDepth); } /*public*/ std::string DirectedEdge::print() { std::stringstream ss; ss << EdgeEnd::print(); ss << " " << depth[Position::LEFT] << "/" << depth[Position::RIGHT] << " (" << getDepthDelta() << ")"; if (isInResultVar) { ss << " inResult"; } ss << " EdgeRing: " << edgeRing; if ( edgeRing ) { EdgeRing* er = edgeRing; ss << " (" << *er << ")"; } return ss.str(); } /*public*/ std::string DirectedEdge::printEdge() { //std::string out=print(); std::string out(""); if (isForwardVar) out += edge->print(); else out += edge->printReverse(); return out; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/DirectedEdgeStar.cpp0000644000175000017500000003001012206417146020700 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/DirectedEdgeStar.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 1 #endif //using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public*/ void DirectedEdgeStar::insert(EdgeEnd *ee) { assert(ee); assert(dynamic_cast(ee)); DirectedEdge *de=static_cast(ee); insertEdgeEnd(de); } /*public*/ int DirectedEdgeStar::getOutgoingDegree() { int degree = 0; EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); if (de->isInResult()) ++degree; } return degree; } /*public*/ int DirectedEdgeStar::getOutgoingDegree(EdgeRing *er) { int degree = 0; EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); if (de->getEdgeRing()==er) ++degree; } return degree; } /*public*/ DirectedEdge* DirectedEdgeStar::getRightmostEdge() { EdgeEndStar::iterator it=begin(); if ( it==end() ) return NULL; assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de0=static_cast(*it); ++it; if ( it==end() ) return de0; it=end(); --it; assert(*it); assert(dynamic_cast(*it)); DirectedEdge *deLast=static_cast(*it); assert(de0); int quad0=de0->getQuadrant(); assert(deLast); int quad1=deLast->getQuadrant(); if (Quadrant::isNorthern(quad0) && Quadrant::isNorthern(quad1)) return de0; else if (!Quadrant::isNorthern(quad0) && !Quadrant::isNorthern(quad1)) return deLast; else { // edges are in different hemispheres - make sure we return one that is non-horizontal //DirectedEdge *nonHorizontalEdge=NULL; if (de0->getDy()!=0) return de0; else if (deLast->getDy()!=0) return deLast; } assert(0); // found two horizontal edges incident on node return NULL; } /*public*/ void DirectedEdgeStar::computeLabelling(std::vector *geom) //throw(TopologyException *) { // this call can throw a TopologyException // we don't have any cleanup to do... EdgeEndStar::computeLabelling(geom); // determine the overall labelling for this DirectedEdgeStar // (i.e. for the node it is based at) label=Label(Location::UNDEF); EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { EdgeEnd *ee=*it; assert(ee); Edge *e=ee->getEdge(); assert(e); const Label& eLabel=e->getLabel(); for (int i=0; i<2; ++i) { int eLoc=eLabel.getLocation(i); if (eLoc==Location::INTERIOR || eLoc==Location::BOUNDARY) label.setLocation(i, Location::INTERIOR); } } } /*public*/ void DirectedEdgeStar::mergeSymLabels() { EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); Label& deLabel = de->getLabel(); DirectedEdge* deSym=de->getSym(); assert(deSym); const Label& labelToMerge = deSym->getLabel(); deLabel.merge(labelToMerge); } } /*public*/ void DirectedEdgeStar::updateLabelling(const Label& nodeLabel) { EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { DirectedEdge *de=dynamic_cast(*it); assert(de); Label& deLabel = de->getLabel(); deLabel.setAllLocationsIfNull(0, nodeLabel.getLocation(0)); deLabel.setAllLocationsIfNull(1, nodeLabel.getLocation(1)); } } /*private*/ std::vector* DirectedEdgeStar::getResultAreaEdges() { if (resultAreaEdgeList!=NULL) return resultAreaEdgeList; resultAreaEdgeList=new std::vector(); EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); if (de->isInResult() || de->getSym()->isInResult()) resultAreaEdgeList->push_back(de); } return resultAreaEdgeList; } /*public*/ void DirectedEdgeStar::linkResultDirectedEdges() // throw(TopologyException *) { // make sure edges are copied to resultAreaEdges list getResultAreaEdges(); // find first area edge (if any) to start linking at DirectedEdge *firstOut=NULL; DirectedEdge *incoming=NULL; int state=SCANNING_FOR_INCOMING; // link edges in CCW order for (std::vector::iterator i=resultAreaEdgeList->begin(), iEnd=resultAreaEdgeList->end(); i != iEnd; ++i) { DirectedEdge *nextOut=*i; assert(nextOut); // skip de's that we're not interested in if (!nextOut->getLabel().isArea()) continue; DirectedEdge *nextIn=nextOut->getSym(); assert(nextIn); // record first outgoing edge, in order to link the last incoming edge if (firstOut==NULL && nextOut->isInResult()) firstOut=nextOut; switch (state) { case SCANNING_FOR_INCOMING: if (!nextIn->isInResult()) continue; incoming=nextIn; state=LINKING_TO_OUTGOING; break; case LINKING_TO_OUTGOING: if (!nextOut->isInResult()) continue; incoming->setNext(nextOut); state=SCANNING_FOR_INCOMING; break; } } if (state==LINKING_TO_OUTGOING) { if (firstOut==NULL) { throw util::TopologyException("no outgoing dirEdge found", getCoordinate()); } assert(firstOut->isInResult()); // unable to link last incoming dirEdge assert(incoming); incoming->setNext(firstOut); } } /*public*/ void DirectedEdgeStar::linkMinimalDirectedEdges(EdgeRing *er) { // find first area edge (if any) to start linking at DirectedEdge *firstOut=NULL; DirectedEdge *incoming=NULL; int state=SCANNING_FOR_INCOMING; // link edges in CW order for (std::vector::reverse_iterator i=resultAreaEdgeList->rbegin(), iEnd=resultAreaEdgeList->rend(); i != iEnd; ++i) { //DirectedEdge *nextOut=(*resultAreaEdgeList)[i]; DirectedEdge *nextOut=*i; assert(nextOut); DirectedEdge *nextIn=nextOut->getSym(); assert(nextIn); // record first outgoing edge, in order to link the last incoming edge if (firstOut==NULL && nextOut->getEdgeRing()==er) firstOut=nextOut; switch (state) { case SCANNING_FOR_INCOMING: if (nextIn->getEdgeRing()!=er) continue; incoming=nextIn; state = LINKING_TO_OUTGOING; break; case LINKING_TO_OUTGOING: if (nextOut->getEdgeRing()!=er) continue; assert(incoming); incoming->setNextMin(nextOut); state = SCANNING_FOR_INCOMING; break; } } if (state==LINKING_TO_OUTGOING) { assert(firstOut!=NULL); // found null for first outgoing dirEdge assert(firstOut->getEdgeRing()==er); // unable to link last incoming dirEdge assert(incoming); incoming->setNextMin(firstOut); } } /*public*/ void DirectedEdgeStar::linkAllDirectedEdges() { //getEdges(); // find first area edge (if any) to start linking at DirectedEdge *prevOut=NULL; DirectedEdge *firstIn=NULL; // link edges in CW order EdgeEndStar::reverse_iterator rbeginIt=rbegin(); EdgeEndStar::reverse_iterator rendIt=rend(); for(EdgeEndStar::reverse_iterator it=rbeginIt; it!=rendIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *nextOut=static_cast(*it); DirectedEdge *nextIn=nextOut->getSym(); assert(nextIn); if (firstIn==NULL) firstIn=nextIn; if (prevOut!=NULL) nextIn->setNext(prevOut); // record outgoing edge, in order to link the last incoming edge prevOut=nextOut; } assert(firstIn); firstIn->setNext(prevOut); } /*public*/ void DirectedEdgeStar::findCoveredLineEdges() { // Since edges are stored in CCW order around the node, // as we move around the ring we move from the right to the left side of the edge /** * Find first DirectedEdge of result area (if any). * The interior of the result is on the RHS of the edge, * so the start location will be: * - INTERIOR if the edge is outgoing * - EXTERIOR if the edge is incoming */ int startLoc=Location::UNDEF; EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *nextOut=static_cast(*it); DirectedEdge *nextIn=nextOut->getSym(); assert(nextIn); if (!nextOut->isLineEdge()) { if (nextOut->isInResult()) { startLoc=Location::INTERIOR; break; } if (nextIn->isInResult()) { startLoc=Location::EXTERIOR; break; } } } // no A edges found, so can't determine if L edges are covered or not if (startLoc==Location::UNDEF) return; /** * move around ring, keeping track of the current location * (Interior or Exterior) for the result area. * If L edges are found, mark them as covered if they are in the interior */ int currLoc=startLoc; for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *nextOut=static_cast(*it); DirectedEdge *nextIn=nextOut->getSym(); assert(nextIn); if (nextOut->isLineEdge()) { nextOut->getEdge()->setCovered(currLoc==Location::INTERIOR); } else { // edge is an Area edge if (nextOut->isInResult()) currLoc=Location::EXTERIOR; if (nextIn->isInResult()) currLoc=Location::INTERIOR; } } } /*public*/ void DirectedEdgeStar::computeDepths(DirectedEdge *de) { assert(de); EdgeEndStar::iterator edgeIterator=find(de); int startDepth=de->getDepth(Position::LEFT); int targetLastDepth=de->getDepth(Position::RIGHT); // compute the depths from this edge up to the end of the edge array EdgeEndStar::iterator nextEdgeIterator=edgeIterator; ++nextEdgeIterator; int nextDepth=computeDepths(nextEdgeIterator, end(), startDepth); // compute the depths for the initial part of the array int lastDepth=computeDepths(begin(), edgeIterator, nextDepth); if (lastDepth!=targetLastDepth) throw util::TopologyException("depth mismatch at ", de->getCoordinate()); } /*public*/ int DirectedEdgeStar::computeDepths(EdgeEndStar::iterator startIt, EdgeEndStar::iterator endIt, int startDepth) { int currDepth=startDepth; for (EdgeEndStar::iterator it=startIt; it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *nextDe=static_cast(*it); nextDe->setEdgeDepths(Position::RIGHT, currDepth); currDepth=nextDe->getDepth(Position::LEFT); } return currDepth; } /*public*/ std::string DirectedEdgeStar::print() { std::string out="DirectedEdgeStar: " + getCoordinate().toString(); EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); assert(de); out+="out "; out+=de->print(); out+="\n"; out+="in "; assert(de->getSym()); out+=de->getSym()->print(); out+="\n"; } return out; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/Edge.cpp0000644000175000017500000001556512206417146016424 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Edge.java r428 (JTS-1.12+) * **********************************************************************/ #ifdef _MSC_VER #pragma warning(disable:4355) #endif #include #include #include #include #include #include #include #include #include #include #include // FIXME: shouldn't use #include //#define GEOS_DEBUG_INTERSECT 0 #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG || GEOS_DEBUG_INTERSECT #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph using namespace geos::geomgraph::index; using namespace geos::algorithm; /** * Updates an IM from the label for an edge. * Handles edges from both L and A geometrys. */ void Edge::updateIM(const Label& lbl, IntersectionMatrix& im) { im.setAtLeastIfValid(lbl.getLocation(0,Position::ON), lbl.getLocation(1,Position::ON), 1); if (lbl.isArea()) { im.setAtLeastIfValid(lbl.getLocation(0,Position::LEFT), lbl.getLocation(1,Position::LEFT), 2); im.setAtLeastIfValid(lbl.getLocation(0,Position::RIGHT), lbl.getLocation(1,Position::RIGHT), 2); } } /*public*/ Edge::~Edge() { //cerr<<"["<getAt(0)==pts->getAt(2) ) return true; return false; } Edge* Edge::getCollapsedEdge() { testInvariant(); CoordinateSequence *newPts = new CoordinateArraySequence(2); newPts->setAt(pts->getAt(0),0); newPts->setAt(pts->getAt(1),1); return new Edge(newPts, Label::toLineLabel(label)); } /*public*/ void Edge::addIntersections(LineIntersector *li, int segmentIndex, int geomIndex) { #if GEOS_DEBUG cerr<<"["<toString()<<", "<getIntersectionNum();i++) { addIntersection(li,segmentIndex,geomIndex,i); } testInvariant(); } /*public*/ void Edge::addIntersection(LineIntersector *li, int segmentIndex, int geomIndex, int intIndex) { #if GEOS_DEBUG std::cerr << "["<toString()<<", "<getIntersection(intIndex); unsigned int normalizedSegmentIndex=segmentIndex; double dist=li->getEdgeDistance(geomIndex,intIndex); // normalize the intersection point location unsigned int nextSegIndex=normalizedSegmentIndex+1; unsigned int npts=getNumPoints(); if (nextSegIndexgetAt(nextSegIndex); // Normalize segment index if intPt falls on vertex // The check for point equality is 2D only - Z values are ignored if (intPt.equals2D(nextPt)) { normalizedSegmentIndex=nextSegIndex; dist=0.0; } } /* * Add the intersection point to edge intersection list. */ #if GEOS_DEBUG cerr<<"Edge::addIntersection adding to edge intersection list point "<getAt(i); const Coordinate &e2pi=e.pts->getAt(i); const Coordinate &e2piRev=e.pts->getAt(iRev); if ( !e1pi.equals2D(e2pi) ) isEqualForward=false; if ( !e1pi.equals2D(e2piRev) ) isEqualReverse=false; if ( !isEqualForward && !isEqualReverse ) return false; } return true; } /*public*/ bool Edge::isPointwiseEqual(const Edge *e) const { testInvariant(); #if GEOS_DEBUG > 2 cerr<<"Edge::isPointwiseEqual call"<getNumPoints(); if (npts!=enpts) return false; #if GEOS_DEBUG cerr<<"Edge::isPointwiseEqual scanning "<getAt(i).equals2D(e->pts->getAt(i))) { return false; } } return true; } string Edge::print() const { testInvariant(); std::stringstream ss; ss << *this; return ss.str(); } // Dunno how to implemente this in terms of operator<< string Edge::printReverse() const { testInvariant(); stringstream os; os << "EDGE (rev)"; if ( name != "" ) os << " name:" << name; os << " label:" << label << " depthDelta:" << depthDelta << ":" << std::endl << " LINESTRING("; unsigned int npts=getNumPoints(); for (unsigned int i=npts; i>0; --i) { if (igetAt(i-1).toString(); } os << ")"; return os.str(); } Envelope* Edge::getEnvelope() { // compute envelope lazily if (env==NULL) { env=new Envelope(); unsigned int npts=getNumPoints(); for (unsigned int i = 0; iexpandToInclude(pts->getAt(i)); } } testInvariant(); return env; } std::ostream& operator<< (std::ostream&os, const Edge& e) { os << "edge"; if ( e.name != "" ) os << " " << e.name; os << " LINESTRING" << *(e.pts) << " " << e.label << " " << e.depthDelta ; return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/EdgeEnd.cpp0000644000175000017500000000716112206417146017044 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeEnd.java r428 (JTS-1.12+) * **********************************************************************/ #include #include // for assertions #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph using namespace geos::algorithm; /*public*/ EdgeEnd::EdgeEnd() : edge(NULL), label(), node(NULL), dx(0.0), dy(0.0), quadrant(0) { } /*protected*/ EdgeEnd::EdgeEnd(Edge* newEdge) : edge(newEdge), label(), node(NULL), dx(0.0), dy(0.0), quadrant(0) { } /*public*/ EdgeEnd::EdgeEnd(Edge* newEdge, const Coordinate& newP0, const Coordinate& newP1, const Label& newLabel) : edge(newEdge), label(newLabel), node(NULL), dx(0.0), dy(0.0), quadrant(0) { init(newP0, newP1); } /*public*/ EdgeEnd::EdgeEnd(Edge* newEdge, const Coordinate& newP0, const Coordinate& newP1) : edge(newEdge), label(), node(NULL), dx(0.0), dy(0.0), quadrant(0) { init(newP0, newP1); } /*public*/ void EdgeEnd::init(const Coordinate& newP0, const Coordinate& newP1) { p0=newP0; p1=newP1; dx=p1.x-p0.x; dy=p1.y-p0.y; quadrant=Quadrant::quadrant(dx,dy); // "EdgeEnd with identical endpoints found"); assert(!(dx == 0 && dy == 0)); } /*public*/ Coordinate& EdgeEnd::getCoordinate() { return p0; } /*public*/ Coordinate& EdgeEnd::getDirectedCoordinate() { return p1; } /*public*/ int EdgeEnd::getQuadrant() { return quadrant; } /*public*/ double EdgeEnd::getDx() { return dx; } /*public*/ double EdgeEnd::getDy() { return dy; } /*public*/ void EdgeEnd::setNode(Node* newNode) { node=newNode; assert(node->getCoordinate().equals2D(p0)); } /*public*/ Node* EdgeEnd::getNode() { return node; } /*public*/ int EdgeEnd::compareTo(const EdgeEnd* e) const { return compareDirection(e); } /*public*/ int EdgeEnd::compareDirection(const EdgeEnd* e) const { assert(e); if (dx == e->dx && dy == e->dy) return 0; // if the rays are in different quadrants, // determining the ordering is trivial if (quadrant>e->quadrant) return 1; if (quadrantquadrant) return -1; // vectors are in the same quadrant - check relative // orientation of direction vectors // this is > e if it is CCW of e return CGAlgorithms::computeOrientation(e->p0, e->p1, p1); } /*public*/ void EdgeEnd::computeLabel(const algorithm::BoundaryNodeRule& /*boundaryNodeRule*/) { // subclasses should override this if they are using labels } /*public*/ std::string EdgeEnd::print() { std::ostringstream s; s<<*this; return s.str(); } std::ostream& operator<< (std::ostream& os, const EdgeEnd& ee) { os << "EdgeEnd: "; os << ee.p0; os << " - "; os << ee.p1; os << " "; os << ee.quadrant << ":" << std::atan2(ee.dy, ee.dx); os << " "; os << ee.label; return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/EdgeEndStar.cpp0000644000175000017500000002300312206417146017667 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeEndStar.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif //using namespace std; //using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public*/ EdgeEndStar::EdgeEndStar() : edgeMap() { ptInAreaLocation[0]=Location::UNDEF; ptInAreaLocation[1]=Location::UNDEF; } /*public*/ Coordinate& EdgeEndStar::getCoordinate() { static Coordinate nullCoord(DoubleNotANumber, DoubleNotANumber, DoubleNotANumber); if (edgeMap.size()==0) return nullCoord; EdgeEndStar::iterator it=begin(); EdgeEnd *e=*it; assert(e); return e->getCoordinate(); } /*public*/ EdgeEnd* EdgeEndStar::getNextCW(EdgeEnd *ee) { EdgeEndStar::iterator it=find(ee); if ( it==end() ) return NULL; if ( it==begin() ) { it=end(); --it; } else --it; return *it; } /*public*/ void EdgeEndStar::computeLabelling(std::vector *geomGraph) //throw(TopologyException *) { computeEdgeEndLabels((*geomGraph)[0]->getBoundaryNodeRule()); // Propagate side labels around the edges in the star // for each parent Geometry // // these calls can throw a TopologyException propagateSideLabels(0); propagateSideLabels(1); /** * If there are edges that still have null labels for a geometry * this must be because there are no area edges for that geometry * incident on this node. * In this case, to label the edge for that geometry we must test * whether the edge is in the interior of the geometry. * To do this it suffices to determine whether the node for the * edge is in the interior of an area. * If so, the edge has location INTERIOR for the geometry. * In all other cases (e.g. the node is on a line, on a point, or * not on the geometry at all) the edge * has the location EXTERIOR for the geometry. * * Note that the edge cannot be on the BOUNDARY of the geometry, * since then there would have been a parallel edge from the * Geometry at this node also labelled BOUNDARY * and this edge would have been labelled in the previous step. * * This code causes a problem when dimensional collapses are present, * since it may try and determine the location of a node where a * dimensional collapse has occurred. * The point should be considered to be on the EXTERIOR * of the polygon, but locate() will return INTERIOR, since it is * passed the original Geometry, not the collapsed version. * * If there are incident edges which are Line edges labelled BOUNDARY, * then they must be edges resulting from dimensional collapses. * In this case the other edges can be labelled EXTERIOR for this * Geometry. * * MD 8/11/01 - NOT TRUE! The collapsed edges may in fact be in the * interior of the Geometry, which means the other edges should be * labelled INTERIOR for this Geometry. * Not sure how solve this... Possibly labelling needs to be split * into several phases: * area label propagation, symLabel merging, then finally null label * resolution. */ bool hasDimensionalCollapseEdge[2]={false,false}; EdgeEndStar::iterator endIt=end(); for (EdgeEndStar::iterator it=begin(); it!=endIt; ++it) { EdgeEnd *e=*it; assert(e); const Label& label = e->getLabel(); for(int geomi=0; geomi<2; geomi++) { if (label.isLine(geomi) && label.getLocation(geomi) == Location::BOUNDARY) hasDimensionalCollapseEdge[geomi]=true; } } for (EdgeEndStar::iterator it=begin(); it!=end(); ++it) { EdgeEnd *e=*it; assert(e); Label& label = e->getLabel(); for(int geomi=0; geomi<2; ++geomi) { if (label.isAnyNull(geomi)) { int loc=Location::UNDEF; if (hasDimensionalCollapseEdge[geomi]){ loc=Location::EXTERIOR; }else { Coordinate& p=e->getCoordinate(); loc = getLocation(geomi, p, geomGraph); } label.setAllLocationsIfNull(geomi, loc); } } } } /*private*/ void EdgeEndStar::computeEdgeEndLabels( const algorithm::BoundaryNodeRule& boundaryNodeRule) { // Compute edge label for each EdgeEnd for (EdgeEndStar::iterator it=begin(); it!=end(); ++it) { EdgeEnd *ee=*it; assert(ee); ee->computeLabel(boundaryNodeRule); } } /*public*/ int EdgeEndStar::getLocation(int geomIndex, const Coordinate& p, std::vector *geom) { // compute location only on demand if (ptInAreaLocation[geomIndex]==Location::UNDEF) { ptInAreaLocation[geomIndex]=algorithm::locate::SimplePointInAreaLocator::locate(p, (*geom)[geomIndex]->getGeometry()); } return ptInAreaLocation[geomIndex]; } /*public*/ bool EdgeEndStar::isAreaLabelsConsistent(const GeometryGraph& geomGraph) { computeEdgeEndLabels(geomGraph.getBoundaryNodeRule()); return checkAreaLabelsConsistent(0); } /*private*/ bool EdgeEndStar::checkAreaLabelsConsistent(int geomIndex) { // Since edges are stored in CCW order around the node, // As we move around the ring we move from the right to // the left side of the edge // if no edges, trivially consistent if (edgeMap.size()==0) return true; // initialize startLoc to location of last L side (if any) EdgeEndStar::reverse_iterator it=rbegin(); assert(*it); const Label& startLabel = (*it)->getLabel(); int startLoc = startLabel.getLocation(geomIndex, Position::LEFT); // Found unlabelled area edge assert(startLoc!=Location::UNDEF); int currLoc=startLoc; for (EdgeEndStar::iterator it=begin(), itEnd=end(); it!=itEnd; ++it) { EdgeEnd *e=*it; assert(e); const Label& eLabel = e->getLabel(); // we assume that we are only checking a area // Found non-area edge assert(eLabel.isArea(geomIndex)); int leftLoc=eLabel.getLocation(geomIndex, Position::LEFT); int rightLoc=eLabel.getLocation(geomIndex, Position::RIGHT); // check that edge is really a boundary between inside and outside! if (leftLoc==rightLoc) { return false; } // check side location conflict //assert(rightLoc == currLoc); // "side location conflict " + locStr); if (rightLoc!=currLoc) { return false; } currLoc=leftLoc; } return true; } /*public*/ void EdgeEndStar::propagateSideLabels(int geomIndex) //throw(TopologyException *) { // Since edges are stored in CCW order around the node, // As we move around the ring we move from the right to the // left side of the edge int startLoc=Location::UNDEF; EdgeEndStar::iterator beginIt=begin(); EdgeEndStar::iterator endIt=end(); EdgeEndStar::iterator it; // initialize loc to location of last L side (if any) for (EdgeEndStar::iterator it=beginIt; it!=endIt; ++it) { EdgeEnd *e=*it; assert(e); const Label& label = e->getLabel(); if (label.isArea(geomIndex) && label.getLocation(geomIndex,Position::LEFT) != Location::UNDEF) { startLoc = label.getLocation(geomIndex, Position::LEFT); } } // no labelled sides found, so no labels to propagate if (startLoc==Location::UNDEF) return; int currLoc=startLoc; for (it=beginIt; it!=endIt; ++it) { EdgeEnd *e=*it; assert(e); Label& label = e->getLabel(); // set null ON values to be in current location if (label.getLocation(geomIndex,Position::ON) == Location::UNDEF) { label.setLocation(geomIndex,Position::ON,currLoc); } // set side labels (if any) // if (label.isArea()) //ORIGINAL if (label.isArea(geomIndex)) { int leftLoc=label.getLocation(geomIndex, Position::LEFT); int rightLoc=label.getLocation(geomIndex, Position::RIGHT); // if there is a right location, that is the next // location to propagate if (rightLoc!=Location::UNDEF) { if (rightLoc!=currLoc) throw util::TopologyException("side location conflict", e->getCoordinate()); if (leftLoc==Location::UNDEF) { // found single null side at e->getCoordinate() assert(0); } currLoc=leftLoc; } else { /** * RHS is null - LHS must be null too. * This must be an edge from the other * geometry, which has no location * labelling for this geometry. * This edge must lie wholly inside or * outside the other geometry (which is * determined by the current location). * Assign both sides to be the current * location. */ // found single null side assert(label.getLocation(geomIndex, Position::LEFT)==Location::UNDEF); label.setLocation(geomIndex,Position::RIGHT, currLoc); label.setLocation(geomIndex,Position::LEFT, currLoc); } } } } /*public*/ std::string EdgeEndStar::print() { std::string out="EdgeEndStar: " + getCoordinate().toString()+"\n"; for (EdgeEndStar::iterator it=begin(), itEnd=end(); it!=itEnd; ++it) { EdgeEnd *e=*it; assert(e); out+=e->print(); } return out; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/EdgeIntersectionList.cpp0000644000175000017500000001105012206417146021630 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeIntersectionList.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include // shouldn't be using this #include #include #include #include #include #include // std::pair #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG || GEOS_DEBUG_INTERSECT #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph EdgeIntersectionList::EdgeIntersectionList(Edge *newEdge): edge(newEdge) { } EdgeIntersectionList::~EdgeIntersectionList() { for (EdgeIntersectionList::iterator it=nodeMap.begin(), endIt=nodeMap.end(); it!=endIt; ++it) { delete *it; } } EdgeIntersection* EdgeIntersectionList::add(const Coordinate& coord, int segmentIndex, double dist) { EdgeIntersection *eiNew=new EdgeIntersection(coord, segmentIndex, dist); pair p = nodeMap.insert(eiNew); if ( p.second ) { // new EdgeIntersection inserted return eiNew; } else { delete eiNew; return *(p.first); } } bool EdgeIntersectionList::isEmpty() const { return nodeMap.empty(); } bool EdgeIntersectionList::isIntersection(const Coordinate& pt) const { EdgeIntersectionList::const_iterator it=nodeMap.begin(), endIt=nodeMap.end(); for (; it!=endIt; ++it) { EdgeIntersection *ei=*it; if (ei->coord==pt) return true; } return false; } void EdgeIntersectionList::addEndpoints() { int maxSegIndex=edge->getNumPoints()-1; add(edge->pts->getAt(0), 0, 0.0); add(edge->pts->getAt(maxSegIndex), maxSegIndex, 0.0); } void EdgeIntersectionList::addSplitEdges(vector *edgeList) { // ensure that the list has entries for the first and last point // of the edge addEndpoints(); EdgeIntersectionList::iterator it=nodeMap.begin(); // there should always be at least two entries in the list EdgeIntersection *eiPrev=*it; ++it; while (it!=nodeMap.end()) { EdgeIntersection *ei=*it; Edge *newEdge=createSplitEdge(eiPrev,ei); edgeList->push_back(newEdge); eiPrev=ei; it++; } } Edge * EdgeIntersectionList::createSplitEdge(EdgeIntersection *ei0, EdgeIntersection *ei1) { #if GEOS_DEBUG cerr<<"["<segmentIndex-ei0->segmentIndex+2; const Coordinate& lastSegStartPt=edge->pts->getAt(ei1->segmentIndex); // if the last intersection point is not equal to the its segment // start pt, add it to the points list as well. // (This check is needed because the distance metric is not totally // reliable!). The check for point equality is 2D only - Z values // are ignored bool useIntPt1=ei1->dist>0.0 || !ei1->coord.equals2D(lastSegStartPt); if (!useIntPt1) --npts; #if GEOS_DEBUG cerr<<" npts:"< *vc=new vector(); vc->reserve(npts); vc->push_back(ei0->coord); for(int i=ei0->segmentIndex+1; i<=ei1->segmentIndex;i++) { if ( ! useIntPt1 && ei1->segmentIndex == i ) { vc->push_back(ei1->coord); } else { vc->push_back(edge->pts->getAt(i)); } } if (useIntPt1) { vc->push_back(ei1->coord); } CoordinateSequence* pts=new CoordinateArraySequence(vc); return new Edge(pts, edge->getLabel()); } string EdgeIntersectionList::print() const { std::stringstream ss; ss << *this; return ss.str(); } std::ostream& operator<< (std::ostream&os, const EdgeIntersectionList& e) { os << "Intersections:" << std::endl; EdgeIntersectionList::const_iterator it=e.begin(), endIt=e.end(); for (; it!=endIt; ++it) { EdgeIntersection *ei=*it; os << *ei << endl; } return os; } } // namespace geos.geomgraph } // namespace geos-3.4.2/src/geomgraph/EdgeList.cpp0000644000175000017500000000602112206417146017243 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeList.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::noding; namespace geos { namespace geomgraph { // geos.geomgraph #if PROFILE static Profiler *profiler = Profiler::instance(); #endif /*public*/ void EdgeList::add(Edge *e) { edges.push_back(e); OrientedCoordinateArray* oca = new OrientedCoordinateArray(*(e->getCoordinates())); ocaMap[oca] = e; } void EdgeList::addAll(const vector &edgeColl) { for (std::size_t i=0, s=edgeColl.size(); iget("EdgeList::findEqualEdge(Edge *e)"); prof->start(); #endif OrientedCoordinateArray oca(*(e->getCoordinates())); EdgeMap::iterator it = ocaMap.find(&oca); #if PROFILE prof->stop(); #endif if ( it != ocaMap.end() ) return it->second; return 0; } Edge* EdgeList::get(int i) { return edges[i]; } /** * If the edge e is already in the list, return its index. * @return index, if e is already in the list * -1 otherwise */ int EdgeList::findEdgeIndex(Edge *e) { for (int i=0, s=(int)edges.size(); iequals(e) ) return i; } return -1; } string EdgeList::print() { ostringstream ss; ss << *this; return ss.str(); #if 0 string out="EdgeList( "; for(unsigned int j=0, s=edges.size(); jprint(); } out+=") "; return out; #endif } void EdgeList::clearList() { for (unsigned int pos=0; pos < edges.size(); pos++) delete *(&edges[pos]); edges.clear(); } std::ostream& operator<< (std::ostream&os, const EdgeList& el) { os << "EdgeList: " << std::endl; for(std::size_t j=0, s=el.edges.size(); jfirst; // OrientedCoordinateArray } } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/EdgeNodingValidator.cpp0000644000175000017500000000316312206417146021420 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeNodingValidator.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include using namespace std; using namespace geos::noding; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph vector& EdgeNodingValidator::toSegmentStrings(vector& edges) { // convert Edges to SegmentStrings for(size_t i=0, n=edges.size(); igetCoordinates()->clone(); newCoordSeq.push_back(cs); segStr.push_back(new BasicSegmentString(cs, e)); } return segStr; } EdgeNodingValidator::~EdgeNodingValidator() { for (SegmentString::NonConstVect::iterator i=segStr.begin(), e=segStr.end(); i != e; ++i) { delete *i; } for(size_t i=0, n=newCoordSeq.size(); i * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/EdgeRing.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for operator<< #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph EdgeRing::EdgeRing(DirectedEdge *newStart, const GeometryFactory *newGeometryFactory) : startDe(newStart), geometryFactory(newGeometryFactory), holes(), maxNodeDegree(-1), edges(), pts(newGeometryFactory->getCoordinateSequenceFactory()->create(NULL)), label(Location::UNDEF), // new Label(Location::UNDEF)), ring(NULL), isHoleVar(false), shell(NULL) { /* * Commented out to fix different polymorphism in C++ (from Java) * Make sure these calls are made by derived classes ! */ //computePoints(start); //computeRing(); #if GEOS_DEBUG cerr << "EdgeRing[" << this << "] ctor" << endl; #endif testInvariant(); } EdgeRing::~EdgeRing() { testInvariant(); /* * If we constructed a ring, we did by transferring * ownership of the CoordinateSequence, so it will be * destroyed by `ring' dtor and we must not destroy * it twice. */ if ( ring == NULL ) { delete pts; } else { delete ring; } for(size_t i=0, n=holes.size(); iaddHole(this); testInvariant(); } void EdgeRing::addHole(EdgeRing *edgeRing) { holes.push_back(edgeRing); testInvariant(); } /*public*/ Polygon* EdgeRing::toPolygon(const GeometryFactory* geometryFactory) { testInvariant(); size_t nholes=holes.size(); vector *holeLR=new vector(nholes); for (size_t i=0; igetLinearRing()->clone(); (*holeLR)[i]=hole; } // We don't use "clone" here because // GeometryFactory::createPolygon really // wants a LinearRing // LinearRing *shellLR=new LinearRing(*(getLinearRing())); return geometryFactory->createPolygon(shellLR, holeLR); } /*public*/ void EdgeRing::computeRing() { testInvariant(); if (ring!=NULL) return; // don't compute more than once ring=geometryFactory->createLinearRing(pts); isHoleVar=CGAlgorithms::isCCW(pts); testInvariant(); } /*public*/ vector& EdgeRing::getEdges() { testInvariant(); return edges; } /*protected*/ void EdgeRing::computePoints(DirectedEdge *newStart) // throw(const TopologyException &) { startDe=newStart; DirectedEdge *de=newStart; bool isFirstEdge=true; do { //util::Assert::isTrue(de!=NULL,"EdgeRing::computePoints: found null Directed Edge"); //assert(de!=NULL); // EdgeRing::computePoints: found null Directed Edge if(de==NULL) throw util::TopologyException( "EdgeRing::computePoints: found null Directed Edge"); if (de->getEdgeRing()==this) throw util::TopologyException( "Directed Edge visited twice during ring-building", de->getCoordinate()); edges.push_back(de); const Label& deLabel = de->getLabel(); assert(deLabel.isArea()); mergeLabel(deLabel); addPoints(de->getEdge(),de->isForward(),isFirstEdge); isFirstEdge=false; setEdgeRing(de,this); de=getNext(de); } while (de!=startDe); testInvariant(); } /*public*/ int EdgeRing::getMaxNodeDegree() { testInvariant(); if (maxNodeDegree<0) computeMaxNodeDegree(); return maxNodeDegree; } /*private*/ void EdgeRing::computeMaxNodeDegree() { maxNodeDegree=0; DirectedEdge *de=startDe; do { Node *node=de->getNode(); EdgeEndStar* ees = node->getEdges(); assert(dynamic_cast(ees)); DirectedEdgeStar* des = static_cast(ees); int degree=des->getOutgoingDegree(this); if (degree>maxNodeDegree) maxNodeDegree=degree; de=getNext(de); } while (de!=startDe); maxNodeDegree *= 2; testInvariant(); } /*public*/ void EdgeRing::setInResult() { DirectedEdge *de=startDe; do { de->getEdge()->setInResult(true); de=de->getNext(); } while (de!=startDe); testInvariant(); } /*protected*/ void EdgeRing::mergeLabel(const Label& deLabel) { mergeLabel(deLabel, 0); mergeLabel(deLabel, 1); testInvariant(); } /*protected*/ void EdgeRing::mergeLabel(const Label& deLabel, int geomIndex) { testInvariant(); int loc=deLabel.getLocation(geomIndex, Position::RIGHT); // no information to be had from this label if (loc==Location::UNDEF) return; // if there is no current RHS value, set it if (label.getLocation(geomIndex)==Location::UNDEF) { label.setLocation(geomIndex,loc); return; } } /*protected*/ void EdgeRing::addPoints(Edge *edge, bool isForward, bool isFirstEdge) { // EdgeRing::addPoints: can't add points after LinearRing construction assert(ring==NULL); assert(edge); const CoordinateSequence* edgePts=edge->getCoordinates(); assert(edgePts); size_t numEdgePts=edgePts->getSize(); assert(pts); if (isForward) { size_t startIndex=1; if (isFirstEdge) startIndex=0; for (size_t i=startIndex; iadd(edgePts->getAt(i)); } } else { // is backward size_t startIndex=numEdgePts-1; if (isFirstEdge) startIndex=numEdgePts; //for (int i=startIndex;i>=0;i--) for (size_t i=startIndex; i>0; --i) { pts->add(edgePts->getAt(i-1)); } } testInvariant(); } /*public*/ bool EdgeRing::containsPoint(const Coordinate& p) { testInvariant(); assert(ring); const Envelope* env=ring->getEnvelopeInternal(); assert(env); if ( ! env->contains(p) ) return false; if ( ! CGAlgorithms::isPointInRing(p, ring->getCoordinatesRO()) ) return false; for (vector::iterator i=holes.begin(); icontainsPoint(p)) { return false; } } return true; } std::ostream& operator<< (std::ostream& os, const EdgeRing& er) { os << "EdgeRing[" << &er << "]: " << std::endl << "Points: " << er.pts << std::endl; return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/GeometryGraph.cpp0000644000175000017500000003324512206417146020330 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/GeometryGraph.java r428 (JTS-1.12+) * **********************************************************************/ #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 // auto_ptr #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifndef GEOS_INLINE # include "geos/geomgraph/GeometryGraph.inl" #endif using namespace std; using namespace geos::geomgraph::index; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /* * This method implements the Boundary Determination Rule * for determining whether * a component (node or edge) that appears multiple times in elements * of a MultiGeometry is in the boundary or the interior of the Geometry * * The SFS uses the "Mod-2 Rule", which this function implements * * An alternative (and possibly more intuitive) rule would be * the "At Most One Rule": * isInBoundary = (componentCount == 1) */ bool GeometryGraph::isInBoundary(int boundaryCount) { // the "Mod-2 Rule" return boundaryCount%2==1; } int GeometryGraph::determineBoundary(int boundaryCount) { return isInBoundary(boundaryCount)?Location::BOUNDARY : Location::INTERIOR; } EdgeSetIntersector* GeometryGraph::createEdgeSetIntersector() { // various options for computing intersections, from slowest to fastest //private EdgeSetIntersector esi = new SimpleEdgeSetIntersector(); //private EdgeSetIntersector esi = new MonotoneChainIntersector(); //private EdgeSetIntersector esi = new NonReversingChainIntersector(); //private EdgeSetIntersector esi = new SimpleSweepLineIntersector(); //private EdgeSetIntersector esi = new MCSweepLineIntersector(); //return new SimpleEdgeSetIntersector(); return new SimpleMCSweepLineIntersector(); } /*public*/ vector* GeometryGraph::getBoundaryNodes() { if ( ! boundaryNodes.get() ) { boundaryNodes.reset(new vector()); getBoundaryNodes(*(boundaryNodes.get())); } return boundaryNodes.get(); } /*public*/ CoordinateSequence* GeometryGraph::getBoundaryPoints() { if ( ! boundaryPoints.get() ) { // Collection will be destroied by GeometryGraph dtor vector* coll = getBoundaryNodes(); boundaryPoints.reset(new CoordinateArraySequence(coll->size())); size_t i=0; for (vector::iterator it=coll->begin(), endIt=coll->end(); it!=endIt; ++it) { Node *node=*it; boundaryPoints->setAt(node->getCoordinate(), i++); } } // We keep ownership of this, will be destroyed by destructor return boundaryPoints.get(); } Edge* GeometryGraph::findEdge(const LineString *line) { return lineEdgeMap.find(line)->second; } void GeometryGraph::computeSplitEdges(vector *edgelist) { #if GEOS_DEBUG cerr<<"["<size()<<" local and "<size()<<" provided edges"<::iterator i=edges->begin(), endIt=edges->end(); i!=endIt; ++i) { Edge *e=*i; #if GEOS_DEBUG cerr<<" "<print()<<" adding split edges from arg"<eiList.addSplitEdges(edgelist); } } void GeometryGraph::add(const Geometry *g) //throw (UnsupportedOperationException *) { if (g->isEmpty()) return; // check if this Geometry should obey the Boundary Determination Rule // all collections except MultiPolygons obey the rule if ( dynamic_cast(g) ) useBoundaryDeterminationRule = false; if ( const Polygon* x = dynamic_cast(g) ) addPolygon(x); // LineString also handles LinearRings else if ( const LineString* x = dynamic_cast(g) ) addLineString(x); else if ( const Point* x = dynamic_cast(g) ) addPoint(x); else if ( const GeometryCollection* x = dynamic_cast(g) ) { addCollection(x); } else { string out=typeid(*g).name(); throw util::UnsupportedOperationException("GeometryGraph::add(Geometry *): unknown geometry type: "+out); } } void GeometryGraph::addCollection(const GeometryCollection *gc) { for (size_t i=0, n=gc->getNumGeometries(); igetGeometryN(i); add(g); } } /* * Add a Point to the graph. */ void GeometryGraph::addPoint(const Point *p) { const Coordinate& coord=*(p->getCoordinate()); insertPoint(argIndex, coord, Location::INTERIOR); } /* * The left and right topological location arguments assume that the ring * is oriented CW. * If the ring is in the opposite orientation, * the left and right locations must be interchanged. */ void GeometryGraph::addPolygonRing(const LinearRing *lr, int cwLeft, int cwRight) // throw IllegalArgumentException (see below) { // skip empty component (see bug #234) if ( lr->isEmpty() ) return; const CoordinateSequence *lrcl = lr->getCoordinatesRO(); CoordinateSequence* coord=CoordinateSequence::removeRepeatedPoints(lrcl); if (coord->getSize()<4) { hasTooFewPointsVar=true; invalidPoint=coord->getAt(0); // its now a Coordinate delete coord; return; } int left=cwLeft; int right=cwRight; /* * the isCCW call might throw an * IllegalArgumentException if degenerate ring does * not contain 3 distinct points. */ try { if (CGAlgorithms::isCCW(coord)) { left=cwRight; right=cwLeft; } } catch(...) { delete coord; throw; } Edge *e=new Edge(coord, Label(argIndex, Location::BOUNDARY, left, right)); lineEdgeMap[lr]=e; insertEdge(e); insertPoint(argIndex,coord->getAt(0), Location::BOUNDARY); } void GeometryGraph::addPolygon(const Polygon *p) { const LineString* ls; const LinearRing* lr; ls = p->getExteriorRing(); assert(dynamic_cast(ls)); lr = static_cast(ls); addPolygonRing(lr, Location::EXTERIOR, Location::INTERIOR); for (size_t i=0, n=p->getNumInteriorRing(); igetInteriorRingN(i); assert(dynamic_cast(ls)); lr = static_cast(ls); addPolygonRing(lr, Location::INTERIOR, Location::EXTERIOR); } } void GeometryGraph::addLineString(const LineString *line) { CoordinateSequence* coord=CoordinateSequence::removeRepeatedPoints(line->getCoordinatesRO()); if(coord->getSize()<2) { hasTooFewPointsVar=true; invalidPoint=coord->getAt(0); delete coord; return; } Edge *e=new Edge(coord, Label(argIndex, Location::INTERIOR)); lineEdgeMap[line]=e; insertEdge(e); /* * Add the boundary points of the LineString, if any. * Even if the LineString is closed, add both points as if they * were endpoints. * This allows for the case that the node already exists and is * a boundary point. */ assert(coord->size() >= 2); // found LineString with single point insertBoundaryPoint(argIndex, coord->getAt(0)); insertBoundaryPoint(argIndex, coord->getAt(coord->getSize()-1)); } /* * Add an Edge computed externally. The label on the Edge is assumed * to be correct. */ void GeometryGraph::addEdge(Edge *e) { insertEdge(e); const CoordinateSequence* coord=e->getCoordinates(); // insert the endpoint as a node, to mark that it is on the boundary insertPoint(argIndex,coord->getAt(0),Location::BOUNDARY); insertPoint(argIndex,coord->getAt(coord->getSize()-1),Location::BOUNDARY); } /* * Add a point computed externally. The point is assumed to be a * Point Geometry part, which has a location of INTERIOR. */ void GeometryGraph::addPoint(Coordinate& pt) { insertPoint(argIndex,pt,Location::INTERIOR); } /*public*/ SegmentIntersector* GeometryGraph::computeSelfNodes(LineIntersector *li, bool computeRingSelfNodes) { SegmentIntersector *si=new SegmentIntersector(li,true,false); auto_ptr esi(createEdgeSetIntersector()); // optimized test for Polygons and Rings if (! computeRingSelfNodes && ( dynamic_cast(parentGeom) || dynamic_cast(parentGeom) || dynamic_cast(parentGeom) )) { esi->computeIntersections(edges, si, false); } else { esi->computeIntersections(edges, si, true); } #if GEOS_DEBUG cerr << "SegmentIntersector # tests = " << si->numTests << endl; #endif // GEOS_DEBUG addSelfIntersectionNodes(argIndex); return si; } SegmentIntersector* GeometryGraph::computeEdgeIntersections(GeometryGraph *g, LineIntersector *li, bool includeProper) { #if GEOS_DEBUG cerr<<"GeometryGraph::computeEdgeIntersections call"<setBoundaryNodes(getBoundaryNodes(), g->getBoundaryNodes()); auto_ptr esi(createEdgeSetIntersector()); esi->computeIntersections(edges, g->edges, si); #if GEOS_DEBUG cerr<<"GeometryGraph::computeEdgeIntersections returns"<addNode(coord); Label& lbl = n->getLabel(); if ( lbl.isNull() ) { n->setLabel(argIndex, onLocation); } else { lbl.setLocation(argIndex, onLocation); } } /* * Adds points using the mod-2 rule of SFS. This is used to add the boundary * points of dim-1 geometries (Curves/MultiCurves). According to the SFS, * an endpoint of a Curve is on the boundary * iff if it is in the boundaries of an odd number of Geometries */ void GeometryGraph::insertBoundaryPoint(int argIndex, const Coordinate& coord) { Node *n=nodes->addNode(coord); // nodes always have labels Label& lbl = n->getLabel(); // the new point to insert is on a boundary int boundaryCount=1; // determine the current location for the point (if any) int loc = lbl.getLocation(argIndex,Position::ON); if (loc==Location::BOUNDARY) boundaryCount++; // determine the boundary status of the point according to the // Boundary Determination Rule int newLoc = determineBoundary(boundaryNodeRule, boundaryCount); lbl.setLocation(argIndex,newLoc); } /*private*/ void GeometryGraph::addSelfIntersectionNodes(int argIndex) { for (vector::iterator i=edges->begin(), endIt=edges->end(); i!=endIt; ++i) { Edge *e=*i; int eLoc = e->getLabel().getLocation(argIndex); EdgeIntersectionList &eiL = e->eiList; for (EdgeIntersectionList::iterator eiIt=eiL.begin(), eiEnd=eiL.end(); eiIt!=eiEnd; ++eiIt) { EdgeIntersection *ei=*eiIt; addSelfIntersectionNode(argIndex, ei->coord, eLoc); } } } /*private*/ void GeometryGraph::addSelfIntersectionNode(int argIndex, const Coordinate& coord, int loc) { // if this node is already a boundary node, don't change it if (isBoundaryNode(argIndex,coord)) return; if (loc==Location::BOUNDARY && useBoundaryDeterminationRule) { insertBoundaryPoint(argIndex,coord); } else { insertPoint(argIndex,coord,loc); } } vector * GeometryGraph::getEdges() { return edges; } bool GeometryGraph::hasTooFewPoints() { return hasTooFewPointsVar; } const Coordinate& GeometryGraph::getInvalidPoint() { return invalidPoint; } GeometryGraph::GeometryGraph(int newArgIndex, const geom::Geometry *newParentGeom) : PlanarGraph(), parentGeom(newParentGeom), useBoundaryDeterminationRule(true), boundaryNodeRule(algorithm::BoundaryNodeRule::getBoundaryOGCSFS()), argIndex(newArgIndex), hasTooFewPointsVar(false) { if (parentGeom!=NULL) add(parentGeom); } GeometryGraph::GeometryGraph(int newArgIndex, const geom::Geometry *newParentGeom, const algorithm::BoundaryNodeRule& bnr) : PlanarGraph(), parentGeom(newParentGeom), useBoundaryDeterminationRule(true), boundaryNodeRule(bnr), argIndex(newArgIndex), hasTooFewPointsVar(false) { if (parentGeom!=NULL) add(parentGeom); } GeometryGraph::GeometryGraph() : PlanarGraph(), parentGeom(NULL), useBoundaryDeterminationRule(true), boundaryNodeRule(algorithm::BoundaryNodeRule::getBoundaryOGCSFS()), argIndex(-1), hasTooFewPointsVar(false) { } /* public static */ int GeometryGraph::determineBoundary( const algorithm::BoundaryNodeRule& boundaryNodeRule, int boundaryCount) { return boundaryNodeRule.isInBoundary(boundaryCount) ? Location::BOUNDARY : Location::INTERIOR; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/GraphComponent.cpp0000644000175000017500000000304012206417146020465 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/GraphComponent.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph GraphComponent::GraphComponent() : label(), isInResultVar(false), isCoveredVar(false), isCoveredSetVar(false), isVisitedVar(false) { } GraphComponent::GraphComponent(const Label& newLabel): label(newLabel), isInResultVar(false), isCoveredVar(false), isCoveredSetVar(false), isVisitedVar(false) { } GraphComponent::~GraphComponent() { } void GraphComponent::setCovered(bool isCovered) { isCoveredVar = isCovered; isCoveredSetVar = true; } void GraphComponent::updateIM(IntersectionMatrix& im) { assert(label.getGeometryCount() >= 2); // found partial label computeIM(im); } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/Label.cpp0000644000175000017500000001216212206417146016565 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Label.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public static*/ Label Label::toLineLabel(const Label &label) { Label lineLabel(Location::UNDEF); for (int i=0; i<2; i++) { lineLabel.setLocation(i, label.getLocation(i)); } return lineLabel; } /*public*/ Label::Label(int onLoc) { elt[0]=TopologyLocation(onLoc); elt[1]=TopologyLocation(onLoc); } /*public*/ Label::Label(int geomIndex,int onLoc) { assert(geomIndex>=0 && geomIndex<2); elt[0]=TopologyLocation(Location::UNDEF); elt[1]=TopologyLocation(Location::UNDEF); elt[geomIndex].setLocation(onLoc); } /*public*/ Label::Label(int onLoc,int leftLoc,int rightLoc) { elt[0]=TopologyLocation(onLoc,leftLoc,rightLoc); elt[1]=TopologyLocation(onLoc,leftLoc,rightLoc); } /*public*/ Label::Label() { elt[0]=TopologyLocation(Location::UNDEF); elt[1]=TopologyLocation(Location::UNDEF); } /*public*/ Label::Label(const Label &l) { elt[0]=TopologyLocation(l.elt[0]); elt[1]=TopologyLocation(l.elt[1]); } /*public*/ Label& Label::operator=(const Label &l) { elt[0] = TopologyLocation(l.elt[0]); elt[1] = TopologyLocation(l.elt[1]); return *this; } /*public*/ Label::Label(int geomIndex,int onLoc,int leftLoc,int rightLoc) { elt[0]=TopologyLocation(Location::UNDEF,Location::UNDEF,Location::UNDEF); elt[1]=TopologyLocation(Location::UNDEF,Location::UNDEF,Location::UNDEF); elt[geomIndex].setLocations(onLoc,leftLoc,rightLoc); } /*public*/ void Label::flip() { elt[0].flip(); elt[1].flip(); } /*public*/ int Label::getLocation(int geomIndex, int posIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].get(posIndex); } /*public*/ int Label::getLocation(int geomIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].get(Position::ON); } /*public*/ void Label::setLocation(int geomIndex,int posIndex,int location) { assert(geomIndex>=0 && geomIndex<2); elt[geomIndex].setLocation(posIndex,location); } /*public*/ void Label::setLocation(int geomIndex,int location) { assert(geomIndex>=0 && geomIndex<2); elt[geomIndex].setLocation(Position::ON,location); } /*public*/ void Label::setAllLocations(int geomIndex,int location) { assert(geomIndex>=0 && geomIndex<2); elt[geomIndex].setAllLocations(location); } /*public*/ void Label::setAllLocationsIfNull(int geomIndex,int location) { assert(geomIndex>=0 && geomIndex<2); elt[geomIndex].setAllLocationsIfNull(location); } /*public*/ void Label::setAllLocationsIfNull(int location) { setAllLocationsIfNull(0,location); setAllLocationsIfNull(1,location); } /*public*/ void Label::merge(const Label &lbl) { for (int i=0; i<2; i++) { elt[i].merge(lbl.elt[i]); } } /*public*/ int Label::getGeometryCount() const { int count = 0; if (!elt[0].isNull()) count++; if (!elt[1].isNull()) count++; return count; } /*public*/ bool Label::isNull(int geomIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].isNull(); } /*public*/ bool Label::isNull() const { return elt[0].isNull() && elt[1].isNull(); } /*public*/ bool Label::isAnyNull(int geomIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].isAnyNull(); } /*public*/ bool Label::isArea() const { return elt[0].isArea() || elt[1].isArea(); } /*public*/ bool Label::isArea(int geomIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].isArea(); } /*public*/ bool Label::isLine(int geomIndex) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].isLine(); } /*public*/ bool Label::isEqualOnSide(const Label& lbl, int side) const { return elt[0].isEqualOnSide(lbl.elt[0], side) && elt[1].isEqualOnSide(lbl.elt[1], side); } /*public*/ bool Label::allPositionsEqual(int geomIndex, int loc) const { assert(geomIndex>=0 && geomIndex<2); return elt[geomIndex].allPositionsEqual(loc); } /*public*/ void Label::toLine(int geomIndex) { assert(geomIndex>=0 && geomIndex<2); if (elt[geomIndex].isArea()) { elt[geomIndex]=TopologyLocation(elt[geomIndex].getLocations()[0]); } } string Label::toString() const { stringstream ss; ss << *this; return ss.str(); } std::ostream& operator<< (std::ostream& os, const Label& l) { os << "A:" << l.elt[0] << " B:" << l.elt[1]; return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/Makefile.am0000644000175000017500000000114212206417146017072 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = index noinst_LTLIBRARIES = libgeomgraph.la INCLUDES = -I$(top_srcdir)/include libgeomgraph_la_SOURCES = \ Depth.cpp \ DirectedEdge.cpp \ DirectedEdgeStar.cpp \ Edge.cpp \ EdgeEnd.cpp \ EdgeEndStar.cpp \ EdgeIntersectionList.cpp \ EdgeNodingValidator.cpp \ EdgeList.cpp \ EdgeRing.cpp \ GeometryGraph.cpp \ GraphComponent.cpp \ Label.cpp \ Node.cpp \ NodeFactory.cpp \ NodeMap.cpp \ PlanarGraph.cpp \ Position.cpp \ Quadrant.cpp \ TopologyLocation.cpp libgeomgraph_la_LIBADD = index/libgeomgraphindex.la geos-3.4.2/src/geomgraph/Makefile.in0000644000175000017500000005673712206417163017126 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/geomgraph DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgeomgraph_la_DEPENDENCIES = index/libgeomgraphindex.la am_libgeomgraph_la_OBJECTS = Depth.lo DirectedEdge.lo \ DirectedEdgeStar.lo Edge.lo EdgeEnd.lo EdgeEndStar.lo \ EdgeIntersectionList.lo EdgeNodingValidator.lo EdgeList.lo \ EdgeRing.lo GeometryGraph.lo GraphComponent.lo Label.lo \ Node.lo NodeFactory.lo NodeMap.lo PlanarGraph.lo Position.lo \ Quadrant.lo TopologyLocation.lo libgeomgraph_la_OBJECTS = $(am_libgeomgraph_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgeomgraph_la_SOURCES) DIST_SOURCES = $(libgeomgraph_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = index noinst_LTLIBRARIES = libgeomgraph.la INCLUDES = -I$(top_srcdir)/include libgeomgraph_la_SOURCES = \ Depth.cpp \ DirectedEdge.cpp \ DirectedEdgeStar.cpp \ Edge.cpp \ EdgeEnd.cpp \ EdgeEndStar.cpp \ EdgeIntersectionList.cpp \ EdgeNodingValidator.cpp \ EdgeList.cpp \ EdgeRing.cpp \ GeometryGraph.cpp \ GraphComponent.cpp \ Label.cpp \ Node.cpp \ NodeFactory.cpp \ NodeMap.cpp \ PlanarGraph.cpp \ Position.cpp \ Quadrant.cpp \ TopologyLocation.cpp libgeomgraph_la_LIBADD = index/libgeomgraphindex.la all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/geomgraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/geomgraph/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgeomgraph.la: $(libgeomgraph_la_OBJECTS) $(libgeomgraph_la_DEPENDENCIES) $(CXXLINK) $(libgeomgraph_la_OBJECTS) $(libgeomgraph_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Depth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectedEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectedEdgeStar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Edge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeEnd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeEndStar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeIntersectionList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeNodingValidator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeRing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GraphComponent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Label.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Node.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodeFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodeMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PlanarGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Position.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Quadrant.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TopologyLocation.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/geomgraph/Node.cpp0000644000175000017500000001257212206417146016440 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Node.java r411 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifndef COMPUTE_Z #define COMPUTE_Z 1 #endif using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public*/ Node::Node(const Coordinate& newCoord, EdgeEndStar* newEdges) : GraphComponent(Label(0,Location::UNDEF)), coord(newCoord), edges(newEdges) { #if GEOS_DEBUG cerr<<"["<end(); for (EdgeEndStar::iterator it=edges->begin(); it!=endIt; ++it) { EdgeEnd *ee = *it; addZ(ee->getCoordinate().z); } } #endif // COMPUTE_Z testInvariant(); } /*public*/ Node::~Node() { testInvariant(); #if GEOS_DEBUG cerr<<"["<begin(); EdgeEndStar::iterator endIt=edges->end(); for ( ; it!=endIt; ++it) { assert(*it); assert(dynamic_cast(*it)); DirectedEdge *de = static_cast(*it); if ( de->getEdge()->isInResult() ) return true; } return false; } void Node::add(EdgeEnd *e) { assert(e); #if GEOS_DEBUG cerr<<"["<print()<<")"<getCoordinate().equals2D(coord) ) { std::stringstream ss; ss << "EdgeEnd with coordinate " << e->getCoordinate() << " invalid for node " << coord; throw util::IllegalArgumentException(ss.str()); } // It seems it's legal for edges to be NULL // we'd not be honouring the promise of adding // an EdgeEnd in this case, though ... assert(edges); //if (edges==NULL) return; edges->insert(e); e->setNode(this); #if COMPUTE_Z addZ(e->getCoordinate().z); #endif testInvariant(); } /*public*/ void Node::mergeLabel(const Node& n) { assert(!n.label.isNull()); mergeLabel(n.label); testInvariant(); } /*public*/ void Node::mergeLabel(const Label& label2) { for (int i=0; i<2; i++) { int loc=computeMergedLocation(label2, i); int thisLoc=label.getLocation(i); if (thisLoc==Location::UNDEF) label.setLocation(i,loc); } testInvariant(); } /*public*/ void Node::setLabel(int argIndex, int onLocation) { if ( label.isNull() ) { label = Label(argIndex, onLocation); } else label.setLocation(argIndex, onLocation); testInvariant(); } /*public*/ void Node::setLabelBoundary(int argIndex) { int loc = label.getLocation(argIndex); // flip the loc int newLoc; switch (loc){ case Location::BOUNDARY: newLoc=Location::INTERIOR; break; case Location::INTERIOR: newLoc=Location::BOUNDARY; break; default: newLoc=Location::BOUNDARY; break; } label.setLocation(argIndex, newLoc); testInvariant(); } /*public*/ int Node::computeMergedLocation(const Label& label2, int eltIndex) { int loc=Location::UNDEF; loc=label.getLocation(eltIndex); if (!label2.isNull(eltIndex)) { int nLoc=label2.getLocation(eltIndex); if (loc!=Location::BOUNDARY) loc=nLoc; } testInvariant(); return loc; } /*public*/ string Node::print() { testInvariant(); ostringstream ss; ss<<*this; return ss.str(); } /*public*/ void Node::addZ(double z) { #if GEOS_DEBUG cerr<<"["<& Node::getZ() const { return zvals; } std::ostream& operator<< (std::ostream& os, const Node& node) { os << "Node["<<&node<<"]" << std::endl << " POINT(" << node.coord << ")" << std::endl << " lbl: " << node.label; return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/NodeFactory.cpp0000644000175000017500000000206512206417146017764 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/NodeFactory.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #include #include using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph Node * NodeFactory::createNode(const Coordinate &coord) const { return new Node(coord,NULL); } const NodeFactory & NodeFactory::instance() { static const NodeFactory nf; return nf; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/NodeMap.cpp0000644000175000017500000000710712206417146017074 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/NodeMap.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph NodeMap::NodeMap(const NodeFactory &newNodeFact) : nodeFact(newNodeFact) { #if GEOS_DEBUG cerr<<"["<second; } } Node* NodeMap::addNode(const Coordinate& coord) { #if GEOS_DEBUG cerr<<"["<( &(node->getCoordinate())); nodeMap[c]=node; //nodeMap[const_cast(&coord)]=node; } else { #if GEOS_DEBUG cerr<<" already found ("<getCoordinate().toString()<<") - adding Z"<addZ(coord.z); } return node; } // first arg cannot be const because // it is liable to label-merging ... --strk; Node* NodeMap::addNode(Node *n) { assert(n); #if GEOS_DEBUG cerr<<"["<print()<<")"; #endif Coordinate *c=const_cast(&n->getCoordinate()); Node *node=find(*c); if (node==NULL) { #if GEOS_DEBUG cerr<<" is new"<&zvals = n->getZ(); for (unsigned int i=0; iaddZ(zvals[i]); } } #endif // GEOS_DEBUG node->mergeLabel(*n); return node; } void NodeMap::add(EdgeEnd *e) { Coordinate& p=e->getCoordinate(); Node *n=addNode(p); n->add(e); } /* * @return the node if found; null otherwise */ Node* NodeMap::find(const Coordinate& coord) const { Coordinate *c=const_cast(&coord); NodeMap::const_iterator found=nodeMap.find(c); if (found==nodeMap.end()) return NULL; else return found->second; } void NodeMap::getBoundaryNodes(int geomIndex, vector&bdyNodes) const { NodeMap::const_iterator it=nodeMap.begin(); for (;it!=nodeMap.end();it++) { Node *node=it->second; if (node->getLabel().getLocation(geomIndex)==Location::BOUNDARY) bdyNodes.push_back(node); } } string NodeMap::print() const { string out=""; NodeMap::const_iterator it=nodeMap.begin(); for (;it!=nodeMap.end();it++) { Node *node=it->second; out+=node->print(); } return out; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/PlanarGraph.cpp0000644000175000017500000001652312206417146017752 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/PlanarGraph.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public*/ PlanarGraph::PlanarGraph(const NodeFactory &nodeFact) : edges(new vector()), nodes(new NodeMap(nodeFact)), edgeEndList(new vector()) { } /*public*/ PlanarGraph::PlanarGraph() : edges(new vector()), nodes(new NodeMap(NodeFactory::instance())), edgeEndList(new vector()) { } /*public*/ PlanarGraph::~PlanarGraph() { delete nodes; #if 1 // FIXME: PlanarGraph should *not* own edges! for(size_t i=0, n=edges->size(); isize(); i::iterator PlanarGraph::getEdgeIterator() { assert(edges); return edges->begin(); } /*public*/ vector * PlanarGraph::getEdgeEnds() { return edgeEndList; } /*public*/ bool PlanarGraph::isBoundaryNode(int geomIndex, const Coordinate& coord) { assert(nodes); Node *node=nodes->find(coord); if (node==NULL) return false; const Label& label = node->getLabel(); if (! label.isNull() && label.getLocation(geomIndex)==Location::BOUNDARY) return true; return false; } /*protected*/ void PlanarGraph::insertEdge(Edge *e) { assert(e); assert(edges); edges->push_back(e); } /*public*/ void PlanarGraph::add(EdgeEnd* e) { assert(e); assert(nodes); nodes->add(e); assert(edgeEndList); edgeEndList->push_back(e); } /*public*/ NodeMap::iterator PlanarGraph::getNodeIterator() { assert(nodes); return nodes->begin(); } /*public*/ void PlanarGraph::getNodes(vector& values) { assert(nodes); NodeMap::iterator it=nodes->nodeMap.begin(); while(it!=nodes->nodeMap.end()) { assert(it->second); values.push_back(it->second); it++; } } // arg cannot be const, NodeMap::addNode will // occasionally label-merge first arg. /*public*/ Node* PlanarGraph::addNode(Node *node) { assert(nodes); #if GEOS_DEBUG cerr << "PlanarGraph::addNode(Node * " << *node << ")" << endl; #endif return nodes->addNode(node); } /*public*/ Node* PlanarGraph::addNode(const Coordinate& coord) { #if GEOS_DEBUG cerr << "PlanarGraph::addNode(Coordinate& " << coord << ")" << endl; #endif return nodes->addNode(coord); } /*public*/ Node* PlanarGraph::find(Coordinate& coord) { assert(nodes); return nodes->find(coord); } /*public*/ void PlanarGraph::addEdges(const vector& edgesToAdd) { // create all the nodes for the edges for (vector::const_iterator it=edgesToAdd.begin(), endIt=edgesToAdd.end(); it!=endIt; ++it) { Edge *e=*it; assert(e); edges->push_back(e); // PlanarGraph destructor will delete all DirectedEdges // in edgeEndList, which is where these are added // by the ::add(EdgeEnd) call DirectedEdge *de1=new DirectedEdge(e, true); DirectedEdge *de2=new DirectedEdge(e, false); de1->setSym(de2); de2->setSym(de1); add(de1); add(de2); } } /*public static*/ void PlanarGraph::linkResultDirectedEdges() { #if GEOS_DEBUG cerr<<"PlanarGraph::linkResultDirectedEdges called"<nodeMap.begin(); for (;nodeit!=nodes->nodeMap.end();nodeit++) { Node *node=nodeit->second; assert(node); EdgeEndStar* ees=node->getEdges(); assert(ees); assert(dynamic_cast(ees)); DirectedEdgeStar* des = static_cast(ees); // this might throw an exception des->linkResultDirectedEdges(); } } /* * Link the DirectedEdges at the nodes of the graph. * This allows clients to link only a subset of nodes in the graph, for * efficiency (because they know that only a subset is of interest). */ void PlanarGraph::linkAllDirectedEdges() { #if GEOS_DEBUG cerr<<"PlanarGraph::linkAllDirectedEdges called"<nodeMap.begin(); for (;nodeit!=nodes->nodeMap.end();nodeit++) { Node *node=nodeit->second; assert(node); EdgeEndStar *ees=node->getEdges(); assert(ees); // Unespected non-DirectedEdgeStar in node assert(dynamic_cast(ees)); DirectedEdgeStar *des=static_cast(ees); des->linkAllDirectedEdges(); } } /*public*/ EdgeEnd* PlanarGraph::findEdgeEnd(Edge *e) { vector* eev=getEdgeEnds(); assert(eev); for (vector::iterator i=eev->begin(), iEnd=eev->end(); i != iEnd; ++i) { EdgeEnd *ee=*i; assert(ee); // should test using values rather then pointers ? if (ee->getEdge()==e) return ee; } return NULL; } /*public*/ Edge* PlanarGraph::findEdge(const Coordinate& p0, const Coordinate& p1) { for (size_t i=0, n=edges->size(); igetCoordinates(); assert(eCoord); if (p0==eCoord->getAt(0) && p1==eCoord->getAt(1)) return e; } return NULL; } /*public*/ Edge* PlanarGraph::findEdgeInSameDirection(const Coordinate& p0, const Coordinate& p1) { for(size_t i=0, n=edges->size(); igetCoordinates(); assert(eCoord); size_t nCoords=eCoord->size(); assert(nCoords>1); if (matchInSameDirection(p0, p1, eCoord->getAt(0), eCoord->getAt(1))) { return e; } if (matchInSameDirection(p0, p1, eCoord->getAt(nCoords-1), eCoord->getAt(nCoords-2))) { return e; } } return NULL; } /*private*/ bool PlanarGraph::matchInSameDirection(const Coordinate& p0, const Coordinate& p1, const Coordinate& ep0, const Coordinate& ep1) { if (!(p0==ep0)) return false; if (CGAlgorithms::computeOrientation(p0,p1,ep1)==CGAlgorithms::COLLINEAR && Quadrant::quadrant(p0,p1)==Quadrant::quadrant(ep0,ep1)) return true; return false; } string PlanarGraph::printEdges() { std::ostringstream oss; oss << "Edges: "; for(size_t i=0, n=edges->size(); iprint() << e->eiList.print(); } return oss.str(); } NodeMap* PlanarGraph::getNodeMap() { return nodes; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/Position.cpp0000644000175000017500000000241712206417146017354 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/Position.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif namespace geos { namespace geomgraph { // geos.geomgraph /** * Returns LEFT if the position is RIGHT, RIGHT if the position is LEFT, or the position * otherwise. */ int Position::opposite(int position){ if (position==LEFT) return RIGHT; if (position==RIGHT) return LEFT; #if GEOS_DEBUG std::cerr<<"Position::opposite: position is neither LEFT ("< #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /* public static */ int Quadrant::quadrant(double dx, double dy) { if (dx == 0.0 && dy == 0.0) { ostringstream s; s<<"Cannot compute the quadrant for point "; s<<"("<= 0) { if (dy >= 0) return NE; else return SE; } else { if (dy >= 0) return NW; else return SW; } } /* public static */ int Quadrant::quadrant(const Coordinate& p0, const Coordinate& p1) { if (p1.x == p0.x && p1.y == p0.y) { throw util::IllegalArgumentException("Cannot compute the quadrant for two identical points " + p0.toString()); } if (p1.x >= p0.x) { if (p1.y >= p0.y) return NE; else return SE; } else { if (p1.y >= p0.y) return NW; else return SW; } } /* public static */ bool Quadrant::isOpposite(int quad1, int quad2) { if (quad1==quad2) return false; int diff=(quad1-quad2+4)%4; // if quadrants are not adjacent, they are opposite if (diff==2) return true; return false; } /* public static */ int Quadrant::commonHalfPlane(int quad1, int quad2) { // if quadrants are the same they do not determine a unique // common halfplane. // Simply return one of the two possibilities if (quad1==quad2) return quad1; int diff=(quad1-quad2+4)%4; // if quadrants are not adjacent, they do not share a common halfplane if (diff==2) return -1; // int min=(quad1quad2)? quad1:quad2; // for this one case, the righthand plane is NOT the minimum index; if (min==0 && max==3) return 3; // in general, the halfplane index is the minimum of the two // adjacent quadrants return min; } /* public static */ bool Quadrant::isInHalfPlane(int quad, int halfPlane) { if (halfPlane==SE) { return quad==SE || quad==SW; } return quad==halfPlane || quad==halfPlane+1; } /* public static */ bool Quadrant::isNorthern(int quad) { return quad==NE || quad==NW; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/TopologyLocation.cpp0000644000175000017500000001124212206417146021051 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: geomgraph/TopologyLocation.java r428 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph /*public*/ TopologyLocation::TopologyLocation(const vector &newLocation): location(newLocation.size(), Location::UNDEF) { } /*public*/ TopologyLocation::TopologyLocation() { } /*public*/ TopologyLocation::~TopologyLocation() { } /*public*/ TopologyLocation::TopologyLocation(int on, int left, int right): location(3) { location[Position::ON]=on; location[Position::LEFT]=left; location[Position::RIGHT]=right; } /*public*/ TopologyLocation::TopologyLocation(int on): location(1, on) { //(*location)[Position::ON]=on; } /*public*/ TopologyLocation::TopologyLocation(const TopologyLocation &gl) : location(gl.location) { } /*public*/ TopologyLocation& TopologyLocation::operator= (const TopologyLocation &gl) { location = gl.location; return *this; } /*public*/ int TopologyLocation::get(size_t posIndex) const { // should be an assert() instead ? if (posIndex1; } /*public*/ bool TopologyLocation::isLine() const { return location.size()==1; } /*public*/ void TopologyLocation::flip() { if (location.size()<=1) return; int temp=location[Position::LEFT]; location[Position::LEFT]=location[Position::RIGHT]; location[Position::RIGHT] = temp; } /*public*/ void TopologyLocation::setAllLocations(int locValue) { for (size_t i=0, sz=location.size(); i & TopologyLocation::getLocations() const { return location; } /*public*/ void TopologyLocation::setLocations(int on, int left, int right) { assert(location.size() >= 3); location[Position::ON]=on; location[Position::LEFT]=left; location[Position::RIGHT]=right; } /*public*/ bool TopologyLocation::allPositionsEqual(int loc) const { for (size_t i=0, sz=location.size(); isz) { location.resize(3); location[Position::LEFT]=Location::UNDEF; location[Position::RIGHT]=Location::UNDEF; } for (size_t i=0; i1) os << Location::toLocationSymbol(tl.location[Position::LEFT]); os << Location::toLocationSymbol(tl.location[Position::ON]); if (tl.location.size()>1) os << Location::toLocationSymbol(tl.location[Position::RIGHT]); return os; } } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/index/0000755000175000017500000000000012206417237016150 5ustar frankiefrankiegeos-3.4.2/src/geomgraph/index/Makefile.am0000644000175000017500000000066212206417146020207 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomgraphindex.la INCLUDES = -I$(top_srcdir)/include libgeomgraphindex_la_SOURCES = \ MonotoneChainEdge.cpp \ MonotoneChainIndexer.cpp \ SegmentIntersector.cpp \ SimpleEdgeSetIntersector.cpp \ SimpleMCSweepLineIntersector.cpp \ SimpleSweepLineIntersector.cpp \ SweepLineEvent.cpp \ SweepLineSegment.cpp geos-3.4.2/src/geomgraph/index/Makefile.in0000644000175000017500000004215412206417163020221 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/geomgraph/index DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgeomgraphindex_la_LIBADD = am_libgeomgraphindex_la_OBJECTS = MonotoneChainEdge.lo \ MonotoneChainIndexer.lo SegmentIntersector.lo \ SimpleEdgeSetIntersector.lo SimpleMCSweepLineIntersector.lo \ SimpleSweepLineIntersector.lo SweepLineEvent.lo \ SweepLineSegment.lo libgeomgraphindex_la_OBJECTS = $(am_libgeomgraphindex_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libgeomgraphindex_la_SOURCES) DIST_SOURCES = $(libgeomgraphindex_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libgeomgraphindex.la INCLUDES = -I$(top_srcdir)/include libgeomgraphindex_la_SOURCES = \ MonotoneChainEdge.cpp \ MonotoneChainIndexer.cpp \ SegmentIntersector.cpp \ SimpleEdgeSetIntersector.cpp \ SimpleMCSweepLineIntersector.cpp \ SimpleSweepLineIntersector.cpp \ SweepLineEvent.cpp \ SweepLineSegment.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/geomgraph/index/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/geomgraph/index/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgeomgraphindex.la: $(libgeomgraphindex_la_OBJECTS) $(libgeomgraphindex_la_DEPENDENCIES) $(CXXLINK) $(libgeomgraphindex_la_OBJECTS) $(libgeomgraphindex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChainEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChainIndexer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentIntersector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleEdgeSetIntersector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleMCSweepLineIntersector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleSweepLineIntersector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweepLineEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweepLineSegment.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/geomgraph/index/MonotoneChainEdge.cpp0000644000175000017500000001060712206417146022205 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index /** * MonotoneChains are a way of partitioning the segments of an edge to * allow for fast searching of intersections. * They have the following properties: * * - the segments within a monotone chain will never intersect each other * - the envelope of any contiguous subset of the segments in a monotone * chain is simply the envelope of the endpoints of the subset. * * Property 1 means that there is no need to test pairs of segments from * within the same monotone chain for intersection. * Property 2 allows binary search to be used to find the intersection * points of two monotone chains. * For many types of real-world data, these properties eliminate a large * number of segment comparisons, producing substantial speed gains. * @version 1.1 */ MonotoneChainEdge::~MonotoneChainEdge() { } MonotoneChainEdge::MonotoneChainEdge(Edge *newE): e(newE), pts(newE->getCoordinates()) { assert(e); MonotoneChainIndexer mcb; mcb.getChainStartIndices(pts, startIndex); assert(e); } const CoordinateSequence* MonotoneChainEdge::getCoordinates() { assert(pts); return pts; } vector & MonotoneChainEdge::getStartIndexes() { return startIndex; } double MonotoneChainEdge::getMinX(int chainIndex) { double x1=pts->getAt(startIndex[chainIndex]).x; double x2=pts->getAt(startIndex[chainIndex+1]).x; return x1getAt(startIndex[chainIndex]).x; double x2=pts->getAt(startIndex[chainIndex+1]).x; return x1>x2?x1:x2; } void MonotoneChainEdge::computeIntersects(const MonotoneChainEdge &mce, SegmentIntersector &si) { size_t I=startIndex.size()-1; size_t J=mce.startIndex.size()-1; for(size_t i=0; igetAt(start0); const Coordinate& p01=pts->getAt(end0); const Coordinate& p10=mce.pts->getAt(start1); const Coordinate& p11=mce.pts->getAt(end1); // nothing to do if the envelopes of these chains don't overlap env1.init(p00,p01); env2.init(p10,p11); if (!env1.intersects(&env2)) return; // the chains overlap, so split each in half and iterate // (binary search) int mid0=(start0+end0)/2; int mid1=(start1+end1)/2; // Assert: mid != start or end // (since we checked above for end - start <= 1) // check terminating conditions before recursing if (start0 #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index void MonotoneChainIndexer::getChainStartIndices(const CoordinateSequence* pts, vector &startIndexList) { // find the startpoint (and endpoints) of all monotone chains // in this edge int start=0; //vector* startIndexList=new vector(); startIndexList.push_back(start); do { int last=findChainEnd(pts,start); startIndexList.push_back(last); start=last; } while(start<(int)pts->getSize()-1); // copy list to an array of ints, for efficiency //return startIndexList; } /** * @return the index of the last point in the monotone chain */ int MonotoneChainIndexer::findChainEnd(const CoordinateSequence* pts,int start){ // determine quadrant for chain int chainQuad=Quadrant::quadrant(pts->getAt(start),pts->getAt(start + 1)); int last=start+1; while(last<(int)pts->getSize()) { // compute quadrant for next possible segment in chain int quad=Quadrant::quadrant(pts->getAt(last - 1),pts->getAt(last)); if (quad!=chainQuad) break; last++; } return last-1; } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespage geos geos-3.4.2/src/geomgraph/index/SegmentIntersector.cpp0000644000175000017500000001355412206417146022507 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #define DEBUG_INTERSECT 0 #if GEOS_DEBUG || DEBUG_INTERSECT #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index using namespace geos::algorithm; bool SegmentIntersector::isAdjacentSegments(int i1,int i2) { return abs(i1-i2)==1; } void SegmentIntersector::setBoundaryNodes(vector *bdyNodes0, vector *bdyNodes1) { bdyNodes[0]=bdyNodes0; bdyNodes[1]=bdyNodes1; } /* * @return the proper intersection point, or null * if none was found */ Coordinate& SegmentIntersector::getProperIntersectionPoint() { return properIntersectionPoint; } bool SegmentIntersector::hasIntersection() { return hasIntersectionVar; } /* * A proper intersection is an intersection which is interior to at least two * line segments. Note that a proper intersection is not necessarily * in the interior of the entire Geometry, since another edge may have * an endpoint equal to the intersection, which according to SFS semantics * can result in the point being on the Boundary of the Geometry. */ bool SegmentIntersector::hasProperIntersection() { return hasProper; } /* * A proper interior intersection is a proper intersection which is not * contained in the set of boundary nodes set for this SegmentIntersector. */ bool SegmentIntersector::hasProperInteriorIntersection() { return hasProperInterior; } /* * A trivial intersection is an apparent self-intersection which in fact * is simply the point shared by adjacent line segments. * Note that closed edges require a special check for the point * shared by the beginning and end segments. */ bool SegmentIntersector::isTrivialIntersection(Edge *e0,int segIndex0,Edge *e1,int segIndex1) { // if (e0->equals(e1)) if (e0==e1) { if (li->getIntersectionNum()==1) { if (isAdjacentSegments(segIndex0,segIndex1)) return true; if (e0->isClosed()) { int maxSegIndex=e0->getNumPoints()-1; if ((segIndex0==0 && segIndex1==maxSegIndex) || (segIndex1==0 && segIndex0==maxSegIndex)) { return true; } } } } return false; } /** * This method is called by clients of the EdgeIntersector class to test * for and add intersections for two segments of the edges being intersected. * Note that clients (such as MonotoneChainEdges) may choose not to intersect * certain pairs of segments for efficiency reasons. */ void SegmentIntersector::addIntersections(Edge *e0,int segIndex0,Edge *e1,int segIndex1) { #if GEOS_DEBUG cerr<<"SegmentIntersector::addIntersections() called"<equals(e1) && segIndex0==segIndex1) return; if (e0==e1 && segIndex0==segIndex1) return; numTests++; const CoordinateSequence* cl0=e0->getCoordinates(); const Coordinate& p00=cl0->getAt(segIndex0); const Coordinate& p01=cl0->getAt(segIndex0+1); const CoordinateSequence* cl1=e1->getCoordinates(); const Coordinate& p10=cl1->getAt(segIndex1); const Coordinate& p11=cl1->getAt(segIndex1+1); li->computeIntersection(p00,p01,p10,p11); /* * Always record any non-proper intersections. * If includeProper is true, record any proper intersections as well. */ if (li->hasIntersection()) { if (recordIsolated) { e0->setIsolated(false); e1->setIsolated(false); } //intersectionFound = true; numIntersections++; // If the segments are adjacent they have at least one trivial // intersection, the shared endpoint. // Don't bother adding it if it is the // only intersection. if (!isTrivialIntersection(e0,segIndex0,e1,segIndex1)) { #if GEOS_DEBUG cerr<<"SegmentIntersector::addIntersections(): has !TrivialIntersection"<isProper()) { //Debug.println(li); e0->addIntersections(li,segIndex0,0); e1->addIntersections(li,segIndex1,1); #if GEOS_DEBUG cerr<<"SegmentIntersector::addIntersections(): includeProper || !li->isProper()"<isProper()) { properIntersectionPoint=li->getIntersection(0); #if GEOS_DEBUG cerr<<"SegmentIntersector::addIntersections(): properIntersectionPoint: "< *tstBdyNodes) { if ( ! tstBdyNodes ) return false; for(vector::iterator i=tstBdyNodes->begin();iend();i++) { Node *node=*i; const Coordinate& pt=node->getCoordinate(); if (li->isIntersection(pt)) return true; } return false; } /*private*/ bool SegmentIntersector::isBoundaryPoint(LineIntersector *li, vector*>& tstBdyNodes) { if (isBoundaryPoint(li, tstBdyNodes[0])) return true; if (isBoundaryPoint(li, tstBdyNodes[1])) return true; return false; } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/index/SimpleEdgeSetIntersector.cpp0000644000175000017500000000455012206417146023573 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index SimpleEdgeSetIntersector::SimpleEdgeSetIntersector(): nOverlaps(0) { } void SimpleEdgeSetIntersector::computeIntersections(vector *edges, SegmentIntersector *si, bool testAllSegments) { nOverlaps = 0; size_t nedges=edges->size(); for(size_t i0=0; i0 *edges0, vector *edges1, SegmentIntersector *si) { nOverlaps = 0; size_t nedges0=edges0->size(); size_t nedges1=edges1->size(); for(size_t i0=0;i0getCoordinates(); const CoordinateSequence *pts1=e1->getCoordinates(); size_t npts0=pts0->getSize(); size_t npts1=pts1->getSize(); for(size_t i0=0; i0addIntersections(e0, i0, e1, i1); } } } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/index/SimpleMCSweepLineIntersector.cpp0000644000175000017500000001006112206417146024360 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index SimpleMCSweepLineIntersector::SimpleMCSweepLineIntersector() //events(new vector()) { } SimpleMCSweepLineIntersector::~SimpleMCSweepLineIntersector() { for(size_t i=0; iisDelete()) delete sle; } //delete events; } void SimpleMCSweepLineIntersector::computeIntersections(vector *edges, SegmentIntersector *si, bool testAllSegments) { if (testAllSegments) add(edges,NULL); else add(edges); computeIntersections(si); } void SimpleMCSweepLineIntersector::computeIntersections(vector *edges0, vector *edges1, SegmentIntersector *si) { add(edges0,edges0); add(edges1,edges1); computeIntersections(si); } void SimpleMCSweepLineIntersector::add(vector *edges) { for (size_t i=0; isize(); ++i) { Edge *edge=(*edges)[i]; // edge is its own group add(edge, edge); } } void SimpleMCSweepLineIntersector::add(vector *edges,void* edgeSet) { for (size_t i=0; isize(); ++i) { Edge *edge=(*edges)[i]; add(edge,edgeSet); } } void SimpleMCSweepLineIntersector::add(Edge *edge, void* edgeSet) { MonotoneChainEdge *mce=edge->getMonotoneChainEdge(); vector &startIndex=mce->getStartIndexes(); size_t n = startIndex.size()-1; events.reserve(events.size()+(n*2)); for(size_t i=0; igetMinX(i),NULL,mc); events.push_back(insertEvent); events.push_back(new SweepLineEvent(edgeSet,mce->getMaxX(i),insertEvent,mc)); } } /** * Because Delete Events have a link to their corresponding Insert event, * it is possible to compute exactly the range of events which must be * compared to a given Insert event object. */ void SimpleMCSweepLineIntersector::prepareEvents() { sort(events.begin(), events.end(), SweepLineEventLessThen()); for(size_t i=0; iisDelete()) { ev->getInsertEvent()->setDeleteEventIndex(i); } } } void SimpleMCSweepLineIntersector::computeIntersections(SegmentIntersector *si) { nOverlaps=0; prepareEvents(); for(size_t i=0; iisInsert()) { processOverlaps(i,ev->getDeleteEventIndex(),ev,si); } } } void SimpleMCSweepLineIntersector::processOverlaps(int start, int end, SweepLineEvent *ev0, SegmentIntersector *si) { MonotoneChain *mc0=(MonotoneChain*) ev0->getObject(); /* * Since we might need to test for self-intersections, * include current insert event object in list of event objects to test. * Last index can be skipped, because it must be a Delete event. */ for(int i=start; iisInsert()) { MonotoneChain *mc1=(MonotoneChain*) ev1->getObject(); // don't compare edges in same group // null group indicates that edges should be compared if (ev0->edgeSet==NULL || (ev0->edgeSet!=ev1->edgeSet)) { mc0->computeIntersections(mc1,si); nOverlaps++; } } } } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/index/SimpleSweepLineIntersector.cpp0000644000175000017500000000760712206417146024154 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index SimpleSweepLineIntersector::SimpleSweepLineIntersector(): //events(new vector()), nOverlaps(0) { } SimpleSweepLineIntersector::~SimpleSweepLineIntersector() { for(unsigned int i=0; i *edges, SegmentIntersector *si, bool testAllSegments) { if (testAllSegments) add(edges,NULL); else add(edges); computeIntersections(si); } void SimpleSweepLineIntersector::computeIntersections(vector *edges0,vector *edges1,SegmentIntersector *si) { add(edges0,edges0); add(edges1,edges1); computeIntersections(si); } void SimpleSweepLineIntersector::add(vector *edges) { for (unsigned int i=0; isize(); ++i) { Edge *edge=(*edges)[i]; // edge is its own group add(edge,edge); } } void SimpleSweepLineIntersector::add(vector *edges, void* edgeSet) { for (unsigned int i=0; isize(); ++i) { Edge *edge=(*edges)[i]; add(edge,edgeSet); } } void SimpleSweepLineIntersector::add(Edge *edge, void* edgeSet) { const CoordinateSequence *pts=edge->getCoordinates(); std::size_t n=pts->getSize()-1; for(std::size_t i=0; igetMinX(), NULL, ss); events.push_back(insertEvent); events.push_back(new SweepLineEvent(edgeSet, ss->getMaxX(), insertEvent, ss)); } } /** * Because Delete Events have a link to their corresponding Insert event, * it is possible to compute exactly the range of events which must be * compared to a given Insert event object. */ void SimpleSweepLineIntersector::prepareEvents() { sort(events.begin(), events.end(), SweepLineEventLessThen()); for(unsigned int i=0; iisDelete()) { ev->getInsertEvent()->setDeleteEventIndex(i); } } } void SimpleSweepLineIntersector::computeIntersections(SegmentIntersector *si) { nOverlaps=0; prepareEvents(); for(unsigned int i=0; iisInsert()) { processOverlaps(i,ev->getDeleteEventIndex(),ev,si); } } } void SimpleSweepLineIntersector::processOverlaps(int start,int end,SweepLineEvent *ev0, SegmentIntersector *si) { SweepLineSegment *ss0=(SweepLineSegment*) ev0->getObject(); /** * Since we might need to test for self-intersections, * include current insert event object in list of event objects to test. * Last index can be skipped, because it must be a Delete event. */ for(int i=start; iisInsert()) { SweepLineSegment *ss1=(SweepLineSegment*) ev1->getObject(); if (ev0->edgeSet==NULL || (ev0->edgeSet!=ev1->edgeSet)) { ss0->computeIntersections(ss1,si); nOverlaps++; } } } } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/geomgraph/index/SweepLineEvent.cpp0000644000175000017500000000405512206417146021554 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include using namespace std; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index SweepLineEvent::SweepLineEvent(void* newEdgeSet, double x, SweepLineEvent *newInsertEvent, SweepLineEventOBJ *newObj): edgeSet(newEdgeSet), obj(newObj), xValue(x), insertEvent(newInsertEvent), deleteEventIndex(0) { if(insertEvent!=NULL) eventType=DELETE_EVENT; else eventType=INSERT_EVENT; } SweepLineEvent::~SweepLineEvent(){ if (eventType==DELETE_EVENT) { delete insertEvent; delete obj; } } /** * ProjectionEvents are ordered first by their x-value, and then by their * eventType. * It is important that Insert events are sorted before Delete events, so that * items whose Insert and Delete events occur at the same x-value will be * correctly handled. */ int SweepLineEvent::compareTo(SweepLineEvent *sle) { if (xValuexValue) return -1; if (xValue>sle->xValue) return 1; if (eventTypeeventType) return -1; if (eventType>sle->eventType) return 1; return 0; } string SweepLineEvent::print() { ostringstream s; s<<"SweepLineEvent:"; s<<" xValue="< #include #include #include #include using namespace geos::geom; namespace geos { namespace geomgraph { // geos.geomgraph namespace index { // geos.geomgraph.index SweepLineSegment::SweepLineSegment(Edge *newEdge, int newPtIndex): edge(newEdge), pts(newEdge->getCoordinates()), ptIndex(newPtIndex) { //pts=newEdge->getCoordinates(); //edge=newEdge; //ptIndex=newPtIndex; } SweepLineSegment::~SweepLineSegment() { } double SweepLineSegment::getMinX() { double x1=pts->getAt(ptIndex).x; double x2=pts->getAt(ptIndex+1).x; return x1getAt(ptIndex).x; double x2=pts->getAt(ptIndex+1).x; return x1>x2?x1:x2; } void SweepLineSegment::computeIntersections(SweepLineSegment *ss, SegmentIntersector *si) { si->addIntersections(edge, ptIndex, ss->edge, ss->ptIndex); } } // namespace geos.geomgraph.index } // namespace geos.geomgraph } // namespace geos geos-3.4.2/src/index/0000755000175000017500000000000012206417233014173 5ustar frankiefrankiegeos-3.4.2/src/index/Makefile.am0000644000175000017500000000064712206417146016241 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ bintree \ chain \ intervalrtree \ quadtree \ strtree \ sweepline noinst_LTLIBRARIES = libindex.la libindex_la_SOURCES = libindex_la_LIBADD = \ bintree/libindexbintree.la \ chain/libindexchain.la \ intervalrtree/libintervalrtree.la \ quadtree/libindexquadtree.la \ strtree/libindexstrtree.la \ sweepline/libindexsweepline.la geos-3.4.2/src/index/Makefile.in0000644000175000017500000005040312206417163016244 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libindex_la_DEPENDENCIES = bintree/libindexbintree.la \ chain/libindexchain.la intervalrtree/libintervalrtree.la \ quadtree/libindexquadtree.la strtree/libindexstrtree.la \ sweepline/libindexsweepline.la am_libindex_la_OBJECTS = libindex_la_OBJECTS = $(am_libindex_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libindex_la_SOURCES) DIST_SOURCES = $(libindex_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ bintree \ chain \ intervalrtree \ quadtree \ strtree \ sweepline noinst_LTLIBRARIES = libindex.la libindex_la_SOURCES = libindex_la_LIBADD = \ bintree/libindexbintree.la \ chain/libindexchain.la \ intervalrtree/libintervalrtree.la \ quadtree/libindexquadtree.la \ strtree/libindexstrtree.la \ sweepline/libindexsweepline.la all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libindex.la: $(libindex_la_OBJECTS) $(libindex_la_DEPENDENCIES) $(LINK) $(libindex_la_OBJECTS) $(libindex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/bintree/0000755000175000017500000000000012206417233015623 5ustar frankiefrankiegeos-3.4.2/src/index/bintree/Bintree.cpp0000644000175000017500000000621112206417145017721 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree using namespace std; Interval* Bintree::ensureExtent(const Interval* itemInterval, double minExtent) { double min = itemInterval->getMin(); double max = itemInterval->getMax(); // has a non-zero extent if (min != max) { // GEOS forces a copy here to be predictable wrt // memory management. May change in the future. return new Interval(*itemInterval); } // pad extent if (min==max) { min = min-minExtent/2.0; max = min+minExtent/2.0; } return new Interval(min, max); } Bintree::Bintree() { minExtent=1.0; root=new Root(); } Bintree::~Bintree() { for (unsigned int i=0; idepth(); return 0; } int Bintree::size() { if (root!=NULL) return root->size(); return 0; } /** * Compute the total number of nodes in the tree * * @return the number of nodes in the tree */ int Bintree::nodeSize() { if (root!=NULL) return root->nodeSize(); return 0; } void Bintree::insert(Interval *itemInterval,void* item) { collectStats(itemInterval); Interval *insertInterval=ensureExtent(itemInterval,minExtent); if ( insertInterval != itemInterval ) newIntervals.push_back(insertInterval); //int oldSize=size(); root->insert(insertInterval,item); /* GEOS_DEBUG int newSize=size(); System.out.println("BinTree: size="+newSize+" node size="+nodeSize()); if (newSize <= oldSize) { System.out.println("Lost item!"); root.insert(insertInterval, item); System.out.println("reinsertion size="+size()); } */ } vector* Bintree::iterator() { vector* foundItems=new vector(); root->addAllItems(foundItems); return foundItems; } vector* Bintree::query(double x) { return query(new Interval(x, x)); } /** * min and max may be the same value */ vector* Bintree::query(Interval *interval) { /** * the items that are matched are all items in intervals * which overlap the query interval */ vector* foundItems=new vector(); query(interval,foundItems); return foundItems; } void Bintree::query(Interval *interval,vector *foundItems) { root->addAllItemsFromOverlapping(interval,foundItems); } void Bintree::collectStats(Interval *interval) { double del=interval->getWidth(); if (del0.0) minExtent=del; } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/bintree/Interval.cpp0000644000175000017500000000355312206417145020123 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree Interval::Interval() { min=0.0; max=0.0; } Interval::Interval(double nmin, double nmax) { init(nmin, nmax); } Interval::~Interval() { } Interval::Interval(const Interval* interval) { init(interval->min, interval->max); } void Interval::init(double nmin, double nmax) { min=nmin; max=nmax; if (min>max) { min=nmax; max=nmin; } } double Interval::getMin() const { return min; } double Interval::getMax() const { return max; } double Interval::getWidth() const { return max-min; } void Interval::expandToInclude(Interval *interval) { if (interval->max>max) max=interval->max; if (interval->minmin; } bool Interval::overlaps(const Interval *interval) const { return overlaps(interval->min,interval->max); } bool Interval::overlaps(double nmin, double nmax) const { if (min>nmax || maxmin,interval->max); } bool Interval::contains(double nmin, double nmax) const { return (nmin>=min && nmax<=max); } bool Interval::contains(double p) const { return (p>=min && p<=max); } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/bintree/Key.cpp0000644000175000017500000000404212206417145017061 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree int Key::computeLevel(Interval *newInterval) { using geos::index::quadtree::DoubleBits; double dx=newInterval->getWidth(); //int level = BinaryPower.exponent(dx) + 1; int level=DoubleBits::exponent(dx)+1; return level; } Key::Key(Interval *newInterval) { interval=NULL; pt=0.0; level=0; computeKey(newInterval); } Key::~Key() { delete interval; } double Key::getPoint() { return pt; } int Key::getLevel() { return level; } Interval* Key::getInterval() { return interval; } /** * return a square envelope containing the argument envelope, * whose extent is a power of two and which is based at a power of 2 */ void Key::computeKey(Interval *itemInterval) { level=computeLevel(itemInterval); delete interval; interval=new Interval(); computeInterval(level,itemInterval); // MD - would be nice to have a non-iterative form of this algorithm while (!interval->contains(itemInterval)) { level+=1; computeInterval(level,itemInterval); } } void Key::computeInterval(int level, Interval *itemInterval) { using geos::index::quadtree::DoubleBits; double size=DoubleBits::powerOf2(level); //double size = pow2.power(level); pt=std::floor(itemInterval->getMin()/size)*size; interval->init(pt,pt+size); } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/bintree/Makefile.am0000644000175000017500000000046512206417145017666 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexbintree.la INCLUDES = -I$(top_srcdir)/include libindexbintree_la_SOURCES = \ Bintree.cpp \ Interval.cpp \ Node.cpp \ Key.cpp \ NodeBase.cpp \ Root.cpp libindexbintree_la_LIBADD = geos-3.4.2/src/index/bintree/Makefile.in0000644000175000017500000004110312206417163017671 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index/bintree DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libindexbintree_la_DEPENDENCIES = am_libindexbintree_la_OBJECTS = Bintree.lo Interval.lo Node.lo Key.lo \ NodeBase.lo Root.lo libindexbintree_la_OBJECTS = $(am_libindexbintree_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libindexbintree_la_SOURCES) DIST_SOURCES = $(libindexbintree_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexbintree.la INCLUDES = -I$(top_srcdir)/include libindexbintree_la_SOURCES = \ Bintree.cpp \ Interval.cpp \ Node.cpp \ Key.cpp \ NodeBase.cpp \ Root.cpp libindexbintree_la_LIBADD = all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/bintree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/bintree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libindexbintree.la: $(libindexbintree_la_OBJECTS) $(libindexbintree_la_DEPENDENCIES) $(CXXLINK) $(libindexbintree_la_OBJECTS) $(libindexbintree_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bintree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Interval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Key.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Node.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodeBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Root.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/bintree/Node.cpp0000644000175000017500000000720512206417145017222 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree Node* Node::createNode(Interval *itemInterval) { Key *key=new Key(itemInterval); //System.out.println("input: " + env + " binaryEnv: " + key.getEnvelope()); Node* node=new Node(new Interval(key->getInterval()),key->getLevel()); delete key; return node; } Node* Node::createExpanded(Node *node,Interval *addInterval) { Interval *expandInt=new Interval(addInterval); if (node!=NULL) expandInt->expandToInclude(node->interval); Node *largerNode=createNode(expandInt); if (node!=NULL) largerNode->insert(node); delete expandInt; return largerNode; } Node::Node(Interval *newInterval,int newLevel) { interval=newInterval; level=newLevel; centre=(interval->getMin()+interval->getMax())/2; } Node::~Node() { delete interval; } Interval* Node::getInterval() { return interval; } bool Node::isSearchMatch(Interval *itemInterval) { return itemInterval->overlaps(interval); } /** * Returns the subnode containing the envelope. * Creates the node if * it does not already exist. */ Node* Node::getNode(Interval *searchInterval) { int subnodeIndex=getSubnodeIndex(searchInterval,centre); // if index is -1 searchEnv is not contained in a subnode if (subnodeIndex!=-1) { // create the node if it does not exist Node* node=getSubnode(subnodeIndex); // recursively search the found/created node return node->getNode(searchInterval); } else { return this; } } /** * Returns the smallest existing * node containing the envelope. */ NodeBase* Node::find(Interval *searchInterval) { int subnodeIndex=getSubnodeIndex(searchInterval,centre); if (subnodeIndex==-1) return this; if (subnode[subnodeIndex]!=NULL) { // query lies in subnode, so search it Node *node=subnode[subnodeIndex]; return node->find(searchInterval); } // no existing subnode, so return this one anyway return this; } void Node::insert(Node *node) { assert(interval==NULL || interval->contains(node->interval)); int index=getSubnodeIndex(node->interval,centre); assert(index >= 0); if (node->level==level-1) { subnode[index]=node; } else { // the node is not a direct child, so make a new child node to contain it // and recursively insert the node Node* childNode=createSubnode(index); childNode->insert(node); subnode[index]=childNode; } } /** * get the subnode for the index. * If it doesn't exist, create it */ Node* Node::getSubnode(int index) { if (subnode[index]==NULL) { subnode[index]=createSubnode(index); } return subnode[index]; } Node* Node::createSubnode(int index) { // create a new subnode in the appropriate interval double min=0.0; double max=0.0; switch (index) { case 0: min=interval->getMin(); max=centre; break; case 1: min=centre; max=interval->getMax(); break; } Interval* subInt=new Interval(min,max); Node *node=new Node(subInt,level-1); return node; } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/bintree/NodeBase.cpp0000644000175000017500000000540712206417145020017 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include // FIXME: split #include using namespace std; using namespace geos::index::chain; namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree /** * Returns the index of the subnode that wholely contains the given interval. * If none does, returns -1. */ int NodeBase::getSubnodeIndex(Interval *interval, double centre) { int subnodeIndex=-1; if (interval->min>=centre) subnodeIndex=1; if (interval->max<=centre) subnodeIndex=0; return subnodeIndex; } NodeBase::NodeBase() { items=new vector(); subnode[0]=NULL; subnode[1]=NULL; } NodeBase::~NodeBase() { for(int i=0;i<(int)items->size();i++) { delete (MonotoneChain*)(*items)[i]; } delete items; delete subnode[0]; delete subnode[1]; subnode[0]=NULL; subnode[1]=NULL; } vector* NodeBase::getItems() { return items; } void NodeBase::add(void* item){ items->push_back(item); } vector* NodeBase::addAllItems(vector *newItems) { items->insert(items->end(),newItems->begin(),newItems->end()); for(int i=0;i<2;i++) { if (subnode[i]!=NULL) { subnode[i]->addAllItems(newItems); } } return items; } vector* NodeBase::addAllItemsFromOverlapping(Interval *interval,vector *resultItems) { if (!isSearchMatch(interval)) return items; resultItems->insert(resultItems->end(),items->begin(),items->end()); for (int i=0;i<2;i++) { if (subnode[i]!=NULL) { subnode[i]->addAllItemsFromOverlapping(interval,resultItems); } } return items; } int NodeBase::depth() { int maxSubDepth=0; for (int i=0;i<2;i++) { if (subnode[i]!=NULL) { int sqd=subnode[i]->depth(); if (sqd>maxSubDepth) maxSubDepth=sqd; } } return maxSubDepth+1; } int NodeBase::size() { int subSize=0; for (int i=0;i<2;i++) { if (subnode[i]!=NULL) { subSize+=subnode[i]->size(); } } return subSize+(int)items->size(); } int NodeBase::nodeSize() { int subSize=0; for (int i=0;i<2;i++) { if (subnode[i]!=NULL) { subSize+=subnode[i]->nodeSize(); } } return subSize+1; } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/bintree/Root.cpp0000644000175000017500000000471212206417145017260 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include namespace geos { namespace index { // geos.index namespace bintree { // geos.index.bintree double Root::origin=0.0; void Root::insert(Interval *itemInterval,void* item) { int index=getSubnodeIndex(itemInterval,origin); // if index is -1, itemEnv must contain the origin. if (index==-1) { add(item); return; } /** * the item must be contained in one interval, so insert it into the * tree for that interval (which may not yet exist) */ Node *node=subnode[index]; /** * If the subnode doesn't exist or this item is not contained in it, * have to expand the tree upward to contain the item. */ if (node==NULL || !node->getInterval()->contains(itemInterval)) { Node* largerNode=Node::createExpanded(node,itemInterval); // delete subnode[index]; subnode[index]=largerNode; } /** * At this point we have a subnode which exists and must contain * contains the env for the item. Insert the item into the tree. */ insertContained(subnode[index],itemInterval,item); //System.out.println("depth = " + root.depth() + " size = " + root.size()); } void Root::insertContained(Node *tree, Interval *itemInterval, void* item) { using geos::index::quadtree::IntervalSize; assert(tree->getInterval()->contains(itemInterval)); /** * Do NOT create a new node for zero-area intervals - this would lead * to infinite recursion. Instead, use a heuristic of simply returning * the smallest existing node containing the query */ bool isZeroArea=IntervalSize::isZeroWidth(itemInterval->getMin(), itemInterval->getMax()); NodeBase *node; if (isZeroArea) node=tree->find(itemInterval); else node=tree->getNode(itemInterval); node->add(item); } } // namespace geos.index.bintree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/chain/0000755000175000017500000000000012206417233015255 5ustar frankiefrankiegeos-3.4.2/src/index/chain/Makefile.am0000644000175000017500000000044312206417145017314 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexchain.la INCLUDES = -I$(top_srcdir)/include libindexchain_la_SOURCES = \ MonotoneChain.cpp \ MonotoneChainBuilder.cpp \ MonotoneChainOverlapAction.cpp \ MonotoneChainSelectAction.cpp geos-3.4.2/src/index/chain/Makefile.in0000644000175000017500000004075212206417163017334 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index/chain DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libindexchain_la_LIBADD = am_libindexchain_la_OBJECTS = MonotoneChain.lo MonotoneChainBuilder.lo \ MonotoneChainOverlapAction.lo MonotoneChainSelectAction.lo libindexchain_la_OBJECTS = $(am_libindexchain_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libindexchain_la_SOURCES) DIST_SOURCES = $(libindexchain_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexchain.la INCLUDES = -I$(top_srcdir)/include libindexchain_la_SOURCES = \ MonotoneChain.cpp \ MonotoneChainBuilder.cpp \ MonotoneChainOverlapAction.cpp \ MonotoneChainSelectAction.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/chain/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/chain/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libindexchain.la: $(libindexchain_la_OBJECTS) $(libindexchain_la_DEPENDENCIES) $(CXXLINK) $(libindexchain_la_OBJECTS) $(libindexchain_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChainBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChainOverlapAction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MonotoneChainSelectAction.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/chain/MonotoneChain.cpp0000644000175000017500000001137612206417145020534 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChain.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace index { // geos.index namespace chain { // geos.index.chain MonotoneChain::MonotoneChain(const geom::CoordinateSequence& newPts, size_t nstart, size_t nend, void* nContext) : pts(newPts), env(0), context(nContext), start(nstart), end(nend), id(-1) { } MonotoneChain::~MonotoneChain() { delete env; } const Envelope& MonotoneChain::getEnvelope() const { if (0 == env) { const Coordinate& p0 = pts[start]; const Coordinate& p1 = pts[end]; env = new Envelope(p0, p1); } return *env; } void MonotoneChain::getLineSegment(size_t index, LineSegment& ls) const { ls.p0 = pts[index]; ls.p1 = pts[index+1]; } std::auto_ptr MonotoneChain::getCoordinates() const { return std::auto_ptr(pts.clone()); } void MonotoneChain::select(const Envelope& searchEnv, MonotoneChainSelectAction& mcs) { computeSelect(searchEnv, start, end, mcs); } void MonotoneChain::computeSelect(const Envelope& searchEnv, size_t start0, size_t end0, MonotoneChainSelectAction& mcs ) { const Coordinate& p0=pts[start0]; const Coordinate& p1=pts[end0]; mcs.tempEnv1.init(p0,p1); //Debug.println("trying:"+p0+p1+" [ "+start0+","+end0+" ]"); // terminating condition for the recursion if(end0-start0==1) { //Debug.println("computeSelect:"+p0+p1); mcs.select(*this,start0); return; } // nothing to do if the envelopes don't overlap if (!searchEnv.intersects(mcs.tempEnv1)) return; // the chains overlap,so split each in half and iterate (binary search) unsigned int mid=(start0+end0)/2; // Assert: mid != start or end (since we checked above for end-start <= 1) // check terminating conditions before recursing if (start0 < mid) { computeSelect(searchEnv,start0,mid,mcs); } if (mid < end0) { computeSelect(searchEnv,mid,end0,mcs); } } /* public */ void MonotoneChain::computeOverlaps(MonotoneChain *mc, MonotoneChainOverlapAction *mco) { computeOverlaps(start, end, *mc, mc->start, mc->end, *mco); } /*private*/ void MonotoneChain::computeOverlaps(size_t start0, size_t end0, MonotoneChain& mc, size_t start1, size_t end1, MonotoneChainOverlapAction& mco) { //Debug.println("computeIntersectsForChain:"+p00+p01+p10+p11); // terminating condition for the recursion if (end0-start0==1 && end1-start1==1) { mco.overlap(*this, start0, mc, start1); return; } const Coordinate& p00 = pts[start0]; const Coordinate& p01 = pts[end0]; const Coordinate& p10 = mc.pts[start1]; const Coordinate& p11 = mc.pts[end1]; // nothing to do if the envelopes of these chains don't overlap mco.tempEnv1.init(p00, p01); mco.tempEnv2.init(p10, p11); if (!mco.tempEnv1.intersects(mco.tempEnv2)) return; // the chains overlap,so split each in half and iterate (binary search) size_t mid0=(start0+end0)/2; size_t mid1=(start1+end1)/2; // Assert: mid != start or end (since we checked above for // end-start <= 1) // check terminating conditions before recursing if (start0 #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace index { // geos.index namespace chain { // geos.index.chain /* static public */ vector* MonotoneChainBuilder::getChains(const CoordinateSequence* pts, void* context) { vector* mcList = new vector(); getChains(pts, context, *mcList); return mcList; } /* static public */ void MonotoneChainBuilder::getChains(const CoordinateSequence* pts, void* context, vector& mcList) { vector startIndex; getChainStartIndices(*pts, startIndex); std::size_t nindexes = startIndex.size(); if (nindexes > 0) { std::size_t n = nindexes - 1; for(std::size_t i = 0; i < n; i++) { MonotoneChain* mc = new MonotoneChain(*pts, startIndex[i], startIndex[i+1], context); mcList.push_back(mc); } } } /* static public */ void MonotoneChainBuilder::getChainStartIndices(const CoordinateSequence& pts, vector& startIndexList) { // find the startpoint (and endpoints) of all monotone chains // in this edge std::size_t start = 0; startIndexList.push_back(start); const std::size_t n = pts.getSize() - 1; do { std::size_t last = findChainEnd(pts, start); startIndexList.push_back(last); start = last; } while (start < n); } /* private static */ std::size_t MonotoneChainBuilder::findChainEnd(const CoordinateSequence& pts, std::size_t start) { const std::size_t npts = pts.getSize(); // cache assert(start < npts); assert(npts); // should be implied by the assertion above, // 'start' being unsigned std::size_t safeStart = start; // skip any zero-length segments at the start of the sequence // (since they cannot be used to establish a quadrant) while ( safeStart < npts - 1 && pts[safeStart].equals2D(pts[safeStart+1]) ) { ++safeStart; } // check if there are NO non-zero-length segments if (safeStart >= npts - 1) { return npts - 1; } // determine overall quadrant for chain // (which is the starting quadrant) int chainQuad = Quadrant::quadrant(pts[safeStart], pts[safeStart + 1]); std::size_t last = start + 1; while (last < npts) { // skip zero-length segments, but include them in the chain if (! pts[last - 1].equals2D( pts[last] ) ) { // compute quadrant for next possible segment in chain int quad = Quadrant::quadrant( pts[last - 1], pts[last] ); if (quad != chainQuad) break; } ++last; } #if GEOS_DEBUG std::cerr<<"MonotoneChainBuilder::findChainEnd() returning"< #include #include #include #include //#include namespace geos { namespace index { // geos.index namespace chain { // geos.index.chain void MonotoneChainOverlapAction::overlap(MonotoneChain& mc1, size_t start1, MonotoneChain& mc2, size_t start2) { mc1.getLineSegment(start1, overlapSeg1); mc2.getLineSegment(start2, overlapSeg2); overlap(overlapSeg1, overlapSeg2); } } // namespace geos.index.chain } // namespace geos.index } // namespace geos geos-3.4.2/src/index/chain/MonotoneChainSelectAction.cpp0000644000175000017500000000223512206417145023024 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/chain/MonotoneChainSelectAction.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #include #include #include #include namespace geos { namespace index { // geos.index namespace chain { // geos.index.chain void MonotoneChainSelectAction::select(MonotoneChain& mc, unsigned int start) { mc.getLineSegment(start, selectedSegment); select(selectedSegment); } } // namespace geos.index.chain } // namespace geos.index } // namespace geos geos-3.4.2/src/index/intervalrtree/0000755000175000017500000000000012206417233017061 5ustar frankiefrankiegeos-3.4.2/src/index/intervalrtree/IntervalRTreeBranchNode.cpp0000644000175000017500000000202612206417145024241 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include namespace geos { namespace index { namespace intervalrtree { // // private: // // // protected: // // // public: // void IntervalRTreeBranchNode::query( double queryMin, double queryMax, index::ItemVisitor * visitor) const { if (! intersects(queryMin, queryMax)) return; if (node1) node1->query( queryMin, queryMax, visitor); if (node2) node2->query( queryMin, queryMax, visitor); } } // geos::intervalrtree } // geos::index } // geos geos-3.4.2/src/index/intervalrtree/IntervalRTreeLeafNode.cpp0000644000175000017500000000166512206417145023723 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include namespace geos { namespace index { namespace intervalrtree { // // private: // // // protected: // // // public: // void IntervalRTreeLeafNode::query( double queryMin, double queryMax, index::ItemVisitor * visitor) const { if (! intersects( queryMin, queryMax)) return; visitor->visitItem( item); } } // geos::intervalrtree } // geos::index } // geos geos-3.4.2/src/index/intervalrtree/IntervalRTreeNode.cpp0000644000175000017500000000131612206417145023124 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace index { namespace intervalrtree { // // private: // // // protected: // // // public: // } // geos::intervalrtree } // geos::index } // geos geos-3.4.2/src/index/intervalrtree/Makefile.am0000644000175000017500000000045212206417145021120 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libintervalrtree.la INCLUDES = -I$(top_srcdir)/include libintervalrtree_la_SOURCES = \ IntervalRTreeBranchNode.cpp \ IntervalRTreeLeafNode.cpp \ IntervalRTreeNode.cpp \ SortedPackedIntervalRTree.cpp geos-3.4.2/src/index/intervalrtree/Makefile.in0000644000175000017500000004106112206417163021132 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index/intervalrtree DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libintervalrtree_la_LIBADD = am_libintervalrtree_la_OBJECTS = IntervalRTreeBranchNode.lo \ IntervalRTreeLeafNode.lo IntervalRTreeNode.lo \ SortedPackedIntervalRTree.lo libintervalrtree_la_OBJECTS = $(am_libintervalrtree_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libintervalrtree_la_SOURCES) DIST_SOURCES = $(libintervalrtree_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libintervalrtree.la INCLUDES = -I$(top_srcdir)/include libintervalrtree_la_SOURCES = \ IntervalRTreeBranchNode.cpp \ IntervalRTreeLeafNode.cpp \ IntervalRTreeNode.cpp \ SortedPackedIntervalRTree.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/intervalrtree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/intervalrtree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libintervalrtree.la: $(libintervalrtree_la_OBJECTS) $(libintervalrtree_la_DEPENDENCIES) $(CXXLINK) $(libintervalrtree_la_OBJECTS) $(libintervalrtree_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntervalRTreeBranchNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntervalRTreeLeafNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntervalRTreeNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SortedPackedIntervalRTree.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/intervalrtree/SortedPackedIntervalRTree.cpp0000644000175000017500000000613712206417145024615 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #ifdef _MSC_VER #pragma warning(disable : 4127) #endif namespace geos { namespace index { namespace intervalrtree { // // private: // void SortedPackedIntervalRTree::init() { if (root != NULL) return; root = buildTree(); } const IntervalRTreeNode * SortedPackedIntervalRTree::buildTree() { // sort the leaf nodes std::sort( leaves->begin(), leaves->end(), IntervalRTreeNode::compare ); // now group nodes into blocks of two and build tree up recursively IntervalRTreeNode::ConstVect * src = leaves; IntervalRTreeNode::ConstVect * dest = new IntervalRTreeNode::ConstVect(); while (true) { buildLevel( src, dest); if (dest->size() == 1) { const IntervalRTreeNode * r = (*dest)[ 0 ]; delete src; delete dest; //delete leaves; // don't need anymore return r; } IntervalRTreeNode::ConstVect * temp = src; src = dest; dest = temp; } } void SortedPackedIntervalRTree::buildLevel( IntervalRTreeNode::ConstVect * src, IntervalRTreeNode::ConstVect * dest) { level++; dest->clear(); for (size_t i = 0, ni = src->size(); i < ni; i += 2) { const IntervalRTreeNode * n1 = (*src)[ i ]; if ( i + 1 < ni ) { const IntervalRTreeNode * n2 = (*src)[ i + 1 ]; const IntervalRTreeNode * node = new IntervalRTreeBranchNode( n1, n2 ); dest->push_back( node); } else { dest->push_back( n1); } } } // // protected: // // // public: // SortedPackedIntervalRTree::SortedPackedIntervalRTree() : leaves( new IntervalRTreeNode::ConstVect()), root( NULL), level( 0) { } SortedPackedIntervalRTree::~SortedPackedIntervalRTree() { if ( root != NULL ) { // deleting root cascades to all IntervalRTreeNode's delete root; } else // possibly IntervalRTreeNode's in leaves to delete { for ( size_t i = 0, ni = leaves->size(); i < ni; i++ ) delete (*leaves)[i]; delete leaves; } } void SortedPackedIntervalRTree::insert( double min, double max, void * item) { if (root != NULL) throw new util::UnsupportedOperationException( "Index cannot be added to once it has been queried"); leaves->push_back( new IntervalRTreeLeafNode( min, max, item)); } void SortedPackedIntervalRTree::query( double min, double max, index::ItemVisitor * visitor) { init(); root->query( min, max, visitor); } } // geos::intervalrtree } // geos::index } // geos geos-3.4.2/src/index/quadtree/0000755000175000017500000000000012206417233016005 5ustar frankiefrankiegeos-3.4.2/src/index/quadtree/DoubleBits.cpp0000644000175000017500000000714412206417146020556 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/DoubleBits.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #include #include #include #include #if __STDC_IEC_559__ #define ASSUME_IEEE_DOUBLE 1 #else #define ASSUME_IEEE_DOUBLE 0 #endif #if ! ASSUME_IEEE_DOUBLE #include #endif namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree using namespace std; double DoubleBits::powerOf2(int exp) { if (exp>1023 || exp<-1022) throw util::IllegalArgumentException("Exponent out of bounds"); #if ASSUME_IEEE_DOUBLE int64 expBias=exp+EXPONENT_BIAS; int64 bits=expBias << 52; double ret; memcpy(&ret, &bits, sizeof(int64)); return ret; #else return pow(2.0, exp); #endif } int DoubleBits::exponent(double d) { DoubleBits db(d); return db.getExponent(); } double DoubleBits::truncateToPowerOfTwo(double d) { DoubleBits db(d); db.zeroLowerBits(52); return db.getDouble(); } string DoubleBits::toBinaryString(double d) { DoubleBits db(d); return db.toString(); } double DoubleBits::maximumCommonMantissa(double d1, double d2) { if (d1==0.0 || d2==0.0) return 0.0; DoubleBits db1(d1); DoubleBits db2(d2); if (db1.getExponent() != db2.getExponent()) return 0.0; int maxCommon=db1.numCommonMantissaBits(db2); db1.zeroLowerBits(64-(12+maxCommon)); return db1.getDouble(); } /*public*/ DoubleBits::DoubleBits(double nx) { #if ASSUME_IEEE_DOUBLE memcpy(&xBits,&nx,sizeof(double)); #endif x = nx; } /*public*/ double DoubleBits::getDouble() const { return x; } /*public*/ int64 DoubleBits::biasedExponent() const { int64 signExp=xBits>>52; int64 exp=signExp&0x07ff; //cerr<<"xBits:"< #include #include #include using namespace std; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree /* public static */ bool IntervalSize::isZeroWidth(double mn, double mx) { double width = mx - mn; if (width == 0.0) return true; double maxAbs = max(fabs(mn), fabs(mx)); double scaledInterval = width / maxAbs; int level = DoubleBits::exponent(scaledInterval); return level <= MIN_BINARY_EXPONENT; } } // namespace geos.index.quadtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/quadtree/Key.cpp0000644000175000017500000000531512206417146017250 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Key.java rev 1.8 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree /* static public */ int Key::computeQuadLevel(const Envelope& env) { double dx = env.getWidth(); double dy = env.getHeight(); double dMax = dx > dy ? dx : dy; int level=DoubleBits::exponent(dMax)+1; #if GEOS_DEBUG std::cerr<<"Maxdelta:"< #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree /* public static */ std::auto_ptr Node::createNode(const Envelope& env) { Key key(env); std::auto_ptr nenv ( new Envelope(key.getEnvelope()) ); std::auto_ptr node ( new Node(nenv, key.getLevel()) ); return node; } /* static public */ std::auto_ptr Node::createExpanded(std::auto_ptr node, const Envelope& addEnv) { Envelope expandEnv(addEnv); if ( node.get() ) // should this be asserted ? { expandEnv.expandToInclude(node->getEnvelope()); } #if GEOS_DEBUG cerr<<"Node::createExpanded computed "< largerNode = createNode(expandEnv); if ( node.get() ) // should this be asserted ? { largerNode->insertNode(node); } return largerNode; } /*public*/ Node* Node::getNode(const Envelope *searchEnv) { int subnodeIndex = getSubnodeIndex(searchEnv, centre); // if subquadIndex is -1 searchEnv is not contained in a subquad if (subnodeIndex != -1) { // create the quad if it does not exist Node *node = getSubnode(subnodeIndex); // recursively search the found/created quad return node->getNode(searchEnv); } else { return this; } } /*public*/ NodeBase* Node::find(const Envelope *searchEnv) { int subnodeIndex=getSubnodeIndex(searchEnv, centre); if (subnodeIndex==-1) return this; if (subnode[subnodeIndex]!=NULL) { // query lies in subquad, so search it Node *node=subnode[subnodeIndex]; return node->find(searchEnv); } // no existing subquad, so return this one anyway return this; } void Node::insertNode(std::auto_ptr node) { assert( env->contains(node->getEnvelope()) ); int index = getSubnodeIndex(node->getEnvelope(), centre); assert(index >= 0); if (node->level == level-1) { // We take ownership of node delete subnode[index]; subnode[index] = node.release(); //System.out.println("inserted"); } else { // the quad is not a direct child, so make a new child // quad to contain it and recursively insert the quad std::auto_ptr childNode ( createSubnode(index) ); // childNode takes ownership of node childNode->insertNode(node); // We take ownership of childNode delete subnode[index]; subnode[index] = childNode.release(); } } Node* Node::getSubnode(int index) { assert(index >=0 && index < 4); if (subnode[index] == NULL) { subnode[index] = createSubnode(index).release(); } return subnode[index]; } std::auto_ptr Node::createSubnode(int index) { // create a new subquad in the appropriate quadrant double minx=0.0; double maxx=0.0; double miny=0.0; double maxy=0.0; switch (index) { case 0: minx=env->getMinX(); maxx=centre.x; miny=env->getMinY(); maxy=centre.y; break; case 1: minx=centre.x; maxx=env->getMaxX(); miny=env->getMinY(); maxy=centre.y; break; case 2: minx=env->getMinX(); maxx=centre.x; miny=centre.y; maxy=env->getMaxY(); break; case 3: minx=centre.x; maxx=env->getMaxX(); miny=centre.y; maxy=env->getMaxY(); break; } std::auto_ptr sqEnv ( new Envelope(minx,maxx,miny,maxy) ); std::auto_ptr node ( new Node(sqEnv, level-1) ); return node; } string Node::toString() const { ostringstream os; os <<"L"<toString()<<" Ctr["< #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree int NodeBase::getSubnodeIndex(const Envelope *env, const Coordinate& centre) { int subnodeIndex=-1; if (env->getMinX()>=centre.x) { if (env->getMinY()>=centre.y) subnodeIndex=3; if (env->getMaxY()<=centre.y) subnodeIndex=1; } if (env->getMaxX()<=centre.x) { if (env->getMinY()>=centre.y) subnodeIndex=2; if (env->getMaxY()<=centre.y) subnodeIndex=0; } #if GEOS_DEBUG cerr<<"getSubNodeIndex("<toString()<<", "<& NodeBase::getItems() { return items; } void NodeBase::add(void* item) { items.push_back(item); //GEOS_DEBUG itemCount++; //GEOS_DEBUG System.out.print(itemCount); } vector& NodeBase::addAllItems(vector& resultItems) const { // this node may have items as well as subnodes (since items may not // be wholely contained in any single subnode resultItems.insert(resultItems.end(), items.begin(), items.end()); for(int i=0; i<4; ++i) { if ( subnode[i] ) { subnode[i]->addAllItems(resultItems); } } return resultItems; } void NodeBase::addAllItemsFromOverlapping(const Envelope& searchEnv, vector& resultItems) const { if (!isSearchMatch(searchEnv)) return; // this node may have items as well as subnodes (since items may not // be wholely contained in any single subnode resultItems.insert(resultItems.end(), items.begin(), items.end()); for(int i=0; i<4; ++i) { if ( subnode[i] ) { subnode[i]->addAllItemsFromOverlapping(searchEnv, resultItems); } } } //<> In Samet's terminology, I think what we're returning here is //actually level+1 rather than depth. (See p. 4 of his book) [Jon Aquino] unsigned int NodeBase::depth() const { unsigned int maxSubDepth=0; for (int i=0; i<4; ++i) { if (subnode[i] != NULL) { unsigned int sqd=subnode[i]->depth(); if ( sqd > maxSubDepth ) maxSubDepth=sqd; } } return maxSubDepth + 1; } unsigned int NodeBase::size() const { unsigned int subSize=0; for(int i=0; i<4; i++) { if (subnode[i] != NULL) { subSize += subnode[i]->size(); } } return subSize + items.size(); } unsigned int NodeBase::getNodeCount() const { unsigned int subSize=0; for(int i=0; i<4; ++i) { if (subnode[i] != NULL) { subSize += subnode[i]->size(); } } return subSize + 1; } string NodeBase::toString() const { ostringstream s; s<<"ITEMS:"<toString(); s<visit(searchEnv, visitor); } } } /*private*/ void NodeBase::visitItems(const Envelope* searchEnv, ItemVisitor& visitor) { ::geos::ignore_unused_variable_warning(searchEnv); // would be nice to filter items based on search envelope, but can't // until they contain an envelope for (vector::iterator i=items.begin(), e=items.end(); i!=e; i++) { visitor.visitItem(*i); } } /*public*/ bool NodeBase::remove(const Envelope* itemEnv, void* item) { // use envelope to restrict nodes scanned if (! isSearchMatch(*itemEnv)) return false; bool found = false; for (int i = 0; i < 4; ++i) { if ( subnode[i] ) { found = subnode[i]->remove(itemEnv, item); if (found) { // trim subtree if empty if (subnode[i]->isPrunable()) { delete subnode[i]; subnode[i] = NULL; } break; } } } // if item was found lower down, don't need to search for it here if (found) return found; // otherwise, try and remove the item from the list of items // in this node vector::iterator foundIter = find(items.begin(), items.end(), item); if ( foundIter != items.end() ) { items.erase(foundIter); return true; } else { return false; } } } // namespace geos.index.quadtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/quadtree/Quadtree.cpp0000644000175000017500000000730312206417146020271 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Quadtree.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree /*public static*/ Envelope* Quadtree::ensureExtent(const Envelope *itemEnv, double minExtent) { //The names "ensureExtent" and "minExtent" are misleading -- sounds like //this method ensures that the extents are greater than minExtent. //Perhaps we should rename them to "ensurePositiveExtent" and "defaultExtent". //[Jon Aquino] double minx=itemEnv->getMinX(); double maxx=itemEnv->getMaxX(); double miny=itemEnv->getMinY(); double maxy=itemEnv->getMaxY(); // has a non-zero extent if (minx!=maxx && miny!=maxy) return (Envelope *)itemEnv; // pad one or both extents if (minx==maxx) { minx=minx-minExtent/2.0; maxx=minx+minExtent/2.0; } if (miny==maxy) { miny=miny-minExtent/2.0; maxy=miny+minExtent/2.0; } Envelope *newEnv = new Envelope(minx, maxx, miny, maxy); return newEnv; } /*public*/ Quadtree::~Quadtree() { for (unsigned int i=0; itoString()<<", "<toString()<& foundItems) { /* * the items that are matched are the items in quads which * overlap the search envelope */ root.addAllItemsFromOverlapping(*searchEnv, foundItems); #if GEOS_DEBUG cerr<<"Quadtree::query returning "<* Quadtree::queryAll() { vector *foundItems=new vector(); root.addAllItems(*foundItems); return foundItems; } /*public*/ bool Quadtree::remove(const Envelope* itemEnv, void* item) { Envelope* posEnv = ensureExtent(itemEnv, minExtent); bool ret = root.remove(posEnv, item); if ( posEnv != itemEnv ) delete posEnv; return ret; } /*private*/ void Quadtree::collectStats(const Envelope& itemEnv) { double delX = itemEnv.getWidth(); if (delX < minExtent && delX > 0.0) minExtent = delX; double delY = itemEnv.getHeight(); if (delY < minExtent && delY > 0.0) minExtent = delY; } /*public*/ string Quadtree::toString() const { string ret = root.toString(); return ret; } } // namespace geos.index.quadtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/quadtree/Root.cpp0000644000175000017500000000754312206417146017450 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/quadtree/Root.java rev 1.7 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace index { // geos.index namespace quadtree { // geos.index.quadtree // the singleton root quad is centred at the origin. //Coordinate* Root::origin=new Coordinate(0.0, 0.0); const Coordinate Root::origin(0.0, 0.0); /*public*/ void Root::insert(const Envelope *itemEnv, void* item) { #if GEOS_DEBUG std::cerr<< "Root("<toString()<<", "<getEnvelope()->contains(itemEnv)) { std::auto_ptr snode (node); // may be NULL node = 0; subnode[index] = 0; std::auto_ptr largerNode = Node::createExpanded(snode, *itemEnv); #if GEOS_DEBUG std::cerr<<"("<intersects(childBoundable->getBounds(), searchBounds)) { continue; } if(const AbstractNode *an=dynamic_cast(childBoundable)) { query(searchBounds, an, matches); } else if (const ItemBoundable *ib=dynamic_cast(childBoundable)) { matches->push_back(ib->getItem()); } else { assert(0); // unsupported childBoundable type } } } void AbstractSTRtree::iterate(ItemVisitor& visitor) { for (BoundableList::const_iterator i=itemBoundables->begin(), e=itemBoundables->end(); i!=e; i++) { const Boundable* boundable = *i; if (const ItemBoundable *ib=dynamic_cast(boundable)) { visitor.visitItem(ib->getItem()); } } } /*protected*/ std::auto_ptr AbstractSTRtree::boundablesAtLevel(int level) { std::auto_ptr boundables ( new BoundableList() ); boundablesAtLevel(level, root, boundables.get()); return boundables; } /*public*/ void AbstractSTRtree::boundablesAtLevel(int level, AbstractNode* top, BoundableList* boundables) { assert(level>-2); if (top->getLevel()==level) { boundables->push_back(top); return; } assert(top); const BoundableList& vb = *(top->getChildBoundables()); for(BoundableList::const_iterator i=vb.begin(), e=vb.end(); i!=e; ++i) { Boundable* boundable=*i; if (typeid(*boundable)==typeid(AbstractNode)) { boundablesAtLevel(level, (AbstractNode*)boundable, boundables); } else { assert(typeid(*boundable)==typeid(ItemBoundable)); if (level==-1) { boundables->push_back(boundable); } } } return; } ItemsList* AbstractSTRtree::itemsTree(AbstractNode* node) { std::auto_ptr valuesTreeForNode (new ItemsList()); BoundableList::iterator end = node->getChildBoundables()->end(); for (BoundableList::iterator i = node->getChildBoundables()->begin(); i != end; ++i) { Boundable* childBoundable = *i; if (dynamic_cast(childBoundable)) { ItemsList* valuesTreeForChild = itemsTree(static_cast(childBoundable)); // only add if not null (which indicates an item somewhere in this tree if (valuesTreeForChild != NULL) valuesTreeForNode->push_back_owned(valuesTreeForChild); } else if (dynamic_cast(childBoundable)) { valuesTreeForNode->push_back( static_cast(childBoundable)->getItem()); } else { assert(!"should never be reached"); } } if (valuesTreeForNode->empty()) return NULL; return valuesTreeForNode.release(); } ItemsList* AbstractSTRtree::itemsTree() { if (!built) { build(); } ItemsList* valuesTree (itemsTree(root)); if (valuesTree == NULL) return new ItemsList(); return valuesTree; } } // namespace geos.index.strtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/strtree/Interval.cpp0000644000175000017500000000273212206417146020162 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include //#include #include #include #include using namespace std; namespace geos { namespace index { // geos.index namespace strtree { // geos.index.strtree Interval::Interval(Interval *other) { Interval(other->imin,other->imax); } Interval::Interval(double newMin,double newMax) { assert(newMin<=newMax); imin=newMin; imax=newMax; } double Interval::getCentre() { return (imin+imax)/2; } Interval* Interval::expandToInclude(Interval *other) { imax=max(imax,other->imax); imin=min(imin,other->imin); return this; } bool Interval::intersects(Interval *other) { return !(other->imin>imax || other->imaximin && imax==other->imax; } } // namespace geos.index.strtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/strtree/ItemBoundable.cpp0000644000175000017500000000200312206417146021077 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace index { // geos.index namespace strtree { // geos.index.strtree ItemBoundable::ItemBoundable(const void* newBounds, void* newItem) : bounds(newBounds), item(newItem) { } ItemBoundable::~ItemBoundable() { } const void* ItemBoundable::getBounds() const { return bounds; } void* ItemBoundable::getItem() const { return item; } } // namespace geos.index.strtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/strtree/Makefile.am0000644000175000017500000000052112206417146017720 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexstrtree.la INCLUDES = -I$(top_srcdir)/include libindexstrtree_la_SOURCES = \ AbstractNode.cpp \ AbstractSTRtree.cpp \ Interval.cpp \ ItemBoundable.cpp \ SIRtree.cpp \ STRtree.cpp libindexstrtree_la_LIBADD = geos-3.4.2/src/index/strtree/Makefile.in0000644000175000017500000004122712206417163017740 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index/strtree DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libindexstrtree_la_DEPENDENCIES = am_libindexstrtree_la_OBJECTS = AbstractNode.lo AbstractSTRtree.lo \ Interval.lo ItemBoundable.lo SIRtree.lo STRtree.lo libindexstrtree_la_OBJECTS = $(am_libindexstrtree_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libindexstrtree_la_SOURCES) DIST_SOURCES = $(libindexstrtree_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexstrtree.la INCLUDES = -I$(top_srcdir)/include libindexstrtree_la_SOURCES = \ AbstractNode.cpp \ AbstractSTRtree.cpp \ Interval.cpp \ ItemBoundable.cpp \ SIRtree.cpp \ STRtree.cpp libindexstrtree_la_LIBADD = all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/strtree/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/strtree/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libindexstrtree.la: $(libindexstrtree_la_OBJECTS) $(libindexstrtree_la_DEPENDENCIES) $(CXXLINK) $(libindexstrtree_la_OBJECTS) $(libindexstrtree_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractSTRtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Interval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ItemBoundable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SIRtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/STRtree.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/strtree/SIRtree.cpp0000644000175000017500000000712112206417146017710 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include //#include #include #include #include #include using namespace std; namespace geos { namespace index { // geos.index namespace strtree { // geos.index.strtree static bool compareSIRBoundables(Boundable *a, Boundable *b){ return AbstractSTRtree::compareDoubles(((Interval*)a->getBounds())->getCentre(),((Interval*)b->getBounds())->getCentre()); } /*protected*/ std::auto_ptr SIRtree::createParentBoundables(BoundableList *childBoundables,int newLevel) { assert(!childBoundables->empty()); std::auto_ptr parentBoundables ( new BoundableList() ); parentBoundables->push_back(createNode(newLevel)); std::auto_ptr sortedChildBoundables ( sortBoundables(childBoundables) ); //for(unsigned int i=0;isize();i++) for (BoundableList::iterator i=sortedChildBoundables->begin(), e=sortedChildBoundables->end(); i!=e; ++i) { //Boundable *childBoundable=(AbstractNode*)(*sortedChildBoundables)[i]; Boundable *childBoundable=*i; AbstractNode* lNode = lastNode(parentBoundables.get()); if (lNode->getChildBoundables()->size() == nodeCapacity) { parentBoundables->push_back(createNode(newLevel)); } lNode->addChildBoundable(childBoundable); } return parentBoundables; } bool SIRtree::SIRIntersectsOp::intersects(const void* aBounds, const void* bBounds) { return ((Interval*)aBounds)->intersects((Interval*)bBounds); } /*public*/ SIRtree::SIRtree(): AbstractSTRtree(10), intersectsOp(new SIRIntersectsOp()) { } /*public*/ SIRtree::SIRtree(size_t nodeCapacity): AbstractSTRtree(nodeCapacity), intersectsOp(new SIRIntersectsOp()) { } SIRtree::~SIRtree() { delete intersectsOp; } class SIRAbstractNode: public AbstractNode { public: SIRAbstractNode(int level, int capacity) : AbstractNode(level, capacity) {} ~SIRAbstractNode() { delete (Interval *)bounds; } protected: void* computeBounds() const { Interval* bounds=NULL; const BoundableList& b = *getChildBoundables(); for(unsigned int i=0; igetBounds()); } else { bounds->expandToInclude((Interval*)childBoundable->getBounds()); } } return bounds; } }; AbstractNode* SIRtree::createNode(int level) { AbstractNode *an = new SIRAbstractNode(level, static_cast(nodeCapacity)); nodes->push_back(an); return an; } /** * Inserts an item having the given bounds into the tree. */ void SIRtree::insert(double x1, double x2,void* item) { AbstractSTRtree::insert(new Interval(min(x1,x2),max(x1, x2)),item); } std::auto_ptr SIRtree::sortBoundables(const BoundableList* input) { std::auto_ptr output ( new BoundableList(*input) ); sort(output->begin(), output->end(), compareSIRBoundables); //output->sort(compareSIRBoundables); return output; } } // namespace geos.index.strtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/strtree/STRtree.cpp0000644000175000017500000001544012206417146017726 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: index/strtree/STRtree.java rev. 1.11 * **********************************************************************/ #include #include #include #include #include #include // std::sort #include // for debugging #include using namespace std; using namespace geos::geom; namespace geos { namespace index { // geos.index namespace strtree { // geos.index.strtree static bool yComparator(Boundable *a, Boundable *b) { assert(a); assert(b); const void* aBounds = a->getBounds(); const void* bBounds = b->getBounds(); assert(aBounds); assert(bBounds); const Envelope* aEnv = static_cast(aBounds); const Envelope* bEnv = static_cast(bBounds); // NOTE - mloskot: // The problem of instability is directly related to mathematical definition of // "strict weak ordering" as a fundamental requirement for binary predicate: // // if a is less than b then b is not less than a, // if a is less than b and b is less than c // then a is less than c, // and so on. // // For some very low values, this predicate does not fulfill this requiremnet, // NOTE - strk: // It seems that the '<' comparison here gives unstable results. // In particular, when inlines are on (for Envelope::getMinY and getMaxY) // things are fine, but when they are off we can even get a memory corruption !! //return STRtree::centreY(aEnv) < STRtree::centreY(bEnv); // NOTE - mloskot: // This comparison does not answer if a is "lower" than b // what is required for sorting. This comparison only answeres // if a and b are "almost the same" or different /*NOTE - cfis In debug mode VC++ checks the predicate in both directions. If !_Pred(_Left, _Right) Then an exception is thrown if _Pred(_Right, _Left). See xutility around line 320: bool __CLRCALL_OR_CDECL _Debug_lt_pred(_Pr _Pred, _Ty1& _Left, _Ty2& _Right, const wchar_t *_Where, unsigned int _Line)*/ //return std::fabs( STRtree::centreY(aEnv) - STRtree::centreY(bEnv) ) < 1e-30 // NOTE - strk: // See http://trac.osgeo.org/geos/ticket/293 // as for why simple comparison (<) isn't used here return AbstractSTRtree::compareDoubles(STRtree::centreY(aEnv), STRtree::centreY(bEnv)); } /*public*/ STRtree::STRtree(size_t nodeCapacity): AbstractSTRtree(nodeCapacity) { } /*public*/ STRtree::~STRtree() { } bool STRtree::STRIntersectsOp::intersects(const void* aBounds, const void* bBounds) { return ((Envelope*)aBounds)->intersects((Envelope*)bBounds); } /*private*/ std::auto_ptr STRtree::createParentBoundables(BoundableList* childBoundables, int newLevel) { assert(!childBoundables->empty()); int minLeafCount=(int) ceil((double)childBoundables->size()/(double)getNodeCapacity()); std::auto_ptr sortedChildBoundables ( sortBoundables(childBoundables) ); std::auto_ptr< vector > verticalSlicesV ( verticalSlices(sortedChildBoundables.get(), (int)ceil(sqrt((double)minLeafCount))) ); std::auto_ptr ret ( createParentBoundablesFromVerticalSlices(verticalSlicesV.get(), newLevel) ); for (size_t i=0, vssize=verticalSlicesV->size(); i STRtree::createParentBoundablesFromVerticalSlices(std::vector* verticalSlices, int newLevel) { assert(!verticalSlices->empty()); std::auto_ptr parentBoundables( new BoundableList() ); for (size_t i=0, vssize=verticalSlices->size(); i toAdd ( createParentBoundablesFromVerticalSlice( (*verticalSlices)[i], newLevel) ); assert(!toAdd->empty()); parentBoundables->insert( parentBoundables->end(), toAdd->begin(), toAdd->end()); } return parentBoundables; } /*protected*/ std::auto_ptr STRtree::createParentBoundablesFromVerticalSlice(BoundableList* childBoundables, int newLevel) { return AbstractSTRtree::createParentBoundables(childBoundables, newLevel); } /*private*/ std::vector* STRtree::verticalSlices(BoundableList* childBoundables, size_t sliceCount) { size_t sliceCapacity = (size_t) ceil((double)childBoundables->size() / (double) sliceCount); vector* slices = new vector(sliceCount); size_t i=0, nchilds=childBoundables->size(); for (size_t j=0; jreserve(sliceCapacity); size_t boundablesAddedToSlice = 0; while (ipush_back(childBoundable); ++boundablesAddedToSlice; } } return slices; } class STRAbstractNode: public AbstractNode{ public: STRAbstractNode(int level, int capacity) : AbstractNode(level, capacity) {} ~STRAbstractNode() { delete (Envelope *)bounds; } protected: void* computeBounds() const { Envelope* bounds=NULL; const BoundableList& b = *getChildBoundables(); if ( b.empty() ) return NULL; BoundableList::const_iterator i=b.begin(); BoundableList::const_iterator e=b.end(); bounds=new Envelope(* static_cast((*i)->getBounds()) ); for(; i!=e; ++i) { const Boundable* childBoundable=*i; bounds->expandToInclude((Envelope*)childBoundable->getBounds()); } return bounds; } }; /*protected*/ AbstractNode* STRtree::createNode(int level) { AbstractNode *an = new STRAbstractNode(level, static_cast(nodeCapacity)); nodes->push_back(an); return an; } /*public*/ void STRtree::insert(const Envelope *itemEnv, void* item) { if (itemEnv->isNull()) { return; } AbstractSTRtree::insert(itemEnv, item); } /*private*/ std::auto_ptr STRtree::sortBoundables(const BoundableList* input) { assert(input); std::auto_ptr output ( new BoundableList(*input) ); assert(output->size() == input->size()); sort(output->begin(), output->end(), yComparator); return output; } } // namespace geos.index.strtree } // namespace geos.index } // namespace geos geos-3.4.2/src/index/sweepline/0000755000175000017500000000000012206417233016166 5ustar frankiefrankiegeos-3.4.2/src/index/sweepline/Makefile.am0000644000175000017500000000044512206417146020230 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexsweepline.la INCLUDES = -I$(top_srcdir)/include libindexsweepline_la_SOURCES = \ SweepLineEvent.cpp \ SweepLineIndex.cpp \ SweepLineInterval.cpp libindexsweepline_la_LIBADD = geos-3.4.2/src/index/sweepline/Makefile.in0000644000175000017500000004062612206417164020246 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/index/sweepline DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libindexsweepline_la_DEPENDENCIES = am_libindexsweepline_la_OBJECTS = SweepLineEvent.lo SweepLineIndex.lo \ SweepLineInterval.lo libindexsweepline_la_OBJECTS = $(am_libindexsweepline_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libindexsweepline_la_SOURCES) DIST_SOURCES = $(libindexsweepline_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = libindexsweepline.la INCLUDES = -I$(top_srcdir)/include libindexsweepline_la_SOURCES = \ SweepLineEvent.cpp \ SweepLineIndex.cpp \ SweepLineInterval.cpp libindexsweepline_la_LIBADD = all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/index/sweepline/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/index/sweepline/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libindexsweepline.la: $(libindexsweepline_la_OBJECTS) $(libindexsweepline_la_DEPENDENCIES) $(CXXLINK) $(libindexsweepline_la_OBJECTS) $(libindexsweepline_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweepLineEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweepLineIndex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweepLineInterval.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/index/sweepline/SweepLineEvent.cpp0000644000175000017500000000420712206417146021575 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace index { // geos.index namespace sweepline { // geos.index.sweepline SweepLineEvent::SweepLineEvent(double x, SweepLineEvent *newInsertEvent, SweepLineInterval *newSweepInt) : xValue(x), eventType(SweepLineEvent::INSERT_EVENT), insertEvent(newInsertEvent), sweepInt(newSweepInt) { if (insertEvent!=0) eventType=SweepLineEvent::DELETE_EVENT; } bool SweepLineEvent::isInsert() { return insertEvent==0; } bool SweepLineEvent::isDelete() { return insertEvent!=0; } SweepLineEvent* SweepLineEvent::getInsertEvent() { return insertEvent; } int SweepLineEvent::getDeleteEventIndex() { return deleteEventIndex; } void SweepLineEvent::setDeleteEventIndex(int newDeleteEventIndex) { deleteEventIndex=newDeleteEventIndex; } SweepLineInterval* SweepLineEvent::getInterval() { return sweepInt; } int SweepLineEvent::compareTo(const SweepLineEvent *pe) const { if (xValuexValue) return -1; if (xValue>pe->xValue) return 1; if (eventTypeeventType) return -1; if (eventType>pe->eventType) return 1; return 0; } #if 0 int SweepLineEvent::compareTo(void *o) const { SweepLineEvent *pe=(SweepLineEvent*) o; if (xValuexValue) return -1; if (xValue>pe->xValue) return 1; if (eventTypeeventType) return -1; if (eventType>pe->eventType) return 1; return 0; } #endif // 0 bool SweepLineEventLessThen::operator() (const SweepLineEvent *first, const SweepLineEvent *second) const { if (first->compareTo(second)<0) return true; else return false; } } // namespace geos.index.sweepline } // namespace geos.index } // namespace geos geos-3.4.2/src/index/sweepline/SweepLineIndex.cpp0000644000175000017500000000565512206417146021573 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include using namespace std; namespace geos { namespace index { // geos.index namespace sweepline { // geos.index.sweepline SweepLineIndex::SweepLineIndex() : indexBuilt(false), nOverlaps(0) { //events=new vector(); //nOverlaps=0; } SweepLineIndex::~SweepLineIndex() { //delete events; } void SweepLineIndex::add(SweepLineInterval *sweepInt) { // FIXME: who's going to delete the newly-created events ? SweepLineEvent *insertEvent=new SweepLineEvent(sweepInt->getMin(),NULL,sweepInt); events.push_back(insertEvent); events.push_back(new SweepLineEvent(sweepInt->getMax(), insertEvent, sweepInt)); } /*private*/ void SweepLineIndex::buildIndex() { if (!indexBuilt) { sort(events.begin(), events.end(), SweepLineEventLessThen()); const std::vector::size_type n = events.size(); for(std::vector::size_type i = 0; i < n; i++) { SweepLineEvent *ev=events[i]; if (ev->isDelete()) { ev->getInsertEvent()->setDeleteEventIndex(static_cast(i)); } } indexBuilt = true; } } void SweepLineIndex::computeOverlaps(SweepLineOverlapAction *action) { nOverlaps = 0; buildIndex(); const std::vector::size_type n=events.size(); for(std::vector::size_type i=0; iisInsert()) { processOverlaps(static_cast(i), ev->getDeleteEventIndex(), ev->getInterval(), action); } } } void SweepLineIndex::processOverlaps(int start, int end, SweepLineInterval *s0, SweepLineOverlapAction *action) { /** * Since we might need to test for self-intersections, * include current insert event object in list of event objects to test. * Last index can be skipped, because it must be a Delete event. */ for(int i=start; iisInsert()) { SweepLineInterval *s1=ev->getInterval(); action->overlap(s0,s1); nOverlaps++; } } } } // namespace geos.index.sweepline } // namespace geos.index } // namespace geos geos-3.4.2/src/index/sweepline/SweepLineInterval.cpp0000644000175000017500000000211312206417146022272 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace index { // geos.index namespace sweepline { // geos.index.sweepline SweepLineInterval::SweepLineInterval(double newMin, double newMax, void* newItem) { min=newMinnewMin?newMax:newMin; item=newItem; } double SweepLineInterval::getMin() { return min; } double SweepLineInterval::getMax() { return max; } void* SweepLineInterval::getItem() { return item; } } // namespace geos.index.sweepline } // namespace geos.index } // namespace geos geos-3.4.2/src/info.plist.in0000644000175000017500000000155112206417145015505 0ustar frankiefrankie CFBundleDevelopmentRegion English CFBundleExecutable ${MACOSX_FRAMEWORK_NAME} CFBundleGetInfoString GEOS ${VERSION} CFBundleIdentifier ${MACOSX_FRAMEWORK_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName GEOS CFBundlePackageType FMWK CFBundleShortVersionString ${MACOSX_FRAMEWORK_SHORT_VERSION_STRING} CFBundleSignature ???? CFBundleVersion ${MACOSX_FRAMEWORK_BUNDLE_VERSION} geos-3.4.2/src/inlines.cpp0000644000175000017500000000462712206417146015245 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * This file is here to make all inlined functions also * available as non-inlines when building with GEOS_INLINES defined. * **********************************************************************/ // Only do something if GEOS_INLINE is defined // Otherwise we'll end up with duplicated symbols #ifdef GEOS_INLINE // If using Visual C++ with GEOS_INLINE, do not build inline.obj // otherwise linker will complain "multiple definition" errors. // If using MingW with GEOS_INLINE to build a DLL then MingW's gcc // has already generated the stubs for the contents of this file. // Hence we need to supress it to avoid "multiple definition" errors // during the final link phase #if !defined(_MSC_VER) && (!defined(__MINGW32__) || defined(__MINGW32__) && !defined(DLL_EXPORT)) // If using cygwin then we suppress the "multiple definition" errors by // ignoring this section completely; the cygwin linker seems to handle // the stubs correctly at link time by itself #if !defined(__CYGWIN__) // Undefine GEOS_INLINE so that .inl files // will be ready for an implementation file #undef GEOS_INLINE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif // defined __CYGWIN__ #endif // defined __MINGW32__ and !defined DLL_EXPORT #endif // defined GEOS_INLINE geos-3.4.2/src/io/0000755000175000017500000000000012206417234013474 5ustar frankiefrankiegeos-3.4.2/src/io/ByteOrderDataInStream.cpp0000644000175000017500000000147112206417146020341 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ByteOrderDataInStream.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #include #ifndef GEOS_INLINE #include #endif namespace geos { namespace io { // geos::io } // namespace geos::io } // namespace geos geos-3.4.2/src/io/ByteOrderValues.cpp0000644000175000017500000000771512206417146017273 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ByteOrderValues.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include namespace geos { namespace io { // geos.io int ByteOrderValues::getInt(const unsigned char *buf, int byteOrder) { if ( byteOrder == ENDIAN_BIG ) { return ((int) (buf[0]&0xff) <<24) | ((int) (buf[1]&0xff) <<16) | ((int) (buf[2]&0xff) <<8) | ((int) (buf[3]&0xff) ); } else // ENDIAN_LITTLE { assert(byteOrder == ENDIAN_LITTLE); return ((int) (buf[3]&0xff) <<24) | ((int) (buf[2]&0xff) <<16) | ((int) (buf[1]&0xff) <<8) | ((int) (buf[0]&0xff) ); } } void ByteOrderValues::putInt(int intValue, unsigned char *buf, int byteOrder) { if ( byteOrder == ENDIAN_BIG ) { buf[0] = (unsigned char)(intValue >> 24); buf[1] = (unsigned char)(intValue >> 16); buf[2] = (unsigned char)(intValue >> 8); buf[3] = (unsigned char) intValue; } else // ENDIAN_LITTLE { assert(byteOrder == ENDIAN_LITTLE); buf[3] = (unsigned char)(intValue >> 24); buf[2] = (unsigned char)(intValue >> 16); buf[1] = (unsigned char)(intValue >> 8); buf[0] = (unsigned char) intValue; } } int64 ByteOrderValues::getLong(const unsigned char *buf, int byteOrder) { if ( byteOrder == ENDIAN_BIG ) { return (int64) (buf[0]) << 56 | (int64) (buf[1] & 0xff) << 48 | (int64) (buf[2] & 0xff) << 40 | (int64) (buf[3] & 0xff) << 32 | (int64) (buf[4] & 0xff) << 24 | (int64) (buf[5] & 0xff) << 16 | (int64) (buf[6] & 0xff) << 8 | (int64) (buf[7] & 0xff); } else // ENDIAN_LITTLE { assert(byteOrder == ENDIAN_LITTLE); return (int64) (buf[7]) << 56 | (int64) (buf[6] & 0xff) << 48 | (int64) (buf[5] & 0xff) << 40 | (int64) (buf[4] & 0xff) << 32 | (int64) (buf[3] & 0xff) << 24 | (int64) (buf[2] & 0xff) << 16 | (int64) (buf[1] & 0xff) << 8 | (int64) (buf[0] & 0xff); } } void ByteOrderValues::putLong(int64 longValue, unsigned char *buf, int byteOrder) { if ( byteOrder == ENDIAN_BIG ) { buf[0] = (unsigned char)(longValue >> 56); buf[1] = (unsigned char)(longValue >> 48); buf[2] = (unsigned char)(longValue >> 40); buf[3] = (unsigned char)(longValue >> 32); buf[4] = (unsigned char)(longValue >> 24); buf[5] = (unsigned char)(longValue >> 16); buf[6] = (unsigned char)(longValue >> 8); buf[7] = (unsigned char) longValue; } else // ENDIAN_LITTLE { assert(byteOrder == ENDIAN_LITTLE); buf[0] = (unsigned char) longValue; buf[1] = (unsigned char)(longValue >> 8); buf[2] = (unsigned char)(longValue >> 16); buf[3] = (unsigned char)(longValue >> 24); buf[4] = (unsigned char)(longValue >> 32); buf[5] = (unsigned char)(longValue >> 40); buf[6] = (unsigned char)(longValue >> 48); buf[7] = (unsigned char)(longValue >> 56); } } double ByteOrderValues::getDouble(const unsigned char *buf, int byteOrder) { int64 longValue = getLong(buf, byteOrder); double ret; std::memcpy(&ret, &longValue, sizeof(double)); return ret; } void ByteOrderValues::putDouble(double doubleValue, unsigned char *buf, int byteOrder) { int64 longValue; std::memcpy(&longValue, &doubleValue, sizeof(double)); #if DEBUG_BYTEORDER_VALUES cout<<"ByteOrderValues::putDouble("< #include #include using namespace std; namespace geos { namespace io { CLocalizer::CLocalizer() { char* p = std::setlocale(LC_NUMERIC, NULL); if (0 != p) { saved_locale = p; } std::setlocale(LC_NUMERIC, "C"); } CLocalizer::~CLocalizer() { std::setlocale(LC_NUMERIC, saved_locale.c_str()); } } // namespace geos.io } // namespace geos geos-3.4.2/src/io/Makefile.am0000644000175000017500000000063012206417146015531 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = markup noinst_LTLIBRARIES = libio.la INCLUDES = -I$(top_srcdir)/include libio_la_SOURCES = \ ParseException.cpp \ StringTokenizer.cpp \ ByteOrderDataInStream.cpp \ ByteOrderValues.cpp \ WKTReader.cpp \ WKTWriter.cpp \ WKBReader.cpp \ WKBWriter.cpp \ Writer.cpp \ Unload.cpp \ CLocalizer.cpp libio_la_LIBADD = geos-3.4.2/src/io/Makefile.in0000644000175000017500000004204712206417164015552 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #SUBDIRS = markup VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/io DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libio_la_DEPENDENCIES = am_libio_la_OBJECTS = ParseException.lo StringTokenizer.lo \ ByteOrderDataInStream.lo ByteOrderValues.lo WKTReader.lo \ WKTWriter.lo WKBReader.lo WKBWriter.lo Writer.lo Unload.lo \ CLocalizer.lo libio_la_OBJECTS = $(am_libio_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libio_la_SOURCES) DIST_SOURCES = $(libio_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libio.la INCLUDES = -I$(top_srcdir)/include libio_la_SOURCES = \ ParseException.cpp \ StringTokenizer.cpp \ ByteOrderDataInStream.cpp \ ByteOrderValues.cpp \ WKTReader.cpp \ WKTWriter.cpp \ WKBReader.cpp \ WKBWriter.cpp \ Writer.cpp \ Unload.cpp \ CLocalizer.cpp libio_la_LIBADD = all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/io/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/io/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libio.la: $(libio_la_OBJECTS) $(libio_la_DEPENDENCIES) $(CXXLINK) $(libio_la_OBJECTS) $(libio_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ByteOrderDataInStream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ByteOrderValues.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CLocalizer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParseException.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringTokenizer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Unload.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKBReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKBWriter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKTReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKTWriter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Writer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/io/ParseException.cpp0000644000175000017500000000256112206417146017137 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/ParseException.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #include #include #include using namespace std; namespace geos { namespace io { // geos.io ParseException::ParseException() : GEOSException("ParseException", "") { } ParseException::ParseException(const string& msg) : GEOSException("ParseException", msg) { } ParseException::ParseException(const string& msg, const string& var) : GEOSException("ParseException", msg+": '"+var+"'") { } ParseException::ParseException(const string& msg, double num) : GEOSException("ParseException", msg+": '"+stringify(num)+"'") { } string ParseException::stringify(double num) { stringstream ss; ss< #include #include using namespace std; namespace geos { namespace io { // geos.io /*public*/ StringTokenizer::StringTokenizer(const string &txt) : str(txt) { stok=""; ntok=0.0; iter=str.begin(); } /*public*/ int StringTokenizer::nextToken() { string tok=""; if (iter==str.end()) return StringTokenizer::TT_EOF; switch(*iter) { case '(': case ')': case ',': return *iter++; case '\n': case '\r': case '\t': case ' ': string::size_type pos=str.find_first_not_of(" \n\r\t", iter-str.begin()); if (pos==string::npos) { return StringTokenizer::TT_EOF; } else { iter=str.begin()+pos; return nextToken(); } } string::size_type pos=str.find_first_of("\n\r\t() ,", iter-str.begin()); if (pos==string::npos) { if (iter!=str.end()) { tok.assign(iter,str.end()); iter=str.end(); } else { return StringTokenizer::TT_EOF; } } else { tok.assign(iter, str.begin()+pos); iter=str.begin()+pos; } char *stopstring; double dbl=strtod(tok.c_str(),&stopstring); if (*stopstring=='\0') { ntok=dbl; stok=""; return StringTokenizer::TT_NUMBER; } else { ntok=0.0; stok=tok; return StringTokenizer::TT_WORD; } } /*public*/ int StringTokenizer::peekNextToken() { string::size_type pos; string tok=""; if (iter==str.end()) return StringTokenizer::TT_EOF; pos=str.find_first_not_of(" \r\n\t", iter-str.begin()); if (pos==string::npos) return StringTokenizer::TT_EOF; switch(str[pos]) { case '(': case ')': case ',': return str[pos]; } // It's either a Number or a Word, let's // see when it ends pos=str.find_first_of("\n\r\t() ,", iter-str.begin()); if (pos==string::npos) { if (iter!=str.end()) { tok.assign(iter,str.end()); } else { return StringTokenizer::TT_EOF; } } else { tok.assign(iter, str.begin()+pos); //str.end()); } char *stopstring; double dbl=strtod(tok.c_str(),&stopstring); if (*stopstring=='\0') { ntok=dbl; stok=""; return StringTokenizer::TT_NUMBER; } else { ntok=0.0; stok=tok; return StringTokenizer::TT_WORD; } } /*public*/ double StringTokenizer::getNVal() { return ntok; } /*public*/ string StringTokenizer::getSVal() { return stok; } } // namespace geos.io } // namespace geos geos-3.4.2/src/io/Unload.cpp0000644000175000017500000000147112206417146015427 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include namespace geos { namespace io { // geos.io /*public static*/ void Unload::Release() { //delete geom::Geometry::INTERNAL_GEOMETRY_FACTORY; } } // namespace geos.io } //namespace geos geos-3.4.2/src/io/WKBReader.cpp0000644000175000017500000002463712206417146015764 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKBReader.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#define DEBUG_WKB_READER 1 using namespace std; using namespace geos::geom; namespace geos { namespace io { // geos.io WKBReader::WKBReader() : factory(*(GeometryFactory::getDefaultInstance())) {} ostream & WKBReader::printHEX(istream &is, ostream &os) { static const char hex[] = "0123456789ABCDEF"; std::streampos pos = is.tellg(); // take note of input stream get pointer is.seekg(0, ios::beg); // rewind input stream char each=0; while(is.read(&each, 1)) { const unsigned char c=each; int low = (c & 0x0F); int high = (c >> 4); os << hex[high] << hex[low]; } is.clear(); // clear input stream eof flag is.seekg(pos); // reset input stream position return os; } Geometry * WKBReader::readHEX(istream &is) { // setup input/output stream stringstream os(ios_base::binary|ios_base::in|ios_base::out); unsigned char high, low, result_high, result_low, value; while(!is.eof())//readsome(&str[0], 2)) { // get the high part of the byte is >> high; // geth the low part of the byte is >> low; switch (high) { case '0' : result_high = 0; break; case '1' : result_high = 1; break; case '2' : result_high = 2; break; case '3' : result_high = 3; break; case '4' : result_high = 4; break; case '5' : result_high = 5; break; case '6' : result_high = 6; break; case '7' : result_high = 7; break; case '8' : result_high = 8; break; case '9' : result_high = 9; break; case 'A' : case 'a' : result_high = 10; break; case 'B' : case 'b' : result_high = 11; break; case 'C' : case 'c' : result_high = 12; break; case 'D' : case 'd' : result_high = 13; break; case 'E' : case 'e' : result_high = 14; break; case 'F' : case 'f' : result_high = 15; break; default: throw ParseException("Invalid HEX char"); } switch (low) { case '0' : result_low = 0; break; case '1' : result_low = 1; break; case '2' : result_low = 2; break; case '3' : result_low = 3; break; case '4' : result_low = 4; break; case '5' : result_low = 5; break; case '6' : result_low = 6; break; case '7' : result_low = 7; break; case '8' : result_low = 8; break; case '9' : result_low = 9; break; case 'A' : case 'a' : result_low = 10; break; case 'B' : case 'b' : result_low = 11; break; case 'C' : case 'c' : result_low = 12; break; case 'D' : case 'd' : result_low = 13; break; case 'E' : case 'e' : result_low = 14; break; case 'F' : case 'f' : result_low = 15; break; default: throw ParseException("Invalid HEX char"); } value = (result_high<<4) + result_low; #if DEBUG_HEX_READER cout<<"HEX "< DEC "<<(int)value<read(os); } Geometry * WKBReader::read(istream &is) { dis.setInStream(&is); // will default to machine endian return readGeometry(); } Geometry * WKBReader::readGeometry() { // determine byte order unsigned char byteOrder = dis.readByte(); #if DEBUG_WKB_READER cout<<"WKB byteOrder: "<<(int)byteOrder<setSRID(SRID); return result; } Point * WKBReader::readPoint() { readCoordinate(); if(inputDimension == 3){ return factory.createPoint(Coordinate(ordValues[0], ordValues[1], ordValues[2])); }else{ return factory.createPoint(Coordinate(ordValues[0], ordValues[1])); } } LineString * WKBReader::readLineString() { int size = dis.readInt(); #if DEBUG_WKB_READER cout<<"WKB npoints: "< 0 ) shell = readLinearRing(); vector*holes=NULL; if ( numRings > 1 ) { try { holes = new vector(numRings-1); for (int i=0; isize(); i++) delete (*holes)[i]; delete holes; delete shell; throw; } } return factory.createPolygon(shell, holes); } MultiPoint * WKBReader::readMultiPoint() { int numGeoms = dis.readInt(); vector *geoms = new vector(numGeoms); try { for (int i=0; i(g)) { stringstream err; err << BAD_GEOM_TYPE_MSG << " MultiPoint"; throw ParseException(err.str()); } (*geoms)[i] = g; } } catch (...) { for (unsigned int i=0; isize(); i++) delete (*geoms)[i]; delete geoms; throw; } return factory.createMultiPoint(geoms); } MultiLineString * WKBReader::readMultiLineString() { int numGeoms = dis.readInt(); vector *geoms = new vector(numGeoms); try { for (int i=0; i(g)) { stringstream err; err << BAD_GEOM_TYPE_MSG << " LineString"; throw ParseException(err.str()); } (*geoms)[i] = g; } } catch (...) { for (unsigned int i=0; isize(); i++) delete (*geoms)[i]; delete geoms; throw; } return factory.createMultiLineString(geoms); } MultiPolygon * WKBReader::readMultiPolygon() { int numGeoms = dis.readInt(); vector *geoms = new vector(numGeoms); try { for (int i=0; i(g)) { stringstream err; err << BAD_GEOM_TYPE_MSG << " Polygon"; throw ParseException(err.str()); } (*geoms)[i] = g; } } catch (...) { for (unsigned int i=0; isize(); i++) delete (*geoms)[i]; delete geoms; throw; } return factory.createMultiPolygon(geoms); } GeometryCollection * WKBReader::readGeometryCollection() { int numGeoms = dis.readInt(); vector *geoms = new vector(numGeoms); try { for (int i=0; isize(); i++) delete (*geoms)[i]; delete geoms; throw; } return factory.createGeometryCollection(geoms); } CoordinateSequence * WKBReader::readCoordinateSequence(int size) { CoordinateSequence *seq = factory.getCoordinateSequenceFactory()->create(size, inputDimension); unsigned int targetDim = seq->getDimension(); if ( targetDim > inputDimension ) targetDim = inputDimension; for (int i=0; isetOrdinate(i, j, ordValues[j]); } } return seq; } void WKBReader::readCoordinate() { const PrecisionModel &pm = *factory.getPrecisionModel(); for (unsigned int i=0; i #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #undef DEBUG_WKB_WRITER using namespace std; using namespace geos::geom; namespace geos { namespace io { // geos.io WKBWriter::WKBWriter(int dims, int bo, bool srid): defaultOutputDimension(dims), byteOrder(bo), includeSRID(srid), outStream(NULL) { if ( dims < 2 || dims > 3 ) throw util::IllegalArgumentException("WKB output dimension must be 2 or 3"); outputDimension = defaultOutputDimension; } /* public */ void WKBWriter::setOutputDimension(int dims) { if ( dims < 2 || dims > 3 ) throw util::IllegalArgumentException("WKB output dimension must be 2 or 3"); defaultOutputDimension = dims; } WKBWriter::~WKBWriter() { } void WKBWriter::writeHEX(const Geometry &g, ostream &os) { // setup input/output stream stringstream stream; // write the geometry in wkb format this->write(g, stream); // convert to HEX WKBReader::printHEX(stream, os); } void WKBWriter::write(const Geometry &g, ostream &os) { outputDimension = defaultOutputDimension; if( outputDimension > g.getCoordinateDimension() ) outputDimension = g.getCoordinateDimension(); outStream = &os; if ( const Point* x = dynamic_cast(&g) ) { return writePoint(*x); } if ( const LineString* x = dynamic_cast(&g) ) { return writeLineString(*x); } if ( const Polygon* x = dynamic_cast(&g) ) { return writePolygon(*x); } if ( const MultiPoint* x = dynamic_cast(&g) ) { return writeGeometryCollection(*x, WKBConstants::wkbMultiPoint); } if ( const MultiLineString* x = dynamic_cast(&g) ) { return writeGeometryCollection(*x, WKBConstants::wkbMultiLineString); } if ( const MultiPolygon* x = dynamic_cast(&g) ) { return writeGeometryCollection(*x, WKBConstants::wkbMultiPolygon); } if ( const GeometryCollection* x = dynamic_cast(&g) ) { return writeGeometryCollection(*x, WKBConstants::wkbGeometryCollection); } assert(0); // Unknown Geometry type } void WKBWriter::writePoint(const Point &g) { if (g.isEmpty()) throw util::IllegalArgumentException("Empty Points cannot be represented in WKB"); writeByteOrder(); writeGeometryType(WKBConstants::wkbPoint, g.getSRID()); writeSRID(g.getSRID()); const CoordinateSequence* cs=g.getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, false); } void WKBWriter::writeLineString(const LineString &g) { writeByteOrder(); writeGeometryType(WKBConstants::wkbLineString, g.getSRID()); writeSRID(g.getSRID()); const CoordinateSequence* cs=g.getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); } void WKBWriter::writePolygon(const Polygon &g) { writeByteOrder(); writeGeometryType(WKBConstants::wkbPolygon, g.getSRID()); writeSRID(g.getSRID()); std::size_t nholes = g.getNumInteriorRing(); writeInt(nholes+1); const LineString* ls = g.getExteriorRing(); assert(ls); const CoordinateSequence* cs=ls->getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); for (std::size_t i=0; igetCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); } } void WKBWriter::writeGeometryCollection(const GeometryCollection &g, int wkbtype) { writeByteOrder(); writeGeometryType(wkbtype, g.getSRID()); writeSRID(g.getSRID()); std::size_t ngeoms = g.getNumGeometries(); writeInt(ngeoms); assert(outStream); for (std::size_t i=0; iwrite(reinterpret_cast(buf), 1); } /* public */ void WKBWriter::setByteOrder(int bo) { if (bo != ByteOrderValues::ENDIAN_LITTLE && bo != ByteOrderValues::ENDIAN_BIG ) { std::ostringstream os; os << "WKB output dimension must be LITTLE (" << ByteOrderValues::ENDIAN_LITTLE << ") or BIG (" << ByteOrderValues::ENDIAN_BIG << ")"; throw util::IllegalArgumentException(os.str()); } byteOrder = bo; } void WKBWriter::writeGeometryType(int typeId, int SRID) { int flag3D = (outputDimension == 3) ? 0x80000000 : 0; int typeInt = typeId | flag3D; if (includeSRID && SRID != 0) typeInt = typeInt | 0x20000000; writeInt(typeInt); } void WKBWriter::writeSRID(int SRID) { if (includeSRID && SRID != 0) writeInt(SRID); } void WKBWriter::writeInt(int val) { ByteOrderValues::putInt(val, buf, byteOrder); outStream->write(reinterpret_cast(buf), 4); //outStream->write(reinterpret_cast(&val), 4); } void WKBWriter::writeCoordinateSequence(const CoordinateSequence &cs, bool sized) { std::size_t size = cs.getSize(); bool is3d=false; if ( outputDimension > 2) is3d = true; if (sized) writeInt(size); for (std::size_t i=0; iwrite(reinterpret_cast(buf), 8); ByteOrderValues::putDouble(cs.getY(idx), buf, byteOrder); outStream->write(reinterpret_cast(buf), 8); if ( is3d ) { ByteOrderValues::putDouble( cs.getOrdinate(idx, CoordinateSequence::Z), buf, byteOrder); outStream->write(reinterpret_cast(buf), 8); } } } // namespace geos.io } // namespace geos geos-3.4.2/src/io/WKTReader.cpp0000644000175000017500000003013612206417146015775 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKTReader.java rev. 1.1 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif #ifndef GEOS_INLINE #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace io { // geos.io Geometry * WKTReader::read(const string &wellKnownText) { //auto_ptr tokenizer(new StringTokenizer(wellKnownText)); CLocalizer clocale; StringTokenizer tokenizer(wellKnownText); Geometry *g=NULL; g=readGeometryTaggedText(&tokenizer); return g; } CoordinateSequence* WKTReader::getCoordinates(StringTokenizer *tokenizer) { size_t dim; string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->getCoordinateSequenceFactory()->create(NULL); //new CoordinateArraySequence(); } Coordinate coord; getPreciseCoordinate(tokenizer, coord, dim); CoordinateSequence *coordinates = \ geometryFactory->getCoordinateSequenceFactory()->create((size_t)0,dim); coordinates->add(coord); try { nextToken=getNextCloserOrComma(tokenizer); while (nextToken==",") { getPreciseCoordinate(tokenizer, coord, dim ); coordinates->add(coord); nextToken=getNextCloserOrComma(tokenizer); } } catch (...) { delete coordinates; throw; } return coordinates; } void WKTReader::getPreciseCoordinate(StringTokenizer *tokenizer, Coordinate& coord, size_t &dim ) { coord.x=getNextNumber(tokenizer); coord.y=getNextNumber(tokenizer); if (isNumberNext(tokenizer)) { coord.z=getNextNumber(tokenizer); dim = 3; // If there is a fourth value (M) read and discard it. if (isNumberNext(tokenizer)) getNextNumber(tokenizer); } else { coord.z=DoubleNotANumber; dim = 2; } precisionModel->makePrecise(coord); } bool WKTReader::isNumberNext(StringTokenizer *tokenizer) { return tokenizer->peekNextToken()==StringTokenizer::TT_NUMBER; } double WKTReader::getNextNumber(StringTokenizer *tokenizer) { int type=tokenizer->nextToken(); switch(type){ case StringTokenizer::TT_EOF: throw ParseException("Expected number but encountered end of stream"); case StringTokenizer::TT_EOL: throw ParseException("Expected number but encountered end of line"); case StringTokenizer::TT_NUMBER: return tokenizer->getNVal(); case StringTokenizer::TT_WORD: throw ParseException("Expected number but encountered word",tokenizer->getSVal()); case '(': throw ParseException("Expected number but encountered '('"); case ')': throw ParseException("Expected number but encountered ')'"); case ',': throw ParseException("Expected number but encountered ','"); } assert(0); // Encountered unexpected StreamTokenizer type return 0; } string WKTReader::getNextEmptyOrOpener(StringTokenizer *tokenizer) { string nextWord=getNextWord(tokenizer); // Skip the Z, M or ZM of an SF1.2 3/4 dim coordinate. if (nextWord == "Z" || nextWord == "M" || nextWord == "ZM" ) nextWord = getNextWord(tokenizer); if (nextWord=="EMPTY" || nextWord=="(") { return nextWord; } throw ParseException("Expected 'Z', 'M', 'ZM', 'EMPTY' or '(' but encountered ",nextWord); } string WKTReader::getNextCloserOrComma(StringTokenizer *tokenizer) { string nextWord=getNextWord(tokenizer); if (nextWord=="," || nextWord==")") { return nextWord; } throw ParseException("Expected ')' or ',' but encountered",nextWord); } string WKTReader::getNextCloser(StringTokenizer *tokenizer) { string nextWord=getNextWord(tokenizer); if (nextWord==")") { return nextWord; } throw ParseException("Expected ')' but encountered",nextWord); } string WKTReader::getNextWord(StringTokenizer *tokenizer) { int type=tokenizer->nextToken(); switch(type){ case StringTokenizer::TT_EOF: throw ParseException("Expected word but encountered end of stream"); case StringTokenizer::TT_EOL: throw ParseException("Expected word but encountered end of line"); case StringTokenizer::TT_NUMBER: throw ParseException("Expected word but encountered number", tokenizer->getNVal()); case StringTokenizer::TT_WORD: { string word = tokenizer->getSVal(); int i = word.size(); while( --i >= 0 ) { word[i] = static_cast(toupper(word[i])); } return word; } case '(': return "("; case ')': return ")"; case ',': return ","; } assert(0); //throw ParseException("Encountered unexpected StreamTokenizer type"); return ""; } Geometry* WKTReader::readGeometryTaggedText(StringTokenizer *tokenizer) { string type = getNextWord(tokenizer); if (type=="POINT") { return readPointText(tokenizer); } else if (type=="LINESTRING") { return readLineStringText(tokenizer); } else if (type=="LINEARRING") { return readLinearRingText(tokenizer); } else if (type=="POLYGON") { return readPolygonText(tokenizer); } else if (type=="MULTIPOINT") { return readMultiPointText(tokenizer); } else if (type=="MULTILINESTRING") { return readMultiLineStringText(tokenizer); } else if (type=="MULTIPOLYGON") { return readMultiPolygonText(tokenizer); } else if (type=="GEOMETRYCOLLECTION") { return readGeometryCollectionText(tokenizer); } throw ParseException("Unknown type",type); } Point* WKTReader::readPointText(StringTokenizer *tokenizer) { size_t dim; string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createPoint(Coordinate::getNull()); } Coordinate coord; getPreciseCoordinate(tokenizer, coord, dim); getNextCloser(tokenizer); return geometryFactory->createPoint(coord); } LineString* WKTReader::readLineStringText(StringTokenizer *tokenizer) { CoordinateSequence *coords = getCoordinates(tokenizer); LineString *ret = geometryFactory->createLineString(coords); return ret; } LinearRing* WKTReader::readLinearRingText(StringTokenizer *tokenizer) { CoordinateSequence *coords = getCoordinates(tokenizer); LinearRing *ret; ret = geometryFactory->createLinearRing(coords); return ret; } MultiPoint* WKTReader::readMultiPointText(StringTokenizer *tokenizer) { string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createMultiPoint(); } int tok = tokenizer->peekNextToken(); if ( tok == StringTokenizer::TT_NUMBER ) { size_t dim; // Try to parse deprecated form "MULTIPOINT(0 0, 1 1)" const CoordinateSequenceFactory* csf = \ geometryFactory->getCoordinateSequenceFactory(); CoordinateSequence *coords = csf->create(NULL); try { do { Coordinate coord; getPreciseCoordinate(tokenizer, coord, dim); coords->add(coord); nextToken=getNextCloserOrComma(tokenizer); } while(nextToken == ","); MultiPoint *ret = geometryFactory->createMultiPoint(*coords); delete coords; return ret; } catch (...) { delete coords; throw; } } else if ( tok == '(' ) { // Try to parse correct form "MULTIPOINT((0 0), (1 1))" vector *points=new vector(); try { do { Point *point=readPointText(tokenizer); points->push_back(point); nextToken=getNextCloserOrComma(tokenizer); } while(nextToken == ","); return geometryFactory->createMultiPoint(points); } catch (...) { // clean up for (size_t i=0; isize(); i++) { delete (*points)[i]; } delete points; throw; } } else { stringstream err; err << "Unexpected token: "; switch (tok) { case StringTokenizer::TT_WORD: err << "WORD " << tokenizer->getSVal(); break; case StringTokenizer::TT_NUMBER: err << "NUMBER " << tokenizer->getNVal(); break; case StringTokenizer::TT_EOF: case StringTokenizer::TT_EOL: err << "EOF or EOL"; break; case '(': err << "("; break; case ')': err << ")"; break; case ',': err << ","; break; default: err << "??"; break; } err << endl; throw ParseException(err.str()); } } Polygon* WKTReader::readPolygonText(StringTokenizer *tokenizer) { Polygon *poly=NULL; LinearRing *shell=NULL; string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createPolygon(NULL,NULL); } vector *holes=new vector(); try { shell=readLinearRingText(tokenizer); nextToken=getNextCloserOrComma(tokenizer); while(nextToken==",") { LinearRing *hole=readLinearRingText(tokenizer); holes->push_back(hole); nextToken=getNextCloserOrComma(tokenizer); } poly = geometryFactory->createPolygon(shell,holes); } catch (...) { for (unsigned int i=0; isize(); i++) delete (*holes)[i]; delete holes; delete shell; throw; } return poly; } MultiLineString* WKTReader::readMultiLineStringText(StringTokenizer *tokenizer) { string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createMultiLineString(NULL); } vector *lineStrings=new vector(); LineString *lineString=readLineStringText(tokenizer); lineStrings->push_back(lineString); nextToken=getNextCloserOrComma(tokenizer); while(nextToken==",") { LineString *lineString=readLineStringText(tokenizer); lineStrings->push_back(lineString); nextToken=getNextCloserOrComma(tokenizer); } MultiLineString *ret = geometryFactory->createMultiLineString(lineStrings); //for (int i=0; isize(); i++) delete (*lineStrings)[i]; //delete lineStrings; return ret; } MultiPolygon* WKTReader::readMultiPolygonText(StringTokenizer *tokenizer) { string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createMultiPolygon(NULL); } vector *polygons=new vector(); Polygon *polygon=readPolygonText(tokenizer); polygons->push_back(polygon); nextToken=getNextCloserOrComma(tokenizer); while(nextToken==",") { Polygon *polygon=readPolygonText(tokenizer); polygons->push_back(polygon); nextToken=getNextCloserOrComma(tokenizer); } MultiPolygon *ret = geometryFactory->createMultiPolygon(polygons); //for (int i=0; isize(); i++) delete (*polygons)[i]; //delete polygons; return ret; } GeometryCollection* WKTReader::readGeometryCollectionText(StringTokenizer *tokenizer) { string nextToken=getNextEmptyOrOpener(tokenizer); if (nextToken=="EMPTY") { return geometryFactory->createGeometryCollection(NULL); } vector *geoms=new vector(); Geometry *geom; geom=readGeometryTaggedText(tokenizer); geoms->push_back(geom); nextToken=getNextCloserOrComma(tokenizer); while(nextToken==",") { geom=readGeometryTaggedText(tokenizer); geoms->push_back(geom); nextToken=getNextCloserOrComma(tokenizer); } GeometryCollection *ret = geometryFactory->createGeometryCollection(geoms); //for (int i=0; isize(); i++) delete (*geoms)[i]; //delete geoms; return ret; } } // namespace geos.io } // namespace geos geos-3.4.2/src/io/WKTWriter.cpp0000644000175000017500000003000212206417146016037 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: io/WKTWriter.java rev. 1.34 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // should avoid this #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace io { // geos.io WKTWriter::WKTWriter(): decimalPlaces(6), isFormatted(false), roundingPrecision(-1), trim(false), level(0), defaultOutputDimension(2), old3D(false) { } /* public */ void WKTWriter::setOutputDimension(int dims) { if ( dims < 2 || dims > 3 ) throw util::IllegalArgumentException("WKT output dimension must be 2 or 3"); defaultOutputDimension = dims; } WKTWriter::~WKTWriter() {} /*static*/ string WKTWriter::toLineString(const CoordinateSequence& seq) { stringstream buf(ios_base::in|ios_base::out); buf << "LINESTRING "; unsigned int npts = seq.getSize(); if ( npts == 0 ) { buf << "EMPTY"; } else { buf << "("; for (unsigned int i=0; iisFormatted=isFormatted; decimalPlaces = roundingPrecision == -1 ? geometry->getPrecisionModel()->getMaximumSignificantDigits() : roundingPrecision; appendGeometryTaggedText(geometry, 0, writer); } void WKTWriter::appendGeometryTaggedText(const Geometry *geometry, int level, Writer *writer) { outputDimension = min( defaultOutputDimension, geometry->getCoordinateDimension() ); indent(level, writer); if ( const Point* point = dynamic_cast(geometry) ) { appendPointTaggedText(point->getCoordinate(),level,writer); } else if ( const LinearRing* lr = dynamic_cast(geometry) ) { appendLinearRingTaggedText(lr, level, writer); } else if ( const LineString* ls = dynamic_cast(geometry) ) { appendLineStringTaggedText(ls, level, writer); } else if ( const Polygon* x = dynamic_cast(geometry) ) { appendPolygonTaggedText(x, level, writer); } else if ( const MultiPoint* x = dynamic_cast(geometry) ) { appendMultiPointTaggedText(x, level, writer); } else if ( const MultiLineString* x = dynamic_cast(geometry) ) { appendMultiLineStringTaggedText(x, level, writer); } else if ( const MultiPolygon* x = dynamic_cast(geometry) ) { appendMultiPolygonTaggedText(x, level, writer); } else if ( const GeometryCollection* x = dynamic_cast(geometry) ) { appendGeometryCollectionTaggedText(x, level, writer); } else { assert(0); // Unsupported Geometry implementation } } /*protected*/ void WKTWriter::appendPointTaggedText(const Coordinate* coordinate, int level, Writer *writer) { writer->write("POINT "); if( outputDimension == 3 && !old3D && coordinate != NULL ) writer->write( "Z " ); appendPointText(coordinate, level, writer); } void WKTWriter::appendLineStringTaggedText(const LineString *lineString, int level, Writer *writer) { writer->write("LINESTRING "); if( outputDimension == 3 && !old3D && !lineString->isEmpty() ) writer->write( "Z " ); appendLineStringText(lineString, level, false, writer); } /* * Converts a LinearRing to <LinearRing Tagged Text> * format, then appends it to the writer. * * @param linearRing the LinearRing to process * @param writer the output writer to append to */ void WKTWriter::appendLinearRingTaggedText(const LinearRing* linearRing, int level, Writer *writer) { writer->write("LINEARRING "); if( outputDimension == 3 && !old3D && !linearRing->isEmpty() ) writer->write( "Z " ); appendLineStringText((LineString*)linearRing, level, false, writer); } void WKTWriter::appendPolygonTaggedText(const Polygon *polygon, int level, Writer *writer) { writer->write("POLYGON "); if( outputDimension == 3 && !old3D && !polygon->isEmpty()) writer->write( "Z " ); appendPolygonText(polygon, level, false, writer); } void WKTWriter::appendMultiPointTaggedText(const MultiPoint *multipoint, int level, Writer *writer) { writer->write("MULTIPOINT "); if( outputDimension == 3 && !old3D && !multipoint->isEmpty() ) writer->write( "Z " ); appendMultiPointText(multipoint, level, writer); } void WKTWriter::appendMultiLineStringTaggedText(const MultiLineString *multiLineString, int level,Writer *writer) { writer->write("MULTILINESTRING "); if( outputDimension == 3 && !old3D && !multiLineString->isEmpty() ) writer->write( "Z " ); appendMultiLineStringText(multiLineString, level, false, writer); } void WKTWriter::appendMultiPolygonTaggedText(const MultiPolygon *multiPolygon, int level, Writer *writer) { writer->write("MULTIPOLYGON "); if( outputDimension == 3 && !old3D && !multiPolygon->isEmpty() ) writer->write( "Z " ); appendMultiPolygonText(multiPolygon, level, writer); } void WKTWriter::appendGeometryCollectionTaggedText(const GeometryCollection *geometryCollection, int level,Writer *writer) { writer->write("GEOMETRYCOLLECTION "); if( outputDimension == 3 && !old3D && !geometryCollection->isEmpty() ) writer->write( "Z " ); appendGeometryCollectionText(geometryCollection, level, writer); } void WKTWriter::appendPointText(const Coordinate* coordinate, int /*level*/, Writer *writer) { if (coordinate==NULL) { writer->write("EMPTY"); } else { writer->write("("); appendCoordinate(coordinate, writer); writer->write(")"); } } /* protected */ void WKTWriter::appendCoordinate(const Coordinate* coordinate, Writer *writer) { writer->write(writeNumber(coordinate->x)); writer->write(" "); writer->write(writeNumber(coordinate->y)); if( outputDimension == 3 ) { writer->write(" "); if( ISNAN(coordinate->z) ) writer->write(writeNumber(0.0)); else writer->write(writeNumber(coordinate->z)); } } /* protected */ string WKTWriter::writeNumber(double d) { std::stringstream ss; if ( ! trim ) ss << std::fixed; ss << std::setprecision(decimalPlaces >= 0 ? decimalPlaces : 0) << d; return ss.str(); } void WKTWriter::appendLineStringText(const LineString *lineString, int level, bool doIndent, Writer *writer) { if (lineString->isEmpty()) { writer->write("EMPTY"); } else { if (doIndent) indent(level, writer); writer->write("("); for(size_t i=0, n=lineString->getNumPoints(); i0) { writer->write(", "); if (i%10==0) indent(level + 2, writer); } appendCoordinate(&(lineString->getCoordinateN(i)), writer); } writer->write(")"); } } void WKTWriter::appendPolygonText(const Polygon *polygon, int /*level*/, bool indentFirst, Writer *writer) { if (polygon->isEmpty()) { writer->write("EMPTY"); } else { if (indentFirst) indent(level, writer); writer->write("("); appendLineStringText(polygon->getExteriorRing(), level, false, writer); for (size_t i=0, n=polygon->getNumInteriorRing(); iwrite(", "); const LineString *ls=polygon->getInteriorRingN(i); appendLineStringText(ls, level + 1, true, writer); } writer->write(")"); } } void WKTWriter::appendMultiPointText(const MultiPoint *multiPoint, int /*level*/, Writer *writer) { if (multiPoint->isEmpty()) { writer->write("EMPTY"); } else { writer->write("("); for (unsigned int i=0, n=multiPoint->getNumGeometries(); i 0) { writer->write(", "); } appendCoordinate( dynamic_cast(multiPoint->getGeometryN(i))->getCoordinate(), writer); } writer->write(")"); } } void WKTWriter::appendMultiLineStringText(const MultiLineString *multiLineString, int level, bool indentFirst, Writer *writer) { if (multiLineString->isEmpty()) { writer->write("EMPTY"); } else { int level2=level; bool doIndent=indentFirst; writer->write("("); for (unsigned int i=0, n=multiLineString->getNumGeometries(); i0) { writer->write(", "); level2=level+1; doIndent=true; } const LineString* ls = dynamic_cast( multiLineString->getGeometryN(i) ); appendLineStringText(ls, level2, doIndent, writer); } writer->write(")"); } } void WKTWriter::appendMultiPolygonText(const MultiPolygon *multiPolygon, int level, Writer *writer) { if (multiPolygon->isEmpty()) { writer->write("EMPTY"); } else { int level2=level; bool doIndent=false; writer->write("("); for (unsigned int i=0, n=multiPolygon->getNumGeometries(); i < n; i++) { if (i>0) { writer->write(", "); level2=level+1; doIndent=true; } const Polygon *p = dynamic_cast( multiPolygon->getGeometryN(i) ); appendPolygonText(p, level2, doIndent, writer); } writer->write(")"); } } void WKTWriter::appendGeometryCollectionText( const GeometryCollection *geometryCollection, int level, Writer *writer) { if (geometryCollection->isEmpty()) { writer->write("EMPTY"); } else { int level2=level; writer->write("("); for (unsigned int i=0, n=geometryCollection->getNumGeometries(); i < n ; ++i) { if (i>0) { writer->write(", "); level2=level+1; } appendGeometryTaggedText(geometryCollection->getGeometryN(i),level2,writer); } writer->write(")"); } } void WKTWriter::indent(int level, Writer *writer) { if (!isFormatted || level<=0) return; writer->write("\n"); writer->write(string(INDENT * level, ' ')); } } // namespace geos.io } // namespace geos geos-3.4.2/src/io/Writer.cpp0000644000175000017500000000206312206417146015457 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK to be used like java.io.Writer * **********************************************************************/ #include #include using namespace std; namespace geos { namespace io { // geos.io Writer::Writer() { } void Writer::reserve(std::size_t capacity) { str.reserve(capacity); } Writer::~Writer() { } void Writer::write(const std::string& txt) { str.append(txt); } const std::string& Writer::toString() { return str; } } // namespace geos.io } // namespace geos geos-3.4.2/src/linearref/0000755000175000017500000000000012206417234015034 5ustar frankiefrankiegeos-3.4.2/src/linearref/ExtractLineByLocation.cpp0000644000175000017500000001052112206417146021747 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/ExtractLineByLocation.java rev. 1.35 * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { Geometry *ExtractLineByLocation::extract(const Geometry *line, const LinearLocation& start, const LinearLocation& end) { ExtractLineByLocation ls(line); return ls.extract(start, end); } ExtractLineByLocation::ExtractLineByLocation(const Geometry *line) : line(line) {} Geometry *ExtractLineByLocation::extract(const LinearLocation& start, const LinearLocation& end) { if (end.compareTo(start) < 0) { Geometry* backwards = computeLinear(end, start); Geometry* forwards = reverse(backwards); delete backwards; return forwards; } return computeLinear(start, end); } Geometry *ExtractLineByLocation::reverse(const Geometry *linear) { const LineString* ls = dynamic_cast(linear); if (ls) { return ls->reverse(); } else { const MultiLineString* mls = dynamic_cast(linear); if (mls) { return mls->reverse(); } else { assert(!"non-linear geometry encountered"); return 0; } } } LineString* ExtractLineByLocation::computeLine(const LinearLocation& start, const LinearLocation& end) { CoordinateSequence* coordinates = line->getCoordinates(); CoordinateArraySequence newCoordinateArray; const unsigned int indexStep = 1; unsigned int startSegmentIndex = start.getSegmentIndex(); if (start.getSegmentFraction() > 0.0) { startSegmentIndex += indexStep; } unsigned int lastSegmentIndex = end.getSegmentIndex(); if (end.getSegmentFraction() == 1.0) { lastSegmentIndex += indexStep; } if (lastSegmentIndex >= coordinates->size()) { assert(coordinates->size() > 0); lastSegmentIndex = coordinates->size() - indexStep; } if (! start.isVertex()) { newCoordinateArray.add(start.getCoordinate(line)); } for (unsigned int i = startSegmentIndex; i <= lastSegmentIndex; i++) { newCoordinateArray.add((*coordinates)[i]); } if (! end.isVertex()) { newCoordinateArray.add(end.getCoordinate(line)); } // ensure there is at least one coordinate in the result if (newCoordinateArray.size() == 0) { newCoordinateArray.add(start.getCoordinate(line)); } /** * Ensure there is enough coordinates to build a valid line. * Make a 2-point line with duplicate coordinates, if necessary. * There will always be at least one coordinate in the coordList. */ if (newCoordinateArray.size() <= 1) { newCoordinateArray.add(newCoordinateArray[0]); } return line->getFactory()->createLineString(newCoordinateArray); } Geometry *ExtractLineByLocation::computeLinear(const LinearLocation& start, const LinearLocation& end) { LinearGeometryBuilder builder(line->getFactory()); builder.setFixInvalidLines(true); if (! start.isVertex()) { builder.add(start.getCoordinate(line)); } for (LinearIterator it(line, start); it.hasNext(); it.next()) { if (end.compareLocationValues(it.getComponentIndex(), it.getVertexIndex(), 0.0) < 0) { break; } Coordinate pt = it.getSegmentStart(); builder.add(pt); if (it.isEndOfLine()) { builder.endLine(); } } if (! end.isVertex()) { builder.add(end.getCoordinate(line)); } return builder.getGeometry(); } } } geos-3.4.2/src/linearref/LengthIndexOfPoint.cpp0000644000175000017500000000702512206417146021256 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/RobustLineIntersector.java rev. 1.35 * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { double LengthIndexOfPoint::indexOf(const Geometry *linearGeom, const Coordinate& inputPt) { LengthIndexOfPoint locater(linearGeom); return locater.indexOf(inputPt); } double LengthIndexOfPoint::indexOfAfter(const Geometry *linearGeom, const Coordinate& inputPt, double minIndex) { LengthIndexOfPoint locater(linearGeom); return locater.indexOfAfter(inputPt, minIndex); } LengthIndexOfPoint::LengthIndexOfPoint(const Geometry *linearGeom): linearGeom(linearGeom) {} double LengthIndexOfPoint::indexOf(const Coordinate& inputPt) const { return indexOfFromStart(inputPt, -1.0); } double LengthIndexOfPoint::indexOfAfter(const Coordinate& inputPt, double minIndex) const { if (minIndex < 0.0) return indexOf(inputPt); // sanity check for minIndex at or past end of line double endIndex = linearGeom->getLength(); if (endIndex < minIndex) return endIndex; double closestAfter = indexOfFromStart(inputPt, minIndex); /** * Return the minDistanceLocation found. * This will not be null, since it was initialized to minLocation */ if (closestAfter <= minIndex) { throw util::IllegalArgumentException("computed index is before specified minimum index"); } return closestAfter; } double LengthIndexOfPoint::indexOfFromStart(const Coordinate& inputPt, double minIndex) const { double minDistance = numeric_limits::max(); double ptMeasure = minIndex; double segmentStartMeasure = 0.0; LineSegment seg; LinearIterator it(linearGeom); while (it.hasNext()) { if (! it.isEndOfLine()) { seg.p0 = it.getSegmentStart(); seg.p1 = it.getSegmentEnd(); double segDistance = seg.distance(inputPt); double segMeasureToPt = segmentNearestMeasure(&seg, inputPt, segmentStartMeasure); if (segDistance < minDistance && segMeasureToPt > minIndex) { ptMeasure = segMeasureToPt; minDistance = segDistance; } segmentStartMeasure += seg.getLength(); } it.next(); } return ptMeasure; } double LengthIndexOfPoint::segmentNearestMeasure(const LineSegment* seg, const Coordinate& inputPt, double segmentStartMeasure) const { // found new minimum, so compute location distance of point double projFactor = seg->projectionFactor(inputPt); if (projFactor <= 0.0) return segmentStartMeasure; if (projFactor <= 1.0) return segmentStartMeasure + projFactor * seg->getLength(); // projFactor > 1.0 return segmentStartMeasure + seg->getLength(); } } } geos-3.4.2/src/linearref/LengthIndexedLine.cpp0000644000175000017500000001027412206417146021100 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LengthIndexedLine.java r463 * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { LengthIndexedLine::LengthIndexedLine(const Geometry* linearGeom) : linearGeom(linearGeom) {} Coordinate LengthIndexedLine::extractPoint(double index) const { LinearLocation loc = LengthLocationMap::getLocation(linearGeom, index); Coordinate coord = loc.getCoordinate(linearGeom); return coord; } Coordinate LengthIndexedLine::extractPoint(double index, double offsetDistance) const { LinearLocation loc = LengthLocationMap::getLocation(linearGeom, index); Coordinate ret; loc.getSegment(linearGeom)->pointAlongOffset(loc.getSegmentFraction(), offsetDistance, ret); return ret; } Geometry * LengthIndexedLine::extractLine(double startIndex, double endIndex) const { const LocationIndexedLine lil(linearGeom); const double startIndex2 = clampIndex(startIndex); const double endIndex2 = clampIndex(endIndex); // if extracted line is zero-length, resolve start lower as well to // ensure they are equal const bool resolveStartLower = ( startIndex2 == endIndex2 ); const LinearLocation startLoc = locationOf(startIndex2, resolveStartLower); const LinearLocation endLoc = locationOf(endIndex2); // LinearLocation endLoc = locationOf(endIndex2, true); // LinearLocation startLoc = locationOf(startIndex2); return ExtractLineByLocation::extract(linearGeom, startLoc, endLoc); } LinearLocation LengthIndexedLine::locationOf(double index) const { return LengthLocationMap::getLocation(linearGeom, index); } LinearLocation LengthIndexedLine::locationOf(double index, bool resolveLower) const { return LengthLocationMap::getLocation(linearGeom, index, resolveLower); } double LengthIndexedLine::indexOf(const Coordinate& pt) const { return LengthIndexOfPoint::indexOf(linearGeom, pt); } double LengthIndexedLine::indexOfAfter(const Coordinate& pt, double minIndex) const { return LengthIndexOfPoint::indexOfAfter(linearGeom, pt, minIndex); } double* LengthIndexedLine::indicesOf(const Geometry* subLine) const { LinearLocation* locIndex = LocationIndexOfLine::indicesOf(linearGeom, subLine); double* index = new double[2]; index[0] = LengthLocationMap::getLength(linearGeom, locIndex[0]); index[1] = LengthLocationMap::getLength(linearGeom, locIndex[1]); delete [] locIndex; return index; } double LengthIndexedLine::project(const Coordinate& pt) const { return LengthIndexOfPoint::indexOf(linearGeom, pt); } double LengthIndexedLine::getStartIndex() const { return 0.0; } double LengthIndexedLine::getEndIndex() const { return linearGeom->getLength(); } bool LengthIndexedLine::isValidIndex(double index) const { return (index >= getStartIndex() && index <= getEndIndex()); } /* public */ double LengthIndexedLine::clampIndex(double index) const { double posIndex = positiveIndex(index); double startIndex = getStartIndex(); if (posIndex < startIndex) return startIndex; double endIndex = getEndIndex(); if (posIndex > endIndex) return endIndex; return posIndex; } /* private */ double LengthIndexedLine::positiveIndex(double index) const { if (index >= 0.0) return index; return linearGeom->getLength() + index; } } // geos.linearref } // geos geos-3.4.2/src/linearref/LengthLocationMap.cpp0000644000175000017500000001054012206417146021112 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: algorithm/LengthLocationMap.java r463 * **********************************************************************/ #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { double LengthLocationMap::getLength(const Geometry* linearGeom, const LinearLocation& loc) { LengthLocationMap locater(linearGeom); return locater.getLength(loc); } LengthLocationMap::LengthLocationMap(const Geometry* linearGeom) : linearGeom(linearGeom) {} LinearLocation LengthLocationMap::getLocation(double length) const { double forwardLength = length; if (length < 0.0) { double lineLen = linearGeom->getLength(); forwardLength = lineLen + length; } return getLocationForward(forwardLength); } LinearLocation LengthLocationMap::getLocation(double length, bool resolveLower) const { double forwardLength = length; // negative values are measured from end of geometry if (length < 0.0) { double lineLen = linearGeom->getLength(); forwardLength = lineLen + length; } LinearLocation loc = getLocationForward(forwardLength); if (resolveLower) { return loc; } return resolveHigher(loc); } /* private */ LinearLocation LengthLocationMap::getLocationForward(double length) const { if (length <= 0.0) return LinearLocation(); double totalLength = 0.0; LinearIterator it (linearGeom); while (it.hasNext()) { /** * Special handling is required for the situation when the * length references exactly to a component endpoint. * In this case, the endpoint location of the current component * is returned, * rather than the startpoint location of the next component. * This produces consistent behaviour with the project method. */ if (it.isEndOfLine()) { if (totalLength == length) { unsigned int compIndex = it.getComponentIndex(); unsigned int segIndex = it.getVertexIndex(); return LinearLocation(compIndex, segIndex, 0.0); } } else { Coordinate p0 = it.getSegmentStart(); Coordinate p1 = it.getSegmentEnd(); double segLen = p1.distance(p0); // length falls in this segment if (totalLength + segLen > length) { double frac = (length - totalLength) / segLen; unsigned int compIndex = it.getComponentIndex(); unsigned int segIndex = it.getVertexIndex(); return LinearLocation(compIndex, segIndex, frac); } totalLength += segLen; } it.next(); } // length is longer than line - return end location return LinearLocation::getEndLocation(linearGeom); } /* private */ LinearLocation LengthLocationMap::resolveHigher(const LinearLocation& loc) const { if (! loc.isEndpoint(*linearGeom)) return loc; unsigned int compIndex = loc.getComponentIndex(); // if last component can't resolve any higher if (compIndex >= linearGeom->getNumGeometries() - 1) return loc; do { compIndex++; } while (compIndex < linearGeom->getNumGeometries() - 1 && linearGeom->getGeometryN(compIndex)->getLength() == 0); // resolve to next higher location return LinearLocation(compIndex, 0, 0.0); } double LengthLocationMap::getLength(const LinearLocation& loc) const { double totalLength = 0.0; LinearIterator it(linearGeom); while (it.hasNext()) { if (! it.isEndOfLine()) { Coordinate p0 = it.getSegmentStart(); Coordinate p1 = it.getSegmentEnd(); double segLen = p1.distance(p0); // length falls in this segment if (loc.getComponentIndex() == it.getComponentIndex() && loc.getSegmentIndex() == it.getVertexIndex()) { return totalLength + segLen * loc.getSegmentFraction(); } totalLength += segLen; } it.next(); } return totalLength; } } } geos-3.4.2/src/linearref/LinearGeometryBuilder.cpp0000644000175000017500000000666712206417146022016 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearGeometryBuilder.java rev. 1.1 * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { /* public */ LinearGeometryBuilder::LinearGeometryBuilder(const GeometryFactory* geomFact) : geomFact(geomFact), ignoreInvalidLines(false), fixInvalidLines(false), coordList(0) {} /* public */ void LinearGeometryBuilder::setIgnoreInvalidLines(bool ignoreInvalidLines) { this->ignoreInvalidLines = ignoreInvalidLines; } /* public */ void LinearGeometryBuilder::setFixInvalidLines(bool fixInvalidLines) { this->fixInvalidLines = fixInvalidLines; } /* public */ void LinearGeometryBuilder::add(const Coordinate& pt) { add(pt, true); } /* public */ void LinearGeometryBuilder::add(const Coordinate& pt, bool allowRepeatedPoints) { if (!coordList) coordList = new CoordinateArraySequence(); coordList->add(pt, allowRepeatedPoints); lastPt = pt; } /* public */ Coordinate LinearGeometryBuilder::getLastCoordinate() const { return lastPt; } /* public */ void LinearGeometryBuilder::endLine() { if (!coordList) { return; } if (coordList->size() < 2) { if (ignoreInvalidLines) { if (coordList) { delete coordList; coordList = 0; } return; } else if (fixInvalidLines) { assert(!coordList->isEmpty()); // just to be sure // NOTE: we copy the point cause reallocation of // vector memory will invalidate the reference // to one of its elements. // // We wouldn't have such problems with a vector // of pointers (as used in JTS)... // Coordinate firstPoint = (*coordList)[0]; add(firstPoint); } } LineString* line = 0; try { line = geomFact->createLineString(coordList); } catch (util::IllegalArgumentException ex) { // exception is due to too few points in line. // only propagate if not ignoring short lines if (! ignoreInvalidLines) throw ex; } if (line) lines.push_back(line); coordList = 0; } /* public */ Geometry* LinearGeometryBuilder::getGeometry() { // end last line in case it was not done by user endLine(); // NOTE: lines elements are cloned return geomFact->buildGeometry(lines); } /* public */ LinearGeometryBuilder::~LinearGeometryBuilder() { for (GeomPtrVect::const_iterator i=lines.begin(), e=lines.end(); i != e; ++i) { delete *i; } } } // namespace geos.linearref } // namespace geos geos-3.4.2/src/linearref/LinearIterator.cpp0000644000175000017500000000652012206417146020471 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearIterator.java r463 * **********************************************************************/ #include #include #include #include #include using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { unsigned int LinearIterator::segmentEndVertexIndex(const LinearLocation& loc) { if (loc.getSegmentFraction() > 0.0) return loc.getSegmentIndex() + 1; return loc.getSegmentIndex(); } LinearIterator::LinearIterator(const Geometry* linear) : vertexIndex(0), componentIndex(0), linear(linear), numLines(linear->getNumGeometries()) { loadCurrentLine(); } LinearIterator::LinearIterator(const Geometry* linear, const LinearLocation& start): vertexIndex(segmentEndVertexIndex(start)), componentIndex(start.getComponentIndex()), linear(linear), numLines(linear->getNumGeometries()) { loadCurrentLine(); } LinearIterator::LinearIterator(const Geometry* linear, unsigned int componentIndex, unsigned int vertexIndex) : vertexIndex(vertexIndex), componentIndex(componentIndex), linear(linear), numLines(linear->getNumGeometries()) { loadCurrentLine(); } void LinearIterator::loadCurrentLine() { if (componentIndex >= numLines) { currentLine = 0; return; } currentLine = dynamic_cast (linear->getGeometryN(componentIndex)); if ( ! currentLine ) { throw util::IllegalArgumentException("LinearIterator only supports lineal geometry components"); } } bool LinearIterator::hasNext() const { if (componentIndex >= numLines) return false; if (componentIndex == numLines - 1 && vertexIndex >= currentLine->getNumPoints()) return false; return true; } void LinearIterator::next() { if (! hasNext()) return; vertexIndex++; if (vertexIndex >= currentLine->getNumPoints()) { componentIndex++; loadCurrentLine(); vertexIndex = 0; } } bool LinearIterator::isEndOfLine() const { if (componentIndex >= numLines) return false; //LineString currentLine = (LineString) linear.getGeometryN(componentIndex); if (!currentLine) return false; if (vertexIndex < currentLine->getNumPoints() - 1) return false; return true; } unsigned int LinearIterator::getComponentIndex() const { return componentIndex; } unsigned int LinearIterator::getVertexIndex() const { return vertexIndex; } const LineString* LinearIterator::getLine() const { return currentLine; } Coordinate LinearIterator::getSegmentStart() const { return currentLine->getCoordinateN(vertexIndex); } Coordinate LinearIterator::getSegmentEnd() const { if (vertexIndex < getLine()->getNumPoints() - 1) return currentLine->getCoordinateN(vertexIndex + 1); Coordinate c; c.setNull(); return c; } } } geos-3.4.2/src/linearref/LinearLocation.cpp0000644000175000017500000002164112206417146020451 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LinearLocation.java r463 * **********************************************************************/ #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref { // geos::linearref /* public static */ LinearLocation LinearLocation::getEndLocation(const Geometry* linear) { // assert: linear is LineString or MultiLineString LinearLocation loc; loc.setToEnd(linear); return loc; } /* public static */ Coordinate LinearLocation::pointAlongSegmentByFraction(const Coordinate& p0, const Coordinate& p1, double frac) { if (frac <= 0.0) return p0; if (frac >= 1.0) return p1; double x = (p1.x - p0.x) * frac + p0.x; double y = (p1.y - p0.y) * frac + p0.y; // interpolate Z value. If either input Z is NaN, result z will be NaN as well. double z = (p1.z - p0.z) * frac + p0.z; return Coordinate(x, y, z); } /* public */ LinearLocation::LinearLocation(unsigned int segmentIndex, double segmentFraction) : componentIndex(0), segmentIndex(segmentIndex), segmentFraction(segmentFraction) {} /* public */ LinearLocation::LinearLocation(unsigned int componentIndex, unsigned int segmentIndex, double segmentFraction) : componentIndex(componentIndex), segmentIndex(segmentIndex), segmentFraction(segmentFraction) { normalize(); } /* private */ void LinearLocation::normalize() { if (segmentFraction < 0.0) { segmentFraction = 0.0; } if (segmentFraction > 1.0) { segmentFraction = 1.0; } if (componentIndex < 0) { componentIndex = 0; segmentIndex = 0; segmentFraction = 0.0; } if (segmentIndex < 0) { segmentIndex = 0; segmentFraction = 0.0; } if (segmentFraction == 1.0) { segmentFraction = 0.0; segmentIndex += 1; } } /* public */ void LinearLocation::clamp(const Geometry* linear) { if (componentIndex >= linear->getNumGeometries()) { setToEnd(linear); return; } if (segmentIndex >= linear->getNumPoints()) { const LineString* line = dynamic_cast (linear->getGeometryN(componentIndex)); segmentIndex = line->getNumPoints() - 1; segmentFraction = 1.0; } } /* public */ void LinearLocation::snapToVertex(const Geometry* linearGeom, double minDistance) { if (segmentFraction <= 0.0 || segmentFraction >= 1.0) return; double segLen = getSegmentLength(linearGeom); double lenToStart = segmentFraction * segLen; double lenToEnd = segLen - lenToStart; if (lenToStart <= lenToEnd && lenToStart < minDistance) { segmentFraction = 0.0; } else if (lenToEnd <= lenToStart && lenToEnd < minDistance) { segmentFraction = 1.0; } } /* public */ double LinearLocation::getSegmentLength(const Geometry* linearGeom) const { const LineString* lineComp = dynamic_cast (linearGeom->getGeometryN(componentIndex)); // ensure segment index is valid unsigned int segIndex = segmentIndex; if (segmentIndex >= lineComp->getNumPoints() - 1) segIndex = lineComp->getNumPoints() - 2; Coordinate p0 = lineComp->getCoordinateN(segIndex); Coordinate p1 = lineComp->getCoordinateN(segIndex + 1); return p0.distance(p1); } /* public */ void LinearLocation::setToEnd(const Geometry* linear) { componentIndex = linear->getNumGeometries() - 1; const LineString* lastLine = dynamic_cast(linear->getGeometryN(componentIndex)); segmentIndex = lastLine->getNumPoints() - 1; segmentFraction = 1.0; } /* public */ unsigned int LinearLocation::getComponentIndex() const { return componentIndex; } /* public */ unsigned int LinearLocation::getSegmentIndex() const { return segmentIndex; } /* public */ double LinearLocation::getSegmentFraction() const { return segmentFraction; } /* public */ bool LinearLocation::isVertex() const { return segmentFraction <= 0.0 || segmentFraction >= 1.0; } /* public */ Coordinate LinearLocation::getCoordinate(const Geometry* linearGeom) const { const LineString* lineComp = dynamic_cast (linearGeom->getGeometryN(componentIndex)); if ( ! lineComp ) { throw util::IllegalArgumentException("LinearLocation::getCoordinate only works with LineString geometries"); } Coordinate p0 = lineComp->getCoordinateN(segmentIndex); if (segmentIndex >= lineComp->getNumPoints() - 1) return p0; Coordinate p1 = lineComp->getCoordinateN(segmentIndex + 1); return pointAlongSegmentByFraction(p0, p1, segmentFraction); } /* public */ std::auto_ptr LinearLocation::getSegment(const Geometry* linearGeom) const { const LineString* lineComp = dynamic_cast (linearGeom->getGeometryN(componentIndex)); Coordinate p0 = lineComp->getCoordinateN(segmentIndex); // check for endpoint - return last segment of the line if so if (segmentIndex >= lineComp->getNumPoints() - 1) { Coordinate prev = lineComp->getCoordinateN(lineComp->getNumPoints() - 2); return std::auto_ptr(new LineSegment(prev, p0)); } Coordinate p1 = lineComp->getCoordinateN(segmentIndex + 1); return std::auto_ptr(new LineSegment(p0, p1)); } /* public */ bool LinearLocation::isValid(const Geometry* linearGeom) const { if (componentIndex < 0 || componentIndex >= linearGeom->getNumGeometries()) return false; const LineString* lineComp = dynamic_cast (linearGeom->getGeometryN(componentIndex)); if (segmentIndex < 0 || segmentIndex > lineComp->getNumPoints()) return false; if (segmentIndex == lineComp->getNumPoints() && segmentFraction != 0.0) return false; if (segmentFraction < 0.0 || segmentFraction > 1.0) return false; return true; } /* public */ int LinearLocation::compareTo(const LinearLocation& other) const { // compare component indices if (componentIndex < other.componentIndex) return -1; if (componentIndex > other.componentIndex) return 1; // compare segments if (segmentIndex < other.segmentIndex) return -1; if (segmentIndex > other.segmentIndex) return 1; // same segment, so compare segment fraction if (segmentFraction < other.segmentFraction) return -1; if (segmentFraction > other.segmentFraction) return 1; // same location return 0; } /* public */ int LinearLocation::compareLocationValues(unsigned int componentIndex1, unsigned int segmentIndex1, double segmentFraction1) const { // compare component indices if (componentIndex < componentIndex1) return -1; if (componentIndex > componentIndex1) return 1; // compare segments if (segmentIndex < segmentIndex1) return -1; if (segmentIndex > segmentIndex1) return 1; // same segment, so compare segment fraction if (segmentFraction < segmentFraction1) return -1; if (segmentFraction > segmentFraction1) return 1; // same location return 0; } /* public static */ int LinearLocation::compareLocationValues( unsigned int componentIndex0, unsigned int segmentIndex0, double segmentFraction0, unsigned int componentIndex1, unsigned int segmentIndex1, double segmentFraction1) { // compare component indices if (componentIndex0 < componentIndex1) return -1; if (componentIndex0 > componentIndex1) return 1; // compare segments if (segmentIndex0 < segmentIndex1) return -1; if (segmentIndex0 > segmentIndex1) return 1; // same segment, so compare segment fraction if (segmentFraction0 < segmentFraction1) return -1; if (segmentFraction0 > segmentFraction1) return 1; // same location return 0; } /* public */ bool LinearLocation::isOnSameSegment(const LinearLocation& loc) const { if (componentIndex != loc.componentIndex) return false; if (segmentIndex == loc.segmentIndex) return true; if (loc.segmentIndex - segmentIndex == 1 && loc.segmentFraction == 0.0) return true; if (segmentIndex - loc.segmentIndex == 1 && segmentFraction == 0.0) return true; return false; } /* public */ bool LinearLocation::isEndpoint(const Geometry& linearGeom) const { const LineString& lineComp = dynamic_cast( *(linearGeom.getGeometryN(componentIndex)) ); // check for endpoint unsigned int nseg = lineComp.getNumPoints() - 1; return segmentIndex >= nseg || (segmentIndex == nseg && segmentFraction >= 1.0); } ostream& operator<<(ostream &out, const LinearLocation &obj) { return out << "LinearLoc[" << obj.componentIndex << ", " << obj.segmentIndex << ", " << obj.segmentFraction << "]"; } } // namespace geos.linearref } // namespace geos geos-3.4.2/src/linearref/LocationIndexOfLine.cpp0000644000175000017500000000377112206417146021407 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LengthIndexedLine.java r731 * **********************************************************************/ #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { /* public static */ LinearLocation* LocationIndexOfLine::indicesOf(const Geometry* linearGeom, const Geometry* subLine) { LocationIndexOfLine locater(linearGeom); return locater.indicesOf(subLine); } LocationIndexOfLine::LocationIndexOfLine(const Geometry* linearGeom) : linearGeom(linearGeom) {} /* public */ LinearLocation* LocationIndexOfLine::indicesOf(const Geometry* subLine) const { Coordinate startPt = dynamic_cast (subLine->getGeometryN(0))->getCoordinateN(0); const LineString* lastLine = dynamic_cast (subLine->getGeometryN(subLine->getNumGeometries() - 1)); Coordinate endPt = lastLine->getCoordinateN(lastLine->getNumPoints() - 1); LocationIndexOfPoint locPt(linearGeom); LinearLocation *subLineLoc = new LinearLocation[2]; subLineLoc[0] = locPt.indexOf(startPt); // check for case where subline is zero length if (subLine->getLength() == 0.0) { subLineLoc[1] = subLineLoc[0]; } else { subLineLoc[1] = locPt.indexOfAfter(endPt, &subLineLoc[0]); } return subLineLoc; } } } geos-3.4.2/src/linearref/LocationIndexOfPoint.cpp0000644000175000017500000000705012206417146021603 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: linearref/LocationIndexOfPoint.java r466 * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace linearref // geos.linearref { LinearLocation LocationIndexOfPoint::indexOfFromStart(const Coordinate& inputPt, const LinearLocation* minIndex) const { double minDistance = numeric_limits::max(); int minComponentIndex = 0; int minSegmentIndex = 0; double minFrac = -1.0; LineSegment seg; for (LinearIterator it(linearGeom); it.hasNext(); it.next()) { if (! it.isEndOfLine()) { seg.p0 = it.getSegmentStart(); seg.p1 = it.getSegmentEnd(); double segDistance = seg.distance(inputPt); double segFrac = seg.segmentFraction(inputPt); int candidateComponentIndex = it.getComponentIndex(); int candidateSegmentIndex = it.getVertexIndex(); if (segDistance < minDistance) { // ensure after minLocation, if any if (!minIndex || minIndex->compareLocationValues(candidateComponentIndex, candidateSegmentIndex, segFrac) < 0) { // otherwise, save this as new minimum minComponentIndex = candidateComponentIndex; minSegmentIndex = candidateSegmentIndex; minFrac = segFrac; minDistance = segDistance; } } } } LinearLocation loc(minComponentIndex, minSegmentIndex, minFrac); return loc; } LinearLocation LocationIndexOfPoint::indexOf(const Geometry *linearGeom, const Coordinate& inputPt) { LocationIndexOfPoint locater(linearGeom); return locater.indexOf(inputPt); } LinearLocation LocationIndexOfPoint::indexOfAfter(const Geometry *linearGeom, const Coordinate& inputPt, const LinearLocation* minIndex) { LocationIndexOfPoint locater(linearGeom); return locater.indexOfAfter(inputPt, minIndex); } LocationIndexOfPoint::LocationIndexOfPoint(const Geometry *linearGeom) : linearGeom(linearGeom) {} LinearLocation LocationIndexOfPoint::indexOf(const Coordinate& inputPt) const { return indexOfFromStart(inputPt, 0); } LinearLocation LocationIndexOfPoint::indexOfAfter(const Coordinate& inputPt, const LinearLocation* minIndex) const { if (!minIndex) return indexOf(inputPt); // sanity check for minLocation at or past end of line LinearLocation endLoc = LinearLocation::getEndLocation(linearGeom); if (endLoc.compareTo(*minIndex) <= 0) return endLoc; LinearLocation closestAfter = indexOfFromStart(inputPt, minIndex); /** * Return the minDistanceLocation found. * This will not be null, since it was initialized to minLocation */ if (closestAfter.compareTo(*minIndex) < 0) { throw util::IllegalArgumentException("computed location is before specified minimum location"); } return closestAfter; } } } geos-3.4.2/src/linearref/Makefile.am0000644000175000017500000000110312206417146017065 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = liblinearref.la INCLUDES = -I$(top_srcdir)/include liblinearref_la_SOURCES = \ ExtractLineByLocation.cpp \ LengthIndexedLine.cpp \ LengthIndexOfPoint.cpp \ LengthLocationMap.cpp \ LinearIterator.cpp \ LinearGeometryBuilder.cpp \ LinearLocation.cpp \ LocationIndexOfLine.cpp \ LocationIndexOfPoint.cpp # Deprecated files # (http://geos.osgeo.org/pipermail/geos-devel/2006-March/001828.html): #NonRobustLineIntersector.cpp #RobustLineIntersector.cpp geos-3.4.2/src/linearref/Makefile.in0000644000175000017500000004236512206417164017115 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/linearref DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblinearref_la_LIBADD = am_liblinearref_la_OBJECTS = ExtractLineByLocation.lo \ LengthIndexedLine.lo LengthIndexOfPoint.lo \ LengthLocationMap.lo LinearIterator.lo \ LinearGeometryBuilder.lo LinearLocation.lo \ LocationIndexOfLine.lo LocationIndexOfPoint.lo liblinearref_la_OBJECTS = $(am_liblinearref_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liblinearref_la_SOURCES) DIST_SOURCES = $(liblinearref_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # noinst_LTLIBRARIES = liblinearref.la INCLUDES = -I$(top_srcdir)/include liblinearref_la_SOURCES = \ ExtractLineByLocation.cpp \ LengthIndexedLine.cpp \ LengthIndexOfPoint.cpp \ LengthLocationMap.cpp \ LinearIterator.cpp \ LinearGeometryBuilder.cpp \ LinearLocation.cpp \ LocationIndexOfLine.cpp \ LocationIndexOfPoint.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/linearref/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/linearref/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liblinearref.la: $(liblinearref_la_OBJECTS) $(liblinearref_la_DEPENDENCIES) $(CXXLINK) $(liblinearref_la_OBJECTS) $(liblinearref_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ExtractLineByLocation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthIndexOfPoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthIndexedLine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthLocationMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LinearGeometryBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LinearIterator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LinearLocation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocationIndexOfLine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocationIndexOfPoint.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Deprecated files # (http://geos.osgeo.org/pipermail/geos-devel/2006-March/001828.html): #NonRobustLineIntersector.cpp #RobustLineIntersector.cpp # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/noding/0000755000175000017500000000000012206417234014343 5ustar frankiefrankiegeos-3.4.2/src/noding/BasicSegmentString.cpp0000644000175000017500000000347612206417146020616 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/BasicSegmentString.java rev. 1.1 (JTS-1.9) * **********************************************************************/ #include #include #include #include #include //#include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #include #include using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*public*/ int BasicSegmentString::getSegmentOctant(unsigned int index) const { if (index >= size() - 1) return -1; return Octant::octant(getCoordinate(index), getCoordinate(index+1)); } /* virtual public */ const geom::Coordinate& BasicSegmentString::getCoordinate(unsigned int i) const { return pts->getAt(i); } /* virtual public */ geom::CoordinateSequence* BasicSegmentString::getCoordinates() const { return pts; } /* virtual public */ bool BasicSegmentString::isClosed() const { return pts->getAt(0)==pts->getAt(size()-1); } /* public virtual */ std::ostream& BasicSegmentString::print(std::ostream& os) const { os << "BasicSegmentString: " << std::endl; os << " LINESTRING" << *(pts) << ";" << std::endl; return os; } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/FastNodingValidator.cpp0000644000175000017500000000430412206417146020754 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/FastNodingValidator.java rev. ??? (JTS-1.8) * **********************************************************************/ #include #include // for checkInteriorIntersections() #include #include // for checkValid() #include #include // for getErrorMessage() #include #include namespace geos { namespace noding { // geos.noding /*private*/ void FastNodingValidator::checkInteriorIntersections() { isValidVar = true; segInt.reset(new SingleInteriorIntersectionFinder(li)); MCIndexNoder noder; noder.setSegmentIntersector(segInt.get()); noder.computeNodes(&segStrings); if (segInt->hasIntersection()) { isValidVar = false; return; } } /*public*/ std::string FastNodingValidator::getErrorMessage() const { using geos::io::WKTWriter; using geos::geom::Coordinate; if (isValidVar) return std::string("no intersections found"); //return std::string("found non-noded intersection etc etc"); const std::vector& intSegs = segInt->getIntersectionSegments(); assert(intSegs.size() == 4); return "found non-noded intersection between " + WKTWriter::toLineString(intSegs[0], intSegs[1]) + " and " + WKTWriter::toLineString(intSegs[2], intSegs[3]); } void FastNodingValidator::checkValid() { execute(); if (! isValidVar) { //std::cerr << "Not valid: " << getErrorMessage() << " interior intersection: " << segInt->getInteriorIntersection() << std::endl; throw util::TopologyException(getErrorMessage(), segInt->getInteriorIntersection()); } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/FastSegmentSetIntersectionFinder.cpp0000644000175000017500000000370312206417146023467 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/FastSegmentSetIntersectionFinder.java r388 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include namespace geos { namespace noding { // geos::noding /* * private: */ /* * protected: */ /* * public: */ FastSegmentSetIntersectionFinder:: FastSegmentSetIntersectionFinder( noding::SegmentString::ConstVect * baseSegStrings) : segSetMutInt( new MCIndexSegmentSetMutualIntersector()), lineIntersector( new LineIntersector()) { segSetMutInt->setBaseSegments( baseSegStrings); } FastSegmentSetIntersectionFinder:: ~FastSegmentSetIntersectionFinder() { delete lineIntersector; delete segSetMutInt; } bool FastSegmentSetIntersectionFinder:: intersects( noding::SegmentString::ConstVect * segStrings) { SegmentIntersectionDetector intFinder( lineIntersector); return this->intersects( segStrings, &intFinder); } bool FastSegmentSetIntersectionFinder:: intersects( noding::SegmentString::ConstVect * segStrings, SegmentIntersectionDetector * intDetector) { segSetMutInt->setSegmentIntersector( intDetector); segSetMutInt->process( segStrings); return intDetector->hasIntersection(); } } // geos::noding } // geos geos-3.4.2/src/noding/GeometryNoder.cpp0000644000175000017500000001165312206417146017642 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * NOTE: this is not in JTS. JTS has a snapround/GeometryNoder though * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for auto_ptr #include namespace geos { namespace noding { // geos.noding namespace { /** * Add every linear element in a geometry into SegmentString vector */ class SegmentStringExtractor: public geom::GeometryComponentFilter { public: SegmentStringExtractor(SegmentString::NonConstVect& to) : _to(to) {} void filter_ro(const geom::Geometry * g) { const geom::LineString *ls = dynamic_cast(g); if ( ls ) { geom::CoordinateSequence* coord = ls->getCoordinates(); // coord ownership transferred to SegmentString SegmentString *ss = new NodedSegmentString(coord, 0); _to.push_back(ss); } } private: SegmentString::NonConstVect& _to; SegmentStringExtractor(SegmentStringExtractor const&); /*= delete*/ SegmentStringExtractor& operator=(SegmentStringExtractor const&); /*= delete*/ }; } /* public static */ std::auto_ptr GeometryNoder::node(const geom::Geometry& geom) { GeometryNoder noder(geom); return noder.getNoded(); } /* public */ GeometryNoder::GeometryNoder(const geom::Geometry& g) : argGeom(g) { } /* private */ std::auto_ptr GeometryNoder::toGeometry(SegmentString::NonConstVect& nodedEdges) { const geom::GeometryFactory *geomFact = argGeom.getFactory(); std::set< OrientedCoordinateArray > ocas; // Create a geometry out of the noded substrings. std::vector< geom::Geometry* >* lines = new std::vector< geom::Geometry * >(); lines->reserve(nodedEdges.size()); for ( unsigned int i = 0, n = nodedEdges.size(); i < n; ++i ) { SegmentString* ss = nodedEdges [i]; const geom::CoordinateSequence* coords = ss->getCoordinates(); // Check if an equivalent edge is known OrientedCoordinateArray oca1( *coords ); if ( ocas.insert(oca1).second ) { geom::Geometry* tmp = geomFact->createLineString( coords->clone() ); lines->push_back( tmp ); } } std::auto_ptr noded ( geomFact->createMultiLineString( lines ) ); return noded; } /* public */ std::auto_ptr GeometryNoder::getNoded() { SegmentString::NonConstVect lineList; extractSegmentStrings(argGeom, lineList); Noder& noder = getNoder(); SegmentString::NonConstVect* nodedEdges = 0; try { noder.computeNodes( &lineList ); nodedEdges = noder.getNodedSubstrings(); } catch (const std::exception& ex) { for (size_t i=0, n=lineList.size(); i noded = toGeometry(*nodedEdges); for ( unsigned int i = 0, n = nodedEdges->size(); i < n; ++i ) delete ( *nodedEdges )[i]; delete nodedEdges; for (size_t i=0, n=lineList.size(); igetPrecisionModel(); #if 0 using algorithm::LineIntersector; LineIntersector li; IntersectionAdder intersectionAdder(li); noder.reset( new MCIndexNoder(&intersectionAdder) ); #else IteratedNoder* in = new IteratedNoder(pm); //in->setMaximumIterations(0); noder.reset( in ); //using snapround::SimpleSnapRounder; //noder.reset( new SimpleSnapRounder(*pm) ); //using snapround::MCIndexSnapRounder; //noder.reset( new MCIndexSnapRounder(*pm) ); #endif } return *noder; } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/IntersectionAdder.cpp0000644000175000017500000000572712206417146020472 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IntersectionAdder.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #include #include #include #include #include using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*private*/ bool IntersectionAdder::isTrivialIntersection(const SegmentString* e0, int segIndex0, const SegmentString* e1, int segIndex1) { if (e0 != e1) return false; if (li.getIntersectionNum() != 1) return false; if (isAdjacentSegments(segIndex0, segIndex1)) return true; if (! e0->isClosed()) return false; int maxSegIndex = e0->size() - 1; if ( (segIndex0 == 0 && segIndex1 == maxSegIndex) || (segIndex1 == 0 && segIndex0 == maxSegIndex) ) { return true; } return false; } /*public*/ void IntersectionAdder::processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1) { // don't bother intersecting a segment with itself if (e0 == e1 && segIndex0 == segIndex1) return; numTests++; const Coordinate& p00 = e0->getCoordinate(segIndex0); const Coordinate& p01 = e0->getCoordinate(segIndex0 + 1); const Coordinate& p10 = e1->getCoordinate(segIndex1); const Coordinate& p11 = e1->getCoordinate(segIndex1 + 1); li.computeIntersection(p00, p01, p10, p11); //if (li.hasIntersection() && li.isProper()) Debug.println(li); // No intersection, nothing to do if (! li.hasIntersection()) return; //intersectionFound = true; numIntersections++; if (li.isInteriorIntersection()) { numInteriorIntersections++; hasInterior=true; } // if the segments are adjacent they have at least // one trivial intersection, // the shared endpoint. Don't bother adding it if it // is the only intersection. if (! isTrivialIntersection(e0, segIndex0, e1, segIndex1)) { hasIntersectionVar = true; NodedSegmentString* ee0 = dynamic_cast(e0); NodedSegmentString* ee1 = dynamic_cast(e1); assert(ee0 && ee1); ee0->addIntersections(&li, segIndex0, 0); ee1->addIntersections(&li, segIndex1, 1); if (li.isProper()) { numProperIntersections++; //Debug.println(li.toString()); //Debug.println(li.getIntersection(0)); //properIntersectionPoint = (Coordinate) li.getIntersection(0).clone(); hasProper = true; hasProperInterior = true; } } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/IntersectionFinderAdder.cpp0000644000175000017500000000377412206417146021622 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IntersectionFinderAdder.java rev. 1.5 (JTS-1.9) * **********************************************************************/ #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace noding { // geos.noding void IntersectionFinderAdder::processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1) { // don't bother intersecting a segment with itself if (e0 == e1 && segIndex0 == segIndex1) return; const Coordinate& p00 = e0->getCoordinate(segIndex0); const Coordinate& p01 = e0->getCoordinate(segIndex0 + 1); const Coordinate& p10 = e1->getCoordinate(segIndex1); const Coordinate& p11 = e1->getCoordinate(segIndex1 + 1); li.computeIntersection(p00, p01, p10, p11); //if (li.hasIntersection() && li.isProper()) Debug.println(li); if (li.hasIntersection()) { if (li.isInteriorIntersection()) { for (int intIndex=0, n=li.getIntersectionNum(); intIndex(e0); NodedSegmentString* ee1 = dynamic_cast(e1); assert(ee0 && ee1); ee0->addIntersections(&li, segIndex0, 0); ee1->addIntersections(&li, segIndex1, 1); } } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/IteratedNoder.cpp0000644000175000017500000000541412206417146017606 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/IteratedNoder.java r591 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace noding { // geos.noding /* private */ void IteratedNoder::node(vector *segStrings, int *numInteriorIntersections) { IntersectionAdder si(li); MCIndexNoder noder; noder.setSegmentIntersector(&si); noder.computeNodes(segStrings); nodedSegStrings = noder.getNodedSubstrings(); *numInteriorIntersections = si.numInteriorIntersections; //System.out.println("# intersection tests: " + si.numTests); } /* public */ void IteratedNoder::computeNodes(SegmentString::NonConstVect* segStrings) // throw(GEOSException); { int numInteriorIntersections; nodedSegStrings = segStrings; int nodingIterationCount = 0; int lastNodesCreated = -1; vector *lastStrings = 0; do { // NOTE: will change this.nodedSegStrings node(nodedSegStrings, &numInteriorIntersections); // Delete noded strings from previous iteration if ( lastStrings ) { for ( unsigned int i = 0, n = lastStrings->size(); i < n; ++i ) delete (*lastStrings)[i]; delete lastStrings; } lastStrings = nodedSegStrings; nodingIterationCount++; int nodesCreated = numInteriorIntersections; /** * Fail if the number of nodes created is not declining. * However, allow a few iterations at least before doing this */ //cerr<<"# nodes created: "< 0 && nodesCreated >= lastNodesCreated && nodingIterationCount > maxIter) { stringstream s; s<<"Iterated noding failed to converge after "<< nodingIterationCount << " iterations"; throw util::TopologyException(s.str()); } lastNodesCreated = nodesCreated; } while (lastNodesCreated > 0); //cerr<<"# nodings = "< #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifndef GEOS_INLINE # include #endif using namespace std; using namespace geos::index::chain; namespace geos { namespace noding { // geos.noding /*public*/ void MCIndexNoder::computeNodes(SegmentString::NonConstVect* inputSegStrings) { nodedSegStrings = inputSegStrings; assert(nodedSegStrings); for_each(nodedSegStrings->begin(), nodedSegStrings->end(), bind1st(mem_fun(&MCIndexNoder::add), this)); intersectChains(); //cerr<<"MCIndexNoder: # chain overlaps = "<::iterator i=monoChains.begin(), iEnd=monoChains.end(); i != iEnd; ++i) { GEOS_CHECK_FOR_INTERRUPTS(); MonotoneChain* queryChain = *i; assert(queryChain); vector overlapChains; index.query(&(queryChain->getEnvelope()), overlapChains); for (vector::iterator j=overlapChains.begin(), jEnd=overlapChains.end(); j != jEnd; ++j) { MonotoneChain* testChain = static_cast(*j); assert(testChain); /** * following test makes sure we only compare each * pair of chains once and that we don't compare a * chain to itself */ if (testChain->getId() > queryChain->getId()) { queryChain->computeOverlaps(testChain, &overlapAction); nOverlaps++; } // short-circuit if possible if (segInt->isDone()) return; } } } /*private*/ void MCIndexNoder::add(SegmentString* segStr) { vector segChains; // segChains will contain nelwy allocated MonotoneChain objects MonotoneChainBuilder::getChains(segStr->getCoordinates(), segStr, segChains); for(vector::iterator it=segChains.begin(), iEnd=segChains.end(); it!=iEnd; ++it) { MonotoneChain* mc = *it; assert(mc); mc->setId(idCounter++); index.insert(&(mc->getEnvelope()), mc); // MonotoneChain objects deletion delegated to destructor monoChains.push_back(mc); } } MCIndexNoder::~MCIndexNoder() { for(vector::iterator i=monoChains.begin(), iEnd=monoChains.end(); i!=iEnd; ++i) { assert(*i); delete *i; } } void MCIndexNoder::SegmentOverlapAction::overlap(MonotoneChain& mc1, size_t start1, MonotoneChain& mc2, size_t start2) { SegmentString* ss1 = const_cast( static_cast(mc1.getContext()) ); assert(ss1); SegmentString* ss2 = const_cast( static_cast(mc2.getContext()) ); assert(ss2); si.processIntersections(ss1, start1, ss2, start2); } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/MCIndexSegmentSetMutualIntersector.cpp0000644000175000017500000001133112206417146023750 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/MCIndexSegmentSetMutualIntersector.java r388 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include // std #include using namespace geos::index::chain; namespace geos { namespace noding { // geos::noding /*private*/ void MCIndexSegmentSetMutualIntersector::addToIndex(SegmentString* segStr) { MonoChains segChains; MonotoneChainBuilder::getChains(segStr->getCoordinates(), segStr, segChains); MonoChains::size_type n = segChains.size(); chainStore.reserve(chainStore.size() + n); for (MonoChains::size_type i = 0; i < n; i++) { MonotoneChain * mc = segChains[i]; mc->setId(indexCounter++); index->insert(&(mc->getEnvelope()), mc); chainStore.push_back(mc); } } /*private*/ void MCIndexSegmentSetMutualIntersector::intersectChains() { MCIndexSegmentSetMutualIntersector::SegmentOverlapAction overlapAction( *segInt); for (MonoChains::size_type i = 0, ni = monoChains.size(); i < ni; ++i) { MonotoneChain * queryChain = (MonotoneChain *)monoChains[i]; std::vector overlapChains; index->query( &(queryChain->getEnvelope()), overlapChains); for (std::size_t j = 0, nj = overlapChains.size(); j < nj; j++) { MonotoneChain * testChain = (MonotoneChain *)(overlapChains[j]); queryChain->computeOverlaps( testChain, &overlapAction); nOverlaps++; if (segInt->isDone()) return; } } } /*private*/ void MCIndexSegmentSetMutualIntersector::addToMonoChains(SegmentString* segStr) { MonoChains segChains; MonotoneChainBuilder::getChains(segStr->getCoordinates(), segStr, segChains); MonoChains::size_type n = segChains.size(); monoChains.reserve(monoChains.size() + n); for (MonoChains::size_type i = 0; i < n; i++) { MonotoneChain* mc = segChains[i]; mc->setId( processCounter++ ); monoChains.push_back(mc); } } /* public */ MCIndexSegmentSetMutualIntersector::MCIndexSegmentSetMutualIntersector() : monoChains(), index(new geos::index::strtree::STRtree()), indexCounter(0), processCounter(0), nOverlaps(0) { } /* public */ MCIndexSegmentSetMutualIntersector::~MCIndexSegmentSetMutualIntersector() { delete index; MonoChains::iterator i, e; for (i = chainStore.begin(), e = chainStore.end(); i != e; ++i) { delete *i; } for (i = monoChains.begin(), e = monoChains.end(); i != e; i++) { delete *i; } } /* public */ void MCIndexSegmentSetMutualIntersector::setBaseSegments(SegmentString::ConstVect* segStrings) { // NOTE - mloskot: const qualifier is removed silently, dirty. for (std::size_t i = 0, n = segStrings->size(); i < n; i++) { const SegmentString* css = (*segStrings)[i]; SegmentString* ss = const_cast(css); addToIndex(ss); } } /*public*/ void MCIndexSegmentSetMutualIntersector::process(SegmentString::ConstVect * segStrings) { processCounter = indexCounter + 1; nOverlaps = 0; for (MonoChains::iterator i = monoChains.begin(), e = monoChains.end(); i != e; i++) { delete *i; } monoChains.clear(); for (SegmentString::ConstVect::size_type i = 0, n = segStrings->size(); i < n; i++) { SegmentString * seg = (SegmentString *)((*segStrings)[i]); addToMonoChains( seg); } intersectChains(); } /* public */ void MCIndexSegmentSetMutualIntersector::SegmentOverlapAction::overlap( MonotoneChain& mc1, size_t start1, MonotoneChain& mc2, size_t start2) { SegmentString * ss1 = (SegmentString *)(mc1.getContext()); SegmentString * ss2 = (SegmentString *)(mc2.getContext()); si.processIntersections(ss1, start1, ss2, start2); } } // geos::noding } // geos geos-3.4.2/src/noding/Makefile.am0000644000175000017500000000142012206417146016376 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snapround noinst_LTLIBRARIES = libnoding.la INCLUDES = -I$(top_srcdir)/include libnoding_la_SOURCES = \ BasicSegmentString.cpp \ FastNodingValidator.cpp \ FastSegmentSetIntersectionFinder.cpp \ GeometryNoder.cpp \ IntersectionAdder.cpp \ IntersectionFinderAdder.cpp \ IteratedNoder.cpp \ MCIndexNoder.cpp \ MCIndexSegmentSetMutualIntersector.cpp \ NodedSegmentString.cpp \ NodingValidator.cpp \ Octant.cpp \ OrientedCoordinateArray.cpp \ ScaledNoder.cpp \ SegmentIntersectionDetector.cpp \ SegmentNode.cpp \ SegmentNodeList.cpp \ SegmentString.cpp \ SegmentStringUtil.cpp \ SimpleNoder.cpp \ SingleInteriorIntersectionFinder.cpp libnoding_la_LIBADD = snapround/libsnapround.la geos-3.4.2/src/noding/Makefile.in0000644000175000017500000006001212206417164016411 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/noding DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libnoding_la_DEPENDENCIES = snapround/libsnapround.la am_libnoding_la_OBJECTS = BasicSegmentString.lo FastNodingValidator.lo \ FastSegmentSetIntersectionFinder.lo GeometryNoder.lo \ IntersectionAdder.lo IntersectionFinderAdder.lo \ IteratedNoder.lo MCIndexNoder.lo \ MCIndexSegmentSetMutualIntersector.lo NodedSegmentString.lo \ NodingValidator.lo Octant.lo OrientedCoordinateArray.lo \ ScaledNoder.lo SegmentIntersectionDetector.lo SegmentNode.lo \ SegmentNodeList.lo SegmentString.lo SegmentStringUtil.lo \ SimpleNoder.lo SingleInteriorIntersectionFinder.lo libnoding_la_OBJECTS = $(am_libnoding_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libnoding_la_SOURCES) DIST_SOURCES = $(libnoding_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = snapround noinst_LTLIBRARIES = libnoding.la INCLUDES = -I$(top_srcdir)/include libnoding_la_SOURCES = \ BasicSegmentString.cpp \ FastNodingValidator.cpp \ FastSegmentSetIntersectionFinder.cpp \ GeometryNoder.cpp \ IntersectionAdder.cpp \ IntersectionFinderAdder.cpp \ IteratedNoder.cpp \ MCIndexNoder.cpp \ MCIndexSegmentSetMutualIntersector.cpp \ NodedSegmentString.cpp \ NodingValidator.cpp \ Octant.cpp \ OrientedCoordinateArray.cpp \ ScaledNoder.cpp \ SegmentIntersectionDetector.cpp \ SegmentNode.cpp \ SegmentNodeList.cpp \ SegmentString.cpp \ SegmentStringUtil.cpp \ SimpleNoder.cpp \ SingleInteriorIntersectionFinder.cpp libnoding_la_LIBADD = snapround/libsnapround.la all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/noding/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/noding/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libnoding.la: $(libnoding_la_OBJECTS) $(libnoding_la_DEPENDENCIES) $(CXXLINK) $(libnoding_la_OBJECTS) $(libnoding_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BasicSegmentString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FastNodingValidator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FastSegmentSetIntersectionFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntersectionAdder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntersectionFinderAdder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IteratedNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MCIndexNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MCIndexSegmentSetMutualIntersector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodedSegmentString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodingValidator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Octant.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OrientedCoordinateArray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ScaledNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentIntersectionDetector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentNodeList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentStringUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SingleInteriorIntersectionFinder.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/noding/NodedSegmentString.cpp0000644000175000017500000001035212206417146020615 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/NodedSegmentString.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos::noding const SegmentNodeList& NodedSegmentString::getNodeList() const { return nodeList; } SegmentNodeList& NodedSegmentString::getNodeList() { return nodeList; } /*static private*/ int NodedSegmentString::safeOctant(const Coordinate& p0, const Coordinate& p1) { if ( p0.equals2D(p1) ) return 0; return Octant::octant(p0, p1); } /*public*/ int NodedSegmentString::getSegmentOctant(unsigned int index) const { if (index >= size() - 1) return -1; return safeOctant(getCoordinate(index), getCoordinate(index+1)); //return Octant::octant(getCoordinate(index), getCoordinate(index+1)); } /*public*/ void NodedSegmentString::addIntersections(LineIntersector *li, unsigned int segmentIndex, int geomIndex) { for (int i=0, n=li->getIntersectionNum(); igetIntersection(intIndex); addIntersection(intPt, segmentIndex); } /*public*/ void NodedSegmentString::addIntersection(const Coordinate& intPt, unsigned int segmentIndex) { unsigned int normalizedSegmentIndex = segmentIndex; if ( segmentIndex > size()-2 ) { throw util::IllegalArgumentException("SegmentString::addIntersection: SegmentIndex out of range"); } // normalize the intersection point location unsigned int nextSegIndex = normalizedSegmentIndex + 1; if (nextSegIndex < size()) { const Coordinate& nextPt = pts->getAt(nextSegIndex); // Normalize segment index if intPt falls on vertex // The check for point equality is 2D only - // Z values are ignored if (intPt.equals2D(nextPt)) { normalizedSegmentIndex = nextSegIndex; } } /* * Add the intersection point to edge intersection list * (unless the node is already known) */ //SegmentNode *ei= nodeList.add(intPt, normalizedSegmentIndex); } /* public static */ void NodedSegmentString::getNodedSubstrings( const SegmentString::NonConstVect& segStrings, SegmentString::NonConstVect *resultEdgeList) { assert(resultEdgeList); for ( SegmentString::NonConstVect::const_iterator i=segStrings.begin(), iEnd=segStrings.end(); i != iEnd; ++i ) { NodedSegmentString* ss = dynamic_cast(*i); assert(ss); ss->getNodeList().addSplitEdges(resultEdgeList); } } /* public static */ SegmentString::NonConstVect* NodedSegmentString::getNodedSubstrings( const SegmentString::NonConstVect& segStrings) { SegmentString::NonConstVect* resultEdgelist = \ new SegmentString::NonConstVect(); getNodedSubstrings(segStrings, resultEdgelist); return resultEdgelist; } /* virtual public */ const geom::Coordinate& NodedSegmentString::getCoordinate(unsigned int i) const { return pts->getAt(i); } /* virtual public */ geom::CoordinateSequence* NodedSegmentString::getCoordinates() const { return pts; } /* virtual public */ bool NodedSegmentString::isClosed() const { return pts->getAt(0)==pts->getAt(size()-1); } /* public virtual */ std::ostream& NodedSegmentString::print(std::ostream& os) const { os << "NodedSegmentString: " << std::endl; os << " LINESTRING" << *(pts) << ";" << std::endl; os << " Nodes: " << nodeList.size() << std::endl; return os; } } // geos::noding } // geos geos-3.4.2/src/noding/NodingValidator.cpp0000644000175000017500000001204112206417146020133 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/NodingValidator.java rev. 1.6 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*public*/ void NodingValidator::checkValid() { checkEndPtVertexIntersections(); checkInteriorIntersections(); checkCollapses(); } /*private*/ void NodingValidator::checkCollapses() const { for (SegmentString::NonConstVect::const_iterator it = segStrings.begin(), itEnd = segStrings.end(); it != itEnd; ++it) { const SegmentString* ss = *it; checkCollapses(*ss); } } /* private */ void NodingValidator::checkCollapses(const SegmentString& ss) const { const CoordinateSequence& pts = *(ss.getCoordinates()); for (unsigned int i=0, n=pts.getSize()-2; igetAt(segIndex0); const Coordinate& p01 = e0.getCoordinates()->getAt(segIndex0 + 1); const Coordinate& p10 = e1.getCoordinates()->getAt(segIndex1); const Coordinate& p11 = e1.getCoordinates()->getAt(segIndex1 + 1); li.computeIntersection(p00, p01, p10, p11); if (li.hasIntersection()) { if (li.isProper() || hasInteriorIntersection(li, p00, p01) || hasInteriorIntersection(li, p10, p11)) { throw util::TopologyException( "found non-noded intersection at " + p00.toString() + "-" + p01.toString() + " and " + p10.toString() + "-" + p11.toString()); } } } /* private */ void NodingValidator::checkEndPtVertexIntersections() const { for (SegmentString::NonConstVect::const_iterator it = segStrings.begin(), itEnd = segStrings.end(); it != itEnd; ++it) { const SegmentString* ss = *it; const CoordinateSequence& pts = *(ss->getCoordinates()); checkEndPtVertexIntersections(pts[0], segStrings); checkEndPtVertexIntersections(pts[pts.size() - 1], segStrings); } } /* private */ void NodingValidator::checkEndPtVertexIntersections(const Coordinate& testPt, const SegmentString::NonConstVect& segStrings) const { for (SegmentString::NonConstVect::const_iterator it = segStrings.begin(), itEnd = segStrings.end(); it != itEnd; ++it) { const SegmentString* ss0 = *it; const CoordinateSequence& pts = *(ss0->getCoordinates()); for (unsigned int j=1, n=pts.size()-1; j #include #include #include #include //using namespace std; using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*public static*/ int Octant::octant(double dx, double dy) { if (dx == 0.0 && dy == 0.0) { std::ostringstream s; s<<"Cannot compute the octant for point ( "<= 0) { if (dy >= 0) { if (adx >= ady) return 0; else return 1; } else { // dy < 0 if (adx >= ady) return 7; else return 6; } } else { // dx < 0 if (dy >= 0) { if (adx >= ady) return 3; else return 2; } else { // dy < 0 if (adx >= ady) return 4; else return 5; } } } /*public static*/ int Octant::octant(const Coordinate& p0, const Coordinate& p1) { double dx = p1.x - p0.x; double dy = p1.y - p0.y; if (dx == 0.0 && dy == 0.0) { std::ostringstream s; s<<"Cannot compute the octant for "<<"two identical points "< * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/OrientedCoordinateArray.java rev. 1.1 (JTS-1.9) * **********************************************************************/ //#include //#include #include //#include //#include //#include #include //using namespace std; using namespace geos::geom; #ifdef _MSC_VER #pragma warning(disable : 4127) #endif namespace geos { namespace noding { // geos.noding /* private static */ bool OrientedCoordinateArray::orientation(const CoordinateSequence& pts) { return CoordinateSequence::increasingDirection(pts) == 1; } int OrientedCoordinateArray::compareTo(const OrientedCoordinateArray& oca) const { int comp = compareOriented(*pts, orientationVar, *oca.pts, oca.orientationVar); #if 0 // MD - testing only int oldComp = SegmentStringDissolver.ptsComp.compare(pts, oca.pts); if ((oldComp == 0 || comp == 0) && oldComp != comp) { System.out.println("bidir mismatch"); boolean orient1 = orientation(pts); boolean orient2 = orientation(oca.pts); int comp2 = compareOriented(pts, orientation, oca.pts, oca.orientation); int oldComp2 = SegmentStringDissolver.ptsComp.compare(pts, oca.pts); } #endif return comp; } /* private static */ int OrientedCoordinateArray::compareOriented(const geom::CoordinateSequence& pts1, bool orientation1, const geom::CoordinateSequence& pts2, bool orientation2) { int dir1 = orientation1 ? 1 : -1; int dir2 = orientation2 ? 1 : -1; int limit1 = orientation1 ? pts1.size() : -1; int limit2 = orientation2 ? pts2.size() : -1; int i1 = orientation1 ? 0 : pts1.size() - 1; int i2 = orientation2 ? 0 : pts2.size() - 1; //int comp = 0; // unused, but is in JTS ... while (true) { int compPt = pts1[i1].compareTo(pts2[i2]); if (compPt != 0) return compPt; i1 += dir1; i2 += dir2; bool done1 = i1 == limit1; bool done2 = i2 == limit2; if (done1 && ! done2) return -1; if (! done1 && done2) return 1; if (done1 && done2) return 0; } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/ScaledNoder.cpp0000644000175000017500000001137612206417146017244 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/ScaledNoder.java rev. 1.3 (JTS-1.7.1) * **********************************************************************/ #include #include // for apply and delete #include // for inheritance #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #include #endif using namespace geos::geom; namespace geos { namespace noding { // geos.noding namespace { #if GEOS_DEBUG > 1 void sqlPrint(const std::string& table, std::vector& ssv) { std::cerr << "CREATE TABLE \"" << table << "\" (id integer, geom geometry);" << std::endl; std::cerr << "COPY \"" << table << "\" FROM stdin;" << std::endl; for (size_t i=0, n=ssv.size(); igetCoordinates(); assert(cs); std::cerr << i << '\t' << "LINESTRING" << *cs << std::endl; } std::cerr << "\\." << std::endl; } #endif // GEOS_DEBUG > 1 } // anonym namespace class ScaledNoder::Scaler : public geom::CoordinateFilter { public: const ScaledNoder& sn; Scaler(const ScaledNoder&n): sn(n) { #if GEOS_DEBUG std::cerr << "Scaler: offsetX,Y: " << sn.offsetX << "," << sn.offsetY << " scaleFactor: " << sn.scaleFactor << std::endl; #endif } //void filter_ro(const geom::Coordinate* c) { assert(0); } void filter_rw(geom::Coordinate* c) const { c->x = util::round( ( c->x - sn.offsetX ) * sn.scaleFactor ); c->y = util::round( ( c->y - sn.offsetY ) * sn.scaleFactor ); } private: // Declare type as noncopyable Scaler(const Scaler& other); Scaler& operator=(const Scaler& rhs); }; class ScaledNoder::ReScaler: public geom::CoordinateFilter { public: const ScaledNoder& sn; ReScaler(const ScaledNoder&n): sn(n) { #if GEOS_DEBUG std::cerr << "ReScaler: offsetX,Y: " << sn.offsetX << "," << sn.offsetY << " scaleFactor: " << sn.scaleFactor << std::endl; #endif } void filter_ro(const geom::Coordinate* c) { ::geos::ignore_unused_variable_warning(c); assert(0); } void filter_rw(geom::Coordinate* c) const { c->x = c->x / sn.scaleFactor + sn.offsetX; c->y = c->y / sn.scaleFactor + sn.offsetY; } private: // Declare type as noncopyable ReScaler(const ReScaler& other); ReScaler& operator=(const ReScaler& rhs); }; /*private*/ void ScaledNoder::rescale(SegmentString::NonConstVect& segStrings) const { ReScaler rescaler(*this); for (SegmentString::NonConstVect::const_iterator i0=segStrings.begin(), i0End=segStrings.end(); i0!=i0End; ++i0) { SegmentString* ss=*i0; ss->getCoordinates()->apply_rw(&rescaler); } } /*private*/ void ScaledNoder::scale(SegmentString::NonConstVect& segStrings) const { Scaler scaler(*this); for (SegmentString::NonConstVect::const_iterator i0=segStrings.begin(), i0End=segStrings.end(); i0!=i0End; ++i0) { SegmentString* ss=*i0; CoordinateSequence* cs=ss->getCoordinates(); #ifndef NDEBUG size_t npts = cs->size(); #endif cs->apply_rw(&scaler); assert(cs->size() == npts); // Actually, we should be creating *new* // SegmentStrings here, but who's going // to delete them then ? And is it worth // the memory cost ? cs->removeRepeatedPoints(); } } ScaledNoder::~ScaledNoder() { for (std::vector::const_iterator it=newCoordSeq.begin(), end=newCoordSeq.end(); it != end; ++it) { delete *it; } } /*public*/ SegmentString::NonConstVect* ScaledNoder::getNodedSubstrings() const { SegmentString::NonConstVect* splitSS = noder.getNodedSubstrings(); #if GEOS_DEBUG > 1 sqlPrint("nodedSegStr", *splitSS); #endif if ( isScaled ) rescale(*splitSS); #if GEOS_DEBUG > 1 sqlPrint("scaledNodedSegStr", *splitSS); #endif return splitSS; } /*public*/ void ScaledNoder::computeNodes(SegmentString::NonConstVect* inputSegStr) { #if GEOS_DEBUG > 1 sqlPrint("inputSegStr", *inputSegStr); #endif if (isScaled) scale(*inputSegStr); #if GEOS_DEBUG > 1 sqlPrint("scaledInputSegStr", *inputSegStr); #endif noder.computeNodes(inputSegStr); } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/SegmentIntersectionDetector.cpp0000644000175000017500000000431012206417146022532 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include namespace geos { namespace noding { // geos::noding void SegmentIntersectionDetector:: processIntersections( noding::SegmentString * e0, int segIndex0, noding::SegmentString * e1, int segIndex1 ) { // don't bother intersecting a segment with itself if (e0 == e1 && segIndex0 == segIndex1) return; const geom::Coordinate & p00 = (*e0->getCoordinates())[ segIndex0 ]; const geom::Coordinate & p01 = (*e0->getCoordinates())[ segIndex0 + 1 ]; const geom::Coordinate & p10 = (*e1->getCoordinates())[ segIndex1 ]; const geom::Coordinate & p11 = (*e1->getCoordinates())[ segIndex1 + 1 ]; li->computeIntersection( p00, p01, p10, p11); if (li->hasIntersection()) { // record intersection info _hasIntersection = true; bool isProper = li->isProper(); if (isProper) _hasProperIntersection = true; else _hasNonProperIntersection = true; // If this is the kind of intersection we are searching for // OR no location has yet been recorded // save the location data bool saveLocation = true; if (findProper && !isProper) saveLocation = false; if (!intPt || saveLocation) { // record intersection location (approximate) intPt = &li->getIntersection(0); delete intSegments; // record intersecting segments intSegments = new geom::CoordinateArraySequence(); intSegments->add( p00, true); intSegments->add( p01, true); intSegments->add( p10, true); intSegments->add( p11, true); } } } } // geos::noding } // geos geos-3.4.2/src/noding/SegmentNode.cpp0000644000175000017500000000506312206417146017265 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentNode.java rev. 1.6 (JTS-1.9) * **********************************************************************/ #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*public*/ SegmentNode::SegmentNode(const NodedSegmentString& ss, const Coordinate& nCoord, unsigned int nSegmentIndex, int nSegmentOctant) : segString(ss), segmentOctant(nSegmentOctant), coord(nCoord), segmentIndex(nSegmentIndex) { // Number of points in NodedSegmentString is one-more number of segments assert(segmentIndex < segString.size() ); isInteriorVar = \ !coord.equals2D(segString.getCoordinate(segmentIndex)); } bool SegmentNode::isEndPoint(unsigned int maxSegmentIndex) const { if (segmentIndex == 0 && ! isInteriorVar) return true; if (segmentIndex == maxSegmentIndex) return true; return false; } /** * @return -1 this EdgeIntersection is located before the argument location * @return 0 this EdgeIntersection is at the argument location * @return 1 this EdgeIntersection is located after the argument location */ int SegmentNode::compareTo(const SegmentNode& other) { if (segmentIndex < other.segmentIndex) return -1; if (segmentIndex > other.segmentIndex) return 1; #if GEOS_DEBUG cerr << setprecision(17) << "compareTo: " << *this << ", " << other < testingSplitEdges; #endif // ensure that the list has entries for the first and last // point of the edge addEndpoints(); addCollapsedNodes(); // there should always be at least two entries in the list // since the endpoints are nodes iterator it=begin(); SegmentNode *eiPrev=*it; assert(eiPrev); it++; for(iterator itEnd=end(); it!=itEnd; ++it) { SegmentNode *ei=*it; assert(ei); if ( ! ei->compareTo(*eiPrev) ) continue; SegmentString *newEdge=createSplitEdge(eiPrev, ei); edgeList.push_back(newEdge); #if GEOS_DEBUG testingSplitEdges.push_back(newEdge); #endif eiPrev = ei; } #if GEOS_DEBUG std::cerr<<__FUNCTION__<<" finished, now checking correctness"<& splitEdges) { const CoordinateSequence *edgePts=edge.getCoordinates(); assert(edgePts); // check that first and last points of split edges // are same as endpoints of edge SegmentString *split0=splitEdges[0]; assert(split0); const Coordinate& pt0=split0->getCoordinate(0); if (!(pt0==edgePts->getAt(0))) throw util::GEOSException("bad split edge start point at " + pt0.toString()); SegmentString *splitn=splitEdges[splitEdges.size()-1]; assert(splitn); const CoordinateSequence *splitnPts=splitn->getCoordinates(); assert(splitnPts); const Coordinate &ptn=splitnPts->getAt(splitnPts->getSize()-1); if (!(ptn==edgePts->getAt(edgePts->getSize()-1))) throw util::GEOSException("bad split edge end point at " + ptn.toString()); } /*private*/ SegmentString* SegmentNodeList::createSplitEdge(SegmentNode *ei0, SegmentNode *ei1) { assert(ei0); assert(ei1); size_t npts = ei1->segmentIndex - ei0->segmentIndex + 2; const Coordinate &lastSegStartPt=edge.getCoordinate(ei1->segmentIndex); // if the last intersection point is not equal to the its // segment start pt, add it to the points list as well. // (This check is needed because the distance metric is not // totally reliable!) // The check for point equality is 2D only - Z values are ignored // Added check for npts being == 2 as in that case NOT using second point // would mean creating a SegmentString with a single point // FIXME: check with mbdavis about this, ie: is it a bug in the caller ? // bool useIntPt1 = npts == 2 || (ei1->isInterior() || ! ei1->coord.equals2D(lastSegStartPt)); if (! useIntPt1) { npts--; } CoordinateSequence *pts = new CoordinateArraySequence(npts); size_t ipt = 0; pts->setAt(ei0->coord, ipt++); for (size_t i=ei0->segmentIndex+1; i<=ei1->segmentIndex; i++) { pts->setAt(edge.getCoordinate(i),ipt++); } if (useIntPt1) pts->setAt(ei1->coord, ipt++); // SegmentString takes ownership of CoordinateList 'pts' SegmentString *ret = new NodedSegmentString(pts, edge.getData()); #if GEOS_DEBUG std::cerr<<" SegmentString created"<::const_iterator it = nlist.nodeMap.begin(), itEnd = nlist.nodeMap.end(); for(; it!=itEnd; it++) { SegmentNode *ei=*it; os << " " << *ei; } return os; } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/SegmentString.cpp0000644000175000017500000000275012206417146017646 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SegmentString.java r430 (JTS-1.12+) * **********************************************************************/ #include //#include //#include //#include //#include //#include //#include //#include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #include #include using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos.noding std::ostream& operator<< (std::ostream& os, const SegmentString& ss) { return ss.print(os); } std::ostream& SegmentString::print(std::ostream& os) const { os << "SegmentString" << std::endl; return os; } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/SegmentStringUtil.cpp0000644000175000017500000000114712206417146020503 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include namespace geos { namespace noding { // geos::noding } // geos::noding } // geos geos-3.4.2/src/noding/SimpleNoder.cpp0000644000175000017500000000361112206417146017273 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SimpleNoder.java rev. 1.7 (JTS-1.9) * **********************************************************************/ #include #include #include #include using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*private*/ void SimpleNoder::computeIntersects(SegmentString* e0, SegmentString* e1) { assert(segInt); // must provide a segment intersector! const CoordinateSequence* pts0 = e0->getCoordinates(); const CoordinateSequence* pts1 = e1->getCoordinates(); for (unsigned int i0=0, n0=pts0->getSize()-1; i0getSize()-1; i1processIntersections(e0, i0, e1, i1); } } } /*public*/ void SimpleNoder::computeNodes(SegmentString::NonConstVect* inputSegmentStrings) { nodedSegStrings=inputSegmentStrings; for (SegmentString::NonConstVect::const_iterator i0=inputSegmentStrings->begin(), i0End=inputSegmentStrings->end(); i0!=i0End; ++i0) { SegmentString* edge0 = *i0; for (SegmentString::NonConstVect::iterator i1=inputSegmentStrings->begin(), i1End=inputSegmentStrings->end(); i1!=i1End; ++i1) { SegmentString* edge1 = *i1; computeIntersects(edge0, edge1); } } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/SingleInteriorIntersectionFinder.cpp0000644000175000017500000000357412206417146023536 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/SingleInteriorIntersectionFinder.java rev. ??? (JTS-1.8) * **********************************************************************/ #include #include #include #include using namespace geos::geom; namespace geos { namespace noding { // geos.noding /*public (override) */ void SingleInteriorIntersectionFinder::processIntersections( SegmentString* e0, int segIndex0, SegmentString* e1, int segIndex1) { using geos::geom::Coordinate; // short-circuit if intersection already found if (hasIntersection()) return; // don't bother intersecting a segment with itself if (e0 == e1 && segIndex0 == segIndex1) return; const Coordinate& p00 = e0->getCoordinate(segIndex0); const Coordinate& p01 = e0->getCoordinate(segIndex0 + 1); const Coordinate& p10 = e1->getCoordinate(segIndex1); const Coordinate& p11 = e1->getCoordinate(segIndex1 + 1); li.computeIntersection(p00, p01, p10, p11); //if (li.hasIntersection() && li.isProper()) Debug.println(li); if (li.hasIntersection()) { if (li.isInteriorIntersection()) { intSegments.resize(4); intSegments[0] = p00; intSegments[1] = p01; intSegments[2] = p10; intSegments[3] = p11; interiorIntersection = li.getIntersection(0); } } } } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/snapround/0000755000175000017500000000000012206417234016354 5ustar frankiefrankiegeos-3.4.2/src/noding/snapround/HotPixel.cpp0000644000175000017500000001150212206417146020615 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/HotPixel.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #ifndef GEOS_INLINE # include "geos/noding/snapround/HotPixel.inl" #endif #include // for std::min and std::max #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos.noding namespace snapround { // geos.noding.snapround HotPixel::HotPixel(const Coordinate& newPt, double newScaleFactor, LineIntersector& newLi) : li(newLi), pt(newPt), originalPt(newPt), scaleFactor(newScaleFactor) { if (scaleFactor != 1.0) { assert( scaleFactor != 0 ); // or should it be an IllegalArgumentException ? pt.x=scale(pt.x); pt.y=scale(pt.y); } initCorners(pt); } const Envelope& HotPixel::getSafeEnvelope() const { static const double SAFE_ENV_EXPANSION_FACTOR = 0.75; if (safeEnv.get() == NULL) { double safeTolerance = SAFE_ENV_EXPANSION_FACTOR / scaleFactor; safeEnv = auto_ptr(new Envelope(originalPt.x - safeTolerance, originalPt.x + safeTolerance, originalPt.y - safeTolerance, originalPt.y + safeTolerance )); } return *safeEnv; } /*private*/ void HotPixel::initCorners(const Coordinate& pt) { double tolerance = 0.5; minx = pt.x - tolerance; maxx = pt.x + tolerance; miny = pt.y - tolerance; maxy = pt.y + tolerance; corner.resize(4); corner[0] = Coordinate(maxx, maxy); corner[1] = Coordinate(minx, maxy); corner[2] = Coordinate(minx, miny); corner[3] = Coordinate(maxx, miny); } bool HotPixel::intersects(const Coordinate& p0, const Coordinate& p1) const { if (scaleFactor == 1.0) return intersectsScaled(p0, p1); copyScaled(p0, p0Scaled); copyScaled(p1, p1Scaled); return intersectsScaled(p0Scaled, p1Scaled); } /* private */ bool HotPixel::intersectsScaled(const Coordinate& p0, const Coordinate& p1) const { double const segMinx = (std::min)(p0.x, p1.x); double const segMaxx = (std::max)(p0.x, p1.x); double const segMiny = (std::min)(p0.y, p1.y); double const segMaxy = (std::max)(p0.y, p1.y); bool isOutsidePixelEnv = maxx < segMinx || minx > segMaxx || maxy < segMiny || miny > segMaxy; if (isOutsidePixelEnv) return false; bool intersects = intersectsToleranceSquare(p0, p1); // Found bad envelope test assert(!(isOutsidePixelEnv && intersects)); return intersects; } /*private*/ bool HotPixel::intersectsToleranceSquare(const Coordinate& p0, const Coordinate& p1) const { bool intersectsLeft = false; bool intersectsBottom = false; li.computeIntersection(p0, p1, corner[0], corner[1]); if (li.isProper()) return true; li.computeIntersection(p0, p1, corner[1], corner[2]); if (li.isProper()) return true; if (li.hasIntersection()) intersectsLeft = true; li.computeIntersection(p0, p1, corner[2], corner[3]); if (li.isProper()) return true; if (li.hasIntersection()) intersectsBottom = true; li.computeIntersection(p0, p1, corner[3], corner[0]); if (li.isProper()) return true; if (intersectsLeft && intersectsBottom) return true; if (p0.equals2D(pt)) return true; if (p1.equals2D(pt)) return true; return false; } /*private*/ bool HotPixel::intersectsPixelClosure(const Coordinate& p0, const Coordinate& p1) { li.computeIntersection(p0, p1, corner[0], corner[1]); if (li.hasIntersection()) return true; li.computeIntersection(p0, p1, corner[1], corner[2]); if (li.hasIntersection()) return true; li.computeIntersection(p0, p1, corner[2], corner[3]); if (li.hasIntersection()) return true; li.computeIntersection(p0, p1, corner[3], corner[0]); if (li.hasIntersection()) return true; return false; } bool HotPixel::addSnappedNode(NodedSegmentString& segStr, size_t segIndex) { const Coordinate& p0 = segStr.getCoordinate(segIndex); const Coordinate& p1 = segStr.getCoordinate(segIndex + 1); if (intersects(p0, p1)) { //cout << "snapped: " << snapPt << endl; segStr.addIntersection(getCoordinate(), segIndex); return true; } return false; } } // namespace geos.noding.snapround } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/snapround/MCIndexPointSnapper.cpp0000644000175000017500000000701612206417146022720 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/MCIndexPointSnapper.java r486 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include using namespace geos::index; using namespace geos::geom; namespace geos { namespace noding { // geos.noding namespace snapround { // geos.noding.snapround class HotPixelSnapAction: public index::chain::MonotoneChainSelectAction { public: HotPixelSnapAction(HotPixel& nHotPixel, SegmentString* nParentEdge, unsigned int nVertexIndex) : MonotoneChainSelectAction(), hotPixel(nHotPixel), parentEdge(nParentEdge), vertexIndex(nVertexIndex), isNodeAddedVar(false) {} bool isNodeAdded() const { return isNodeAddedVar; } void select(chain::MonotoneChain& mc, unsigned int startIndex) { // This is casting away 'constness'! NodedSegmentString& ss = *(static_cast(mc.getContext())); // don't snap a vertex to itself if ( parentEdge ) { if (&ss == parentEdge && startIndex == vertexIndex) return; } //isNodeAddedVar = SimpleSnapRounder::addSnappedNode(hotPixel, ss, startIndex); isNodeAddedVar = hotPixel.addSnappedNode(ss, startIndex); } void select(const LineSegment& ls) { ::geos::ignore_unused_variable_warning(ls); } private: HotPixel& hotPixel; SegmentString* parentEdge; unsigned int vertexIndex; bool isNodeAddedVar; // Declare type as noncopyable HotPixelSnapAction(const HotPixelSnapAction& other); HotPixelSnapAction& operator=(const HotPixelSnapAction& rhs); }; class MCIndexPointSnapperVisitor: public ItemVisitor { public: MCIndexPointSnapperVisitor(const Envelope& nPixelEnv, HotPixelSnapAction& nAction) : pixelEnv(nPixelEnv), action(nAction) {} virtual ~MCIndexPointSnapperVisitor() {} void visitItem(void* item) { chain::MonotoneChain& testChain = *(static_cast(item)); testChain.select(pixelEnv, action); } private: const Envelope& pixelEnv; chain::MonotoneChainSelectAction& action; // Declare type as noncopyable MCIndexPointSnapperVisitor(const MCIndexPointSnapperVisitor& other); MCIndexPointSnapperVisitor& operator=(const MCIndexPointSnapperVisitor& rhs); }; /* public */ bool MCIndexPointSnapper::snap(HotPixel& hotPixel, SegmentString* parentEdge, unsigned int vertexIndex) { const Envelope& pixelEnv = hotPixel.getSafeEnvelope(); HotPixelSnapAction hotPixelSnapAction(hotPixel, parentEdge, vertexIndex); MCIndexPointSnapperVisitor visitor(pixelEnv, hotPixelSnapAction); index.query(&pixelEnv, visitor); return hotPixelSnapAction.isNodeAdded(); } } // namespace geos.noding.snapround } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/snapround/MCIndexSnapRounder.cpp0000644000175000017500000000735212206417146022541 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/MCIndexSnapRounder.java r486 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include #include // std::mem_fun, std::bind1st #include // std::for_each #include using namespace std; using namespace geos::geom; namespace geos { namespace noding { // geos.noding namespace snapround { // geos.noding.snapround /*private*/ void MCIndexSnapRounder::findInteriorIntersections(MCIndexNoder& noder, NodedSegmentString::NonConstVect* segStrings, vector& intersections) { IntersectionFinderAdder intFinderAdder(li, intersections); noder.setSegmentIntersector(&intFinderAdder); noder.computeNodes(segStrings); } /* private */ void MCIndexSnapRounder::computeIntersectionSnaps(vector& snapPts) { for (vector::iterator it=snapPts.begin(), itEnd=snapPts.end(); it!=itEnd; ++it) { Coordinate& snapPt = *it; HotPixel hotPixel(snapPt, scaleFactor, li); pointSnapper->snap(hotPixel); } } /*private*/ void MCIndexSnapRounder::computeVertexSnaps(NodedSegmentString* e) { CoordinateSequence& pts0 = *(e->getCoordinates()); for (unsigned int i=0, n=pts0.size()-1; isnap(hotPixel, e, i); // if a node is created for a vertex, that vertex must be noded too if (isNodeAdded) { e->addIntersection(pts0[i], i); } } } /*public*/ void MCIndexSnapRounder::computeVertexSnaps(SegmentString::NonConstVect& edges) { SegmentString::NonConstVect::iterator i=edges.begin(), e=edges.end(); for (; i!=e; ++i) { NodedSegmentString* edge0 = dynamic_cast(*i); assert(edge0); computeVertexSnaps(edge0); } } /*private*/ void MCIndexSnapRounder::snapRound(MCIndexNoder& noder, SegmentString::NonConstVect* segStrings) { vector intersections; findInteriorIntersections(noder, segStrings, intersections); computeIntersectionSnaps(intersections); computeVertexSnaps(*segStrings); } /*public*/ void MCIndexSnapRounder::computeNodes(SegmentString::NonConstVect* inputSegmentStrings) { nodedSegStrings = inputSegmentStrings; MCIndexNoder noder; pointSnapper.release(); // let it leak ?! pointSnapper.reset(new MCIndexPointSnapper(noder.getIndex())); snapRound(noder, inputSegmentStrings); // testing purposes only - remove in final version assert(nodedSegStrings == inputSegmentStrings); //checkCorrectness(*inputSegmentStrings); } /*private*/ void MCIndexSnapRounder::checkCorrectness( SegmentString::NonConstVect& inputSegmentStrings) { auto_ptr resultSegStrings( NodedSegmentString::getNodedSubstrings(inputSegmentStrings) ); NodingValidator nv(*(resultSegStrings.get())); try { nv.checkValid(); } catch (const std::exception &ex) { std::cerr << ex.what() << std::endl; throw; } } } // namespace geos.noding.snapround } // namespace geos.noding } // namespace geos geos-3.4.2/src/noding/snapround/Makefile.am0000644000175000017500000000047512206417146020420 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libsnapround.la INCLUDES = -I$(top_srcdir)/include libsnapround_la_SOURCES = \ HotPixel.cpp \ MCIndexPointSnapper.cpp \ MCIndexSnapRounder.cpp \ SimpleSnapRounder.cpp libsnapround_la_LIBADD = geos-3.4.2/src/noding/snapround/Makefile.in0000644000175000017500000005346612206417164020441 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/noding/snapround DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsnapround_la_DEPENDENCIES = am_libsnapround_la_OBJECTS = HotPixel.lo MCIndexPointSnapper.lo \ MCIndexSnapRounder.lo SimpleSnapRounder.lo libsnapround_la_OBJECTS = $(am_libsnapround_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libsnapround_la_SOURCES) DIST_SOURCES = $(libsnapround_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libsnapround.la INCLUDES = -I$(top_srcdir)/include libsnapround_la_SOURCES = \ HotPixel.cpp \ MCIndexPointSnapper.cpp \ MCIndexSnapRounder.cpp \ SimpleSnapRounder.cpp libsnapround_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/noding/snapround/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/noding/snapround/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libsnapround.la: $(libsnapround_la_OBJECTS) $(libsnapround_la_DEPENDENCIES) $(CXXLINK) $(libsnapround_la_OBJECTS) $(libsnapround_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HotPixel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MCIndexPointSnapper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MCIndexSnapRounder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleSnapRounder.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/noding/snapround/SimpleSnapRounder.cpp0000644000175000017500000001323512206417146022500 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: noding/snapround/SimpleSnapRounder.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace noding { // geos.noding namespace snapround { // geos.noding.snapround /*public*/ SimpleSnapRounder::SimpleSnapRounder(const geom::PrecisionModel& newPm) : pm(newPm), li(&newPm), scaleFactor(newPm.getScale()) { } /*public*/ std::vector* SimpleSnapRounder::getNodedSubstrings() const { std::vector *ret = new std::vector(); NodedSegmentString::getNodedSubstrings(nodedSegStrings->begin(), nodedSegStrings->end(), ret); return ret; } /*public*/ void SimpleSnapRounder::computeNodes( std::vector* inputSegmentStrings) { nodedSegStrings = inputSegmentStrings; snapRound(inputSegmentStrings, li); // testing purposes only - remove in final version assert(nodedSegStrings == inputSegmentStrings); checkCorrectness(*inputSegmentStrings); } /*private*/ void SimpleSnapRounder::checkCorrectness( SegmentString::NonConstVect& inputSegmentStrings) { SegmentString::NonConstVect resultSegStrings; NodedSegmentString::getNodedSubstrings( inputSegmentStrings.begin(), inputSegmentStrings.end(), &resultSegStrings ); NodingValidator nv(resultSegStrings); try { nv.checkValid(); } catch (const std::exception &ex) { for ( SegmentString::NonConstVect::iterator i=resultSegStrings.begin(), e=resultSegStrings.end(); i!=e; ++i ) { delete *i; } std::cerr << ex.what() << std::endl; throw; } for ( SegmentString::NonConstVect::iterator i=resultSegStrings.begin(), e=resultSegStrings.end(); i!=e; ++i ) { delete *i; } } /*private*/ void SimpleSnapRounder::computeSnaps(const SegmentString::NonConstVect& segStrings, vector& snapPts) { for (SegmentString::NonConstVect::const_iterator i=segStrings.begin(), iEnd=segStrings.end(); i!=iEnd; ++i) { NodedSegmentString* ss = dynamic_cast(*i); computeSnaps(ss, snapPts); } } /*private*/ void SimpleSnapRounder::computeSnaps(NodedSegmentString* ss, vector& snapPts) { for (vector::iterator it=snapPts.begin(), itEnd=snapPts.end(); it!=itEnd; ++it) { const Coordinate& snapPt = *it; HotPixel hotPixel(snapPt, scaleFactor, li); for (int i=0, n=ss->size()-1; igetCoordinates(); const CoordinateSequence* pts1 = e1->getCoordinates(); for (unsigned int i0=0, n0=pts0->getSize()-1; i0getAt(i0); HotPixel hotPixel(p0, scaleFactor, li); for (unsigned int i1=1, n1=pts1->getSize()-1; i1getAt(i1)<<" "<getAt(i1 + 1)<addIntersection(p0, i0); } } } } /*public*/ void SimpleSnapRounder::computeVertexSnaps(const SegmentString::NonConstVect& edges) { for (SegmentString::NonConstVect::const_iterator i0=edges.begin(), i0End=edges.end(); i0!=i0End; ++i0) { NodedSegmentString* edge0 = dynamic_cast(*i0); assert(edge0); for (SegmentString::NonConstVect::const_iterator i1=edges.begin(), i1End=edges.end(); i1!=i1End; ++i1) { NodedSegmentString* edge1 = dynamic_cast(*i1); assert(edge1); computeVertexSnaps(edge0, edge1); } } } /*private*/ void SimpleSnapRounder::snapRound(SegmentString::NonConstVect* segStrings, LineIntersector& li) { assert(segStrings); vector intersections; findInteriorIntersections(*segStrings, li, intersections); computeSnaps(*segStrings, intersections); computeVertexSnaps(*segStrings); } /*private*/ void SimpleSnapRounder::findInteriorIntersections( SegmentString::NonConstVect& segStrings, LineIntersector& li, vector& ret) { IntersectionFinderAdder intFinderAdder(li, ret); MCIndexNoder noder; noder.setSegmentIntersector(&intFinderAdder); noder.computeNodes(&segStrings); //intFinderAdder.getInteriorIntersections(); } } // namespace geos.noding.snapround } // namespace geos.noding } // namespace geos geos-3.4.2/src/operation/0000755000175000017500000000000012206417234015065 5ustar frankiefrankiegeos-3.4.2/src/operation/GeometryGraphOperation.cpp0000644000175000017500000000570512206417145022237 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/GeometryGraphOperation.java rev. 1.18 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation //LineIntersector* GeometryGraphOperation::li=new LineIntersector(); GeometryGraphOperation::GeometryGraphOperation(const Geometry *g0, const Geometry *g1) : arg(2) { const PrecisionModel* pm0 = g0->getPrecisionModel(); assert(pm0); const PrecisionModel* pm1 = g1->getPrecisionModel(); assert(pm1); // use the most precise model for the result if (pm0->compareTo(pm1) >= 0) setComputationPrecision(pm0); else setComputationPrecision(pm1); arg[0]=new GeometryGraph(0, g0, algorithm::BoundaryNodeRule::getBoundaryOGCSFS()); arg[1]=new GeometryGraph(1, g1, algorithm::BoundaryNodeRule::getBoundaryOGCSFS()); } GeometryGraphOperation::GeometryGraphOperation(const Geometry *g0, const Geometry *g1, const algorithm::BoundaryNodeRule& boundaryNodeRule) : arg(2) { const PrecisionModel* pm0 = g0->getPrecisionModel(); assert(pm0); const PrecisionModel* pm1 = g1->getPrecisionModel(); assert(pm1); // use the most precise model for the result if (pm0->compareTo(pm1) >= 0) setComputationPrecision(pm0); else setComputationPrecision(pm1); arg[0]=new GeometryGraph(0, g0, boundaryNodeRule); arg[1]=new GeometryGraph(1, g1, boundaryNodeRule); } GeometryGraphOperation::GeometryGraphOperation(const Geometry *g0): arg(1) { const PrecisionModel* pm0 = g0->getPrecisionModel(); assert(pm0); setComputationPrecision(pm0); arg[0]=new GeometryGraph(0, g0); } const Geometry* GeometryGraphOperation::getArgGeometry(unsigned int i) const { assert(igetGeometry(); } /*protected*/ void GeometryGraphOperation::setComputationPrecision(const PrecisionModel* pm) { assert(pm); resultPrecisionModel=pm; li.setPrecisionModel(resultPrecisionModel); } GeometryGraphOperation::~GeometryGraphOperation() { for(unsigned int i=0; i * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/IsSimpleOp.java rev. 1.22 (JTS-1.10) * **********************************************************************/ #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geomgraph::index; using namespace geos::geom; namespace geos { namespace operation { // geos.operation // This is supposedly a private of IsSimpleOp... class EndpointInfo { public: Coordinate pt; bool isClosed; int degree; EndpointInfo(const geom::Coordinate& newPt); const Coordinate& getCoordinate() const { return pt; } void addEndpoint(bool newIsClosed) { degree++; isClosed |= newIsClosed; } }; EndpointInfo::EndpointInfo(const Coordinate& newPt) { pt=newPt; isClosed=false; degree=0; } // ----------------------------------------------------- /*public*/ IsSimpleOp::IsSimpleOp() : isClosedEndpointsInInterior(true), geom(0), nonSimpleLocation() {} /*public*/ IsSimpleOp::IsSimpleOp(const Geometry& g) : isClosedEndpointsInInterior(true), geom(&g), nonSimpleLocation() {} /*public*/ IsSimpleOp::IsSimpleOp(const Geometry& g, const BoundaryNodeRule& boundaryNodeRule) : isClosedEndpointsInInterior( ! boundaryNodeRule.isInBoundary(2) ), geom(&g), nonSimpleLocation() {} /*public*/ bool IsSimpleOp::isSimple() { nonSimpleLocation.reset(); if ( dynamic_cast(geom) ) return isSimpleLinearGeometry(geom); if ( dynamic_cast(geom) ) return isSimpleLinearGeometry(geom); const MultiPoint* mp = dynamic_cast(geom); if ( mp ) return isSimpleMultiPoint(*mp); // all other geometry types are simple by definition return true; } /*public*/ bool IsSimpleOp::isSimple(const LineString *geom) { return isSimpleLinearGeometry(geom); } /*public*/ bool IsSimpleOp::isSimple(const MultiLineString *geom) { return isSimpleLinearGeometry(geom); } /*public*/ bool IsSimpleOp::isSimple(const MultiPoint *mp) { return isSimpleMultiPoint(*mp); } /*private*/ bool IsSimpleOp::isSimpleMultiPoint(const MultiPoint& mp) { if (mp.isEmpty()) return true; set points; for (std::size_t i=0, n=mp.getNumGeometries(); i(mp.getGeometryN(i)); assert(pt); const Coordinate *p=pt->getCoordinate(); if (points.find(p) != points.end()) { nonSimpleLocation.reset(new Coordinate(*p)); return false; } points.insert(p); } return true; } bool IsSimpleOp::isSimpleLinearGeometry(const Geometry *geom) { if (geom->isEmpty()) return true; GeometryGraph graph(0,geom); LineIntersector li; std::auto_ptr si (graph.computeSelfNodes(&li,true)); // if no self-intersection, must be simple if (!si->hasIntersection()) return true; if (si->hasProperIntersection()) { nonSimpleLocation.reset( new Coordinate(si->getProperIntersectionPoint()) ); return false; } if (hasNonEndpointIntersection(graph)) return false; if ( isClosedEndpointsInInterior ) { if (hasClosedEndpointIntersection(graph)) return false; } return true; } /*private*/ bool IsSimpleOp::hasNonEndpointIntersection(GeometryGraph &graph) { vector *edges=graph.getEdges(); for (vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; int maxSegmentIndex=e->getMaximumSegmentIndex(); EdgeIntersectionList &eiL=e->getEdgeIntersectionList(); for ( EdgeIntersectionList::iterator eiIt=eiL.begin(), eiEnd=eiL.end(); eiIt!=eiEnd; ++eiIt ) { EdgeIntersection *ei=*eiIt; if (!ei->isEndPoint(maxSegmentIndex)) { nonSimpleLocation.reset( new Coordinate(ei->getCoordinate()) ); return true; } } } return false; } /*private*/ bool IsSimpleOp::hasClosedEndpointIntersection(GeometryGraph &graph) { map endPoints; vector *edges=graph.getEdges(); for (vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; //int maxSegmentIndex=e->getMaximumSegmentIndex(); bool isClosed=e->isClosed(); const Coordinate *p0=&e->getCoordinate(0); addEndpoint(endPoints,p0,isClosed); const Coordinate *p1=&e->getCoordinate(e->getNumPoints()-1); addEndpoint(endPoints,p1,isClosed); } map::iterator it=endPoints.begin(); for (; it!=endPoints.end(); ++it) { EndpointInfo *eiInfo=it->second; if (eiInfo->isClosed && eiInfo->degree!=2) { nonSimpleLocation.reset( new Coordinate( eiInfo->getCoordinate() ) ); it=endPoints.begin(); for (; it!=endPoints.end(); ++it) { EndpointInfo *ep=it->second; delete ep; } return true; } } it=endPoints.begin(); for (; it!=endPoints.end(); ++it) { EndpointInfo *ep=it->second; delete ep; } return false; } /*private*/ void IsSimpleOp::addEndpoint( map&endPoints, const Coordinate *p,bool isClosed) { map::iterator it=endPoints.find(p); EndpointInfo *eiInfo; if (it==endPoints.end()) { eiInfo=NULL; } else { eiInfo=it->second; } if (eiInfo==NULL) { eiInfo=new EndpointInfo(*p); endPoints[p]=eiInfo; } eiInfo->addEndpoint(isClosed); } } // namespace geos::operation } // namespace geos geos-3.4.2/src/operation/Makefile.am0000644000175000017500000000132312206417145017121 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ buffer \ distance \ linemerge \ overlay \ polygonize \ predicate \ relate \ union \ sharedpaths \ valid noinst_LTLIBRARIES = liboperation.la INCLUDES = -I$(top_srcdir)/include liboperation_la_SOURCES = \ GeometryGraphOperation.cpp \ IsSimpleOp.cpp liboperation_la_LIBADD = \ buffer/libopbuffer.la \ distance/libopdistance.la \ linemerge/liboplinemerge.la \ overlay/libopoverlay.la \ polygonize/liboppolygonize.la \ predicate/liboppredicate.la \ relate/liboprelate.la \ union/libopunion.la \ valid/libopvalid.la \ sharedpaths/libopsharedpaths.la geos-3.4.2/src/operation/Makefile.in0000644000175000017500000005437312206417164017150 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboperation_la_DEPENDENCIES = buffer/libopbuffer.la \ distance/libopdistance.la linemerge/liboplinemerge.la \ overlay/libopoverlay.la polygonize/liboppolygonize.la \ predicate/liboppredicate.la relate/liboprelate.la \ union/libopunion.la valid/libopvalid.la \ sharedpaths/libopsharedpaths.la am_liboperation_la_OBJECTS = GeometryGraphOperation.lo IsSimpleOp.lo liboperation_la_OBJECTS = $(am_liboperation_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liboperation_la_SOURCES) DIST_SOURCES = $(liboperation_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ buffer \ distance \ linemerge \ overlay \ polygonize \ predicate \ relate \ union \ sharedpaths \ valid noinst_LTLIBRARIES = liboperation.la INCLUDES = -I$(top_srcdir)/include liboperation_la_SOURCES = \ GeometryGraphOperation.cpp \ IsSimpleOp.cpp liboperation_la_LIBADD = \ buffer/libopbuffer.la \ distance/libopdistance.la \ linemerge/liboplinemerge.la \ overlay/libopoverlay.la \ polygonize/liboppolygonize.la \ predicate/liboppredicate.la \ relate/liboprelate.la \ union/libopunion.la \ valid/libopvalid.la \ sharedpaths/libopsharedpaths.la all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liboperation.la: $(liboperation_la_OBJECTS) $(liboperation_la_DEPENDENCIES) $(CXXLINK) $(liboperation_la_OBJECTS) $(liboperation_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryGraphOperation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IsSimpleOp.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/buffer/0000755000175000017500000000000012206417235016337 5ustar frankiefrankiegeos-3.4.2/src/operation/buffer/BufferBuilder.cpp0000644000175000017500000005242112206417145021567 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2008-2010 Safe Software Inc. * Copyright (C) 2005-2007 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferBuilder.java r378 (JTS-1.12) * **********************************************************************/ #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 // for debugging #include #include #include #include #include #include #include #include // Debug single sided buffer //#define GEOS_DEBUG_SSB 1 #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifndef JTS_DEBUG #define JTS_DEBUG 0 #endif //using namespace std; using namespace geos::geom; using namespace geos::geomgraph; using namespace geos::noding; using namespace geos::algorithm; using namespace geos::operation::overlay; using namespace geos::operation::linemerge; namespace { // Debug routine template std::auto_ptr convertSegStrings(const GeometryFactory* fact, Iterator it, Iterator et) { std::vector lines; while(it != et) { const SegmentString* ss = *it; LineString* line = fact->createLineString(ss->getCoordinates()->clone()); lines.push_back(line); ++it; } return std::auto_ptr(fact->buildGeometry(lines)); } } namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer #if PROFILE static Profiler *profiler = Profiler::instance(); #endif int BufferBuilder::depthDelta(const Label& label) { int lLoc=label.getLocation(0, Position::LEFT); int rLoc=label.getLocation(0, Position::RIGHT); if (lLoc== Location::INTERIOR && rLoc== Location::EXTERIOR) return 1; else if (lLoc== Location::EXTERIOR && rLoc== Location::INTERIOR) return -1; return 0; } //static CGAlgorithms rCGA; //CGAlgorithms *BufferBuilder::cga=&rCGA; BufferBuilder::~BufferBuilder() { delete li; // could be NULL delete intersectionAdder; } /*public*/ Geometry* BufferBuilder::bufferLineSingleSided( const Geometry* g, double distance, bool leftSide ) { // Returns the line used to create a single-sided buffer. // Input requirement: Must be a LineString. const LineString* l = dynamic_cast< const LineString* >( g ); if ( !l ) throw util::IllegalArgumentException("BufferBuilder::bufferLineSingleSided only accept linestrings"); // Nothing to do for a distance of zero if ( distance == 0 ) return g->clone(); // Get geometry factory and precision model. const PrecisionModel* precisionModel = workingPrecisionModel; if ( !precisionModel ) precisionModel = l->getPrecisionModel(); assert( precisionModel ); assert( l ); geomFact = l->getFactory(); // First, generate the two-sided buffer using a butt-cap. BufferParameters modParams = bufParams; modParams.setEndCapStyle(BufferParameters::CAP_FLAT); modParams.setSingleSided(false); // ignore parameter for areal-only geometries Geometry* buf = 0; // This is a (temp?) hack to workaround the fact that // BufferBuilder BufferParamaters are immutable after // construction, while we want to force the end cap // style to FLAT for single-sided buffering { BufferBuilder tmp(modParams); buf = tmp.buffer( l, distance ); } // Create MultiLineStrings from this polygon. Geometry* bufLineString = buf->getBoundary(); #ifdef GEOS_DEBUG_SSB std::cerr << "input|" << *l << std::endl; std::cerr << "buffer|" << *bufLineString << std::endl; #endif // Then, get the raw (i.e. unnoded) single sided offset curve. OffsetCurveBuilder curveBuilder( precisionModel, modParams ); std::vector< CoordinateSequence* > lineList; std::auto_ptr< CoordinateSequence > coords ( g->getCoordinates() ); curveBuilder.getSingleSidedLineCurve( coords.get(), distance, lineList, leftSide, !leftSide ); coords.reset(); // Create a SegmentString from these coordinates. SegmentString::NonConstVect curveList; for ( unsigned int i = 0; i < lineList.size(); ++i ) { CoordinateSequence* seq = lineList[i]; // SegmentString takes ownership of CoordinateSequence SegmentString* ss = new NodedSegmentString(seq, NULL); curveList.push_back( ss ); } lineList.clear(); // Node these SegmentStrings. Noder* noder = getNoder( precisionModel ); noder->computeNodes( &curveList ); SegmentString::NonConstVect* nodedEdges = noder->getNodedSubstrings(); // Create a geometry out of the noded substrings. std::vector< Geometry* >* singleSidedNodedEdges = new std::vector< Geometry * >(); singleSidedNodedEdges->reserve(nodedEdges->size()); for ( unsigned int i = 0, n = nodedEdges->size(); i < n; ++i ) { SegmentString* ss = ( *nodedEdges )[i]; Geometry* tmp = geomFact->createLineString( ss->getCoordinates()->clone() ); delete ss; singleSidedNodedEdges->push_back( tmp ); } delete nodedEdges; for (size_t i=0, n=curveList.size(); icreateMultiLineString( singleSidedNodedEdges ); #ifdef GEOS_DEBUG_SSB std::cerr << "edges|" << *singleSided << std::endl; #endif // Use the boolean operation intersect to obtain the line segments lying // on both the butt-cap buffer and this multi-line. //Geometry* intersectedLines = singleSided->intersection( bufLineString ); // NOTE: we use Snapped overlay because the actual buffer boundary might // diverge from original offset curves due to the addition of // intersections with caps and joins curves using geos::operation::overlay::snap::SnapOverlayOp; Geometry* intersectedLines = SnapOverlayOp::overlayOp(*singleSided, *bufLineString, OverlayOp::opINTERSECTION).release(); #ifdef GEOS_DEBUG_SSB std::cerr << "intersection" << "|" << *intersectedLines << std::endl; #endif // Merge result lines together. LineMerger lineMerge; lineMerge.add( intersectedLines ); std::auto_ptr< std::vector< LineString* > > mergedLines ( lineMerge.getMergedLineStrings() ); // Convert the result into a std::vector< Geometry* >. std::vector< Geometry* >* mergedLinesGeom = new std::vector< Geometry* >(); const Coordinate& startPoint = l->getCoordinatesRO()->front(); const Coordinate& endPoint = l->getCoordinatesRO()->back(); while( !mergedLines->empty() ) { // Remove end points if they are a part of the original line to be // buffered. CoordinateSequence::AutoPtr coords(mergedLines->back()->getCoordinates()); if ( NULL != coords.get() ) { // Use 98% of the buffer width as the point-distance requirement - this // is to ensure that the point that is "distance" +/- epsilon is not // included. // // Let's try and estimate a more accurate bound instead of just assuming // 98%. With 98%, the episilon grows as the buffer distance grows, // so that at large distance, artifacts may skip through this filter // Let the length of the line play a factor in the distance, which is still // going to be bounded by 98%. Take 10% of the length of the line from the buffer distance // to try and minimize any artifacts. const double ptDistAllowance = (std::max)(distance - l->getLength()*0.1, distance * 0.98); // Use 102% of the buffer width as the line-length requirement - this // is to ensure that line segments that is length "distance" +/- // epsilon is removed. const double segLengthAllowance = 1.02 * distance; // Clean up the front of the list. // Loop until the line's end is not inside the buffer width from // the startPoint. while ( coords->size() > 1 && coords->front().distance( startPoint ) < ptDistAllowance ) { // Record the end segment length. double segLength = coords->front().distance( ( *coords )[1] ); // Stop looping if there are no more points, or if the segment // length is larger than the buffer width. if ( coords->size() <= 1 || segLength > segLengthAllowance ) { break; } // If the first point is less than buffer width away from the // reference point, then delete the point. coords->deleteAt( 0 ); } while ( coords->size() > 1 && coords->front().distance( endPoint ) < ptDistAllowance ) { double segLength = coords->front().distance( ( *coords )[1] ); if ( coords->size() <= 1 || segLength > segLengthAllowance ) { break; } coords->deleteAt( 0 ); } // Clean up the back of the list. while ( coords->size() > 1 && coords->back().distance( startPoint ) < ptDistAllowance ) { double segLength = coords->back().distance( ( *coords )[coords->size()-2] ); if ( coords->size() <= 1 || segLength > segLengthAllowance ) { break; } coords->deleteAt( coords->size()-1 ); } while ( coords->size() > 1 && coords->back().distance( endPoint ) < ptDistAllowance ) { double segLength = coords->back().distance( ( *coords )[coords->size()-2] ); if ( coords->size() <= 1 || segLength > segLengthAllowance ) { break; } coords->deleteAt( coords->size()-1 ); } // Add the coordinates to the resultant line string. if ( coords->size() > 1 ) { mergedLinesGeom->push_back( geomFact->createLineString( coords.release() ) ); } } geomFact->destroyGeometry( mergedLines->back() ); mergedLines->pop_back(); } // Clean up. if ( noder != workingNoder ) delete noder; geomFact->destroyGeometry( buf ); geomFact->destroyGeometry( bufLineString ); geomFact->destroyGeometry( singleSided ); geomFact->destroyGeometry( intersectedLines ); if ( mergedLinesGeom->size() > 1 ) { return geomFact->createMultiLineString( mergedLinesGeom ); } else if ( mergedLinesGeom->size() == 1 ) { Geometry* single = (*mergedLinesGeom)[0]; delete mergedLinesGeom; return single; } else { delete mergedLinesGeom; return geomFact->createLineString(); } } /*public*/ Geometry* BufferBuilder::buffer(const Geometry *g, double distance) // throw(GEOSException *) { const PrecisionModel *precisionModel=workingPrecisionModel; if (precisionModel==NULL) precisionModel=g->getPrecisionModel(); assert(precisionModel); assert(g); // factory must be the same as the one used by the input geomFact=g->getFactory(); { // This scope is here to force release of resources owned by // OffsetCurveSetBuilder when we're doing with it OffsetCurveBuilder curveBuilder(precisionModel, bufParams); OffsetCurveSetBuilder curveSetBuilder(*g, distance, curveBuilder); GEOS_CHECK_FOR_INTERRUPTS(); std::vector& bufferSegStrList=curveSetBuilder.getCurves(); #if GEOS_DEBUG std::cerr << "OffsetCurveSetBuilder got " << bufferSegStrList.size() << " curves" << std::endl; #endif // short-circuit test if (bufferSegStrList.size()<=0) { return createEmptyResultGeometry(); } #if GEOS_DEBUG std::cerr<<"BufferBuilder::buffer computing NodedEdges"< 1 std::cerr << std::endl << edgeList << std::endl; #endif Geometry* resultGeom=NULL; std::auto_ptr< std::vector > resultPolyList; std::vector subgraphList; try { PlanarGraph graph(OverlayNodeFactory::instance()); graph.addEdges(edgeList.getEdges()); GEOS_CHECK_FOR_INTERRUPTS(); createSubgraphs(&graph, subgraphList); #if GEOS_DEBUG std::cerr<<"Created "< 1 for (size_t i=0, n=subgraphList.size(); isize() << " polygons" << std::endl; #if GEOS_DEBUG > 1 for (size_t i=0, n=resultPolyList->size(); itoString() << std::endl; #endif #endif // just in case ... if ( resultPolyList->empty() ) return createEmptyResultGeometry(); // resultPolyList ownership transferred here resultGeom=geomFact->buildGeometry(resultPolyList.release()); } catch (const util::GEOSException& /* exc */) { // In case they're still around for (size_t i=0, n=subgraphList.size(); isetPrecisionModel(pm); assert(intersectionAdder!=NULL); } else { li = new LineIntersector(pm); intersectionAdder = new IntersectionAdder(*li); } MCIndexNoder* noder = new MCIndexNoder(intersectionAdder); #if 0 /* CoordinateArraySequence.cpp:84: * virtual const geos::Coordinate& geos::CoordinateArraySequence::getAt(size_t) const: * Assertion `possize()' failed. */ //Noder* noder = new snapround::SimpleSnapRounder(*pm); Noder* noder = new IteratedNoder(pm); Noder noder = new SimpleSnapRounder(pm); Noder noder = new MCIndexSnapRounder(pm); Noder noder = new ScaledNoder( new MCIndexSnapRounder(new PrecisionModel(1.0)), pm.getScale()); #endif return noder; } /* private */ void BufferBuilder::computeNodedEdges(SegmentString::NonConstVect& bufferSegStrList, const PrecisionModel *precisionModel) // throw(GEOSException) { Noder* noder = getNoder( precisionModel ); #if JTS_DEBUG geos::io::WKTWriter wktWriter; wktWriter.setTrim(true); std::cerr << "before noding: " << wktWriter.write( convertSegStrings(geomFact, bufferSegStrList.begin(), bufferSegStrList.end()).get() ) << std::endl; #endif noder->computeNodes(&bufferSegStrList); SegmentString::NonConstVect* nodedSegStrings = \ noder->getNodedSubstrings(); #if JTS_DEBUG std::cerr << "after noding: " << wktWriter.write( convertSegStrings(geomFact, bufferSegStrList.begin(), bufferSegStrList.end()).get() ) << std::endl; #endif for (SegmentString::NonConstVect::iterator i=nodedSegStrings->begin(), e=nodedSegStrings->end(); i!=e; ++i) { SegmentString* segStr = *i; const Label* oldLabel = static_cast(segStr->getData()); CoordinateSequence* cs = CoordinateSequence::removeRepeatedPoints(segStr->getCoordinates()); delete segStr; if ( cs->size() < 2 ) { // don't insert collapsed edges // we need to take care of the memory here as cs is a new sequence delete cs; continue; } // Edge takes ownership of the CoordinateSequence Edge* edge = new Edge(cs, *oldLabel); // will take care of the Edge ownership insertUniqueEdge(edge); } delete nodedSegStrings; if ( noder != workingNoder ) delete noder; } /*private*/ void BufferBuilder::insertUniqueEdge(Edge *e) { // MD 8 Oct 03 speed up identical edge lookup // fast lookup Edge *existingEdge = edgeList.findEqualEdge(e); // If an identical edge already exists, simply update its label if (existingEdge != NULL) { Label& existingLabel = existingEdge->getLabel(); Label labelToMerge = e->getLabel(); // check if new edge is in reverse direction to existing edge // if so, must flip the label before merging it if (! existingEdge->isPointwiseEqual(e)) { labelToMerge = e->getLabel(); labelToMerge.flip(); } existingLabel.merge(labelToMerge); // compute new depth delta of sum of edges int mergeDelta = depthDelta(labelToMerge); int existingDelta = existingEdge->getDepthDelta(); int newDelta = existingDelta + mergeDelta; existingEdge->setDepthDelta(newDelta); // we have memory release responsibility delete e; } else { // no matching existing edge was found // add this new edge to the list of edges in this graph edgeList.add(e); e->setDepthDelta(depthDelta(e->getLabel())); } } bool BufferSubgraphGT(BufferSubgraph *first, BufferSubgraph *second) { if (first->compareTo(second)>0) return true; else return false; } /*private*/ void BufferBuilder::createSubgraphs(PlanarGraph *graph, std::vector& subgraphList) { std::vector nodes; graph->getNodes(nodes); for (size_t i=0, n=nodes.size(); iisVisited()) { BufferSubgraph *subgraph=new BufferSubgraph(); subgraph->create(node); subgraphList.push_back(subgraph); } } /* * Sort the subgraphs in descending order of their rightmost coordinate * This ensures that when the Polygons for the subgraphs are built, * subgraphs for shells will have been built before the subgraphs for * any holes they contain */ std::sort(subgraphList.begin(), subgraphList.end(), BufferSubgraphGT); } /*private*/ void BufferBuilder::buildSubgraphs(const std::vector& subgraphList, PolygonBuilder& polyBuilder) { #if GEOS_DEBUG std::cerr << __FUNCTION__ << " got " << subgraphList.size() << " subgraphs" << std::endl; #endif std::vector processedGraphs; for (size_t i=0, n=subgraphList.size(); igetRightmostCoordinate(); assert(p); #if GEOS_DEBUG std::cerr << " " << i << ") Subgraph[" << subgraph << "]" << std::endl; std::cerr << " rightmost Coordinate " << *p; #endif SubgraphDepthLocater locater(&processedGraphs); #if GEOS_DEBUG std::cerr << " after SubgraphDepthLocater processedGraphs contain " << processedGraphs.size() << " elements" << std::endl; #endif int outsideDepth=locater.getDepth(*p); #if GEOS_DEBUG std::cerr << " Depth of rightmost coordinate: " << outsideDepth << std::endl; #endif subgraph->computeDepth(outsideDepth); subgraph->findResultEdges(); #if GEOS_DEBUG std::cerr << " after computeDepth and findResultEdges subgraph contain:" << std::endl << " " << subgraph->getDirectedEdges()->size() << " DirecteEdges " << std::endl << " " << subgraph->getNodes()->size() << " Nodes " << std::endl; #endif processedGraphs.push_back(subgraph); #if GEOS_DEBUG std::cerr << " added " << subgraph << " to processedGraphs, new size is " << processedGraphs.size() << std::endl; #endif polyBuilder.add(subgraph->getDirectedEdges(), subgraph->getNodes()); } } /*private*/ geom::Geometry* BufferBuilder::createEmptyResultGeometry() const { geom::Geometry* emptyGeom = geomFact->createPolygon(NULL, NULL); return emptyGeom; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/BufferInputLineSimplifier.cpp0000644000175000017500000001402412206417145024131 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferInputLineSimplifier.java r320 (JTS-1.12) * **********************************************************************/ #include #include // for inlines #include // for constructing the return #include // for use #include #include #include //#include using namespace geos::algorithm; // CGAlgorithms using namespace geos::geom; //using namespace geos::geomgraph; // DirectedEdge, Position namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer BufferInputLineSimplifier::BufferInputLineSimplifier( const geom::CoordinateSequence& input) : inputLine(input), angleOrientation(CGAlgorithms::COUNTERCLOCKWISE) {} /*public static*/ std::auto_ptr BufferInputLineSimplifier::simplify(const geom::CoordinateSequence& inputLine, double distanceTol) { BufferInputLineSimplifier simp(inputLine); return simp.simplify(distanceTol); } /* public */ std::auto_ptr BufferInputLineSimplifier::simplify(double nDistanceTol) { distanceTol = fabs(nDistanceTol); if (nDistanceTol < 0) angleOrientation = CGAlgorithms::CLOCKWISE; // rely on fact that boolean array is filled with false value static const int startValue = INIT; isDeleted.assign(inputLine.size(), startValue); bool isChanged = false; do { isChanged = deleteShallowConcavities(); } while (isChanged); return collapseLine(); } /* private */ bool BufferInputLineSimplifier::deleteShallowConcavities() { /** * Do not simplify end line segments of the line string. * This ensures that end caps are generated consistently. */ unsigned int index = 1; unsigned int midIndex = findNextNonDeletedIndex(index); unsigned int lastIndex = findNextNonDeletedIndex(midIndex); bool isChanged = false; while (lastIndex < inputLine.size()) { // test triple for shallow concavity bool isMiddleVertexDeleted = false; if (isDeletable(index, midIndex, lastIndex, distanceTol)) { isDeleted[midIndex] = DELETE; isMiddleVertexDeleted = true; isChanged = true; } // move simplification window forward if (isMiddleVertexDeleted) index = lastIndex; else index = midIndex; midIndex = findNextNonDeletedIndex(index); lastIndex = findNextNonDeletedIndex(midIndex); } return isChanged; } /* private */ unsigned int BufferInputLineSimplifier::findNextNonDeletedIndex(unsigned int index) const { std::size_t next = index + 1; const std::size_t len = inputLine.size(); while (next < len && isDeleted[next] == DELETE) next++; return static_cast(next); } /* private */ std::auto_ptr BufferInputLineSimplifier::collapseLine() const { std::auto_ptr coordList( new CoordinateArraySequence()); for (size_t i=0, n=inputLine.size(); iadd(inputLine[i], false); } return coordList; } /* private */ bool BufferInputLineSimplifier::isDeletable(int i0, int i1, int i2, double distanceTol) const { const Coordinate& p0 = inputLine[i0]; const Coordinate& p1 = inputLine[i1]; const Coordinate& p2 = inputLine[i2]; if (! isConcave(p0, p1, p2)) return false; if (! isShallow(p0, p1, p2, distanceTol)) return false; // MD - don't use this heuristic - it's too restricting // if (p0.distance(p2) > distanceTol) return false; return isShallowSampled(p0, p1, i0, i2, distanceTol); } /* private */ bool BufferInputLineSimplifier::isShallowConcavity(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2, double distanceTol) const { int orientation = CGAlgorithms::computeOrientation(p0, p1, p2); bool isAngleToSimplify = (orientation == angleOrientation); if (! isAngleToSimplify) return false; double dist = CGAlgorithms::distancePointLine(p1, p0, p2); return dist < distanceTol; } /* private */ bool BufferInputLineSimplifier::isShallowSampled(const geom::Coordinate& p0, const geom::Coordinate& p2, int i0, int i2, double distanceTol) const { // check every n'th point to see if it is within tolerance int inc = (i2 - i0) / NUM_PTS_TO_CHECK; if (inc <= 0) inc = 1; for (int i = i0; i < i2; i += inc) { if (! isShallow(p0, p2, inputLine[i], distanceTol)) return false; } return true; } /* private */ bool BufferInputLineSimplifier::isShallow(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2, double distanceTol) const { double dist = CGAlgorithms::distancePointLine(p1, p0, p2); return dist < distanceTol; } /* private */ bool BufferInputLineSimplifier::isConcave(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Coordinate& p2) const { int orientation = CGAlgorithms::computeOrientation(p0, p1, p2); bool isConcave = (orientation == angleOrientation); return isConcave; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/BufferOp.cpp0000644000175000017500000001661112206417145020560 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2005-2007 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/BufferOp.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include //FIXME: for temporary use, see other FIXME in file #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif //#define PROFILE 1 using namespace geos::noding; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer #if PROFILE static Profiler *profiler = Profiler::instance(); #endif namespace { double OLDprecisionScaleFactor(const Geometry *g, double distance, int maxPrecisionDigits) { const Envelope *env=g->getEnvelopeInternal(); double envSize=(std::max)(env->getHeight(), env->getWidth()); double expandByDistance=distance > 0.0 ? distance : 0.0; double bufEnvSize=envSize + 2 * expandByDistance; // the smallest power of 10 greater than the buffer envelope int bufEnvLog10=(int) (std::log(bufEnvSize) / std::log(10.0) + 1.0); int minUnitLog10=bufEnvLog10 - maxPrecisionDigits; // scale factor is inverse of min Unit size, so flip sign of exponent double scaleFactor=std::pow(10.0,-minUnitLog10); return scaleFactor; } } // anonymous namespace /*private*/ double BufferOp::precisionScaleFactor(const Geometry *g, double distance, int maxPrecisionDigits) { const Envelope *env=g->getEnvelopeInternal(); double envMax = std::max( std::max(fabs(env->getMaxX()), fabs(env->getMinX())), std::max(fabs(env->getMaxY()), fabs(env->getMinY())) ); double expandByDistance = distance > 0.0 ? distance : 0.0; double bufEnvMax = envMax + 2 * expandByDistance; // the smallest power of 10 greater than the buffer envelope int bufEnvPrecisionDigits = (int) (std::log(bufEnvMax) / std::log(10.0) + 1.0); int minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits; double scaleFactor = std::pow(10.0, minUnitLog10); return scaleFactor; } /*public static*/ Geometry* BufferOp::bufferOp(const Geometry *g, double distance, int quadrantSegments, int nEndCapStyle) { BufferOp bufOp(g); bufOp.setQuadrantSegments(quadrantSegments); bufOp.setEndCapStyle(nEndCapStyle); return bufOp.getResultGeometry(distance); } /*public*/ Geometry* BufferOp::getResultGeometry(double nDistance) { distance=nDistance; computeGeometry(); return resultGeometry; } /*private*/ void BufferOp::computeGeometry() { #if GEOS_DEBUG std::cerr<<"BufferOp::computeGeometry: trying with original precision"<getFactory()->getPrecisionModel()); if ( argPM.getType() == PrecisionModel::FIXED ) bufferFixedPrecision(argPM); else bufferReducedPrecision(); } /*private*/ void BufferOp::bufferReducedPrecision() { // try and compute with decreasing precision, // up to a min, to avoid gross results // (not in JTS, see http://trac.osgeo.org/geos/ticket/605) #define MIN_PRECISION_DIGITS 6 for (int precDigits=MAX_PRECISION_DIGITS; precDigits >= MIN_PRECISION_DIGITS; precDigits--) { #if GEOS_DEBUG std::cerr<<"BufferOp::computeGeometry: trying with precDigits "<toString()<toString()<getNode(); //Label *label=de->getLabel(); // right side of line returned by finder is on the outside de->setEdgeDepths(Position::RIGHT, outsideDepth); copySymDepths(de); //computeNodeDepth(n, de); computeDepths(de); } void BufferSubgraph::computeNodeDepth(Node *n) // throw(TopologyException *) { // find a visited dirEdge to start at DirectedEdge *startEdge=NULL; assert(dynamic_cast(n->getEdges())); DirectedEdgeStar *ees=static_cast(n->getEdges()); EdgeEndStar::iterator endIt=ees->end(); EdgeEndStar::iterator it=ees->begin(); for(; it!=endIt; ++it) { assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); if (de->isVisited() || de->getSym()->isVisited()) { startEdge=de; break; } } // MD - testing Result: breaks algorithm //if (startEdge==null) return; // only compute string append if assertion would fail if (startEdge == NULL) { throw util::TopologyException( "unable to find edge to compute depths at", n->getCoordinate()); } ees->computeDepths(startEdge); // copy depths to sym edges for(it=ees->begin(); it!=endIt; ++it) { assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); de->setVisited(true); copySymDepths(de); } } /*private*/ void BufferSubgraph::copySymDepths(DirectedEdge *de) { #if GEOS_DEBUG cerr << "copySymDepths: " << de->getDepth(Position::LEFT) << ", " << de->getDepth(Position::RIGHT) << endl; #endif DirectedEdge *sym=de->getSym(); sym->setDepth(Position::LEFT, de->getDepth(Position::RIGHT)); sym->setDepth(Position::RIGHT, de->getDepth(Position::LEFT)); } /*public*/ void BufferSubgraph::findResultEdges() { #if GEOS_DEBUG cerr<<"BufferSubgraph::findResultEdges got "< - handle negative depths #if GEOS_DEBUG cerr << " dirEdge "<printEdge() << endl << " depth right: " << de->getDepth(Position::RIGHT) << endl << " depth left: " << de->getDepth(Position::LEFT) << endl << " interiorAreaEdge: " << de->isInteriorAreaEdge()<getDepth(Position::RIGHT)>=1 && de->getDepth(Position::LEFT)<=0 && !de->isInteriorAreaEdge()) { de->setInResult(true); #if GEOS_DEBUG cerr<<" IN RESULT"<xrightMostCoord->x) { return -1; } if (rightMostCoord->x>graph->rightMostCoord->x) { return 1; } return 0; } /*private*/ void BufferSubgraph::computeDepths(DirectedEdge *startEdge) { set nodesVisited; list nodeQueue; // Used to be a vector Node *startNode=startEdge->getNode(); nodeQueue.push_back(startNode); //nodesVisited.push_back(startNode); nodesVisited.insert(startNode); startEdge->setVisited(true); while (! nodeQueue.empty()) { //System.out.println(nodes.size() + " queue: " + nodeQueue.size()); Node *n=nodeQueue.front(); // [0]; //nodeQueue.erase(nodeQueue.begin()); nodeQueue.pop_front(); nodesVisited.insert(n); // compute depths around node, starting at this edge since it has depths assigned computeNodeDepth(n); // add all adjacent nodes to process queue, // unless the node has been visited already EdgeEndStar *ees=n->getEdges(); EdgeEndStar::iterator endIt=ees->end(); EdgeEndStar::iterator it=ees->begin(); for(; it!=endIt; ++it) { assert(dynamic_cast(*it)); DirectedEdge *de=static_cast(*it); DirectedEdge *sym=de->getSym(); if (sym->isVisited()) continue; Node *adjNode=sym->getNode(); //if (! contains(nodesVisited,adjNode)) if(nodesVisited.insert(adjNode).second) { nodeQueue.push_back(adjNode); //nodesVisited.insert(adjNode); } } } } /*private*/ bool BufferSubgraph::contains(set&nodeSet, Node *node) { //bool result=false; if ( nodeSet.find(node) != nodeSet.end() ) return true; return false; } /*public*/ Envelope * BufferSubgraph::getEnvelope() { if (env == NULL) { env = new Envelope(); std::size_t const size = dirEdgeList.size(); for(std::size_t i=0; igetEdge()->getCoordinates(); std::size_t const n = pts->getSize()-1; for (std::size_t j=0; jexpandToInclude(pts->getAt(j)); } } } return env; } std::ostream& operator<< (std::ostream& os, const BufferSubgraph& bs) { os << "BufferSubgraph[" << &bs << "] " << bs.nodes.size() << " nodes, " << bs.dirEdgeList.size() << " directed edges" << std::endl; for (size_t i=0, n=bs.nodes.size(); iprintEdge() << std::endl; } return os; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/Makefile.am0000644000175000017500000000072712206417145020401 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopbuffer.la INCLUDES = -I$(top_srcdir)/include libopbuffer_la_SOURCES = \ BufferBuilder.cpp \ BufferInputLineSimplifier.cpp \ BufferOp.cpp \ BufferParameters.cpp \ BufferSubgraph.cpp \ OffsetCurveBuilder.cpp \ OffsetCurveSetBuilder.cpp \ OffsetSegmentGenerator.cpp \ RightmostEdgeFinder.cpp \ SubgraphDepthLocater.cpp \ $(NULL) libopbuffer_la_LIBADD = geos-3.4.2/src/operation/buffer/Makefile.in0000644000175000017500000005512212206417164020412 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/buffer DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopbuffer_la_DEPENDENCIES = am_libopbuffer_la_OBJECTS = BufferBuilder.lo \ BufferInputLineSimplifier.lo BufferOp.lo BufferParameters.lo \ BufferSubgraph.lo OffsetCurveBuilder.lo \ OffsetCurveSetBuilder.lo OffsetSegmentGenerator.lo \ RightmostEdgeFinder.lo SubgraphDepthLocater.lo libopbuffer_la_OBJECTS = $(am_libopbuffer_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopbuffer_la_SOURCES) DIST_SOURCES = $(libopbuffer_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopbuffer.la INCLUDES = -I$(top_srcdir)/include libopbuffer_la_SOURCES = \ BufferBuilder.cpp \ BufferInputLineSimplifier.cpp \ BufferOp.cpp \ BufferParameters.cpp \ BufferSubgraph.cpp \ OffsetCurveBuilder.cpp \ OffsetCurveSetBuilder.cpp \ OffsetSegmentGenerator.cpp \ RightmostEdgeFinder.cpp \ SubgraphDepthLocater.cpp \ $(NULL) libopbuffer_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/buffer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/buffer/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopbuffer.la: $(libopbuffer_la_OBJECTS) $(libopbuffer_la_DEPENDENCIES) $(CXXLINK) $(libopbuffer_la_OBJECTS) $(libopbuffer_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferInputLineSimplifier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferParameters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferSubgraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OffsetCurveBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OffsetCurveSetBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OffsetSegmentGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RightmostEdgeFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SubgraphDepthLocater.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/buffer/OffsetCurveBuilder.cpp0000644000175000017500000002221212206417145022604 0ustar frankiefrankie/********************************************************************** * * GEOS-Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2011 Sandro Santilli * Copyright (C) 2005 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetCurveBuilder.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geomgraph; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /*private data*/ const double OffsetCurveBuilder::SIMPLIFY_FACTOR = 100.0; /*public*/ void OffsetCurveBuilder::getLineCurve(const CoordinateSequence *inputPts, double nDistance, vector& lineList) { distance = nDistance; // a zero or (non-singlesided) negative width buffer of a line/point is empty if (distance == 0.0) return; if (distance < 0.0 && ! bufParams.isSingleSided()) return; double posDistance = std::abs(distance); std::auto_ptr segGen = getSegGen(posDistance); if (inputPts->getSize() <= 1) { computePointCurve(inputPts->getAt(0), *segGen); } else { if (bufParams.isSingleSided()) { bool isRightSide = distance < 0.0; computeSingleSidedBufferCurve(*inputPts, isRightSide, *segGen); } else { computeLineBufferCurve(*inputPts, *segGen); } } segGen->getCoordinates(lineList); } /* private */ void OffsetCurveBuilder::computePointCurve(const Coordinate& pt, OffsetSegmentGenerator& segGen) { switch (bufParams.getEndCapStyle()) { case BufferParameters::CAP_ROUND: segGen.createCircle(pt, distance); break; case BufferParameters::CAP_SQUARE: segGen.createSquare(pt, distance); break; default: // otherwise curve is empty (e.g. for a butt cap); break; } } /*public*/ void OffsetCurveBuilder::getSingleSidedLineCurve(const CoordinateSequence* inputPts, double distance, vector& lineList, bool leftSide, bool rightSide) { // A zero or negative width buffer of a line/point is empty. if ( distance <= 0.0 ) return ; if ( inputPts->getSize() < 2 ) { // No cap, so just return. return ; } double distTol = simplifyTolerance(distance); std::auto_ptr segGen = getSegGen(distance); if ( leftSide ) { //--------- compute points for left side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp1_ = BufferInputLineSimplifier::simplify( *inputPts, distTol ); const CoordinateSequence& simp1 = *simp1_; int n1 = simp1.size() - 1; if ( ! n1 ) throw util::IllegalArgumentException("Cannot get offset of single-vertex line"); segGen->initSideSegments(simp1[0], simp1[1], Position::LEFT); segGen->addFirstSegment(); for (int i = 2; i <= n1; ++i) { segGen->addNextSegment(simp1[i], true); } segGen->addLastSegment(); } if ( rightSide ) { //---------- compute points for right side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp2_ = BufferInputLineSimplifier::simplify( *inputPts, -distTol ); const CoordinateSequence& simp2 = *simp2_; int n2 = simp2.size() - 1; if ( ! n2 ) throw util::IllegalArgumentException("Cannot get offset of single-vertex line"); segGen->initSideSegments(simp2[n2], simp2[n2-1], Position::LEFT); segGen->addFirstSegment(); for (int i = n2-2; i >= 0; --i) { segGen->addNextSegment(simp2[i], true); } segGen->addLastSegment(); } segGen->getCoordinates(lineList); } /*public*/ void OffsetCurveBuilder::getRingCurve(const CoordinateSequence *inputPts, int side, double nDistance, vector& lineList) { distance = nDistance; // optimize creating ring for zero distance if (distance == 0.0) { lineList.push_back(inputPts->clone()); return; } if (inputPts->getSize() <= 2) { getLineCurve(inputPts, distance, lineList); return; } std::auto_ptr segGen = getSegGen(std::abs(distance)); computeRingBufferCurve(*inputPts, side, *segGen); segGen->getCoordinates(lineList); } /* private */ double OffsetCurveBuilder::simplifyTolerance(double bufDistance) { return bufDistance / SIMPLIFY_FACTOR; } /*private*/ void OffsetCurveBuilder::computeLineBufferCurve(const CoordinateSequence& inputPts, OffsetSegmentGenerator& segGen) { double distTol = simplifyTolerance(distance); //--------- compute points for left side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp1_ = BufferInputLineSimplifier::simplify(inputPts, distTol); const CoordinateSequence& simp1 = *simp1_; int n1 = simp1.size() - 1; segGen.initSideSegments(simp1[0], simp1[1], Position::LEFT); for (int i = 2; i <= n1; ++i) { segGen.addNextSegment(simp1[i], true); } segGen.addLastSegment(); // add line cap for end of line segGen.addLineEndCap(simp1[n1-1], simp1[n1]); //---------- compute points for right side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp2_ = BufferInputLineSimplifier::simplify(inputPts, -distTol); const CoordinateSequence& simp2 = *simp2_; int n2 = simp2.size() - 1; segGen.initSideSegments(simp2[n2], simp2[n2-1], Position::LEFT); for (int i = n2-2; i >= 0; --i) { segGen.addNextSegment(simp2[i], true); } segGen.addLastSegment(); // add line cap for start of line segGen.addLineEndCap(simp2[1], simp2[0]); segGen.closeRing(); } /*private*/ void OffsetCurveBuilder::computeRingBufferCurve(const CoordinateSequence& inputPts, int side, OffsetSegmentGenerator& segGen) { // simplify input line to improve performance double distTol = simplifyTolerance(distance); // ensure that correct side is simplified if (side == Position::RIGHT) distTol = -distTol; std::auto_ptr simp_ = BufferInputLineSimplifier::simplify(inputPts, distTol); const CoordinateSequence& simp = *simp_; int n = simp.size()-1; segGen.initSideSegments(simp[n-1], simp[0], side); for (int i = 1; i <= n; i++) { bool addStartPoint = i != 1; segGen.addNextSegment(simp[i], addStartPoint); } segGen.closeRing(); } /*private*/ void OffsetCurveBuilder::computeSingleSidedBufferCurve( const CoordinateSequence& inputPts, bool isRightSide, OffsetSegmentGenerator& segGen) { double distTol = simplifyTolerance(distance); if ( isRightSide ) { // add original line segGen.addSegments(inputPts, true); //---------- compute points for right side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp2_ = BufferInputLineSimplifier::simplify(inputPts, -distTol); const CoordinateSequence& simp2 = *simp2_; int n2 = simp2.size() - 1; segGen.initSideSegments(simp2[n2], simp2[n2-1], Position::LEFT); segGen.addFirstSegment(); for (int i = n2-2; i >= 0; --i) { segGen.addNextSegment(simp2[i], true); } } else { // add original line segGen.addSegments(inputPts, false); //--------- compute points for left side of line // Simplify the appropriate side of the line before generating std::auto_ptr simp1_ = BufferInputLineSimplifier::simplify(inputPts, distTol); const CoordinateSequence& simp1 = *simp1_; int n1 = simp1.size() - 1; segGen.initSideSegments(simp1[0], simp1[1], Position::LEFT); segGen.addFirstSegment(); for (int i = 2; i <= n1; ++i) { segGen.addNextSegment(simp1[i], true); } } segGen.addLastSegment(); segGen.closeRing(); } /*private*/ std::auto_ptr OffsetCurveBuilder::getSegGen(double dist) { std::auto_ptr osg( new OffsetSegmentGenerator(precisionModel, bufParams, dist) ); return osg; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/OffsetCurveSetBuilder.cpp0000644000175000017500000002367612206417145023277 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetCurveSetBuilder.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif //using namespace geos::operation::overlay; using namespace geos::geom; using namespace geos::noding; // SegmentString using namespace geos::geomgraph; // Label, Position using namespace geos::algorithm; // CGAlgorithms namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer OffsetCurveSetBuilder::OffsetCurveSetBuilder(const Geometry& newInputGeom, double newDistance, OffsetCurveBuilder& newCurveBuilder): inputGeom(newInputGeom), distance(newDistance), curveBuilder(newCurveBuilder), curveList() { } OffsetCurveSetBuilder::~OffsetCurveSetBuilder() { for (size_t i=0, n=curveList.size(); i& OffsetCurveSetBuilder::getCurves() { add(inputGeom); return curveList; } /*public*/ void OffsetCurveSetBuilder::addCurves(const std::vector& lineList, int leftLoc, int rightLoc) { for (size_t i=0, n=lineList.size(); i(&g); if ( poly ) { addPolygon(poly); return; } const LineString *line = dynamic_cast(&g); if ( line ) { addLineString(line); return; } const Point *point = dynamic_cast(&g); if ( point ) { addPoint(point); return; } const GeometryCollection *collection = dynamic_cast(&g); if ( collection ) { addCollection(collection); return; } std::string out=typeid(g).name(); throw util::UnsupportedOperationException("GeometryGraph::add(Geometry &): unknown geometry type: "+out); } /*private*/ void OffsetCurveSetBuilder::addCollection(const GeometryCollection *gc) { for (int i=0, n=gc->getNumGeometries(); igetGeometryN(i); add(*g); } } /*private*/ void OffsetCurveSetBuilder::addPoint(const Point *p) { if (distance <= 0.0) return; const CoordinateSequence *coord=p->getCoordinatesRO(); std::vector lineList; curveBuilder.getLineCurve(coord, distance, lineList); addCurves(lineList, Location::EXTERIOR, Location::INTERIOR); //delete lineList; } /*private*/ void OffsetCurveSetBuilder::addLineString(const LineString *line) { if (distance <= 0.0 && ! curveBuilder.getBufferParameters().isSingleSided()) { return; } #if GEOS_DEBUG std::cerr<<__FUNCTION__<<": "<toString()< coord(CoordinateSequence::removeRepeatedPoints(line->getCoordinatesRO())); #if GEOS_DEBUG std::cerr<<" After coordinate removal: "<toString()< lineList; curveBuilder.getLineCurve(coord.get(), distance, lineList); addCurves(lineList, Location::EXTERIOR, Location::INTERIOR); } /*private*/ void OffsetCurveSetBuilder::addPolygon(const Polygon *p) { double offsetDistance=distance; int offsetSide=Position::LEFT; if (distance < 0.0) { offsetDistance = -distance; offsetSide = Position::RIGHT; } // FIXME: avoid the C-style cast const LinearRing *shell=(const LinearRing *)p->getExteriorRing(); // optimization - don't bother computing buffer // if the polygon would be completely eroded if (distance < 0.0 && isErodedCompletely(shell, distance)) { #if GEOS_DEBUG std::cerr<<__FUNCTION__<<": polygon is eroded completely "<getCoordinatesRO()); if (distance <= 0.0 && shellCoord->size() < 3) { delete shellCoord; return; } addPolygonRing( shellCoord, offsetDistance, offsetSide, Location::EXTERIOR, Location::INTERIOR); delete shellCoord; for (size_t i=0, n=p->getNumInteriorRing(); igetInteriorRingN(i); assert(dynamic_cast(hls)); const LinearRing *hole=static_cast(hls); // optimization - don't bother computing buffer for this hole // if the hole would be completely covered if (distance > 0.0 && isErodedCompletely(hole, -distance)) { continue; } CoordinateSequence *holeCoord = CoordinateSequence::removeRepeatedPoints(hole->getCoordinatesRO()); // Holes are topologically labelled opposite to the shell, // since the interior of the polygon lies on their opposite // side (on the left, if the hole is oriented CCW) addPolygonRing( holeCoord, offsetDistance, Position::opposite(offsetSide), Location::INTERIOR, Location::EXTERIOR); delete holeCoord; } } /* private */ void OffsetCurveSetBuilder::addPolygonRing(const CoordinateSequence *coord, double offsetDistance, int side, int cwLeftLoc, int cwRightLoc) { // don't bother adding ring if it is "flat" and // will disappear in the output if (offsetDistance == 0.0 && coord->size() < LinearRing::MINIMUM_VALID_SIZE) return; int leftLoc=cwLeftLoc; int rightLoc=cwRightLoc; #if GEOS_DEBUG std::cerr<<"OffsetCurveSetBuilder::addPolygonRing: CCW: "<size() >= LinearRing::MINIMUM_VALID_SIZE && CGAlgorithms::isCCW(coord)) { leftLoc=cwRightLoc; rightLoc=cwLeftLoc; #if GEOS_DEBUG std::cerr<<" side "< lineList; curveBuilder.getRingCurve(coord, side, offsetDistance, lineList); addCurves(lineList, leftLoc, rightLoc); } /*private*/ bool OffsetCurveSetBuilder::isErodedCompletely(const LinearRing *ring, double bufferDistance) { const CoordinateSequence *ringCoord = ring->getCoordinatesRO(); // degenerate ring has no area if (ringCoord->getSize() < 4) return bufferDistance < 0; // important test to eliminate inverted triangle bug // also optimizes erosion test for triangles if (ringCoord->getSize() == 4) return isTriangleErodedCompletely(ringCoord, bufferDistance); const Envelope* env = ring->getEnvelopeInternal(); double envMinDimension = std::min(env->getHeight(), env->getWidth()); if (bufferDistance < 0.0 && 2 * std::abs(bufferDistance) > envMinDimension) return true; /** * The following is a heuristic test to determine whether an * inside buffer will be eroded completely-> * It is based on the fact that the minimum diameter of the ring * pointset * provides an upper bound on the buffer distance which would erode the * ring-> * If the buffer distance is less than the minimum diameter, the ring * may still be eroded, but this will be determined by * a full topological computation-> * */ /* MD 7 Feb 2005 - there's an unknown bug in the MD code, so disable this for now */ #if 0 MinimumDiameter md(ring); //=new MinimumDiameter(ring); double minDiam = md.getLength(); return minDiam < (2 * std::fabs(bufferDistance)); #endif return false; } /*private*/ bool OffsetCurveSetBuilder::isTriangleErodedCompletely( const CoordinateSequence *triangleCoord, double bufferDistance) { Triangle tri(triangleCoord->getAt(0), triangleCoord->getAt(1), triangleCoord->getAt(2)); Coordinate inCentre; tri.inCentre(inCentre); double distToCentre=CGAlgorithms::distancePointLine(inCentre, tri.p0, tri.p1); bool ret = distToCentre < std::fabs(bufferDistance); return ret; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/OffsetSegmentGenerator.cpp0000644000175000017500000004267112206417145023475 0ustar frankiefrankie/********************************************************************** * * GEOS-Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/OffsetSegmentGenerator.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geomgraph; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /*private data*/ const double OffsetSegmentGenerator::CURVE_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-6; const double OffsetSegmentGenerator::PI = 3.14159265358979; const double OffsetSegmentGenerator::OFFSET_SEGMENT_SEPARATION_FACTOR = 1.0E-3; const double OffsetSegmentGenerator::INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-3; const double OffsetSegmentGenerator::SIMPLIFY_FACTOR = 100.0; /*public*/ OffsetSegmentGenerator::OffsetSegmentGenerator( const PrecisionModel *newPrecisionModel, const BufferParameters& nBufParams, double dist) : maxCurveSegmentError(0.0), closingSegLengthFactor(1), segList(), distance(dist), precisionModel(newPrecisionModel), bufParams(nBufParams), li(), s0(), s1(), s2(), seg0(), seg1(), offset0(), offset1(), side(0), _hasNarrowConcaveAngle(false), endCapIndex(0) { // compute intersections in full precision, to provide accuracy // the points are rounded as they are inserted into the curve line filletAngleQuantum = PI / 2.0 / bufParams.getQuadrantSegments(); /** * Non-round joins cause issues with short closing segments, * so don't use them. In any case, non-round joins * only really make sense for relatively small buffer distances. */ if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() == BufferParameters::JOIN_ROUND) { closingSegLengthFactor = MAX_CLOSING_SEG_LEN_FACTOR; } init(distance); } /*private*/ void OffsetSegmentGenerator::init(double newDistance) { distance = newDistance; maxCurveSegmentError = distance * (1 - cos(filletAngleQuantum/2.0)); // Point list needs to be reset segList.reset(); segList.setPrecisionModel(precisionModel); /** * Choose the min vertex separation as a small fraction of * the offset distance. */ segList.setMinimumVertexDistance( distance * CURVE_VERTEX_SNAP_DISTANCE_FACTOR); } /*public*/ void OffsetSegmentGenerator::initSideSegments(const Coordinate &nS1, const Coordinate &nS2, int nSide) { s1 = nS1; s2 = nS2; side = nSide; seg1.setCoordinates(s1, s2); computeOffsetSegment(seg1, side, distance, offset1); } /*public*/ void OffsetSegmentGenerator::addNextSegment(const Coordinate &p, bool addStartPoint) { // do nothing if points are equal if (s2==p) return; // s0-s1-s2 are the coordinates of the previous segment // and the current one s0=s1; s1=s2; s2=p; seg0.setCoordinates(s0, s1); computeOffsetSegment(seg0, side, distance, offset0); seg1.setCoordinates(s1, s2); computeOffsetSegment(seg1, side, distance, offset1); int orientation=CGAlgorithms::computeOrientation(s0, s1, s2); bool outsideTurn = (orientation==CGAlgorithms::CLOCKWISE && side==Position::LEFT) || (orientation==CGAlgorithms::COUNTERCLOCKWISE && side==Position::RIGHT); if (orientation==0) { // lines are collinear addCollinear(addStartPoint); } else if (outsideTurn) { addOutsideTurn(orientation, addStartPoint); } else { // inside turn addInsideTurn(orientation, addStartPoint); } } /*private*/ void OffsetSegmentGenerator::computeOffsetSegment(const LineSegment& seg, int side, double distance, LineSegment& offset) { int sideSign = side == Position::LEFT ? 1 : -1; double dx = seg.p1.x - seg.p0.x; double dy = seg.p1.y - seg.p0.y; double len = sqrt(dx * dx + dy * dy); // u is the vector that is the length of the offset, // in the direction of the segment double ux = sideSign * distance * dx / len; double uy = sideSign * distance * dy / len; offset.p0.x = seg.p0.x - uy; offset.p0.y = seg.p0.y + ux; offset.p1.x = seg.p1.x - uy; offset.p1.y = seg.p1.y + ux; } /*public*/ void OffsetSegmentGenerator::addLineEndCap(const Coordinate &p0, const Coordinate &p1) { LineSegment seg(p0, p1); LineSegment offsetL; computeOffsetSegment(seg, Position::LEFT, distance, offsetL); LineSegment offsetR; computeOffsetSegment(seg, Position::RIGHT, distance, offsetR); double dx=p1.x-p0.x; double dy=p1.y-p0.y; double angle=atan2(dy, dx); switch (bufParams.getEndCapStyle()) { case BufferParameters::CAP_ROUND: // add offset seg points with a fillet between them segList.addPt(offsetL.p1); addFillet(p1, angle+PI/2.0, angle-PI/2.0, CGAlgorithms::CLOCKWISE, distance); segList.addPt(offsetR.p1); break; case BufferParameters::CAP_FLAT: // only offset segment points are added segList.addPt(offsetL.p1); segList.addPt(offsetR.p1); break; case BufferParameters::CAP_SQUARE: // add a square defined by extensions of the offset // segment endpoints Coordinate squareCapSideOffset; squareCapSideOffset.x=fabs(distance)*cos(angle); squareCapSideOffset.y=fabs(distance)*sin(angle); Coordinate squareCapLOffset( offsetL.p1.x+squareCapSideOffset.x, offsetL.p1.y+squareCapSideOffset.y); Coordinate squareCapROffset( offsetR.p1.x+squareCapSideOffset.x, offsetR.p1.y+squareCapSideOffset.y); segList.addPt(squareCapLOffset); segList.addPt(squareCapROffset); break; } } /*private*/ void OffsetSegmentGenerator::addFillet(const Coordinate &p, const Coordinate &p0, const Coordinate &p1, int direction, double radius) { double dx0 = p0.x - p.x; double dy0 = p0.y - p.y; double startAngle = atan2(dy0, dx0); double dx1 = p1.x - p.x; double dy1 = p1.y - p.y; double endAngle = atan2(dy1, dx1); if (direction == CGAlgorithms::CLOCKWISE) { if (startAngle <= endAngle) startAngle += 2.0 * PI; } else { // direction==COUNTERCLOCKWISE if (startAngle >= endAngle) startAngle -= 2.0 * PI; } segList.addPt(p0); addFillet(p, startAngle, endAngle, direction, radius); segList.addPt(p1); } /*private*/ void OffsetSegmentGenerator::addFillet(const Coordinate &p, double startAngle, double endAngle, int direction, double radius) { int directionFactor = direction == CGAlgorithms::CLOCKWISE ? -1 : 1; double totalAngle = fabs(startAngle - endAngle); int nSegs = (int) (totalAngle / filletAngleQuantum + 0.5); // no segments because angle is less than increment-nothing to do! if (nSegs<1) return; double initAngle, currAngleInc; // choose angle increment so that each segment has equal length initAngle = 0.0; currAngleInc = totalAngle / nSegs; double currAngle = initAngle; Coordinate pt; while (currAngle < totalAngle) { double angle = startAngle + directionFactor * currAngle; pt.x = p.x + radius * cos(angle); pt.y = p.y + radius * sin(angle); segList.addPt(pt); currAngle += currAngleInc; } } /*private*/ void OffsetSegmentGenerator::createCircle(const Coordinate &p, double distance) { // add start point Coordinate pt(p.x + distance, p.y); segList.addPt(pt); addFillet(p, 0.0, 2.0*PI, -1, distance); segList.closeRing(); } /*private*/ void OffsetSegmentGenerator::createSquare(const Coordinate &p, double distance) { segList.addPt(Coordinate(p.x+distance, p.y+distance)); segList.addPt(Coordinate(p.x+distance, p.y-distance)); segList.addPt(Coordinate(p.x-distance, p.y-distance)); segList.addPt(Coordinate(p.x-distance, p.y+distance)); segList.closeRing(); } /* private */ void OffsetSegmentGenerator::addCollinear(bool addStartPoint) { /** * This test could probably be done more efficiently, * but the situation of exact collinearity should be fairly rare. */ li.computeIntersection(s0,s1,s1,s2); int numInt=li.getIntersectionNum(); /** * if numInt is<2, the lines are parallel and in the same direction. * In this case the point can be ignored, since the offset lines * will also be parallel. */ if (numInt>= 2) { /** * Segments are collinear but reversing. * Add an "end-cap" fillet * all the way around to other direction * * This case should ONLY happen for LineStrings, * so the orientation is always CW (Polygons can never * have two consecutive segments which are parallel but * reversed, because that would be a self intersection). */ if ( bufParams.getJoinStyle() == BufferParameters::JOIN_BEVEL || bufParams.getJoinStyle() == BufferParameters::JOIN_MITRE) { if (addStartPoint) segList.addPt(offset0.p1); segList.addPt(offset1.p0); } else { addFillet(s1, offset0.p1, offset1.p0, CGAlgorithms::CLOCKWISE, distance); } } } /* private */ void OffsetSegmentGenerator::addOutsideTurn(int orientation, bool addStartPoint) { /** * Heuristic: If offset endpoints are very close together, * just use one of them as the corner vertex. * This avoids problems with computing mitre corners in the case * where the two segments are almost parallel * (which is hard to compute a robust intersection for). */ if (offset0.p1.distance(offset1.p0) < distance*OFFSET_SEGMENT_SEPARATION_FACTOR) { segList.addPt(offset0.p1); return; } if (bufParams.getJoinStyle() == BufferParameters::JOIN_MITRE) { addMitreJoin(s1, offset0, offset1, distance); } else if (bufParams.getJoinStyle() == BufferParameters::JOIN_BEVEL) { addBevelJoin(offset0, offset1); } else { // add a circular fillet connecting the endpoints // of the offset segments if (addStartPoint) segList.addPt(offset0.p1); // TESTING - comment out to produce beveled joins addFillet(s1, offset0.p1, offset1.p0, orientation, distance); segList.addPt(offset1.p0); } } /* private */ void OffsetSegmentGenerator::addInsideTurn(int orientation, bool addStartPoint) { ::geos::ignore_unused_variable_warning(orientation); ::geos::ignore_unused_variable_warning(addStartPoint); // add intersection point of offset segments (if any) li.computeIntersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1); if (li.hasIntersection()) { segList.addPt(li.getIntersection(0)); return; } // If no intersection is detected, it means the angle is so small // and/or the offset so large that the offsets segments don't // intersect. In this case we must add a "closing segment" to make // sure the buffer curve is continuous, // fairly smooth (e.g. no sharp reversals in direction) // and tracks the buffer correctly around the corner. // The curve connects the endpoints of the segment offsets to points // which lie toward the centre point of the corner. // The joining curve will not appear in the final buffer outline, // since it is completely internal to the buffer polygon. // // In complex buffer cases the closing segment may cut across many // other segments in the generated offset curve. // In order to improve the performance of the noding, the closing // segment should be kept as short as possible. // (But not too short, since that would defeat it's purpose). // This is the purpose of the closingSegLengthFactor heuristic value. /** * The intersection test above is vulnerable to robustness errors; * i.e. it may be that the offsets should intersect very close to * their endpoints, but aren't reported as such due to rounding. * To handle this situation appropriately, we use the following test: * If the offset points are very close, don't add closing segments * but simply use one of the offset points */ if (offset0.p1.distance(offset1.p0) < distance * INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) { segList.addPt(offset0.p1); } else { // add endpoint of this segment offset segList.addPt(offset0.p1); // Add "closing segment" of required length. if ( closingSegLengthFactor > 0 ) { Coordinate mid0( (closingSegLengthFactor*offset0.p1.x + s1.x)/(closingSegLengthFactor + 1), (closingSegLengthFactor*offset0.p1.y + s1.y)/(closingSegLengthFactor + 1) ); segList.addPt(mid0); Coordinate mid1( (closingSegLengthFactor*offset1.p0.x + s1.x)/(closingSegLengthFactor + 1), (closingSegLengthFactor*offset1.p0.y + s1.y)/(closingSegLengthFactor + 1) ); segList.addPt(mid1); } else { // This branch is not expected to be used // except for testing purposes. // It is equivalent to the JTS 1.9 logic for // closing segments (which results in very poor // performance for large buffer distances) segList.addPt(s1); } // add start point of next segment offset segList.addPt(offset1.p0); } } /* private */ void OffsetSegmentGenerator::addMitreJoin(const geom::Coordinate& p, const geom::LineSegment& offset0, const geom::LineSegment& offset1, double distance) { bool isMitreWithinLimit = true; Coordinate intPt; /** * This computation is unstable if the offset segments * are nearly collinear. * Howver, this situation should have been eliminated earlier * by the check for whether the offset segment endpoints are * almost coincident */ try { HCoordinate::intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1, intPt); double mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / fabs(distance); if (mitreRatio > bufParams.getMitreLimit()) isMitreWithinLimit = false; } catch (const NotRepresentableException& e) { ::geos::ignore_unused_variable_warning(e); intPt = Coordinate(0,0); isMitreWithinLimit = false; } if (isMitreWithinLimit) { segList.addPt(intPt); } else { addLimitedMitreJoin(offset0, offset1, distance, bufParams.getMitreLimit()); //addBevelJoin(offset0, offset1); } } /* private */ void OffsetSegmentGenerator::addLimitedMitreJoin( const geom::LineSegment& offset0, const geom::LineSegment& offset1, double distance, double mitreLimit) { ::geos::ignore_unused_variable_warning(offset0); ::geos::ignore_unused_variable_warning(offset1); const Coordinate& basePt = seg0.p1; double ang0 = Angle::angle(basePt, seg0.p0); //double ang1 = Angle::angle(basePt, seg1.p1); // unused in JTS, bug ? // oriented angle between segments double angDiff = Angle::angleBetweenOriented(seg0.p0, basePt, seg1.p1); // half of the interior angle double angDiffHalf = angDiff / 2; // angle for bisector of the interior angle between the segments double midAng = Angle::normalize(ang0 + angDiffHalf); // rotating this by PI gives the bisector of the reflex angle double mitreMidAng = Angle::normalize(midAng + PI); // the miterLimit determines the distance to the mitre bevel double mitreDist = mitreLimit * distance; // the bevel delta is the difference between the buffer distance // and half of the length of the bevel segment double bevelDelta = mitreDist * fabs(sin(angDiffHalf)); double bevelHalfLen = distance - bevelDelta; // compute the midpoint of the bevel segment double bevelMidX = basePt.x + mitreDist * cos(mitreMidAng); double bevelMidY = basePt.y + mitreDist * sin(mitreMidAng); Coordinate bevelMidPt(bevelMidX, bevelMidY); // compute the mitre midline segment from the corner point to // the bevel segment midpoint LineSegment mitreMidLine(basePt, bevelMidPt); // finally the bevel segment endpoints are computed as offsets from // the mitre midline Coordinate bevelEndLeft; mitreMidLine.pointAlongOffset(1.0, bevelHalfLen, bevelEndLeft); Coordinate bevelEndRight; mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen, bevelEndRight); if (side == Position::LEFT) { segList.addPt(bevelEndLeft); segList.addPt(bevelEndRight); } else { segList.addPt(bevelEndRight); segList.addPt(bevelEndLeft); } } /* private */ void OffsetSegmentGenerator::addBevelJoin( const geom::LineSegment& offset0, const geom::LineSegment& offset1) { segList.addPt(offset0.p1); segList.addPt(offset1.p0); } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/RightmostEdgeFinder.cpp0000644000175000017500000001506112206417145022743 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/RightmostEdgeFinder.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace geos::algorithm; // CGAlgorithms using namespace geos::geom; using namespace geos::geomgraph; // DirectedEdge, Position namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /*public*/ RightmostEdgeFinder::RightmostEdgeFinder() : minIndex(-1), // FIXME: don't use -1 as a sentinel, or we won't be // able to use an unsigned int here minCoord(Coordinate::getNull()), minDe(NULL), orientedDe(NULL) { } /*public*/ void RightmostEdgeFinder::findEdge(std::vector* dirEdgeList) { #ifndef NDEBUG size_t checked=0; #endif /* * Check all forward DirectedEdges only. This is still general, * because each edge has a forward DirectedEdge. */ size_t dirEdgeListSize=dirEdgeList->size(); for(size_t i=0; iisForward()) continue; checkForRightmostCoordinate(de); #ifndef NDEBUG ++checked; #endif } if ( ! minDe ) { // I don't know why, but it looks like this can happen // (invalid PlanarGraph, I think) // See http://trac.osgeo.org/geos/ticket/605#comment:17 // throw util::TopologyException("No forward edges found in buffer subgraph"); } #ifndef NDEBUG assert(checked>0); assert(minIndex>=0); assert(minDe); #endif /* * If the rightmost point is a node, we need to identify which of * the incident edges is rightmost. */ assert(minIndex!=0 || minCoord==minDe->getCoordinate()); // inconsistency in rightmost processing if (minIndex==0 ) { findRightmostEdgeAtNode(); } else { findRightmostEdgeAtVertex(); } /* * now check that the extreme side is the R side. * If not, use the sym instead. */ orientedDe=minDe; int rightmostSide=getRightmostSide(minDe, minIndex); if (rightmostSide==Position::LEFT) { orientedDe=minDe->getSym(); } } /*private*/ void RightmostEdgeFinder::findRightmostEdgeAtNode() { Node *node=minDe->getNode(); assert(node); assert(dynamic_cast(node->getEdges())); DirectedEdgeStar *star=static_cast(node->getEdges()); // Warning! NULL could be returned if the star is empty! minDe=star->getRightmostEdge(); assert(minDe); // the DirectedEdge returned by the previous call is not // necessarily in the forward direction. Use the sym edge if it isn't. if (!minDe->isForward()) { minDe=minDe->getSym(); const Edge* minEdge=minDe->getEdge(); assert(minEdge); const CoordinateSequence* minEdgeCoords = minEdge->getCoordinates(); assert(minEdgeCoords); minIndex=(int)(minEdgeCoords->getSize())-1; assert(minIndex>=0); } } /*private*/ void RightmostEdgeFinder::findRightmostEdgeAtVertex() { /* * The rightmost point is an interior vertex, so it has * a segment on either side of it. * If these segments are both above or below the rightmost * point, we need to determine their relative orientation * to decide which is rightmost. */ Edge* minEdge=minDe->getEdge(); assert(minEdge); const CoordinateSequence *pts=minEdge->getCoordinates(); assert(pts); // rightmost point expected to be interior vertex of edge assert(minIndex>0); assert((size_t)minIndexgetSize()); const Coordinate& pPrev=pts->getAt(minIndex-1); const Coordinate& pNext=pts->getAt(minIndex+1); int orientation=CGAlgorithms::computeOrientation( minCoord, pNext, pPrev); bool usePrev=false; // both segments are below min point if ( pPrev.y < minCoord.y && pNext.y < minCoord.y && orientation == CGAlgorithms::COUNTERCLOCKWISE) { usePrev=true; } else if ( pPrev.y > minCoord.y && pNext.y > minCoord.y && orientation == CGAlgorithms::CLOCKWISE) { usePrev=true; } // if both segments are on the same side, do nothing - either is safe // to select as a rightmost segment if (usePrev) { minIndex=minIndex-1; } } /*private*/ void RightmostEdgeFinder::checkForRightmostCoordinate(DirectedEdge *de) { const Edge* deEdge=de->getEdge(); assert(deEdge); const CoordinateSequence *coord=deEdge->getCoordinates(); assert(coord); // only check vertices which are the starting point of // a non-horizontal segment size_t n=coord->getSize()-1; for(size_t i=0; i MD 19 Sep 03 - NO! we can test all vertices, // since the rightmost must have a non-horiz segment adjacent to it if (minCoord.isNull() || coord->getAt(i).x > minCoord.x ) { minDe = de; minIndex = (int)i; minCoord = coord->getAt(i); } } } /*private*/ int RightmostEdgeFinder::getRightmostSide(DirectedEdge *de, int index) { int side = getRightmostSideOfSegment(de, index); if (side<0) side=getRightmostSideOfSegment(de, index-1); if (side<0) { // reaching here can indicate that segment is horizontal // Assert::shouldNeverReachHere( // "problem with finding rightmost side of segment"); minCoord=Coordinate::getNull(); checkForRightmostCoordinate(de); } return side; } /*private*/ int RightmostEdgeFinder::getRightmostSideOfSegment(DirectedEdge *de, int i) { assert(de); const Edge *e=de->getEdge(); assert(e); const CoordinateSequence *coord=e->getCoordinates(); assert(coord); if ( i < 0 || i+1 >= (int)coord->getSize() ) return -1; // indicates edge is parallel to x-axis if (coord->getAt(i).y == coord->getAt(i+1).y) return -1; int pos=Position::LEFT; if (coord->getAt(i).y < coord->getAt(i+1).y) pos=Position::RIGHT; return pos; } } // namespace geos.operation.buffer } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/buffer/SubgraphDepthLocater.cpp0000644000175000017500000002101012206417145023107 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/buffer/SubgraphDepthLocater.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geomgraph; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace buffer { // geos.operation.buffer /* * A segment from a directed edge which has been assigned a depth value * for its sides. */ class DepthSegment { private: geom::LineSegment upwardSeg; /* * Compare two collinear segments for left-most ordering. * If segs are vertical, use vertical ordering for comparison. * If segs are equal, return 0. * Segments are assumed to be directed so that the second * coordinate is >= to the first * (e.g. up and to the right). * * @param seg0 a segment to compare * @param seg1 a segment to compare * @return */ static int compareX(const geom::LineSegment *seg0, const geom::LineSegment *seg1) { int compare0=seg0->p0.compareTo(seg1->p0); if (compare0!=0) return compare0; return seg0->p1.compareTo(seg1->p1); } public: int leftDepth; /// @param seg will be copied to private space DepthSegment(const geom::LineSegment &seg, int depth) : upwardSeg(seg), leftDepth(depth) { // input seg is assumed to be normalized //upwardSeg.normalize(); } /** * Defines a comparision operation on DepthSegments * which orders them left to right * *

	 * DS1 < DS2   if   DS1.seg is left of DS2.seg
	 * DS1 > DS2   if   DS1.seg is right of DS2.seg
	 * 
* * @param obj * @return */ int compareTo(const DepthSegment& other) const { /** * try and compute a determinate orientation for the segments. * Test returns 1 if other is left of this (i.e. this > other) */ int orientIndex=upwardSeg.orientationIndex(&(other.upwardSeg)); /** * If comparison between this and other is indeterminate, * try the opposite call order. * orientationIndex value is 1 if this is left of other, * so have to flip sign to get proper comparison value of * -1 if this is leftmost */ if (orientIndex==0) orientIndex=-1 * other.upwardSeg.orientationIndex(&upwardSeg); // if orientation is determinate, return it if (orientIndex != 0) return orientIndex; // otherwise, segs must be collinear - sort based on minimum X value return compareX(&upwardSeg, &(other.upwardSeg)); } }; struct DepthSegmentLessThen { bool operator() (const DepthSegment* first, const DepthSegment* second) { assert(first); assert(second); if (first->compareTo(*second)<0) return true; else return false; } }; /*public*/ int SubgraphDepthLocater::getDepth(const Coordinate& p) { vector stabbedSegments; findStabbedSegments(p, stabbedSegments); // if no segments on stabbing line subgraph must be outside all others if (stabbedSegments.size()==0) return 0; sort(stabbedSegments.begin(), stabbedSegments.end(), DepthSegmentLessThen()); DepthSegment *ds=stabbedSegments[0]; int ret = ds->leftDepth; #if GEOS_DEBUG cerr<<"SubgraphDepthLocater::getDepth("<::iterator it=stabbedSegments.begin(), itEnd=stabbedSegments.end(); it != itEnd; ++it) { delete *it; } return ret; } /*private*/ void SubgraphDepthLocater::findStabbedSegments(const Coordinate &stabbingRayLeftPt, std::vector& stabbedSegments) { size_t size = subgraphs->size(); for (size_t i=0; igetEnvelope(); if ( stabbingRayLeftPt.y < env->getMinY() || stabbingRayLeftPt.y > env->getMaxY() || stabbingRayLeftPt.x < env->getMinX() || stabbingRayLeftPt.x > env->getMaxX()) { continue; } findStabbedSegments(stabbingRayLeftPt, bsg->getDirectedEdges(), stabbedSegments); } } /*private*/ void SubgraphDepthLocater::findStabbedSegments( const Coordinate &stabbingRayLeftPt, vector* dirEdges, vector& stabbedSegments) { /** * Check all forward DirectedEdges only. This is still general, * because each Edge has a forward DirectedEdge. */ for (size_t i=0, n=dirEdges->size(); iisForward()) continue; findStabbedSegments(stabbingRayLeftPt, de, stabbedSegments); } } /*private*/ void SubgraphDepthLocater::findStabbedSegments( const Coordinate &stabbingRayLeftPt, DirectedEdge *dirEdge, vector& stabbedSegments) { const CoordinateSequence *pts=dirEdge->getEdge()->getCoordinates(); // It seems that LineSegment is *very* slow... undef this // to see yourself // LineSegment has been refactored to be mostly inline, still // it makes copies of the given coordinates, while the 'non-LineSemgent' // based code below uses pointers instead. I'll kip the SKIP_LS // defined until LineSegment switches to Coordinate pointers instead. // #define SKIP_LS 1 int n = pts->getSize()-1; for (int i=0; igetAt(i); seg.p1=pts->getAt(i + 1); #if GEOS_DEBUG cerr << " SubgraphDepthLocater::findStabbedSegments: segment " << i << " (" << seg << ") "; #endif #else const Coordinate *low=&(pts->getAt(i)); const Coordinate *high=&(pts->getAt(i+1)); const Coordinate *swap=NULL; #endif #ifndef SKIP_LS // ensure segment always points upwards //if (seg.p0.y > seg.p1.y) { seg.reverse(); #if GEOS_DEBUG cerr << " reverse (" << seg << ") "; #endif } #else if (low->y > high->y) { swap=low; low=high; high=swap; } #endif // skip segment if it is left of the stabbing line // skip if segment is above or below stabbing line #ifndef SKIP_LS double maxx=max(seg.p0.x, seg.p1.x); #else double maxx=max(low->x, high->x); #endif if (maxx < stabbingRayLeftPt.x) { #if GEOS_DEBUG cerr<<" segment is left to stabbing line, skipping "<y == high->y) #endif { #if GEOS_DEBUG cerr<<" segment is horizontal, skipping "< seg.p1.y) #else if (stabbingRayLeftPt.y < low->y || stabbingRayLeftPt.y > high->y) #endif { #if GEOS_DEBUG cerr<<" segment above or below stabbing line, skipping "<getDepth(Position::LEFT); // if segment direction was flipped, use RHS depth instead if (! (seg.p0==pts->getAt(i))) depth=dirEdge->getDepth(Position::RIGHT); #else int depth = swap ? dirEdge->getDepth(Position::RIGHT) : dirEdge->getDepth(Position::LEFT); #endif #if GEOS_DEBUG cerr<<" depth: "< #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace distance { // geos.operation.distance /*public*/ vector* ConnectedElementLocationFilter::getLocations(const Geometry *geom) { vector *loc=new vector(); ConnectedElementLocationFilter c(loc); geom->apply_ro(&c); return loc; } void ConnectedElementLocationFilter::filter_ro(const Geometry *geom) { if ((typeid(*geom)==typeid(Point)) || (typeid(*geom)==typeid(LineString)) || (typeid(*geom)==typeid(LinearRing)) || (typeid(*geom)==typeid(Polygon))) { locations->push_back(new GeometryLocation(geom, 0, *(geom->getCoordinate()))); } } void ConnectedElementLocationFilter::filter_rw(Geometry *geom){ if ((typeid(*geom)==typeid(Point)) || (typeid(*geom)==typeid(LineString)) || (typeid(*geom)==typeid(LinearRing)) || (typeid(*geom)==typeid(Polygon))) locations->push_back(new GeometryLocation(geom, 0, *(geom->getCoordinate()))); } } // namespace geos.operation.distance } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/distance/ConnectedElementPointFilter.cpp0000644000175000017500000000344012206417145024761 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/ConnectedElementPointFilter.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace distance { // geos.operation.distance /** * Returns a list containing a Coordinate from each Polygon, LineString, and Point * found inside the specified geometry. Thus, if the specified geometry is * not a GeometryCollection, an empty list will be returned. */ vector* ConnectedElementPointFilter::getCoordinates(const Geometry *geom) { vector *points=new vector(); ConnectedElementPointFilter c(points); geom->apply_ro(&c); return points; } void ConnectedElementPointFilter::filter_ro(const Geometry *geom) { if ((typeid(*geom)==typeid(Point)) || (typeid(*geom)==typeid(LineString)) || (typeid(*geom)==typeid(Polygon))) pts->push_back(geom->getCoordinate()); } } // namespace geos.operation.distance } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/distance/DistanceOp.cpp0000644000175000017500000003704512206417145021426 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/DistanceOp.java r335 (JTS-1.12-) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; //using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace distance { // geos.operation.distance using namespace geom; //using namespace geom::util; /*public static (deprecated)*/ double DistanceOp::distance(const Geometry *g0, const Geometry *g1) { DistanceOp distOp(g0,g1); return distOp.distance(); } /*public static*/ double DistanceOp::distance(const Geometry& g0, const Geometry& g1) { DistanceOp distOp(g0,g1); return distOp.distance(); } /*public static deprecated*/ CoordinateSequence* DistanceOp::closestPoints(const Geometry *g0, const Geometry *g1) { DistanceOp distOp(g0,g1); return distOp.nearestPoints(); } /*public static*/ CoordinateSequence* DistanceOp::nearestPoints(const Geometry *g0, const Geometry *g1) { DistanceOp distOp(g0,g1); return distOp.nearestPoints(); } DistanceOp::DistanceOp(const Geometry *g0, const Geometry *g1): geom(2), terminateDistance(0.0), minDistanceLocation(0), minDistance(DoubleMax) { geom[0] = g0; geom[1] = g1; } DistanceOp::DistanceOp(const Geometry& g0, const Geometry& g1): geom(2), terminateDistance(0.0), minDistanceLocation(0), minDistance(DoubleMax) { geom[0] = &g0; geom[1] = &g1; } DistanceOp::DistanceOp(const Geometry& g0, const Geometry& g1, double tdist) : geom(2), terminateDistance(tdist), minDistanceLocation(0), minDistance(DoubleMax) { geom[0] = &g0; geom[1] = &g1; } DistanceOp::~DistanceOp() { size_t i; for (i=0; isize(); i++) { delete (*minDistanceLocation)[i]; } delete minDistanceLocation; } } /** * Report the distance between the closest points on the input geometries. * * @return the distance between the geometries */ double DistanceOp::distance() { using geos::util::IllegalArgumentException; if ( geom[0] == 0 || geom[1] == 0 ) throw IllegalArgumentException("null geometries are not supported"); if ( geom[0]->isEmpty() || geom[1]->isEmpty() ) return 0.0; computeMinDistance(); return minDistance; } /* public */ CoordinateSequence* DistanceOp::closestPoints() { return nearestPoints(); } /* public */ CoordinateSequence* DistanceOp::nearestPoints() { // lazily creates minDistanceLocation computeMinDistance(); assert(0 != minDistanceLocation); std::vector& locs = *minDistanceLocation; // Empty input geometries result in this behaviour if ( locs[0] == 0 || locs[1] == 0 ) { // either both or none are set.. assert(locs[0] == 0 && locs[1] == 0); return 0; } GeometryLocation* loc0 = locs[0]; GeometryLocation* loc1 = locs[1]; const Coordinate& c0 = loc0->getCoordinate(); const Coordinate& c1 = loc1->getCoordinate(); CoordinateSequence* nearestPts = new CoordinateArraySequence(); nearestPts->add(c0); nearestPts->add(c1); return nearestPts; } /*private, unused!*/ vector* DistanceOp::nearestLocations(){ computeMinDistance(); return minDistanceLocation; } void DistanceOp::updateMinDistance(vector& locGeom, bool flip) { assert(minDistanceLocation); // if not set then don't update if (locGeom[0]==NULL) { #if GEOS_DEBUG std::cerr << "updateMinDistance called with loc[0] == null and loc[1] == " << locGeom[1] << std::endl; #endif assert(locGeom[1] == NULL); return; } delete (*minDistanceLocation)[0]; delete (*minDistanceLocation)[1]; if (flip) { (*minDistanceLocation)[0]=locGeom[1]; (*minDistanceLocation)[1]=locGeom[0]; } else { (*minDistanceLocation)[0]=locGeom[0]; (*minDistanceLocation)[1]=locGeom[1]; } } /*private*/ void DistanceOp::computeMinDistance() { // only compute once! if (minDistanceLocation) return; #if GEOS_DEBUG std::cerr << "---Start: " << geom[0]->toString() << " - " << geom[1]->toString() << std::endl; #endif minDistanceLocation = new vector(2); computeContainmentDistance(); if (minDistance <= terminateDistance) { return; } computeFacetDistance(); #if GEOS_DEBUG std::cerr << "---End " << std::endl; #endif } /*private*/ void DistanceOp::computeContainmentDistance() { using geom::util::PolygonExtracter; Polygon::ConstVect polys1; PolygonExtracter::getPolygons(*(geom[1]), polys1); #if GEOS_DEBUG std::cerr << "PolygonExtracter found " << polys1.size() << " polygons in geometry 2" << std::endl; #endif // NOTE: // Expected to fill minDistanceLocation items // if minDistance <= terminateDistance vector *locPtPoly = new vector(2); // test if either geometry has a vertex inside the other if ( ! polys1.empty() ) { vector *insideLocs0 = ConnectedElementLocationFilter::getLocations(geom[0]); computeInside(insideLocs0, polys1, locPtPoly); if (minDistance <= terminateDistance) { assert( (*locPtPoly)[0] ); assert( (*locPtPoly)[1] ); (*minDistanceLocation)[0] = (*locPtPoly)[0]; (*minDistanceLocation)[1] = (*locPtPoly)[1]; delete locPtPoly; for (size_t i=0; isize(); i++) { GeometryLocation *l = (*insideLocs0)[i]; if ( l != (*minDistanceLocation)[0] && l != (*minDistanceLocation)[1] ) { delete l; } } delete insideLocs0; return; } for (size_t i=0; isize(); i++) delete (*insideLocs0)[i]; delete insideLocs0; } Polygon::ConstVect polys0; PolygonExtracter::getPolygons(*(geom[0]), polys0); #if GEOS_DEBUG std::cerr << "PolygonExtracter found " << polys0.size() << " polygons in geometry 1" << std::endl; #endif if ( ! polys0.empty() ) { vector *insideLocs1 = ConnectedElementLocationFilter::getLocations(geom[1]); computeInside(insideLocs1, polys0, locPtPoly); if (minDistance <= terminateDistance) { // flip locations, since we are testing geom 1 VS geom 0 assert( (*locPtPoly)[0] ); assert( (*locPtPoly)[1] ); (*minDistanceLocation)[0] = (*locPtPoly)[1]; (*minDistanceLocation)[1] = (*locPtPoly)[0]; delete locPtPoly; for (size_t i=0; isize(); i++) { GeometryLocation *l = (*insideLocs1)[i]; if ( l != (*minDistanceLocation)[0] && l != (*minDistanceLocation)[1] ) { delete l; } } delete insideLocs1; return; } for (size_t i=0; isize(); i++) delete (*insideLocs1)[i]; delete insideLocs1; } delete locPtPoly; // If minDistance <= terminateDistance we must have // set minDistanceLocations to some non-null item assert( minDistance > terminateDistance || ( (*minDistanceLocation)[0] && (*minDistanceLocation)[1] ) ); } /*private*/ void DistanceOp::computeInside(vector *locs, const Polygon::ConstVect& polys, vector *locPtPoly) { for (size_t i=0, ni=locs->size(); i *locPtPoly) { const Coordinate &pt=ptLoc->getCoordinate(); // if pt is not in exterior, distance to geom is 0 if (Location::EXTERIOR!=ptLocator.locate(pt, static_cast(poly))) { minDistance = 0.0; (*locPtPoly)[0] = ptLoc; GeometryLocation *locPoly = new GeometryLocation(poly, pt); (*locPtPoly)[1] = locPoly; return; } } /*private*/ void DistanceOp::computeFacetDistance() { using geom::util::LinearComponentExtracter; using geom::util::PointExtracter; vector locGeom(2); /** * Geometries are not wholely inside, so compute distance from lines * and points * of one to lines and points of the other */ LineString::ConstVect lines0; LineString::ConstVect lines1; LinearComponentExtracter::getLines(*(geom[0]), lines0); LinearComponentExtracter::getLines(*(geom[1]), lines1); #if GEOS_DEBUG std::cerr << "LinearComponentExtracter found " << lines0.size() << " lines in geometry 1 and " << lines1.size() << " lines in geometry 2 " << std::endl; #endif Point::ConstVect pts0; Point::ConstVect pts1; PointExtracter::getPoints(*(geom[0]), pts0); PointExtracter::getPoints(*(geom[1]), pts1); #if GEOS_DEBUG std::cerr << "PointExtracter found " << pts0.size() << " points in geometry 1 and " << pts1.size() << " points in geometry 2 " << std::endl; #endif // exit whenever minDistance goes LE than terminateDistance computeMinDistanceLines(lines0, lines1, locGeom); updateMinDistance(locGeom, false); if (minDistance <= terminateDistance) { #if GEOS_DEBUG std::cerr << "Early termination after line-line distance" << std::endl; #endif return; }; locGeom[0]=NULL; locGeom[1]=NULL; computeMinDistanceLinesPoints(lines0, pts1, locGeom); updateMinDistance(locGeom, false); if (minDistance <= terminateDistance) { #if GEOS_DEBUG std::cerr << "Early termination after lines0-points1 distance" << std::endl; #endif return; }; locGeom[0]=NULL; locGeom[1]=NULL; computeMinDistanceLinesPoints(lines1, pts0, locGeom); updateMinDistance(locGeom, true); if (minDistance <= terminateDistance){ #if GEOS_DEBUG std::cerr << "Early termination after lines1-points0 distance" << std::endl; #endif return; }; locGeom[0]=NULL; locGeom[1]=NULL; computeMinDistancePoints(pts0, pts1, locGeom); updateMinDistance(locGeom, false); #if GEOS_DEBUG std::cerr << "termination after pts-pts distance" << std::endl; #endif } /*private*/ void DistanceOp::computeMinDistanceLines( const LineString::ConstVect& lines0, const LineString::ConstVect& lines1, vector& locGeom) { for (size_t i=0, ni=lines0.size(); i& locGeom) { for (size_t i=0, ni=points0.size(); igetCoordinate()->distance(*(pt1->getCoordinate())); #if GEOS_DEBUG std::cerr << "Distance " << pt0->toString() << " - " << pt1->toString() << ": " << dist << ", minDistance: " << minDistance << std::endl; #endif if (dist < minDistance) { minDistance = dist; // this is wrong - need to determine closest points on both segments!!! delete locGeom[0]; locGeom[0] = new GeometryLocation(pt0, 0, *(pt0->getCoordinate())); delete locGeom[1]; locGeom[1] = new GeometryLocation(pt1, 0, *(pt1->getCoordinate())); } if (minDistance<=terminateDistance) return; } } } /*private*/ void DistanceOp::computeMinDistanceLinesPoints( const LineString::ConstVect& lines, const Point::ConstVect& points, vector& locGeom) { for (size_t i=0;i& locGeom) { using geos::algorithm::CGAlgorithms; const Envelope *env0=line0->getEnvelopeInternal(); const Envelope *env1=line1->getEnvelopeInternal(); if (env0->distance(env1)>minDistance) { return; } const CoordinateSequence *coord0=line0->getCoordinatesRO(); const CoordinateSequence *coord1=line1->getCoordinatesRO(); size_t npts0=coord0->getSize(); size_t npts1=coord1->getSize(); // brute force approach! for(size_t i=0; igetAt(i),coord0->getAt(i+1), coord1->getAt(j),coord1->getAt(j+1)); if (dist < minDistance) { minDistance = dist; LineSegment seg0(coord0->getAt(i), coord0->getAt(i + 1)); LineSegment seg1(coord1->getAt(j), coord1->getAt(j + 1)); CoordinateSequence* closestPt = seg0.closestPoints(seg1); Coordinate *c1 = new Coordinate(closestPt->getAt(0)); Coordinate *c2 = new Coordinate(closestPt->getAt(1)); newCoords.push_back(c1); newCoords.push_back(c2); delete closestPt; delete locGeom[0]; locGeom[0] = new GeometryLocation(line0, i, *c1); delete locGeom[1]; locGeom[1] = new GeometryLocation(line1, j, *c2); } if (minDistance<=terminateDistance) return; } } } /*private*/ void DistanceOp::computeMinDistance(const LineString *line, const Point *pt, vector& locGeom) { using geos::algorithm::CGAlgorithms; const Envelope *env0=line->getEnvelopeInternal(); const Envelope *env1=pt->getEnvelopeInternal(); if (env0->distance(env1)>minDistance) { return; } const CoordinateSequence *coord0=line->getCoordinatesRO(); Coordinate *coord=new Coordinate(*(pt->getCoordinate())); newCoords.push_back(coord); // brute force approach! size_t npts0=coord0->getSize(); for(size_t i=0; igetAt(i),coord0->getAt(i+1)); if (dist < minDistance) { minDistance = dist; LineSegment seg(coord0->getAt(i), coord0->getAt(i + 1)); Coordinate segClosestPoint; seg.closestPoint(*coord, segClosestPoint); delete locGeom[0]; locGeom[0] = new GeometryLocation(line, i, segClosestPoint); delete locGeom[1]; locGeom[1] = new GeometryLocation(pt, 0, *coord); } if (minDistance<=terminateDistance) return; } } /* public static */ bool DistanceOp::isWithinDistance(const geom::Geometry& g0, const geom::Geometry& g1, double distance) { DistanceOp distOp(g0, g1, distance); return distOp.distance() <= distance; } } // namespace geos.operation.distance } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/distance/GeometryLocation.cpp0000644000175000017500000000413012206417145022646 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/distance/GeometryLocation.java rev. 1.7 (JTS-1.10) * **********************************************************************/ #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace distance { // geos.operation.distance /** * Constructs a GeometryLocation specifying a point on a geometry, as well as the * segment that the point is on (or INSIDE_AREA if the point is not on a segment). */ GeometryLocation::GeometryLocation(const Geometry *newComponent, int newSegIndex, const Coordinate &newPt) { component = newComponent; segIndex = newSegIndex; pt = newPt; } /** * Constructs a GeometryLocation specifying a point inside an area geometry. */ GeometryLocation::GeometryLocation(const Geometry *newComponent, const Coordinate &newPt) { component = newComponent; segIndex = INSIDE_AREA; pt = newPt; } /** * Returns the geometry associated with this location. */ const Geometry* GeometryLocation::getGeometryComponent() { return component; } /** * Returns the segment index for this location. If the location is inside an * area, the index will have the value INSIDE_AREA; * * @return the segment index for the location, or INSIDE_AREA */ int GeometryLocation::getSegmentIndex() { return segIndex; } /** * Returns the location. */ Coordinate& GeometryLocation::getCoordinate() { return pt; } bool GeometryLocation::isInsideArea() { return segIndex == INSIDE_AREA; } } // namespace geos.operation.distance } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/distance/Makefile.am0000644000175000017500000000052612206417145020717 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopdistance.la INCLUDES = -I$(top_srcdir)/include libopdistance_la_SOURCES = \ ConnectedElementLocationFilter.cpp \ ConnectedElementPointFilter.cpp \ DistanceOp.cpp \ GeometryLocation.cpp libopdistance_la_LIBADD = geos-3.4.2/src/operation/distance/Makefile.in0000644000175000017500000005361512206417164020740 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/distance DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopdistance_la_DEPENDENCIES = am_libopdistance_la_OBJECTS = ConnectedElementLocationFilter.lo \ ConnectedElementPointFilter.lo DistanceOp.lo \ GeometryLocation.lo libopdistance_la_OBJECTS = $(am_libopdistance_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopdistance_la_SOURCES) DIST_SOURCES = $(libopdistance_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopdistance.la INCLUDES = -I$(top_srcdir)/include libopdistance_la_SOURCES = \ ConnectedElementLocationFilter.cpp \ ConnectedElementPointFilter.cpp \ DistanceOp.cpp \ GeometryLocation.cpp libopdistance_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/distance/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/distance/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopdistance.la: $(libopdistance_la_OBJECTS) $(libopdistance_la_DEPENDENCIES) $(CXXLINK) $(libopdistance_la_OBJECTS) $(libopdistance_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConnectedElementLocationFilter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConnectedElementPointFilter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DistanceOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryLocation.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/linemerge/0000755000175000017500000000000012206417235017035 5ustar frankiefrankiegeos-3.4.2/src/operation/linemerge/EdgeString.cpp0000644000175000017500000000533112206417145021576 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/EdgeString.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge /** * Constructs an EdgeString with the given factory used to convert * this EdgeString to a LineString */ EdgeString::EdgeString(const GeometryFactory *newFactory): factory(newFactory), directedEdges(), coordinates(NULL) { } EdgeString::~EdgeString() { } /** * Adds a directed edge which is known to form part of this line. */ void EdgeString::add(LineMergeDirectedEdge *directedEdge) { directedEdges.push_back(directedEdge); } CoordinateSequence * EdgeString::getCoordinates() { if (coordinates==NULL) { int forwardDirectedEdges = 0; int reverseDirectedEdges = 0; coordinates=factory->getCoordinateSequenceFactory()->create(NULL); for (std::size_t i=0, e=directedEdges.size(); igetEdgeDirection()) { forwardDirectedEdges++; } else { reverseDirectedEdges++; } assert(dynamic_cast(directedEdge->getEdge())); LineMergeEdge* lme=static_cast( directedEdge->getEdge()); coordinates->add(lme->getLine()->getCoordinatesRO(), false, directedEdge->getEdgeDirection()); } if (reverseDirectedEdges > forwardDirectedEdges) { CoordinateSequence::reverse(coordinates); } } return coordinates; } /* * Converts this EdgeString into a new LineString. */ LineString* EdgeString::toLineString() { return factory->createLineString(getCoordinates()); } } // namespace geos.operation.linemerge } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/linemerge/LineMergeDirectedEdge.cpp0000644000175000017500000000373012206417145023644 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeDirectedEdge.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include //using namespace geos::planargraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge LineMergeDirectedEdge::LineMergeDirectedEdge( planargraph::Node *newFrom, planargraph::Node *newTo, const Coordinate& newDirectionPt, bool nEdgeDirection) : planargraph::DirectedEdge(newFrom, newTo, newDirectionPt, nEdgeDirection) {} /** * Returns the directed edge that starts at this directed edge's end point, * or null if there are zero or multiple directed edges starting there. * @return */ LineMergeDirectedEdge* LineMergeDirectedEdge::getNext() { if (getToNode()->getDegree()!=2) { return NULL; } if (getToNode()->getOutEdges()->getEdges()[0]==getSym()) { return (LineMergeDirectedEdge*) getToNode()->getOutEdges()->getEdges()[1]; } assert(getToNode()->getOutEdges()->getEdges()[1]==getSym()); LineMergeDirectedEdge* nextedge = dynamic_cast(getToNode()->getOutEdges()->getEdges()[0]); assert(nextedge); return nextedge; } } // namespace geos.operation.linemerge } // namespace geos.operation } //namespace geos geos-3.4.2/src/operation/linemerge/LineMergeEdge.cpp0000644000175000017500000000241112206417145022173 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeEdge.java r378 (JTS-1.12) * **********************************************************************/ #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge /** * Constructs a LineMergeEdge with vertices given by the specified LineString. */ LineMergeEdge::LineMergeEdge(const LineString *newLine): line(newLine) { //line=newLine; } /** * Returns the LineString specifying the vertices of this edge. */ const LineString * LineMergeEdge::getLine() const { return line; } } // namespace geos.operation.linemerge } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/linemerge/LineMergeGraph.cpp0000644000175000017500000000657512206417145022407 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineMergeGraph.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace std; //using namespace geos::planargraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge void LineMergeGraph::addEdge(const LineString *lineString) { if (lineString->isEmpty()) return; #if GEOS_DEBUG cerr<<"Adding LineString "<toString()< coordinates ( CoordinateSequence::removeRepeatedPoints(lineString->getCoordinatesRO()) ); std::size_t nCoords = coordinates->size(); // virtual call.. // don't add lines with all coordinates equal if ( nCoords <= 1 ) return; const Coordinate& startCoordinate = coordinates->getAt(0); const Coordinate& endCoordinate = coordinates->getAt(nCoords-1); planargraph::Node* startNode=getNode(startCoordinate); planargraph::Node* endNode=getNode(endCoordinate); #if GEOS_DEBUG cerr<<" startNode: "<<*startNode<getAt(1), true); newDirEdges.push_back(directedEdge0); planargraph::DirectedEdge *directedEdge1=new LineMergeDirectedEdge(endNode, startNode,coordinates->getAt(nCoords - 2), false); newDirEdges.push_back(directedEdge1); planargraph::Edge *edge=new LineMergeEdge(lineString); newEdges.push_back(edge); edge->setDirectedEdges(directedEdge0, directedEdge1); #if GEOS_DEBUG cerr<<" planargraph::Edge: "<<*edge< #include #include #include #include #include //#include #include #include #include #include #include using namespace std; using namespace geos::planargraph; using namespace geos::geom; #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge void LineMerger::add(vector *geometries) { for(size_t i=0, n=geometries->size(); i(geom); if ( ls ) lm->add(ls); } }; /** * Adds a Geometry to be processed. May be called multiple times. * Any dimension of Geometry may be added; the constituent linework will be * extracted. */ void LineMerger::add(const Geometry *geometry) { LMGeometryComponentFilter lmgcf(this); geometry->applyComponentFilter(lmgcf); } void LineMerger::add(const LineString *lineString) { if (factory==NULL) factory=lineString->getFactory(); graph.addEdge(lineString); } void LineMerger::merge() { if (mergedLineStrings!=NULL) return; // reset marks (this allows incremental processing) GraphComponent::setMarkedMap(graph.nodeIterator(), graph.nodeEnd(), false); GraphComponent::setMarked(graph.edgeIterator(), graph.edgeEnd(), false); for (size_t i=0, n=edgeStrings.size(); i(numEdgeStrings); for (size_t i=0; itoLineString(); } } void LineMerger::buildEdgeStringsForObviousStartNodes() { buildEdgeStringsForNonDegree2Nodes(); } void LineMerger::buildEdgeStringsForIsolatedLoops() { buildEdgeStringsForUnprocessedNodes(); } void LineMerger::buildEdgeStringsForUnprocessedNodes() { #if GEOS_DEBUG cerr<<__FUNCTION__< Nodes; Nodes nodes; graph.getNodes(nodes); for (Nodes::size_type i=0, in=nodes.size(); iisMarked()) { assert(node->getDegree()==2); buildEdgeStringsStartingAt(node); node->setMarked(true); #if GEOS_DEBUG cerr<<" setMarked(true) : "<<*node< Nodes; Nodes nodes; graph.getNodes(nodes); for (Nodes::size_type i=0, in=nodes.size(); igetDegree()!=2) { buildEdgeStringsStartingAt(node); node->setMarked(true); #if GEOS_DEBUG cerr<<" setMarked(true) : "<<*node< &edges=node->getOutEdges()->getEdges(); size_t size = edges.size(); for (size_t i=0; i(edges[i])); LineMergeDirectedEdge *directedEdge=\ static_cast (edges[i]); if (directedEdge->getEdge()->isMarked()) { continue; } edgeStrings.push_back(buildEdgeStringStartingWith(directedEdge)); } } EdgeString* LineMerger::buildEdgeStringStartingWith(LineMergeDirectedEdge *start) { EdgeString *edgeString = new EdgeString(factory); LineMergeDirectedEdge *current=start; do { edgeString->add(current); current->getEdge()->setMarked(true); current=current->getNext(); } while (current!=NULL && current!=start); return edgeString; } /** * Returns the LineStrings built by the merging process. */ vector* LineMerger::getMergedLineStrings() { merge(); // Explicitly give ownership to the caller. vector* ret = mergedLineStrings; mergedLineStrings = NULL; return ret; } } // namespace geos.operation.linemerge } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/linemerge/LineSequencer.cpp0000644000175000017500000002657612206417145022323 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/linemerge/LineSequencer.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //using namespace geos::planargraph; using namespace geos::geom; //using namespace geos::planargraph::algorithm; #ifdef _MSC_VER #pragma warning(disable : 4127) #endif namespace geos { namespace operation { // geos.operation namespace linemerge { // geos.operation.linemerge /* static */ bool LineSequencer::isSequenced(const Geometry* geom) { const MultiLineString *mls; if ( 0 == (mls=dynamic_cast(geom)) ) { return true; } // the nodes in all subgraphs which have been completely scanned Coordinate::ConstSet prevSubgraphNodes; Coordinate::ConstVect currNodes; const Coordinate* lastNode = NULL; for (std::size_t i=0, n=mls->getNumGeometries(); i(mls->getGeometryN(i)); assert(lineptr); const LineString& line = *lineptr; const Coordinate* startNode = &(line.getCoordinateN(0)); const Coordinate* endNode = &(line.getCoordinateN(line.getNumPoints() - 1)); /** * If this linestring is connected to a previous subgraph, * geom is not sequenced */ if (prevSubgraphNodes.find(startNode) != prevSubgraphNodes.end()) { return false; } if (prevSubgraphNodes.find(endNode) != prevSubgraphNodes.end()) { return false; } if (lastNode != NULL) { if (! startNode->equals2D(*lastNode)) { // start new connected sequence prevSubgraphNodes.insert(currNodes.begin(), currNodes.end()); currNodes.clear(); } } currNodes.push_back(startNode); currNodes.push_back(endNode); lastNode = endNode; } return true; } /* private */ bool LineSequencer::hasSequence(planargraph::Subgraph& graph) { int oddDegreeCount = 0; for (planargraph::NodeMap::container::const_iterator it=graph.nodeBegin(), endIt=graph.nodeEnd(); it!=endIt; ++it) { planargraph::Node* node = it->second; if (node->getDegree() % 2 == 1) oddDegreeCount++; } return oddDegreeCount <= 2; } void LineSequencer::delAll( LineSequencer::Sequences& s) { for ( Sequences::iterator i=s.begin(), e=s.end(); i!=e; ++i ) { delete *i; } } /*private*/ LineSequencer::Sequences* LineSequencer::findSequences() { Sequences *sequences = new Sequences(); planargraph::algorithm::ConnectedSubgraphFinder csFinder(graph); vector subgraphs; csFinder.getConnectedSubgraphs(subgraphs); for (vector::const_iterator it=subgraphs.begin(), endIt=subgraphs.end(); it!=endIt; ++it ) { planargraph::Subgraph* subgraph = *it; if (hasSequence(*subgraph)) { planargraph::DirectedEdge::NonConstList* seq=findSequence(*subgraph); sequences->push_back(seq); } else { // if any subgraph cannot be sequenced, abort delete subgraph; delAll(*sequences); delete sequences; return NULL; } delete subgraph; } return sequences; } /*private*/ void LineSequencer::addLine(const LineString *lineString) { if (factory == NULL) { factory = lineString->getFactory(); } graph.addEdge(lineString); ++lineCount; } /* private */ void LineSequencer::computeSequence() { if (isRun) return; isRun = true; Sequences* sequences = findSequences(); if (sequences == NULL) return; sequencedGeometry = auto_ptr(buildSequencedGeometry(*sequences)); isSequenceableVar = true; delAll(*sequences); delete sequences; // Lines were missing from result assert(lineCount == sequencedGeometry->getNumGeometries()); // Result is not linear assert(dynamic_cast(sequencedGeometry.get()) || dynamic_cast(sequencedGeometry.get())); } /*private*/ Geometry* LineSequencer::buildSequencedGeometry(const Sequences& sequences) { auto_ptr lines(new Geometry::NonConstVect); for (Sequences::const_iterator i1=sequences.begin(), i1End=sequences.end(); i1 != i1End; ++i1) { planargraph::DirectedEdge::NonConstList& seq = *(*i1); for(planargraph::DirectedEdge::NonConstList::iterator i2=seq.begin(), i2End=seq.end(); i2 != i2End; ++i2) { const planargraph::DirectedEdge* de = *i2; assert(dynamic_cast(de->getEdge())); LineMergeEdge* e = static_cast(de->getEdge()); const LineString* line = e->getLine(); // lineToAdd will be a *copy* of input things LineString* lineToAdd; if ( ! de->getEdgeDirection() && ! line->isClosed() ) { lineToAdd = reverse(line); } else { Geometry* lineClone = line->clone(); lineToAdd = dynamic_cast(lineClone); assert(lineToAdd); } lines->push_back(lineToAdd); } } if ( lines->size() == 0 ) { return NULL; } else { Geometry::NonConstVect *l=lines.get(); lines.release(); return factory->buildGeometry(l); } } /*static private*/ LineString * LineSequencer::reverse(const LineString *line) { CoordinateSequence* cs=line->getCoordinates(); CoordinateSequence::reverse(cs); return line->getFactory()->createLineString(cs); } /*private static*/ const planargraph::Node* LineSequencer::findLowestDegreeNode(const planargraph::Subgraph& graph) { size_t minDegree = numeric_limits::max(); const planargraph::Node* minDegreeNode = NULL; for (planargraph::NodeMap::container::const_iterator it = graph.nodeBegin(), itEnd = graph.nodeEnd(); it != itEnd; ++it ) { const planargraph::Node* node = (*it).second; if (minDegreeNode == NULL || node->getDegree() < minDegree) { minDegree = node->getDegree(); minDegreeNode = node; } } return minDegreeNode; } /*private static*/ const planargraph::DirectedEdge* LineSequencer::findUnvisitedBestOrientedDE(const planargraph::Node* node) { using planargraph::DirectedEdge; using planargraph::DirectedEdgeStar; const DirectedEdge* wellOrientedDE = NULL; const DirectedEdge* unvisitedDE = NULL; const DirectedEdgeStar* des=node->getOutEdges(); for (DirectedEdge::NonConstVect::const_iterator i=des->begin(), e=des->end(); i!=e; ++i) { planargraph::DirectedEdge* de = *i; if (! de->getEdge()->isVisited()) { unvisitedDE = de; if (de->getEdgeDirection()) wellOrientedDE = de; } } if (wellOrientedDE != NULL) return wellOrientedDE; return unvisitedDE; } /*private*/ void LineSequencer::addReverseSubpath(const planargraph::DirectedEdge *de, planargraph::DirectedEdge::NonConstList& deList, planargraph::DirectedEdge::NonConstList::iterator lit, bool expectedClosed) { using planargraph::Node; using planargraph::DirectedEdge; // trace an unvisited path *backwards* from this de Node* endNode = de->getToNode(); Node* fromNode = NULL; while (true) { deList.insert(lit, de->getSym()); de->getEdge()->setVisited(true); fromNode = de->getFromNode(); const DirectedEdge* unvisitedOutDE = findUnvisitedBestOrientedDE(fromNode); // this must terminate, since we are continually marking edges as visited if (unvisitedOutDE == NULL) break; de = unvisitedOutDE->getSym(); } if ( expectedClosed ) { // the path should end at the toNode of this de, // otherwise we have an error util::Assert::isTrue(fromNode == endNode, "path not contiguos"); //assert(fromNode == endNode); } } /*private*/ planargraph::DirectedEdge::NonConstList* LineSequencer::findSequence(planargraph::Subgraph& graph) { using planargraph::DirectedEdge; using planargraph::Node; using planargraph::GraphComponent; GraphComponent::setVisited(graph.edgeBegin(), graph.edgeEnd(), false); const Node* startNode = findLowestDegreeNode(graph); const DirectedEdge *startDE = *(startNode->getOutEdges()->begin()); const DirectedEdge *startDESym = startDE->getSym(); DirectedEdge::NonConstList *seq = new DirectedEdge::NonConstList(); DirectedEdge::NonConstList::iterator lit=seq->begin(); addReverseSubpath(startDESym, *seq, lit, false); lit=seq->end(); while (lit != seq->begin()) { const DirectedEdge* prev = *(--lit); const DirectedEdge* unvisitedOutDE = findUnvisitedBestOrientedDE(prev->getFromNode()); if (unvisitedOutDE != NULL) addReverseSubpath(unvisitedOutDE->getSym(), *seq, lit, true); } // At this point, we have a valid sequence of graph DirectedEdges, // but it is not necessarily appropriately oriented relative to // the underlying geometry. DirectedEdge::NonConstList* orientedSeq = orient(seq); if (orientedSeq != seq) delete seq; return orientedSeq; } /* private */ planargraph::DirectedEdge::NonConstList* LineSequencer::orient(planargraph::DirectedEdge::NonConstList* seq) { using namespace geos::planargraph; const DirectedEdge* startEdge = seq->front(); const DirectedEdge* endEdge = seq->back(); Node* startNode = startEdge->getFromNode(); Node* endNode = endEdge->getToNode(); bool flipSeq = false; bool hasDegree1Node = \ startNode->getDegree() == 1 || endNode->getDegree() == 1; if (hasDegree1Node) { bool hasObviousStartNode = false; // test end edge before start edge, to make result stable // (ie. if both are good starts, pick the actual start if (endEdge->getToNode()->getDegree() == 1 && endEdge->getEdgeDirection() == false) { hasObviousStartNode = true; flipSeq = true; } if (startEdge->getFromNode()->getDegree() == 1 && startEdge->getEdgeDirection() == true) { hasObviousStartNode = true; flipSeq = false; } // since there is no obvious start node, // use any node of degree 1 if (! hasObviousStartNode) { // check if the start node should actually // be the end node if (startEdge->getFromNode()->getDegree() == 1) flipSeq = true; // if the end node is of degree 1, it is // properly the end node } } // if there is no degree 1 node, just use the sequence as is // (Could insert heuristic of taking direction of majority of // lines as overall direction) if (flipSeq) { return reverse(*seq); } return seq; } /* private */ planargraph::DirectedEdge::NonConstList* LineSequencer::reverse(planargraph::DirectedEdge::NonConstList& seq) { using namespace geos::planargraph; DirectedEdge::NonConstList* newSeq = new DirectedEdge::NonConstList(); DirectedEdge::NonConstList::iterator it=seq.begin(), itEnd=seq.end(); for (; it!=itEnd; ++it) { const DirectedEdge *de = *it; newSeq->push_front(de->getSym()); } return newSeq; } } // namespace geos.operation.linemerge } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/linemerge/Makefile.am0000644000175000017500000000053212206417145021071 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboplinemerge.la INCLUDES = -I$(top_srcdir)/include liboplinemerge_la_SOURCES = \ EdgeString.cpp \ LineMergeDirectedEdge.cpp \ LineMergeEdge.cpp \ LineMergeGraph.cpp \ LineMerger.cpp \ LineSequencer.cpp liboplinemerge_la_LIBADD = geos-3.4.2/src/operation/linemerge/Makefile.in0000644000175000017500000005404512206417164021113 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/linemerge DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboplinemerge_la_DEPENDENCIES = am_liboplinemerge_la_OBJECTS = EdgeString.lo LineMergeDirectedEdge.lo \ LineMergeEdge.lo LineMergeGraph.lo LineMerger.lo \ LineSequencer.lo liboplinemerge_la_OBJECTS = $(am_liboplinemerge_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liboplinemerge_la_SOURCES) DIST_SOURCES = $(liboplinemerge_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboplinemerge.la INCLUDES = -I$(top_srcdir)/include liboplinemerge_la_SOURCES = \ EdgeString.cpp \ LineMergeDirectedEdge.cpp \ LineMergeEdge.cpp \ LineMergeGraph.cpp \ LineMerger.cpp \ LineSequencer.cpp liboplinemerge_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/linemerge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/linemerge/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liboplinemerge.la: $(liboplinemerge_la_OBJECTS) $(liboplinemerge_la_DEPENDENCIES) $(CXXLINK) $(liboplinemerge_la_OBJECTS) $(liboplinemerge_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineMergeDirectedEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineMergeEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineMergeGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineMerger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineSequencer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/overlay/0000755000175000017500000000000012206417235016547 5ustar frankiefrankiegeos-3.4.2/src/operation/overlay/EdgeSetNoder.cpp0000644000175000017500000000354712206417145021574 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/EdgeSetNoder.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geomgraph::index; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay void EdgeSetNoder::addEdges(vector *edges) { inputEdges->insert(inputEdges->end(),edges->begin(),edges->end()); } vector* EdgeSetNoder::getNodedEdges() { EdgeSetIntersector *esi=new SimpleMCSweepLineIntersector(); SegmentIntersector *si=new SegmentIntersector(li,true,false); esi->computeIntersections(inputEdges,si,true); //Debug.println("has proper int = " + si.hasProperIntersection()); vector *splitEdges=new vector(); for(int i=0;i<(int)inputEdges->size();i++) { Edge* e=(*inputEdges)[i]; e->getEdgeIntersectionList().addSplitEdges(splitEdges); } return splitEdges; } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/ElevationMatrix.cpp0000644000175000017500000001235112206417145022370 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: original (by strk) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #define PARANOIA_LEVEL 0 #ifdef _MSC_VER #pragma warning(disable:4355) #endif using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay ElevationMatrixFilter::ElevationMatrixFilter(ElevationMatrix &newEm): em(newEm) { } ElevationMatrixFilter::~ElevationMatrixFilter() { } void ElevationMatrixFilter::filter_rw(Coordinate *c) const { #if GEOS_DEBUG cerr<<"ElevationMatrixFilter::filter_rw("<toString()<<") called" <z) ) return; double avgElevation = em.getAvgElevation(); try { const ElevationMatrixCell &emc = em.getCell(*c); c->z = emc.getAvg(); if ( ISNAN(c->z) ) c->z = avgElevation; #if GEOS_DEBUG cerr<<" z set to "<z<z = avgElevation; } } void ElevationMatrixFilter::filter_ro(const Coordinate *c) { #if GEOS_DEBUG cerr<<"ElevationMatrixFilter::filter_ro("<toString()<<") called" <apply_ro(&filter); } #if 0 void ElevationMatrix::add(const CoordinateSequence *cs) { unsigned int ncoords = cs->getSize(); for (unsigned int i=0; igetAt(i)); } } #endif void ElevationMatrix::add(const Coordinate &c) { if ( ISNAN(c.z) ) return; try { ElevationMatrixCell &emc = getCell(c); emc.add(c); } catch (const util::IllegalArgumentException& exp) { // coordinate do not overlap matrix cerr << "ElevationMatrix::add(" << c.toString() << "): Coordinate does not overlap grid extent: " << exp.what() << endl; return; } } ElevationMatrixCell & ElevationMatrix::getCell(const Coordinate &c) { int col, row; if ( ! cellwidth ) col=0; else { double xoffset = c.x - env.getMinX(); col = (int)(xoffset/cellwidth); if ( col == (int)cols ) col = cols-1; } if ( ! cellheight ) row=0; else { double yoffset = c.y - env.getMinY(); row = (int)(yoffset/cellheight); if ( row == (int)rows ) row = rows-1; } int celloffset = (cols*row)+col; if (celloffset<0 || celloffset >= (int)(cols*rows)) { ostringstream s; s<<"ElevationMatrix::getCell got a Coordinate out of grid extent ("<getCell(c); } double ElevationMatrix::getAvgElevation() const { if ( avgElevationComputed ) return avgElevation; double ztot=0; int zvals=0; for (unsigned int r=0; rapply_rw(&filter); } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos; geos-3.4.2/src/operation/overlay/ElevationMatrixCell.cpp0000644000175000017500000000333112206417145023166 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: original (by strk) * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay ElevationMatrixCell::ElevationMatrixCell(): ztot(0) { } ElevationMatrixCell::~ElevationMatrixCell() { } void ElevationMatrixCell::add(const Coordinate &c) { if ( !ISNAN(c.z) ) { if ( zvals.insert(c.z).second ) { ztot+=c.z; } } } void ElevationMatrixCell::add(double z) { if ( !ISNAN(z) ) { if ( zvals.insert(z).second ) { ztot+=z; } } } double ElevationMatrixCell::getTotal() const { return ztot; } double ElevationMatrixCell::getAvg() const { if ( ! zvals.size() ) return DoubleNotANumber; return (ztot/zvals.size()); } string ElevationMatrixCell::print() const { ostringstream ret; //ret<<"["< #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #define COMPUTE_Z 1 using namespace std; using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay LineBuilder::LineBuilder(OverlayOp *newOp, const GeometryFactory *newGeometryFactory, PointLocator *newPtLocator): op(newOp), geometryFactory(newGeometryFactory), ptLocator(newPtLocator), //lineEdgesList(new vector()), resultLineList(new vector()) { } LineBuilder::~LineBuilder() { } /* * @return a list of the LineStrings in the result of the * specified overlay operation */ vector* LineBuilder::build(OverlayOp::OpCode opCode) { findCoveredLineEdges(); collectLines(opCode); //labelIsolatedLines(&lineEdgesList); buildLines(opCode); return resultLineList; } /* * Find and mark L edges which are "covered" by the result area (if any). * L edges at nodes which also have A edges can be checked by checking * their depth at that node. * L edges at nodes which do not have A edges can be checked by doing a * point-in-polygon test with the previously computed result areas. */ void LineBuilder::findCoveredLineEdges() { // first set covered for all L edges at nodes which have A edges too map &nodeMap=op->getGraph().getNodeMap()->nodeMap; map::iterator it=nodeMap.begin(); map::iterator endIt=nodeMap.end(); for ( ; it!=endIt; ++it) { Node *node=it->second; //node.print(System.out); assert(dynamic_cast(node->getEdges())); DirectedEdgeStar* des=static_cast(node->getEdges()); des->findCoveredLineEdges(); //((DirectedEdgeStar*)node->getEdges())->findCoveredLineEdges(); } /* * For all L edges which weren't handled by the above, * use a point-in-poly test to determine whether they are covered */ vector *ee=op->getGraph().getEdgeEnds(); for(size_t i=0, s=ee->size(); i((*ee)[i])); DirectedEdge *de=static_cast((*ee)[i]); Edge *e=de->getEdge(); if (de->isLineEdge() && !e->isCoveredSet()) { bool isCovered=op->isCoveredByA(de->getCoordinate()); e->setCovered(isCovered); } } } void LineBuilder::collectLines(OverlayOp::OpCode opCode) { vector *ee=op->getGraph().getEdgeEnds(); for(size_t i=0, s=ee->size(); i((*ee)[i])); DirectedEdge *de=static_cast((*ee)[i]); collectLineEdge(de, opCode, &lineEdgesList); collectBoundaryTouchEdge(de, opCode, &lineEdgesList); } } void LineBuilder::collectLineEdge(DirectedEdge *de, OverlayOp::OpCode opCode, vector *edges) { // include L edges which are in the result if (de->isLineEdge()) { const Label& label = de->getLabel(); Edge *e = de->getEdge(); if (!de->isVisited() && OverlayOp::isResultOfOp(label, opCode) && !e->isCovered() ) { //Debug.println("de: "+de.getLabel()); //Debug.println("edge: "+e.getLabel()); edges->push_back(e); de->setVisitedEdge(true); } } } /*private*/ void LineBuilder::collectBoundaryTouchEdge(DirectedEdge *de, OverlayOp::OpCode opCode, vector *edges) { if (de->isLineEdge()) return; // only interested in area edges if (de->isVisited()) return; // already processed // added to handle dimensional collapses if (de->isInteriorAreaEdge()) return; // if the edge linework is already included, don't include it again if (de->getEdge()->isInResult()) return; // sanity check for labelling of result edgerings assert( ! ( de->isInResult() || de->getSym()->isInResult() ) || ! de->getEdge()->isInResult() ); // include the linework if it's in the result of the operation const Label& label = de->getLabel(); if ( OverlayOp::isResultOfOp(label, opCode) && opCode == OverlayOp::opINTERSECTION ) { edges->push_back(de->getEdge()); de->setVisitedEdge(true); } } void LineBuilder::buildLines(OverlayOp::OpCode /* opCode */) { for(size_t i=0, s=lineEdgesList.size(); igetCoordinates()->clone(); #if COMPUTE_Z propagateZ(cs); #endif LineString *line=geometryFactory->createLineString(cs); resultLineList->push_back(line); e->setInResult(true); } } /* * If the given CoordinateSequence has mixed 3d/2d vertexes * set Z for all vertexes missing it. * The Z value is interpolated between 3d vertexes and copied * from a 3d vertex to the end. */ void LineBuilder::propagateZ(CoordinateSequence *cs) { size_t i; #if GEOS_DEBUG cerr<<"LineBuilder::propagateZ() called"<v3d; // vertex 3d size_t cssize = cs->getSize(); for (i=0; igetAt(i).z) ) v3d.push_back(i); } #if GEOS_DEBUG cerr<<" found "<getAt(v3d[0]).z; for (int j=0; jgetAt(j); buf.z = z; cs->setAt(buf, j); } } // interpolate inbetweens size_t prev=v3d[0]; for (i=1; i 1) { const Coordinate &cto = cs->getAt(curr); const Coordinate &cfrom = cs->getAt(prev); double gap = cto.z-cfrom.z; double zstep = gap/dist; double z = cfrom.z; for (int j=prev+1; jgetAt(j); z+=zstep; buf.z = z; cs->setAt(buf, j); } } prev = curr; } // fill final part if ( prev < cssize-1 ) { double z = cs->getAt(prev).z; for (size_t j=prev+1; jgetAt(j); buf.z = z; cs->setAt(buf, j); } } } void LineBuilder::labelIsolatedLines(vector *edgesList) { for(size_t i=0, s=edgesList->size(); igetLabel(); //n.print(System.out); if (e->isIsolated()) { if (label.isNull(0)) labelIsolatedLine(e, 0); else labelIsolatedLine(e, 1); } } } /* * Label an isolated node with its relationship to the target geometry. */ void LineBuilder::labelIsolatedLine(Edge *e, int targetIndex) { int loc = ptLocator->locate( e->getCoordinate(), op->getArgGeometry(targetIndex) ); e->getLabel().setLocation(targetIndex,loc); } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/Makefile.am0000644000175000017500000000130712206417145020604 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopoverlay.la INCLUDES = -I$(top_srcdir)/include libopoverlay_la_SOURCES = \ EdgeSetNoder.cpp \ ElevationMatrixCell.cpp \ ElevationMatrix.cpp \ LineBuilder.cpp \ MaximalEdgeRing.cpp \ MinimalEdgeRing.cpp \ OverlayNodeFactory.cpp \ OverlayOp.cpp \ PointBuilder.cpp \ PolygonBuilder.cpp \ snap/GeometrySnapper.cpp \ snap/LineStringSnapper.cpp \ snap/SnapOverlayOp.cpp \ snap/SnapIfNeededOverlayOp.cpp \ validate/FuzzyPointLocator.cpp \ validate/OffsetPointGenerator.cpp \ validate/OverlayResultValidator.cpp libopoverlay_la_LIBADD = geos-3.4.2/src/operation/overlay/Makefile.in0000644000175000017500000007554512206417164020635 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/overlay DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopoverlay_la_DEPENDENCIES = am_libopoverlay_la_OBJECTS = EdgeSetNoder.lo ElevationMatrixCell.lo \ ElevationMatrix.lo LineBuilder.lo MaximalEdgeRing.lo \ MinimalEdgeRing.lo OverlayNodeFactory.lo OverlayOp.lo \ PointBuilder.lo PolygonBuilder.lo GeometrySnapper.lo \ LineStringSnapper.lo SnapOverlayOp.lo SnapIfNeededOverlayOp.lo \ FuzzyPointLocator.lo OffsetPointGenerator.lo \ OverlayResultValidator.lo libopoverlay_la_OBJECTS = $(am_libopoverlay_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopoverlay_la_SOURCES) DIST_SOURCES = $(libopoverlay_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopoverlay.la INCLUDES = -I$(top_srcdir)/include libopoverlay_la_SOURCES = \ EdgeSetNoder.cpp \ ElevationMatrixCell.cpp \ ElevationMatrix.cpp \ LineBuilder.cpp \ MaximalEdgeRing.cpp \ MinimalEdgeRing.cpp \ OverlayNodeFactory.cpp \ OverlayOp.cpp \ PointBuilder.cpp \ PolygonBuilder.cpp \ snap/GeometrySnapper.cpp \ snap/LineStringSnapper.cpp \ snap/SnapOverlayOp.cpp \ snap/SnapIfNeededOverlayOp.cpp \ validate/FuzzyPointLocator.cpp \ validate/OffsetPointGenerator.cpp \ validate/OverlayResultValidator.cpp libopoverlay_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/overlay/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/overlay/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopoverlay.la: $(libopoverlay_la_OBJECTS) $(libopoverlay_la_DEPENDENCIES) $(CXXLINK) $(libopoverlay_la_OBJECTS) $(libopoverlay_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeSetNoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ElevationMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ElevationMatrixCell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FuzzyPointLocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometrySnapper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineStringSnapper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MaximalEdgeRing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MinimalEdgeRing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OffsetPointGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OverlayNodeFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OverlayOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OverlayResultValidator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PointBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SnapIfNeededOverlayOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SnapOverlayOp.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< GeometrySnapper.lo: snap/GeometrySnapper.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometrySnapper.lo -MD -MP -MF $(DEPDIR)/GeometrySnapper.Tpo -c -o GeometrySnapper.lo `test -f 'snap/GeometrySnapper.cpp' || echo '$(srcdir)/'`snap/GeometrySnapper.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometrySnapper.Tpo $(DEPDIR)/GeometrySnapper.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snap/GeometrySnapper.cpp' object='GeometrySnapper.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometrySnapper.lo `test -f 'snap/GeometrySnapper.cpp' || echo '$(srcdir)/'`snap/GeometrySnapper.cpp LineStringSnapper.lo: snap/LineStringSnapper.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineStringSnapper.lo -MD -MP -MF $(DEPDIR)/LineStringSnapper.Tpo -c -o LineStringSnapper.lo `test -f 'snap/LineStringSnapper.cpp' || echo '$(srcdir)/'`snap/LineStringSnapper.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineStringSnapper.Tpo $(DEPDIR)/LineStringSnapper.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snap/LineStringSnapper.cpp' object='LineStringSnapper.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineStringSnapper.lo `test -f 'snap/LineStringSnapper.cpp' || echo '$(srcdir)/'`snap/LineStringSnapper.cpp SnapOverlayOp.lo: snap/SnapOverlayOp.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SnapOverlayOp.lo -MD -MP -MF $(DEPDIR)/SnapOverlayOp.Tpo -c -o SnapOverlayOp.lo `test -f 'snap/SnapOverlayOp.cpp' || echo '$(srcdir)/'`snap/SnapOverlayOp.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SnapOverlayOp.Tpo $(DEPDIR)/SnapOverlayOp.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snap/SnapOverlayOp.cpp' object='SnapOverlayOp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SnapOverlayOp.lo `test -f 'snap/SnapOverlayOp.cpp' || echo '$(srcdir)/'`snap/SnapOverlayOp.cpp SnapIfNeededOverlayOp.lo: snap/SnapIfNeededOverlayOp.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SnapIfNeededOverlayOp.lo -MD -MP -MF $(DEPDIR)/SnapIfNeededOverlayOp.Tpo -c -o SnapIfNeededOverlayOp.lo `test -f 'snap/SnapIfNeededOverlayOp.cpp' || echo '$(srcdir)/'`snap/SnapIfNeededOverlayOp.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SnapIfNeededOverlayOp.Tpo $(DEPDIR)/SnapIfNeededOverlayOp.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='snap/SnapIfNeededOverlayOp.cpp' object='SnapIfNeededOverlayOp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SnapIfNeededOverlayOp.lo `test -f 'snap/SnapIfNeededOverlayOp.cpp' || echo '$(srcdir)/'`snap/SnapIfNeededOverlayOp.cpp FuzzyPointLocator.lo: validate/FuzzyPointLocator.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FuzzyPointLocator.lo -MD -MP -MF $(DEPDIR)/FuzzyPointLocator.Tpo -c -o FuzzyPointLocator.lo `test -f 'validate/FuzzyPointLocator.cpp' || echo '$(srcdir)/'`validate/FuzzyPointLocator.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/FuzzyPointLocator.Tpo $(DEPDIR)/FuzzyPointLocator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='validate/FuzzyPointLocator.cpp' object='FuzzyPointLocator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FuzzyPointLocator.lo `test -f 'validate/FuzzyPointLocator.cpp' || echo '$(srcdir)/'`validate/FuzzyPointLocator.cpp OffsetPointGenerator.lo: validate/OffsetPointGenerator.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OffsetPointGenerator.lo -MD -MP -MF $(DEPDIR)/OffsetPointGenerator.Tpo -c -o OffsetPointGenerator.lo `test -f 'validate/OffsetPointGenerator.cpp' || echo '$(srcdir)/'`validate/OffsetPointGenerator.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OffsetPointGenerator.Tpo $(DEPDIR)/OffsetPointGenerator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='validate/OffsetPointGenerator.cpp' object='OffsetPointGenerator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OffsetPointGenerator.lo `test -f 'validate/OffsetPointGenerator.cpp' || echo '$(srcdir)/'`validate/OffsetPointGenerator.cpp OverlayResultValidator.lo: validate/OverlayResultValidator.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OverlayResultValidator.lo -MD -MP -MF $(DEPDIR)/OverlayResultValidator.Tpo -c -o OverlayResultValidator.lo `test -f 'validate/OverlayResultValidator.cpp' || echo '$(srcdir)/'`validate/OverlayResultValidator.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OverlayResultValidator.Tpo $(DEPDIR)/OverlayResultValidator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='validate/OverlayResultValidator.cpp' object='OverlayResultValidator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OverlayResultValidator.lo `test -f 'validate/OverlayResultValidator.cpp' || echo '$(srcdir)/'`validate/OverlayResultValidator.cpp mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/overlay/MaximalEdgeRing.cpp0000644000175000017500000000627312206417145022260 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/MaximalEdgeRing.java rev. 1.15 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay /*public*/ // CGAlgorithms obsoleted MaximalEdgeRing::MaximalEdgeRing(DirectedEdge *start, const GeometryFactory *geometryFactory) // throw(const TopologyException &) : EdgeRing(start, geometryFactory) { computePoints(start); computeRing(); #if GEOS_DEBUG cerr << "MaximalEdgeRing[" << this << "] ctor" << endl; #endif } /*public*/ MaximalEdgeRing::~MaximalEdgeRing() { #if GEOS_DEBUG cerr << "MaximalEdgeRing[" << this << "] dtor" << endl; #endif } /*public*/ DirectedEdge* MaximalEdgeRing::getNext(DirectedEdge *de) { return de->getNext(); } /*public*/ void MaximalEdgeRing::setEdgeRing(DirectedEdge *de,EdgeRing *er) { de->setEdgeRing(er); } /*public*/ void MaximalEdgeRing::linkDirectedEdgesForMinimalEdgeRings() { DirectedEdge* de=startDe; do { Node* node=de->getNode(); EdgeEndStar* ees = node->getEdges(); assert(dynamic_cast(ees)); DirectedEdgeStar* des = static_cast(ees); des->linkMinimalDirectedEdges(this); de=de->getNext(); } while (de!=startDe); } /*public*/ vector* MaximalEdgeRing::buildMinimalRings() { vector *minEdgeRings=new vector; buildMinimalRings(*minEdgeRings); return minEdgeRings; } /*public*/ void MaximalEdgeRing::buildMinimalRings(vector& minEdgeRings) { DirectedEdge *de=startDe; do { if(de->getMinEdgeRing()==NULL) { MinimalEdgeRing *minEr=new MinimalEdgeRing(de, geometryFactory); minEdgeRings.push_back(minEr); } de=de->getNext(); } while(de!=startDe); } /*public*/ void MaximalEdgeRing::buildMinimalRings(vector& minEdgeRings) { DirectedEdge *de=startDe; do { if(de->getMinEdgeRing()==NULL) { MinimalEdgeRing *minEr=new MinimalEdgeRing(de, geometryFactory); minEdgeRings.push_back(minEr); } de=de->getNext(); } while(de!=startDe); } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/MinimalEdgeRing.cpp0000644000175000017500000000263712206417145022256 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/MinimalEdgeRing.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #include #include #ifndef GEOS_INLINE #include #endif #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #endif namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay MinimalEdgeRing::MinimalEdgeRing(geomgraph::DirectedEdge *start, const geom::GeometryFactory *geometryFactory) : geomgraph::EdgeRing(start, geometryFactory) { computePoints(start); computeRing(); #if GEOS_DEBUG std::cerr << "MinimalEdgeRing[" << this << "] ctor" << std::endl; #endif } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/OverlayNodeFactory.cpp0000644000175000017500000000240412206417145023032 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/OverlayNodeFactory.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #include #include #include using namespace geos::geomgraph; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay Node* OverlayNodeFactory::createNode(const geom::Coordinate &coord) const { return new Node(coord, new DirectedEdgeStar()); } const NodeFactory & OverlayNodeFactory::instance() { static OverlayNodeFactory onf; return onf; } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/OverlayOp.cpp0000644000175000017500000006331312206417145021201 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/OverlayOp.java r567 (JTS-1.12+) * **********************************************************************/ #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 // for auto_ptr #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #define COMPUTE_Z 1 #define USE_ELEVATION_MATRIX 1 #define USE_INPUT_AVGZ 0 // A result validator using FuzzyPointLocator to // check validity of result. Pretty expensive... //#define ENABLE_OVERLAY_RESULT_VALIDATOR 1 // Edge noding validator, more lightweighted and // catches robustness errors earlier #define ENABLE_EDGE_NODING_VALIDATOR 1 // Define this to get some reports about validations //#define GEOS_DEBUG_VALIDATION 1 // Other validators, not found in JTS //#define ENABLE_OTHER_OVERLAY_RESULT_VALIDATORS 1 using namespace std; using namespace geos::geom; using namespace geos::geomgraph; using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay /* static public */ Geometry* OverlayOp::overlayOp(const Geometry *geom0, const Geometry *geom1, OverlayOp::OpCode opCode) // throw(TopologyException *) { OverlayOp gov(geom0, geom1); return gov.getResultGeometry(opCode); } /* static public */ bool OverlayOp::isResultOfOp(const Label& label, OverlayOp::OpCode opCode) { int loc0 = label.getLocation(0); int loc1 = label.getLocation(1); return isResultOfOp(loc0, loc1, opCode); } /* static public */ bool OverlayOp::isResultOfOp(int loc0, int loc1, OverlayOp::OpCode opCode) { if (loc0==Location::BOUNDARY) loc0=Location::INTERIOR; if (loc1==Location::BOUNDARY) loc1=Location::INTERIOR; switch (opCode) { case opINTERSECTION: return loc0==Location::INTERIOR && loc1==Location::INTERIOR; case opUNION: return loc0==Location::INTERIOR || loc1==Location::INTERIOR; case opDIFFERENCE: return loc0==Location::INTERIOR && loc1!=Location::INTERIOR; case opSYMDIFFERENCE: return (loc0==Location::INTERIOR && loc1!=Location::INTERIOR) || (loc0!=Location::INTERIOR && loc1==Location::INTERIOR); } return false; } OverlayOp::OverlayOp(const Geometry *g0, const Geometry *g1) : // this builds graphs in arg[0] and arg[1] GeometryGraphOperation(g0, g1), /* * Use factory of primary geometry. * Note that this does NOT handle mixed-precision arguments * where the second arg has greater precision than the first. */ geomFact(g0->getFactory()), resultGeom(NULL), graph(OverlayNodeFactory::instance()), resultPolyList(NULL), resultLineList(NULL), resultPointList(NULL) { #if COMPUTE_Z #if USE_INPUT_AVGZ avgz[0] = DoubleNotANumber; avgz[1] = DoubleNotANumber; avgzcomputed[0] = false; avgzcomputed[1] = false; #endif // USE_INPUT_AVGZ Envelope env(*(g0->getEnvelopeInternal())); env.expandToInclude(g1->getEnvelopeInternal()); #if USE_ELEVATION_MATRIX elevationMatrix = new ElevationMatrix(env, 3, 3); elevationMatrix->add(g0); elevationMatrix->add(g1); #if GEOS_DEBUG cerr<print()< *edges) { for_each(edges->begin(), edges->end(), bind1st(mem_fun(&OverlayOp::insertUniqueEdge), this)); #if GEOS_DEBUG cerr<<"OverlayOp::insertUniqueEdges("<size()<<"): "<size();i++) { Edge *e=(*edges)[i]; if ( ! e ) cerr <<" NULL"<print() << endl; } #endif // GEOS_DEBUG } /*private*/ void OverlayOp::replaceCollapsedEdges() { vector& edges=edgeList.getEdges(); for(size_t i=0, nedges=edges.size(); iisCollapsed()) { #if GEOS_DEBUG cerr << " replacing collapsed edge " << i << endl; #endif // GEOS_DEBUG //Debug.print(e); edges[i]=e->getCollapsedEdge(); // should we keep this alive some more ? delete e; } } } /*private*/ void OverlayOp::copyPoints(int argIndex) { NodeMap::container& nodeMap=arg[argIndex]->getNodeMap()->nodeMap; for ( NodeMap::const_iterator it=nodeMap.begin(), itEnd=nodeMap.end(); it != itEnd; ++it ) { Node* graphNode=it->second; assert(graphNode); Node* newNode=graph.addNode(graphNode->getCoordinate()); assert(newNode); newNode->setLabel(argIndex, graphNode->getLabel().getLocation(argIndex)); } } /*private*/ void OverlayOp::computeLabelling() //throw(TopologyException *) // and what else ? { NodeMap::container& nodeMap=graph.getNodeMap()->nodeMap; #if GEOS_DEBUG cerr<<"OverlayOp::computeLabelling(): at call time: "<second; #if GEOS_DEBUG cerr<<" "<print()<<" has "<getEdges()->getEdges().size()<<" edgeEnds"<getEdges()->computeLabelling(&arg); } #if GEOS_DEBUG cerr<<"OverlayOp::computeLabelling(): after edge labelling: "<nodeMap; #if GEOS_DEBUG cerr<<"OverlayOp::mergeSymLabels() scanning "<second; EdgeEndStar* ees=node->getEdges(); assert(dynamic_cast(ees)); static_cast(ees)->mergeSymLabels(); //((DirectedEdgeStar*)node->getEdges())->mergeSymLabels(); #if GEOS_DEBUG cerr<<" "<print()<nodeMap; #if GEOS_DEBUG cerr << "OverlayOp::updateNodeLabelling() scanning " << nodeMap.size() << " nodes from map:" << endl; #endif for ( NodeMap::const_iterator it=nodeMap.begin(), itEnd=nodeMap.end(); it != itEnd; ++it ) { Node *node=it->second; EdgeEndStar* ees = node->getEdges(); assert( dynamic_cast(ees) ); DirectedEdgeStar* des = static_cast(ees); Label &lbl = des->getLabel(); node->getLabel().merge(lbl); #if GEOS_DEBUG cerr<<" "<print()<nodeMap; #if GEOS_DEBUG cerr<<"OverlayOp::labelIncompleteNodes() scanning "<second; const Label& label = n->getLabel(); if (n->isIsolated()) { if (label.isNull(0)) { labelIncompleteNode(n,0); } else { labelIncompleteNode(n, 1); } } // now update the labelling for the DirectedEdges incident on this node EdgeEndStar* ees = n->getEdges(); assert( dynamic_cast(ees) ); DirectedEdgeStar* des = static_cast(ees); des->updateLabelling(label); //((DirectedEdgeStar*)n->getEdges())->updateLabelling(label); //n.print(System.out); } } /*private*/ void OverlayOp::labelIncompleteNode(Node *n, int targetIndex) { #if GEOS_DEBUG cerr<<"OverlayOp::labelIncompleteNode("<print()<<", "<getGeometry(); int loc=ptLocator.locate(n->getCoordinate(), targetGeom); n->getLabel().setLocation(targetIndex, loc); #if GEOS_DEBUG cerr<<" after location set: "<print()<(targetGeom); if ( loc == Location::INTERIOR && line ) { mergeZ(n, line); } const Polygon *poly = dynamic_cast(targetGeom); if ( loc == Location::BOUNDARY && poly ) { mergeZ(n, poly); } #if USE_INPUT_AVGZ if ( loc == Location::INTERIOR && poly ) { n->addZ(getAverageZ(targetIndex)); } #endif // USE_INPUT_AVGZ #endif // COMPUTE_Z } /*static private*/ double OverlayOp::getAverageZ(const Polygon *poly) { double totz = 0.0; int zcount = 0; const CoordinateSequence *pts = poly->getExteriorRing()->getCoordinatesRO(); size_t npts=pts->getSize(); for (size_t i=0; igetAt(i); if ( !ISNAN(c.z) ) { totz += c.z; zcount++; } } if ( zcount ) return totz/zcount; else return DoubleNotANumber; } /*private*/ double OverlayOp::getAverageZ(int targetIndex) { if ( avgzcomputed[targetIndex] ) return avgz[targetIndex]; const Geometry *targetGeom = arg[targetIndex]->getGeometry(); // OverlayOp::getAverageZ(int) called with a ! polygon assert(targetGeom->getGeometryTypeId() == GEOS_POLYGON); const Polygon* p = dynamic_cast(targetGeom); avgz[targetIndex] = getAverageZ(p); avgzcomputed[targetIndex] = true; return avgz[targetIndex]; } /*private*/ int OverlayOp::mergeZ(Node *n, const Polygon *poly) const { const LineString *ls; int found = 0; ls = poly->getExteriorRing(); found = mergeZ(n, ls); if ( found ) return 1; for (size_t i=0, nr=poly->getNumInteriorRing(); igetInteriorRingN(i); found = mergeZ(n, ls); if ( found ) return 1; } return 0; } /*private*/ int OverlayOp::mergeZ(Node *n, const LineString *line) const { const CoordinateSequence *pts = line->getCoordinatesRO(); const Coordinate &p = n->getCoordinate(); LineIntersector li; for(size_t i=1, size=pts->size(); igetAt(i-1); const Coordinate &p1=pts->getAt(i); li.computeIntersection(p, p0, p1); if (li.hasIntersection()) { if ( p == p0 ) { n->addZ(p0.z); } else if ( p == p1 ) { n->addZ(p1.z); } else { n->addZ(LineIntersector::interpolateZ(p, p0, p1)); } return 1; } } return 0; } /*private*/ void OverlayOp::findResultAreaEdges(OverlayOp::OpCode opCode) { vector *ee=graph.getEdgeEnds(); for(size_t i=0, e=ee->size(); igetLabel(); if ( label.isArea() && !de->isInteriorAreaEdge() && isResultOfOp(label.getLocation(0,Position::RIGHT), label.getLocation(1,Position::RIGHT), opCode) ) { de->setInResult(true); //Debug.print("in result "); Debug.println(de); } } } /*private*/ void OverlayOp::cancelDuplicateResultEdges() { // remove any dirEdges whose sym is also included // (they "cancel each other out") vector *ee=graph.getEdgeEnds(); for(size_t i=0, eesize=ee->size(); i( (*ee)[i] ); DirectedEdge *sym=de->getSym(); if (de->isInResult() && sym->isInResult()) { de->setInResult(false); sym->setInResult(false); //Debug.print("cancelled "); Debug.println(de); Debug.println(sym); } } } /*public*/ bool OverlayOp::isCoveredByLA(const Coordinate& coord) { if (isCovered(coord,resultLineList)) return true; if (isCovered(coord,resultPolyList)) return true; return false; } /*public*/ bool OverlayOp::isCoveredByA(const Coordinate& coord) { if (isCovered(coord,resultPolyList)) return true; return false; } /*private*/ bool OverlayOp::isCovered(const Coordinate& coord,vector *geomList) { for(size_t i=0, n=geomList->size(); i *geomList) { for(size_t i=0, n=geomList->size(); i *geomList) { for(size_t i=0, n=geomList->size(); i *nResultPointList, vector *nResultLineList, vector *nResultPolyList) { size_t nPoints=nResultPointList->size(); size_t nLines=nResultLineList->size(); size_t nPolys=nResultPolyList->size(); vector *geomList=new vector(); geomList->reserve(nPoints+nLines+nPolys); // element geometries of the result are always in the order P,L,A geomList->insert(geomList->end(), nResultPointList->begin(), nResultPointList->end()); geomList->insert(geomList->end(), nResultLineList->begin(), nResultLineList->end()); geomList->insert(geomList->end(), nResultPolyList->begin(), nResultPolyList->end()); // build the most specific geometry possible Geometry *g=geomFact->buildGeometry(geomList); return g; } /*private*/ void OverlayOp::computeOverlay(OverlayOp::OpCode opCode) //throw(TopologyException *) { // copy points from input Geometries. // This ensures that any Point geometries // in the input are considered for inclusion in the result set copyPoints(0); copyPoints(1); GEOS_CHECK_FOR_INTERRUPTS(); // node the input Geometries delete arg[0]->computeSelfNodes(li,false); delete arg[1]->computeSelfNodes(li,false); #if GEOS_DEBUG cerr<<"OverlayOp::computeOverlay: computed SelfNodes"<computeEdgeIntersections(arg[1], &li,true); #if GEOS_DEBUG cerr<<"OverlayOp::computeOverlay: computed EdgeIntersections"< baseSplitEdges; arg[0]->computeSplitEdges(&baseSplitEdges); arg[1]->computeSplitEdges(&baseSplitEdges); GEOS_CHECK_FOR_INTERRUPTS(); // add the noded edges to this result graph insertUniqueEdges(&baseSplitEdges); computeLabelsFromDepths(); replaceCollapsedEdges(); //Debug.println(edgeList); GEOS_CHECK_FOR_INTERRUPTS(); #ifdef ENABLE_EDGE_NODING_VALIDATOR // { /** * Check that the noding completed correctly. * * This test is slow, but necessary in order to catch * robustness failure situations. * If an exception is thrown because of a noding failure, * then snapping will be performed, which will hopefully avoid * the problem. * In the future hopefully a faster check can be developed. * */ try { // Will throw TopologyException if noding is // found to be invalid EdgeNodingValidator::checkValid(edgeList.getEdges()); #ifdef GEOS_DEBUG_VALIDATION cout << "EdgeNodingValidator accepted the noding" << endl; #endif } catch (const util::TopologyException& ex) { #ifdef GEOS_DEBUG_VALIDATION cout << "EdgeNodingValidator found noding invalid: " << ex.what() << endl; #endif // In the error scenario, the edgeList is not properly // deleted. Cannot add to the destructor of EdgeList // (as it should) because // "graph.addEdges(edgeList.getEdges());" below // takes over edgeList ownership in the success case. edgeList.clearList(); throw ex; } #endif // ENABLE_EDGE_NODING_VALIDATOR } GEOS_CHECK_FOR_INTERRUPTS(); graph.addEdges(edgeList.getEdges()); GEOS_CHECK_FOR_INTERRUPTS(); // this can throw TopologyException * computeLabelling(); //Debug.printWatch(); labelIncompleteNodes(); //Debug.printWatch(); //nodeMap.print(System.out); GEOS_CHECK_FOR_INTERRUPTS(); /* * The ordering of building the result Geometries is important. * Areas must be built before lines, which must be built * before points. * This is so that lines which are covered by areas are not * included explicitly, and similarly for points. */ findResultAreaEdges(opCode); cancelDuplicateResultEdges(); GEOS_CHECK_FOR_INTERRUPTS(); PolygonBuilder polyBuilder(geomFact); // might throw a TopologyException * polyBuilder.add(&graph); vector *gv=polyBuilder.getPolygons(); size_t gvsize=gv->size(); resultPolyList=new vector(gvsize); for(size_t i=0; i((*gv)[i]); (*resultPolyList)[i]=p; } delete gv; LineBuilder lineBuilder(this,geomFact,&ptLocator); resultLineList=lineBuilder.build(opCode); PointBuilder pointBuilder(this,geomFact,&ptLocator); resultPointList=pointBuilder.build(opCode); // gather the results from all calculations into a single // Geometry for the result set resultGeom=computeGeometry(resultPointList,resultLineList,resultPolyList); checkObviouslyWrongResult(opCode); #if USE_ELEVATION_MATRIX elevationMatrix->elevate(resultGeom); #endif // USE_ELEVATION_MATRIX } /*protected*/ void OverlayOp::insertUniqueEdge(Edge *e) { //Debug.println(e); #if GEOS_DEBUG cerr<<"OverlayOp::insertUniqueEdge("<print()<<")"< MD 8 Oct 03 speed up identical edge lookup // fast lookup Edge *existingEdge = edgeList.findEqualEdge(e); // If an identical edge already exists, simply update its label if (existingEdge) { #if GEOS_DEBUG cerr<<" found identical edge, should merge Z"<getLabel(); Label labelToMerge = e->getLabel(); // check if new edge is in reverse direction to existing edge // if so, must flip the label before merging it if (!existingEdge->isPointwiseEqual(e)) { labelToMerge.flip(); } Depth &depth = existingEdge->getDepth(); // if this is the first duplicate found for this edge, // initialize the depths if (depth.isNull()) { depth.add(existingLabel); } depth.add(labelToMerge); existingLabel.merge(labelToMerge); //Debug.print("inserted edge: "); Debug.println(e); //Debug.print("existing edge: "); Debug.println(existingEdge); dupEdges.push_back(e); } else { // no matching existing edge was found #if GEOS_DEBUG cerr<<" no matching existing edge"<getLabel(); Depth &depth = e->getDepth(); /* * Only check edges for which there were duplicates, * since these are the only ones which might * be the result of dimensional collapses. */ if (depth.isNull()) continue; depth.normalize(); for (int i=0;i<2;i++) { if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) { /* * if the depths are equal, this edge is the result of * the dimensional collapse of two or more edges. * It has the same location on both sides of the edge, * so it has collapsed to a line. */ if (depth.getDelta(i)==0) { lbl.toLine(i); } else { /* * This edge may be the result of a dimensional collapse, * but it still has different locations on both sides. The * label of the edge must be updated to reflect the resultant * side locations indicated by the depth values. */ assert(!depth.isNull(i,Position::LEFT)); // depth of LEFT side has not been initialized lbl.setLocation(i,Position::LEFT,depth.getLocation(i,Position::LEFT)); assert(!depth.isNull(i,Position::RIGHT)); // depth of RIGHT side has not been initialized lbl.setLocation(i,Position::RIGHT,depth.getLocation(i,Position::RIGHT)); } } } } } struct PointCoveredByAny: public geom::CoordinateFilter { const vector& geoms; PointLocator locator; PointCoveredByAny(const vector& nGeoms) : geoms(nGeoms) {} void filter_ro(const Coordinate* coord) { for (size_t i=0, n=geoms.size(); igetGeometry()->getDimension() == Dimension::A && arg[1]->getGeometry()->getDimension() == Dimension::A ) { // Area of result must be less or equal area of smaller geom double area0 = arg[0]->getGeometry()->getArea(); double area1 = arg[1]->getGeometry()->getArea(); double minarea = min(area0, area1); double resultArea = resultGeom->getArea(); if ( resultArea > minarea ) { throw util::TopologyException("Obviously wrong result: " "area of intersection " "result is bigger then minimum area between " "input geometries"); } } else if ( opCode == opDIFFERENCE && arg[0]->getGeometry()->getDimension() == Dimension::A && arg[1]->getGeometry()->getDimension() == Dimension::A ) { // Area of result must be less or equal area of first geom double area0 = arg[0]->getGeometry()->getArea(); double resultArea = resultGeom->getArea(); if ( resultArea > area0 ) { throw util::TopologyException("Obviously wrong result: " "area of difference " "result is bigger then area of first " "input geometry"); } // less obvious check: // each vertex in first geom must be either covered by // result or second geom vector testGeoms; testGeoms.reserve(2); testGeoms.push_back(resultGeom); testGeoms.push_back(arg[1]->getGeometry()); PointCoveredByAny tester(testGeoms); arg[0]->getGeometry()->apply_ro(&tester); } // Add your tests here #else ::geos::ignore_unused_variable_warning(opCode); #endif #ifdef ENABLE_OVERLAY_RESULT_VALIDATOR // This only work for FLOATING precision if ( resultPrecisionModel->isFloating() ) { validate::OverlayResultValidator validator( *(arg[0]->getGeometry()), *(arg[1]->getGeometry()), *(resultGeom)); bool isvalid = validator.isValid(opCode); if ( ! isvalid ) { #ifdef GEOS_DEBUG_VALIDATION cout << "OverlayResultValidator considered result INVALID" << endl; #endif throw util::TopologyException( "Obviously wrong result: " "OverlayResultValidator didn't like " "the result: \n" "Invalid point: " + validator.getInvalidLocation().toString() + string("\nInvalid result: ") + resultGeom->toString()); } #ifdef GEOS_DEBUG_VALIDATION else { cout << "OverlayResultValidator considered result valid" << endl; } #endif } #ifdef GEOS_DEBUG_VALIDATION else { cout << "Did not run OverlayResultValidator as the precision model is not floating" << endl; } #endif // ndef GEOS_DEBUG #endif } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/PointBuilder.cpp0000644000175000017500000000537012206417145021660 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/PointBuilder.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay /* * @return a list of the Points in the result of the specified * overlay operation */ vector* PointBuilder::build(OverlayOp::OpCode opCode) { extractNonCoveredResultNodes(opCode); return resultPointList; } /* * Determines nodes which are in the result, and creates Point for them. * * This method determines nodes which are candidates for the result via their * labelling and their graph topology. * * @param opCode the overlay operation */ void PointBuilder::extractNonCoveredResultNodes(OverlayOp::OpCode opCode) { map &nodeMap = op->getGraph().getNodeMap()->nodeMap; map::iterator it=nodeMap.begin(); for (; it!=nodeMap.end(); ++it) { Node *n=it->second; // filter out nodes which are known to be in the result if (n->isInResult()) continue; // if an incident edge is in the result, then // the node coordinate is included already if (n->isIncidentEdgeInResult()) continue; if ( n->getEdges()->getDegree() == 0 || opCode == OverlayOp::opINTERSECTION ) { /** * For nodes on edges, only INTERSECTION can result * in edge nodes being included even * if none of their incident edges are included */ const Label& label=n->getLabel(); if (OverlayOp::isResultOfOp(label, opCode)) filterCoveredNodeToPoint(n); } } } void PointBuilder::filterCoveredNodeToPoint(const Node *n) { const Coordinate& coord=n->getCoordinate(); if(!op->isCoveredByLA(coord)) { Point *pt=geometryFactory->createPoint(coord); resultPointList->push_back(pt); } } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/PolygonBuilder.cpp0000644000175000017500000002360012206417145022212 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/overlay/PolygonBuilder.java rev. 1.20 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geomgraph; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay PolygonBuilder::PolygonBuilder(const GeometryFactory *newGeometryFactory) : geometryFactory(newGeometryFactory) { } PolygonBuilder::~PolygonBuilder() { for(size_t i=0, n=shellList.size(); i* eeptr=graph->getEdgeEnds(); assert(eeptr); const vector& ee = *eeptr; size_t eeSize=ee.size(); #if GEOS_DEBUG cerr << __FUNCTION__ << ": PlanarGraph has " << eeSize << " EdgeEnds" << endl; #endif vector dirEdges(eeSize); for(size_t i=0; i(ee[i])); DirectedEdge* de = static_cast(ee[i]); dirEdges[i]=de; } NodeMap::container &nodeMap=graph->getNodeMap()->nodeMap; vector nodes; nodes.reserve(nodeMap.size()); for ( NodeMap::iterator it=nodeMap.begin(), itEnd=nodeMap.end(); it != itEnd; ++it ) { Node *node=it->second; nodes.push_back(node); } add(&dirEdges, &nodes); // might throw a TopologyException * } /*public*/ void PolygonBuilder::add(const vector *dirEdges, const vector *nodes) //throw(TopologyException *) { PlanarGraph::linkResultDirectedEdges(nodes->begin(), nodes->end()); vector maxEdgeRings; buildMaximalEdgeRings(dirEdges, maxEdgeRings); vector freeHoleList; vector edgeRings; buildMinimalEdgeRings(maxEdgeRings, shellList, freeHoleList, edgeRings); sortShellsAndHoles(edgeRings, shellList, freeHoleList); placeFreeHoles(shellList, freeHoleList); //Assert: every hole on freeHoleList has a shell assigned to it } /*public*/ vector* PolygonBuilder::getPolygons() { vector *resultPolyList=computePolygons(shellList); return resultPolyList; } /*private*/ void PolygonBuilder::buildMaximalEdgeRings(const vector *dirEdges, vector &maxEdgeRings) // throw(const TopologyException &) { #if GEOS_DEBUG cerr<<"PolygonBuilder::buildMaximalEdgeRings got "<size()<<" dirEdges"<::size_type oldSize = maxEdgeRings.size(); for(size_t i=0, n=dirEdges->size(); iprintEdge() << endl << " inResult:" << de->isInResult() << endl << " isArea:" << de->getLabel()->isArea() << endl; #endif if (de->isInResult() && de->getLabel().isArea()) { // if this edge has not yet been processed if (de->getEdgeRing() == NULL) { MaximalEdgeRing *er; try { // MaximalEdgeRing constructor may throw er=new MaximalEdgeRing(de,geometryFactory); } catch (util::GEOSException&) { // cleanup if that happens (see stmlf-cases-20061020.xml) for(size_t i=oldSize, n=maxEdgeRings.size(); isetInResult(); //System.out.println("max node degree=" + er.getMaxDegree()); } } } #if GEOS_DEBUG cerr<<" pushed "< &maxEdgeRings, vector &newShellList, vector &freeHoleList, vector &edgeRings) { for(size_t i=0, n=maxEdgeRings.size(); igetMaxNodeDegree()<<" maxNodeDegree"<getMaxNodeDegree()>2) { er->linkDirectedEdgesForMinimalEdgeRings(); vector minEdgeRings; er->buildMinimalRings(minEdgeRings); // at this point we can go ahead and attempt to place // holes, if this EdgeRing is a polygon EdgeRing *shell=findShell(&minEdgeRings); if(shell != NULL) { placePolygonHoles(shell, &minEdgeRings); newShellList.push_back(shell); } else { freeHoleList.insert(freeHoleList.end(), minEdgeRings.begin(), minEdgeRings.end() ); } delete er; } else { edgeRings.push_back(er); } } } /*private*/ EdgeRing* PolygonBuilder::findShell(vector *minEdgeRings) { int shellCount=0; EdgeRing *shell=NULL; #if GEOS_DEBUG cerr<<"PolygonBuilder::findShell got "<size()<<" minEdgeRings"<size(); iisHole() ) { shell=er; ++shellCount; } } if ( shellCount > 1 ) { throw util::TopologyException("found two shells in MinimalEdgeRing list"); } return shell; } /*private*/ void PolygonBuilder::placePolygonHoles(EdgeRing *shell, vector *minEdgeRings) { for (size_t i=0, n=minEdgeRings->size(); iisHole() ) { er->setShell(shell); } } } /*private*/ void PolygonBuilder::sortShellsAndHoles(vector &edgeRings, vector &newShellList, vector &freeHoleList) { for(size_t i=0, n=edgeRings.size(); isetInResult(); if (er->isHole() ) { freeHoleList.push_back(er); } else { newShellList.push_back(er); } } } /*private*/ void PolygonBuilder::placeFreeHoles(std::vector& newShellList, std::vector& freeHoleList) { for(std::vector::iterator it=freeHoleList.begin(), itEnd=freeHoleList.end(); it != itEnd; ++it) { EdgeRing *hole=*it; // only place this hole if it doesn't yet have a shell if (hole->getShell()==NULL) { EdgeRing *shell=findEdgeRingContaining(hole, newShellList); if ( shell == NULL ) { #if GEOS_DEBUG Geometry* geom; std::cerr << "CREATE TABLE shells (g geometry);" << std::endl; std::cerr << "CREATE TABLE hole (g geometry);" << std::endl; for (std::vector::iterator rIt=newShellList.begin(), rEnd=newShellList.end(); rIt!=rEnd; rIt++) { geom = (*rIt)->toPolygon(geometryFactory); std::cerr << "INSERT INTO shells VALUES ('" << *geom << "');" << std::endl; delete geom; } geom = hole->toPolygon(geometryFactory); std::cerr << "INSERT INTO hole VALUES ('" << *geom << "');" << std::endl; delete geom; #endif //assert(shell!=NULL); // unable to assign hole to a shell throw util::TopologyException("unable to assign hole to a shell"); } hole->setShell(shell); } } } /*private*/ EdgeRing* PolygonBuilder::findEdgeRingContaining(EdgeRing *testEr, vector& newShellList) { LinearRing *testRing=testEr->getLinearRing(); const Envelope *testEnv=testRing->getEnvelopeInternal(); const Coordinate& testPt=testRing->getCoordinateN(0); EdgeRing *minShell=NULL; const Envelope *minEnv=NULL; for(size_t i=0, n=newShellList.size(); igetLinearRing(); const Envelope *tryEnv=tryRing->getEnvelopeInternal(); if (minShell!=NULL) { lr=minShell->getLinearRing(); minEnv=lr->getEnvelopeInternal(); } bool isContained=false; const CoordinateSequence *rcl = tryRing->getCoordinatesRO(); if (tryEnv->contains(testEnv) && CGAlgorithms::isPointInRing(testPt,rcl)) isContained=true; // check if this new containing ring is smaller than // the current minimum ring if (isContained) { if (minShell==NULL || minEnv->contains(tryEnv)) { minShell=tryShell; } } } return minShell; } /*private*/ vector* PolygonBuilder::computePolygons(vector& newShellList) { #if GEOS_DEBUG cerr<<"PolygonBuilder::computePolygons: got "< *resultPolyList=new vector(); // add Polygons for all shells for(size_t i=0, n=newShellList.size(); itoPolygon(geometryFactory); resultPolyList->push_back(poly); } return resultPolyList; } /*public*/ bool PolygonBuilder::containsPoint(const Coordinate& p) { for(size_t i=0, size=shellList.size(); icontainsPoint(p) ) { return true; } } return false; } } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/snap/0000755000175000017500000000000012206417235017510 5ustar frankiefrankiegeos-3.4.2/src/operation/overlay/snap/GeometrySnapper.cpp0000644000175000017500000001443312206417145023345 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/GeometrySnapper.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include // inherit. of SnapTransformer #include #include #include #include #include #include #include #include #include #include #include #include //using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace snap { // geos.operation.overlay.snap const double GeometrySnapper::snapPrecisionFactor = 1e-9; class SnapTransformer: public geos::geom::util::GeometryTransformer { private: double snapTol; const Coordinate::ConstVect& snapPts; CoordinateSequence::AutoPtr snapLine( const CoordinateSequence* srcPts) { using std::auto_ptr; assert(srcPts); assert(srcPts->toVector()); LineStringSnapper snapper(*(srcPts->toVector()), snapTol); auto_ptr newPts = snapper.snapTo(snapPts); const CoordinateSequenceFactory* cfact = factory->getCoordinateSequenceFactory(); return auto_ptr(cfact->create(newPts.release())); } public: SnapTransformer(double nSnapTol, const Coordinate::ConstVect& nSnapPts) : snapTol(nSnapTol), snapPts(nSnapPts) { } CoordinateSequence::AutoPtr transformCoordinates( const CoordinateSequence* coords, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); return snapLine(coords); } }; /*private*/ std::auto_ptr GeometrySnapper::extractTargetCoordinates(const Geometry& g) { std::auto_ptr snapPts(new Coordinate::ConstVect()); util::UniqueCoordinateArrayFilter filter(*snapPts); g.apply_ro(&filter); // integrity check assert( snapPts->size() <= g.getNumPoints() ); return snapPts; } /*public*/ std::auto_ptr GeometrySnapper::snapTo(const geom::Geometry& g, double snapTolerance) { using std::auto_ptr; using geom::util::GeometryTransformer; // Get snap points auto_ptr snapPts=extractTargetCoordinates(g); // Apply a SnapTransformer to source geometry // (we need a pointer for dynamic polymorphism) auto_ptr snapTrans(new SnapTransformer(snapTolerance, *snapPts)); return snapTrans->transform(&srcGeom); } /*public*/ std::auto_ptr GeometrySnapper::snapToSelf(double snapTolerance, bool cleanResult) { using std::auto_ptr; using geom::util::GeometryTransformer; // Get snap points auto_ptr snapPts=extractTargetCoordinates(srcGeom); // Apply a SnapTransformer to source geometry // (we need a pointer for dynamic polymorphism) auto_ptr snapTrans(new SnapTransformer(snapTolerance, *snapPts)); GeomPtr result = snapTrans->transform(&srcGeom); if (cleanResult && ( dynamic_cast(result.get()) || dynamic_cast(result.get()) ) ) { // TODO: use better cleaning approach result.reset(result->buffer(0)); } return result; } /*public static*/ double GeometrySnapper::computeSizeBasedSnapTolerance(const geom::Geometry& g) { const Envelope* env = g.getEnvelopeInternal(); double minDimension = (std::min)(env->getHeight(), env->getWidth()); double snapTol = minDimension * snapPrecisionFactor; return snapTol; } /*public static*/ double GeometrySnapper::computeOverlaySnapTolerance(const geom::Geometry& g) { double snapTolerance = computeSizeBasedSnapTolerance(g); /** * Overlay is carried out in the precision model * of the two inputs. * If this precision model is of type FIXED, then the snap tolerance * must reflect the precision grid size. * Specifically, the snap tolerance should be at least * the distance from a corner of a precision grid cell * to the centre point of the cell. */ assert(g.getPrecisionModel()); const PrecisionModel& pm = *(g.getPrecisionModel()); if (pm.getType() == PrecisionModel::FIXED) { double fixedSnapTol = (1 / pm.getScale()) * 2 / 1.415; if ( fixedSnapTol > snapTolerance ) snapTolerance = fixedSnapTol; } return snapTolerance; } /*public static*/ double GeometrySnapper::computeOverlaySnapTolerance(const geom::Geometry& g1, const geom::Geometry& g2) { return (std::min)(computeOverlaySnapTolerance(g1), computeOverlaySnapTolerance(g2)); } /* public static */ void GeometrySnapper::snap(const geom::Geometry& g0, const geom::Geometry& g1, double snapTolerance, geom::GeomPtrPair& snapGeom) { GeometrySnapper snapper0(g0); snapGeom.first = snapper0.snapTo(g1, snapTolerance); /** * Snap the second geometry to the snapped first geometry * (this strategy minimizes the number of possible different * points in the result) */ GeometrySnapper snapper1(g1); snapGeom.second = snapper1.snapTo(*snapGeom.first, snapTolerance); // cout << *snapGeom.first << endl; // cout << *snapGeom.second << endl; } /* public static */ GeometrySnapper::GeomPtr GeometrySnapper::snapToSelf(const geom::Geometry& g, double snapTolerance, bool cleanResult) { GeometrySnapper snapper0(g); return snapper0.snapToSelf(snapTolerance, cleanResult); } } // namespace geos.operation.snap } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/snap/LineStringSnapper.cpp0000644000175000017500000002640412206417145023631 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009-2010 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/LineStringSnapper.java r320 (JTS-1.12) * * NOTE: algorithm changed to improve output quality by reducing * probability of self-intersections * **********************************************************************/ #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include #include using std::cerr; using std::endl; #endif //using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace snap { // geos.operation.overlay.snap /*public*/ std::auto_ptr LineStringSnapper::snapTo(const geom::Coordinate::ConstVect& snapPts) { geom::CoordinateList coordList(srcPts); snapVertices(coordList, snapPts); snapSegments(coordList, snapPts); return coordList.toCoordinateArray(); } /*private*/ CoordinateList::iterator LineStringSnapper::findVertexToSnap( const Coordinate& snapPt, CoordinateList::iterator from, CoordinateList::iterator too_far) { double minDist = snapTolerance; // make sure the first closer then // snapTolerance is accepted CoordinateList::iterator match=too_far; for ( ; from != too_far; ++from) { Coordinate& c0 = *from; #if GEOS_DEBUG cerr << " Checking vertex " << c0 << endl; #endif double dist = c0.distance(snapPt); if ( dist >= minDist) { #if GEOS_DEBUG cerr << " snap point distance " << dist << " not smaller than tolerance " << snapTolerance << " or previous closest " << minDist << endl; #endif continue; } #if GEOS_DEBUG cerr << " snap point distance " << dist << " within tolerance " << snapTolerance << " and closer than previous candidate " << minDist << endl; #endif if ( dist == 0.0 ) return from; // can't find any closer match = from; minDist = dist; } return match; } /*private*/ void LineStringSnapper::snapVertices(geom::CoordinateList& srcCoords, const geom::Coordinate::ConstVect& snapPts) { // nothing to do if there are no source coords.. if ( srcCoords.empty() ) return; #if GEOS_DEBUG cerr << "Snapping vertices of: " << srcCoords << endl; #endif for ( Coordinate::ConstVect::const_iterator it=snapPts.begin(), end=snapPts.end(); it != end; ++it) { assert(*it); const Coordinate& snapPt = *(*it); #if GEOS_DEBUG cerr << "Checking for a vertex to snap to snapPt " << snapPt << endl; #endif CoordinateList::iterator too_far = srcCoords.end(); if ( isClosed ) --too_far; CoordinateList::iterator vertpos = findVertexToSnap(snapPt, srcCoords.begin(), too_far); if ( vertpos == too_far) { #if GEOS_DEBUG cerr << " No vertex to snap" << endl; #endif continue; } #if GEOS_DEBUG cerr << " Vertex to be snapped found, snapping" << endl; #endif *vertpos = snapPt; // keep final closing point in synch (rings only) if (vertpos == srcCoords.begin() && isClosed) { vertpos = srcCoords.end(); --vertpos; *vertpos = snapPt; } } #if GEOS_DEBUG cerr << " After vertex snapping, srcCoors are: " << srcCoords << endl; #endif } /*private*/ Coordinate::ConstVect::const_iterator LineStringSnapper::findSnapForVertex(const Coordinate& pt, const Coordinate::ConstVect& snapPts) { Coordinate::ConstVect::const_iterator end = snapPts.end(); Coordinate::ConstVect::const_iterator candidate = end; double minDist = snapTolerance; // TODO: use std::find_if for ( Coordinate::ConstVect::const_iterator it=snapPts.begin(); it != end; ++it) { assert(*it); const Coordinate& snapPt = *(*it); if ( snapPt.equals2D(pt) ) { #if GEOS_DEBUG cerr << " points are equal, returning not-found " << endl; #endif return end; } double dist = snapPt.distance(pt); #if GEOS_DEBUG cerr << " distance from snap point " << snapPt << ": " << dist << endl; #endif if ( dist < minDist ) { minDist = dist; candidate = it; } } #if GEOS_DEBUG if ( candidate == end ) { cerr << " no snap point within distance, returning not-found" << endl; } #endif return candidate; } /*private*/ void LineStringSnapper::snapSegments(geom::CoordinateList& srcCoords, const geom::Coordinate::ConstVect& snapPts) { // nothing to do if there are no source coords.. if ( srcCoords.empty() ) return; #if GEOS_DEBUG cerr << "Snapping segments of: " << srcCoords << endl; #endif for ( Coordinate::ConstVect::const_iterator it=snapPts.begin(), end=snapPts.end(); it != end; ++it) { assert(*it); const Coordinate& snapPt = *(*it); #if GEOS_DEBUG cerr << "Checking for a segment to snap to snapPt " << snapPt << endl; #endif CoordinateList::iterator too_far = srcCoords.end(); --too_far; CoordinateList::iterator segpos = findSegmentToSnap(snapPt, srcCoords.begin(), too_far); if ( segpos == too_far) { #if GEOS_DEBUG cerr << " No segment to snap" << endl; #endif continue; } /* Check if the snap point falls outside of the segment */ // If the snap point is outside, this means that an endpoint // was not snap where it should have been // so what we should do is re-snap the endpoint to this // snapPt and then snap the closest between this and // previous (for pf < 0.0) or next (for pf > 1.0) segment // to the old endpoint. // --strk May 2013 // // TODO: simplify this code, make more readable // CoordinateList::iterator to = segpos; ++to; LineSegment seg(*segpos, *to); double pf = seg.projectionFactor(snapPt); if ( pf >= 1.0 ) { #if GEOS_DEBUG cerr << " Segment to be snapped is closer on his end point" << endl; #endif Coordinate newSnapPt = seg.p1; *to = seg.p1 = snapPt; // now snap from-to (segpos) or to-next (segpos++) to newSnapPt if ( to == too_far ) { if ( isClosed ) { #if GEOS_DEBUG cerr << " His end point is the last one, but is closed " << endl; #endif *(srcCoords.begin()) = snapPt; // sync to start point to = srcCoords.begin(); } else { #if GEOS_DEBUG cerr << " His end point is the last one, inserting " << newSnapPt << " before it" << endl; #endif srcCoords.insert(to, newSnapPt); continue; } } ++to; LineSegment nextSeg(seg.p1, *to); if ( nextSeg.distance(newSnapPt) < seg.distance(newSnapPt) ) { #if GEOS_DEBUG cerr << " Next segment closer, inserting " << newSnapPt << " into " << nextSeg << endl; #endif // insert into next segment srcCoords.insert(to, newSnapPt); } else { #if GEOS_DEBUG cerr << " This segment closer, inserting " << newSnapPt << " into " << seg << endl; #endif // insert must happen one-past first point (before next point) ++segpos; srcCoords.insert(segpos, newSnapPt); } } else if ( pf <= 0.0 ) { #if GEOS_DEBUG cerr << " Segment to be snapped is closer on his start point" << endl; #endif Coordinate newSnapPt = seg.p0; *segpos = seg.p0 = snapPt; // now snap prev-from (--segpos) or from-to (segpos) to newSnapPt if ( segpos == srcCoords.begin() ) { if ( isClosed ) { #if GEOS_DEBUG cerr << " His start point is the first one, but is closed " << endl; #endif segpos = srcCoords.end(); --segpos; *segpos = snapPt; // sync to end point } else { #if GEOS_DEBUG cerr << " His start point is the first one, inserting " << newSnapPt << " before it" << endl; #endif ++segpos; srcCoords.insert(segpos, newSnapPt); continue; } } #if GEOS_DEBUG cerr << " Before seg-snapping, srcCoors are: " << srcCoords << endl; #endif --segpos; LineSegment prevSeg(*segpos, seg.p0); if ( prevSeg.distance(newSnapPt) < seg.distance(newSnapPt) ) { #if GEOS_DEBUG cerr << " Prev segment closer, inserting " << newSnapPt << " into " << prevSeg << endl; #endif // insert into prev segment srcCoords.insert(segpos, newSnapPt); } else { #if GEOS_DEBUG cerr << " This segment closer, inserting " << newSnapPt << " into " << seg << endl; #endif // insert must happen one-past first point (before next point) srcCoords.insert(to, newSnapPt); } } else { //assert(pf != 0.0); #if GEOS_DEBUG cerr << " Segment to be snapped found, projection factor is " << pf << ", inserting point" << endl; #endif // insert must happen one-past first point (before next point) ++segpos; srcCoords.insert(segpos, snapPt); } } #if GEOS_DEBUG cerr << " After segment snapping, srcCoors are: " << srcCoords << endl; #endif } /*private*/ /* NOTE: this is called findSegmentIndexToSnap in JTS */ CoordinateList::iterator LineStringSnapper::findSegmentToSnap( const Coordinate& snapPt, CoordinateList::iterator from, CoordinateList::iterator too_far) { LineSegment seg; double minDist = snapTolerance; // make sure the first closer then // snapTolerance is accepted CoordinateList::iterator match=too_far; // TODO: use std::find_if for ( ; from != too_far; ++from) { seg.p0 = *from; CoordinateList::iterator to = from; ++to; seg.p1 = *to; #if GEOS_DEBUG cerr << " Checking segment " << seg << endl; #endif /** * Check if the snap pt is equal to one of * the segment endpoints. * * If the snap pt is already in the src list, * don't snap at all (unless allowSnappingToSourceVertices * is set to true) */ if ( seg.p0.equals2D(snapPt) || seg.p1.equals2D(snapPt) ) { if (allowSnappingToSourceVertices) { #if GEOS_DEBUG cerr << " snap point matches a segment endpoint, checking next segment" << endl; #endif continue; } else { #if GEOS_DEBUG cerr << " snap point matches a segment endpoint, giving up seek" << endl; #endif return too_far; } } double dist = seg.distance(snapPt); if ( dist >= minDist) { #if GEOS_DEBUG cerr << " snap point distance " << dist << " not smaller than tolerance " << snapTolerance << " or previous closest " << minDist << endl; #endif continue; } #if GEOS_DEBUG cerr << " snap point distance " << dist << " within tolerance " << snapTolerance << " and closer than previous candidate " << minDist << endl; #endif if ( dist == 0.0 ) return from; // can't find any closer match = from; minDist = dist; } return match; } } // namespace geos.operation.snap } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/snap/SnapIfNeededOverlayOp.cpp0000644000175000017500000000426412206417145024350 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/SnapIfNeededOverlayOp.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include // for use in auto_ptr #include #include #include // for numeric_limits #include // for auto_ptr #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace snap { // geos.operation.overlay.snap /* public */ auto_ptr SnapIfNeededOverlayOp::getResultGeometry(OverlayOp::OpCode opCode) { using geos::util::TopologyException; auto_ptr result; TopologyException origEx; // Try with original input try { result.reset( OverlayOp::overlayOp(&geom0, &geom1, opCode) ); return result; } catch (const TopologyException& ex) { origEx = ex; // save original exception #if GEOS_DEBUG std::cerr << "Overlay op threw " << ex.what() << ". Will try snapping now" << std::endl; #endif } // Try snapping try { result = SnapOverlayOp::overlayOp(geom0, geom1, opCode); return result; } catch (const TopologyException& ex) { ::geos::ignore_unused_variable_warning(ex); #if GEOS_DEBUG std::cerr << "Overlay op on snapped geoms threw " << ex.what() << ". Will try snapping now" << std::endl; #endif throw origEx; } } } // namespace geos.operation.snap } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/snap/SnapOverlayOp.cpp0000644000175000017500000000550712206417145022765 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/snap/SnapOverlayOp.java r320 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include // for numeric_limits #include // for auto_ptr #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace snap { // geos.operation.overlay.snap /* private */ void SnapOverlayOp::computeSnapTolerance() { snapTolerance = GeometrySnapper::computeOverlaySnapTolerance(geom0, geom1); // cout << "Snap tol = " << snapTolerance << endl; } /* public */ auto_ptr SnapOverlayOp::getResultGeometry(OverlayOp::OpCode opCode) { geom::GeomPtrPair prepGeom; snap(prepGeom); GeomPtr result ( OverlayOp::overlayOp(prepGeom.first.get(), prepGeom.second.get(), opCode) ); prepareResult(*result); return result; } /* private */ void SnapOverlayOp::snap(geom::GeomPtrPair& snapGeom) { geom::GeomPtrPair remGeom; removeCommonBits(geom0, geom1, remGeom); GeometrySnapper::snap(*remGeom.first, *remGeom.second, snapTolerance, snapGeom); // MD - may want to do this at some point, but it adds cycles // checkValid(snapGeom[0]); // checkValid(snapGeom[1]); /* System.out.println("Snapped geoms: "); System.out.println(snapGeom[0]); System.out.println(snapGeom[1]); */ } /* private */ void SnapOverlayOp::removeCommonBits(const geom::Geometry& geom0, const geom::Geometry& geom1, geom::GeomPtrPair& remGeom) { cbr.reset(new precision::CommonBitsRemover()); cbr->add(&geom0); cbr->add(&geom1); remGeom.first.reset( cbr->removeCommonBits(geom0.clone()) ); remGeom.second.reset( cbr->removeCommonBits(geom1.clone()) ); } /*private*/ void SnapOverlayOp::prepareResult(geom::Geometry& geom) { cbr->addCommonBits(&geom); } } // namespace geos.operation.snap } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/validate/0000755000175000017500000000000012206417235020340 5ustar frankiefrankiegeos-3.4.2/src/operation/overlay/validate/FuzzyPointLocator.cpp0000644000175000017500000000744712206417145024545 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/FuzzyPointLocator.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #include #include #include // for Point upcast #include #include // for Location::Value enum #include #include #include #include #include #include // for auto_ptr #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #define COMPUTE_Z 1 #define USE_ELEVATION_MATRIX 1 #define USE_INPUT_AVGZ 0 using namespace std; using namespace geos::geom; using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace validate { // geos.operation.overlay.validate FuzzyPointLocator::FuzzyPointLocator(const geom::Geometry& geom, double nTolerance) : g(geom), tolerance(nTolerance), ptLocator(), linework(extractLineWork(g)) { } /*private*/ std::auto_ptr FuzzyPointLocator::extractLineWork(const geom::Geometry& geom) { ::geos::ignore_unused_variable_warning(geom); vector* lineGeoms = new vector(); try { // geoms array will leak if an exception is thrown for (size_t i=0, n=g.getNumGeometries(); igetDimension() == 2) { lineGeom = gComp->getBoundary(); lineGeoms->push_back(lineGeom); } } return std::auto_ptr(g.getFactory()->buildGeometry(lineGeoms)); } catch (...) { // avoid leaks for (size_t i=0, n=lineGeoms->size(); i FuzzyPointLocator::getLineWork(const geom::Geometry& geom) { ::geos::ignore_unused_variable_warning(geom); vector* lineGeoms = new vector(); try { // geoms array will leak if an exception is thrown for (size_t i=0, n=g.getNumGeometries(); igetDimension() == 2) { lineGeom = gComp->getBoundary(); } else { lineGeom = gComp->clone(); } lineGeoms->push_back(lineGeom); } return std::auto_ptr(g.getFactory()->buildGeometry(lineGeoms)); } catch (...) { // avoid leaks for (size_t i=0, n=lineGeoms->size(); i point(g.getFactory()->createPoint(pt)); double dist = linework->distance(point.get()); // if point is close to boundary, it is considered // to be on the boundary if (dist < tolerance) return Location::BOUNDARY; // now we know point must be clearly inside or outside geometry, // so return actual location value // (the static_cast is needed because PointLocator doesn't cleanly // return a Location::Value - it should !!) return static_cast(ptLocator.locate(pt, &g)); } } // namespace geos.operation.overlay.validate } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/validate/OffsetPointGenerator.cpp0000644000175000017500000000557112206417145025163 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/OffsetPointGenerator.java rev. 1.1 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include // for auto_ptr #include #include // std::for_each #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace validate { // geos.operation.overlay.validate /*public*/ OffsetPointGenerator::OffsetPointGenerator(const geom::Geometry& geom, double offset) : g(geom), offsetDistance(offset) { } /*public*/ std::auto_ptr< std::vector > OffsetPointGenerator::getPoints() { assert (offsetPts.get() == NULL); offsetPts.reset(new vector()); vector lines; geos::geom::util::LinearComponentExtracter::getLines(g, lines); for_each(lines.begin(), lines.end(), bind1st(mem_fun(&OffsetPointGenerator::extractPoints), this)); return offsetPts; } /*private*/ void OffsetPointGenerator::extractPoints(const LineString* line) { const CoordinateSequence& pts = *(line->getCoordinatesRO()); assert(pts.size() > 1 ); for (size_t i=0, n=pts.size()-1; ipush_back(offsetLeft); offsetPts->push_back(offsetRight); } } // namespace geos.operation.overlay.validate } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/overlay/validate/OverlayResultValidator.cpp0000644000175000017500000001457112206417145025542 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: operation/overlay/validate/OverlayResultValidator.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include // for auto_ptr #include // for std::min etc. #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #if GEOS_DEBUG #include // for setprecision #endif #define COMPUTE_Z 1 #define USE_ELEVATION_MATRIX 1 #define USE_INPUT_AVGZ 0 using namespace std; using namespace geos::geom; using namespace geos::geomgraph; using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace overlay { // geos.operation.overlay namespace validate { // geos.operation.overlay.validate namespace { // anonymous namespace bool isArea(const Geometry& g) { GeometryTypeId type = g.getGeometryTypeId(); if ( type == GEOS_POLYGON ) return true; if ( type == GEOS_MULTIPOLYGON ) return true; #if GEOS_DEBUG cerr << "OverlayResultValidator: one of the geoms being checked is not a POLYGON or MULTIPOLYGON, blindly returning a positive answer (is valid)" << endl; #endif return false; } auto_ptr toMultiPoint(vector& coords) { const GeometryFactory& gf = *(GeometryFactory::getDefaultInstance()); const CoordinateSequenceFactory& csf = *(gf.getCoordinateSequenceFactory()); auto_ptr< vector > nc ( new vector(coords) ); auto_ptr cs(csf.create(nc.release())); auto_ptr mp ( gf.createMultiPoint(*cs) ); return mp; } } // anonymous namespace /* static public */ bool OverlayResultValidator::isValid(const Geometry& geom0, const Geometry& geom1, OverlayOp::OpCode opCode, const Geometry& result) { OverlayResultValidator validator(geom0, geom1, result); return validator.isValid(opCode); } /*public*/ OverlayResultValidator::OverlayResultValidator( const Geometry& geom0, const Geometry& geom1, const Geometry& result) : boundaryDistanceTolerance( computeBoundaryDistanceTolerance(geom0, geom1) ), g0(geom0), g1(geom1), gres(result), fpl0(g0, boundaryDistanceTolerance), fpl1(g1, boundaryDistanceTolerance), fplres(gres, boundaryDistanceTolerance), invalidLocation() { } /*public*/ bool OverlayResultValidator::isValid(OverlayOp::OpCode overlayOp) { // The check only works for areal geoms #if 0 // now that FuzzyPointLocator extracts polygonal geoms, // there should be no problem here if ( ! isArea(g0) ) return true; if ( ! isArea(g1) ) return true; if ( ! isArea(gres) ) return true; #endif addTestPts(g0); addTestPts(g1); addTestPts(gres); if (! testValid(overlayOp) ) { #if GEOS_DEBUG cerr << "OverlayResultValidator:" << endl << "Points:" << *toMultiPoint(testCoords) << endl << "Geom0: " << g0 << endl << "Geom1: " << g1 << endl << "Reslt: " << gres << endl << "Locat: " << getInvalidLocation() << endl; #endif return false; } return true; } /*private*/ void OverlayResultValidator::addTestPts(const Geometry& g) { OffsetPointGenerator ptGen(g, 5 * boundaryDistanceTolerance); auto_ptr< vector > pts = ptGen.getPoints(); testCoords.insert(testCoords.end(), pts->begin(), pts->end()); } /*private*/ void OverlayResultValidator::addVertices(const Geometry& g) { // TODO: optimize this by not copying coordinates // and pre-allocating memory auto_ptr cs ( g.getCoordinates() ); const vector* coords = cs->toVector(); testCoords.insert(testCoords.end(), coords->begin(), coords->end()); } /*private*/ bool OverlayResultValidator::testValid(OverlayOp::OpCode overlayOp) { for (size_t i=0, n=testCoords.size(); i location(3); location[0] = fpl0.getLocation(pt); location[1] = fpl1.getLocation(pt); location[2] = fplres.getLocation(pt); #if GEOS_DEBUG cerr << setprecision(10) << "Point " << pt << endl << "Loc0: " << location[0] << endl << "Loc1: " << location[1] << endl << "Locr: " << location[2] << endl; #endif /* * If any location is on the Boundary, can't deduce anything, * so just return true */ if ( find(location.begin(), location.end(), Location::BOUNDARY) != location.end() ) { #if GEOS_DEBUG cerr << "OverlayResultValidator: testpoint " << pt << " is on the boundary, blindly returning a positive answer (is valid)" << endl; #endif return true; } return isValidResult(overlayOp, location); } /* private */ bool OverlayResultValidator::isValidResult(OverlayOp::OpCode overlayOp, std::vector& location) { bool expectedInterior = OverlayOp::isResultOfOp(location[0], location[1], overlayOp); bool resultInInterior = (location[2] == Location::INTERIOR); bool isValid = ! (expectedInterior ^ resultInInterior); return isValid; } /*private static*/ double OverlayResultValidator::computeBoundaryDistanceTolerance( const geom::Geometry& g0, const geom::Geometry& g1) { using geos::operation::overlay::snap::GeometrySnapper; return (std::min)(GeometrySnapper::computeSizeBasedSnapTolerance(g0), GeometrySnapper::computeSizeBasedSnapTolerance(g1)); } } // namespace geos.operation.overlay.validate } // namespace geos.operation.overlay } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/polygonize/0000755000175000017500000000000012206417235017265 5ustar frankiefrankiegeos-3.4.2/src/operation/polygonize/EdgeRing.cpp0000644000175000017500000001413012206417145021454 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/EdgeRing.java rev. 109/138 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include //#define DEBUG_ALLOC 1 //#define GEOS_PARANOIA_LEVEL 2 using namespace std; using namespace geos::planargraph; using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize /*public*/ EdgeRing * EdgeRing::findEdgeRingContaining(EdgeRing *testEr, vector *shellList) { const LinearRing *testRing=testEr->getRingInternal(); if ( ! testRing ) return NULL; const Envelope *testEnv=testRing->getEnvelopeInternal(); Coordinate testPt=testRing->getCoordinateN(0); EdgeRing *minShell=NULL; const Envelope *minEnv=NULL; typedef std::vector ERList; for(ERList::size_type i=0, e=shellList->size(); igetRingInternal(); const Envelope *tryEnv=tryRing->getEnvelopeInternal(); if (minShell!=NULL) minEnv=minShell->getRingInternal()->getEnvelopeInternal(); bool isContained=false; // the hole envelope cannot equal the shell envelope if (tryEnv->equals(testEnv)) continue; const CoordinateSequence *tryCoords = tryRing->getCoordinatesRO(); if ( tryEnv->contains(testEnv) ) { // TODO: don't copy testPt ! testPt = ptNotInList(testRing->getCoordinatesRO(), tryCoords); if ( CGAlgorithms::isPointInRing(testPt, tryCoords) ) { isContained=true; } } // check if this new containing ring is smaller // than the current minimum ring if (isContained) { if (minShell==NULL || minEnv->contains(tryEnv)) { minShell=tryShell; } } } return minShell; } /*public static*/ const Coordinate& EdgeRing::ptNotInList(const CoordinateSequence *testPts, const CoordinateSequence *pts) { const std::size_t npts = testPts->getSize(); for (std::size_t i = 0; i < npts; ++i) { const Coordinate& testPt = testPts->getAt(i); // TODO: shouldn't this be ! isInList ? if (isInList(testPt, pts)) return testPt; } return Coordinate::getNull(); } /*public static*/ bool EdgeRing::isInList(const Coordinate& pt, const CoordinateSequence *pts) { const std::size_t npts = pts->getSize(); for (std::size_t i = 0; i < npts; ++i) { if (pt == pts->getAt(i)) return false; } return true; } /*public*/ EdgeRing::EdgeRing(const GeometryFactory *newFactory) : factory(newFactory), ring(0), ringPts(0), holes(0) { #ifdef DEBUG_ALLOC cerr<<"["<size(); igetCoordinatesRO()); } /*public*/ void EdgeRing::addHole(LinearRing *hole) { if (holes==NULL) holes=new vector(); holes->push_back(hole); } /*public*/ Polygon* EdgeRing::getPolygon() { Polygon *poly=factory->createPolygon(ring, holes); ring=NULL; holes=NULL; return poly; } /*public*/ bool EdgeRing::isValid() { if ( ! getRingInternal() ) return false; // computes cached ring return ring->isValid(); } /*private*/ CoordinateSequence* EdgeRing::getCoordinates() { if (ringPts==NULL) { ringPts=factory->getCoordinateSequenceFactory()->create(NULL); for (DeList::size_type i=0, e=deList.size(); i(de->getEdge())); PolygonizeEdge *edge=static_cast(de->getEdge()); addEdge(edge->getLine()->getCoordinatesRO(), de->getEdgeDirection(), ringPts); } } return ringPts; } /*public*/ LineString* EdgeRing::getLineString() { getCoordinates(); return factory->createLineString(*ringPts); } /*public*/ LinearRing * EdgeRing::getRingInternal() { if (ring!=NULL) return ring; getCoordinates(); try { ring=factory->createLinearRing(*ringPts); } catch (const std::exception& e) { #if GEOS_DEBUG // FIXME: print also ringPts std::cerr << "EdgeRing::getRingInternal: " << e.what() << endl; #endif } return ring; } /*public*/ LinearRing * EdgeRing::getRingOwnership() { LinearRing *ret = getRingInternal(); ring = NULL; return ret; } /*private*/ void EdgeRing::addEdge(const CoordinateSequence *coords, bool isForward, CoordinateSequence *coordList) { const std::size_t npts=coords->getSize(); if (isForward) { for (std::size_t i = 0; i < npts; ++i) { coordList->add(coords->getAt(i), false); } } else { for (std::size_t i = npts; i > 0; --i) { coordList->add(coords->getAt(i-1), false); } } } } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/polygonize/Makefile.am0000644000175000017500000000053212206417145021321 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboppolygonize.la INCLUDES = -I$(top_srcdir)/include liboppolygonize_la_SOURCES = \ PolygonizeDirectedEdge.cpp \ PolygonizeEdge.cpp \ PolygonizeGraph.cpp \ Polygonizer.cpp \ EdgeRing.cpp liboppolygonize_la_LIBADD = geos-3.4.2/src/operation/polygonize/Makefile.in0000644000175000017500000005373012206417164021343 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/polygonize DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboppolygonize_la_DEPENDENCIES = am_liboppolygonize_la_OBJECTS = PolygonizeDirectedEdge.lo \ PolygonizeEdge.lo PolygonizeGraph.lo Polygonizer.lo \ EdgeRing.lo liboppolygonize_la_OBJECTS = $(am_liboppolygonize_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liboppolygonize_la_SOURCES) DIST_SOURCES = $(liboppolygonize_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboppolygonize.la INCLUDES = -I$(top_srcdir)/include liboppolygonize_la_SOURCES = \ PolygonizeDirectedEdge.cpp \ PolygonizeEdge.cpp \ PolygonizeGraph.cpp \ Polygonizer.cpp \ EdgeRing.cpp liboppolygonize_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/polygonize/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/polygonize/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liboppolygonize.la: $(liboppolygonize_la_OBJECTS) $(liboppolygonize_la_DEPENDENCIES) $(CXXLINK) $(liboppolygonize_la_OBJECTS) $(liboppolygonize_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeRing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonizeDirectedEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonizeEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonizeGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Polygonizer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/polygonize/PolygonizeDirectedEdge.cpp0000644000175000017500000000525512206417145024370 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeDirectedEdge.java rev. 1.4 (JTS-1.10) * **********************************************************************/ #include #include using namespace geos::planargraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize /** * Constructs a directed edge connecting the from node to the * to node. * * @param directionPt * specifies this DirectedEdge's direction (given by an imaginary * line from the from node to directionPt) * * @param edgeDirection * whether this DirectedEdge's direction is the same as or * opposite to that of the parent Edge (if any) */ PolygonizeDirectedEdge::PolygonizeDirectedEdge(Node *newFrom, Node *newTo, const Coordinate& newDirectionPt, bool nEdgeDirection) : DirectedEdge(newFrom, newTo, newDirectionPt, nEdgeDirection) { edgeRing=NULL; next=NULL; label=-1; } /* * Returns the identifier attached to this directed edge. */ long PolygonizeDirectedEdge::getLabel() const { return label; } /* * Attaches an identifier to this directed edge. */ void PolygonizeDirectedEdge::setLabel(long newLabel) { label=newLabel; } /* * Returns the next directed edge in the EdgeRing that this directed * edge is a member of. */ PolygonizeDirectedEdge * PolygonizeDirectedEdge::getNext() const { return next; } /* * Sets the next directed edge in the EdgeRing that this directed * edge is a member of. */ void PolygonizeDirectedEdge::setNext(PolygonizeDirectedEdge *newNext) { next=newNext; } /* * Returns the ring of directed edges that this directed edge is * a member of, or null if the ring has not been set. * @see #setRing(EdgeRing) */ bool PolygonizeDirectedEdge::isInRing() const { return edgeRing!=NULL; } /* * Sets the ring of directed edges that this directed edge is * a member of. */ void PolygonizeDirectedEdge::setRing(EdgeRing *newEdgeRing) { edgeRing=newEdgeRing; } } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/polygonize/PolygonizeEdge.cpp0000644000175000017500000000214312206417145022715 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeEdge.java rev. 1.3 (JTS-1.10) * **********************************************************************/ #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize PolygonizeEdge::PolygonizeEdge(const LineString *newLine) { line=newLine; } const LineString * PolygonizeEdge::getLine() { return line; } } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/polygonize/PolygonizeGraph.cpp0000644000175000017500000003055212206417145023117 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/PolygonizeGraph.java rev. 6/138 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include //using namespace std; using namespace geos::planargraph; using namespace geos::geom; // Define the following to add assertions on downcasts //#define GEOS_CAST_PARANOIA 1 namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize int PolygonizeGraph::getDegreeNonDeleted(Node *node) { std::vector &edges=node->getOutEdges()->getEdges(); int degree=0; for(unsigned int i=0; iisMarked()) ++degree; } return degree; } int PolygonizeGraph::getDegree(Node *node, long label) { std::vector &edges=node->getOutEdges()->getEdges(); int degree=0; for(unsigned int i=0; igetLabel()==label) ++degree; } return degree; } /** * Deletes all edges at a node */ void PolygonizeGraph::deleteAllEdges(Node *node) { std::vector &edges=node->getOutEdges()->getEdges(); for(unsigned int i=0; isetMarked(true); PolygonizeDirectedEdge *sym=(PolygonizeDirectedEdge*) de->getSym(); if (sym!=NULL) sym->setMarked(true); } } /* * Create a new polygonization graph. */ PolygonizeGraph::PolygonizeGraph(const GeometryFactory *newFactory): factory(newFactory) { } /* * Destroy a PolygonizeGraph */ PolygonizeGraph::~PolygonizeGraph() { unsigned int i; for (i=0; iisEmpty()) return; CoordinateSequence *linePts=CoordinateSequence::removeRepeatedPoints(line->getCoordinatesRO()); /* * This would catch invalid linestrings * (containing duplicated points only) */ if ( linePts->getSize() < 2 ) { delete linePts; return; } const Coordinate& startPt=linePts->getAt(0); const Coordinate& endPt=linePts->getAt(linePts->getSize()-1); Node *nStart=getNode(startPt); Node *nEnd=getNode(endPt); DirectedEdge *de0=new PolygonizeDirectedEdge(nStart, nEnd, linePts->getAt(1), true); newDirEdges.push_back(de0); DirectedEdge *de1=new PolygonizeDirectedEdge(nEnd, nStart, linePts->getAt(linePts->getSize()-2), false); newDirEdges.push_back(de1); Edge *edge=new PolygonizeEdge(line); newEdges.push_back(edge); edge->setDirectedEdges(de0, de1); add(edge); newCoords.push_back(linePts); } Node * PolygonizeGraph::getNode(const Coordinate& pt) { Node *node=findNode(pt); if (node==NULL) { node=new Node(pt); newNodes.push_back(node); // ensure node is only added once to graph add(node); } return node; } void PolygonizeGraph::computeNextCWEdges() { typedef std::vector Nodes; Nodes pns; getNodes(pns); // set the next pointers for the edges around each node for(Nodes::size_type i=0, in=pns.size(); i &ringEdges) { typedef std::vector IntersectionNodes; typedef std::vector RingEdges; IntersectionNodes intNodes; for(RingEdges::size_type i=0, in=ringEdges.size(); igetLabel(); findIntersectionNodes(de, label, intNodes); // set the next pointers for the edges around each node for(IntersectionNodes::size_type j=0, jn=intNodes.size(); j& intNodes) { PolygonizeDirectedEdge *de=startDE; do { Node *node=de->getFromNode(); if (getDegree(node, label) > 1) { intNodes.push_back(node); } de=de->getNext(); assert(de!=NULL); // found NULL DE in ring assert(de==startDE || !de->isInRing()); // found DE already in ring } while (de!=startDE); } /* public */ void PolygonizeGraph::getEdgeRings(std::vector& edgeRingList) { // maybe could optimize this, since most of these pointers should // be set correctly already // by deleteCutEdges() computeNextCWEdges(); // clear labels of all edges in graph label(dirEdges, -1); std::vector maximalRings; findLabeledEdgeRings(dirEdges, maximalRings); convertMaximalToMinimalEdgeRings(maximalRings); maximalRings.clear(); // not needed anymore // find all edgerings for(unsigned int i=0; iisMarked()) continue; if (de->isInRing()) continue; EdgeRing *er=findEdgeRing(de); edgeRingList.push_back(er); } } /* static private */ void PolygonizeGraph::findLabeledEdgeRings(std::vector &dirEdges, std::vector &edgeRingStarts) { typedef std::vector Edges; Edges edges; // label the edge rings formed long currLabel=1; for(Edges::size_type i=0, n=dirEdges.size(); i(dirEdges[i])); #endif PolygonizeDirectedEdge *de = static_cast(dirEdges[i]); if (de->isMarked()) continue; if (de->getLabel() >= 0) continue; edgeRingStarts.push_back(de); findDirEdgesInRing(de, edges); label(edges, currLabel); edges.clear(); ++currLabel; } } /* public */ void PolygonizeGraph::deleteCutEdges(std::vector &cutLines) { computeNextCWEdges(); typedef std::vector DirEdges; // label the current set of edgerings DirEdges junk; findLabeledEdgeRings(dirEdges, junk); junk.clear(); // not needed anymore /* * Cut Edges are edges where both dirEdges have the same label. * Delete them, and record them */ for (DirEdges::size_type i=0, in=dirEdges.size(); i(de_)); #endif PolygonizeDirectedEdge *de = static_cast(de_); if (de->isMarked()) continue; DirectedEdge *sym_ = de->getSym(); #ifdef GEOS_CAST_PARANOIA assert(dynamic_cast(sym_)); #endif PolygonizeDirectedEdge *sym = static_cast(sym_); if (de->getLabel()==sym->getLabel()) { de->setMarked(true); sym->setMarked(true); // save the line as a cut edge Edge *e_ = de->getEdge(); #ifdef GEOS_CAST_PARANOIA assert(dynamic_cast(e_)); #endif PolygonizeEdge *e = static_cast(e_); cutLines.push_back(e->getLine()); } } } void PolygonizeGraph::label(std::vector &dirEdges, long label) { for(unsigned int i=0; isetLabel(label); } } void PolygonizeGraph::computeNextCWEdges(Node *node) { DirectedEdgeStar *deStar=node->getOutEdges(); PolygonizeDirectedEdge *startDE=NULL; PolygonizeDirectedEdge *prevDE=NULL; // the edges are stored in CCW order around the star std::vector &pde=deStar->getEdges(); for(unsigned int i=0; iisMarked()) continue; if (startDE==NULL) startDE=outDE; if (prevDE!=NULL) { PolygonizeDirectedEdge *sym=(PolygonizeDirectedEdge*) prevDE->getSym(); sym->setNext(outDE); } prevDE=outDE; } if (prevDE!=NULL) { PolygonizeDirectedEdge *sym=(PolygonizeDirectedEdge*) prevDE->getSym(); sym->setNext(startDE); } } /** * Computes the next edge pointers going CCW around the given node, for the * given edgering label. * This algorithm has the effect of converting maximal edgerings into * minimal edgerings */ void PolygonizeGraph::computeNextCCWEdges(Node *node, long label) { DirectedEdgeStar *deStar=node->getOutEdges(); PolygonizeDirectedEdge *firstOutDE=NULL; PolygonizeDirectedEdge *prevInDE=NULL; // the edges are stored in CCW order around the star std::vector &edges=deStar->getEdges(); /* * Must use a SIGNED int here to allow for beak condition * to be true. */ for(int i=static_cast(edges.size())-1; i>=0; --i) { PolygonizeDirectedEdge *de=(PolygonizeDirectedEdge*)edges[i]; PolygonizeDirectedEdge *sym=(PolygonizeDirectedEdge*) de->getSym(); PolygonizeDirectedEdge *outDE=NULL; if (de->getLabel()==label) outDE=de; PolygonizeDirectedEdge *inDE=NULL; if (sym->getLabel()==label) inDE= sym; if (outDE==NULL && inDE==NULL) continue; // this edge is not in edgering if (inDE != NULL) { prevInDE=inDE; } if (outDE != NULL) { if (prevInDE != NULL) { prevInDE->setNext(outDE); prevInDE=NULL; } if (firstOutDE==NULL) firstOutDE=outDE; } } if (prevInDE != NULL) { assert(firstOutDE != NULL); prevInDE->setNext(firstOutDE); } } /* static private */ void PolygonizeGraph::findDirEdgesInRing(PolygonizeDirectedEdge *startDE, std::vector& edges) { PolygonizeDirectedEdge *de=startDE; do { edges.push_back(de); de=de->getNext(); assert(de != NULL); // found NULL DE in ring assert(de==startDE || !de->isInRing()); // found DE already in ring } while (de != startDE); } EdgeRing * PolygonizeGraph::findEdgeRing(PolygonizeDirectedEdge *startDE) { PolygonizeDirectedEdge *de=startDE; EdgeRing *er=new EdgeRing(factory); // Now, when will we delete those EdgeRings ? newEdgeRings.push_back(er); do { er->add(de); de->setRing(er); de=de->getNext(); assert(de != NULL); // found NULL DE in ring assert(de==startDE || ! de->isInRing()); // found DE already in ring } while (de != startDE); return er; } /* public */ void PolygonizeGraph::deleteDangles(std::vector& dangleLines) { std::vector nodeStack; findNodesOfDegree(1, nodeStack); std::set uniqueDangles; while (!nodeStack.empty()) { Node *node=nodeStack.back(); nodeStack.pop_back(); deleteAllEdges(node); std::vector &nodeOutEdges=node->getOutEdges()->getEdges(); for(unsigned int j=0; jsetMarked(true); PolygonizeDirectedEdge *sym=(PolygonizeDirectedEdge*) de->getSym(); if (sym != NULL) sym->setMarked(true); // save the line as a dangle PolygonizeEdge *e=(PolygonizeEdge*) de->getEdge(); const LineString* ls = e->getLine(); if ( uniqueDangles.insert(ls).second ) dangleLines.push_back(ls); Node *toNode=de->getToNode(); // add the toNode to the list to be processed, // if it is now a dangle if (getDegreeNonDeleted(toNode)==1) nodeStack.push_back(toNode); } } } } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/polygonize/Polygonizer.cpp0000644000175000017500000001576412206417145022327 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/polygonize/Polygonizer.java rev. 1.6 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include // std #include #ifdef _MSC_VER #pragma warning(disable:4355) #endif #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace polygonize { // geos.operation.polygonize Polygonizer::LineStringAdder::LineStringAdder(Polygonizer *p): pol(p) { } void Polygonizer::LineStringAdder::filter_ro(const Geometry *g) { const LineString *ls = dynamic_cast(g); if ( ls ) pol->add(ls); } /* * Create a polygonizer with the same GeometryFactory * as the input Geometry */ Polygonizer::Polygonizer(): lineStringAdder(this), graph(NULL), dangles(), cutEdges(), invalidRingLines(), holeList(), shellList(), polyList(NULL) { } Polygonizer::~Polygonizer() { delete graph; for (unsigned int i=0, n=invalidRingLines.size(); isize(); i *geomList) { for(unsigned int i=0, n=geomList->size(); i *geomList) { for(unsigned int i=0, n=geomList->size(); iapply_ro(&lineStringAdder); } /* * Add a geometry to the linework to be polygonized. * May be called multiple times. * Any dimension of Geometry may be added; * the constituent linework will be extracted and used * * @param g a Geometry with linework to be polygonized */ void Polygonizer::add(const Geometry *g) { g->apply_ro(&lineStringAdder); } /* * Add a linestring to the graph of polygon edges. * * @param line the LineString to add */ void Polygonizer::add(const LineString *line) { // create a new graph using the factory from the input Geometry if (graph==NULL) graph=new PolygonizeGraph(line->getFactory()); graph->addEdge(line); } /* * Gets the list of polygons formed by the polygonization. * @return a collection of Polygons */ vector* Polygonizer::getPolygons() { polygonize(); vector *ret = polyList; polyList = NULL; return ret; } /* public */ const vector& Polygonizer::getDangles() { polygonize(); return dangles; } /* public */ const vector& Polygonizer::getCutEdges() { polygonize(); return cutEdges; } /* public */ const vector& Polygonizer::getInvalidRingLines() { polygonize(); return invalidRingLines; } /* public */ void Polygonizer::polygonize() { // check if already computed if (polyList!=NULL) return; polyList=new vector(); // if no geometries were supplied it's possible graph could be null if (graph==NULL) return; graph->deleteDangles(dangles); graph->deleteCutEdges(cutEdges); vector edgeRingList; graph->getEdgeRings(edgeRingList); #if GEOS_DEBUG cerr<<"Polygonizer::polygonize(): "< validEdgeRingList; invalidRingLines.clear(); /* what if it was populated already ? we should clean ! */ findValidRings(edgeRingList, validEdgeRingList, invalidRingLines); #if GEOS_DEBUG cerr<<" "<push_back(er->getPolygon()); } } /* private */ void Polygonizer::findValidRings(const vector& edgeRingList, vector& validEdgeRingList, vector& invalidRingList) { typedef vector EdgeRingList; for (EdgeRingList::size_type i=0, n=edgeRingList.size(); iisValid()) { validEdgeRingList.push_back(er); } else { // NOTE: polygonize::EdgeRing::getLineString // returned LineString ownership is transferred. invalidRingList.push_back(er->getLineString()); } } } /* private */ void Polygonizer::findShellsAndHoles(const vector& edgeRingList) { holeList.clear(); shellList.clear(); for (unsigned int i=0, n=edgeRingList.size(); iisHole()) holeList.push_back(er); else shellList.push_back(er); } } /* private */ void Polygonizer::assignHolesToShells(const vector& holeList, vector& shellList) { for (unsigned int i=0, n=holeList.size(); i& shellList) { EdgeRing *shell = EdgeRing::findEdgeRingContaining(holeER, &shellList); if (shell!=NULL) shell->addHole(holeER->getRingOwnership()); } } // namespace geos.operation.polygonize } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/predicate/0000755000175000017500000000000012206417235017026 5ustar frankiefrankiegeos-3.4.2/src/operation/predicate/Makefile.am0000644000175000017500000000052712206417145021066 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #prefix=@prefix@ #top_srcdir=@top_srcdir@ noinst_LTLIBRARIES = liboppredicate.la INCLUDES = -I$(top_srcdir)/include liboppredicate_la_SOURCES = \ RectangleIntersects.cpp \ RectangleContains.cpp \ SegmentIntersectionTester.cpp liboppredicate_la_LIBADD = geos-3.4.2/src/operation/predicate/Makefile.in0000644000175000017500000004072212206417164021101 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #prefix=@prefix@ #top_srcdir=@top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/predicate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboppredicate_la_DEPENDENCIES = am_liboppredicate_la_OBJECTS = RectangleIntersects.lo \ RectangleContains.lo SegmentIntersectionTester.lo liboppredicate_la_OBJECTS = $(am_liboppredicate_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liboppredicate_la_SOURCES) DIST_SOURCES = $(liboppredicate_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = liboppredicate.la INCLUDES = -I$(top_srcdir)/include liboppredicate_la_SOURCES = \ RectangleIntersects.cpp \ RectangleContains.cpp \ SegmentIntersectionTester.cpp liboppredicate_la_LIBADD = all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/predicate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/predicate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liboppredicate.la: $(liboppredicate_la_OBJECTS) $(liboppredicate_la_DEPENDENCIES) $(CXXLINK) $(liboppredicate_la_OBJECTS) $(liboppredicate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RectangleContains.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RectangleIntersects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentIntersectionTester.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/predicate/RectangleContains.cpp0000644000175000017500000000715212206417145023142 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/RectangleContains.java rev 1.5 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace predicate { // geos.operation.predicate bool RectangleContains::contains(const Geometry& geom) { if ( ! rectEnv.contains(geom.getEnvelopeInternal()) ) return false; // check that geom is not contained entirely in the rectangle boundary if (isContainedInBoundary(geom)) return false; return true; } /*private*/ bool RectangleContains::isContainedInBoundary(const Geometry& geom) { // polygons can never be wholely contained in the boundary if (dynamic_cast(&geom)) return false; if (const Point *p=dynamic_cast(&geom)) return isPointContainedInBoundary(*p); if (const LineString *l=dynamic_cast(&geom)) return isLineStringContainedInBoundary(*l); for (unsigned i=0, n=geom.getNumGeometries(); i * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/RectangleIntersects.java r378 (JTS-1.12) * **********************************************************************/ #include #include /// for EnvelopeIntersectsVisitor inheritance #include #include #include #include #include #include #include #include //using namespace geos::geom::util; namespace geos { namespace operation { // geos.operation namespace predicate { // geos.operation.predicate //---------------------------------------------------------------- // EnvelopeIntersectsVisitor //---------------------------------------------------------------- class EnvelopeIntersectsVisitor: public geom::util::ShortCircuitedGeometryVisitor { private: const geom::Envelope &rectEnv; bool intersectsVar; // Declare type as noncopyable EnvelopeIntersectsVisitor(const EnvelopeIntersectsVisitor& other); EnvelopeIntersectsVisitor& operator=(const EnvelopeIntersectsVisitor& rhs); protected: /** * Reports whether it can be concluded that an intersection occurs, * or whether further testing is required. * * @return true if an intersection must occur * false if no conclusion can be made */ void visit(const geom::Geometry &element) { const geom::Envelope &elementEnv = *(element.getEnvelopeInternal()); // skip if envelopes do not intersect if ( ! rectEnv.intersects(elementEnv) ) return; // fully contained - must intersect if ( rectEnv.contains(elementEnv) ) { intersectsVar = true; return; } /* * Since the envelopes intersect and the test element is * connected, if the test envelope is completely bisected by * an edge of the rectangle the element and the rectangle * must touch (This is basically an application of the * Jordan Curve Theorem). The alternative situation * is that the test envelope is "on a corner" of the * rectangle envelope, i.e. is not completely bisected. * In this case it is not possible to make a conclusion * about the presence of an intersection. */ if (elementEnv.getMinX() >= rectEnv.getMinX() && elementEnv.getMaxX() <= rectEnv.getMaxX()) { intersectsVar=true; return; } if (elementEnv.getMinY() >= rectEnv.getMinY() && elementEnv.getMaxY() <= rectEnv.getMaxY()) { intersectsVar = true; return; } } bool isDone() { return intersectsVar==true; } public: EnvelopeIntersectsVisitor(const geom::Envelope &env) : rectEnv(env), intersectsVar(false) {} bool intersects() { return intersectsVar; } }; //---------------------------------------------------------------- // ContainsPointVisitor //---------------------------------------------------------------- /** * Tests whether it can be concluded * that a geometry contains a corner point of a rectangle. */ class ContainsPointVisitor: public geom::util::ShortCircuitedGeometryVisitor { private: const geom::Envelope &rectEnv; bool containsPointVar; const geom::CoordinateSequence &rectSeq; // Declare type as noncopyable ContainsPointVisitor(const ContainsPointVisitor& other); ContainsPointVisitor& operator=(const ContainsPointVisitor& rhs); protected: void visit(const geom::Geometry &geom) { using geos::algorithm::locate::SimplePointInAreaLocator; const geom::Polygon *poly; // if test geometry is not polygonal this check is not needed if ( 0 == (poly=dynamic_cast(&geom)) ) { return; } const geom::Envelope &elementEnv = *(geom.getEnvelopeInternal()); if ( !rectEnv.intersects(elementEnv) ) { return; } // test each corner of rectangle for inclusion for (int i=0; i<4; i++) { const geom::Coordinate &rectPt=rectSeq.getAt(i); if ( !elementEnv.contains(rectPt) ) { continue; } // check rect point in poly (rect is known not to // touch polygon at this point) if ( SimplePointInAreaLocator::containsPointInPolygon(rectPt, poly) ) { containsPointVar=true; return; } } } bool isDone() { return containsPointVar; } public: ContainsPointVisitor(const geom::Polygon &rect) : rectEnv(*(rect.getEnvelopeInternal())), containsPointVar(false), rectSeq(*(rect.getExteriorRing()->getCoordinatesRO())) {} bool containsPoint() { return containsPointVar; } }; //---------------------------------------------------------------- // LineIntersectsVisitor //---------------------------------------------------------------- class LineIntersectsVisitor: public geom::util::ShortCircuitedGeometryVisitor { private: //const geom::Polygon& rectangle; const geom::Envelope& rectEnv; const geom::LineString& rectLine; bool intersectsVar; //const geom::CoordinateSequence &rectSeq; void computeSegmentIntersection(const geom::Geometry &geom) { using geos::geom::util::LinearComponentExtracter; // check segment intersection // get all lines from geom (e.g. if it's a multi-ring polygon) geom::LineString::ConstVect lines; LinearComponentExtracter::getLines(geom, lines); SegmentIntersectionTester si; if ( si.hasIntersectionWithLineStrings(rectLine, lines) ) { intersectsVar = true; return; } } // Declare type as noncopyable LineIntersectsVisitor(const LineIntersectsVisitor& other); LineIntersectsVisitor& operator=(const LineIntersectsVisitor& rhs); protected: void visit(const geom::Geometry &geom) { const geom::Envelope &elementEnv = *(geom.getEnvelopeInternal()); // check for envelope intersection if (! rectEnv.intersects(elementEnv) ) return; computeSegmentIntersection(geom); } bool isDone() { return intersectsVar; } public: LineIntersectsVisitor(const geom::Polygon &rect) : //rectangle(rect), rectEnv(*(rect.getEnvelopeInternal())), rectLine(*(rect.getExteriorRing())), intersectsVar(false) //rectSeq(*(rect.getExteriorRing()->getCoordinatesRO())) {} /** * Reports whether any segment intersection exists. * * @return true if a segment intersection exists * false if no segment intersection exists */ bool intersects() const { return intersectsVar; } }; //---------------------------------------------------------------- // RectangleIntersects //---------------------------------------------------------------- bool RectangleIntersects::intersects(const geom::Geometry& geom) { if (!rectEnv.intersects(geom.getEnvelopeInternal())) return false; // test envelope relationships EnvelopeIntersectsVisitor visitor(rectEnv); visitor.applyTo(geom); if (visitor.intersects()) return true; // test if any rectangle corner is contained in the target ContainsPointVisitor ecpVisitor(rectangle); ecpVisitor.applyTo(geom); if (ecpVisitor.containsPoint()) return true; // test if any lines intersect LineIntersectsVisitor liVisitor(rectangle); liVisitor.applyTo(geom); if (liVisitor.intersects()) return true; return false; } } // namespace geos.operation.predicate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/predicate/SegmentIntersectionTester.cpp0000644000175000017500000000607412206417145024721 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/predicate/SegmentIntersectionTester.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include using namespace geos::geom; namespace geos { namespace operation { namespace predicate { bool SegmentIntersectionTester::hasIntersectionWithLineStrings( const LineString &line, const LineString::ConstVect& lines) { hasIntersectionVar = false; for (size_t i=0, n=lines.size(); iintersects(Envelope(pt10, pt11))) continue; for (size_type j = 1; j < seq0size && !hasIntersectionVar; ++j) { seq0.getAt(j - 1, pt00); seq0.getAt(j, pt01); li.computeIntersection(pt00, pt01, pt10, pt11); if (li.hasIntersection()) hasIntersectionVar = true; } } return hasIntersectionVar; } } // namespace predicate } // namespace operation } // namespace geos geos-3.4.2/src/operation/relate/0000755000175000017500000000000012206417236016343 5ustar frankiefrankiegeos-3.4.2/src/operation/relate/EdgeEndBuilder.cpp0000644000175000017500000001032712206417145021653 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBuilder.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate vector * EdgeEndBuilder::computeEdgeEnds(vector *edges) { vector *l=new vector(); for(vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; computeEdgeEnds(e,l); } return l; } /** * Creates stub edges for all the intersections in this * Edge (if any) and inserts them into the graph. */ void EdgeEndBuilder::computeEdgeEnds(Edge *edge, vector *l) { EdgeIntersectionList &eiList=edge->getEdgeIntersectionList(); //Debug.print(eiList); // ensure that the list has entries for the first and last point of the edge eiList.addEndpoints(); EdgeIntersectionList::iterator it=eiList.begin(); // no intersections, so there is nothing to do if (it==eiList.end()) return; EdgeIntersection *eiPrev=NULL; EdgeIntersection *eiCurr=NULL; EdgeIntersection *eiNext=*it; it++; do { eiPrev=eiCurr; eiCurr=eiNext; eiNext=NULL; if (it!=eiList.end()) { eiNext=*it; it++; } if (eiCurr!=NULL) { createEdgeEndForPrev(edge,l,eiCurr,eiPrev); createEdgeEndForNext(edge,l,eiCurr,eiNext); } } while (eiCurr!=NULL); } /** * Create a EdgeStub for the edge before the intersection eiCurr. * The previous intersection is provided * in case it is the endpoint for the stub edge. * Otherwise, the previous point from the parent edge will be the endpoint. * * eiCurr will always be an EdgeIntersection, but eiPrev may be null. */ void EdgeEndBuilder::createEdgeEndForPrev(Edge *edge, vector *l, EdgeIntersection *eiCurr, EdgeIntersection *eiPrev) { int iPrev=eiCurr->segmentIndex; if (eiCurr->dist==0.0) { // if at the start of the edge there is no previous edge if (iPrev==0) return; iPrev--; } Coordinate pPrev(edge->getCoordinate(iPrev)); // if prev intersection is past the previous vertex, use it instead if (eiPrev!=NULL && eiPrev->segmentIndex>=iPrev) pPrev=eiPrev->coord; Label label( edge->getLabel() ); // since edgeStub is oriented opposite to it's parent edge, have to flip sides for edge label label.flip(); EdgeEnd *e=new EdgeEnd(edge,eiCurr->coord,pPrev,label); //e.print(System.out); System.out.println(); l->push_back(e); } /** * Create a StubEdge for the edge after the intersection eiCurr. * The next intersection is provided * in case it is the endpoint for the stub edge. * Otherwise, the next point from the parent edge will be the endpoint. * * eiCurr will always be an EdgeIntersection, but eiNext may be null. */ void EdgeEndBuilder::createEdgeEndForNext(Edge *edge, vector *l, EdgeIntersection *eiCurr, EdgeIntersection *eiNext) { int iNext=eiCurr->segmentIndex + 1; // if there is no next edge there is nothing to do if (iNext>=edge->getNumPoints() && eiNext==NULL) return; Coordinate pNext(edge->getCoordinate(iNext)); // if the next intersection is in the same segment as the current, use it as the endpoint if (eiNext!=NULL && eiNext->segmentIndex==eiCurr->segmentIndex) pNext=eiNext->coord; EdgeEnd *e = new EdgeEnd(edge, eiCurr->coord, pNext, edge->getLabel()); //Debug.println(e); l->push_back(e); } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/EdgeEndBundle.cpp0000644000175000017500000001204512206417145021475 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBundle.java rev. 1.17 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate EdgeEndBundle::EdgeEndBundle(EdgeEnd *e): EdgeEnd(e->getEdge(),e->getCoordinate(), e->getDirectedCoordinate(), e->getLabel()) { edgeEnds=new vector(); insert(e); } EdgeEndBundle::~EdgeEndBundle(){ for(size_t i=0, n=edgeEnds->size(); i* EdgeEndBundle::getEdgeEnds() { return edgeEnds; } void EdgeEndBundle::insert(EdgeEnd *e){ // Assert: start point is the same // Assert: direction is the same edgeEnds->push_back(e); } /** * This computes the overall edge label for the set of * edges in this EdgeStubBundle. It essentially merges * the ON and side labels for each edge. These labels must be compatible */ void EdgeEndBundle::computeLabel( const algorithm::BoundaryNodeRule& boundaryNodeRule) { // create the label. If any of the edges belong to areas, // the label must be an area label bool isArea=false; for(vector::iterator it=edgeEnds->begin(), itEnd=edgeEnds->end(); it != itEnd; it++) { EdgeEnd *e=*it; if (e->getLabel().isArea()) isArea=true; } if (isArea) { label = Label(Location::UNDEF,Location::UNDEF,Location::UNDEF); } else { label = Label(Location::UNDEF); } // compute the On label, and the side labels if present for(int i=0;i<2;i++) { computeLabelOn(i, boundaryNodeRule); if (isArea) computeLabelSides(i); } } void EdgeEndBundle::computeLabelOn(int geomIndex, const algorithm::BoundaryNodeRule& boundaryNodeRule) { // compute the ON location value int boundaryCount=0; bool foundInterior=false; for(vector::iterator it=edgeEnds->begin();itend();it++) { EdgeEnd *e=*it; int loc=e->getLabel().getLocation(geomIndex); if (loc==Location::BOUNDARY) boundaryCount++; if (loc==Location::INTERIOR) foundInterior=true; } int loc=Location::UNDEF; if (foundInterior) loc=Location::INTERIOR; if (boundaryCount>0) { loc = GeometryGraph::determineBoundary(boundaryNodeRule, boundaryCount); } label.setLocation(geomIndex,loc); } /** * Compute the labelling for each side */ void EdgeEndBundle::computeLabelSides(int geomIndex) { computeLabelSide(geomIndex,Position::LEFT); computeLabelSide(geomIndex,Position::RIGHT); } /** * To compute the summary label for a side, the algorithm is: * FOR all edges * IF any edge's location is INTERIOR for the side, side location = INTERIOR * ELSE IF there is at least one EXTERIOR attribute, side location = EXTERIOR * ELSE side location = NULL *
* Note that it is possible for two sides to have apparently contradictory information * i.e. one edge side may indicate that it is in the interior of a geometry, while * another edge side may indicate the exterior of the same geometry. This is * not an incompatibility - GeometryCollections may contain two Polygons that touch * along an edge. This is the reason for Interior-primacy rule above - it * results in the summary label having the Geometry interior on both sides. */ void EdgeEndBundle::computeLabelSide(int geomIndex, int side) { for(vector::iterator it=edgeEnds->begin();itend();it++) { EdgeEnd *e=*it; if (e->getLabel().isArea()) { int loc=e->getLabel().getLocation(geomIndex,side); if (loc==Location::INTERIOR) { label.setLocation(geomIndex,side,Location::INTERIOR); return; } else if (loc==Location::EXTERIOR) { label.setLocation(geomIndex,side,Location::EXTERIOR); } } } } void EdgeEndBundle::updateIM(IntersectionMatrix& im) { Edge::updateIM(label, im); } string EdgeEndBundle::print() { string out="EdgeEndBundle--> Label: "+label.toString()+"\n"; for(vector::iterator it=edgeEnds->begin();itend();it++) { EdgeEnd *e=*it; out+=e->print(); out+="\n"; } return out; } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/EdgeEndBundleStar.cpp0000644000175000017500000000403712206417145022331 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/EdgeEndBundleStar.java rev. 1.13 (JTS-1.10) * **********************************************************************/ #include #include using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate EdgeEndBundleStar::~EdgeEndBundleStar() { EdgeEndStar::iterator it=begin(); EdgeEndStar::iterator endIt=end(); for (; it!=endIt; ++it) { EdgeEndBundle *eeb=static_cast(*it); delete eeb; } } /** * Insert a EdgeEnd in order in the list. * If there is an existing EdgeStubBundle which is parallel, the EdgeEnd is * added to the bundle. Otherwise, a new EdgeEndBundle is created * to contain the EdgeEnd. */ void EdgeEndBundleStar::insert(EdgeEnd *e) { EdgeEndBundle *eb; //set::iterator i=edgeMap->find(e); EdgeEndStar::iterator it=find(e); if (it==end()) { eb=new EdgeEndBundle(e); insertEdgeEnd(eb); } else { eb=static_cast(*it); eb->insert(e); } } void EdgeEndBundleStar::updateIM(IntersectionMatrix& im) { //vector *edges=getEdges(); EdgeEndStar::iterator it=begin(); EdgeEndStar::iterator endIt=end(); for (; it!=endIt; ++it) { EdgeEndBundle *esb=static_cast(*it); esb->updateIM(im); } } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/Makefile.am0000644000175000017500000000062512206417145020401 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboprelate.la INCLUDES = -I$(top_srcdir)/include liboprelate_la_SOURCES = \ EdgeEndBuilder.cpp \ EdgeEndBundle.cpp \ EdgeEndBundleStar.cpp \ RelateComputer.cpp \ RelateNode.cpp \ RelateNodeFactory.cpp \ RelateNodeGraph.cpp \ RelateOp.cpp liboprelate_la_LIBADD = geos-3.4.2/src/operation/relate/Makefile.in0000644000175000017500000005436612206417164020426 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/relate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liboprelate_la_DEPENDENCIES = am_liboprelate_la_OBJECTS = EdgeEndBuilder.lo EdgeEndBundle.lo \ EdgeEndBundleStar.lo RelateComputer.lo RelateNode.lo \ RelateNodeFactory.lo RelateNodeGraph.lo RelateOp.lo liboprelate_la_OBJECTS = $(am_liboprelate_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(liboprelate_la_SOURCES) DIST_SOURCES = $(liboprelate_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = liboprelate.la INCLUDES = -I$(top_srcdir)/include liboprelate_la_SOURCES = \ EdgeEndBuilder.cpp \ EdgeEndBundle.cpp \ EdgeEndBundleStar.cpp \ RelateComputer.cpp \ RelateNode.cpp \ RelateNodeFactory.cpp \ RelateNodeGraph.cpp \ RelateOp.cpp liboprelate_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/relate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/relate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liboprelate.la: $(liboprelate_la_OBJECTS) $(liboprelate_la_DEPENDENCIES) $(CXXLINK) $(liboprelate_la_OBJECTS) $(liboprelate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeEndBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeEndBundle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EdgeEndBundleStar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RelateComputer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RelateNode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RelateNodeFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RelateNodeGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RelateOp.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/relate/RelateComputer.cpp0000644000175000017500000003202312206417145022001 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2005 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateComputer.java rev. 1.24 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; using namespace geos::geomgraph; using namespace geos::geomgraph::index; using namespace geos::algorithm; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate RelateComputer::RelateComputer(std::vector *newArg): arg(newArg), nodes(RelateNodeFactory::instance()), im(new IntersectionMatrix()) { } RelateComputer::~RelateComputer() { } IntersectionMatrix* RelateComputer::computeIM() { // since Geometries are finite and embedded in a 2-D space, the EE element must always be 2 im->set(Location::EXTERIOR,Location::EXTERIOR,2); // if the Geometries don't overlap there is nothing to do const Envelope *e1=(*arg)[0]->getGeometry()->getEnvelopeInternal(); const Envelope *e2=(*arg)[1]->getGeometry()->getEnvelopeInternal(); if (!e1->intersects(e2)) { computeDisjointIM(im.get()); return im.release(); } std::auto_ptr si1 ( (*arg)[0]->computeSelfNodes(&li,false) ); std::auto_ptr si2 ( (*arg)[1]->computeSelfNodes(&li,false) ); // compute intersections between edges of the two input geometries std::auto_ptr< SegmentIntersector> intersector ( (*arg)[0]->computeEdgeIntersections((*arg)[1], &li,false) ); computeIntersectionNodes(0); computeIntersectionNodes(1); /* * Copy the labelling for the nodes in the parent Geometries. * These override any labels determined by intersections * between the geometries. */ copyNodesAndLabels(0); copyNodesAndLabels(1); /* * complete the labelling for any nodes which only have a * label for a single geometry */ //Debug.addWatch(nodes.find(new Coordinate(110, 200))); //Debug.printWatch(); labelIsolatedNodes(); //Debug.printWatch(); /* * If a proper intersection was found, we can set a lower bound * on the IM. */ computeProperIntersectionIM(intersector.get(), im.get()); /* * Now process improper intersections * (eg where one or other of the geometrys has a vertex at the * intersection point) * We need to compute the edge graph at all nodes to determine * the IM. */ // build EdgeEnds for all intersections EdgeEndBuilder eeBuilder; std::auto_ptr< std::vector > ee0 ( eeBuilder.computeEdgeEnds((*arg)[0]->getEdges()) ); insertEdgeEnds(ee0.get()); std::auto_ptr< std::vector > ee1 ( eeBuilder.computeEdgeEnds((*arg)[1]->getEdges()) ); insertEdgeEnds(ee1.get()); //Debug.println("==== NodeList ==="); //Debug.print(nodes); labelNodeEdges(); /** * Compute the labeling for isolated components. * Isolated components are components that do not touch any * other components in the graph. * They can be identified by the fact that they will * contain labels containing ONLY a single element, the one for * their parent geometry. * We only need to check components contained in the input graphs, * since isolated components will not have been replaced by new * components formed by intersections. */ //debugPrintln("Graph A isolated edges - "); labelIsolatedEdges(0,1); //debugPrintln("Graph B isolated edges - "); labelIsolatedEdges(1,0); // update the IM from all components updateIM( *im ); return im.release(); } void RelateComputer::insertEdgeEnds(std::vector *ee) { for(std::vector::iterator i=ee->begin();iend();i++) { EdgeEnd *e=*i; nodes.add(e); } } /* private */ void RelateComputer::computeProperIntersectionIM(SegmentIntersector *intersector,IntersectionMatrix *imX) { // If a proper intersection is found, we can set a lower bound on the IM. int dimA=(*arg)[0]->getGeometry()->getDimension(); int dimB=(*arg)[1]->getGeometry()->getDimension(); bool hasProper=intersector->hasProperIntersection(); bool hasProperInterior=intersector->hasProperInteriorIntersection(); // For Geometry's of dim 0 there can never be proper intersections. /** * If edge segments of Areas properly intersect, the areas must properly overlap. */ if (dimA==2 && dimB==2) { if (hasProper) imX->setAtLeast("212101212"); } /** * If an Line segment properly intersects an edge segment of an Area, * it follows that the Interior of the Line intersects the Boundary of the Area. * If the intersection is a proper interior intersection, then * there is an Interior-Interior intersection too. * Note that it does not follow that the Interior of the Line intersects the Exterior * of the Area, since there may be another Area component which contains the rest of the Line. */ else if (dimA==2 && dimB==1) { if (hasProper) imX->setAtLeast("FFF0FFFF2"); if (hasProperInterior) imX->setAtLeast("1FFFFF1FF"); } else if (dimA==1 && dimB==2) { if (hasProper) imX->setAtLeast("F0FFFFFF2"); if (hasProperInterior) imX->setAtLeast("1F1FFFFFF"); } /* If edges of LineStrings properly intersect *in an interior point*, all we can deduce is that the interiors intersect. (We can NOT deduce that the exteriors intersect, since some other segments in the geometries might cover the points in the neighbourhood of the intersection.) It is important that the point be known to be an interior point of both Geometries, since it is possible in a self-intersecting geometry to have a proper intersection on one segment that is also a boundary point of another segment. */ else if (dimA==1 && dimB==1) { if (hasProperInterior) imX->setAtLeast("0FFFFFFFF"); } } /** * Copy all nodes from an arg geometry into this graph. * The node label in the arg geometry overrides any previously computed * label for that argIndex. * (E.g. a node may be an intersection node with * a computed label of BOUNDARY, * but in the original arg Geometry it is actually * in the interior due to the Boundary Determination Rule) */ void RelateComputer::copyNodesAndLabels(int argIndex) { const NodeMap* nm = (*arg)[argIndex]->getNodeMap(); NodeMap::const_iterator nodeIt=nm->begin(), nodeEnd=nm->end(); for( ; nodeIt!=nodeEnd; nodeIt++) { Node *graphNode=nodeIt->second; Node *newNode=nodes.addNode(graphNode->getCoordinate()); newNode->setLabel(argIndex, graphNode->getLabel().getLocation(argIndex)); //node.print(System.out); } } /** * Insert nodes for all intersections on the edges of a Geometry. * Label the created nodes the same as the edge label if they do not * already have a label. * This allows nodes created by either self-intersections or * mutual intersections to be labelled. * Endpoint nodes will already be labelled from when they were inserted. */ void RelateComputer::computeIntersectionNodes(int argIndex) { std::vector *edges=(*arg)[argIndex]->getEdges(); for(std::vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; int eLoc=e->getLabel().getLocation(argIndex); EdgeIntersectionList &eiL=e->getEdgeIntersectionList(); EdgeIntersectionList::iterator it=eiL.begin(); EdgeIntersectionList::iterator end=eiL.end(); for( ; it!=end; ++it) { EdgeIntersection *ei=*it; assert(dynamic_cast(nodes.addNode(ei->coord))); RelateNode *n=static_cast(nodes.addNode(ei->coord)); if (eLoc==Location::BOUNDARY) { n->setLabelBoundary(argIndex); } else { if (n->getLabel().isNull(argIndex)) n->setLabel(argIndex,Location::INTERIOR); } } } } /* * For all intersections on the edges of a Geometry, * label the corresponding node IF it doesn't already have a label. * This allows nodes created by either self-intersections or * mutual intersections to be labelled. * Endpoint nodes will already be labelled from when they were inserted. */ void RelateComputer::labelIntersectionNodes(int argIndex) { std::vector *edges=(*arg)[argIndex]->getEdges(); for(std::vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; int eLoc=e->getLabel().getLocation(argIndex); EdgeIntersectionList &eiL=e->getEdgeIntersectionList(); EdgeIntersectionList::iterator eiIt=eiL.begin(); EdgeIntersectionList::iterator eiEnd=eiL.end(); for( ; eiIt!=eiEnd; ++eiIt) { EdgeIntersection *ei=*eiIt; RelateNode *n=(RelateNode*) nodes.find(ei->coord); if (n->getLabel().isNull(argIndex)) { if (eLoc==Location::BOUNDARY) n->setLabelBoundary(argIndex); else n->setLabel(argIndex,Location::INTERIOR); } } } } /* private */ void RelateComputer::computeDisjointIM(IntersectionMatrix *imX) { const Geometry *ga=(*arg)[0]->getGeometry(); if (!ga->isEmpty()) { imX->set(Location::INTERIOR,Location::EXTERIOR,ga->getDimension()); imX->set(Location::BOUNDARY,Location::EXTERIOR,ga->getBoundaryDimension()); } const Geometry *gb=(*arg)[1]->getGeometry(); if (!gb->isEmpty()) { imX->set(Location::EXTERIOR,Location::INTERIOR,gb->getDimension()); imX->set(Location::EXTERIOR,Location::BOUNDARY,gb->getBoundaryDimension()); } } void RelateComputer::labelNodeEdges() { std::map &nMap=nodes.nodeMap; std::map::iterator nodeIt; for(nodeIt=nMap.begin();nodeIt!=nMap.end();nodeIt++) { assert(dynamic_cast(nodeIt->second)); RelateNode *node=static_cast(nodeIt->second); node->getEdges()->computeLabelling(arg); //Debug.print(node.getEdges()); //node.print(System.out); } } /*private*/ void RelateComputer::updateIM(IntersectionMatrix& imX) { //Debug.println(im); std::vector::iterator ei=isolatedEdges.begin(); for ( ; eiGraphComponent::updateIM(imX); //Debug.println(im); } std::map &nMap=nodes.nodeMap; std::map::iterator nodeIt; for(nodeIt=nMap.begin();nodeIt!=nMap.end();nodeIt++) { RelateNode *node=(RelateNode*) nodeIt->second; node->updateIM(imX); //Debug.println(im); node->updateIMFromEdges(imX); //Debug.println(im); //node.print(System.out); } } /*private*/ void RelateComputer::labelIsolatedEdges(int thisIndex,int targetIndex) { std::vector *edges=(*arg)[thisIndex]->getEdges(); for(std::vector::iterator i=edges->begin();iend();i++) { Edge *e=*i; if (e->isIsolated()) { labelIsolatedEdge(e,targetIndex,(*arg)[targetIndex]->getGeometry()); isolatedEdges.push_back(e); } } } /* private */ void RelateComputer::labelIsolatedEdge(Edge *e, int targetIndex, const Geometry *target) { // this won't work for GeometryCollections with both dim 2 and 1 geoms if (target->getDimension()>0) { // since edge is not in boundary, may not need the full generality of PointLocator? // Possibly should use ptInArea locator instead? We probably know here // that the edge does not touch the bdy of the target Geometry int loc=ptLocator.locate(e->getCoordinate(), target); e->getLabel().setAllLocations(targetIndex,loc); } else { e->getLabel().setAllLocations(targetIndex,Location::EXTERIOR); } //System.out.println(e.getLabel()); } /*private*/ void RelateComputer::labelIsolatedNodes() { NodeMap::iterator nodeIt=nodes.begin(), nodeEnd=nodes.end(); for( ; nodeIt!=nodeEnd; nodeIt++) { Node *n=nodeIt->second; const Label& label = n->getLabel(); // isolated nodes should always have at least one geometry in their label assert(label.getGeometryCount()>0); // node with empty label found if (n->isIsolated()) { if (label.isNull(0)) labelIsolatedNode(n,0); else labelIsolatedNode(n,1); } } } /* private */ void RelateComputer::labelIsolatedNode(Node *n,int targetIndex) { int loc=ptLocator.locate(n->getCoordinate(), (*arg)[targetIndex]->getGeometry()); n->getLabel().setAllLocations(targetIndex,loc); //debugPrintln(n.getLabel()); } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/RelateNode.cpp0000644000175000017500000000334012206417145021070 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNode.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate RelateNode::RelateNode(const Coordinate& coord, EdgeEndStar *edges): Node(coord,edges) {} RelateNode::~RelateNode() { } /** * Update the IM with the contribution for this component. * A component only contributes if it has a labelling for both parent geometries */ void RelateNode::computeIM(IntersectionMatrix& im) { im.setAtLeastIfValid(label.getLocation(0), label.getLocation(1),0); } void RelateNode::updateIMFromEdges(IntersectionMatrix& im) { assert(dynamic_cast(edges)); EdgeEndBundleStar* eebs=static_cast(edges); eebs->updateIM(im); } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/RelateNodeFactory.cpp0000644000175000017500000000246212206417145022424 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNodeFactory.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #include #include #include using namespace geos::geom; using namespace geos::geomgraph; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate Node* RelateNodeFactory::createNode(const Coordinate &coord) const { return new RelateNode(coord, new EdgeEndBundleStar()); } const NodeFactory & RelateNodeFactory::instance() { static const RelateNodeFactory rnf; return rnf; } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/RelateNodeGraph.cpp0000644000175000017500000001056212206417145022056 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateNodeGraph.java rev. 1.11 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate RelateNodeGraph::RelateNodeGraph() { nodes=new NodeMap(RelateNodeFactory::instance()); } RelateNodeGraph::~RelateNodeGraph() { delete nodes; } map& RelateNodeGraph::getNodeMap() { return nodes->nodeMap; } void RelateNodeGraph::build(GeometryGraph *geomGraph) { // compute nodes for intersections between previously noded edges computeIntersectionNodes(geomGraph,0); /** * Copy the labelling for the nodes in the parent Geometry. These override * any labels determined by intersections. */ copyNodesAndLabels(geomGraph,0); /** * Build EdgeEnds for all intersections. */ EdgeEndBuilder *eeBuilder=new EdgeEndBuilder(); vector *eeList=eeBuilder->computeEdgeEnds(geomGraph->getEdges()); insertEdgeEnds(eeList); delete eeBuilder; delete eeList; //Debug.println("==== NodeList ==="); //Debug.print(nodes); } /** * Insert nodes for all intersections on the edges of a Geometry. * Label the created nodes the same as the edge label if they do not * already have a label. * This allows nodes created by either self-intersections or * mutual intersections to be labelled. * Endpoint nodes will already be labelled from when they were inserted. * * Precondition: edge intersections have been computed. */ void RelateNodeGraph::computeIntersectionNodes(GeometryGraph *geomGraph, int argIndex) { vector *edges=geomGraph->getEdges(); vector::iterator edgeIt=edges->begin(); for( ; edgeItend(); ++edgeIt) { Edge *e=*edgeIt; int eLoc=e->getLabel().getLocation(argIndex); EdgeIntersectionList &eiL=e->getEdgeIntersectionList(); EdgeIntersectionList::iterator eiIt=eiL.begin(); EdgeIntersectionList::iterator eiEnd=eiL.end(); for( ; eiIt!=eiEnd; ++eiIt) { EdgeIntersection *ei=*eiIt; RelateNode *n=(RelateNode*) nodes->addNode(ei->coord); if (eLoc==Location::BOUNDARY) n->setLabelBoundary(argIndex); else { if (n->getLabel().isNull(argIndex)) n->setLabel(argIndex,Location::INTERIOR); } } } } /** * Copy all nodes from an arg geometry into this graph. * The node label in the arg geometry overrides any previously computed * label for that argIndex. * (E.g. a node may be an intersection node with * a computed label of BOUNDARY, * but in the original arg Geometry it is actually * in the interior due to the Boundary Determination Rule) */ void RelateNodeGraph::copyNodesAndLabels(GeometryGraph *geomGraph,int argIndex) { map &nMap=geomGraph->getNodeMap()->nodeMap; map::iterator nodeIt; for(nodeIt=nMap.begin();nodeIt!=nMap.end();nodeIt++) { Node *graphNode=nodeIt->second; Node *newNode=nodes->addNode(graphNode->getCoordinate()); newNode->setLabel(argIndex,graphNode->getLabel().getLocation(argIndex)); //node.print(System.out); } } void RelateNodeGraph::insertEdgeEnds(vector *ee) { for(vector::iterator i=ee->begin();iend();i++) { EdgeEnd *e=*i; nodes->add(e); } } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/relate/RelateOp.cpp0000644000175000017500000000354012206417145020563 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/relate/RelateOp.java rev. 1.19 (JTS-1.10) * **********************************************************************/ #include #include // Forward declarations namespace geos { namespace geom { class IntersectionMatrix; class Geometry; } } using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace relate { // geos.operation.relate IntersectionMatrix* RelateOp::relate(const Geometry *a, const Geometry *b) { RelateOp relOp(a,b); return relOp.getIntersectionMatrix(); } IntersectionMatrix* RelateOp::relate(const Geometry *a, const Geometry *b, const algorithm::BoundaryNodeRule& boundaryNodeRule) { RelateOp relOp(a, b, boundaryNodeRule); return relOp.getIntersectionMatrix(); } RelateOp::RelateOp(const Geometry *g0, const Geometry *g1): GeometryGraphOperation(g0, g1), relateComp(&arg) { } RelateOp::RelateOp(const Geometry *g0, const Geometry *g1, const algorithm::BoundaryNodeRule& boundaryNodeRule) : GeometryGraphOperation(g0, g1, boundaryNodeRule), relateComp(&arg) { } RelateOp::~RelateOp() { } IntersectionMatrix* RelateOp::getIntersectionMatrix() { return relateComp.computeIM(); } } // namespace geos.operation.relate } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/sharedpaths/0000755000175000017500000000000012206417236017375 5ustar frankiefrankiegeos-3.4.2/src/operation/sharedpaths/Makefile.am0000644000175000017500000000033112206417145021425 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopsharedpaths.la INCLUDES = -I$(top_srcdir)/include libopsharedpaths_la_SOURCES = \ SharedPathsOp.cpp geos-3.4.2/src/operation/sharedpaths/Makefile.in0000644000175000017500000005272412206417164021454 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/sharedpaths DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopsharedpaths_la_LIBADD = am_libopsharedpaths_la_OBJECTS = SharedPathsOp.lo libopsharedpaths_la_OBJECTS = $(am_libopsharedpaths_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopsharedpaths_la_SOURCES) DIST_SOURCES = $(libopsharedpaths_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopsharedpaths.la INCLUDES = -I$(top_srcdir)/include libopsharedpaths_la_SOURCES = \ SharedPathsOp.cpp all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/sharedpaths/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/sharedpaths/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopsharedpaths.la: $(libopsharedpaths_la_OBJECTS) $(libopsharedpaths_la_DEPENDENCIES) $(CXXLINK) $(libopsharedpaths_la_OBJECTS) $(libopsharedpaths_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SharedPathsOp.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/sharedpaths/SharedPathsOp.cpp0000644000175000017500000001116112206417145022605 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: original work * * Developed by Sandro Santilli (strk@keybit.net) * for Faunalia (http://www.faunalia.it) * with funding from Regione Toscana - Settore SISTEMA INFORMATIVO * TERRITORIALE ED AMBIENTALE - for the project: "Sviluppo strumenti * software per il trattamento di dati geografici basati su QuantumGIS * e Postgis (CIG 0494241492)" * **********************************************************************/ #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace sharedpaths { // geos.operation.sharedpaths /* public static */ void SharedPathsOp::sharedPathsOp(const Geometry& g1, const Geometry& g2, PathList& sameDirection, PathList& oppositeDirection) { SharedPathsOp sp(g1, g2); sp.getSharedPaths(sameDirection, oppositeDirection); } /* public */ SharedPathsOp::SharedPathsOp( const geom::Geometry& g1, const geom::Geometry& g2) : _g1(g1), _g2(g2), _gf(*g1.getFactory()) { checkLinealInput(_g1); checkLinealInput(_g2); } /* private */ void SharedPathsOp::checkLinealInput(const geom::Geometry& g) { if ( ! dynamic_cast(&g) && ! dynamic_cast(&g) ) { throw util::IllegalArgumentException("Geometry is not lineal"); } } /* public */ void SharedPathsOp::getSharedPaths(PathList& forwDir, PathList& backDir) { PathList paths; findLinearIntersections(paths); for (size_t i=0, n=paths.size(); i full ( OverlayOp::overlayOp( &_g1, &_g2, OverlayOp::opINTERSECTION) ); // NOTE: intersection of equal lines yelds splitted lines, // should we sew them back ? for (size_t i=0, n=full->getNumGeometries(); igetGeometryN(i); const LineString* path = dynamic_cast(sub); if ( path ) { // NOTE: we're making a copy here, wouldn't be needed // for a simple predicate to.push_back(_gf.createLineString(*path).release()); } } } /* private */ bool SharedPathsOp::isForward(const geom::LineString& edge, const geom::Geometry& geom) { using namespace geos::linearref; /* ALGO: 1. find first point of edge on geom (linearref) 2. find second point of edge on geom (linearref) 3. if first < second, we're forward PRECONDITIONS: 1. edge has at least 2 points 2. edge first two points are not equal 3. geom is simple */ const Coordinate& pt1 = edge.getCoordinateN(0); const Coordinate& pt2 = edge.getCoordinateN(1); /* * We move the coordinate somewhat closer, to avoid * vertices of the geometry being checked (geom). * * This is mostly only needed when one of the two points * of the edge is an endpoint of a _closed_ geom. * We have an unit test for this... */ Coordinate pt1i = LinearLocation::pointAlongSegmentByFraction(pt1, pt2, 0.1); Coordinate pt2i = LinearLocation::pointAlongSegmentByFraction(pt1, pt2, 0.9); LinearLocation l1 = LocationIndexOfPoint::indexOf(&geom, pt1i); LinearLocation l2 = LocationIndexOfPoint::indexOf(&geom, pt2i); return l1.compareTo(l2) < 0; } } // namespace geos.operation.sharedpaths } // namespace geos::operation } // namespace geos geos-3.4.2/src/operation/union/0000755000175000017500000000000012206417236016217 5ustar frankiefrankiegeos-3.4.2/src/operation/union/CascadedPolygonUnion.cpp0000644000175000017500000001724312206417145023001 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/union/CascadedPolygonUnion.java r487 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include #include // std #include #include #include #include namespace geos { namespace operation { // geos.operation namespace geounion { // geos.operation.geounion /////////////////////////////////////////////////////////////////////////////// void GeometryListHolder::deleteItem(geom::Geometry* item) { delete item; } /////////////////////////////////////////////////////////////////////////////// geom::Geometry* CascadedPolygonUnion::Union(std::vector* polys) { CascadedPolygonUnion op (polys); return op.Union(); } geom::Geometry* CascadedPolygonUnion::Union(const geom::MultiPolygon* multipoly) { std::vector polys; typedef geom::MultiPolygon::const_iterator iterator; iterator end = multipoly->end(); for (iterator i = multipoly->begin(); i != end; ++i) polys.push_back(dynamic_cast(*i)); CascadedPolygonUnion op (&polys); return op.Union(); } geom::Geometry* CascadedPolygonUnion::Union() { if (inputPolys->empty()) return NULL; geomFactory = inputPolys->front()->getFactory(); /** * A spatial index to organize the collection * into groups of close geometries. * This makes unioning more efficient, since vertices are more likely * to be eliminated on each round. */ index::strtree::STRtree index(STRTREE_NODE_CAPACITY); typedef std::vector::iterator iterator_type; iterator_type end = inputPolys->end(); for (iterator_type i = inputPolys->begin(); i != end; ++i) { geom::Geometry* g = dynamic_cast(*i); index.insert(g->getEnvelopeInternal(), g); } std::auto_ptr itemTree (index.itemsTree()); return unionTree(itemTree.get()); } geom::Geometry* CascadedPolygonUnion::unionTree( index::strtree::ItemsList* geomTree) { /** * Recursively unions all subtrees in the list into single geometries. * The result is a list of Geometry's only */ std::auto_ptr geoms(reduceToGeometries(geomTree)); return binaryUnion(geoms.get()); } geom::Geometry* CascadedPolygonUnion::binaryUnion(GeometryListHolder* geoms) { return binaryUnion(geoms, 0, geoms->size()); } geom::Geometry* CascadedPolygonUnion::binaryUnion(GeometryListHolder* geoms, std::size_t start, std::size_t end) { if (end - start <= 1) { return unionSafe(geoms->getGeometry(start), NULL); } else if (end - start == 2) { return unionSafe(geoms->getGeometry(start), geoms->getGeometry(start + 1)); } else { // recurse on both halves of the list std::size_t mid = (end + start) / 2; std::auto_ptr g0 (binaryUnion(geoms, start, mid)); std::auto_ptr g1 (binaryUnion(geoms, mid, end)); return unionSafe(g0.get(), g1.get()); } } GeometryListHolder* CascadedPolygonUnion::reduceToGeometries(index::strtree::ItemsList* geomTree) { std::auto_ptr geoms (new GeometryListHolder()); typedef index::strtree::ItemsList::iterator iterator_type; iterator_type end = geomTree->end(); for (iterator_type i = geomTree->begin(); i != end; ++i) { if ((*i).get_type() == index::strtree::ItemsListItem::item_is_list) { std::auto_ptr geom (unionTree((*i).get_itemslist())); geoms->push_back_owned(geom.get()); geom.release(); } else if ((*i).get_type() == index::strtree::ItemsListItem::item_is_geometry) { geoms->push_back(reinterpret_cast((*i).get_geometry())); } else { assert(!"should never be reached"); } } return geoms.release(); } geom::Geometry* CascadedPolygonUnion::unionSafe(geom::Geometry* g0, geom::Geometry* g1) { if (g0 == NULL && g1 == NULL) return NULL; if (g0 == NULL) return g1->clone(); if (g1 == NULL) return g0->clone(); return unionOptimized(g0, g1); } geom::Geometry* CascadedPolygonUnion::unionOptimized(geom::Geometry* g0, geom::Geometry* g1) { geom::Envelope const* g0Env = g0->getEnvelopeInternal(); geom::Envelope const* g1Env = g1->getEnvelopeInternal(); if (!g0Env->intersects(g1Env)) return geom::util::GeometryCombiner::combine(g0, g1); if (g0->getNumGeometries() <= 1 && g1->getNumGeometries() <= 1) return unionActual(g0, g1); geom::Envelope commonEnv; g0Env->intersection(*g1Env, commonEnv); return unionUsingEnvelopeIntersection(g0, g1, commonEnv); } geom::Geometry* CascadedPolygonUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0, geom::Geometry* g1, geom::Envelope const& common) { std::vector disjointPolys; std::auto_ptr g0Int(extractByEnvelope(common, g0, disjointPolys)); std::auto_ptr g1Int(extractByEnvelope(common, g1, disjointPolys)); std::auto_ptr u(unionActual(g0Int.get(), g1Int.get())); disjointPolys.push_back(u.get()); return geom::util::GeometryCombiner::combine(disjointPolys); } geom::Geometry* CascadedPolygonUnion::extractByEnvelope(geom::Envelope const& env, geom::Geometry* geom, std::vector& disjointGeoms) { std::vector intersectingGeoms; for (std::size_t i = 0; i < geom->getNumGeometries(); i++) { geom::Geometry* elem = const_cast(geom->getGeometryN(i)); if (elem->getEnvelopeInternal()->intersects(env)) intersectingGeoms.push_back(elem); else disjointGeoms.push_back(elem); } return geomFactory->buildGeometry(intersectingGeoms); } geom::Geometry* CascadedPolygonUnion::unionActual(geom::Geometry* g0, geom::Geometry* g1) { return restrictToPolygons(std::auto_ptr(g0->Union(g1))).release(); } std::auto_ptr CascadedPolygonUnion::restrictToPolygons(std::auto_ptr g) { using namespace geom; using namespace std; if ( dynamic_cast(g.get()) ) { return g; } Polygon::ConstVect polygons; util::PolygonExtracter::getPolygons(*g, polygons); if (polygons.size() == 1) return std::auto_ptr(polygons[0]->clone()); typedef vector GeomVect; Polygon::ConstVect::size_type n = polygons.size(); GeomVect* newpolys = new GeomVect(n); for (Polygon::ConstVect::size_type i=0; iclone(); } return auto_ptr( g->getFactory()->createMultiPolygon(newpolys) ); } } // namespace geos.operation.union } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/union/CascadedUnion.cpp0000644000175000017500000001400412206417145021421 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://trac.osgeo.org/geos * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: ORIGINAL WORK, generalization of CascadedPolygonUnion * **********************************************************************/ #include #include #include #include #include #include // std #include #include #include #include namespace geos { namespace operation { // geos.operation namespace geounion { // geos.operation.geounion geom::Geometry* CascadedUnion::Union(std::vector* polys) { CascadedUnion op (polys); return op.Union(); } geom::Geometry* CascadedUnion::Union() { if (inputGeoms->empty()) return NULL; geomFactory = inputGeoms->front()->getFactory(); /** * A spatial index to organize the collection * into groups of close geometries. * This makes unioning more efficient, since vertices are more likely * to be eliminated on each round. */ index::strtree::STRtree index(STRTREE_NODE_CAPACITY); typedef std::vector::const_iterator iterator_type; iterator_type end = inputGeoms->end(); for (iterator_type i = inputGeoms->begin(); i != end; ++i) { geom::Geometry* g = *i; index.insert(g->getEnvelopeInternal(), g); } std::auto_ptr itemTree (index.itemsTree()); return unionTree(itemTree.get()); } geom::Geometry* CascadedUnion::unionTree( index::strtree::ItemsList* geomTree) { /** * Recursively unions all subtrees in the list into single geometries. * The result is a list of Geometry's only */ std::auto_ptr geoms(reduceToGeometries(geomTree)); return binaryUnion(geoms.get()); } geom::Geometry* CascadedUnion::binaryUnion(GeometryListHolder* geoms) { return binaryUnion(geoms, 0, geoms->size()); } geom::Geometry* CascadedUnion::binaryUnion(GeometryListHolder* geoms, std::size_t start, std::size_t end) { if (end - start <= 1) { return unionSafe(geoms->getGeometry(start), NULL); } else if (end - start == 2) { return unionSafe(geoms->getGeometry(start), geoms->getGeometry(start + 1)); } else { // recurse on both halves of the list std::size_t mid = (end + start) / 2; std::auto_ptr g0 (binaryUnion(geoms, start, mid)); std::auto_ptr g1 (binaryUnion(geoms, mid, end)); return unionSafe(g0.get(), g1.get()); } } GeometryListHolder* CascadedUnion::reduceToGeometries(index::strtree::ItemsList* geomTree) { std::auto_ptr geoms (new GeometryListHolder()); typedef index::strtree::ItemsList::iterator iterator_type; iterator_type end = geomTree->end(); for (iterator_type i = geomTree->begin(); i != end; ++i) { if ((*i).get_type() == index::strtree::ItemsListItem::item_is_list) { std::auto_ptr geom (unionTree((*i).get_itemslist())); geoms->push_back_owned(geom.get()); geom.release(); } else if ((*i).get_type() == index::strtree::ItemsListItem::item_is_geometry) { geoms->push_back(reinterpret_cast((*i).get_geometry())); } else { assert(!"should never be reached"); } } return geoms.release(); } geom::Geometry* CascadedUnion::unionSafe(geom::Geometry* g0, geom::Geometry* g1) { if (g0 == NULL && g1 == NULL) return NULL; if (g0 == NULL) return g1->clone(); if (g1 == NULL) return g0->clone(); return unionOptimized(g0, g1); } geom::Geometry* CascadedUnion::unionOptimized(geom::Geometry* g0, geom::Geometry* g1) { geom::Envelope const* g0Env = g0->getEnvelopeInternal(); geom::Envelope const* g1Env = g1->getEnvelopeInternal(); if (!g0Env->intersects(g1Env)) return geom::util::GeometryCombiner::combine(g0, g1); if (g0->getNumGeometries() <= 1 && g1->getNumGeometries() <= 1) return unionActual(g0, g1); geom::Envelope commonEnv; g0Env->intersection(*g1Env, commonEnv); return unionUsingEnvelopeIntersection(g0, g1, commonEnv); } geom::Geometry* CascadedUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0, geom::Geometry* g1, geom::Envelope const& common) { std::vector disjointPolys; std::auto_ptr g0Int(extractByEnvelope(common, g0, disjointPolys)); std::auto_ptr g1Int(extractByEnvelope(common, g1, disjointPolys)); std::auto_ptr u(unionActual(g0Int.get(), g1Int.get())); disjointPolys.push_back(u.get()); return geom::util::GeometryCombiner::combine(disjointPolys); } geom::Geometry* CascadedUnion::extractByEnvelope(geom::Envelope const& env, geom::Geometry* geom, std::vector& disjointGeoms) { std::vector intersectingGeoms; for (std::size_t i = 0; i < geom->getNumGeometries(); i++) { geom::Geometry* elem = const_cast(geom->getGeometryN(i)); if (elem->getEnvelopeInternal()->intersects(env)) intersectingGeoms.push_back(elem); else disjointGeoms.push_back(elem); } return geomFactory->buildGeometry(intersectingGeoms); } geom::Geometry* CascadedUnion::unionActual(geom::Geometry* g0, geom::Geometry* g1) { return g0->Union(g1); } } // namespace geos.operation.union } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/union/Makefile.am0000644000175000017500000000047112206417145020254 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopunion.la INCLUDES = -I$(top_srcdir)/include libopunion_la_SOURCES = \ CascadedPolygonUnion.cpp \ CascadedUnion.cpp \ PointGeometryUnion.cpp \ UnaryUnionOp.cpp libopunion_la_LIBADD = geos-3.4.2/src/operation/union/Makefile.in0000644000175000017500000005343312206417164020274 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/union DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopunion_la_DEPENDENCIES = am_libopunion_la_OBJECTS = CascadedPolygonUnion.lo CascadedUnion.lo \ PointGeometryUnion.lo UnaryUnionOp.lo libopunion_la_OBJECTS = $(am_libopunion_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopunion_la_SOURCES) DIST_SOURCES = $(libopunion_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopunion.la INCLUDES = -I$(top_srcdir)/include libopunion_la_SOURCES = \ CascadedPolygonUnion.cpp \ CascadedUnion.cpp \ PointGeometryUnion.cpp \ UnaryUnionOp.cpp libopunion_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/union/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/union/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopunion.la: $(libopunion_la_OBJECTS) $(libopunion_la_DEPENDENCIES) $(CXXLINK) $(libopunion_la_OBJECTS) $(libopunion_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CascadedPolygonUnion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CascadedUnion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PointGeometryUnion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnaryUnionOp.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/union/PointGeometryUnion.cpp0000644000175000017500000000611512206417145022543 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli // for auto_ptr #include // for assert #include // for copy #include #include #include #include #include #include #include #include #include #include namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /* public */ std::auto_ptr PointGeometryUnion::Union() const { using namespace geom; using algorithm::PointLocator; using geom::util::GeometryCombiner; PointLocator locater; // use a set to eliminate duplicates, as required for union std::set exteriorCoords; for (std::size_t i=0, n=pointGeom.getNumGeometries(); i(pointGeom.getGeometryN(i)); assert(point); const Coordinate* coord = point->getCoordinate(); int loc = locater.locate(*coord, &otherGeom); if (loc == Location::EXTERIOR) exteriorCoords.insert(*coord); } // if no points are in exterior, return the other geom if (exteriorCoords.empty()) return std::auto_ptr(otherGeom.clone()); // make a puntal geometry of appropriate size std::auto_ptr ptComp; if (exteriorCoords.size() == 1) { ptComp.reset( geomFact->createPoint(*(exteriorCoords.begin())) ); } else { std::vector coords(exteriorCoords.size()); std::copy(exteriorCoords.begin(), exteriorCoords.end(), coords.begin()); ptComp.reset( geomFact->createMultiPoint(coords) ); } // add point component to the other geometry return std::auto_ptr ( GeometryCombiner::combine(ptComp.get(), &otherGeom) ); } /* public static */ std::auto_ptr PointGeometryUnion::Union(const geom::Puntal& pointGeom, const geom::Geometry& otherGeom) { PointGeometryUnion unioner(pointGeom, otherGeom); return unioner.Union(); } /* public */ PointGeometryUnion::PointGeometryUnion(const geom::Puntal& pointGeom_, const geom::Geometry& otherGeom_) : pointGeom ( pointGeom_ ), otherGeom ( otherGeom_ ) { geomFact = otherGeom.getFactory(); } } // namespace geos::operation::union } // namespace geos::operation } // namespace geos geos-3.4.2/src/operation/union/UnaryUnionOp.cpp0000644000175000017500000000767312206417145021345 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli // for auto_ptr #include // for assert #include // for copy #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace geos { namespace operation { // geos::operation namespace geounion { // geos::operation::geounion /*private*/ std::auto_ptr UnaryUnionOp::unionWithNull(std::auto_ptr g0, std::auto_ptr g1) { std::auto_ptr ret; if ( ( ! g0.get() ) && ( ! g1.get() ) ) return ret; if ( ! g0.get() ) return g1; if ( ! g1.get() ) return g0; ret.reset( g0->Union(g1.get()) ); return ret; } /*public*/ std::auto_ptr UnaryUnionOp::Union() { using geom::Puntal; typedef std::auto_ptr GeomAutoPtr; GeomAutoPtr ret; if ( ! geomFact ) return ret; /** * For points and lines, only a single union operation is * required, since the OGC model allowings self-intersecting * MultiPoint and MultiLineStrings. * This is not the case for polygons, so Cascaded Union is required. */ GeomAutoPtr unionPoints; if (!points.empty()) { GeomAutoPtr ptGeom = geomFact->buildGeometry( points.begin(), points.end() ); unionPoints = unionNoOpt(*ptGeom); } GeomAutoPtr unionLines; if (!lines.empty()) { /* JTS compatibility NOTE: * we use cascaded here for robustness [1] * but also add a final unionNoOpt step to deal with * self-intersecting lines [2] * * [1](http://trac.osgeo.org/geos/ticket/392 * [2](http://trac.osgeo.org/geos/ticket/482 * */ unionLines.reset( CascadedUnion::Union( lines.begin(), lines.end() ) ); unionLines = unionNoOpt(*unionLines); } GeomAutoPtr unionPolygons; if (!polygons.empty()) { unionPolygons.reset( CascadedPolygonUnion::Union( polygons.begin(), polygons.end() ) ); } /** * Performing two unions is somewhat inefficient, * but is mitigated by unioning lines and points first */ GeomAutoPtr unionLA = unionWithNull(unionLines, unionPolygons); assert(!unionLines.get()); assert(!unionPolygons.get()); if ( ! unionPoints.get() ) { ret = unionLA; assert(!unionLA.get()); } else if ( ! unionLA.get() ) { ret = unionPoints; assert(!unionPoints.get()); } else { Puntal& up = dynamic_cast(*unionPoints); ret = PointGeometryUnion::Union(up, *unionLA); } if ( ! ret.get() ) { ret.reset( geomFact->createGeometryCollection() ); } return ret; } } // namespace geos::operation::union } // namespace geos::operation } // namespace geos geos-3.4.2/src/operation/valid/0000755000175000017500000000000012206417236016166 5ustar frankiefrankiegeos-3.4.2/src/operation/valid/ConnectedInteriorTester.cpp0000644000175000017500000002272112206417145023502 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2007-2010 Safe Software Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/ConnectedInteriorTester.java rev. 1.15 (JTS-1.10) * ********************************************************************** * * TODO: * * - Remove heap allocation of GeometryFactory (might use a singleton) * - Track MaximalEdgeRing references: we might be deleting them * leaving dangling refs around. * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif //#define GEOS_CAST_PARANOIA 1 #if GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; using namespace geos::geomgraph; using namespace geos::operation::overlay; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid ConnectedInteriorTester::ConnectedInteriorTester(GeometryGraph &newGeomGraph): geometryFactory(new GeometryFactory()), geomGraph(newGeomGraph), disconnectedRingcoord() { } ConnectedInteriorTester::~ConnectedInteriorTester() { delete geometryFactory; } Coordinate& ConnectedInteriorTester::getCoordinate() { return disconnectedRingcoord; } const Coordinate& ConnectedInteriorTester::findDifferentPoint(const CoordinateSequence *coord, const Coordinate& pt) { assert(coord); size_t npts=coord->getSize(); for(size_t i=0; igetAt(i)==pt)) return coord->getAt(i); } return Coordinate::getNull(); } /*public*/ bool ConnectedInteriorTester::isInteriorsConnected() { // node the edges, in case holes touch the shell std::vector splitEdges; geomGraph.computeSplitEdges(&splitEdges); // form the edges into rings PlanarGraph graph(operation::overlay::OverlayNodeFactory::instance()); graph.addEdges(splitEdges); setInteriorEdgesInResult(graph); graph.linkResultDirectedEdges(); std::vector edgeRings; buildEdgeRings(graph.getEdgeEnds(), edgeRings); #if GEOS_DEBUG cerr << "buildEdgeRings constructed " << edgeRings.size() << " edgeRings." << endl; #endif /* * Mark all the edges for the edgeRings corresponding to the shells * of the input polygons. * * Only ONE ring gets marked for each shell - if there are others * which remain unmarked this indicates a disconnected interior. */ visitShellInteriors(geomGraph.getGeometry(), graph); #if GEOS_DEBUG cerr << "after visitShellInteriors edgeRings are " << edgeRings.size() << " edgeRings." << endl; #endif /* * If there are any unvisited shell edges * (i.e. a ring which is not a hole and which has the interior * of the parent area on the RHS) * this means that one or more holes must have split the interior of the * polygon into at least two pieces. The polygon is thus invalid. */ bool res=!hasUnvisitedShellEdge(&edgeRings); #if GEOS_DEBUG cerr << "releasing " << edgeRings.size() << " edgeRings." << endl; #endif // Release memory allocated by buildEdgeRings for(size_t i=0, n=edgeRings.size(); i comes to mind. // for (size_t i=0, n=maximalEdgeRings.size(); i *ee=graph.getEdgeEnds(); for(size_t i=0, n=ee->size(); i((*ee)[i])); DirectedEdge *de=static_cast((*ee)[i]); if ( de->getLabel().getLocation(0, Position::RIGHT) == Location::INTERIOR) { de->setInResult(true); } } } /*private*/ void ConnectedInteriorTester::buildEdgeRings(std::vector *dirEdges, std::vector& minEdgeRings) { #if GEOS_DEBUG cerr << __FUNCTION__ << " got " << dirEdges->size() << " EdgeEnd vector" << endl; #endif typedef std::vector EdgeEnds; //std::vector minEdgeRings; for(EdgeEnds::size_type i=0, n=dirEdges->size(); i((*dirEdges)[i])); #endif DirectedEdge *de=static_cast((*dirEdges)[i]); #if GEOS_DEBUG cerr << "DirectedEdge " << i << ": " << de->print() << endl; #endif // if this edge has not yet been processed if(de->isInResult() && de->getEdgeRing()==NULL) { MaximalEdgeRing* er = new MaximalEdgeRing(de, geometryFactory); // We track MaximalEdgeRings allocations // using the private maximalEdgeRings vector maximalEdgeRings.push_back(er); er->linkDirectedEdgesForMinimalEdgeRings(); er->buildMinimalRings(minEdgeRings); } } /* std::vector *edgeRings=new std::vector(); edgeRings->assign(minEdgeRings.begin(), minEdgeRings.end()); return edgeRings; */ } /** * Mark all the edges for the edgeRings corresponding to the shells * of the input polygons. Note only ONE ring gets marked for each shell. */ void ConnectedInteriorTester::visitShellInteriors(const Geometry *g, PlanarGraph &graph) { if (const Polygon* p=dynamic_cast(g)) { visitInteriorRing(p->getExteriorRing(), graph); } if (const MultiPolygon* mp=dynamic_cast(g)) { for (size_t i=0, n=mp->getNumGeometries(); i(mp->getGeometryN(i)); visitInteriorRing(p->getExteriorRing(), graph); } } } void ConnectedInteriorTester::visitInteriorRing(const LineString *ring, PlanarGraph &graph) { // can't visit an empty ring if(ring->isEmpty()) return; const CoordinateSequence *pts=ring->getCoordinatesRO(); const Coordinate& pt0=pts->getAt(0); /** * Find first point in coord list different to initial point. * Need special check since the first point may be repeated. */ const Coordinate& pt1=findDifferentPoint(pts, pt0); Edge *e=graph.findEdgeInSameDirection(pt0, pt1); DirectedEdge *de=static_cast(graph.findEdgeEnd(e)); DirectedEdge *intDe=NULL; if (de->getLabel().getLocation(0,Position::RIGHT)==Location::INTERIOR) { intDe=de; } else if (de->getSym()->getLabel().getLocation(0,Position::RIGHT)==Location::INTERIOR) { intDe=de->getSym(); } assert(intDe!=NULL); // unable to find dirEdge with Interior on RHS visitLinkedDirectedEdges(intDe); } void ConnectedInteriorTester::visitLinkedDirectedEdges(DirectedEdge *start) { DirectedEdge *startDe=start; DirectedEdge *de=start; //Debug.println(de); do { // found null Directed Edge assert(de!=NULL); de->setVisited(true); de=de->getNext(); //Debug.println(de); } while (de!=startDe); } /*private*/ bool ConnectedInteriorTester::hasUnvisitedShellEdge(std::vector *edgeRings) { #if GEOS_DEBUG cerr << "hasUnvisitedShellEdge called with " << edgeRings->size() << " edgeRings." << endl; #endif for(std::vector::iterator it=edgeRings->begin(), itEnd=edgeRings->end(); it != itEnd; ++it) { EdgeRing *er=*it; assert(er); // don't check hole rings if (er->isHole()) continue; std::vector& edges=er->getEdges(); DirectedEdge *de=edges[0]; assert(de); // don't check CW rings which are holes // (MD - this check may now be irrelevant - 2006-03-09) if (de->getLabel().getLocation(0, Position::RIGHT) != Location::INTERIOR) continue; /* * the edgeRing is CW ring which surrounds the INT * of the area, so check all edges have been visited. * If any are unvisited, this is a disconnected part * of the interior */ for(std::vector::iterator jt=edges.begin(), jtEnd=edges.end(); jt != jtEnd; ++jt) { de=*jt; assert(de); //Debug.print("visted? "); Debug.println(de); if (!de->isVisited()) { //Debug.print("not visited "); Debug.println(de); disconnectedRingcoord=de->getCoordinate(); return true; } } } return false; } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/ConsistentAreaTester.cpp0000644000175000017500000000706712206417145023014 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/ConsistentAreaTester.java rev. 1.14 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include // auto_ptr #include using namespace std; using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid ConsistentAreaTester::ConsistentAreaTester(GeometryGraph *newGeomGraph) : li(), geomGraph(newGeomGraph), nodeGraph(), invalidPoint() { } ConsistentAreaTester::~ConsistentAreaTester() { } Coordinate& ConsistentAreaTester::getInvalidPoint() { return invalidPoint; } bool ConsistentAreaTester::isNodeConsistentArea() { using geomgraph::index::SegmentIntersector; /** * To fully check validity, it is necessary to * compute ALL intersections, including self-intersections within a single edge. */ auto_ptr intersector(geomGraph->computeSelfNodes(&li, true)); if (intersector->hasProperIntersection()) { invalidPoint=intersector->getProperIntersectionPoint(); return false; } nodeGraph.build(geomGraph); return isNodeEdgeAreaLabelsConsistent(); } /*private*/ bool ConsistentAreaTester::isNodeEdgeAreaLabelsConsistent() { assert(geomGraph); map& nMap=nodeGraph.getNodeMap(); map::iterator nodeIt; for(nodeIt=nMap.begin();nodeIt!=nMap.end();nodeIt++) { relate::RelateNode *node=static_cast(nodeIt->second); if (!node->getEdges()->isAreaLabelsConsistent(*geomGraph)) { invalidPoint=node->getCoordinate(); return false; } } return true; } /*public*/ bool ConsistentAreaTester::hasDuplicateRings() { map& nMap=nodeGraph.getNodeMap(); map::iterator nodeIt; for(nodeIt=nMap.begin(); nodeIt!=nMap.end(); ++nodeIt) { assert(dynamic_cast(nodeIt->second)); relate::RelateNode *node=static_cast(nodeIt->second); EdgeEndStar *ees=node->getEdges(); EdgeEndStar::iterator endIt=ees->end(); for(EdgeEndStar::iterator it=ees->begin(); it!=endIt; ++it) { assert(dynamic_cast(*it)); relate::EdgeEndBundle *eeb=static_cast(*it); if (eeb->getEdgeEnds()->size()>1) { invalidPoint=eeb->getEdge()->getCoordinate(0); return true; } } } return false; } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/IndexedNestedRingTester.cpp0000644000175000017500000000631612206417145023431 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/IndexedNestedRingTester.java r399 (JTS-1.12) * **********************************************************************/ #include "IndexedNestedRingTester.h" #include // for use #include // for use #include // for use (findPtNotNode) #include // for use // Forward declarations namespace geos { namespace geom { class CoordinateSequence; class Envelope; } } namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid bool IndexedNestedRingTester::isNonNested() { buildIndex(); for (size_t i=0, n=rings.size(); igetCoordinatesRO(); std::vector results; index->query(innerRing->getEnvelopeInternal(), results); for (size_t j=0, jn=results.size(); j(results[j]); const geom::CoordinateSequence *searchRingPts=searchRing->getCoordinatesRO(); if (innerRing==searchRing) continue; if (!innerRing->getEnvelopeInternal()->intersects( searchRing->getEnvelopeInternal())) { continue; } const geom::Coordinate *innerRingPt = IsValidOp::findPtNotNode(innerRingPts, searchRing, graph); /** * If no non-node pts can be found, this means * that the searchRing touches ALL of the innerRing vertices. * This indicates an invalid polygon, since either * the two holes create a disconnected interior, * or they touch in an infinite number of points * (i.e. along a line segment). * Both of these cases are caught by other tests, * so it is safe to simply skip this situation here. */ if ( ! innerRingPt ) continue; // Unable to find a ring point not a node of // the search ring assert(innerRingPt!=NULL); bool isInside = algorithm::CGAlgorithms::isPointInRing( *innerRingPt, searchRingPts); if (isInside) { nestedPt = innerRingPt; return false; } } } return true; } IndexedNestedRingTester::~IndexedNestedRingTester() { delete index; //delete totalEnv; } void IndexedNestedRingTester::buildIndex() { delete index; index = new index::strtree::STRtree(); for (size_t i=0, n=rings.size(); igetEnvelopeInternal(); index->insert(env, (void*)ring); } } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/IndexedNestedRingTester.h0000644000175000017500000000472112206417145023074 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/IndexedNestedRingTester.java r399 (JTS-1.12) * **********************************************************************/ #ifndef GEOS_OP_VALID_OFFSETCURVEVERTEXLIST_H #define GEOS_OP_VALID_OFFSETCURVEVERTEXLIST_H #include // for composition // Forward declarations namespace geos { namespace geom { //class Envelope; class Coordinate; class LinearRing; } namespace index { class SpatialIndex; } namespace geomgraph { class GeometryGraph; } } namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid /** \brief * Tests whether any of a set of {@link LinearRing}s are * nested inside another ring in the set, using a spatial * index to speed up the comparisons. * */ class IndexedNestedRingTester { public: // @param newGraph : ownership retained by caller IndexedNestedRingTester(geomgraph::GeometryGraph* newGraph) : graph(newGraph), //totalEnv(0), index(0), nestedPt(0) { } ~IndexedNestedRingTester(); /* * Be aware that the returned Coordinate (if != NULL) * will point to storage owned by one of the LinearRing * previously added. If you destroy them, this * will point to an invalid memory address. */ const geom::Coordinate* getNestedPoint() const { return nestedPt; } /// @param ring : ownership retained by caller void add(const geom::LinearRing* ring) { rings.push_back(ring); } bool isNonNested(); private: /// Externally owned geomgraph::GeometryGraph* graph; /// Ownership of this vector elements are externally owned std::vector rings; // CHECK: Owned by (seems unused)? //geom::Envelope* totalEnv; // Owned by us (use auto_ptr ?) geos::index::SpatialIndex* index; // 'index' in JTS // Externally owned, if not null const geom::Coordinate *nestedPt; void buildIndex(); }; } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos #endif // GEOS_OP_VALID_OFFSETCURVEVERTEXLIST_H geos-3.4.2/src/operation/valid/IsValidOp.cpp0000644000175000017500000003665412206417145020541 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2010 Safe Software Inc. * Copyright (C) 2010 Sandro Santilli * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/IsValidOp.java r335 (JTS-1.12) * **********************************************************************/ #include "IndexedNestedRingTester.h" // TODO: private header>? --mloskot #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::algorithm; using namespace geos::geomgraph; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid /** * Find a point from the list of testCoords * that is NOT a node in the edge for the list of searchCoords * * @return the point found, or null if none found */ const Coordinate * IsValidOp::findPtNotNode(const CoordinateSequence *testCoords, const LinearRing *searchRing, GeometryGraph *graph) { // find edge corresponding to searchRing. Edge *searchEdge=graph->findEdge(searchRing); // find a point in the testCoords which is not a node of the searchRing EdgeIntersectionList &eiList=searchEdge->getEdgeIntersectionList(); // somewhat inefficient - is there a better way? (Use a node map, for instance?) unsigned int npts=testCoords->getSize(); for(unsigned int i=0; igetAt(i); if (!eiList.isIntersection(pt)) { return &pt; } } return NULL; } bool IsValidOp::isValid() { checkValid(); return validErr==NULL; } /* static public */ bool IsValidOp::isValid(const Coordinate &coord) { if (! FINITE(coord.x) ) return false; if (! FINITE(coord.y) ) return false; return true; } /* static public */ bool IsValidOp::isValid(const Geometry &g) { IsValidOp op(&g); return op.isValid(); } TopologyValidationError * IsValidOp::getValidationError() { checkValid(); return validErr; } void IsValidOp::checkValid() { if (isChecked) return; checkValid(parentGeometry); isChecked=true; } void IsValidOp::checkValid(const Geometry *g) { assert( validErr == NULL ); if (0 == g) return; // empty geometries are always valid! if (g->isEmpty()) return; if ( const Point* x = dynamic_cast(g) ) checkValid(x); // LineString also handles LinearRings, so we check LinearRing first else if ( const LinearRing* x = dynamic_cast(g) ) checkValid(x); else if ( const LineString* x = dynamic_cast(g) ) checkValid(x); else if ( const Polygon* x = dynamic_cast(g) ) checkValid(x); else if ( const MultiPolygon* x = dynamic_cast(g) ) checkValid(x); else if ( const GeometryCollection* x = dynamic_cast(g) ) { checkValid(x); } else throw util::UnsupportedOperationException(); } /* * Checks validity of a Point. */ void IsValidOp::checkValid(const Point *g) { checkInvalidCoordinates(g->getCoordinatesRO()); } /* * Checks validity of a LineString. Almost anything goes for linestrings! */ void IsValidOp::checkValid(const LineString *g) { checkInvalidCoordinates(g->getCoordinatesRO()); if (validErr != NULL) return; GeometryGraph graph(0,g); checkTooFewPoints(&graph); } /** * Checks validity of a LinearRing. */ void IsValidOp::checkValid(const LinearRing *g){ checkInvalidCoordinates(g->getCoordinatesRO()); if (validErr != NULL) return; checkClosedRing(g); if (validErr != NULL) return; GeometryGraph graph(0, g); checkTooFewPoints(&graph); if (validErr!=NULL) return; LineIntersector li; delete graph.computeSelfNodes(&li, true); checkNoSelfIntersectingRings(&graph); } /** * Checks the validity of a polygon. * Sets the validErr flag. */ void IsValidOp::checkValid(const Polygon *g) { checkInvalidCoordinates(g); if (validErr != NULL) return; checkClosedRings(g); if (validErr != NULL) return; GeometryGraph graph(0,g); checkTooFewPoints(&graph); if (validErr!=NULL) return; checkConsistentArea(&graph); if (validErr!=NULL) return; if (!isSelfTouchingRingFormingHoleValid) { checkNoSelfIntersectingRings(&graph); if (validErr!=NULL) return; } checkHolesInShell(g,&graph); if (validErr!=NULL) return; checkHolesNotNested(g,&graph); if (validErr!=NULL) return; checkConnectedInteriors(graph); } void IsValidOp::checkValid(const MultiPolygon *g) { unsigned int ngeoms = g->getNumGeometries(); vectorpolys(ngeoms); for (unsigned int i=0; i(g->getGeometryN(i)); checkInvalidCoordinates(p); if (validErr != NULL) return; checkClosedRings(p); if (validErr != NULL) return; polys[i]=p; } GeometryGraph graph(0,g); checkTooFewPoints(&graph); if (validErr!=NULL) return; checkConsistentArea(&graph); if (validErr!=NULL) return; if (!isSelfTouchingRingFormingHoleValid) { checkNoSelfIntersectingRings(&graph); if (validErr!=NULL) return; } for(unsigned int i=0; igetNumGeometries(); igetGeometryN(i); checkValid(g); if (validErr!=NULL) return; } } void IsValidOp::checkTooFewPoints(GeometryGraph *graph) { if (graph->hasTooFewPoints()) { validErr=new TopologyValidationError( TopologyValidationError::eTooFewPoints, graph->getInvalidPoint()); return; } } /** * Checks that the arrangement of edges in a polygonal geometry graph * forms a consistent area. * * @param graph * * @see ConsistentAreaTester */ void IsValidOp::checkConsistentArea(GeometryGraph *graph) { ConsistentAreaTester cat(graph); bool isValidArea=cat.isNodeConsistentArea(); if (!isValidArea) { validErr=new TopologyValidationError( TopologyValidationError::eSelfIntersection, cat.getInvalidPoint()); return; } if (cat.hasDuplicateRings()) { validErr=new TopologyValidationError( TopologyValidationError::eDuplicatedRings, cat.getInvalidPoint()); } } /*private*/ void IsValidOp::checkNoSelfIntersectingRings(GeometryGraph *graph) { vector *edges=graph->getEdges(); for(unsigned int i=0; isize(); ++i) { Edge *e=(*edges)[i]; checkNoSelfIntersectingRing(e->getEdgeIntersectionList()); if(validErr!=NULL) return; } } /*private*/ void IsValidOp::checkNoSelfIntersectingRing(EdgeIntersectionList &eiList) { setnodeSet; bool isFirst=true; EdgeIntersectionList::iterator it=eiList.begin(); EdgeIntersectionList::iterator end=eiList.end(); for(; it!=end; ++it) { EdgeIntersection *ei=*it; if (isFirst) { isFirst=false; continue; } if (nodeSet.find(&ei->coord)!=nodeSet.end()) { validErr=new TopologyValidationError( TopologyValidationError::eRingSelfIntersection, ei->coord); return; } else { nodeSet.insert(&ei->coord); } } } /*private*/ void IsValidOp::checkHolesInShell(const Polygon *p, GeometryGraph *graph) { assert(dynamic_cast(p->getExteriorRing())); const LinearRing *shell=static_cast( p->getExteriorRing()); int nholes = p->getNumInteriorRing(); if(shell->isEmpty()) { for(int i=0; i( p->getInteriorRingN(i))); const LinearRing *hole=static_cast( p->getInteriorRingN(i)); if(!hole->isEmpty()) { validErr=new TopologyValidationError( TopologyValidationError::eHoleOutsideShell); return; } } // all interiors also empty or none exist return; } //SimplePointInRing pir(shell); //SIRtreePointInRing pir(shell); MCPointInRing pir(shell); for(int i=0; i( p->getInteriorRingN(i))); const LinearRing *hole=static_cast( p->getInteriorRingN(i)); const Coordinate *holePt=findPtNotNode( hole->getCoordinatesRO(), shell, graph); /** * If no non-node hole vertex can be found, the hole must * split the polygon into disconnected interiors. * This will be caught by a subsequent check. */ if (holePt==NULL) return; bool outside = !pir.isInside(*holePt); if (outside) { validErr=new TopologyValidationError( TopologyValidationError::eHoleOutsideShell, *holePt); return; } } } /*private*/ void IsValidOp::checkHolesNotNested(const Polygon *p, GeometryGraph *graph) { //SimpleNestedRingTester nestedTester(graph); //SweeplineNestedRingTester nestedTester(graph); //QuadtreeNestedRingTester nestedTester(graph); IndexedNestedRingTester nestedTester(graph); int nholes=p->getNumInteriorRing(); for(int i=0; i( p->getInteriorRingN(i))); const LinearRing *innerHole=static_cast( p->getInteriorRingN(i)); //empty holes always pass if(innerHole->isEmpty()) continue; nestedTester.add(innerHole); } bool isNonNested=nestedTester.isNonNested(); if (!isNonNested) { validErr=new TopologyValidationError( TopologyValidationError::eNestedHoles, *(nestedTester.getNestedPoint())); } } /*private*/ void IsValidOp::checkShellsNotNested(const MultiPolygon *mp, GeometryGraph *graph) { for(unsigned int i=0, ngeoms = mp->getNumGeometries(); i( mp->getGeometryN(i)); assert(p); const LinearRing *shell=dynamic_cast( p->getExteriorRing()); assert(shell); for(unsigned int j=0; j( mp->getGeometryN(j)); assert(p2); if (shell->isEmpty() || p2->isEmpty()) continue; checkShellNotNested(shell, p2, graph); if (validErr!=NULL) return; } } } /*private*/ void IsValidOp::checkShellNotNested(const LinearRing *shell, const Polygon *p, GeometryGraph *graph) { const CoordinateSequence *shellPts=shell->getCoordinatesRO(); // test if shell is inside polygon shell assert(dynamic_cast( p->getExteriorRing())); const LinearRing *polyShell=static_cast( p->getExteriorRing()); const CoordinateSequence *polyPts=polyShell->getCoordinatesRO(); const Coordinate *shellPt=findPtNotNode(shellPts,polyShell,graph); // if no point could be found, we can assume that the shell // is outside the polygon if (shellPt==NULL) return; bool insidePolyShell=CGAlgorithms::isPointInRing(*shellPt, polyPts); if (!insidePolyShell) return; // if no holes, this is an error! int nholes = p->getNumInteriorRing(); if (nholes<=0) { validErr=new TopologyValidationError( TopologyValidationError::eNestedShells, *shellPt); return; } /** * Check if the shell is inside one of the holes. * This is the case if one of the calls to checkShellInsideHole * returns a null coordinate. * Otherwise, the shell is not properly contained in a hole, which is * an error. */ const Coordinate *badNestedPt=NULL; for(int i=0; i( p->getInteriorRingN(i))); const LinearRing *hole=static_cast( p->getInteriorRingN(i)); badNestedPt = checkShellInsideHole(shell, hole, graph); if (badNestedPt==NULL) return; } validErr=new TopologyValidationError( TopologyValidationError::eNestedShells, *badNestedPt ); } /*private*/ const Coordinate * IsValidOp::checkShellInsideHole(const LinearRing *shell, const LinearRing *hole, GeometryGraph *graph) { const CoordinateSequence *shellPts=shell->getCoordinatesRO(); const CoordinateSequence *holePts=hole->getCoordinatesRO(); // TODO: improve performance of this - by sorting pointlists // for instance? const Coordinate *shellPt=findPtNotNode(shellPts, hole, graph); // if point is on shell but not hole, check that the shell is // inside the hole if (shellPt) { bool insideHole=CGAlgorithms::isPointInRing(*shellPt, holePts); if (!insideHole) return shellPt; } const Coordinate *holePt=findPtNotNode(holePts, shell, graph); // if point is on hole but not shell, check that the hole is // outside the shell if (holePt) { bool insideShell=CGAlgorithms::isPointInRing(*holePt, shellPts); if (insideShell) return holePt; return NULL; } assert(0); // points in shell and hole appear to be equal return NULL; } /*private*/ void IsValidOp::checkConnectedInteriors(GeometryGraph &graph) { ConnectedInteriorTester cit(graph); if (!cit.isInteriorsConnected()) { validErr=new TopologyValidationError( TopologyValidationError::eDisconnectedInterior, cit.getCoordinate()); } } /*private*/ void IsValidOp::checkInvalidCoordinates(const CoordinateSequence *cs) { unsigned int size=cs->getSize(); for (unsigned int i=0; igetAt(i)) ) { validErr = new TopologyValidationError( TopologyValidationError::eInvalidCoordinate, cs->getAt(i)); return; } } } /*private*/ void IsValidOp::checkInvalidCoordinates(const Polygon *poly) { checkInvalidCoordinates(poly->getExteriorRing()->getCoordinatesRO()); if (validErr != NULL) return; int nholes=poly->getNumInteriorRing(); for (int i=0; igetInteriorRingN(i)->getCoordinatesRO() ); if (validErr != NULL) return; } } /*private*/ void IsValidOp::checkClosedRings(const Polygon *poly) { const LinearRing *lr=(const LinearRing *)poly->getExteriorRing(); checkClosedRing(lr); if (validErr) return; int nholes=poly->getNumInteriorRing(); for (int i=0; igetInteriorRingN(i); checkClosedRing(lr); if (validErr) return; } } /*private*/ void IsValidOp::checkClosedRing(const LinearRing *ring) { if ( ! ring->isClosed() && ! ring->isEmpty() ) { validErr = new TopologyValidationError( TopologyValidationError::eRingNotClosed, ring->getCoordinateN(0)); } } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/Makefile.am0000644000175000017500000000104612206417145020222 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopvalid.la INCLUDES = -I$(top_srcdir)/include # NOTES: # # libopvalid_la_SOURCES = \ ConnectedInteriorTester.cpp \ ConsistentAreaTester.cpp \ IsValidOp.cpp \ QuadtreeNestedRingTester.cpp \ RepeatedPointTester.cpp \ SimpleNestedRingTester.cpp \ SweeplineNestedRingTester.cpp \ TopologyValidationError.cpp \ IndexedNestedRingTester.cpp \ IndexedNestedRingTester.h libopvalid_la_LIBADD = geos-3.4.2/src/operation/valid/Makefile.in0000644000175000017500000005604512206417164020245 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/operation/valid DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libopvalid_la_DEPENDENCIES = am_libopvalid_la_OBJECTS = ConnectedInteriorTester.lo \ ConsistentAreaTester.lo IsValidOp.lo \ QuadtreeNestedRingTester.lo RepeatedPointTester.lo \ SimpleNestedRingTester.lo SweeplineNestedRingTester.lo \ TopologyValidationError.lo IndexedNestedRingTester.lo libopvalid_la_OBJECTS = $(am_libopvalid_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libopvalid_la_SOURCES) DIST_SOURCES = $(libopvalid_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libopvalid.la INCLUDES = -I$(top_srcdir)/include # NOTES: # # libopvalid_la_SOURCES = \ ConnectedInteriorTester.cpp \ ConsistentAreaTester.cpp \ IsValidOp.cpp \ QuadtreeNestedRingTester.cpp \ RepeatedPointTester.cpp \ SimpleNestedRingTester.cpp \ SweeplineNestedRingTester.cpp \ TopologyValidationError.cpp \ IndexedNestedRingTester.cpp \ IndexedNestedRingTester.h libopvalid_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/operation/valid/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/operation/valid/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libopvalid.la: $(libopvalid_la_OBJECTS) $(libopvalid_la_DEPENDENCIES) $(CXXLINK) $(libopvalid_la_OBJECTS) $(libopvalid_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConnectedInteriorTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConsistentAreaTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IndexedNestedRingTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IsValidOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadtreeNestedRingTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RepeatedPointTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleNestedRingTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SweeplineNestedRingTester.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TopologyValidationError.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/operation/valid/QuadtreeNestedRingTester.cpp0000644000175000017500000000644112206417145023622 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/QuadtreeNestedRingTester.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geomgraph; using namespace geos::geom; using namespace geos::algorithm; using namespace geos::index::quadtree; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid QuadtreeNestedRingTester::QuadtreeNestedRingTester(GeometryGraph *newGraph): graph(newGraph), rings(), totalEnv(), qt(NULL), nestedPt(NULL) { } QuadtreeNestedRingTester::~QuadtreeNestedRingTester() { //delete rings; //delete totalEnv; delete qt; } Coordinate * QuadtreeNestedRingTester::getNestedPoint() { return nestedPt; } void QuadtreeNestedRingTester::add(const LinearRing *ring) { rings.push_back(ring); const Envelope *envi=ring->getEnvelopeInternal(); totalEnv.expandToInclude(envi); } bool QuadtreeNestedRingTester::isNonNested() { buildQuadtree(); for(size_t i=0, ni=rings.size(); igetCoordinatesRO(); const Envelope *envi=innerRing->getEnvelopeInternal(); vector results; qt->query(envi, results); for(size_t j=0, nj=results.size(); jgetCoordinatesRO(); if (innerRing==searchRing) continue; const Envelope *e1=innerRing->getEnvelopeInternal(); const Envelope *e2=searchRing->getEnvelopeInternal(); if (!e1->intersects(e2)) continue; const Coordinate *innerRingPt=IsValidOp::findPtNotNode(innerRingPts, searchRing, graph); // Unable to find a ring point not a node of the search ring assert(innerRingPt!=NULL); bool isInside=CGAlgorithms::isPointInRing(*innerRingPt,searchRingPts); if (isInside) { /* * innerRingPt is const just because the input * CoordinateSequence is const. If the input * Polygon survives lifetime of this object * we are safe. */ nestedPt=const_cast(innerRingPt); return false; } } } return true; } void QuadtreeNestedRingTester::buildQuadtree() { qt=new Quadtree(); for(size_t i=0, n=rings.size(); igetEnvelopeInternal(); qt->insert(env, (void*)ring); } } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/RepeatedPointTester.cpp0000644000175000017500000000703112206417145022624 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/RepeatedPointTester.java rev. 1.8 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid Coordinate& RepeatedPointTester::getCoordinate() { return repeatedCoord; } bool RepeatedPointTester::hasRepeatedPoint(const Geometry *g) { if (g->isEmpty()) return false; if ( dynamic_cast(g) ) return false; if ( dynamic_cast(g) ) return false; // LineString also handles LinearRings if ( const LineString* x = dynamic_cast(g) ) { return hasRepeatedPoint(x->getCoordinatesRO()); } if ( const Polygon* x = dynamic_cast(g) ) { return hasRepeatedPoint(x); } if ( const MultiPolygon* x = dynamic_cast(g) ) { return hasRepeatedPoint(x); } if ( const MultiLineString* x = dynamic_cast(g) ) { return hasRepeatedPoint(x); } if ( const GeometryCollection* x = dynamic_cast(g) ) { return hasRepeatedPoint(x); } throw util::UnsupportedOperationException(typeid(*g).name()); } bool RepeatedPointTester::hasRepeatedPoint(const CoordinateSequence *coord) { unsigned int npts=coord->getSize(); for(unsigned int i=1; igetAt(i - 1)==coord->getAt(i)) { repeatedCoord=coord->getAt(i); return true; } } return false; } bool RepeatedPointTester::hasRepeatedPoint(const Polygon *p) { if (hasRepeatedPoint(p->getExteriorRing()->getCoordinates())) { return true; } for(size_t i=0, n=p->getNumInteriorRing(); igetInteriorRingN(i)->getCoordinates())) { return true; } } return false; } bool RepeatedPointTester::hasRepeatedPoint(const GeometryCollection *gc) { for(unsigned int i=0, n=gc->getNumGeometries(); igetGeometryN(i); if (hasRepeatedPoint(g)) return true; } return false; } bool RepeatedPointTester::hasRepeatedPoint(const MultiPolygon *gc) { for(unsigned int i=0, n=gc->getNumGeometries(); igetGeometryN(i); if (hasRepeatedPoint(g)) return true; } return false; } bool RepeatedPointTester::hasRepeatedPoint(const MultiLineString *gc) { for(unsigned int i=0, n=gc->getNumGeometries(); igetGeometryN(i); if (hasRepeatedPoint(g)) return true; } return false; } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/SimpleNestedRingTester.cpp0000644000175000017500000000425412206417145023301 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/SimpleNestedRingTester.java rev. 1.14 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include using namespace geos::algorithm; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid bool SimpleNestedRingTester::isNonNested() { for(size_t i=0, ni=rings.size(); igetCoordinates(); for(size_t j=0, nj=rings.size(); jgetCoordinates(); if (innerRing==searchRing) continue; if (!innerRing->getEnvelopeInternal()->intersects(searchRing->getEnvelopeInternal())) continue; const Coordinate *innerRingPt=IsValidOp::findPtNotNode(innerRingPts,searchRing,graph); // Unable to find a ring point not a node of the search ring assert(innerRingPt!=NULL); bool isInside=CGAlgorithms::isPointInRing(*innerRingPt,searchRingPts); if (isInside) { /* * innerRingPt is const just because the input * CoordinateSequence is const. If the input * Polygon survives lifetime of this object * we are safe. */ nestedPt=const_cast(innerRingPt); return false; } } } return true; } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/SweeplineNestedRingTester.cpp0000644000175000017500000000601512206417145024000 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/SweeplineNestedRingTester.java rev. 1.12 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include using namespace geos::algorithm; using namespace geos::index::sweepline; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid SweeplineNestedRingTester::OverlapAction::OverlapAction(SweeplineNestedRingTester *p) { isNonNested=true; parent=p; } void SweeplineNestedRingTester::OverlapAction::overlap(SweepLineInterval *s0, SweepLineInterval *s1) { LinearRing *innerRing=(LinearRing*) s0->getItem(); LinearRing *searchRing=(LinearRing*) s1->getItem(); if (innerRing==searchRing) return; if (parent->isInside(innerRing, searchRing)) isNonNested=false; } bool SweeplineNestedRingTester::isNonNested() { buildIndex(); OverlapAction *action=new OverlapAction(this); sweepLine->computeOverlaps(action); return action->isNonNested; } void SweeplineNestedRingTester::buildIndex() { sweepLine=new SweepLineIndex(); for(size_t i=0, n=rings.size(); igetEnvelopeInternal(); SweepLineInterval *sweepInt=new SweepLineInterval(env->getMinX(),env->getMaxX(),ring); sweepLine->add(sweepInt); } } bool SweeplineNestedRingTester::isInside(LinearRing *innerRing,LinearRing *searchRing) { CoordinateSequence *innerRingPts=innerRing->getCoordinates(); CoordinateSequence *searchRingPts=searchRing->getCoordinates(); if (!innerRing->getEnvelopeInternal()->intersects(searchRing->getEnvelopeInternal())) return false; const Coordinate *innerRingPt=IsValidOp::findPtNotNode(innerRingPts, searchRing, graph); // Unable to find a ring point not a node of the search ring assert(innerRingPt!=NULL); bool isInside=CGAlgorithms::isPointInRing(*innerRingPt,searchRingPts); if (isInside) { /* * innerRingPt is const just because the input * CoordinateSequence is const. If the input * Polygon survives lifetime of this object * we are safe. */ nestedPt=const_cast(innerRingPt); return true; } return false; } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/operation/valid/TopologyValidationError.cpp0000644000175000017500000000373412206417145023541 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: operation/valid/TopologyValidationError.java rev. 1.16 (JTS-1.10) * **********************************************************************/ #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace operation { // geos.operation namespace valid { // geos.operation.valid const char* TopologyValidationError::errMsg[]={ "Topology Validation Error", "Repeated Point", "Hole lies outside shell", "Holes are nested", "Interior is disconnected", "Self-intersection", "Ring Self-intersection", "Nested shells", "Duplicate Rings", "Too few points in geometry component", "Invalid Coordinate", "Ring is not closed" }; TopologyValidationError::TopologyValidationError(int newErrorType, const Coordinate& newPt) : errorType(newErrorType), pt(newPt) { } TopologyValidationError::TopologyValidationError(int newErrorType) : errorType(newErrorType), pt(Coordinate::getNull()) { } int TopologyValidationError::getErrorType() { return errorType; } Coordinate& TopologyValidationError::getCoordinate() { return pt; } string TopologyValidationError::getMessage() { return string(errMsg[errorType]); } string TopologyValidationError::toString() { return getMessage().append(" at or near point ").append(pt.toString()); } } // namespace geos.operation.valid } // namespace geos.operation } // namespace geos geos-3.4.2/src/planargraph/0000755000175000017500000000000012206417236015366 5ustar frankiefrankiegeos-3.4.2/src/planargraph/DirectedEdge.cpp0000644000175000017500000000655012206417145020407 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace planargraph { /*public*/ void DirectedEdge::toEdges(vector& dirEdges, vector& edges) { for (size_t i=0, n=dirEdges.size(); iparentEdge); } } /*public*/ vector* DirectedEdge::toEdges(vector& dirEdges) { vector *edges=new vector(); toEdges(dirEdges, *edges); return edges; } /*public*/ DirectedEdge::DirectedEdge(Node* newFrom, Node* newTo, const Coordinate &directionPt, bool newEdgeDirection) { from=newFrom; to=newTo; edgeDirection=newEdgeDirection; p0=from->getCoordinate(); p1=directionPt; double dx = p1.x - p0.x; double dy = p1.y - p0.y; quadrant = geomgraph::Quadrant::quadrant(dx, dy); angle=atan2(dy, dx); //Assert.isTrue(! (dx == 0 && dy == 0), "EdgeEnd with identical endpoints found"); } /*public*/ Edge* DirectedEdge::getEdge() const { return parentEdge; } /*public*/ void DirectedEdge::setEdge(Edge* newParentEdge) { parentEdge=newParentEdge; } /*public*/ int DirectedEdge::getQuadrant() const { return quadrant; } /*public*/ const Coordinate& DirectedEdge::getDirectionPt() const { return p1; } /*public*/ bool DirectedEdge::getEdgeDirection() const { return edgeDirection; } /*public*/ Node* DirectedEdge::getFromNode() const { return from; } /*public*/ Node* DirectedEdge::getToNode() const { return to; } /*public*/ Coordinate& DirectedEdge::getCoordinate() const { return from->getCoordinate(); } /*public*/ double DirectedEdge::getAngle() const { return angle; } /*public*/ DirectedEdge* DirectedEdge::getSym() const { return sym; } /* * Sets this DirectedEdge's symmetric DirectedEdge, * which runs in the opposite direction. */ void DirectedEdge::setSym(DirectedEdge *newSym) { sym = newSym; } /*public*/ int DirectedEdge::compareTo(const DirectedEdge* de) const { return compareDirection(de); } /*public*/ int DirectedEdge::compareDirection(const DirectedEdge *e) const { // if the rays are in different quadrants, determining the ordering is trivial if (quadrant > e->quadrant) return 1; if (quadrant < e->quadrant) return -1; // vectors are in the same quadrant - check relative orientation of direction vectors // this is > e if it is CCW of e return algorithm::CGAlgorithms::computeOrientation(e->p0,e->p1,p1); } /*public*/ string DirectedEdge::print() const { ostringstream s; s << *this; return s.str(); } std::ostream& operator << (std::ostream& s, const DirectedEdge& de) { s << typeid(de).name() << ": " << de.p0 << " - " << de.p1; s << " " << de.quadrant << ":" << de.angle; return s; } } // namespace planargraph } // namespace geos geos-3.4.2/src/planargraph/DirectedEdgeStar.cpp0000644000175000017500000000703412206417145021237 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include using namespace std; using namespace geos::geom; namespace geos { namespace planargraph { /* * Adds a new member to this DirectedEdgeStar. */ void DirectedEdgeStar::add(DirectedEdge *de) { outEdges.push_back(de); sorted=false; } /* * Drops a member of this DirectedEdgeStar. */ void DirectedEdgeStar::remove(DirectedEdge *de) { for(unsigned int i=0; i::iterator DirectedEdgeStar::begin() { sortEdges(); return outEdges.begin(); } vector::iterator DirectedEdgeStar::end() { sortEdges(); return outEdges.end(); } vector::const_iterator DirectedEdgeStar::begin() const { sortEdges(); return outEdges.begin(); } vector::const_iterator DirectedEdgeStar::end() const { sortEdges(); return outEdges.end(); } /* * Returns the coordinate for the node at wich this star is based */ Coordinate& DirectedEdgeStar::getCoordinate() const { if (outEdges.empty()) return Coordinate::getNull(); DirectedEdge *e=outEdges[0]; return e->getCoordinate(); } /* * Returns the DirectedEdges, in ascending order by angle with * the positive x-axis. */ vector& DirectedEdgeStar::getEdges() { sortEdges(); return outEdges; } bool pdeLessThan(DirectedEdge *first, DirectedEdge * second) { if (first->compareTo(second)<0) return true; else return false; } /*private*/ void DirectedEdgeStar::sortEdges() const { if (!sorted) { sort(outEdges.begin(), outEdges.end(), pdeLessThan); sorted=true; } } /* * Returns the zero-based index of the given Edge, after sorting in * ascending order by angle with the positive x-axis. */ int DirectedEdgeStar::getIndex(const Edge *edge) { sortEdges(); for (unsigned int i = 0; igetEdge() == edge) return i; } return -1; } /* * Returns the zero-based index of the given DirectedEdge, after sorting * in ascending order by angle with the positive x-axis. */ int DirectedEdgeStar::getIndex(const DirectedEdge *dirEdge) { sortEdges(); for (unsigned int i = 0; i #include #include #include namespace geos { namespace planargraph { /* * Initializes this Edge's two DirectedEdges, and for each DirectedEdge: * sets the Edge, * sets the symmetric DirectedEdge, and * adds this Edge to its from-Node. */ void Edge::setDirectedEdges(DirectedEdge *de0, DirectedEdge *de1) { dirEdge.push_back(de0); dirEdge.push_back(de1); de0->setEdge(this); de1->setEdge(this); de0->setSym(de1); de1->setSym(de0); de0->getFromNode()->addOutEdge(de0); de1->getFromNode()->addOutEdge(de1); } /** * Returns one of the DirectedEdges associated with this Edge. * @param i 0 or 1 */ DirectedEdge * Edge::getDirEdge(int i) { return dirEdge[i]; } /* * Returns the DirectedEdge that starts from the given node, or null if the * node is not one of the two nodes associated with this Edge. */ DirectedEdge * Edge::getDirEdge(Node *fromNode) { if (dirEdge[0]->getFromNode()==fromNode) return dirEdge[0]; if (dirEdge[1]->getFromNode()==fromNode) return dirEdge[1]; // node not found // possibly should throw an exception here? return NULL; } /** * If node is one of the two nodes associated with this Edge, * returns the other node; otherwise returns null. */ Node* Edge::getOppositeNode(Node *node) { if (dirEdge[0]->getFromNode()==node) return dirEdge[0]->getToNode(); if (dirEdge[1]->getFromNode()==node) return dirEdge[1]->getToNode(); // node not found // possibly should throw an exception here? return NULL; } std::ostream& operator<<(std::ostream& os, const Edge& n) { os << "Edge "; if ( n.isMarked() ) os << " Marked "; if ( n.isVisited() ) os << " Visited "; return os; } } // namespace planargraph } // namespace geos geos-3.4.2/src/planargraph/Makefile.am0000644000175000017500000000062012206417145017417 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libplanargraph.la INCLUDES = -I$(top_srcdir)/include libplanargraph_la_SOURCES = \ DirectedEdge.cpp \ DirectedEdgeStar.cpp \ Edge.cpp \ Node.cpp \ NodeMap.cpp \ PlanarGraph.cpp \ Subgraph.cpp \ algorithm/ConnectedSubgraphFinder.cpp libplanargraph_la_LIBADD = geos-3.4.2/src/planargraph/Makefile.in0000644000175000017500000005654712206417165017455 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/planargraph DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libplanargraph_la_DEPENDENCIES = am_libplanargraph_la_OBJECTS = DirectedEdge.lo DirectedEdgeStar.lo \ Edge.lo Node.lo NodeMap.lo PlanarGraph.lo Subgraph.lo \ ConnectedSubgraphFinder.lo libplanargraph_la_OBJECTS = $(am_libplanargraph_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libplanargraph_la_SOURCES) DIST_SOURCES = $(libplanargraph_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libplanargraph.la INCLUDES = -I$(top_srcdir)/include libplanargraph_la_SOURCES = \ DirectedEdge.cpp \ DirectedEdgeStar.cpp \ Edge.cpp \ Node.cpp \ NodeMap.cpp \ PlanarGraph.cpp \ Subgraph.cpp \ algorithm/ConnectedSubgraphFinder.cpp libplanargraph_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/planargraph/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/planargraph/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libplanargraph.la: $(libplanargraph_la_OBJECTS) $(libplanargraph_la_DEPENDENCIES) $(CXXLINK) $(libplanargraph_la_OBJECTS) $(libplanargraph_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConnectedSubgraphFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectedEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectedEdgeStar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Edge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Node.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodeMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PlanarGraph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Subgraph.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< ConnectedSubgraphFinder.lo: algorithm/ConnectedSubgraphFinder.cpp @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ConnectedSubgraphFinder.lo -MD -MP -MF $(DEPDIR)/ConnectedSubgraphFinder.Tpo -c -o ConnectedSubgraphFinder.lo `test -f 'algorithm/ConnectedSubgraphFinder.cpp' || echo '$(srcdir)/'`algorithm/ConnectedSubgraphFinder.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ConnectedSubgraphFinder.Tpo $(DEPDIR)/ConnectedSubgraphFinder.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/ConnectedSubgraphFinder.cpp' object='ConnectedSubgraphFinder.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ConnectedSubgraphFinder.lo `test -f 'algorithm/ConnectedSubgraphFinder.cpp' || echo '$(srcdir)/'`algorithm/ConnectedSubgraphFinder.cpp mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/planargraph/Node.cpp0000644000175000017500000000311212206417145016753 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include using namespace std; namespace geos { namespace planargraph { /* static public */ /* UNUSED */ vector* Node::getEdgesBetween(Node *node0, Node *node1) { std::vector edges0; DirectedEdge::toEdges(node0->getOutEdges()->getEdges(), edges0); std::vector edges1; DirectedEdge::toEdges(node1->getOutEdges()->getEdges(), edges1); // Sort edge lists (needed for set_intersection below std::sort( edges0.begin(), edges0.end() ); std::sort( edges1.begin(), edges1.end() ); std::vector* commonEdges = new std::vector(); // Intersect the two sets std::set_intersection( edges0.begin(), edges0.end(), edges1.begin(), edges1.end(), commonEdges->end() ); return commonEdges; } std::ostream& operator<<(std::ostream& os, const Node& n) { os << "Node " << n.pt << " with degree " << n.getDegree(); if ( n.isMarked() ) os << " Marked "; if ( n.isVisited() ) os << " Visited "; return os; } } // namespace planargraph } // namespace geos geos-3.4.2/src/planargraph/NodeMap.cpp0000644000175000017500000000336012206417145017416 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include using namespace std; namespace geos { namespace planargraph { /** * Constructs a NodeMap without any Nodes. */ NodeMap::NodeMap() { } NodeMap::~NodeMap() { } NodeMap::container& NodeMap::getNodeMap() { return nodeMap; } /** * Adds a node to the map, replacing any that is already at that location. * @return the added node */ Node* NodeMap::add(Node *n) { nodeMap.insert(pair(n->getCoordinate(),n)); return n; } /** * Removes the Node at the given location, and returns it * (or null if no Node was there). */ Node * NodeMap::remove(geom::Coordinate& pt) { Node *n=find(pt); nodeMap.erase(pt); return n; } /* public */ void NodeMap::getNodes(vector& values) { NodeMap::container::iterator it=nodeMap.begin(), itE=nodeMap.end(); while (it != itE) { values.push_back(it->second); ++it; } } /** * Returns the Node at the given location, or null if no Node was there. */ Node* NodeMap::find(const geom::Coordinate& coord) { container::iterator found=nodeMap.find(coord); if (found==nodeMap.end()) return NULL; else return found->second; } } //namespace planargraph } //namespace geos geos-3.4.2/src/planargraph/PlanarGraph.cpp0000644000175000017500000000732012206417145020272 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: planargraph/PlanarGraph.java rev. 107/138 (JTS-1.10) * **********************************************************************/ #include #include #include #include #include #include #include using namespace std; namespace geos { namespace planargraph { /* * Adds the Edge and its DirectedEdges with this PlanarGraph. * Assumes that the Edge has already been created with its associated * DirectEdges. * Only subclasses can add Edges, to ensure the edges added are of * the right class. */ void PlanarGraph::add(Edge *edge) { edges.push_back(edge); add(edge->getDirEdge(0)); add(edge->getDirEdge(1)); } /* * Removes an Edge and its associated DirectedEdges from their from-Nodes and * from this PlanarGraph. Note: This method does not remove the Nodes associated * with the Edge, even if the removal of the Edge reduces the degree of a * Node to zero. */ void PlanarGraph::remove(Edge *edge) { remove(edge->getDirEdge(0)); remove(edge->getDirEdge(1)); for(unsigned int i=0; igetSym(); if (sym!=NULL) sym->setSym(NULL); de->getFromNode()->getOutEdges()->remove(de); for(unsigned int i=0; i &outEdges=node->getOutEdges()->getEdges(); for(unsigned int i=0; igetSym(); // remove the diredge that points to this node if (sym!=NULL) remove(sym); // remove this diredge from the graph collection for(unsigned int j=0; jgetEdge(); if (edge!=NULL) { for(unsigned int k=0; kgetCoordinate()); //nodes.remove(node); } /*public*/ vector* PlanarGraph::findNodesOfDegree(size_t degree) { vector *nodesFound=new vector(); findNodesOfDegree(degree, *nodesFound); return nodesFound; } /*public*/ void PlanarGraph::findNodesOfDegree(size_t degree, vector& nodesFound) { NodeMap::container &nm=nodeMap.getNodeMap(); for (NodeMap::container::iterator it=nm.begin(), itEnd=nm.end(); it!=itEnd; ++it) { Node *node=it->second; if (node->getDegree()==degree) nodesFound.push_back(node); } } } // namespace planargraph } // namespace geos geos-3.4.2/src/planargraph/Subgraph.cpp0000644000175000017500000000220012206417145017636 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Last port: planargraph/Subgraph.java rev. 1.3 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include using namespace std; namespace geos { namespace planargraph { pair Subgraph::add(Edge *e) { pair p = edges.insert(e); if (!p.second) return p; dirEdges.push_back(e->getDirEdge(0)); dirEdges.push_back(e->getDirEdge(1)); nodeMap.add(e->getDirEdge(0)->getFromNode()); nodeMap.add(e->getDirEdge(1)->getFromNode()); return p; } } // namespace planargraph } // namespace geos geos-3.4.2/src/planargraph/algorithm/0000755000175000017500000000000012206417236017354 5ustar frankiefrankiegeos-3.4.2/src/planargraph/algorithm/ConnectedSubgraphFinder.cpp0000644000175000017500000000437212206417145024613 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace std; namespace geos { namespace planargraph { namespace algorithm { void ConnectedSubgraphFinder::getConnectedSubgraphs(vector& subgraphs) { GraphComponent::setVisitedMap(graph.nodeBegin(), graph.nodeEnd(), false); for (PlanarGraph::EdgeIterator it=graph.edgeBegin(), itEnd=graph.edgeEnd(); it!=itEnd; ++it) { Edge *e = *it; Node *node = e->getDirEdge(0)->getFromNode(); if (! node->isVisited()) { subgraphs.push_back(findSubgraph(node)); } } } /*private*/ Subgraph* ConnectedSubgraphFinder::findSubgraph(Node* node) { Subgraph* subgraph = new Subgraph(graph); addReachable(node, subgraph); return subgraph; } /*private*/ void ConnectedSubgraphFinder::addReachable(Node* startNode, Subgraph* subgraph) { stack nodeStack; nodeStack.push(startNode); while ( !nodeStack.empty() ) { Node* node = nodeStack.top(); nodeStack.pop(); addEdges(node, nodeStack, subgraph); } } /*private*/ void ConnectedSubgraphFinder::addEdges(Node* node, stack& nodeStack, Subgraph* subgraph) { node->setVisited(true); DirectedEdgeStar *des=node->getOutEdges(); for (DirectedEdge::Vect::iterator i=des->begin(), iEnd=des->end(); i!=iEnd; ++i) { DirectedEdge *de=*i; subgraph->add(de->getEdge()); Node *toNode = de->getToNode(); if ( ! toNode->isVisited() ) nodeStack.push(toNode); } } } // namespace geos.planargraph.algorithm } // namespace geos.planargraph } // namespace geos geos-3.4.2/src/precision/0000755000175000017500000000000012206417237015063 5ustar frankiefrankiegeos-3.4.2/src/precision/CommonBits.cpp0000644000175000017500000000411412206417145017637 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include // for int64 #include namespace geos { namespace precision { // geos.precision /*static public*/ int64 CommonBits::signExpBits(int64 num) { return num >> 52; } /*static public*/ int CommonBits::numCommonMostSigMantissaBits(int64 num1, int64 num2) { int count = 0; for (int i = 52; i >= 0; i--){ if (getBit(num1, i) != getBit(num2, i)) return count; count++; } return 52; } /*static public*/ int64 CommonBits::zeroLowerBits(int64 bits, int nBits) { int64 invMask = (1<< nBits)-1; int64 mask = ~ invMask; int64 zeroed = bits & mask; return zeroed; } /*static public*/ int CommonBits::getBit(int64 bits, int i) { int64 mask = (1 << i); return (bits & mask) != 0 ? 1 : 0; } /*public*/ CommonBits::CommonBits() { isFirst = true; commonMantissaBitsCount = 53; commonBits = 0; } /*public*/ void CommonBits::add(double num) { int64 numBits=(int64)num; if (isFirst) { commonBits = numBits; commonSignExp = signExpBits(commonBits); isFirst = false; return; } int64 numSignExp = signExpBits(numBits); if (numSignExp != commonSignExp) { commonBits = 0; return; } // System.out.println(toString(commonBits)); // System.out.println(toString(numBits)); commonMantissaBitsCount = numCommonMostSigMantissaBits(commonBits, numBits); commonBits = zeroLowerBits(commonBits, 64 - (12 + commonMantissaBitsCount)); // System.out.println(toString(commonBits)); } /*public*/ double CommonBits::getCommon() { return (double)commonBits; } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/CommonBitsOp.cpp0000644000175000017500000000743712206417145020151 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; namespace geos { namespace precision { // geos.precision /*public*/ CommonBitsOp::CommonBitsOp() : returnToOriginalPrecision(true) { #if GEOS_DEBUG std::cerr << "CommonBitsOp[" << this << "]::CommonBitsOp()" << std::endl; #endif } /*public*/ CommonBitsOp::CommonBitsOp(bool nReturnToOriginalPrecision) : returnToOriginalPrecision(nReturnToOriginalPrecision) { #if GEOS_DEBUG std::cerr << "CommonBitsOp[" << this << "]::CommonBitsOp(bool " << nReturnToOriginalPrecision << ")" << std::endl; #endif } /*public*/ Geometry* CommonBitsOp::intersection( const Geometry* geom0, const Geometry* geom1) { auto_ptr rgeom0; auto_ptr rgeom1; removeCommonBits(geom0, geom1, rgeom0, rgeom1); return computeResultPrecision(rgeom0->intersection(rgeom1.get())); } /*public*/ Geometry* CommonBitsOp::Union( const Geometry* geom0, const Geometry* geom1) { auto_ptr rgeom0; auto_ptr rgeom1; removeCommonBits(geom0, geom1, rgeom0, rgeom1); return computeResultPrecision(rgeom0->Union(rgeom1.get())); } /*public*/ Geometry* CommonBitsOp::difference( const Geometry* geom0, const Geometry* geom1) { auto_ptr rgeom0; auto_ptr rgeom1; removeCommonBits(geom0, geom1, rgeom0, rgeom1); return computeResultPrecision(rgeom0->difference(rgeom1.get())); } /*public*/ Geometry* CommonBitsOp::symDifference( const Geometry* geom0, const Geometry* geom1) { auto_ptr rgeom0; auto_ptr rgeom1; removeCommonBits(geom0, geom1, rgeom0, rgeom1); return computeResultPrecision(rgeom0->symDifference(rgeom1.get())); } /*public*/ Geometry* CommonBitsOp::buffer(const Geometry* geom0, double distance) { auto_ptr rgeom0(removeCommonBits(geom0)); return computeResultPrecision(rgeom0->buffer(distance)); } /*public*/ Geometry* CommonBitsOp::computeResultPrecision(Geometry* result) { assert(cbr.get()); if (returnToOriginalPrecision) cbr->addCommonBits(result); return result; } /*private*/ Geometry* CommonBitsOp::removeCommonBits(const Geometry* geom0) { cbr.reset(new CommonBitsRemover()); cbr->add(geom0); #if GEOS_DEBUG const Coordinate& commonCoord = cbr->getCommonCoordinate(); cerr << "CommonBitsRemover bits: " << commonCoord.x << ", " << commonCoord.y << endl; #endif Geometry* geom=cbr->removeCommonBits(geom0->clone()); return geom; } /*private*/ void CommonBitsOp::removeCommonBits( const geom::Geometry* geom0, const geom::Geometry* geom1, std::auto_ptr& rgeom0, std::auto_ptr& rgeom1) { cbr.reset(new CommonBitsRemover()); cbr->add(geom0); cbr->add(geom1); #if GEOS_DEBUG const Coordinate& commonCoord = cbr->getCommonCoordinate(); cerr << "CommonBitsRemover bits: " << commonCoord.x << ", " << commonCoord.y << endl; #endif rgeom0.reset(cbr->removeCommonBits(geom0->clone())); rgeom1.reset(cbr->removeCommonBits(geom1->clone())); } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/CommonBitsRemover.cpp0000644000175000017500000000743412206417145021207 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include // for CommonCoordinateFilter inheritance #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace precision { // geos.precision class Translater: public geom::CoordinateFilter { private: geom::Coordinate trans; public: Translater(geom::Coordinate &newTrans) : trans(newTrans) {} void filter_ro(const geom::Coordinate *coord) //Not used { ::geos::ignore_unused_variable_warning(coord); assert(0); } void filter_rw(geom::Coordinate *coord) const { coord->x += trans.x; coord->y += trans.y; } }; class CommonCoordinateFilter: public geom::CoordinateFilter { private: CommonBits commonBitsX; CommonBits commonBitsY; public: void filter_rw(geom::Coordinate *coord) const { // CommonCoordinateFilter is a read-only filter ::geos::ignore_unused_variable_warning(coord); assert(0); } void filter_ro(const geom::Coordinate *coord) { commonBitsX.add(coord->x); commonBitsY.add(coord->y); } void getCommonCoordinate(geom::Coordinate& c) { c=Coordinate(commonBitsX.getCommon(), commonBitsY.getCommon()); } }; CommonBitsRemover::CommonBitsRemover() { ccFilter=new CommonCoordinateFilter(); } CommonBitsRemover::~CommonBitsRemover() { delete ccFilter; } /** * Add a geometry to the set of geometries whose common bits are * being computed. After this method has executed the * common coordinate reflects the common bits of all added * geometries. * * @param geom a Geometry to test for common bits */ void CommonBitsRemover::add(const Geometry *geom) { geom->apply_ro(ccFilter); ccFilter->getCommonCoordinate(commonCoord); } /** * The common bits of the Coordinates in the supplied Geometries. */ Coordinate& CommonBitsRemover::getCommonCoordinate() { return commonCoord; } /** * Removes the common coordinate bits from a Geometry. * The coordinates of the Geometry are changed. * * @param geom the Geometry from which to remove the common coordinate bits * @return the shifted Geometry */ Geometry* CommonBitsRemover::removeCommonBits(Geometry *geom) { if (commonCoord.x == 0.0 && commonCoord.y == 0.0) return geom; Coordinate invCoord(commonCoord); invCoord.x = -invCoord.x; invCoord.y = -invCoord.y; Translater trans(invCoord); geom->apply_rw(&trans); geom->geometryChanged(); #if GEOS_DEBUG std::cerr << "CommonBits removed: " << *geom << std::endl; #endif return geom; } /** * Adds the common coordinate bits back into a Geometry. * The coordinates of the Geometry are changed. * * @param geom the Geometry to which to add the common coordinate bits * @return the shifted Geometry */ Geometry* CommonBitsRemover::addCommonBits(Geometry *geom) { #if GEOS_DEBUG std::cerr << "CommonBits before add: " << *geom << std::endl; #endif Translater trans(commonCoord); geom->apply_rw(&trans); geom->geometryChanged(); #if GEOS_DEBUG std::cerr << "CommonBits added: " << *geom << std::endl; #endif return geom; } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/EnhancedPrecisionOp.cpp0000644000175000017500000001226712206417145021455 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: precision/EnhancedPrecisionOp.java rev. 1.9 (JTS-1.7) * **********************************************************************/ #include #include #include // for auto_ptr composition #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace precision { // geos.precision /*public static*/ Geometry* EnhancedPrecisionOp::intersection( const Geometry *geom0, const Geometry *geom1) { util::GEOSException originalEx; try { Geometry *result = geom0->intersection(geom1); return result; } catch (const util::GEOSException& ex) { originalEx = ex; } /* * If we are here, the original op encountered a precision problem * (or some other problem). Retry the operation with * enhanced precision to see if it succeeds */ try { CommonBitsOp cbo(true); Geometry *resultEP = cbo.intersection(geom0, geom1); // check that result is a valid geometry after // the reshift to orginal precision if (! resultEP->isValid()) { #if GEOS_DEBUG std::cerr << "Reduced operation result is invalid" << std::endl; #endif throw originalEx; } return resultEP; } catch (const util::GEOSException& ex2 ) { #if GEOS_DEBUG std::cerr << "Reduced operation exception: " << ex2.what() << std::endl; #else (void)ex2; #endif throw originalEx; } } /*public static*/ Geometry* EnhancedPrecisionOp::Union( const Geometry *geom0, const Geometry *geom1) { util::GEOSException originalEx; try { Geometry* result = geom0->Union(geom1); return result; } catch (const util::GEOSException& ex) { originalEx = ex; } /* * If we are here, the original op encountered a precision problem * (or some other problem)-> Retry the operation with * enhanced precision to see if it succeeds */ try { CommonBitsOp cbo(true); Geometry *resultEP = cbo.Union(geom0, geom1); // check that result is a valid geometry after // the reshift to orginal precision if (! resultEP->isValid()) throw originalEx; return resultEP; } catch (const util::GEOSException& /* ex2 */) { throw originalEx; } } /*public static*/ Geometry* EnhancedPrecisionOp::difference( const Geometry *geom0, const Geometry *geom1) { util::GEOSException originalEx; try { Geometry *result = geom0->difference(geom1); return result; } catch (const util::GEOSException& ex) { originalEx = ex; } /* * If we are here, the original op encountered a precision problem * (or some other problem). Retry the operation with * enhanced precision to see if it succeeds */ try { CommonBitsOp cbo(true); Geometry *resultEP = cbo.difference(geom0, geom1); // check that result is a valid geometry after // the reshift to orginal precision if (! resultEP->isValid()) throw originalEx; return resultEP; } catch (const util::GEOSException& /* ex2 */) { throw originalEx; } } /*public static*/ Geometry* EnhancedPrecisionOp::symDifference( const Geometry *geom0, const Geometry *geom1) { util::GEOSException originalEx; try { Geometry *result = geom0->symDifference(geom1); return result; } catch (const util::GEOSException& ex) { originalEx = ex; } /* * If we are here, the original op encountered a precision problem * (or some other problem). Retry the operation with * enhanced precision to see if it succeeds */ try { CommonBitsOp cbo(true); Geometry* resultEP = cbo.symDifference(geom0, geom1); // check that result is a valid geometry after // the reshift to orginal precision if (! resultEP->isValid()) throw originalEx; return resultEP; } catch (const util::GEOSException& /* ex2 */) { throw originalEx; } } /*public static*/ Geometry* EnhancedPrecisionOp::buffer(const Geometry *geom, double distance) { util::GEOSException originalEx; try { Geometry *result = geom->buffer(distance); return result; } catch (const util::GEOSException& ex) { originalEx = ex; } /* * If we are here, the original op encountered a precision problem * (or some other problem)-> Retry the operation with * enhanced precision to see if it succeeds */ try { CommonBitsOp cbo(true); Geometry *resultEP = cbo.buffer(geom, distance); // check that result is a valid geometry // after the reshift to orginal precision if (! resultEP->isValid()) throw originalEx; return resultEP; } catch (const util::GEOSException& /* ex2 */) { throw originalEx; } } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/GeometryPrecisionReducer.cpp0000644000175000017500000000775712206417145022566 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: precision/GeometryPrecisionReducer.cpp rev. 1.10 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; using namespace geos::geom::util; namespace geos { namespace precision { // geos.precision /* private */ auto_ptr GeometryPrecisionReducer::reducePointwise(const Geometry &geom) { auto_ptr geomEdit; if ( newFactory ) { geomEdit.reset( new GeometryEditor(newFactory) ); } else { geomEdit.reset( new GeometryEditor() ); } /** * For polygonal geometries, collapses are always removed, in order * to produce correct topology */ bool finalRemoveCollapsed = removeCollapsed; if (geom.getDimension() >= 2) finalRemoveCollapsed = true; PrecisionReducerCoordinateOperation prco(targetPM, finalRemoveCollapsed); std::auto_ptr g ( geomEdit->edit(&geom, &prco) ); return g; } /* public */ auto_ptr GeometryPrecisionReducer::reduce(const Geometry &geom) { auto_ptr reducePW = reducePointwise(geom); if ( isPointwise ) return reducePW; //TODO: handle GeometryCollections containing polys if (! (dynamic_cast(reducePW.get())) ) return reducePW; // Geometry is polygonal - test if topology needs to be fixed if (reducePW->isValid()) return reducePW; // hack to fix topology. // TODO: implement snap-rounding and use that. return fixPolygonalTopology(*reducePW); } /* public */ GeometryPrecisionReducer::GeometryPrecisionReducer(const GeometryFactory &changeFactory) : newFactory(&changeFactory), targetPM(*(changeFactory.getPrecisionModel())), removeCollapsed(true), isPointwise(false) {} /* private */ auto_ptr GeometryPrecisionReducer::fixPolygonalTopology(const geom::Geometry& geom ) { /** * If precision model was *not* changed, need to flip * geometry to targetPM, buffer in that model, then flip back */ auto_ptr tmp; auto_ptr tmpFactory; const Geometry* geomToBuffer = &geom; if ( ! newFactory ) { tmpFactory = createFactory(*geom.getFactory(), targetPM); tmp.reset( tmpFactory->createGeometry(&geom) ); geomToBuffer = tmp.get(); } auto_ptr bufGeom ( geomToBuffer->buffer(0) ); if ( ! newFactory ) { // a slick way to copy the geometry with the original precision factory bufGeom.reset( geom.getFactory()->createGeometry(bufGeom.get()) ); } return bufGeom; } /* private */ auto_ptr GeometryPrecisionReducer::createFactory( const GeometryFactory& oldGF, const PrecisionModel& newPM ) { auto_ptr newFactory( new GeometryFactory(&newPM, oldGF.getSRID(), const_cast(oldGF.getCoordinateSequenceFactory())) ); return newFactory; } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/Makefile.am0000644000175000017500000000063712206417145017123 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libprecision.la INCLUDES = -I$(top_srcdir)/include libprecision_la_SOURCES = \ CommonBits.cpp \ CommonBitsOp.cpp \ CommonBitsRemover.cpp \ EnhancedPrecisionOp.cpp \ GeometryPrecisionReducer.cpp \ PrecisionReducerCoordinateOperation.cpp \ SimpleGeometryPrecisionReducer.cpp libprecision_la_LIBADD = geos-3.4.2/src/precision/Makefile.in0000644000175000017500000005440512206417165017140 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/precision DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libprecision_la_DEPENDENCIES = am_libprecision_la_OBJECTS = CommonBits.lo CommonBitsOp.lo \ CommonBitsRemover.lo EnhancedPrecisionOp.lo \ GeometryPrecisionReducer.lo \ PrecisionReducerCoordinateOperation.lo \ SimpleGeometryPrecisionReducer.lo libprecision_la_OBJECTS = $(am_libprecision_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libprecision_la_SOURCES) DIST_SOURCES = $(libprecision_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libprecision.la INCLUDES = -I$(top_srcdir)/include libprecision_la_SOURCES = \ CommonBits.cpp \ CommonBitsOp.cpp \ CommonBitsRemover.cpp \ EnhancedPrecisionOp.cpp \ GeometryPrecisionReducer.cpp \ PrecisionReducerCoordinateOperation.cpp \ SimpleGeometryPrecisionReducer.cpp libprecision_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/precision/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/precision/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libprecision.la: $(libprecision_la_OBJECTS) $(libprecision_la_DEPENDENCIES) $(CXXLINK) $(libprecision_la_OBJECTS) $(libprecision_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommonBits.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommonBitsOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CommonBitsRemover.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EnhancedPrecisionOp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryPrecisionReducer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PrecisionReducerCoordinateOperation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleGeometryPrecisionReducer.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/precision/PrecisionReducerCoordinateOperation.cpp0000644000175000017500000000565712206417145024740 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: precision/PrecisionreducerCoordinateOperation.java r591 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include using namespace geos::geom; using namespace std; namespace geos { namespace precision { // geos.precision CoordinateSequence* PrecisionReducerCoordinateOperation::edit(const CoordinateSequence *cs, const Geometry *geom) { unsigned int csSize = cs->getSize(); if ( csSize == 0 ) return NULL; vector *vc = new vector(csSize); // copy coordinates and reduce for (unsigned int i=0; igetAt(i); targetPM.makePrecise(&coord); (*vc)[i] = coord; } // reducedCoords take ownership of 'vc' CoordinateSequence *reducedCoords = geom->getFactory()->getCoordinateSequenceFactory()->create(vc); // remove repeated points, to simplify returned geometry as // much as possible. // CoordinateSequence *noRepeatedCoords=CoordinateSequence::removeRepeatedPoints(reducedCoords); /** * Check to see if the removal of repeated points * collapsed the coordinate List to an invalid length * for the type of the parent geometry. * It is not necessary to check for Point collapses, * since the coordinate list can * never collapse to less than one point. * If the length is invalid, return the full-length coordinate array * first computed, or null if collapses are being removed. * (This may create an invalid geometry - the client must handle this.) */ unsigned int minLength = 0; if ( dynamic_cast(geom) ) minLength = 2; if ( dynamic_cast(geom) ) minLength = 4; CoordinateSequence *collapsedCoords = reducedCoords; if ( removeCollapsed ) { delete reducedCoords; reducedCoords=0; collapsedCoords=0; } // return null or orginal length coordinate array if ( noRepeatedCoords->getSize() < minLength ) { delete noRepeatedCoords; return collapsedCoords; } // ok to return shorter coordinate array delete reducedCoords; return noRepeatedCoords; } } // namespace geos.precision } // namespace geos geos-3.4.2/src/precision/SimpleGeometryPrecisionReducer.cpp0000644000175000017500000001147312206417145023726 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * *********************************************************************** * * Last port: precision/SimpleGeometryPrecisionReducer.cpp rev. 1.10 (JTS-1.7) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos::geom; using namespace geos::geom::util; namespace geos { namespace precision { // geos.precision namespace { class PrecisionReducerCoordinateOperation : public geom::util::CoordinateOperation { using CoordinateOperation::edit; private: SimpleGeometryPrecisionReducer *sgpr; public: PrecisionReducerCoordinateOperation( SimpleGeometryPrecisionReducer *newSgpr); /// Ownership of returned CoordinateSequence to caller CoordinateSequence* edit(const CoordinateSequence *coordinates, const Geometry *geom); }; PrecisionReducerCoordinateOperation::PrecisionReducerCoordinateOperation( SimpleGeometryPrecisionReducer *newSgpr) { sgpr=newSgpr; } CoordinateSequence* PrecisionReducerCoordinateOperation::edit(const CoordinateSequence *cs, const Geometry *geom) { if (cs->getSize()==0) return NULL; unsigned int csSize=cs->getSize(); vector *vc = new vector(csSize); // copy coordinates and reduce for (unsigned int i=0; igetAt(i); sgpr->getPrecisionModel()->makePrecise(&coord); //reducedCoords->setAt(*coord,i); (*vc)[i] = coord; } // reducedCoords take ownership of 'vc' CoordinateSequence *reducedCoords = geom->getFactory()->getCoordinateSequenceFactory()->create(vc); // remove repeated points, to simplify returned geometry as // much as possible. // CoordinateSequence *noRepeatedCoords=CoordinateSequence::removeRepeatedPoints(reducedCoords); /** * Check to see if the removal of repeated points * collapsed the coordinate List to an invalid length * for the type of the parent geometry. * It is not necessary to check for Point collapses, * since the coordinate list can * never collapse to less than one point. * If the length is invalid, return the full-length coordinate array * first computed, or null if collapses are being removed. * (This may create an invalid geometry - the client must handle this.) */ unsigned int minLength = 0; if (typeid(*geom)==typeid(LineString)) minLength = 2; if (typeid(*geom)==typeid(LinearRing)) minLength = 4; CoordinateSequence *collapsedCoords = reducedCoords; if (sgpr->getRemoveCollapsed()) { delete reducedCoords; reducedCoords=0; collapsedCoords=0; } // return null or orginal length coordinate array if (noRepeatedCoords->getSize()true collapsed components will be removed */ void SimpleGeometryPrecisionReducer::setRemoveCollapsedComponents(bool nRemoveCollapsed) { removeCollapsed=nRemoveCollapsed; } const PrecisionModel* SimpleGeometryPrecisionReducer::getPrecisionModel() { return newPrecisionModel; } bool SimpleGeometryPrecisionReducer::getRemoveCollapsed() { return removeCollapsed; } Geometry* SimpleGeometryPrecisionReducer::reduce(const Geometry *geom) { GeometryEditor geomEdit; PrecisionReducerCoordinateOperation prco(this); Geometry *g=geomEdit.edit(geom, &prco); return g; } } // namespace geos.precision } // namespace geos geos-3.4.2/src/simplify/0000755000175000017500000000000012206417237014724 5ustar frankiefrankiegeos-3.4.2/src/simplify/DouglasPeuckerLineSimplifier.cpp0000644000175000017500000000520012206417145023174 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/DouglasPeuckerLineSimplifier.java rev. 1.4 * **********************************************************************/ #include #include #include #include #include // for auto_ptr namespace geos { /// Line simplification algorithms namespace simplify { // geos::simplify /*public static*/ DouglasPeuckerLineSimplifier::CoordsVectAutoPtr DouglasPeuckerLineSimplifier::simplify( const DouglasPeuckerLineSimplifier::CoordsVect& nPts, double distanceTolerance) { DouglasPeuckerLineSimplifier simp(nPts); simp.setDistanceTolerance(distanceTolerance); return simp.simplify(); } /*public*/ DouglasPeuckerLineSimplifier::DouglasPeuckerLineSimplifier( const DouglasPeuckerLineSimplifier::CoordsVect& nPts) : pts(nPts) { } /*public*/ void DouglasPeuckerLineSimplifier::setDistanceTolerance( double nDistanceTolerance) { distanceTolerance=nDistanceTolerance; } /*public*/ DouglasPeuckerLineSimplifier::CoordsVectAutoPtr DouglasPeuckerLineSimplifier::simplify() { CoordsVectAutoPtr coordList(new CoordsVect()); // empty coordlist is the simplest, won't simplify further if ( ! pts.size() ) return coordList; usePt = BoolVectAutoPtr(new BoolVect(pts.size(), true)); simplifySection(0, pts.size() - 1); for (std::size_t i=0, n=pts.size(); ioperator[](i) ) { coordList->push_back(pts[i]); } } // auto_ptr transfer ownership to its // returned copy return coordList; } /*private*/ void DouglasPeuckerLineSimplifier::simplifySection( std::size_t i, std::size_t j) { if ( (i+1) == j ) return; geos::geom::LineSegment seg(pts[i], pts[j]); double maxDistance = -1.0; std::size_t maxIndex = i; for (std::size_t k=i+1; k maxDistance) { maxDistance = distance; maxIndex = k; } } if (maxDistance <= distanceTolerance) { for(std::size_t k =i+1; koperator[](k) = false; } } else { simplifySection(i, maxIndex); simplifySection(maxIndex, j); } } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/DouglasPeuckerSimplifier.cpp0000644000175000017500000001145112206417145022371 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/DouglasPeuckerSimplifier.java rev. 1.5 (JTS-1.7) * **********************************************************************/ #include #include #include // for AutoPtr typedefs #include #include // for AutoPtr typedefs #include #include #include // for DPTransformer inheritance #include #include #include // for auto_ptr #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace simplify { // geos::simplify class DPTransformer: public geom::util::GeometryTransformer { public: DPTransformer(double tolerance); protected: CoordinateSequence::AutoPtr transformCoordinates( const CoordinateSequence* coords, const Geometry* parent); Geometry::AutoPtr transformPolygon( const Polygon* geom, const Geometry* parent); Geometry::AutoPtr transformMultiPolygon( const MultiPolygon* geom, const Geometry* parent); private: /* * Creates a valid area geometry from one that possibly has * bad topology (i.e. self-intersections). * Since buffer can handle invalid topology, but always returns * valid geometry, constructing a 0-width buffer "corrects" the * topology. * Note this only works for area geometries, since buffer always returns * areas. This also may return empty geometries, if the input * has no actual area. * * @param roughAreaGeom an area geometry possibly containing * self-intersections * @return a valid area geometry */ Geometry::AutoPtr createValidArea(const Geometry* roughAreaGeom); double distanceTolerance; }; DPTransformer::DPTransformer(double t) : distanceTolerance(t) { } Geometry::AutoPtr DPTransformer::createValidArea(const Geometry* roughAreaGeom) { return Geometry::AutoPtr(roughAreaGeom->buffer(0.0)); } CoordinateSequence::AutoPtr DPTransformer::transformCoordinates( const CoordinateSequence* coords, const Geometry* parent) { ::geos::ignore_unused_variable_warning(parent); const Coordinate::Vect* inputPts = coords->toVector(); assert(inputPts); std::auto_ptr newPts = DouglasPeuckerLineSimplifier::simplify(*inputPts, distanceTolerance); return CoordinateSequence::AutoPtr( factory->getCoordinateSequenceFactory()->create( newPts.release() )); } Geometry::AutoPtr DPTransformer::transformPolygon( const Polygon* geom, const Geometry* parent) { #if GEOS_DEBUG std::cerr << "DPTransformer::transformPolygon(Polygon " << geom << ", Geometry " << parent << ");" << std::endl; #endif Geometry::AutoPtr roughGeom(GeometryTransformer::transformPolygon(geom, parent)); // don't try and correct if the parent is going to do this if ( dynamic_cast(parent) ) { return roughGeom; } return createValidArea(roughGeom.get()); } Geometry::AutoPtr DPTransformer::transformMultiPolygon( const MultiPolygon* geom, const Geometry* parent) { #if GEOS_DEBUG std::cerr << "DPTransformer::transformMultiPolygon(MultiPolygon " << geom << ", Geometry " << parent << ");" << std::endl; #endif Geometry::AutoPtr roughGeom(GeometryTransformer::transformMultiPolygon(geom, parent)); return createValidArea(roughGeom.get()); } /************************************************************************/ //DouglasPeuckerSimplifier:: /*public static*/ Geometry::AutoPtr DouglasPeuckerSimplifier::simplify(const Geometry* geom, double tolerance) { DouglasPeuckerSimplifier tss(geom); tss.setDistanceTolerance(tolerance); return tss.getResultGeometry(); } /*public*/ DouglasPeuckerSimplifier::DouglasPeuckerSimplifier(const Geometry* geom) : inputGeom(geom) { } /*public*/ void DouglasPeuckerSimplifier::setDistanceTolerance(double tol) { if (tol < 0.0) throw util::IllegalArgumentException("Tolerance must be non-negative"); distanceTolerance = tol; } Geometry::AutoPtr DouglasPeuckerSimplifier::getResultGeometry() { DPTransformer t(distanceTolerance); return t.transform(inputGeom); } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/LineSegmentIndex.cpp0000644000175000017500000000711112206417145020630 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/LineSegmentIndex.java rev. 1.1 (JTS-1.7.1) * **********************************************************************/ #include #include #include #include #include #include #include #include #include // for auto_ptr #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace std; using namespace geos::geom; using namespace geos::index::quadtree; namespace geos { namespace simplify { // geos::simplify /** * ItemVisitor subclass to reduce volume of query results. */ class LineSegmentVisitor: public index::ItemVisitor { // MD - only seems to make about a 10% difference in overall time. private: const LineSegment* querySeg; auto_ptr< vector > items; public: LineSegmentVisitor(const LineSegment* s) : ItemVisitor(), querySeg(s), items(new vector()) {} virtual ~LineSegmentVisitor() { // nothing to do, LineSegments are not owned by us } LineSegmentVisitor(const LineSegmentVisitor& o) : ItemVisitor(), querySeg(o.querySeg), items(new vector(*(o.items.get()))) { } LineSegmentVisitor& operator=(const LineSegmentVisitor& o) { if ( this == &o ) return *this; querySeg = o.querySeg; items.reset(new vector(*(o.items.get()))); return *this; } void visitItem(void* item) { LineSegment* seg = (LineSegment*) item; if ( Envelope::intersects(seg->p0, seg->p1, querySeg->p0, querySeg->p1) ) { items->push_back(seg); } } auto_ptr< vector > getItems() { return items; } }; /*public*/ LineSegmentIndex::LineSegmentIndex() : index(new Quadtree()) { } /*public*/ LineSegmentIndex::~LineSegmentIndex() { for (size_t i=0, n=newEnvelopes.size(); i& segs = line.getSegments(); for (size_t i=0, n=segs.size(); ip0, seg->p1); newEnvelopes.push_back(env); // We need a cast because index wants a non-const, // altought it won't change the argument index->insert(env, (LineSegment*)seg); } /*public*/ void LineSegmentIndex::remove(const LineSegment* seg) { Envelope env(seg->p0, seg->p1); // We need a cast because index wants a non-const // altought it won't change the argument index->remove(&env, (LineSegment*)seg); } /*public*/ auto_ptr< vector > LineSegmentIndex::query(const LineSegment* querySeg) const { Envelope env(querySeg->p0, querySeg->p1); LineSegmentVisitor visitor(querySeg); index->query(&env, visitor); auto_ptr< vector > itemsFound = visitor.getItems(); return itemsFound; } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/Makefile.am0000644000175000017500000000073012206417145016756 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libsimplify.la INCLUDES = -I$(top_srcdir)/include libsimplify_la_SOURCES = \ DouglasPeuckerLineSimplifier.cpp \ DouglasPeuckerSimplifier.cpp \ LineSegmentIndex.cpp \ TaggedLineSegment.cpp \ TaggedLineString.cpp \ TaggedLineStringSimplifier.cpp \ TaggedLinesSimplifier.cpp \ TopologyPreservingSimplifier.cpp libsimplify_la_LIBADD = geos-3.4.2/src/simplify/Makefile.in0000644000175000017500000005465712206417165017012 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/simplify DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsimplify_la_DEPENDENCIES = am_libsimplify_la_OBJECTS = DouglasPeuckerLineSimplifier.lo \ DouglasPeuckerSimplifier.lo LineSegmentIndex.lo \ TaggedLineSegment.lo TaggedLineString.lo \ TaggedLineStringSimplifier.lo TaggedLinesSimplifier.lo \ TopologyPreservingSimplifier.lo libsimplify_la_OBJECTS = $(am_libsimplify_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libsimplify_la_SOURCES) DIST_SOURCES = $(libsimplify_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libsimplify.la INCLUDES = -I$(top_srcdir)/include libsimplify_la_SOURCES = \ DouglasPeuckerLineSimplifier.cpp \ DouglasPeuckerSimplifier.cpp \ LineSegmentIndex.cpp \ TaggedLineSegment.cpp \ TaggedLineString.cpp \ TaggedLineStringSimplifier.cpp \ TaggedLinesSimplifier.cpp \ TopologyPreservingSimplifier.cpp libsimplify_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/simplify/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/simplify/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libsimplify.la: $(libsimplify_la_OBJECTS) $(libsimplify_la_DEPENDENCIES) $(CXXLINK) $(libsimplify_la_OBJECTS) $(libsimplify_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DouglasPeuckerLineSimplifier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DouglasPeuckerSimplifier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineSegmentIndex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TaggedLineSegment.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TaggedLineString.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TaggedLineStringSimplifier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TaggedLinesSimplifier.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TopologyPreservingSimplifier.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/simplify/TaggedLineSegment.cpp0000644000175000017500000000300512206417145020752 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineSegment.java rev. 1.1 (JTS-1.7.1) * **********************************************************************/ #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif namespace geos { namespace simplify { // geos::simplify TaggedLineSegment::TaggedLineSegment(const geom::Coordinate& p0, const geom::Coordinate& p1, const geom::Geometry* nParent, unsigned int nIndex) : LineSegment(p0, p1), parent(nParent), index(nIndex) { } TaggedLineSegment::TaggedLineSegment(const geom::Coordinate& p0, const geom::Coordinate& p1) : LineSegment(p0, p1), parent(NULL), index(0) { } TaggedLineSegment::TaggedLineSegment(const TaggedLineSegment& ls) : LineSegment(ls), parent(ls.parent), index(ls.index) { } const geom::Geometry* TaggedLineSegment::getParent() const { return parent; } unsigned int TaggedLineSegment::getIndex() const { return index; } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/TaggedLineString.cpp0000644000175000017500000001163012206417145020621 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineString.java rev. 1.2 (JTS-1.7.1) * **********************************************************************/ #include #include #include #include #include // for auto_ptr destructor #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; using namespace std; namespace geos { namespace simplify { // geos::simplify /*public*/ TaggedLineString::TaggedLineString(const geom::LineString* nParentLine, std::size_t nMinimumSize) : parentLine(nParentLine), minimumSize(nMinimumSize) { init(); } /*public*/ TaggedLineString::~TaggedLineString() { #if GEOS_DEBUG cerr << "TaggedLineString[" << this << "] destructor" << endl; #endif for (std::size_t i=0, n=segs.size(); igetCoordinatesRO(); #if GEOS_DEBUG cerr << "TaggedLineString[" << this << "] pts.size() " << pts->size() << endl; #endif if ( pts->size() ) { segs.reserve(pts->size()-1); for (std::size_t i=0, n=pts->size()-1; igetAt(i), pts->getAt(i+1), parentLine, i); segs.push_back(seg); } } #if GEOS_DEBUG cerr << "TaggedLineString[" << this << "] segs.size " << segs.size() << endl; cerr << "TaggedLineString[" << this << "] resultSegs.size " << resultSegs.size() << endl; #endif } /*public*/ std::size_t TaggedLineString::getMinimumSize() const { return minimumSize; } /*public*/ const geom::LineString* TaggedLineString::getParent() const { return parentLine; } /*public*/ const CoordinateSequence* TaggedLineString::getParentCoordinates() const { assert(parentLine); return parentLine->getCoordinatesRO(); } /*public*/ CoordinateSequence::AutoPtr TaggedLineString::getResultCoordinates() const { #if GEOS_DEBUG cerr << __FUNCTION__ << " resultSegs.size: " << resultSegs.size() << endl; #endif CoordVectPtr pts = extractCoordinates(resultSegs); #if GEOS_DEBUG cerr << __FUNCTION__ << " extracted Coords.size: " << pts->size() << endl; #endif CoordVect* v = pts.release(); return CoordinateSequence::AutoPtr(parentLine->getFactory()->getCoordinateSequenceFactory()->create(v)); } /*private static*/ TaggedLineString::CoordVectPtr TaggedLineString::extractCoordinates( const std::vector& segs) { CoordVectPtr pts(new CoordVect()); #if GEOS_DEBUG cerr << __FUNCTION__ << " segs.size: " << segs.size() << endl; #endif std::size_t i=0, size=segs.size(); if ( size ) { for (; ipush_back(seg->p0); } // add last point pts->push_back(segs[size-1]->p1); } return pts; } /*public*/ std::size_t TaggedLineString::getResultSize() const { unsigned resultSegsSize = resultSegs.size(); return resultSegsSize == 0 ? 0 : resultSegsSize + 1; } /*public*/ TaggedLineSegment* TaggedLineString::getSegment(std::size_t i) { return segs[i]; } /*public*/ const TaggedLineSegment* TaggedLineString::getSegment(std::size_t i) const { return segs[i]; } /*public*/ vector& TaggedLineString::getSegments() { assert(0); return segs; } /*public*/ const vector& TaggedLineString::getSegments() const { return segs; } /*public*/ auto_ptr TaggedLineString::asLineString() const { return parentLine->getFactory()->createLineString( getResultCoordinates()); } /*public*/ auto_ptr TaggedLineString::asLinearRing() const { return parentLine->getFactory()->createLinearRing( getResultCoordinates()); } /*public*/ void TaggedLineString::addToResult(auto_ptr seg) { #if GEOS_DEBUG cerr << "TaggedLineString[" << this << "] adding " << " seg " << seg.get() << " to result" << endl; #endif resultSegs.push_back(seg.release()); #if GEOS_DEBUG cerr << "TaggedLineString[" << this << "] adding " << " seg " << seg.get() << " to result" << endl; #endif } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/TaggedLineStringSimplifier.cpp0000644000175000017500000001763212206417145022655 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLineStringSimplifier.java r536 (JTS-1.12+) * **********************************************************************/ #include #include #include #include #include #include #include //#include // for auto_ptr destructor //#include //#include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; using namespace std; namespace geos { namespace simplify { // geos::simplify /*public*/ TaggedLineStringSimplifier::TaggedLineStringSimplifier( LineSegmentIndex* nInputIndex, LineSegmentIndex* nOutputIndex) : inputIndex(nInputIndex), outputIndex(nOutputIndex), li(new algorithm::LineIntersector()), line(NULL), linePts(NULL), distanceTolerance(0.0) { } /*public*/ void TaggedLineStringSimplifier::simplify(TaggedLineString* nLine) { assert(nLine); line = nLine; linePts = line->getParentCoordinates(); assert(linePts); #if GEOS_DEBUG std::cerr << "TaggedLineStringSimplifier[" << this << "] " << " TaggedLineString[" << line << "] " << " has " << linePts->size() << " coords in input" << std::endl; #endif if ( ! linePts->size() ) return; simplifySection(0, linePts->size() - 1, 0); } /*private*/ void TaggedLineStringSimplifier::simplifySection(std::size_t i, std::size_t j, std::size_t depth) { depth += 1; #if GEOS_DEBUG std::cerr << "TaggedLineStringSimplifier[" << this << "] " << " simplifying section " << i << "-" << j << std::endl; #endif vector sectionIndex(2); if((i+1) == j) { #if GEOS_DEBUG std::cerr << "single segment, no flattening" << std::endl; #endif auto_ptr newSeg(new TaggedLineSegment(*(line->getSegment(i)))); line->addToResult(newSeg); // leave this segment in the input index, for efficiency return; } bool isValidToSimplify = true; /** * Following logic ensures that there is enough points in the * output line. * If there is already more points than the minimum, there's * nothing to check. * Otherwise, if in the worst case there wouldn't be enough points, * don't flatten this segment (which avoids the worst case scenario) */ if (line->getResultSize() < line->getMinimumSize()) { std::size_t worstCaseSize = depth + 1; if (worstCaseSize < line->getMinimumSize()) isValidToSimplify = false; } double distance; // pass distance by ref std::size_t furthestPtIndex = findFurthestPoint(linePts, i, j, distance); #if GEOS_DEBUG std::cerr << "furthest point " << furthestPtIndex << " at distance " << distance << std::endl; #endif // flattening must be less than distanceTolerance if ( distance > distanceTolerance ) isValidToSimplify = false; // test if flattened section would cause intersection LineSegment candidateSeg(linePts->getAt(i), linePts->getAt(j)); sectionIndex[0] = i; sectionIndex[1] = j; if (hasBadIntersection(line, sectionIndex, candidateSeg)) isValidToSimplify = false; if (isValidToSimplify) { auto_ptr newSeg = flatten(i, j); #if GEOS_DEBUG std::cerr << "isValidToSimplify, adding seg " << newSeg->p0 << ", " << newSeg->p1 << " to TaggedLineSegment["<addToResult(newSeg); return; } simplifySection(i, furthestPtIndex, depth); simplifySection(furthestPtIndex, j, depth); } /*private*/ auto_ptr TaggedLineStringSimplifier::flatten(std::size_t start, std::size_t end) { // make a new segment for the simplified geometry const Coordinate& p0 = linePts->getAt(start); const Coordinate& p1 = linePts->getAt(end); auto_ptr newSeg(new TaggedLineSegment(p0, p1)); // update the indexes remove(line, start, end); outputIndex->add(newSeg.get()); return newSeg; } /*private*/ bool TaggedLineStringSimplifier::hasBadIntersection( const TaggedLineString* parentLine, const vector& sectionIndex, const LineSegment& candidateSeg) { if (hasBadOutputIntersection(candidateSeg)) return true; if (hasBadInputIntersection(parentLine, sectionIndex, candidateSeg)) return true; return false; } /*private*/ bool TaggedLineStringSimplifier::hasBadOutputIntersection( const LineSegment& candidateSeg) { auto_ptr< vector > querySegs = outputIndex->query(&candidateSeg); for (vector::iterator it = querySegs->begin(), iEnd = querySegs->end(); it != iEnd; ++it) { LineSegment* querySeg = *it; assert(querySeg); if (hasInteriorIntersection(*querySeg, candidateSeg)) { return true; } } return false; } /*private*/ bool TaggedLineStringSimplifier::hasInteriorIntersection( const LineSegment& seg0, const LineSegment& seg1) const { li->computeIntersection(seg0.p0, seg0.p1, seg1.p0, seg1.p1); return li->isInteriorIntersection(); } /*private*/ bool TaggedLineStringSimplifier::hasBadInputIntersection( const TaggedLineString* parentLine, const vector& sectionIndex, const LineSegment& candidateSeg) { auto_ptr< vector > querySegs = inputIndex->query(&candidateSeg); for (vector::iterator it = querySegs->begin(), iEnd = querySegs->end(); it != iEnd; ++it) { assert(*it); assert(dynamic_cast(*it)); TaggedLineSegment* querySeg = static_cast(*it); if (hasInteriorIntersection(*querySeg, candidateSeg)) { if ( isInLineSection(parentLine, sectionIndex, querySeg) ) { continue; } return true; } } return false; } /*static private*/ bool TaggedLineStringSimplifier::isInLineSection( const TaggedLineString* line, const vector& sectionIndex, const TaggedLineSegment* seg) { // not in this line if (seg->getParent() != line->getParent()) return false; std::size_t segIndex = seg->getIndex(); if (segIndex >= sectionIndex[0] && segIndex < sectionIndex[1]) return true; return false; } /*private*/ void TaggedLineStringSimplifier::remove(const TaggedLineString* line, std::size_t start, std::size_t end) { assert(end <= line->getSegments().size() ); assert(start < end); // I'm not sure this should always be true for (std::size_t i = start; i < end; i++) { const TaggedLineSegment* seg = line->getSegment(i); inputIndex->remove(seg); } } /*private static*/ std::size_t TaggedLineStringSimplifier::findFurthestPoint( const geom::CoordinateSequence* pts, std::size_t i, std::size_t j, double& maxDistance) { LineSegment seg(pts->getAt(i), pts->getAt(j)); #if GEOS_DEBUG std::cerr << __FUNCTION__ << "segment " << seg << std::endl; #endif double maxDist = -1.0; std::size_t maxIndex = i; for (std::size_t k = i + 1; k < j; k++) { const Coordinate& midPt = pts->getAt(k); double distance = seg.distance(midPt); #if GEOS_DEBUG std::cerr << "dist to " << midPt << ": " << distance << std::endl; #endif if (distance > maxDist) { #if GEOS_DEBUG std::cerr << "this is max" << std::endl; #endif maxDist = distance; maxIndex = k; } } maxDistance = maxDist; return maxIndex; } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/TaggedLinesSimplifier.cpp0000644000175000017500000000310612206417145021640 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TaggedLinesSimplifier.java rev. 1.4 (JTS-1.7.1) * **********************************************************************/ #include #include #include #include #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; using namespace std; namespace geos { namespace simplify { // geos::simplify /*public*/ TaggedLinesSimplifier::TaggedLinesSimplifier() : inputIndex(new LineSegmentIndex()), outputIndex(new LineSegmentIndex()), taggedlineSimplifier(new TaggedLineStringSimplifier(inputIndex.get(), outputIndex.get())) { } /*public*/ void TaggedLinesSimplifier::setDistanceTolerance(double d) { taggedlineSimplifier->setDistanceTolerance(d); } /*private*/ void TaggedLinesSimplifier::simplify(TaggedLineString& tls) { taggedlineSimplifier->simplify(&tls); } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/simplify/TopologyPreservingSimplifier.cpp0000644000175000017500000001762412206417145023345 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: simplify/TopologyPreservingSimplifier.java r536 (JTS-1.12+) * **********************************************************************/ #include #include #include // for auto_ptr dtor #include #include // for auto_ptr dtor #include // for auto_ptr dtor // for LineStringTransformer inheritance #include // for LineStringMapBuilderFilter inheritance #include #include // for auto_ptr dtor #include #include #include #include // for auto_ptr #include #include #include #ifndef GEOS_DEBUG #define GEOS_DEBUG 0 #endif #ifdef GEOS_DEBUG #include #endif using namespace geos::geom; namespace geos { namespace simplify { // geos::simplify typedef std::map LinesMap; namespace { // module-statics class LineStringTransformer: public geom::util::GeometryTransformer { public: /** * User's constructor. * @param nMap - reference to LinesMap instance. */ LineStringTransformer(LinesMap& simp); protected: CoordinateSequence::AutoPtr transformCoordinates( const CoordinateSequence* coords, const Geometry* parent); private: LinesMap& linestringMap; }; /* * helper class to transform a map iterator so to return value_type * on dereference. * TODO: generalize this to be a "ValueIterator" with specializations * for std::map and std::vector */ class LinesMapValueIterator { LinesMap::iterator _iter; public: LinesMapValueIterator(LinesMap::iterator iter) : _iter(iter) { } // copy ctor LinesMapValueIterator(const LinesMapValueIterator& o) : _iter(o._iter) { } // assignment LinesMapValueIterator& operator=(const LinesMapValueIterator& o) { _iter=o._iter; return *this; } // postfix++ void operator++(int) { _iter++; } // ++suffix void operator++() { ++_iter; } // inequality operator bool operator!=(const LinesMapValueIterator& other) const { return _iter != other._iter; } TaggedLineString* operator*() { return _iter->second; } }; /*public*/ LineStringTransformer::LineStringTransformer(LinesMap& nMap) : linestringMap(nMap) { } /*protected*/ CoordinateSequence::AutoPtr LineStringTransformer::transformCoordinates( const CoordinateSequence* coords, const Geometry* parent) { #if GEOS_DEBUG std::cerr << __FUNCTION__ << ": parent: " << parent << std::endl; #endif if ( dynamic_cast(parent) ) { LinesMap::iterator it = linestringMap.find(parent); assert( it != linestringMap.end() ); TaggedLineString* taggedLine = it->second; #if GEOS_DEBUG std::cerr << "LineStringTransformer[" << this << "] " << " getting result Coordinates from " << " TaggedLineString[" << taggedLine << "]" << std::endl; #endif assert(taggedLine); assert(taggedLine->getParent() == parent); return taggedLine->getResultCoordinates(); } // for anything else (e.g. points) just copy the coordinates return GeometryTransformer::transformCoordinates(coords, parent); } //---------------------------------------------------------------------- /* * A filter to add linear geometries to the linestring map * with the appropriate minimum size constraint. * Closed {@link LineString}s (including {@link LinearRing}s * have a minimum output size constraint of 4, * to ensure the output is valid. * For all other linestrings, the minimum size is 2 points. * * This class populates the given LineString=>TaggedLineString map * with newly created TaggedLineString objects. * Users must take care of deleting the map's values (elem.second). * Would be nice if auto_ptr<> worked in a container, but it doesn't :( * * mloskot: So, let's write our own "shared smart pointer" or better ask * PCS about using Boost's shared_ptr. * */ class LineStringMapBuilderFilter: public geom::GeometryComponentFilter { public: // no more needed //friend class TopologyPreservingSimplifier; /** * Filters linear geometries. * * geom a geometry of any type */ void filter_ro(const Geometry* geom); /** * User's constructor. * @param nMap - reference to LinesMap instance. */ LineStringMapBuilderFilter(LinesMap& nMap); private: LinesMap& linestringMap; // Declare type as noncopyable LineStringMapBuilderFilter(const LineStringMapBuilderFilter& other); LineStringMapBuilderFilter& operator=(const LineStringMapBuilderFilter& rhs); }; /*public*/ LineStringMapBuilderFilter::LineStringMapBuilderFilter(LinesMap& nMap) : linestringMap(nMap) { } /*public*/ void LineStringMapBuilderFilter::filter_ro(const Geometry* geom) { TaggedLineString* taggedLine; if ( const LineString* ls = dynamic_cast(geom) ) { int minSize = ls->isClosed() ? 4 : 2; taggedLine = new TaggedLineString(ls, minSize); } else { return; } // Duplicated Geometry pointers shouldn't happen if ( ! linestringMap.insert(std::make_pair(geom, taggedLine)).second ) { std::cerr << __FILE__ << ":" << __LINE__ << "Duplicated Geometry components detected" << std::endl; delete taggedLine; } } } // end of module-statics /*public static*/ std::auto_ptr TopologyPreservingSimplifier::simplify( const geom::Geometry* geom, double tolerance) { TopologyPreservingSimplifier tss(geom); tss.setDistanceTolerance(tolerance); return tss.getResultGeometry(); } /*public*/ TopologyPreservingSimplifier::TopologyPreservingSimplifier(const Geometry* geom) : inputGeom(geom), lineSimplifier(new TaggedLinesSimplifier()) { } /*public*/ void TopologyPreservingSimplifier::setDistanceTolerance(double d) { using geos::util::IllegalArgumentException; if ( d < 0.0 ) throw IllegalArgumentException("Tolerance must be non-negative"); lineSimplifier->setDistanceTolerance(d); } /*public*/ std::auto_ptr TopologyPreservingSimplifier::getResultGeometry() { // empty input produces an empty result if (inputGeom->isEmpty()) return std::auto_ptr(inputGeom->clone()); LinesMap linestringMap; std::auto_ptr result; try { LineStringMapBuilderFilter lsmbf(linestringMap); inputGeom->apply_ro(&lsmbf); #if GEOS_DEBUG std::cerr << "LineStringMapBuilderFilter applied, " << " lineStringMap contains " << linestringMap.size() << " elements\n"; #endif LinesMapValueIterator begin(linestringMap.begin()); LinesMapValueIterator end(linestringMap.end()); lineSimplifier->simplify(begin, end); #if GEOS_DEBUG std::cerr << "all TaggedLineString simplified\n"; #endif LineStringTransformer trans(linestringMap); result = trans.transform(inputGeom); #if GEOS_DEBUG std::cerr << "inputGeom transformed\n"; #endif } catch (...) { for (LinesMap::iterator it = linestringMap.begin(), itEnd = linestringMap.end(); it != itEnd; ++it) { delete it->second; } throw; } for (LinesMap::iterator it = linestringMap.begin(), itEnd = linestringMap.end(); it != itEnd; ++it) { delete it->second; } #if GEOS_DEBUG std::cerr << "returning result\n"; #endif return result; } } // namespace geos::simplify } // namespace geos geos-3.4.2/src/triangulate/0000755000175000017500000000000012206417237015407 5ustar frankiefrankiegeos-3.4.2/src/triangulate/DelaunayTriangulationBuilder.cpp0000644000175000017500000000756112206417145023734 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/DelaunayTriangulationBuilder.java rev. r524 * **********************************************************************/ #include #include #include #include #include #include #include namespace geos { namespace triangulate { //geos.triangulate using namespace geos::geom; CoordinateSequence* DelaunayTriangulationBuilder::extractUniqueCoordinates( const Geometry& geom) { geom::CoordinateSequence *coords = geom.getCoordinates(); unique(*coords); return coords; } void DelaunayTriangulationBuilder::unique(CoordinateSequence& coords) { std::vector coordVector; coords.toVector(coordVector); std::sort(coordVector.begin(), coordVector.end(), geos::geom::CoordinateLessThen()); coords.setPoints(coordVector); coords.removeRepeatedPoints(); } IncrementalDelaunayTriangulator::VertexList* DelaunayTriangulationBuilder::toVertices( const CoordinateSequence &coords) { IncrementalDelaunayTriangulator::VertexList* vertexList = new IncrementalDelaunayTriangulator::VertexList(); for(size_t iter=0; iter < coords.size(); ++iter) { vertexList->push_back(quadedge::Vertex(coords.getAt(iter))); } return vertexList; } DelaunayTriangulationBuilder::DelaunayTriangulationBuilder() : siteCoords(NULL), tolerance(0.0), subdiv(NULL) { } DelaunayTriangulationBuilder::~DelaunayTriangulationBuilder() { if(siteCoords) delete siteCoords; if(subdiv) delete subdiv; } void DelaunayTriangulationBuilder::setSites(const Geometry& geom) { if(siteCoords) delete siteCoords; // remove any duplicate points (they will cause the triangulation to fail) siteCoords = extractUniqueCoordinates(geom); } void DelaunayTriangulationBuilder::setSites(const CoordinateSequence& coords) { if(siteCoords) delete siteCoords; siteCoords = coords.clone(); // remove any duplicate points (they will cause the triangulation to fail) unique(*siteCoords); } void DelaunayTriangulationBuilder::create() { if(subdiv != NULL || siteCoords == NULL) return; Envelope siteEnv; siteCoords ->expandEnvelope(siteEnv); IncrementalDelaunayTriangulator::VertexList* vertices = toVertices(*siteCoords); subdiv = new quadedge::QuadEdgeSubdivision(siteEnv, tolerance); IncrementalDelaunayTriangulator triangulator = IncrementalDelaunayTriangulator(subdiv); triangulator.insertSites(*vertices); delete vertices; } quadedge::QuadEdgeSubdivision& DelaunayTriangulationBuilder::getSubdivision() { create(); return *subdiv; } std::auto_ptr DelaunayTriangulationBuilder::getEdges( const GeometryFactory& geomFact) { create(); return subdiv->getEdges(geomFact); } std::auto_ptr DelaunayTriangulationBuilder::getTriangles( const geom::GeometryFactory& geomFact) { create(); return subdiv->getTriangles(geomFact); } geom::Envelope DelaunayTriangulationBuilder::envelope(const geom::CoordinateSequence& coords) { Envelope env; std::vector coord_vector; coords.toVector(coord_vector); for(std::vector::iterator it= coord_vector.begin() ; it!=coord_vector.end() ; ++it) { const Coordinate& coord = *it; env.expandToInclude(coord); } return env; } } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/IncrementalDelaunayTriangulator.cpp0000644000175000017500000000557312206417145024443 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/IncrementalDelaunayTriangulator.java rev. r524 * **********************************************************************/ #include #include #include #include namespace geos { namespace triangulate { //geos.triangulate using namespace quadedge; IncrementalDelaunayTriangulator::IncrementalDelaunayTriangulator( QuadEdgeSubdivision *subdiv) : subdiv(subdiv), isUsingTolerance(subdiv->getTolerance() > 0.0) { } void IncrementalDelaunayTriangulator::insertSites(const VertexList& vertices) { for (VertexList::const_iterator x=vertices.begin(); x != vertices.end(); ++x) { insertSite(*x); } } QuadEdge& IncrementalDelaunayTriangulator::insertSite(const Vertex &v) { /** * This code is based on Guibas and Stolfi (1985), with minor modifications * and a bug fix from Dani Lischinski (Graphic Gems 1993). (The modification * I believe is the test for the inserted site falling exactly on an * existing edge. Without this test zero-width triangles have been observed * to be created) */ QuadEdge *e = subdiv->locate(v); if(!e) { throw LocateFailureException(""); } if (subdiv->isVertexOfEdge(*e, v)) { // point is already in subdivision. return *e; } else if (subdiv->isOnEdge(*e, v.getCoordinate())) { // the point lies exactly on an edge, so delete the edge // (it will be replaced by a pair of edges which have the point as a vertex) e = &e->oPrev(); subdiv->remove(e->oNext()); } /** * Connect the new point to the vertices of the containing triangle * (or quadrilateral, if the new point fell on an existing edge.) */ QuadEdge* base = &subdiv->makeEdge(e->orig(), v); QuadEdge::splice(*base, *e); QuadEdge *startEdge = base; do { base = &subdiv->connect(*e, base->sym()); e = &base->oPrev(); } while (&e->lNext() != startEdge); // Examine suspect edges to ensure that the Delaunay condition // is satisfied. do { QuadEdge* t = &e->oPrev(); if (t->dest().rightOf(*e) && v.isInCircle(e->orig(), t->dest(), e->dest())) { QuadEdge::swap(*e); e = &e->oPrev(); } else if (&e->oNext() == startEdge) { return *base; // no more suspect edges. } else { e = &e->oNext().lPrev(); } } while (true); } } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/Makefile.am0000644000175000017500000000052012206417145017436 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ quadedge noinst_LTLIBRARIES = libtriangulate.la INCLUDES = -I$(top_srcdir)/include libtriangulate_la_SOURCES = \ IncrementalDelaunayTriangulator.cpp \ DelaunayTriangulationBuilder.cpp libtriangulate_la_LIBADD = \ quadedge/libquadedge.la geos-3.4.2/src/triangulate/Makefile.in0000644000175000017500000005333212206417165017462 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/triangulate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libtriangulate_la_DEPENDENCIES = quadedge/libquadedge.la am_libtriangulate_la_OBJECTS = IncrementalDelaunayTriangulator.lo \ DelaunayTriangulationBuilder.lo libtriangulate_la_OBJECTS = $(am_libtriangulate_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libtriangulate_la_SOURCES) DIST_SOURCES = $(libtriangulate_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ quadedge noinst_LTLIBRARIES = libtriangulate.la INCLUDES = -I$(top_srcdir)/include libtriangulate_la_SOURCES = \ IncrementalDelaunayTriangulator.cpp \ DelaunayTriangulationBuilder.cpp libtriangulate_la_LIBADD = \ quadedge/libquadedge.la all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/triangulate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/triangulate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libtriangulate.la: $(libtriangulate_la_OBJECTS) $(libtriangulate_la_DEPENDENCIES) $(CXXLINK) $(libtriangulate_la_OBJECTS) $(libtriangulate_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DelaunayTriangulationBuilder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IncrementalDelaunayTriangulator.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/triangulate/quadedge/0000755000175000017500000000000012206417240017160 5ustar frankiefrankiegeos-3.4.2/src/triangulate/quadedge/LastFoundQuadEdgeLocator.cpp0000644000175000017500000000265012206417145024516 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/LastFoundQuadEdgeLocator.java r524 * **********************************************************************/ #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge LastFoundQuadEdgeLocator::LastFoundQuadEdgeLocator(QuadEdgeSubdivision *subdiv) : subdiv(subdiv), lastEdge(NULL) { } void LastFoundQuadEdgeLocator::init() { lastEdge = findEdge(); } QuadEdge* LastFoundQuadEdgeLocator::findEdge() { // assume there is an edge return *(subdiv->getEdges().begin()); } QuadEdge* LastFoundQuadEdgeLocator::locate(const Vertex &v) { if (!lastEdge || !lastEdge->isLive()) { init(); } QuadEdge *e = subdiv->locateFromEdge(v, *lastEdge); lastEdge = e; return e; } } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/LocateFailureException.cpp0000644000175000017500000000176012206417145024272 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/LocateFailureException.java r524 * **********************************************************************/ #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge LocateFailureException::LocateFailureException(std::string const&msg) { util::GEOSException("LocateFailureException", msg); } } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/Makefile.am0000644000175000017500000000061712206417145021224 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libquadedge.la INCLUDES = -I$(top_srcdir)/include libquadedge_la_SOURCES = \ QuadEdge.cpp \ Vertex.cpp \ TrianglePredicate.cpp \ QuadEdgeSubdivision.cpp \ QuadEdgeLocator.cpp \ LastFoundQuadEdgeLocator.cpp \ LocateFailureException.cpp \ TriangleVisitor.cpp libquadedge_la_LIBADD = geos-3.4.2/src/triangulate/quadedge/Makefile.in0000644000175000017500000005444312206417165021245 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/triangulate/quadedge DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libquadedge_la_DEPENDENCIES = am_libquadedge_la_OBJECTS = QuadEdge.lo Vertex.lo TrianglePredicate.lo \ QuadEdgeSubdivision.lo QuadEdgeLocator.lo \ LastFoundQuadEdgeLocator.lo LocateFailureException.lo \ TriangleVisitor.lo libquadedge_la_OBJECTS = $(am_libquadedge_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libquadedge_la_SOURCES) DIST_SOURCES = $(libquadedge_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libquadedge.la INCLUDES = -I$(top_srcdir)/include libquadedge_la_SOURCES = \ QuadEdge.cpp \ Vertex.cpp \ TrianglePredicate.cpp \ QuadEdgeSubdivision.cpp \ QuadEdgeLocator.cpp \ LastFoundQuadEdgeLocator.cpp \ LocateFailureException.cpp \ TriangleVisitor.cpp libquadedge_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/triangulate/quadedge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/triangulate/quadedge/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libquadedge.la: $(libquadedge_la_OBJECTS) $(libquadedge_la_DEPENDENCIES) $(CXXLINK) $(libquadedge_la_OBJECTS) $(libquadedge_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LastFoundQuadEdgeLocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocateFailureException.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadEdge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadEdgeLocator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadEdgeSubdivision.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TrianglePredicate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriangleVisitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Vertex.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/triangulate/quadedge/QuadEdge.cpp0000644000175000017500000000652312206417145021355 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdge.java r524 * **********************************************************************/ #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge using namespace geos::geom; std::auto_ptr QuadEdge::makeEdge(const Vertex &o, const Vertex &d) { QuadEdge *q0 = new QuadEdge(); //q1-q3 are free()'d by q0 QuadEdge *q1 = new QuadEdge(); QuadEdge *q2 = new QuadEdge(); QuadEdge *q3 = new QuadEdge(); q0->_rot = q1; q1->_rot = q2; q2->_rot = q3; q3->_rot = q0; q0->setNext(q0); q1->setNext(q3); q2->setNext(q2); q3->setNext(q1); QuadEdge *base = q0; base->setOrig(o); base->setDest(d); return std::auto_ptr(base); } std::auto_ptr QuadEdge::connect(QuadEdge &a, QuadEdge &b) { std::auto_ptr q0 = makeEdge(a.dest(), b.orig()); splice(*q0, a.lNext()); splice(q0->sym(), b); return q0; } void QuadEdge::splice(QuadEdge &a, QuadEdge &b) { QuadEdge &alpha = a.oNext().rot(); QuadEdge &beta = b.oNext().rot(); QuadEdge &t1 = b.oNext(); QuadEdge &t2 = a.oNext(); QuadEdge &t3 = beta.oNext(); QuadEdge &t4 = alpha.oNext(); a.setNext(&t1); b.setNext(&t2); alpha.setNext(&t3); beta.setNext(&t4); } void QuadEdge::swap(QuadEdge &e) { QuadEdge &a = e.oPrev(); QuadEdge &b = e.sym().oPrev(); splice(e, a); splice(e.sym(), b); splice(e, a.lNext()); splice(e.sym(), b.lNext()); e.setOrig(a.dest()); e.setDest(b.dest()); } QuadEdge::QuadEdge() : _rot(NULL), vertex(), next(NULL), data(NULL), isAlive(true) { } QuadEdge::~QuadEdge() { } void QuadEdge::free() { if(_rot) { if(_rot->_rot) { if(_rot->_rot->_rot) { delete _rot->_rot->_rot; _rot->_rot->_rot = NULL; } delete _rot->_rot; _rot->_rot = NULL; } delete _rot; _rot = NULL; } } const QuadEdge& QuadEdge::getPrimary() const { if (orig().getCoordinate().compareTo(dest().getCoordinate()) <= 0) return *this; else return sym(); } void QuadEdge::setData(void* data) { this->data = data; } void* QuadEdge::getData() { return data; } void QuadEdge::remove() { rot().rot().rot().isAlive = false; rot().rot().isAlive = false; rot().isAlive = false; isAlive = false; } bool QuadEdge::equalsNonOriented(const QuadEdge &qe) const { if (equalsOriented(qe)) return true; if (equalsOriented(qe.sym())) return true; return false; } bool QuadEdge::equalsOriented(const QuadEdge &qe) const { if (orig().getCoordinate().equals2D(qe.orig().getCoordinate()) && dest().getCoordinate().equals2D(qe.dest().getCoordinate())) return true; return false; } std::auto_ptr QuadEdge::toLineSegment() const { return std::auto_ptr( new geom::LineSegment(vertex.getCoordinate(), dest().getCoordinate())); } } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/QuadEdgeLocator.cpp0000644000175000017500000000161212206417145022673 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdgeLocator.java r524 * **********************************************************************/ #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge QuadEdgeLocator::~QuadEdgeLocator() {} } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/QuadEdgeSubdivision.cpp0000644000175000017500000003044712206417145023576 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/QuadEdgeSubdivision.java r524 * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge void QuadEdgeSubdivision::getTriangleEdges(const QuadEdge &startQE, const QuadEdge* triEdge[3]) { triEdge[0] = &startQE; triEdge[1] = &triEdge[0]->lNext(); triEdge[2] = &triEdge[1]->lNext(); if (&triEdge[2]->lNext() != triEdge[0]) { throw new util::IllegalArgumentException("Edges do not form a triangle"); } } QuadEdgeSubdivision::QuadEdgeSubdivision(const geom::Envelope &env, double tolerance) : tolerance(tolerance), locator(new LastFoundQuadEdgeLocator(this)) { edgeCoincidenceTolerance = tolerance / EDGE_COINCIDENCE_TOL_FACTOR; createFrame(env); initSubdiv(startingEdges); quadEdges.push_back(startingEdges[0]); createdEdges.push_back(startingEdges[0]); quadEdges.push_back(startingEdges[1]); createdEdges.push_back(startingEdges[1]); quadEdges.push_back(startingEdges[2]); createdEdges.push_back(startingEdges[2]); } QuadEdgeSubdivision::~QuadEdgeSubdivision() { for(QuadEdgeList::iterator iter=createdEdges.begin(); iter!=createdEdges.end(); ++iter) { (*iter)->free(); delete *iter; } } void QuadEdgeSubdivision::createFrame(const geom::Envelope &env) { double deltaX = env.getWidth(); double deltaY = env.getHeight(); double offset = 0.0; if (deltaX > deltaY) { offset = deltaX * 10.0; } else { offset = deltaY * 10.0; } frameVertex[0] = Vertex((env.getMaxX() + env.getMinX()) / 2.0, env .getMaxY() + offset); frameVertex[1] = Vertex(env.getMinX() - offset, env.getMinY() - offset); frameVertex[2] = Vertex(env.getMaxX() + offset, env.getMinY() - offset); frameEnv = Envelope(frameVertex[0].getCoordinate(), frameVertex[1] .getCoordinate()); frameEnv.expandToInclude(frameVertex[2].getCoordinate()); } void QuadEdgeSubdivision::initSubdiv(QuadEdge* initEdges[3]) { std::auto_ptr tmp_auto_ptr; // build initial subdivision from frame tmp_auto_ptr = QuadEdge::makeEdge(frameVertex[0], frameVertex[1]); initEdges[0] = tmp_auto_ptr.get(); tmp_auto_ptr.release(); tmp_auto_ptr = QuadEdge::makeEdge(frameVertex[1], frameVertex[2]); initEdges[1] = tmp_auto_ptr.get(); tmp_auto_ptr.release(); QuadEdge::splice(initEdges[0]->sym(), *initEdges[1]); tmp_auto_ptr = QuadEdge::makeEdge(frameVertex[2], frameVertex[0]); initEdges[2] = tmp_auto_ptr.get(); tmp_auto_ptr.release(); QuadEdge::splice(initEdges[1]->sym(), *initEdges[2]); QuadEdge::splice(initEdges[2]->sym(), *initEdges[0]); } QuadEdge& QuadEdgeSubdivision::makeEdge(const Vertex &o, const Vertex &d) { std::auto_ptr q0 = QuadEdge::makeEdge(o, d); QuadEdge *q0_ptr = q0.get(); q0.release(); createdEdges.push_back(q0_ptr); quadEdges.push_back(q0_ptr); return *q0_ptr; } QuadEdge& QuadEdgeSubdivision::connect(QuadEdge &a, QuadEdge &b) { std::auto_ptr q0 = QuadEdge::connect(a, b); QuadEdge *q0_ptr = q0.get(); q0.release(); createdEdges.push_back(q0_ptr); quadEdges.push_back(q0_ptr); return *q0_ptr; } void QuadEdgeSubdivision::remove(QuadEdge &e) { QuadEdge::splice(e, e.oPrev()); QuadEdge::splice(e.sym(), e.sym().oPrev()); // this is inefficient on an ArrayList, but this method should be called infrequently quadEdges.remove(&e); //mark these edges as removed e.remove(); } QuadEdge* QuadEdgeSubdivision::locateFromEdge(const Vertex &v, const QuadEdge &startEdge) const { int iter = 0; int maxIter = quadEdges.size(); QuadEdge *e = startingEdges[0]; while (true) { ++iter; /** * So far it has always been the case that failure to locate indicates an * invalid subdivision. So just fail completely. (An alternative would be * to perform an exhaustive search for the containing triangle, but this * would mask errors in the subdivision topology) * * This can also happen if two vertices are located very close together, * since the orientation predicates may experience precision failures. */ if (iter > maxIter) { throw LocateFailureException(""); } if ((v.equals(e->orig())) || (v.equals(e->dest()))) { break; } else if (v.rightOf(*e)) { e = &e->sym(); } else if (!v.rightOf(e->oNext())) { e = &e->oNext(); } else if (!v.rightOf(e->dPrev())) { e = &e->dPrev(); } else { // on edge or in triangle containing edge break; } } return e; } QuadEdge* QuadEdgeSubdivision::locate(const Coordinate &p0, const Coordinate &p1) { // find an edge containing one of the points QuadEdge *e = locator->locate(Vertex(p0)); if (e == NULL) return NULL; // normalize so that p0 is origin of base edge QuadEdge *base = e; if (e->dest().getCoordinate().equals2D(p0)) base = &e->sym(); // check all edges around origin of base edge QuadEdge *locEdge = base; do { if (locEdge->dest().getCoordinate().equals2D(p1)) return locEdge; locEdge = &locEdge->oNext(); } while (locEdge != base); return NULL; } QuadEdge& QuadEdgeSubdivision::insertSite(const Vertex &v) { QuadEdge *e = locate(v); if ((v.equals(e->orig(), tolerance)) || (v.equals(e->dest(), tolerance))) { return *e; // point already in subdivision. } // Connect the new point to the vertices of the containing // triangle (or quadrilateral, if the new point fell on an // existing edge.) QuadEdge *base = &makeEdge(e->orig(), v); QuadEdge::splice(*base, *e); QuadEdge *startEdge = base; do { base = &connect(*e, base->sym()); e = &base->oPrev(); } while (&e->lNext() != startEdge); return *startEdge; } bool QuadEdgeSubdivision::isFrameEdge(const QuadEdge &e) const { if (isFrameVertex(e.orig()) || isFrameVertex(e.dest())) return true; return false; } bool QuadEdgeSubdivision::isFrameBorderEdge(const QuadEdge &e) const { // check other vertex of triangle to left of edge Vertex vLeftTriOther = e.lNext().dest(); if (isFrameVertex(vLeftTriOther)) return true; // check other vertex of triangle to right of edge Vertex vRightTriOther = e.sym().lNext().dest(); if (isFrameVertex(vRightTriOther)) return true; return false; } bool QuadEdgeSubdivision::isFrameVertex(const Vertex &v) const { if (v.equals(frameVertex[0])) return true; if (v.equals(frameVertex[1])) return true; if (v.equals(frameVertex[2])) return true; return false; } bool QuadEdgeSubdivision::isOnEdge(const QuadEdge &e, const Coordinate &p) const { geom::LineSegment seg; seg.setCoordinates(e.orig().getCoordinate(), e.dest().getCoordinate()); double dist = seg.distance(p); // heuristic (hack?) return dist < edgeCoincidenceTolerance; } bool QuadEdgeSubdivision::isVertexOfEdge(const QuadEdge &e, const Vertex &v) const { if ((v.equals(e.orig(), tolerance)) || (v.equals(e.dest(), tolerance))) { return true; } return false; } std::auto_ptr QuadEdgeSubdivision::getPrimaryEdges(bool includeFrame) { QuadEdgeList *edges = new QuadEdgeList(); QuadEdgeStack edgeStack; QuadEdgeSet visitedEdges; edgeStack.push(startingEdges[0]); while (!edgeStack.empty()) { QuadEdge *edge = edgeStack.top(); edgeStack.pop(); if (visitedEdges.find(edge) == visitedEdges.end()) { QuadEdge* priQE = (QuadEdge*)&edge->getPrimary(); if (includeFrame || ! isFrameEdge(*priQE)) edges->push_back(priQE); edgeStack.push(&edge->oNext()); edgeStack.push(&edge->sym().oNext()); visitedEdges.insert(edge); visitedEdges.insert(&edge->sym()); } } return std::auto_ptr(edges); } QuadEdge** QuadEdgeSubdivision::fetchTriangleToVisit(QuadEdge *edge, QuadEdgeStack &edgeStack, bool includeFrame, QuadEdgeSet &visitedEdges) { QuadEdge *curr = edge; int edgeCount = 0; bool isFrame = false; do { triEdges[edgeCount] = curr; if (isFrameEdge(*curr)) isFrame = true; // push sym edges to visit next QuadEdge *sym = &curr->sym(); if (visitedEdges.find(sym) == visitedEdges.end()) edgeStack.push(sym); // mark this edge as visited visitedEdges.insert(curr); edgeCount++; curr = &curr->lNext(); } while (curr != edge); if (isFrame && !includeFrame) return NULL; return triEdges; } class QuadEdgeSubdivision::TriangleCoordinatesVisitor : public TriangleVisitor { private: QuadEdgeSubdivision::TriList *triCoords; CoordinateArraySequenceFactory coordSeqFact; public: TriangleCoordinatesVisitor(QuadEdgeSubdivision::TriList *triCoords): triCoords(triCoords) { } void visit(QuadEdge* triEdges[3]) { geom::CoordinateSequence *coordSeq = coordSeqFact.create(4,0); for (int i = 0; i < 3; i++) { Vertex v = triEdges[i]->orig(); coordSeq->setAt(v.getCoordinate(), i); } coordSeq->setAt(triEdges[0]->orig().getCoordinate(), 3); triCoords->push_back(coordSeq); } }; void QuadEdgeSubdivision::getTriangleCoordinates(QuadEdgeSubdivision::TriList* triList, bool includeFrame) { TriangleCoordinatesVisitor visitor(triList); visitTriangles((TriangleVisitor*)&visitor, includeFrame); } void QuadEdgeSubdivision::visitTriangles(TriangleVisitor *triVisitor, bool includeFrame) { QuadEdgeStack edgeStack; edgeStack.push(startingEdges[0]); QuadEdgeSet visitedEdges; while (!edgeStack.empty()) { QuadEdge *edge = edgeStack.top(); edgeStack.pop(); if (visitedEdges.find(edge) == visitedEdges.end()) { QuadEdge **triEdges = fetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges); if (triEdges != NULL) triVisitor->visit(triEdges); } } } std::auto_ptr QuadEdgeSubdivision::getEdges(const geom::GeometryFactory& geomFact) { std::auto_ptr quadEdges(getPrimaryEdges(false)); std::vector edges(quadEdges->size()); const CoordinateSequenceFactory *coordSeqFact = geomFact.getCoordinateSequenceFactory(); int i = 0; for (QuadEdgeSubdivision::QuadEdgeList::iterator it = quadEdges->begin(); it != quadEdges->end(); ++it) { QuadEdge *qe = *it; CoordinateSequence *coordSeq = coordSeqFact->create((std::vector*)NULL);; coordSeq->add(qe->orig().getCoordinate()); coordSeq->add(qe->dest().getCoordinate()); edges[i++] = static_cast(geomFact.createLineString(*coordSeq)); delete coordSeq; } geom::MultiLineString* result = geomFact.createMultiLineString(edges); for(std::vector::iterator it=edges.begin(); it!=edges.end(); ++it) delete *it; return std::auto_ptr(result); } std::auto_ptr QuadEdgeSubdivision::getTriangles( const GeometryFactory &geomFact) { TriList triPtsList; getTriangleCoordinates(&triPtsList, false); std::vector tris; for(TriList::const_iterator it = triPtsList.begin(); it != triPtsList.end(); ++it) { CoordinateSequence *coordSeq = *it; Polygon *tri = geomFact.createPolygon( geomFact.createLinearRing(coordSeq), NULL); tris.push_back(static_cast(tri)); } GeometryCollection* ret = geomFact.createGeometryCollection(tris); //release memory for(std::vector::iterator it=tris.begin(); it!=tris.end(); ++it) delete *it; tris.clear(); return std::auto_ptr(ret); } } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/TrianglePredicate.cpp0000644000175000017500000000424612206417145023264 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/TrianglePredicate.java r524 * **********************************************************************/ #include #include namespace geos { namespace geom { // geos.geom bool TrianglePredicate::isInCircleNonRobust( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p) { bool isInCircle = (a.x * a.x + a.y * a.y) * triArea(b, c, p) - (b.x * b.x + b.y * b.y) * triArea(a, c, p) + (c.x * c.x + c.y * c.y) * triArea(a, b, p) - (p.x * p.x + p.y * p.y) * triArea(a, b, c) > 0; return isInCircle; } bool TrianglePredicate::isInCircleNormalized( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p) { double adx = a.x - p.x; double ady = a.y - p.y; double bdx = b.x - p.x; double bdy = b.y - p.y; double cdx = c.x - p.x; double cdy = c.y - p.y; double abdet = adx * bdy - bdx * ady; double bcdet = bdx * cdy - cdx * bdy; double cadet = cdx * ady - adx * cdy; double alift = adx * adx + ady * ady; double blift = bdx * bdx + bdy * bdy; double clift = cdx * cdx + cdy * cdy; double disc = alift * bcdet + blift * cadet + clift * abdet; return disc > 0; } double TrianglePredicate::triArea(const Coordinate &a, const Coordinate &b, const Coordinate &c) { return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); } bool TrianglePredicate::isInCircleRobust( const Coordinate &a, const Coordinate &b, const Coordinate &c, const Coordinate &p) { //checkRobustInCircle(a, b, c, p); // return isInCircleNonRobust(a, b, c, p); return isInCircleNormalized(a, b, c, p); } } // namespace geos.geom } // namespace geos geos-3.4.2/src/triangulate/quadedge/TriangleVisitor.cpp0000644000175000017500000000161212206417145023015 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/quadedge/TriangleVisitor.java r524 * **********************************************************************/ #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge TriangleVisitor::~TriangleVisitor() {} } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace goes geos-3.4.2/src/triangulate/quadedge/Vertex.cpp0000644000175000017500000001173112206417145021150 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Excensus LLC. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: triangulate/Vertex.java r524 * **********************************************************************/ #include #include #include #include namespace geos { namespace triangulate { //geos.triangulate namespace quadedge { //geos.triangulate.quadedge using namespace algorithm; using namespace geom; Vertex::Vertex(double _x, double _y) : p(_x, _y) { } Vertex::Vertex(double _x, double _y, double _z): p( _x, _y, _z) { } Vertex::Vertex(const Coordinate &_p) : p(_p) { } Vertex::Vertex() : p() { } int Vertex::classify(const Vertex &p0, const Vertex &p1) { Vertex &p2 = *this; std::auto_ptr a = p1.sub(p0); std::auto_ptr b = p2.sub(p0); double sa = a->crossProduct(*b); int ret; if (sa > 0.0) ret = LEFT; if (sa < 0.0) ret = RIGHT; if ((a->getX() * b->getX() < 0.0) || (a->getY() * b->getY() < 0.0)) ret = BEHIND; if (a->magn() < b->magn()) ret = BEYOND; if (p0.equals(p2)) ret = ORIGIN; if (p1.equals(p2)) ret = DESTINATION; else ret = BETWEEN; return ret; } bool Vertex::isInCircle(const Vertex &a, const Vertex &b, const Vertex &c) const { return TrianglePredicate::isInCircleRobust(a.p, b.p, c.p, this->p); // non-robust - best to not use //return TrianglePredicate.isInCircle(a.p, b.p, c.p, this->p); } bool Vertex::rightOf(const QuadEdge &e) const { return isCCW(e.dest(), e.orig()); } bool Vertex::leftOf(const QuadEdge &e) const { return isCCW(e.orig(), e.dest()); } std::auto_ptr Vertex::bisector(const Vertex &a, const Vertex &b) { // returns the perpendicular bisector of the line segment ab double dx = b.getX() - a.getX(); double dy = b.getY() - a.getY(); HCoordinate l1 = HCoordinate(a.getX() + dx / 2.0, a.getY() + dy / 2.0, 1.0); HCoordinate l2 = HCoordinate(a.getX() - dy + dx / 2.0, a.getY() + dx + dy / 2.0, 1.0); return std::auto_ptr(new HCoordinate(l1, l2)); } double Vertex::circumRadiusRatio(const Vertex &b, const Vertex &c) { std::auto_ptr x(circleCenter(b, c)); double radius = distance(*x, b); double edgeLength = distance(*this, b); double el = distance(b, c); if (el < edgeLength) { edgeLength = el; } el = distance(c, *this); if (el < edgeLength) { edgeLength = el; } return radius / edgeLength; } std::auto_ptr Vertex::midPoint(const Vertex &a) { double xm = (p.x + a.getX()) / 2.0; double ym = (p.y + a.getY()) / 2.0; double zm = (p.z + a.getZ()) / 2.0; return std::auto_ptr(new Vertex(xm, ym, zm)); } std::auto_ptr Vertex::circleCenter(const Vertex &b, const Vertex &c) const { std::auto_ptr a(new Vertex(getX(), getY())); // compute the perpendicular bisector of cord ab std::auto_ptr cab = bisector(*a, b); // compute the perpendicular bisector of cord bc std::auto_ptr cbc = bisector(b, c); // compute the intersection of the bisectors (circle radii) std::auto_ptr hcc(new HCoordinate(*cab, *cbc)); std::auto_ptr cc; try { cc.reset(new Vertex(hcc->getX(), hcc->getY())); } catch (NotRepresentableException nre) { } return cc; } double Vertex::interpolateZValue(const Vertex &v0, const Vertex &v1, const Vertex &v2) const { double x0 = v0.getX(); double y0 = v0.getY(); double a = v1.getX() - x0; double b = v2.getX() - x0; double c = v1.getY() - y0; double d = v2.getY() - y0; double det = a * d - b * c; double dx = this->getX() - x0; double dy = this->getY() - y0; double t = (d * dx - b * dy) / det; double u = (-c * dx + a * dy) / det; double z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ()); return z; } double Vertex::interpolateZ(const Coordinate &p, const Coordinate &v0, const Coordinate &v1, const Coordinate &v2) { double x0 = v0.x; double y0 = v0.y; double a = v1.x - x0; double b = v2.x - x0; double c = v1.y - y0; double d = v2.y - y0; double det = a * d - b * c; double dx = p.x - x0; double dy = p.y - y0; double t = (d * dx - b * dy) / det; double u = (-c * dx + a * dy) / det; double z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z); return z; } double Vertex::interpolateZ(const Coordinate &p, const Coordinate &p0, const Coordinate &p1) { double segLen = p0.distance(p1); double ptLen = p.distance(p0); double dz = p1.z - p0.z; double pz = p0.z + dz * (ptLen / segLen); return pz; } } //namespace geos.triangulate.quadedge } //namespace geos.triangulate } //namespace geos geos-3.4.2/src/util/0000755000175000017500000000000012206417240014037 5ustar frankiefrankiegeos-3.4.2/src/util/Assert.cpp0000644000175000017500000000266712206417146016024 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include using std::string; using namespace geos::geom; namespace geos { namespace util { // geos.util void Assert::isTrue(bool assertion, const string& message) { if (!assertion) { if (message.empty()) { throw AssertionFailedException(); } else { throw AssertionFailedException(message); } } } void Assert::equals(const Coordinate& expectedValue, const Coordinate& actualValue, const string& message) { if (!(actualValue==expectedValue)) { throw AssertionFailedException("Expected " + expectedValue.toString() + " but encountered " + actualValue.toString() + (!message.empty() ? ": " + message : "")); } } void Assert::shouldNeverReachHere(const string& message) { throw AssertionFailedException("Should never reach here" + (!message.empty() ? ": " + message : "")); } } // namespace geos.util } // namespace geos geos-3.4.2/src/util/GeometricShapeFactory.cpp0000644000175000017500000001507112206417146021003 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: util/GeometricShapeFactory.java rev 1.14 (JTS-1.10+) * (2009-03-19) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif using namespace std; using namespace geos::geom; namespace geos { namespace util { // geos.util GeometricShapeFactory::GeometricShapeFactory(const GeometryFactory* factory) : geomFact(factory), precModel(factory->getPrecisionModel()), nPts(100) { } void GeometricShapeFactory::setBase(const Coordinate& base) { dim.setBase(base); } void GeometricShapeFactory::setCentre(const Coordinate& centre) { dim.setCentre(centre); } void GeometricShapeFactory::setNumPoints(int nNPts) { nPts=nNPts; } void GeometricShapeFactory::setSize(double size) { dim.setSize(size); } void GeometricShapeFactory::setWidth(double width) { dim.setWidth(width); } void GeometricShapeFactory::setHeight(double height) { dim.setHeight(height); } Polygon* GeometricShapeFactory::createRectangle() { int i; int ipt = 0; int nSide = nPts / 4; if (nSide < 1) nSide = 1; std::auto_ptr env ( dim.getEnvelope() ); double XsegLen = env->getWidth() / nSide; double YsegLen = env->getHeight() / nSide; vector *vc = new vector(4*nSide+1); //CoordinateSequence* pts=new CoordinateArraySequence(4*nSide+1); for (i = 0; i < nSide; i++) { double x = env->getMinX() + i * XsegLen; double y = env->getMinY(); (*vc)[ipt++] = coord(x, y); } for (i = 0; i < nSide; i++) { double x = env->getMaxX(); double y = env->getMinY() + i * YsegLen; (*vc)[ipt++] = coord(x, y); } for (i = 0; i < nSide; i++) { double x = env->getMaxX() - i * XsegLen; double y = env->getMaxY(); (*vc)[ipt++] = coord(x, y); } for (i = 0; i < nSide; i++) { double x = env->getMinX(); double y = env->getMaxY() - i * YsegLen; (*vc)[ipt++] = coord(x, y); } (*vc)[ipt++] = (*vc)[0]; CoordinateSequence *cs = geomFact->getCoordinateSequenceFactory()->create(vc); LinearRing* ring=geomFact->createLinearRing(cs); Polygon* poly=geomFact->createPolygon(ring, NULL); return poly; } Polygon* GeometricShapeFactory::createCircle() { std::auto_ptr env ( dim.getEnvelope() ); double xRadius = env->getWidth() / 2.0; double yRadius = env->getHeight() / 2.0; double centreX = env->getMinX() + xRadius; double centreY = env->getMinY() + yRadius; env.reset(); vector*pts=new vector(nPts+1); int iPt = 0; for (int i = 0; i < nPts; i++) { double ang = i * (2 * 3.14159265358979 / nPts); double x = xRadius * cos(ang) + centreX; double y = yRadius * sin(ang) + centreY; (*pts)[iPt++] = coord(x, y); } (*pts)[iPt++] = (*pts)[0]; CoordinateSequence *cs=geomFact->getCoordinateSequenceFactory()->create(pts); LinearRing* ring = geomFact->createLinearRing(cs); Polygon* poly=geomFact->createPolygon(ring,NULL); return poly; } LineString* GeometricShapeFactory::createArc(double startAng, double angExtent) { std::auto_ptr env ( dim.getEnvelope() ); double xRadius = env->getWidth() / 2.0; double yRadius = env->getHeight() / 2.0; double centreX = env->getMinX() + xRadius; double centreY = env->getMinY() + yRadius; env.reset(); double angSize = angExtent; if (angSize <= 0.0 || angSize > 2 * M_PI) angSize = 2 * M_PI; double angInc = angSize / ( nPts - 1 ); vector *pts = new vector(nPts); int iPt = 0; for (int i = 0; i < nPts; i++) { double ang = startAng + i * angInc; double x = xRadius * cos(ang) + centreX; double y = yRadius * sin(ang) + centreY; (*pts)[iPt++] = coord(x, y); } CoordinateSequence *cs = geomFact->getCoordinateSequenceFactory()->create(pts); LineString* line = geomFact->createLineString(cs); return line; } Polygon* GeometricShapeFactory::createArcPolygon(double startAng, double angExtent) { std::auto_ptr env ( dim.getEnvelope() ); double xRadius = env->getWidth() / 2.0; double yRadius = env->getHeight() / 2.0; double centreX = env->getMinX() + xRadius; double centreY = env->getMinY() + yRadius; env.reset(); double angSize = angExtent; if (angSize <= 0.0 || angSize > 2 * M_PI) angSize = 2 * M_PI; double angInc = angSize / ( nPts - 1 ); vector *pts = new vector(nPts + 2); int iPt = 0; (*pts)[iPt++] = coord(centreX, centreY); for (int i = 0; i < nPts; i++) { double ang = startAng + i * angInc; double x = xRadius * cos(ang) + centreX; double y = yRadius * sin(ang) + centreY; (*pts)[iPt++] = coord(x, y); } (*pts)[iPt++] = coord(centreX, centreY); CoordinateSequence *cs = geomFact->getCoordinateSequenceFactory()->create(pts); LinearRing* ring = geomFact->createLinearRing(cs); Polygon* geom = geomFact->createPolygon(ring, 0); return geom; } GeometricShapeFactory::Dimensions::Dimensions() : base(Coordinate::getNull()), centre(Coordinate::getNull()) { } void GeometricShapeFactory::Dimensions::setBase(const Coordinate& newBase) { base=newBase; } void GeometricShapeFactory::Dimensions::setCentre(const Coordinate& newCentre) { centre=newCentre; } void GeometricShapeFactory::Dimensions::setSize(double size) { height = size; width = size; } void GeometricShapeFactory::Dimensions::setWidth(double nWidth) { width=nWidth; } void GeometricShapeFactory::Dimensions::setHeight(double nHeight) { height=nHeight; } Envelope* GeometricShapeFactory::Dimensions::getEnvelope() const { if (!base.isNull()) { return new Envelope(base.x, base.x + width, base.y, base.y + height); } if (!centre.isNull()) { return new Envelope(centre.x - width/2, centre.x + width/2,centre.y - height/2, centre.y + height/2); } return new Envelope(0, width, 0, height); } /*protected*/ Coordinate GeometricShapeFactory::coord(double x, double y) const { Coordinate ret(x, y); precModel->makePrecise(&ret); return ret; } } // namespace geos.util } // namespace geos geos-3.4.2/src/util/Interrupt.cpp0000644000175000017500000000277212206417146016554 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2012 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include // for inheritance namespace { /* Could these be portably stored in thread-specific space ? */ bool requested = false; geos::util::Interrupt::Callback *callback = 0; } namespace geos { namespace util { // geos::util class GEOS_DLL InterruptedException: public GEOSException { public: InterruptedException() : GEOSException("InterruptedException", "Interrupted!") {} }; void Interrupt::request() { requested = true; } void Interrupt::cancel() { requested = false; } bool Interrupt::check() { return requested; } Interrupt::Callback* Interrupt::registerCallback(Interrupt::Callback *cb) { Callback* prev = callback; callback = cb; return prev; } void Interrupt::process() { if ( callback ) (*callback)(); if ( requested ) { requested = false; interrupt(); } } void Interrupt::interrupt() { requested = false; throw InterruptedException(); } } // namespace geos::util } // namespace geos geos-3.4.2/src/util/Makefile.am0000644000175000017500000000043512206417146016102 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libutil.la INCLUDES = -I$(top_srcdir)/include libutil_la_SOURCES = \ Assert.cpp \ GeometricShapeFactory.cpp \ Interrupt.cpp \ math.cpp \ Profiler.cpp libutil_la_LIBADD = geos-3.4.2/src/util/Makefile.in0000644000175000017500000005334412206417165016123 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/util DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libutil_la_DEPENDENCIES = am_libutil_la_OBJECTS = Assert.lo GeometricShapeFactory.lo \ Interrupt.lo math.lo Profiler.lo libutil_la_OBJECTS = $(am_libutil_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libutil_la_SOURCES) DIST_SOURCES = $(libutil_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = noinst_LTLIBRARIES = libutil.la INCLUDES = -I$(top_srcdir)/include libutil_la_SOURCES = \ Assert.cpp \ GeometricShapeFactory.cpp \ Interrupt.cpp \ math.cpp \ Profiler.cpp libutil_la_LIBADD = all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libutil.la: $(libutil_la_OBJECTS) $(libutil_la_DEPENDENCIES) $(CXXLINK) $(libutil_la_OBJECTS) $(libutil_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Assert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometricShapeFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Interrupt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Profiler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/src/util/Profiler.cpp0000644000175000017500000000543212206417146016336 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include using namespace std; namespace geos { namespace util { // geos.util Profile::Profile(string newname) { name = newname; totaltime = 0; min = max = avg = 0; } Profile::~Profile() { } #if 0 void Profile::start() { gettimeofday(&starttime, NULL); } void Profile::stop() { gettimeofday(&stoptime, NULL); double elapsed = 1000000*(stoptime.tv_sec-starttime.tv_sec)+ (stoptime.tv_usec-starttime.tv_usec); timings.push_back(elapsed); totaltime += elapsed; if ( timings.size() == 1 ) max = min = elapsed; else { if ( elapsed > max ) max = elapsed; if ( elapsed < min ) min = elapsed; } avg = totaltime / timings.size(); } #endif double Profile::getMax() const { return max; } double Profile::getMin() const { return min; } double Profile::getAvg() const { return avg; } double Profile::getTot() const { return totaltime; } size_t Profile::getNumTimings() const { return timings.size(); } Profiler::Profiler() { } Profiler::~Profiler() { map::const_iterator it; for ( it=profs.begin(); it != profs.end(); ++it ) { delete it->second; } } void Profiler::start(string name) { Profile *prof = get(name); prof->start(); } void Profiler::stop(string name) { map::iterator iter = profs.find(name); if ( iter == profs.end() ) { cerr<second->stop(); } Profile * Profiler::get(string name) { Profile *prof; map::iterator iter = profs.find(name); if ( iter == profs.end() ) { prof = new Profile(name); profs.insert(pair(name, prof)); } else { prof = iter->second; } return prof; } Profiler * Profiler::instance() { static Profiler internal_profiler; return &internal_profiler; } ostream& operator<< (ostream &os, const Profile &prof) { os << " num:"<::const_iterator it; for ( it=prof.profs.begin(); it != prof.profs.end(); ++it ) { os<<*(it->second)< namespace geos { namespace util { // geos.util /* * Symmetric Rounding Algorithm - equivalent to C99 round() */ double sym_round(double val) { double n; double f = std::fabs(std::modf(val, &n)); if (val >= 0) { if (f < 0.5) { return std::floor(val); } else if (f > 0.5) { return std::ceil(val); } else { return (n + 1.0); } } else { if (f < 0.5) { return std::ceil(val); } else if (f > 0.5) { return std::floor(val); } else { return (n - 1.0); } } } /* * Asymmetric Rounding Algorithm - equivalent to Java Math.round() */ double java_math_round(double val) { double n; double f = std::fabs(std::modf(val, &n)); if (val >= 0) { if (f < 0.5) { return std::floor(val); } else if (f > 0.5) { return std::ceil(val); } else { return (n + 1.0); } } else { if (f < 0.5) { return std::ceil(val); } else if (f > 0.5) { return std::floor(val); } else { return n; } } } // java_math_round /* * Implementation of rint() */ double rint_vc(double val) { double n; double f=std::fabs(std::modf(val,&n)); if (val>=0) { if (f<0.5) { return std::floor(val); } else if (f>0.5) { return std::ceil(val); } else { return(std::floor(n/2)==n/2)?n:n+1.0; } } else { if (f<0.5) { return std::ceil(val); } else if (f>0.5) { return std::floor(val); } else { return(std::floor(n/2)==n/2)?n:n-1.0; } } } } // namespace geos.util } // namespace geos geos-3.4.2/swig/0000755000175000017500000000000012206417240013244 5ustar frankiefrankiegeos-3.4.2/swig/Makefile.am0000644000175000017500000000033012206417150015274 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # DIST_SUBDIRS = python ruby SUBDIRS = if ENABLE_PYTHON SUBDIRS += python endif if ENABLE_RUBY SUBDIRS += ruby endif EXTRA_DIST = \ geos.i geos-3.4.2/swig/Makefile.in0000644000175000017500000004523212206417165015325 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @ENABLE_PYTHON_TRUE@am__append_1 = python @ENABLE_RUBY_TRUE@am__append_2 = ruby subdir = swig DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/geos.i.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = geos.i CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DIST_SUBDIRS = python ruby SUBDIRS = $(am__append_1) $(am__append_2) EXTRA_DIST = \ geos.i all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): geos.i: $(top_builddir)/config.status $(srcdir)/geos.i.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/swig/geos.i0000644000175000017500000007555112206417205014371 0ustar frankiefrankie/* ========================================================================= * Copyright 2005-2007 Charlie Savage, cfis@interserv.com * * Interface for a SWIG generated geos module. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ========================================================================= */ %module geos %include "attribute.i" %include "exception.i" %include "std_string.i" %include "std_vector.i" %include "std_except.i" %{ #include "geos_c.h" /* Needed for va_start, etc. */ #include %} /* Constants copied from geos_c.h. Would be nice to reuse the originals but we can't without exposing the whole c api. */ #define GEOS_VERSION_MAJOR 3 #define GEOS_VERSION_MINOR 4 #define GEOS_VERSION_PATCH 2 #define GEOS_VERSION "3.4.2" #define GEOS_JTS_PORT "1.12.0" #define GEOS_CAPI_VERSION_MAJOR 1 #define GEOS_CAPI_VERSION_MINOR 8 #define GEOS_CAPI_VERSION_PATCH 2 #define GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_VERSION_MAJOR #define GEOS_CAPI_LAST_INTERFACE (GEOS_CAPI_VERSION_MAJOR+GEOS_CAPI_VERSION_MINOR) #define GEOS_CAPI_VERSION "3.4.2-CAPI-1.8.2" /* Supported geometry types */ enum GEOSGeomTypes { GEOS_POINT, GEOS_LINESTRING, GEOS_LINEARRING, GEOS_POLYGON, GEOS_MULTIPOINT, GEOS_MULTILINESTRING, GEOS_MULTIPOLYGON, GEOS_GEOMETRYCOLLECTION }; enum GEOSByteOrders { GEOS_WKB_XDR = 0, /* Big Endian */ GEOS_WKB_NDR = 1 /* Little Endian */ }; /* From OffsetCurveSetBuilder.h for buffer operations. */ %{ static const int DEFAULT_QUADRANT_SEGMENTS=8; %} /* Message and Error Handling */ %{ /* This is not thread safe ! */ static const int MESSAGE_SIZE = 1000; static char message[MESSAGE_SIZE]; void noticeHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } void errorHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } %} /* First initialize geos */ %init %{ initGEOS(noticeHandler, errorHandler); %} /* Module level methods */ %rename("version") GEOSversion; const char *GEOSversion(); /* Exception handler */ %exception { try { $action } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } /* ============== Language Specific Files ============ */ /* Import language specific SWIG files. This allows each language to define its own renames as well as any special functionality such as language specific iterators for collections. Note that %include allows the included files to generate interface wrapper code while %import does not. Thus use %include since this is an important feature (for example, Ruby needs it to #undef the select macro) */ #ifdef SWIGPYTHON %include ../swig/python/python.i #endif #ifdef SWIGRUBY %include ../swig/ruby/ruby.i #endif // === CoordinateSequence === %{ typedef void GeosCoordinateSequence; void checkCoordSeqBounds(const GEOSCoordSeq coordSeq, const size_t index) { unsigned int size = 0; GEOSCoordSeq_getSize(coordSeq, &size); if (index < 0 || index >= size) throw std::runtime_error("Index out of bounds"); } %} %newobject GeosCoordinateSequence::clone; %rename (CoordinateSequence) GeosCoordinateSequence; class GeosCoordinateSequence { public: %extend { GeosCoordinateSequence(size_t size, size_t dims) { return (GeosCoordinateSequence*) GEOSCoordSeq_create(size, dims); } ~GeosCoordinateSequence() { GEOSCoordSeq coords = (GEOSCoordSeq) self; return GEOSCoordSeq_destroy(coords); } GeosCoordinateSequence *clone() { GEOSCoordSeq coords = (GEOSCoordSeq) self; return (GeosCoordinateSequence*) GEOSCoordSeq_clone(coords); } int setX(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setX(coords, idx, val); } int setY(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setY(coords, idx, val); } int setZ(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setZ(coords, idx, val); } int setOrdinate(size_t idx, size_t dim, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setOrdinate(coords, idx, dim, val); } double getX(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getX(coords, idx, &result); return result; } double getY(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getY(coords, idx, &result); return result; } double getZ(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getZ(coords, idx, &result); return result; } double getOrdinate(size_t idx, size_t dim) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getOrdinate(coords, idx, dim, &result); return result; } unsigned int getSize() { unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getSize(coords, &result); return result; } unsigned int getDimensions() { unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getDimensions(coords, &result); return result; } } }; /* ======== Fake Classes to Create Geom Hierarchy ====== */ %rename(Geometry) GeosGeometry; %rename(Point) GeosPoint; %rename(LineString) GeosLineString; %rename(LinearRing) GeosLinearRing; %rename(Polygon) GeosPolygon; %rename(GeometryCollection) GeosGeometryCollection; %rename(MultiPoint) GeosMultiPoint; %rename(MultiLineString) GeosMultiLineString; %rename(MultiLinearRing) GeosMultiLinearRing; %rename(MultiPolygon) GeosMultiPolygon; %rename(WktReader) GeosWktReader; %rename(WktWriter) GeosWktWriter; %rename(WkbReader) GeosWkbReader; %rename(WkbWriter) GeosWkbWriter; %rename("union") GeosGeometry::geomUnion; %{ typedef void GeosGeometry; typedef void GeosPoint; typedef void GeosLineString; typedef void GeosLinearRing; typedef void GeosPolygon; typedef void GeosGeometryCollection; typedef void GeosMultiPoint; typedef void GeosMultiLineString; typedef void GeosMultiLinearRing; typedef void GeosMultiPolygon; typedef void GeosWktReader; typedef void GeosWktWriter; typedef void GeosWkbReader; typedef void GeosWkbWriter; %} %newobject GeosGeometry::intersection; %newobject GeosGeometry::buffer; %newobject GeosGeometry::convexHull; %newobject GeosGeometry::difference; %newobject GeosGeometry::symDifference; %newobject GeosGeometry::boundary; %newobject GeosGeometry::geomUnion; %newobject GeosGeometry::pointOnSurface; %newobject GeosGeometry::getCentroid; %newobject GeosGeometry::relate; %newobject GeosGeometry::lineMerge; %newobject GeosGeometry::simplify; %newobject GeosGeometry::topologyPreserveSimplify; %typemap(out) GeosGeometry* { /* %typemap(out) GeosGeometry */ if ($1 == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = $1; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosPoint*), 0 | $owner); break; case GEOS_LINESTRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosLineString*), 0 | $owner); break; case GEOS_LINEARRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosLinearRing*), 0 | $owner); break; case GEOS_POLYGON: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosPolygon*), 0 | $owner); break; case GEOS_MULTIPOINT: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiPoint*), 0 | $owner); break; case GEOS_MULTILINESTRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiLineString*), 0 | $owner); break; case GEOS_MULTIPOLYGON: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiPolygon*), 0 | $owner); break; case GEOS_GEOMETRYCOLLECTION: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosGeometryCollection*), 0 | $owner); break; } } /* Setup a default typemap for buffer. */ %typemap(default) int quadsegs { $1 = DEFAULT_QUADRANT_SEGMENTS; } %{ bool checkBoolResult(char result) { int intResult = (int) result; if (intResult == 1) return true; else if (intResult == 0) return false; else throw std::runtime_error(message); } %} %newobject GeosGeometry::clone; class GeosGeometry { private: GeosGeometry(); public: %extend { ~GeosGeometry() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } GeosGeometry *clone() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_clone(geom); } char *geomType() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeomType(geom); } int typeId() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeomTypeId(geom); } void normalize() { GEOSGeom geom = (GEOSGeom) self; int result = GEOSNormalize(geom); if (result == -1) throw std::runtime_error(message); } int getSRID() { GEOSGeom geom = (GEOSGeom) self; return GEOSGetSRID(geom); } void setSRID(int SRID) { GEOSGeom geom = (GEOSGeom) self; return GEOSSetSRID(geom, SRID); } size_t getDimensions() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_getDimensions(geom); } size_t getNumGeometries() { GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumGeometries(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } /* Topology Operations */ GeosGeometry *intersection(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSIntersection(geom, otherGeom); } GeosGeometry *buffer(double width, int quadsegs) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBuffer(geom, width, quadsegs); } GeosGeometry *convexHull() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSConvexHull(geom); } GeosGeometry *difference(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSDifference(geom, otherGeom); } GeosGeometry *symDifference(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSSymDifference(geom, otherGeom); } GeosGeometry *boundary() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBoundary(geom); } GeosGeometry *geomUnion(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSUnion(geom, otherGeom); } GeosGeometry *pointOnSurface() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSPointOnSurface(geom); } GeosGeometry *getCentroid() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSGetCentroid(geom); } GeosGeometry *getEnvelope() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSEnvelope(geom); } char *relate(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return GEOSRelate(geom, otherGeom); } /* TODO - expose GEOSPolygonize*/ GeosGeometry *lineMerge() { GEOSGeom geom = (GEOSGeom) self; return GEOSLineMerge(geom); } GeosGeometry *simplify(double tolerance) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSSimplify(geom, tolerance); } GeosGeometry *topologyPreserveSimplify(double tolerance) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSTopologyPreserveSimplify(geom, tolerance); } /* Binary predicates - return 2 on exception, 1 on true, 0 on false */ bool relatePattern(const GeosGeometry* other, const char *pat) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSRelatePattern(geom, otherGeom, pat)); } bool disjoint(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSDisjoint(geom, otherGeom)); } bool touches(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSTouches(geom, otherGeom)); } bool intersects(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSIntersects(geom, otherGeom)); } bool crosses(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSCrosses(geom, otherGeom)); } bool within(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSWithin(geom, otherGeom)); } bool contains(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSContains(geom, otherGeom)); } bool overlaps(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSOverlaps(geom, otherGeom)); } bool equals(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEquals(geom, otherGeom)); } bool equalsExact(const GeosGeometry* other, double tolerance) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEqualsExact(geom, otherGeom, tolerance)); } /* Unary predicate - return 2 on exception, 1 on true, 0 on false */ bool isEmpty() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisEmpty(geom)); } bool isValid() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisValid(geom)); } bool isSimple() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisSimple(geom)); } bool isRing() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisRing(geom)); } bool hasZ() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSHasZ(geom)); } /* Miscellaneous Functions. Return 0 on exception, 1 otherwise */ double area() { GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSArea(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } double length() { GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSLength(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } double distance(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; double result; int code = GEOSDistance(geom, otherGeom, &result); if (code == 0) throw std::runtime_error(message); return result; } } }; class GeosPoint: public GeosGeometry { private: GeosPoint(); public: %extend { ~GeosPoint() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosLineString: public GeosGeometry { public: %extend { ~GeosLineString() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosLinearRing: public GeosGeometry { public: %extend { ~GeosLinearRing() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosPolygon: public GeosGeometry { public: %extend { ~GeosPolygon() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosGeometry* getExteriorRing() { GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetExteriorRing(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } size_t getNumInteriorRings() { GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumInteriorRings(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } const GeosGeometry* getInteriorRingN(size_t n) { GEOSGeom geom = (GEOSGeom) self; size_t size = GEOSGetNumInteriorRings(geom); if (n < 0 || n >= size) throw std::runtime_error("Index out of bounds"); const GEOSGeom result = (const GEOSGeom) GEOSGetInteriorRingN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } } }; class GeosGeometryCollection: public GeosGeometry { public: %extend { ~GeosGeometryCollection() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosGeometry* getGeometryN(size_t n) { GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetGeometryN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } } }; class GeosMultiPoint: public GeosGeometryCollection { public: %extend { ~GeosMultiPoint() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiLineString: public GeosGeometryCollection { public: %extend { ~GeosMultiLineString() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiLinearRing: public GeosGeometryCollection { public: %extend { ~GeosMultiLinearRing() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiPolygon: public GeosGeometryCollection { public: %extend { ~GeosMultiPolygon() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; // ==== Geometry Constructors =========== %newobject createPoint; %newobject createLineString; %newobject createLinearRing; %newobject createPolygon; %apply SWIGTYPE *DISOWN {GeosCoordinateSequence *s}; %apply SWIGTYPE *DISOWN {GeosLinearRing *shell}; %typemap(default) (GeosLinearRing **holes, size_t nholes) { $1 = NULL; $2 = 0; } %inline %{ GeosGeometry *createPoint(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createPoint(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLineString(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLineString(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLinearRing(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLinearRing(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createPolygon(GeosLinearRing *shell, GeosLinearRing **holes, size_t nholes) { GEOSGeom shellGeom = (GEOSGeom) shell; GEOSGeom* holeGeoms = (GEOSGeom*) holes; GEOSGeom geom = GEOSGeom_createPolygon(shellGeom, holeGeoms, nholes); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } %} /* * Second argument is an array of GEOSGeom objects. * The caller remains owner of the array, but pointed-to * objects become ownership of the returned GEOSGeom. extern GEOSGeom GEOS_DLL GEOSGeom_createCollection(int type, GEOSGeom *geoms, size_t ngeoms); */ %clear GeosCoordinateSequence *s; // === Prepared Geometry === %{ typedef void GeosPreparedGeometry; %} %rename (Prepared) GeosPreparedGeometry; class GeosPreparedGeometry { public: %extend { GeosPreparedGeometry(const GeosGeometry *source) { const GEOSPreparedGeometry *prep = GEOSPrepare((const GEOSGeometry *)source); if(prep == NULL) throw std::runtime_error(message); return (GeosPreparedGeometry *) prep; } ~GeosPreparedGeometry() { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; return GEOSPreparedGeom_destroy(prep); } bool contains (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContains(prep, otherGeom)); } bool containsProperly(const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContainsProperly(prep, otherGeom)); } bool covers (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedCovers(prep, otherGeom)); } bool intersects (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedIntersects(prep, otherGeom)); } } }; // === STRtree === %{ typedef void GeosSTRtree; /* GeosIndexItem typedef'd here so it can be %typemap(typecheck)'d as a native object by each language specially */ typedef void *GeosIndexItem; typedef GEOSQueryCallback GeosQueryCallback; %} %rename (STRtree) GeosSTRtree; class GeosSTRtree { public: %extend { %typemap(default) int nodeCapacity { $1 = 10; }; GeosSTRtree(int nodeCapacity) { GEOSSTRtree *tree = GEOSSTRtree_create(nodeCapacity); if(tree == NULL) throw std::runtime_error(message); return (GeosSTRtree *) tree; } ~GeosSTRtree() { GEOSSTRtree *tree = (GEOSSTRtree *) self; return GEOSSTRtree_destroy(tree); } void insert (const GeosGeometry* g, GeosIndexItem item) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_insert(tree, geom, item); } void remove (const GeosGeometry* g, GeosIndexItem item) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_remove(tree, geom, item); } void query (const GeosGeometry* g, GeosQueryCallback callback, GeosIndexItem accumulator) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_query(tree, geom, callback, accumulator); } void iterate (GeosQueryCallback callback, GeosIndexItem accumulator) { GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, callback, accumulator); } } }; // === Input/Output === /* This typemap allows the scripting language to pass in buffers to the geometry write methods. */ %typemap(in) (const unsigned char* wkb, size_t size) (int alloc = 0) { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc = 0) */ if (SWIG_AsCharPtrAndSize($input, (char**)&$1, &$2, &alloc) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ $2--; } /* These three type maps are for geomToWKB and geomToHEX. We need to ignore the size input argument, then create a new string in the scripting language of the correct size, and then free the provided string. */ /* set the size parameter to a temporary variable. */ %typemap(in, numinputs=0) size_t *size (size_t temp = 0) { /* %typemap(in, numinputs=0) size_t *size (size_t temp = 0) */ $1 = &temp; } /* Disable SWIG's normally generated code so we can replace it with the argout typemap below. */ %typemap(out) unsigned char* { /* %typemap(out) unsigned char* */ } /* Create a new target string of the correct size. */ %typemap(argout) size_t *size { /* %typemap(argout) size_t *size */ $result = SWIG_FromCharPtrAndSize((const char*)result, *$1); } /* Free the c-string returned by the function. */ %typemap(freearg) size_t *size { /* %typemap(freearg) size_t *size */ std::free(result); } %newobject GeosWktReader::read; class GeosWktReader { public: %extend { GeosWktReader() { return GEOSWKTReader_create(); } ~GeosWktReader() { GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSWKTReader_destroy(reader); } GeosGeometry* read(const char *wkt) { if(wkt == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSGeometry *geom = GEOSWKTReader_read(reader, wkt); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } } }; class GeosWktWriter { public: %extend { GeosWktWriter() { return GEOSWKTWriter_create(); } ~GeosWktWriter() { GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSWKTWriter_destroy(writer); } char* write(const GeosGeometry* g) { GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKTWriter_write(writer, geom); } } }; %newobject GeosWkbReader::read; %newobject GeosWkbReader::readHEX; class GeosWkbReader { public: %extend { GeosWkbReader() { return GEOSWKBReader_create(); } ~GeosWkbReader() { GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSWKBReader_destroy(reader); } GeosGeometry* read(const unsigned char *wkb, size_t size) { if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_read(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry* readHEX(const unsigned char *wkb, size_t size) { if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_readHEX(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } } }; class GeosWkbWriter { public: %extend { GeosWkbWriter() { return GEOSWKBWriter_create(); } ~GeosWkbWriter() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_destroy(writer); } int getOutputDimension() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getOutputDimension(writer); } void setOutputDimension(int newDimension) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_setOutputDimension(writer, newDimension); } int getByteOrder() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getByteOrder(writer); } void setByteOrder(int newByteOrder) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setByteOrder(writer, newByteOrder); } bool getIncludeSRID() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getIncludeSRID(writer); } void setIncludeSRID(bool newIncludeSRID) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setIncludeSRID(writer, newIncludeSRID); } unsigned char* write(const GeosGeometry* g, size_t *size) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_write(writer, geom, size); } unsigned char* writeHEX(const GeosGeometry* g, size_t *size) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_writeHEX(writer, geom, size); } } }; geos-3.4.2/swig/geos.i.in0000644000175000017500000007576512206417150015004 0ustar frankiefrankie/* ========================================================================= * Copyright 2005-2007 Charlie Savage, cfis@interserv.com * * Interface for a SWIG generated geos module. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ========================================================================= */ %module geos %include "attribute.i" %include "exception.i" %include "std_string.i" %include "std_vector.i" %include "std_except.i" %{ #include "geos_c.h" /* Needed for va_start, etc. */ #include %} /* Constants copied from geos_c.h. Would be nice to reuse the originals but we can't without exposing the whole c api. */ #define GEOS_VERSION_MAJOR @VERSION_MAJOR@ #define GEOS_VERSION_MINOR @VERSION_MINOR@ #define GEOS_VERSION_PATCH @VERSION_PATCH@ #define GEOS_VERSION "@VERSION@" #define GEOS_JTS_PORT "@JTS_PORT@" #define GEOS_CAPI_VERSION_MAJOR @CAPI_VERSION_MAJOR@ #define GEOS_CAPI_VERSION_MINOR @CAPI_VERSION_MINOR@ #define GEOS_CAPI_VERSION_PATCH @CAPI_VERSION_PATCH@ #define GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_VERSION_MAJOR #define GEOS_CAPI_LAST_INTERFACE (GEOS_CAPI_VERSION_MAJOR+GEOS_CAPI_VERSION_MINOR) #define GEOS_CAPI_VERSION "@VERSION@-CAPI-@CAPI_VERSION@" /* Supported geometry types */ enum GEOSGeomTypes { GEOS_POINT, GEOS_LINESTRING, GEOS_LINEARRING, GEOS_POLYGON, GEOS_MULTIPOINT, GEOS_MULTILINESTRING, GEOS_MULTIPOLYGON, GEOS_GEOMETRYCOLLECTION }; enum GEOSByteOrders { GEOS_WKB_XDR = 0, /* Big Endian */ GEOS_WKB_NDR = 1 /* Little Endian */ }; /* From OffsetCurveSetBuilder.h for buffer operations. */ %{ static const int DEFAULT_QUADRANT_SEGMENTS=8; %} /* Message and Error Handling */ %{ /* This is not thread safe ! */ static const int MESSAGE_SIZE = 1000; static char message[MESSAGE_SIZE]; void noticeHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } void errorHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } %} /* First initialize geos */ %init %{ initGEOS(noticeHandler, errorHandler); %} /* Module level methods */ %rename("version") GEOSversion; const char *GEOSversion(); /* Exception handler */ %exception { try { $action } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } /* ============== Language Specific Files ============ */ /* Import language specific SWIG files. This allows each language to define its own renames as well as any special functionality such as language specific iterators for collections. Note that %include allows the included files to generate interface wrapper code while %import does not. Thus use %include since this is an important feature (for example, Ruby needs it to #undef the select macro) */ #ifdef SWIGPYTHON %include @top_srcdir@/swig/python/python.i #endif #ifdef SWIGRUBY %include @top_srcdir@/swig/ruby/ruby.i #endif // === CoordinateSequence === %{ typedef void GeosCoordinateSequence; void checkCoordSeqBounds(const GEOSCoordSeq coordSeq, const size_t index) { unsigned int size = 0; GEOSCoordSeq_getSize(coordSeq, &size); if (index < 0 || index >= size) throw std::runtime_error("Index out of bounds"); } %} %newobject GeosCoordinateSequence::clone; %rename (CoordinateSequence) GeosCoordinateSequence; class GeosCoordinateSequence { public: %extend { GeosCoordinateSequence(size_t size, size_t dims) { return (GeosCoordinateSequence*) GEOSCoordSeq_create(size, dims); } ~GeosCoordinateSequence() { GEOSCoordSeq coords = (GEOSCoordSeq) self; return GEOSCoordSeq_destroy(coords); } GeosCoordinateSequence *clone() { GEOSCoordSeq coords = (GEOSCoordSeq) self; return (GeosCoordinateSequence*) GEOSCoordSeq_clone(coords); } int setX(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setX(coords, idx, val); } int setY(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setY(coords, idx, val); } int setZ(size_t idx, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setZ(coords, idx, val); } int setOrdinate(size_t idx, size_t dim, double val) { GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setOrdinate(coords, idx, dim, val); } double getX(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getX(coords, idx, &result); return result; } double getY(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getY(coords, idx, &result); return result; } double getZ(size_t idx) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getZ(coords, idx, &result); return result; } double getOrdinate(size_t idx, size_t dim) { double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getOrdinate(coords, idx, dim, &result); return result; } unsigned int getSize() { unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getSize(coords, &result); return result; } unsigned int getDimensions() { unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getDimensions(coords, &result); return result; } } }; /* ======== Fake Classes to Create Geom Hierarchy ====== */ %rename(Geometry) GeosGeometry; %rename(Point) GeosPoint; %rename(LineString) GeosLineString; %rename(LinearRing) GeosLinearRing; %rename(Polygon) GeosPolygon; %rename(GeometryCollection) GeosGeometryCollection; %rename(MultiPoint) GeosMultiPoint; %rename(MultiLineString) GeosMultiLineString; %rename(MultiLinearRing) GeosMultiLinearRing; %rename(MultiPolygon) GeosMultiPolygon; %rename(WktReader) GeosWktReader; %rename(WktWriter) GeosWktWriter; %rename(WkbReader) GeosWkbReader; %rename(WkbWriter) GeosWkbWriter; %rename("union") GeosGeometry::geomUnion; %{ typedef void GeosGeometry; typedef void GeosPoint; typedef void GeosLineString; typedef void GeosLinearRing; typedef void GeosPolygon; typedef void GeosGeometryCollection; typedef void GeosMultiPoint; typedef void GeosMultiLineString; typedef void GeosMultiLinearRing; typedef void GeosMultiPolygon; typedef void GeosWktReader; typedef void GeosWktWriter; typedef void GeosWkbReader; typedef void GeosWkbWriter; %} %newobject GeosGeometry::intersection; %newobject GeosGeometry::buffer; %newobject GeosGeometry::convexHull; %newobject GeosGeometry::difference; %newobject GeosGeometry::symDifference; %newobject GeosGeometry::boundary; %newobject GeosGeometry::geomUnion; %newobject GeosGeometry::pointOnSurface; %newobject GeosGeometry::getCentroid; %newobject GeosGeometry::relate; %newobject GeosGeometry::lineMerge; %newobject GeosGeometry::simplify; %newobject GeosGeometry::topologyPreserveSimplify; %typemap(out) GeosGeometry* { /* %typemap(out) GeosGeometry */ if ($1 == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = $1; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosPoint*), 0 | $owner); break; case GEOS_LINESTRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosLineString*), 0 | $owner); break; case GEOS_LINEARRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosLinearRing*), 0 | $owner); break; case GEOS_POLYGON: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosPolygon*), 0 | $owner); break; case GEOS_MULTIPOINT: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiPoint*), 0 | $owner); break; case GEOS_MULTILINESTRING: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiLineString*), 0 | $owner); break; case GEOS_MULTIPOLYGON: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosMultiPolygon*), 0 | $owner); break; case GEOS_GEOMETRYCOLLECTION: $result = SWIG_NewPointerObj(SWIG_as_voidptr(result), $descriptor(GeosGeometryCollection*), 0 | $owner); break; } } /* Setup a default typemap for buffer. */ %typemap(default) int quadsegs { $1 = DEFAULT_QUADRANT_SEGMENTS; } %{ bool checkBoolResult(char result) { int intResult = (int) result; if (intResult == 1) return true; else if (intResult == 0) return false; else throw std::runtime_error(message); } %} %newobject GeosGeometry::clone; class GeosGeometry { private: GeosGeometry(); public: %extend { ~GeosGeometry() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } GeosGeometry *clone() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_clone(geom); } char *geomType() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeomType(geom); } int typeId() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeomTypeId(geom); } void normalize() { GEOSGeom geom = (GEOSGeom) self; int result = GEOSNormalize(geom); if (result == -1) throw std::runtime_error(message); } int getSRID() { GEOSGeom geom = (GEOSGeom) self; return GEOSGetSRID(geom); } void setSRID(int SRID) { GEOSGeom geom = (GEOSGeom) self; return GEOSSetSRID(geom, SRID); } size_t getDimensions() { GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_getDimensions(geom); } size_t getNumGeometries() { GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumGeometries(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } /* Topology Operations */ GeosGeometry *intersection(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSIntersection(geom, otherGeom); } GeosGeometry *buffer(double width, int quadsegs) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBuffer(geom, width, quadsegs); } GeosGeometry *convexHull() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSConvexHull(geom); } GeosGeometry *difference(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSDifference(geom, otherGeom); } GeosGeometry *symDifference(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSSymDifference(geom, otherGeom); } GeosGeometry *boundary() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBoundary(geom); } GeosGeometry *geomUnion(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSUnion(geom, otherGeom); } GeosGeometry *pointOnSurface() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSPointOnSurface(geom); } GeosGeometry *getCentroid() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSGetCentroid(geom); } GeosGeometry *getEnvelope() { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSEnvelope(geom); } char *relate(GeosGeometry *other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return GEOSRelate(geom, otherGeom); } /* TODO - expose GEOSPolygonize*/ GeosGeometry *lineMerge() { GEOSGeom geom = (GEOSGeom) self; return GEOSLineMerge(geom); } GeosGeometry *simplify(double tolerance) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSSimplify(geom, tolerance); } GeosGeometry *topologyPreserveSimplify(double tolerance) { GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSTopologyPreserveSimplify(geom, tolerance); } /* Binary predicates - return 2 on exception, 1 on true, 0 on false */ bool relatePattern(const GeosGeometry* other, const char *pat) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSRelatePattern(geom, otherGeom, pat)); } bool disjoint(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSDisjoint(geom, otherGeom)); } bool touches(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSTouches(geom, otherGeom)); } bool intersects(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSIntersects(geom, otherGeom)); } bool crosses(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSCrosses(geom, otherGeom)); } bool within(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSWithin(geom, otherGeom)); } bool contains(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSContains(geom, otherGeom)); } bool overlaps(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSOverlaps(geom, otherGeom)); } bool equals(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEquals(geom, otherGeom)); } bool equalsExact(const GeosGeometry* other, double tolerance) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEqualsExact(geom, otherGeom, tolerance)); } /* Unary predicate - return 2 on exception, 1 on true, 0 on false */ bool isEmpty() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisEmpty(geom)); } bool isValid() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisValid(geom)); } bool isSimple() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisSimple(geom)); } bool isRing() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisRing(geom)); } bool hasZ() { GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSHasZ(geom)); } /* Miscellaneous Functions. Return 0 on exception, 1 otherwise */ double area() { GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSArea(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } double length() { GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSLength(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } double distance(const GeosGeometry* other) { GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; double result; int code = GEOSDistance(geom, otherGeom, &result); if (code == 0) throw std::runtime_error(message); return result; } } }; class GeosPoint: public GeosGeometry { private: GeosPoint(); public: %extend { ~GeosPoint() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosLineString: public GeosGeometry { public: %extend { ~GeosLineString() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosLinearRing: public GeosGeometry { public: %extend { ~GeosLinearRing() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosCoordinateSequence* getCoordSeq() { GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } } }; class GeosPolygon: public GeosGeometry { public: %extend { ~GeosPolygon() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosGeometry* getExteriorRing() { GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetExteriorRing(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } size_t getNumInteriorRings() { GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumInteriorRings(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } const GeosGeometry* getInteriorRingN(size_t n) { GEOSGeom geom = (GEOSGeom) self; size_t size = GEOSGetNumInteriorRings(geom); if (n < 0 || n >= size) throw std::runtime_error("Index out of bounds"); const GEOSGeom result = (const GEOSGeom) GEOSGetInteriorRingN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } } }; class GeosGeometryCollection: public GeosGeometry { public: %extend { ~GeosGeometryCollection() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } const GeosGeometry* getGeometryN(size_t n) { GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetGeometryN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } } }; class GeosMultiPoint: public GeosGeometryCollection { public: %extend { ~GeosMultiPoint() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiLineString: public GeosGeometryCollection { public: %extend { ~GeosMultiLineString() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiLinearRing: public GeosGeometryCollection { public: %extend { ~GeosMultiLinearRing() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; class GeosMultiPolygon: public GeosGeometryCollection { public: %extend { ~GeosMultiPolygon() { GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } } }; // ==== Geometry Constructors =========== %newobject createPoint; %newobject createLineString; %newobject createLinearRing; %newobject createPolygon; %apply SWIGTYPE *DISOWN {GeosCoordinateSequence *s}; %apply SWIGTYPE *DISOWN {GeosLinearRing *shell}; %typemap(default) (GeosLinearRing **holes, size_t nholes) { $1 = NULL; $2 = 0; } %inline %{ GeosGeometry *createPoint(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createPoint(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLineString(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLineString(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLinearRing(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLinearRing(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createPolygon(GeosLinearRing *shell, GeosLinearRing **holes, size_t nholes) { GEOSGeom shellGeom = (GEOSGeom) shell; GEOSGeom* holeGeoms = (GEOSGeom*) holes; GEOSGeom geom = GEOSGeom_createPolygon(shellGeom, holeGeoms, nholes); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } %} /* * Second argument is an array of GEOSGeom objects. * The caller remains owner of the array, but pointed-to * objects become ownership of the returned GEOSGeom. extern GEOSGeom GEOS_DLL GEOSGeom_createCollection(int type, GEOSGeom *geoms, size_t ngeoms); */ %clear GeosCoordinateSequence *s; // === Prepared Geometry === %{ typedef void GeosPreparedGeometry; %} %rename (Prepared) GeosPreparedGeometry; class GeosPreparedGeometry { public: %extend { GeosPreparedGeometry(const GeosGeometry *source) { const GEOSPreparedGeometry *prep = GEOSPrepare((const GEOSGeometry *)source); if(prep == NULL) throw std::runtime_error(message); return (GeosPreparedGeometry *) prep; } ~GeosPreparedGeometry() { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; return GEOSPreparedGeom_destroy(prep); } bool contains (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContains(prep, otherGeom)); } bool containsProperly(const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContainsProperly(prep, otherGeom)); } bool covers (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedCovers(prep, otherGeom)); } bool intersects (const GeosGeometry* other) { GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedIntersects(prep, otherGeom)); } } }; // === STRtree === %{ typedef void GeosSTRtree; /* GeosIndexItem typedef'd here so it can be %typemap(typecheck)'d as a native object by each language specially */ typedef void *GeosIndexItem; typedef GEOSQueryCallback GeosQueryCallback; %} %rename (STRtree) GeosSTRtree; class GeosSTRtree { public: %extend { %typemap(default) int nodeCapacity { $1 = 10; }; GeosSTRtree(int nodeCapacity) { GEOSSTRtree *tree = GEOSSTRtree_create(nodeCapacity); if(tree == NULL) throw std::runtime_error(message); return (GeosSTRtree *) tree; } ~GeosSTRtree() { GEOSSTRtree *tree = (GEOSSTRtree *) self; return GEOSSTRtree_destroy(tree); } void insert (const GeosGeometry* g, GeosIndexItem item) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_insert(tree, geom, item); } void remove (const GeosGeometry* g, GeosIndexItem item) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_remove(tree, geom, item); } void query (const GeosGeometry* g, GeosQueryCallback callback, GeosIndexItem accumulator) { GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_query(tree, geom, callback, accumulator); } void iterate (GeosQueryCallback callback, GeosIndexItem accumulator) { GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, callback, accumulator); } } }; // === Input/Output === /* This typemap allows the scripting language to pass in buffers to the geometry write methods. */ %typemap(in) (const unsigned char* wkb, size_t size) (int alloc = 0) { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc = 0) */ if (SWIG_AsCharPtrAndSize($input, (char**)&$1, &$2, &alloc) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ $2--; } /* These three type maps are for geomToWKB and geomToHEX. We need to ignore the size input argument, then create a new string in the scripting language of the correct size, and then free the provided string. */ /* set the size parameter to a temporary variable. */ %typemap(in, numinputs=0) size_t *size (size_t temp = 0) { /* %typemap(in, numinputs=0) size_t *size (size_t temp = 0) */ $1 = &temp; } /* Disable SWIG's normally generated code so we can replace it with the argout typemap below. */ %typemap(out) unsigned char* { /* %typemap(out) unsigned char* */ } /* Create a new target string of the correct size. */ %typemap(argout) size_t *size { /* %typemap(argout) size_t *size */ $result = SWIG_FromCharPtrAndSize((const char*)result, *$1); } /* Free the c-string returned by the function. */ %typemap(freearg) size_t *size { /* %typemap(freearg) size_t *size */ std::free(result); } %newobject GeosWktReader::read; class GeosWktReader { public: %extend { GeosWktReader() { return GEOSWKTReader_create(); } ~GeosWktReader() { GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSWKTReader_destroy(reader); } GeosGeometry* read(const char *wkt) { if(wkt == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSGeometry *geom = GEOSWKTReader_read(reader, wkt); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } } }; class GeosWktWriter { public: %extend { GeosWktWriter() { return GEOSWKTWriter_create(); } ~GeosWktWriter() { GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSWKTWriter_destroy(writer); } char* write(const GeosGeometry* g) { GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKTWriter_write(writer, geom); } } }; %newobject GeosWkbReader::read; %newobject GeosWkbReader::readHEX; class GeosWkbReader { public: %extend { GeosWkbReader() { return GEOSWKBReader_create(); } ~GeosWkbReader() { GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSWKBReader_destroy(reader); } GeosGeometry* read(const unsigned char *wkb, size_t size) { if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_read(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry* readHEX(const unsigned char *wkb, size_t size) { if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_readHEX(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } } }; class GeosWkbWriter { public: %extend { GeosWkbWriter() { return GEOSWKBWriter_create(); } ~GeosWkbWriter() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_destroy(writer); } int getOutputDimension() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getOutputDimension(writer); } void setOutputDimension(int newDimension) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_setOutputDimension(writer, newDimension); } int getByteOrder() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getByteOrder(writer); } void setByteOrder(int newByteOrder) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setByteOrder(writer, newByteOrder); } bool getIncludeSRID() { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getIncludeSRID(writer); } void setIncludeSRID(bool newIncludeSRID) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setIncludeSRID(writer, newIncludeSRID); } unsigned char* write(const GeosGeometry* g, size_t *size) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_write(writer, geom, size); } unsigned char* writeHEX(const GeosGeometry* g, size_t *size) { GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_writeHEX(writer, geom, size); } } }; geos-3.4.2/swig/python/0000755000175000017500000000000012206417240014565 5ustar frankiefrankiegeos-3.4.2/swig/python/Makefile.am0000644000175000017500000000175012206417150016624 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ tests EXTRA_DIST = \ python.i \ geos.pth MAINTAINERCLEANFILES = geos.py geos_wrap.cxx if ENABLE_PYTHON BUILT_SOURCES = geos_wrap.cxx python_DATA = geos.pth pkgpython_PYTHON = geos.py pkgpyexec_LTLIBRARIES = _geos.la _geos_la_SOURCES = geos_wrap.cxx # Only need to grab the capi header files _geos_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_builddir)/capi -I$(top_srcdir)/include # Specify -module and -avoid-version so we can create a file called geos.dll/so which is what Python wants _geos_la_LDFLAGS = -no-undefined -module -avoid-version _geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la $(PYTHON_LDFLAGS) if ENABLE_SWIG geos_wrap.cxx: ../geos.i python.i $(SWIG) $(SWIG_PYTHON_OPT) -o $@ $< else # ! ENABLE_SWIG geos_wrap.cxx: ../geos.i python.i @echo "SWIG is disabled, can't build geos_wrap.cxx" @false endif # ENABLE_SWIG test: $(PYTHON) tests/runtests.py -v endif # ENABLE_PYTHON geos-3.4.2/swig/python/Makefile.in0000644000175000017500000007211012206417165016641 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/python DIST_COMMON = $(am__pkgpython_PYTHON_DIST) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" \ "$(DESTDIR)$(pkgpythondir)" "$(DESTDIR)$(pythondir)" LTLIBRARIES = $(pkgpyexec_LTLIBRARIES) am__DEPENDENCIES_1 = @ENABLE_PYTHON_TRUE@_geos_la_DEPENDENCIES = \ @ENABLE_PYTHON_TRUE@ $(top_builddir)/capi/libgeos_c.la \ @ENABLE_PYTHON_TRUE@ $(am__DEPENDENCIES_1) am___geos_la_SOURCES_DIST = geos_wrap.cxx @ENABLE_PYTHON_TRUE@am__geos_la_OBJECTS = _geos_la-geos_wrap.lo _geos_la_OBJECTS = $(am__geos_la_OBJECTS) _geos_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(_geos_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_PYTHON_TRUE@am__geos_la_rpath = -rpath $(pkgpyexecdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(_geos_la_SOURCES) DIST_SOURCES = $(am___geos_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__pkgpython_PYTHON_DIST = geos.py py_compile = $(top_srcdir)/py-compile DATA = $(python_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ tests EXTRA_DIST = \ python.i \ geos.pth MAINTAINERCLEANFILES = geos.py geos_wrap.cxx @ENABLE_PYTHON_TRUE@BUILT_SOURCES = geos_wrap.cxx @ENABLE_PYTHON_TRUE@python_DATA = geos.pth @ENABLE_PYTHON_TRUE@pkgpython_PYTHON = geos.py @ENABLE_PYTHON_TRUE@pkgpyexec_LTLIBRARIES = _geos.la @ENABLE_PYTHON_TRUE@_geos_la_SOURCES = geos_wrap.cxx # Only need to grab the capi header files @ENABLE_PYTHON_TRUE@_geos_la_CPPFLAGS = $(SWIG_PYTHON_CPPFLAGS) -I$(top_builddir)/capi -I$(top_srcdir)/include # Specify -module and -avoid-version so we can create a file called geos.dll/so which is what Python wants @ENABLE_PYTHON_TRUE@_geos_la_LDFLAGS = -no-undefined -module -avoid-version @ENABLE_PYTHON_TRUE@_geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la $(PYTHON_LDFLAGS) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/python/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ } uninstall-pkgpyexecLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ done clean-pkgpyexecLTLIBRARIES: -test -z "$(pkgpyexec_LTLIBRARIES)" || rm -f $(pkgpyexec_LTLIBRARIES) @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done _geos.la: $(_geos_la_OBJECTS) $(_geos_la_DEPENDENCIES) $(_geos_la_LINK) $(am__geos_la_rpath) $(_geos_la_OBJECTS) $(_geos_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_geos_la-geos_wrap.Plo@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< _geos_la-geos_wrap.lo: geos_wrap.cxx @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(_geos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT _geos_la-geos_wrap.lo -MD -MP -MF $(DEPDIR)/_geos_la-geos_wrap.Tpo -c -o _geos_la-geos_wrap.lo `test -f 'geos_wrap.cxx' || echo '$(srcdir)/'`geos_wrap.cxx @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/_geos_la-geos_wrap.Tpo $(DEPDIR)/_geos_la-geos_wrap.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geos_wrap.cxx' object='_geos_la-geos_wrap.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(_geos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o _geos_la-geos_wrap.lo `test -f 'geos_wrap.cxx' || echo '$(srcdir)/'`geos_wrap.cxx mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgpythonPYTHON: $(pkgpython_PYTHON) @$(NORMAL_INSTALL) test -z "$(pkgpythondir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpythondir)" @list='$(pkgpython_PYTHON)'; dlist=; list2=; test -n "$(pkgpythondir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpythondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpythondir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ if test -z "$(DESTDIR)"; then \ PYTHON=$(PYTHON) $(py_compile) --basedir "$(pkgpythondir)" $$dlist; \ else \ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(pkgpythondir)" $$dlist; \ fi; \ else :; fi uninstall-pkgpythonPYTHON: @$(NORMAL_UNINSTALL) @list='$(pkgpython_PYTHON)'; test -n "$(pkgpythondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ filesc=`echo "$$files" | sed 's|$$|c|'`; \ fileso=`echo "$$files" | sed 's|$$|o|'`; \ echo " ( cd '$(DESTDIR)$(pkgpythondir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgpythondir)" && rm -f $$files || exit $$?; \ echo " ( cd '$(DESTDIR)$(pkgpythondir)' && rm -f" $$filesc ")"; \ cd "$(DESTDIR)$(pkgpythondir)" && rm -f $$filesc || exit $$?; \ echo " ( cd '$(DESTDIR)$(pkgpythondir)' && rm -f" $$fileso ")"; \ cd "$(DESTDIR)$(pkgpythondir)" && rm -f $$fileso install-pythonDATA: $(python_DATA) @$(NORMAL_INSTALL) test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)" @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \ done uninstall-pythonDATA: @$(NORMAL_UNINSTALL) @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pythondir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pkgpythondir)" "$(DESTDIR)$(pythondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-pkgpyexecLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgpythonPYTHON install-pythonDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-pkgpyexecLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpythonPYTHON \ uninstall-pythonDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-pkgpyexecLTLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgpyexecLTLIBRARIES \ install-pkgpythonPYTHON install-ps install-ps-am \ install-pythonDATA install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpythonPYTHON \ uninstall-pythonDATA @ENABLE_PYTHON_TRUE@@ENABLE_SWIG_TRUE@geos_wrap.cxx: ../geos.i python.i @ENABLE_PYTHON_TRUE@@ENABLE_SWIG_TRUE@ $(SWIG) $(SWIG_PYTHON_OPT) -o $@ $< @ENABLE_PYTHON_TRUE@@ENABLE_SWIG_FALSE@geos_wrap.cxx: ../geos.i python.i @ENABLE_PYTHON_TRUE@@ENABLE_SWIG_FALSE@ @echo "SWIG is disabled, can't build geos_wrap.cxx" @ENABLE_PYTHON_TRUE@@ENABLE_SWIG_FALSE@ @false @ENABLE_PYTHON_TRUE@test: @ENABLE_PYTHON_TRUE@ $(PYTHON) tests/runtests.py -v # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/swig/python/geos.pth0000644000175000017500000000005012206417150016232 0ustar frankiefrankie# .pth file for the geos extensions geosgeos-3.4.2/swig/python/geos.py0000644000175000017500000004451512206417150016105 0ustar frankiefrankie# This file was automatically generated by SWIG (http://www.swig.org). # Version 2.0.4 # # Do not make changes to this file unless you know what you are doing--modify # the SWIG interface file instead. from sys import version_info if version_info >= (2,6,0): def swig_import_helper(): from os.path import dirname import imp fp = None try: fp, pathname, description = imp.find_module('_geos', [dirname(__file__)]) except ImportError: import _geos return _geos if fp is not None: try: _mod = imp.load_module('_geos', fp, pathname, description) finally: fp.close() return _mod _geos = swig_import_helper() del swig_import_helper else: import _geos del version_info try: _swig_property = property except NameError: pass # Python < 2.2 doesn't have 'property'. def _swig_setattr_nondynamic(self,class_type,name,value,static=1): if (name == "thisown"): return self.this.own(value) if (name == "this"): if type(value).__name__ == 'SwigPyObject': self.__dict__[name] = value return method = class_type.__swig_setmethods__.get(name,None) if method: return method(self,value) if (not static): self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) def _swig_setattr(self,class_type,name,value): return _swig_setattr_nondynamic(self,class_type,name,value,0) def _swig_getattr(self,class_type,name): if (name == "thisown"): return self.this.own() method = class_type.__swig_getmethods__.get(name,None) if method: return method(self) raise AttributeError(name) def _swig_repr(self): try: strthis = "proxy of " + self.this.__repr__() except: strthis = "" return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) try: _object = object _newclass = 1 except AttributeError: class _object : pass _newclass = 0 def _swig_setattr_nondynamic_method(set): def set_attr(self,name,value): if (name == "thisown"): return self.this.own(value) if hasattr(self,name) or (name == "this"): set(self,name,value) else: raise AttributeError("You cannot add attributes to %s" % self) return set_attr class SwigPyIterator(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_SwigPyIterator __del__ = lambda self : None; def value(self): return _geos.SwigPyIterator_value(self) def incr(self, n = 1): return _geos.SwigPyIterator_incr(self, n) def decr(self, n = 1): return _geos.SwigPyIterator_decr(self, n) def distance(self, *args): return _geos.SwigPyIterator_distance(self, *args) def equal(self, *args): return _geos.SwigPyIterator_equal(self, *args) def copy(self): return _geos.SwigPyIterator_copy(self) def next(self): return _geos.SwigPyIterator_next(self) def __next__(self): return _geos.SwigPyIterator___next__(self) def previous(self): return _geos.SwigPyIterator_previous(self) def advance(self, *args): return _geos.SwigPyIterator_advance(self, *args) def __eq__(self, *args): return _geos.SwigPyIterator___eq__(self, *args) def __ne__(self, *args): return _geos.SwigPyIterator___ne__(self, *args) def __iadd__(self, *args): return _geos.SwigPyIterator___iadd__(self, *args) def __isub__(self, *args): return _geos.SwigPyIterator___isub__(self, *args) def __add__(self, *args): return _geos.SwigPyIterator___add__(self, *args) def __sub__(self, *args): return _geos.SwigPyIterator___sub__(self, *args) def __iter__(self): return self SwigPyIterator_swigregister = _geos.SwigPyIterator_swigregister SwigPyIterator_swigregister(SwigPyIterator) GEOS_VERSION_MAJOR = _geos.GEOS_VERSION_MAJOR GEOS_VERSION_MINOR = _geos.GEOS_VERSION_MINOR GEOS_VERSION = _geos.GEOS_VERSION GEOS_JTS_PORT = _geos.GEOS_JTS_PORT GEOS_CAPI_VERSION_MAJOR = _geos.GEOS_CAPI_VERSION_MAJOR GEOS_CAPI_VERSION_MINOR = _geos.GEOS_CAPI_VERSION_MINOR GEOS_CAPI_VERSION_PATCH = _geos.GEOS_CAPI_VERSION_PATCH GEOS_CAPI_FIRST_INTERFACE = _geos.GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_LAST_INTERFACE = _geos.GEOS_CAPI_LAST_INTERFACE GEOS_CAPI_VERSION = _geos.GEOS_CAPI_VERSION GEOS_POINT = _geos.GEOS_POINT GEOS_LINESTRING = _geos.GEOS_LINESTRING GEOS_LINEARRING = _geos.GEOS_LINEARRING GEOS_POLYGON = _geos.GEOS_POLYGON GEOS_MULTIPOINT = _geos.GEOS_MULTIPOINT GEOS_MULTILINESTRING = _geos.GEOS_MULTILINESTRING GEOS_MULTIPOLYGON = _geos.GEOS_MULTIPOLYGON GEOS_GEOMETRYCOLLECTION = _geos.GEOS_GEOMETRYCOLLECTION GEOS_WKB_XDR = _geos.GEOS_WKB_XDR GEOS_WKB_NDR = _geos.GEOS_WKB_NDR def version(): return _geos.version() version = _geos.version class CoordinateSequence(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self, *args): this = _geos.new_CoordinateSequence(*args) try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_CoordinateSequence __del__ = lambda self : None; def clone(self): return _geos.CoordinateSequence_clone(self) def setX(self, *args): return _geos.CoordinateSequence_setX(self, *args) def setY(self, *args): return _geos.CoordinateSequence_setY(self, *args) def setZ(self, *args): return _geos.CoordinateSequence_setZ(self, *args) def setOrdinate(self, *args): return _geos.CoordinateSequence_setOrdinate(self, *args) def getX(self, *args): return _geos.CoordinateSequence_getX(self, *args) def getY(self, *args): return _geos.CoordinateSequence_getY(self, *args) def getZ(self, *args): return _geos.CoordinateSequence_getZ(self, *args) def getOrdinate(self, *args): return _geos.CoordinateSequence_getOrdinate(self, *args) def getSize(self): return _geos.CoordinateSequence_getSize(self) def getDimensions(self): return _geos.CoordinateSequence_getDimensions(self) CoordinateSequence_swigregister = _geos.CoordinateSequence_swigregister CoordinateSequence_swigregister(CoordinateSequence) class Geometry(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_Geometry __del__ = lambda self : None; def clone(self): return _geos.Geometry_clone(self) def geomType(self): return _geos.Geometry_geomType(self) def typeId(self): return _geos.Geometry_typeId(self) def normalize(self): return _geos.Geometry_normalize(self) def getSRID(self): return _geos.Geometry_getSRID(self) def setSRID(self, *args): return _geos.Geometry_setSRID(self, *args) def getDimensions(self): return _geos.Geometry_getDimensions(self) def getNumGeometries(self): return _geos.Geometry_getNumGeometries(self) def intersection(self, *args): return _geos.Geometry_intersection(self, *args) def buffer(self, *args): return _geos.Geometry_buffer(self, *args) def convexHull(self): return _geos.Geometry_convexHull(self) def difference(self, *args): return _geos.Geometry_difference(self, *args) def symDifference(self, *args): return _geos.Geometry_symDifference(self, *args) def boundary(self): return _geos.Geometry_boundary(self) def union(self, *args): return _geos.Geometry_union(self, *args) def pointOnSurface(self): return _geos.Geometry_pointOnSurface(self) def getCentroid(self): return _geos.Geometry_getCentroid(self) def getEnvelope(self): return _geos.Geometry_getEnvelope(self) def relate(self, *args): return _geos.Geometry_relate(self, *args) def lineMerge(self): return _geos.Geometry_lineMerge(self) def simplify(self, *args): return _geos.Geometry_simplify(self, *args) def topologyPreserveSimplify(self, *args): return _geos.Geometry_topologyPreserveSimplify(self, *args) def relatePattern(self, *args): return _geos.Geometry_relatePattern(self, *args) def disjoint(self, *args): return _geos.Geometry_disjoint(self, *args) def touches(self, *args): return _geos.Geometry_touches(self, *args) def intersects(self, *args): return _geos.Geometry_intersects(self, *args) def crosses(self, *args): return _geos.Geometry_crosses(self, *args) def within(self, *args): return _geos.Geometry_within(self, *args) def contains(self, *args): return _geos.Geometry_contains(self, *args) def overlaps(self, *args): return _geos.Geometry_overlaps(self, *args) def equals(self, *args): return _geos.Geometry_equals(self, *args) def equalsExact(self, *args): return _geos.Geometry_equalsExact(self, *args) def isEmpty(self): return _geos.Geometry_isEmpty(self) def isValid(self): return _geos.Geometry_isValid(self) def isSimple(self): return _geos.Geometry_isSimple(self) def isRing(self): return _geos.Geometry_isRing(self) def hasZ(self): return _geos.Geometry_hasZ(self) def area(self): return _geos.Geometry_area(self) def length(self): return _geos.Geometry_length(self) def distance(self, *args): return _geos.Geometry_distance(self, *args) Geometry_swigregister = _geos.Geometry_swigregister Geometry_swigregister(Geometry) class Point(Geometry): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_Point __del__ = lambda self : None; def getCoordSeq(self): return _geos.Point_getCoordSeq(self) Point_swigregister = _geos.Point_swigregister Point_swigregister(Point) class LineString(Geometry): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_LineString __del__ = lambda self : None; def getCoordSeq(self): return _geos.LineString_getCoordSeq(self) LineString_swigregister = _geos.LineString_swigregister LineString_swigregister(LineString) class LinearRing(Geometry): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_LinearRing __del__ = lambda self : None; def getCoordSeq(self): return _geos.LinearRing_getCoordSeq(self) LinearRing_swigregister = _geos.LinearRing_swigregister LinearRing_swigregister(LinearRing) class Polygon(Geometry): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_Polygon __del__ = lambda self : None; def getExteriorRing(self): return _geos.Polygon_getExteriorRing(self) def getNumInteriorRings(self): return _geos.Polygon_getNumInteriorRings(self) def getInteriorRingN(self, *args): return _geos.Polygon_getInteriorRingN(self, *args) Polygon_swigregister = _geos.Polygon_swigregister Polygon_swigregister(Polygon) class GeometryCollection(Geometry): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_GeometryCollection __del__ = lambda self : None; def getGeometryN(self, *args): return _geos.GeometryCollection_getGeometryN(self, *args) GeometryCollection_swigregister = _geos.GeometryCollection_swigregister GeometryCollection_swigregister(GeometryCollection) class MultiPoint(GeometryCollection): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_MultiPoint __del__ = lambda self : None; MultiPoint_swigregister = _geos.MultiPoint_swigregister MultiPoint_swigregister(MultiPoint) class MultiLineString(GeometryCollection): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_MultiLineString __del__ = lambda self : None; MultiLineString_swigregister = _geos.MultiLineString_swigregister MultiLineString_swigregister(MultiLineString) class MultiLinearRing(GeometryCollection): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_MultiLinearRing __del__ = lambda self : None; MultiLinearRing_swigregister = _geos.MultiLinearRing_swigregister MultiLinearRing_swigregister(MultiLinearRing) class MultiPolygon(GeometryCollection): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") __repr__ = _swig_repr __swig_destroy__ = _geos.delete_MultiPolygon __del__ = lambda self : None; MultiPolygon_swigregister = _geos.MultiPolygon_swigregister MultiPolygon_swigregister(MultiPolygon) def createPoint(*args): return _geos.createPoint(*args) createPoint = _geos.createPoint def createLineString(*args): return _geos.createLineString(*args) createLineString = _geos.createLineString def createLinearRing(*args): return _geos.createLinearRing(*args) createLinearRing = _geos.createLinearRing def createPolygon(*args): return _geos.createPolygon(*args) createPolygon = _geos.createPolygon class Prepared(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self, *args): this = _geos.new_Prepared(*args) try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_Prepared __del__ = lambda self : None; def contains(self, *args): return _geos.Prepared_contains(self, *args) def containsProperly(self, *args): return _geos.Prepared_containsProperly(self, *args) def covers(self, *args): return _geos.Prepared_covers(self, *args) def intersects(self, *args): return _geos.Prepared_intersects(self, *args) Prepared_swigregister = _geos.Prepared_swigregister Prepared_swigregister(Prepared) class STRtree(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self, *args): this = _geos.new_STRtree(*args) try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_STRtree __del__ = lambda self : None; def insert(self, *args): return _geos.STRtree_insert(self, *args) def remove(self, *args): return _geos.STRtree_remove(self, *args) def query(self, *args): return _geos.STRtree_query(self, *args) def iterate(self, *args): return _geos.STRtree_iterate(self, *args) STRtree_swigregister = _geos.STRtree_swigregister STRtree_swigregister(STRtree) class WktReader(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self): this = _geos.new_WktReader() try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_WktReader __del__ = lambda self : None; def read(self, *args): return _geos.WktReader_read(self, *args) WktReader_swigregister = _geos.WktReader_swigregister WktReader_swigregister(WktReader) class WktWriter(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self): this = _geos.new_WktWriter() try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_WktWriter __del__ = lambda self : None; def write(self, *args): return _geos.WktWriter_write(self, *args) WktWriter_swigregister = _geos.WktWriter_swigregister WktWriter_swigregister(WktWriter) class WkbReader(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self): this = _geos.new_WkbReader() try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_WkbReader __del__ = lambda self : None; def read(self, *args): return _geos.WkbReader_read(self, *args) def readHEX(self, *args): return _geos.WkbReader_readHEX(self, *args) WkbReader_swigregister = _geos.WkbReader_swigregister WkbReader_swigregister(WkbReader) class WkbWriter(object): thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') __repr__ = _swig_repr def __init__(self): this = _geos.new_WkbWriter() try: self.this.append(this) except: self.this = this __swig_destroy__ = _geos.delete_WkbWriter __del__ = lambda self : None; def getOutputDimension(self): return _geos.WkbWriter_getOutputDimension(self) def setOutputDimension(self, *args): return _geos.WkbWriter_setOutputDimension(self, *args) def getByteOrder(self): return _geos.WkbWriter_getByteOrder(self) def setByteOrder(self, *args): return _geos.WkbWriter_setByteOrder(self, *args) def getIncludeSRID(self): return _geos.WkbWriter_getIncludeSRID(self) def setIncludeSRID(self, *args): return _geos.WkbWriter_setIncludeSRID(self, *args) def write(self, *args): return _geos.WkbWriter_write(self, *args) def writeHEX(self, *args): return _geos.WkbWriter_writeHEX(self, *args) WkbWriter_swigregister = _geos.WkbWriter_swigregister WkbWriter_swigregister(WkbWriter) geos-3.4.2/swig/python/geos_wrap.cxx0000644000175000017500000131077112206417150017311 0ustar frankiefrankie/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 2.0.4 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #define SWIGPYTHON #define SWIG_PYTHON_DIRECTOR_NO_VTABLE #ifdef __cplusplus /* SwigValueWrapper is described in swig.swg */ template class SwigValueWrapper { struct SwigMovePointer { T *ptr; SwigMovePointer(T *p) : ptr(p) { } ~SwigMovePointer() { delete ptr; } SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } } pointer; SwigValueWrapper& operator=(const SwigValueWrapper& rhs); SwigValueWrapper(const SwigValueWrapper& rhs); public: SwigValueWrapper() : pointer(0) { } SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } operator T&() const { return *pointer.ptr; } T *operator&() { return pointer.ptr; } }; template T SwigValueInit() { return T(); } #endif /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* Python.h has to appear first */ #include /* ----------------------------------------------------------------------------- * swigrun.swg * * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "4" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif /* Generic buffer size */ #ifndef SWIG_BUFFER_SIZE # define SWIG_BUFFER_SIZE 1024 #endif /* Flags for pointer conversions */ #define SWIG_POINTER_DISOWN 0x1 #define SWIG_CAST_NEW_MEMORY 0x2 /* Flags for new pointer objects */ #define SWIG_POINTER_OWN 0x1 /* Flags/methods for returning states. The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code } else { //fail code } Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { // success code } else { // fail code } which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); if (SWIG_IsOK(res)) { // success code if (SWIG_IsNewObj(res) { ... delete *ptr; } else { ... } } else { // fail code } I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if () { if () { *ptr = ; return SWIG_NEWOBJ; } else { *ptr = ; return SWIG_OLDOBJ; } } else { return SWIG_BADOBJ; } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this int food(double) int fooi(int); and you call food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) /* The NewMask denotes the object was created (using new/malloc) */ #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) /* The TmpMask is for in/out typemaps that use temporal objects */ #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) /* Simple returning values */ #define SWIG_BADOBJ (SWIG_ERROR) #define SWIG_OLDOBJ (SWIG_OK) #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) /* Check, add and del mask methods */ #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } SWIGINTERNINLINE int SWIG_CheckState(int r) { return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *, int *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ int owndata; /* flag if the structure owns the clientdata */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; } return (int)((l1 - f1) - (l2 - f2)); } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCompare(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(iter->type->name, c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (iter->type == from) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (!type) return NULL; if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } } cast = cast->next; } } SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { register size_t l = 0; register size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ register size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { register int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { register size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; register const unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { register unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register char d = *(c++); register unsigned char uu; if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* Errors in SWIG */ #define SWIG_UnknownError -1 #define SWIG_IOError -2 #define SWIG_RuntimeError -3 #define SWIG_IndexError -4 #define SWIG_TypeError -5 #define SWIG_DivisionByZero -6 #define SWIG_OverflowError -7 #define SWIG_SyntaxError -8 #define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 #define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 /* Compatibility macros for Python 3 */ #if PY_VERSION_HEX >= 0x03000000 #define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) #define PyInt_Check(x) PyLong_Check(x) #define PyInt_AsLong(x) PyLong_AsLong(x) #define PyInt_FromLong(x) PyLong_FromLong(x) #define PyString_Check(name) PyBytes_Check(name) #define PyString_FromString(x) PyUnicode_FromString(x) #define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) #define PyString_AsString(str) PyBytes_AsString(str) #define PyString_Size(str) PyBytes_Size(str) #define PyString_InternFromString(key) PyUnicode_InternFromString(key) #define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE #define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) #define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) #endif #ifndef Py_TYPE # define Py_TYPE(op) ((op)->ob_type) #endif /* SWIG APIs for compatibility of both Python 2 & 3 */ #if PY_VERSION_HEX >= 0x03000000 # define SWIG_Python_str_FromFormat PyUnicode_FromFormat #else # define SWIG_Python_str_FromFormat PyString_FromFormat #endif /* Warning: This function will allocate a new string in Python 3, * so please call SWIG_Python_str_DelForPy3(x) to free the space. */ SWIGINTERN char* SWIG_Python_str_AsChar(PyObject *str) { #if PY_VERSION_HEX >= 0x03000000 char *cstr; char *newstr; Py_ssize_t len; str = PyUnicode_AsUTF8String(str); PyBytes_AsStringAndSize(str, &cstr, &len); newstr = (char *) malloc(len+1); memcpy(newstr, cstr, len+1); Py_XDECREF(str); return newstr; #else return PyString_AsString(str); #endif } #if PY_VERSION_HEX >= 0x03000000 # define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) #else # define SWIG_Python_str_DelForPy3(x) #endif SWIGINTERN PyObject* SWIG_Python_str_FromChar(const char *c) { #if PY_VERSION_HEX >= 0x03000000 return PyUnicode_FromString(c); #else return PyString_FromString(c); #endif } /* Add PyOS_snprintf for old Pythons */ #if PY_VERSION_HEX < 0x02020000 # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) # define PyOS_snprintf _snprintf # else # define PyOS_snprintf snprintf # endif #endif /* A crude PyString_FromFormat implementation for old Pythons */ #if PY_VERSION_HEX < 0x02020000 #ifndef SWIG_PYBUFFER_SIZE # define SWIG_PYBUFFER_SIZE 1024 #endif static PyObject * PyString_FromFormat(const char *fmt, ...) { va_list ap; char buf[SWIG_PYBUFFER_SIZE * 2]; int res; va_start(ap, fmt); res = vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); } #endif /* Add PyObject_Del for old Pythons */ #if PY_VERSION_HEX < 0x01060000 # define PyObject_Del(op) PyMem_DEL((op)) #endif #ifndef PyObject_DEL # define PyObject_DEL PyObject_Del #endif /* A crude PyExc_StopIteration exception for old Pythons */ #if PY_VERSION_HEX < 0x02020000 # ifndef PyExc_StopIteration # define PyExc_StopIteration PyExc_RuntimeError # endif # ifndef PyObject_GenericGetAttr # define PyObject_GenericGetAttr 0 # endif #endif /* Py_NotImplemented is defined in 2.1 and up. */ #if PY_VERSION_HEX < 0x02010000 # ifndef Py_NotImplemented # define Py_NotImplemented PyExc_RuntimeError # endif #endif /* A crude PyString_AsStringAndSize implementation for old Pythons */ #if PY_VERSION_HEX < 0x02010000 # ifndef PyString_AsStringAndSize # define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} # endif #endif /* PySequence_Size for old Pythons */ #if PY_VERSION_HEX < 0x02000000 # ifndef PySequence_Size # define PySequence_Size PySequence_Length # endif #endif /* PyBool_FromLong for old Pythons */ #if PY_VERSION_HEX < 0x02030000 static PyObject *PyBool_FromLong(long ok) { PyObject *result = ok ? Py_True : Py_False; Py_INCREF(result); return result; } #endif /* Py_ssize_t for old Pythons */ /* This code is as recommended by: */ /* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ #if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) typedef int Py_ssize_t; # define PY_SSIZE_T_MAX INT_MAX # define PY_SSIZE_T_MIN INT_MIN typedef inquiry lenfunc; typedef intargfunc ssizeargfunc; typedef intintargfunc ssizessizeargfunc; typedef intobjargproc ssizeobjargproc; typedef intintobjargproc ssizessizeobjargproc; typedef getreadbufferproc readbufferproc; typedef getwritebufferproc writebufferproc; typedef getsegcountproc segcountproc; typedef getcharbufferproc charbufferproc; static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) { long result = 0; PyObject *i = PyNumber_Int(x); if (i) { result = PyInt_AsLong(i); Py_DECREF(i); } return result; } #endif #if PY_VERSION_HEX < 0x02040000 #define Py_VISIT(op) \ do { \ if (op) { \ int vret = visit((op), arg); \ if (vret) \ return vret; \ } \ } while (0) #endif #if PY_VERSION_HEX < 0x02030000 typedef struct { PyTypeObject type; PyNumberMethods as_number; PyMappingMethods as_mapping; PySequenceMethods as_sequence; PyBufferProcs as_buffer; PyObject *name, *slots; } PyHeapTypeObject; #endif #if PY_VERSION_HEX < 0x02030000 typedef destructor freefunc; #endif #if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ (PY_MAJOR_VERSION > 3)) # define SWIGPY_USE_CAPSULE # define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) #endif #if PY_VERSION_HEX < 0x03020000 #define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) #define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) #endif /* ----------------------------------------------------------------------------- * error manipulation * ----------------------------------------------------------------------------- */ SWIGRUNTIME PyObject* SWIG_Python_ErrorType(int code) { PyObject* type = 0; switch(code) { case SWIG_MemoryError: type = PyExc_MemoryError; break; case SWIG_IOError: type = PyExc_IOError; break; case SWIG_RuntimeError: type = PyExc_RuntimeError; break; case SWIG_IndexError: type = PyExc_IndexError; break; case SWIG_TypeError: type = PyExc_TypeError; break; case SWIG_DivisionByZero: type = PyExc_ZeroDivisionError; break; case SWIG_OverflowError: type = PyExc_OverflowError; break; case SWIG_SyntaxError: type = PyExc_SyntaxError; break; case SWIG_ValueError: type = PyExc_ValueError; break; case SWIG_SystemError: type = PyExc_SystemError; break; case SWIG_AttributeError: type = PyExc_AttributeError; break; default: type = PyExc_RuntimeError; } return type; } SWIGRUNTIME void SWIG_Python_AddErrorMsg(const char* mesg) { PyObject *type = 0; PyObject *value = 0; PyObject *traceback = 0; if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); if (value) { char *tmp; PyObject *old_str = PyObject_Str(value); PyErr_Clear(); Py_XINCREF(type); PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); SWIG_Python_str_DelForPy3(tmp); Py_DECREF(old_str); Py_DECREF(value); } else { PyErr_SetString(PyExc_RuntimeError, mesg); } } #if defined(SWIG_PYTHON_NO_THREADS) # if defined(SWIG_PYTHON_THREADS) # undef SWIG_PYTHON_THREADS # endif #endif #if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ # if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) # if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ # define SWIG_PYTHON_USE_GIL # endif # endif # if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ # ifndef SWIG_PYTHON_INITIALIZE_THREADS # define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() # endif # ifdef __cplusplus /* C++ code */ class SWIG_Python_Thread_Block { bool status; PyGILState_STATE state; public: void end() { if (status) { PyGILState_Release(state); status = false;} } SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} ~SWIG_Python_Thread_Block() { end(); } }; class SWIG_Python_Thread_Allow { bool status; PyThreadState *save; public: void end() { if (status) { PyEval_RestoreThread(save); status = false; }} SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} ~SWIG_Python_Thread_Allow() { end(); } }; # define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block # define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() # define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow # define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() # else /* C code */ # define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() # define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) # define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() # define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) # endif # else /* Old thread way, not implemented, user must provide it */ # if !defined(SWIG_PYTHON_INITIALIZE_THREADS) # define SWIG_PYTHON_INITIALIZE_THREADS # endif # if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) # define SWIG_PYTHON_THREAD_BEGIN_BLOCK # endif # if !defined(SWIG_PYTHON_THREAD_END_BLOCK) # define SWIG_PYTHON_THREAD_END_BLOCK # endif # if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) # define SWIG_PYTHON_THREAD_BEGIN_ALLOW # endif # if !defined(SWIG_PYTHON_THREAD_END_ALLOW) # define SWIG_PYTHON_THREAD_END_ALLOW # endif # endif #else /* No thread support */ # define SWIG_PYTHON_INITIALIZE_THREADS # define SWIG_PYTHON_THREAD_BEGIN_BLOCK # define SWIG_PYTHON_THREAD_END_BLOCK # define SWIG_PYTHON_THREAD_BEGIN_ALLOW # define SWIG_PYTHON_THREAD_END_ALLOW #endif /* ----------------------------------------------------------------------------- * Python API portion that goes into the runtime * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif /* ----------------------------------------------------------------------------- * Constant declarations * ----------------------------------------------------------------------------- */ /* Constant Types */ #define SWIG_PY_POINTER 4 #define SWIG_PY_BINARY 5 /* Constant information structure */ typedef struct swig_const_info { int type; char *name; long lvalue; double dvalue; void *pvalue; swig_type_info **ptype; } swig_const_info; /* ----------------------------------------------------------------------------- * Wrapper of PyInstanceMethod_New() used in Python 3 * It is exported to the generated module, used for -fastproxy * ----------------------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x03000000 SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) { return PyInstanceMethod_New(func); } #else SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) { return NULL; } #endif #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * pyrun.swg * * This file contains the runtime support for Python modules * and includes code for managing global variables and pointer * type checking. * * ----------------------------------------------------------------------------- */ /* Common SWIG API */ /* for raw pointers */ #define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) #define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) #define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) #ifdef SWIGPYTHON_BUILTIN #define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) #else #define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) #endif #define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) #define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) #define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) #define swig_owntype int /* for raw packed data */ #define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) /* for class or struct pointers */ #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) #define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Python_GetModule() #define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) #define SWIG_NewClientData(obj) SwigPyClientData_New(obj) #define SWIG_SetErrorObj SWIG_Python_SetErrorObj #define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg #define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) #define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) #define SWIG_fail goto fail /* Runtime API implementation */ /* Error manipulation */ SWIGINTERN void SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetObject(errtype, obj); Py_DECREF(obj); SWIG_PYTHON_THREAD_END_BLOCK; } SWIGINTERN void SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(errtype, (char *) msg); SWIG_PYTHON_THREAD_END_BLOCK; } #define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) /* Set a constant value */ #if defined(SWIGPYTHON_BUILTIN) SWIGINTERN void SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { PyObject *s = PyString_InternFromString(key); PyList_Append(seq, s); Py_DECREF(s); } SWIGINTERN void SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { PyDict_SetItemString(d, (char *)name, obj); Py_DECREF(obj); if (public_interface) SwigPyBuiltin_AddPublicSymbol(public_interface, name); } #else SWIGINTERN void SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { PyDict_SetItemString(d, (char *)name, obj); Py_DECREF(obj); } #endif /* Append a value to the result obj */ SWIGINTERN PyObject* SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { #if !defined(SWIG_PYTHON_OUTPUT_TUPLE) if (!result) { result = obj; } else if (result == Py_None) { Py_DECREF(result); result = obj; } else { if (!PyList_Check(result)) { PyObject *o2 = result; result = PyList_New(1); PyList_SetItem(result, 0, o2); } PyList_Append(result,obj); Py_DECREF(obj); } return result; #else PyObject* o2; PyObject* o3; if (!result) { result = obj; } else if (result == Py_None) { Py_DECREF(result); result = obj; } else { if (!PyTuple_Check(result)) { o2 = result; result = PyTuple_New(1); PyTuple_SET_ITEM(result, 0, o2); } o3 = PyTuple_New(1); PyTuple_SET_ITEM(o3, 0, obj); o2 = result; result = PySequence_Concat(o2, o3); Py_DECREF(o2); Py_DECREF(o3); } return result; #endif } /* Unpack the argument tuple */ SWIGINTERN int SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) { if (!args) { if (!min && !max) { return 1; } else { PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", name, (min == max ? "" : "at least "), (int)min); return 0; } } if (!PyTuple_Check(args)) { if (min <= 1 && max >= 1) { register int i; objs[0] = args; for (i = 1; i < max; ++i) { objs[i] = 0; } return 2; } PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); return 0; } else { register Py_ssize_t l = PyTuple_GET_SIZE(args); if (l < min) { PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", name, (min == max ? "" : "at least "), (int)min, (int)l); return 0; } else if (l > max) { PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", name, (min == max ? "" : "at most "), (int)max, (int)l); return 0; } else { register int i; for (i = 0; i < l; ++i) { objs[i] = PyTuple_GET_ITEM(args, i); } for (; l < max; ++l) { objs[l] = 0; } return i + 1; } } } /* A functor is a function object with one single object argument */ #if PY_VERSION_HEX >= 0x02020000 #define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); #else #define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); #endif /* Helper for static pointer initialization for both C and C++ code, for example static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); */ #ifdef __cplusplus #define SWIG_STATIC_POINTER(var) var #else #define SWIG_STATIC_POINTER(var) var = 0; if (!var) var #endif /* ----------------------------------------------------------------------------- * Pointer declarations * ----------------------------------------------------------------------------- */ /* Flags for new pointer objects */ #define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) #define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) #define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) #define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) #define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) #ifdef __cplusplus extern "C" { #endif /* How to access Py_None */ #if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # ifndef SWIG_PYTHON_NO_BUILD_NONE # ifndef SWIG_PYTHON_BUILD_NONE # define SWIG_PYTHON_BUILD_NONE # endif # endif #endif #ifdef SWIG_PYTHON_BUILD_NONE # ifdef Py_None # undef Py_None # define Py_None SWIG_Py_None() # endif SWIGRUNTIMEINLINE PyObject * _SWIG_Py_None(void) { PyObject *none = Py_BuildValue((char*)""); Py_DECREF(none); return none; } SWIGRUNTIME PyObject * SWIG_Py_None(void) { static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); return none; } #endif /* The python void return value */ SWIGRUNTIMEINLINE PyObject * SWIG_Py_Void(void) { PyObject *none = Py_None; Py_INCREF(none); return none; } /* SwigPyClientData */ typedef struct { PyObject *klass; PyObject *newraw; PyObject *newargs; PyObject *destroy; int delargs; int implicitconv; PyTypeObject *pytype; } SwigPyClientData; SWIGRUNTIMEINLINE int SWIG_Python_CheckImplicit(swig_type_info *ty) { SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; return data ? data->implicitconv : 0; } SWIGRUNTIMEINLINE PyObject * SWIG_Python_ExceptionType(swig_type_info *desc) { SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; PyObject *klass = data ? data->klass : 0; return (klass ? klass : PyExc_RuntimeError); } SWIGRUNTIME SwigPyClientData * SwigPyClientData_New(PyObject* obj) { if (!obj) { return 0; } else { SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); /* the klass element */ data->klass = obj; Py_INCREF(data->klass); /* the newraw method and newargs arguments used to create a new raw instance */ if (PyClass_Check(obj)) { data->newraw = 0; data->newargs = obj; Py_INCREF(obj); } else { #if (PY_VERSION_HEX < 0x02020000) data->newraw = 0; #else data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); #endif if (data->newraw) { Py_INCREF(data->newraw); data->newargs = PyTuple_New(1); PyTuple_SetItem(data->newargs, 0, obj); } else { data->newargs = obj; } Py_INCREF(data->newargs); } /* the destroy method, aka as the C++ delete method */ data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); if (PyErr_Occurred()) { PyErr_Clear(); data->destroy = 0; } if (data->destroy) { int flags; Py_INCREF(data->destroy); flags = PyCFunction_GET_FLAGS(data->destroy); #ifdef METH_O data->delargs = !(flags & (METH_O)); #else data->delargs = 0; #endif } else { data->delargs = 0; } data->implicitconv = 0; data->pytype = 0; return data; } } SWIGRUNTIME void SwigPyClientData_Del(SwigPyClientData *data) { Py_XDECREF(data->newraw); Py_XDECREF(data->newargs); Py_XDECREF(data->destroy); } /* =============== SwigPyObject =====================*/ typedef struct { PyObject_HEAD void *ptr; swig_type_info *ty; int own; PyObject *next; #ifdef SWIGPYTHON_BUILTIN PyObject *dict; #endif } SwigPyObject; SWIGRUNTIME PyObject * SwigPyObject_long(SwigPyObject *v) { return PyLong_FromVoidPtr(v->ptr); } SWIGRUNTIME PyObject * SwigPyObject_format(const char* fmt, SwigPyObject *v) { PyObject *res = NULL; PyObject *args = PyTuple_New(1); if (args) { if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { PyObject *ofmt = SWIG_Python_str_FromChar(fmt); if (ofmt) { #if PY_VERSION_HEX >= 0x03000000 res = PyUnicode_Format(ofmt,args); #else res = PyString_Format(ofmt,args); #endif Py_DECREF(ofmt); } Py_DECREF(args); } } return res; } SWIGRUNTIME PyObject * SwigPyObject_oct(SwigPyObject *v) { return SwigPyObject_format("%o",v); } SWIGRUNTIME PyObject * SwigPyObject_hex(SwigPyObject *v) { return SwigPyObject_format("%x",v); } SWIGRUNTIME PyObject * #ifdef METH_NOARGS SwigPyObject_repr(SwigPyObject *v) #else SwigPyObject_repr(SwigPyObject *v, PyObject *args) #endif { const char *name = SWIG_TypePrettyName(v->ty); PyObject *repr = SWIG_Python_str_FromFormat("", name, (void *)v); if (v->next) { # ifdef METH_NOARGS PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); # else PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); # endif # if PY_VERSION_HEX >= 0x03000000 PyObject *joined = PyUnicode_Concat(repr, nrep); Py_DecRef(repr); Py_DecRef(nrep); repr = joined; # else PyString_ConcatAndDel(&repr,nrep); # endif } return repr; } SWIGRUNTIME int SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { char *str; #ifdef METH_NOARGS PyObject *repr = SwigPyObject_repr(v); #else PyObject *repr = SwigPyObject_repr(v, NULL); #endif if (repr) { str = SWIG_Python_str_AsChar(repr); fputs(str, fp); SWIG_Python_str_DelForPy3(str); Py_DECREF(repr); return 0; } else { return 1; } } SWIGRUNTIME PyObject * SwigPyObject_str(SwigPyObject *v) { char result[SWIG_BUFFER_SIZE]; return SWIG_PackVoidPtr(result, v->ptr, v->ty->name, sizeof(result)) ? SWIG_Python_str_FromChar(result) : 0; } SWIGRUNTIME int SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) { void *i = v->ptr; void *j = w->ptr; return (i < j) ? -1 : ((i > j) ? 1 : 0); } /* Added for Python 3.x, would it also be useful for Python 2.x? */ SWIGRUNTIME PyObject* SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) { PyObject* res; if( op != Py_EQ && op != Py_NE ) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); return res; } SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); #ifdef SWIGPYTHON_BUILTIN static swig_type_info *SwigPyObject_stype = 0; SWIGRUNTIME PyTypeObject* SwigPyObject_type(void) { SwigPyClientData *cd; assert(SwigPyObject_stype); cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; assert(cd); assert(cd->pytype); return cd->pytype; } #else SWIGRUNTIME PyTypeObject* SwigPyObject_type(void) { static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); return type; } #endif SWIGRUNTIMEINLINE int SwigPyObject_Check(PyObject *op) { #ifdef SWIGPYTHON_BUILTIN PyTypeObject *target_tp = SwigPyObject_type(); if (PyType_IsSubtype(op->ob_type, target_tp)) return 1; return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); #else return (Py_TYPE(op) == SwigPyObject_type()) || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); #endif } SWIGRUNTIME PyObject * SwigPyObject_New(void *ptr, swig_type_info *ty, int own); SWIGRUNTIME void SwigPyObject_dealloc(PyObject *v) { SwigPyObject *sobj = (SwigPyObject *) v; PyObject *next = sobj->next; if (sobj->own == SWIG_POINTER_OWN) { swig_type_info *ty = sobj->ty; SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; PyObject *destroy = data ? data->destroy : 0; if (destroy) { /* destroy is always a VARARGS method */ PyObject *res; if (data->delargs) { /* we need to create a temporary object to carry the destroy operation */ PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); res = SWIG_Python_CallFunctor(destroy, tmp); Py_DECREF(tmp); } else { PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); PyObject *mself = PyCFunction_GET_SELF(destroy); res = ((*meth)(mself, v)); } Py_XDECREF(res); } #if !defined(SWIG_PYTHON_SILENT_MEMLEAK) else { const char *name = SWIG_TypePrettyName(ty); printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); } #endif } Py_XDECREF(next); PyObject_DEL(v); } SWIGRUNTIME PyObject* SwigPyObject_append(PyObject* v, PyObject* next) { SwigPyObject *sobj = (SwigPyObject *) v; #ifndef METH_O PyObject *tmp = 0; if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; next = tmp; #endif if (!SwigPyObject_Check(next)) { return NULL; } sobj->next = next; Py_INCREF(next); return SWIG_Py_Void(); } SWIGRUNTIME PyObject* #ifdef METH_NOARGS SwigPyObject_next(PyObject* v) #else SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) #endif { SwigPyObject *sobj = (SwigPyObject *) v; if (sobj->next) { Py_INCREF(sobj->next); return sobj->next; } else { return SWIG_Py_Void(); } } SWIGINTERN PyObject* #ifdef METH_NOARGS SwigPyObject_disown(PyObject *v) #else SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) #endif { SwigPyObject *sobj = (SwigPyObject *)v; sobj->own = 0; return SWIG_Py_Void(); } SWIGINTERN PyObject* #ifdef METH_NOARGS SwigPyObject_acquire(PyObject *v) #else SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) #endif { SwigPyObject *sobj = (SwigPyObject *)v; sobj->own = SWIG_POINTER_OWN; return SWIG_Py_Void(); } SWIGINTERN PyObject* SwigPyObject_own(PyObject *v, PyObject *args) { PyObject *val = 0; #if (PY_VERSION_HEX < 0x02020000) if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) #else if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) #endif { return NULL; } else { SwigPyObject *sobj = (SwigPyObject *)v; PyObject *obj = PyBool_FromLong(sobj->own); if (val) { #ifdef METH_NOARGS if (PyObject_IsTrue(val)) { SwigPyObject_acquire(v); } else { SwigPyObject_disown(v); } #else if (PyObject_IsTrue(val)) { SwigPyObject_acquire(v,args); } else { SwigPyObject_disown(v,args); } #endif } return obj; } } #ifdef METH_O static PyMethodDef swigobject_methods[] = { {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"aquires ownership of the pointer"}, {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, {0, 0, 0, 0} }; #else static PyMethodDef swigobject_methods[] = { {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, {0, 0, 0, 0} }; #endif #if PY_VERSION_HEX < 0x02020000 SWIGINTERN PyObject * SwigPyObject_getattr(SwigPyObject *sobj,char *name) { return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); } #endif SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void) { static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; static PyNumberMethods SwigPyObject_as_number = { (binaryfunc)0, /*nb_add*/ (binaryfunc)0, /*nb_subtract*/ (binaryfunc)0, /*nb_multiply*/ /* nb_divide removed in Python 3 */ #if PY_VERSION_HEX < 0x03000000 (binaryfunc)0, /*nb_divide*/ #endif (binaryfunc)0, /*nb_remainder*/ (binaryfunc)0, /*nb_divmod*/ (ternaryfunc)0,/*nb_power*/ (unaryfunc)0, /*nb_negative*/ (unaryfunc)0, /*nb_positive*/ (unaryfunc)0, /*nb_absolute*/ (inquiry)0, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ #if PY_VERSION_HEX < 0x03000000 0, /*nb_coerce*/ #endif (unaryfunc)SwigPyObject_long, /*nb_int*/ #if PY_VERSION_HEX < 0x03000000 (unaryfunc)SwigPyObject_long, /*nb_long*/ #else 0, /*nb_reserved*/ #endif (unaryfunc)0, /*nb_float*/ #if PY_VERSION_HEX < 0x03000000 (unaryfunc)SwigPyObject_oct, /*nb_oct*/ (unaryfunc)SwigPyObject_hex, /*nb_hex*/ #endif #if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ #elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ #elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ #elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ #endif }; static PyTypeObject swigpyobject_type; static int type_init = 0; if (!type_init) { const PyTypeObject tmp = { /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX >= 0x03000000 PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /* ob_size */ #endif (char *)"SwigPyObject", /* tp_name */ sizeof(SwigPyObject), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)SwigPyObject_dealloc, /* tp_dealloc */ (printfunc)SwigPyObject_print, /* tp_print */ #if PY_VERSION_HEX < 0x02020000 (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ #else (getattrfunc)0, /* tp_getattr */ #endif (setattrfunc)0, /* tp_setattr */ #if PY_VERSION_HEX >= 0x03000000 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ #else (cmpfunc)SwigPyObject_compare, /* tp_compare */ #endif (reprfunc)SwigPyObject_repr, /* tp_repr */ &SwigPyObject_as_number, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)0, /* tp_hash */ (ternaryfunc)0, /* tp_call */ (reprfunc)SwigPyObject_str, /* tp_str */ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ swigobject_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ 0, /* tp_weaklistoffset */ #if PY_VERSION_HEX >= 0x02020000 0, /* tp_iter */ 0, /* tp_iternext */ swigobject_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ 0, /* tp_is_gc */ 0, /* tp_bases */ 0, /* tp_mro */ 0, /* tp_cache */ 0, /* tp_subclasses */ 0, /* tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #if PY_VERSION_HEX >= 0x02060000 0, /* tp_version */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; swigpyobject_type = tmp; type_init = 1; #if PY_VERSION_HEX < 0x02020000 swigpyobject_type.ob_type = &PyType_Type; #else if (PyType_Ready(&swigpyobject_type) < 0) return NULL; #endif } return &swigpyobject_type; } SWIGRUNTIME PyObject * SwigPyObject_New(void *ptr, swig_type_info *ty, int own) { SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); if (sobj) { sobj->ptr = ptr; sobj->ty = ty; sobj->own = own; sobj->next = 0; } return (PyObject *)sobj; } /* ----------------------------------------------------------------------------- * Implements a simple Swig Packed type, and use it instead of string * ----------------------------------------------------------------------------- */ typedef struct { PyObject_HEAD void *pack; swig_type_info *ty; size_t size; } SwigPyPacked; SWIGRUNTIME int SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { char result[SWIG_BUFFER_SIZE]; fputs("pack, v->size, 0, sizeof(result))) { fputs("at ", fp); fputs(result, fp); } fputs(v->ty->name,fp); fputs(">", fp); return 0; } SWIGRUNTIME PyObject * SwigPyPacked_repr(SwigPyPacked *v) { char result[SWIG_BUFFER_SIZE]; if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { return SWIG_Python_str_FromFormat("", result, v->ty->name); } else { return SWIG_Python_str_FromFormat("", v->ty->name); } } SWIGRUNTIME PyObject * SwigPyPacked_str(SwigPyPacked *v) { char result[SWIG_BUFFER_SIZE]; if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); } else { return SWIG_Python_str_FromChar(v->ty->name); } } SWIGRUNTIME int SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) { size_t i = v->size; size_t j = w->size; int s = (i < j) ? -1 : ((i > j) ? 1 : 0); return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); } SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); SWIGRUNTIME PyTypeObject* SwigPyPacked_type(void) { static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); return type; } SWIGRUNTIMEINLINE int SwigPyPacked_Check(PyObject *op) { return ((op)->ob_type == SwigPyPacked_TypeOnce()) || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); } SWIGRUNTIME void SwigPyPacked_dealloc(PyObject *v) { if (SwigPyPacked_Check(v)) { SwigPyPacked *sobj = (SwigPyPacked *) v; free(sobj->pack); } PyObject_DEL(v); } SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void) { static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; static PyTypeObject swigpypacked_type; static int type_init = 0; if (!type_init) { const PyTypeObject tmp = { /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX>=0x03000000 PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /* ob_size */ #endif (char *)"SwigPyPacked", /* tp_name */ sizeof(SwigPyPacked), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ (printfunc)SwigPyPacked_print, /* tp_print */ (getattrfunc)0, /* tp_getattr */ (setattrfunc)0, /* tp_setattr */ #if PY_VERSION_HEX>=0x03000000 0, /* tp_reserved in 3.0.1 */ #else (cmpfunc)SwigPyPacked_compare, /* tp_compare */ #endif (reprfunc)SwigPyPacked_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)0, /* tp_hash */ (ternaryfunc)0, /* tp_call */ (reprfunc)SwigPyPacked_str, /* tp_str */ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ swigpacked_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ #if PY_VERSION_HEX >= 0x02020000 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ 0, /* tp_is_gc */ 0, /* tp_bases */ 0, /* tp_mro */ 0, /* tp_cache */ 0, /* tp_subclasses */ 0, /* tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #if PY_VERSION_HEX >= 0x02060000 0, /* tp_version */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; swigpypacked_type = tmp; type_init = 1; #if PY_VERSION_HEX < 0x02020000 swigpypacked_type.ob_type = &PyType_Type; #else if (PyType_Ready(&swigpypacked_type) < 0) return NULL; #endif } return &swigpypacked_type; } SWIGRUNTIME PyObject * SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) { SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); if (sobj) { void *pack = malloc(size); if (pack) { memcpy(pack, ptr, size); sobj->pack = pack; sobj->ty = ty; sobj->size = size; } else { PyObject_DEL((PyObject *) sobj); sobj = 0; } } return (PyObject *) sobj; } SWIGRUNTIME swig_type_info * SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) { if (SwigPyPacked_Check(obj)) { SwigPyPacked *sobj = (SwigPyPacked *)obj; if (sobj->size != size) return 0; memcpy(ptr, sobj->pack, size); return sobj->ty; } else { return 0; } } /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ SWIGRUNTIMEINLINE PyObject * _SWIG_This(void) { return SWIG_Python_str_FromChar("this"); } static PyObject *swig_this = NULL; SWIGRUNTIME PyObject * SWIG_This(void) { if (swig_this == NULL) swig_this = _SWIG_This(); return swig_this; } /* #define SWIG_PYTHON_SLOW_GETSET_THIS */ /* TODO: I don't know how to implement the fast getset in Python 3 right now */ #if PY_VERSION_HEX>=0x03000000 #define SWIG_PYTHON_SLOW_GETSET_THIS #endif SWIGRUNTIME SwigPyObject * SWIG_Python_GetSwigThis(PyObject *pyobj) { PyObject *obj; if (SwigPyObject_Check(pyobj)) return (SwigPyObject *) pyobj; #ifdef SWIGPYTHON_BUILTIN (void)obj; # ifdef PyWeakref_CheckProxy if (PyWeakref_CheckProxy(pyobj)) { pyobj = PyWeakref_GET_OBJECT(pyobj); if (pyobj && SwigPyObject_Check(pyobj)) return (SwigPyObject*) pyobj; } # endif return NULL; #else obj = 0; #if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) if (PyInstance_Check(pyobj)) { obj = _PyInstance_Lookup(pyobj, SWIG_This()); } else { PyObject **dictptr = _PyObject_GetDictPtr(pyobj); if (dictptr != NULL) { PyObject *dict = *dictptr; obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; } else { #ifdef PyWeakref_CheckProxy if (PyWeakref_CheckProxy(pyobj)) { PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; } #endif obj = PyObject_GetAttr(pyobj,SWIG_This()); if (obj) { Py_DECREF(obj); } else { if (PyErr_Occurred()) PyErr_Clear(); return 0; } } } #else obj = PyObject_GetAttr(pyobj,SWIG_This()); if (obj) { Py_DECREF(obj); } else { if (PyErr_Occurred()) PyErr_Clear(); return 0; } #endif if (obj && !SwigPyObject_Check(obj)) { /* a PyObject is called 'this', try to get the 'real this' SwigPyObject from it */ return SWIG_Python_GetSwigThis(obj); } return (SwigPyObject *)obj; #endif } /* Acquire a pointer value */ SWIGRUNTIME int SWIG_Python_AcquirePtr(PyObject *obj, int own) { if (own == SWIG_POINTER_OWN) { SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); if (sobj) { int oldown = sobj->own; sobj->own = own; return oldown; } } return 0; } /* Convert a pointer value */ SWIGRUNTIME int SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { int res; SwigPyObject *sobj; if (!obj) return SWIG_ERROR; if (obj == Py_None) { if (ptr) *ptr = 0; return SWIG_OK; } res = SWIG_ERROR; sobj = SWIG_Python_GetSwigThis(obj); if (own) *own = 0; while (sobj) { void *vptr = sobj->ptr; if (ty) { swig_type_info *to = sobj->ty; if (to == ty) { /* no type cast needed */ if (ptr) *ptr = vptr; break; } else { swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); if (!tc) { sobj = (SwigPyObject *)sobj->next; } else { if (ptr) { int newmemory = 0; *ptr = SWIG_TypeCast(tc,vptr,&newmemory); if (newmemory == SWIG_CAST_NEW_MEMORY) { assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ if (own) *own = *own | SWIG_CAST_NEW_MEMORY; } } break; } } } else { if (ptr) *ptr = vptr; break; } } if (sobj) { if (own) *own = *own | sobj->own; if (flags & SWIG_POINTER_DISOWN) { sobj->own = 0; } res = SWIG_OK; } else { if (flags & SWIG_POINTER_IMPLICIT_CONV) { SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; if (data && !data->implicitconv) { PyObject *klass = data->klass; if (klass) { PyObject *impconv; data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ impconv = SWIG_Python_CallFunctor(klass, obj); data->implicitconv = 0; if (PyErr_Occurred()) { PyErr_Clear(); impconv = 0; } if (impconv) { SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); if (iobj) { void *vptr; res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); if (SWIG_IsOK(res)) { if (ptr) { *ptr = vptr; /* transfer the ownership to 'ptr' */ iobj->own = 0; res = SWIG_AddCast(res); res = SWIG_AddNewMask(res); } else { res = SWIG_AddCast(res); } } } Py_DECREF(impconv); } } } } } return res; } /* Convert a function ptr value */ SWIGRUNTIME int SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { if (!PyCFunction_Check(obj)) { return SWIG_ConvertPtr(obj, ptr, ty, 0); } else { void *vptr = 0; /* here we get the method pointer for callbacks */ const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; if (desc) desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; if (!desc) return SWIG_ERROR; if (ty) { swig_cast_info *tc = SWIG_TypeCheck(desc,ty); if (tc) { int newmemory = 0; *ptr = SWIG_TypeCast(tc,vptr,&newmemory); assert(!newmemory); /* newmemory handling not yet implemented */ } else { return SWIG_ERROR; } } else { *ptr = vptr; } return SWIG_OK; } } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); if (!to) return SWIG_ERROR; if (ty) { if (to != ty) { /* check type cast? */ swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); if (!tc) return SWIG_ERROR; } } return SWIG_OK; } /* ----------------------------------------------------------------------------- * Create a new pointer object * ----------------------------------------------------------------------------- */ /* Create a new instance object, without calling __init__, and set the 'this' attribute. */ SWIGRUNTIME PyObject* SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) { #if (PY_VERSION_HEX >= 0x02020000) PyObject *inst = 0; PyObject *newraw = data->newraw; if (newraw) { inst = PyObject_Call(newraw, data->newargs, NULL); if (inst) { #if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) PyObject **dictptr = _PyObject_GetDictPtr(inst); if (dictptr != NULL) { PyObject *dict = *dictptr; if (dict == NULL) { dict = PyDict_New(); *dictptr = dict; PyDict_SetItem(dict, SWIG_This(), swig_this); } } #else PyObject *key = SWIG_This(); PyObject_SetAttr(inst, key, swig_this); #endif } } else { #if PY_VERSION_HEX >= 0x03000000 inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); PyObject_SetAttr(inst, SWIG_This(), swig_this); Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; #else PyObject *dict = PyDict_New(); PyDict_SetItem(dict, SWIG_This(), swig_this); inst = PyInstance_NewRaw(data->newargs, dict); Py_DECREF(dict); #endif } return inst; #else #if (PY_VERSION_HEX >= 0x02010000) PyObject *inst; PyObject *dict = PyDict_New(); PyDict_SetItem(dict, SWIG_This(), swig_this); inst = PyInstance_NewRaw(data->newargs, dict); Py_DECREF(dict); return (PyObject *) inst; #else PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); if (inst == NULL) { return NULL; } inst->in_class = (PyClassObject *)data->newargs; Py_INCREF(inst->in_class); inst->in_dict = PyDict_New(); if (inst->in_dict == NULL) { Py_DECREF(inst); return NULL; } #ifdef Py_TPFLAGS_HAVE_WEAKREFS inst->in_weakreflist = NULL; #endif #ifdef Py_TPFLAGS_GC PyObject_GC_Init(inst); #endif PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); return (PyObject *) inst; #endif #endif } SWIGRUNTIME void SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) { PyObject *dict; #if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) PyObject **dictptr = _PyObject_GetDictPtr(inst); if (dictptr != NULL) { dict = *dictptr; if (dict == NULL) { dict = PyDict_New(); *dictptr = dict; } PyDict_SetItem(dict, SWIG_This(), swig_this); return; } #endif dict = PyObject_GetAttrString(inst, (char*)"__dict__"); PyDict_SetItem(dict, SWIG_This(), swig_this); Py_DECREF(dict); } SWIGINTERN PyObject * SWIG_Python_InitShadowInstance(PyObject *args) { PyObject *obj[2]; if (!SWIG_Python_UnpackTuple(args,(char*)"swiginit", 2, 2, obj)) { return NULL; } else { SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); if (sthis) { SwigPyObject_append((PyObject*) sthis, obj[1]); } else { SWIG_Python_SetSwigThis(obj[0], obj[1]); } return SWIG_Py_Void(); } } /* Create a new pointer object */ SWIGRUNTIME PyObject * SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { SwigPyClientData *clientdata; PyObject * robj; int own; if (!ptr) return SWIG_Py_Void(); clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; if (clientdata && clientdata->pytype) { SwigPyObject *newobj; if (flags & SWIG_BUILTIN_TP_INIT) { newobj = (SwigPyObject*) self; if (newobj->ptr) { PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); while (newobj->next) newobj = (SwigPyObject *) newobj->next; newobj->next = next_self; newobj = (SwigPyObject *)next_self; } } else { newobj = PyObject_New(SwigPyObject, clientdata->pytype); } if (newobj) { newobj->ptr = ptr; newobj->ty = type; newobj->own = own; newobj->next = 0; #ifdef SWIGPYTHON_BUILTIN newobj->dict = 0; #endif return (PyObject*) newobj; } return SWIG_Py_Void(); } assert(!(flags & SWIG_BUILTIN_TP_INIT)); robj = SwigPyObject_New(ptr, type, own); if (clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); if (inst) { Py_DECREF(robj); robj = inst; } } return robj; } /* Create a new packed object */ SWIGRUNTIMEINLINE PyObject * SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); } /* -----------------------------------------------------------------------------* * Get type list * -----------------------------------------------------------------------------*/ #ifdef SWIG_LINK_RUNTIME void *SWIG_ReturnGlobalTypeList(void *); #endif SWIGRUNTIME swig_module_info * SWIG_Python_GetModule(void) { static void *type_pointer = (void *)0; /* first check if module already created */ if (!type_pointer) { #ifdef SWIG_LINK_RUNTIME type_pointer = SWIG_ReturnGlobalTypeList((void *)0); #else # ifdef SWIGPY_USE_CAPSULE type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); # else type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); # endif if (PyErr_Occurred()) { PyErr_Clear(); type_pointer = (void *)0; } #endif } return (swig_module_info *) type_pointer; } #if PY_MAJOR_VERSION < 2 /* PyModule_AddObject function was introduced in Python 2.0. The following function is copied out of Python/modsupport.c in python version 2.3.4 */ SWIGINTERN int PyModule_AddObject(PyObject *m, char *name, PyObject *o) { PyObject *dict; if (!PyModule_Check(m)) { PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs module as first arg"); return SWIG_ERROR; } if (!o) { PyErr_SetString(PyExc_TypeError, "PyModule_AddObject() needs non-NULL value"); return SWIG_ERROR; } dict = PyModule_GetDict(m); if (dict == NULL) { /* Internal error -- modules must have a dict! */ PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", PyModule_GetName(m)); return SWIG_ERROR; } if (PyDict_SetItemString(dict, name, o)) return SWIG_ERROR; Py_DECREF(o); return SWIG_OK; } #endif SWIGRUNTIME void #ifdef SWIGPY_USE_CAPSULE SWIG_Python_DestroyModule(PyObject *obj) #else SWIG_Python_DestroyModule(void *vptr) #endif { #ifdef SWIGPY_USE_CAPSULE swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); #else swig_module_info *swig_module = (swig_module_info *) vptr; #endif swig_type_info **types = swig_module->types; size_t i; for (i =0; i < swig_module->size; ++i) { swig_type_info *ty = types[i]; if (ty->owndata) { SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; if (data) SwigPyClientData_Del(data); } } Py_DECREF(SWIG_This()); swig_this = NULL; } SWIGRUNTIME void SWIG_Python_SetModule(swig_module_info *swig_module) { #if PY_VERSION_HEX >= 0x03000000 /* Add a dummy module object into sys.modules */ PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); #else static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); #endif #ifdef SWIGPY_USE_CAPSULE PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); if (pointer && module) { PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); } else { Py_XDECREF(pointer); } #else PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); if (pointer && module) { PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); } else { Py_XDECREF(pointer); } #endif } /* The python cached type query */ SWIGRUNTIME PyObject * SWIG_Python_TypeCache(void) { static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); return cache; } SWIGRUNTIME swig_type_info * SWIG_Python_TypeQuery(const char *type) { PyObject *cache = SWIG_Python_TypeCache(); PyObject *key = SWIG_Python_str_FromChar(type); PyObject *obj = PyDict_GetItem(cache, key); swig_type_info *descriptor; if (obj) { #ifdef SWIGPY_USE_CAPSULE descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); #else descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); #endif } else { swig_module_info *swig_module = SWIG_Python_GetModule(); descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); if (descriptor) { #ifdef SWIGPY_USE_CAPSULE obj = PyCapsule_New((void*) descriptor, NULL, NULL); #else obj = PyCObject_FromVoidPtr(descriptor, NULL); #endif PyDict_SetItem(cache, key, obj); Py_DECREF(obj); } } Py_DECREF(key); return descriptor; } /* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 #define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) #define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) SWIGRUNTIME int SWIG_Python_AddErrMesg(const char* mesg, int infront) { if (PyErr_Occurred()) { PyObject *type = 0; PyObject *value = 0; PyObject *traceback = 0; PyErr_Fetch(&type, &value, &traceback); if (value) { char *tmp; PyObject *old_str = PyObject_Str(value); Py_XINCREF(type); PyErr_Clear(); if (infront) { PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); } else { PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); } SWIG_Python_str_DelForPy3(tmp); Py_DECREF(old_str); } return 1; } else { return 0; } } SWIGRUNTIME int SWIG_Python_ArgFail(int argnum) { if (PyErr_Occurred()) { /* add information about failing argument */ char mesg[256]; PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); return SWIG_Python_AddErrMesg(mesg, 1); } else { return 0; } } SWIGRUNTIMEINLINE const char * SwigPyObject_GetDesc(PyObject *self) { SwigPyObject *v = (SwigPyObject *)self; swig_type_info *ty = v ? v->ty : 0; return ty ? ty->str : (char*)""; } SWIGRUNTIME void SWIG_Python_TypeError(const char *type, PyObject *obj) { if (type) { #if defined(SWIG_COBJECT_TYPES) if (obj && SwigPyObject_Check(obj)) { const char *otype = (const char *) SwigPyObject_GetDesc(obj); if (otype) { PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", type, otype); return; } } else #endif { const char *otype = (obj ? obj->ob_type->tp_name : 0); if (otype) { PyObject *str = PyObject_Str(obj); const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; if (cstr) { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", type, otype, cstr); SWIG_Python_str_DelForPy3(cstr); } else { PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", type, otype); } Py_XDECREF(str); return; } } PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); } else { PyErr_Format(PyExc_TypeError, "unexpected type is received"); } } /* Convert a pointer value, signal an exception on a type mismatch */ SWIGRUNTIME void * SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { void *result; if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { PyErr_Clear(); #if SWIG_POINTER_EXCEPTION if (flags) { SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); SWIG_Python_ArgFail(argnum); } #endif } return result; } SWIGRUNTIME int SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { PyTypeObject *tp = obj->ob_type; PyObject *descr; PyObject *encoded_name; descrsetfunc f; int res; #ifdef Py_USING_UNICODE if (PyString_Check(name)) { name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); if (!name) return -1; } else if (!PyUnicode_Check(name)) #else if (!PyString_Check(name)) #endif { PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); return -1; } else { Py_INCREF(name); } if (!tp->tp_dict) { if (PyType_Ready(tp) < 0) goto done; } res = -1; descr = _PyType_Lookup(tp, name); f = NULL; if (descr != NULL) f = descr->ob_type->tp_descr_set; if (!f) { if (PyString_Check(name)) { encoded_name = name; Py_INCREF(name); } else { encoded_name = PyUnicode_AsUTF8String(name); } PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); Py_DECREF(encoded_name); } else { res = f(descr, obj, value); } done: Py_DECREF(name); return res; } #ifdef __cplusplus } #endif #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else #define SWIG_exception(code, msg) do { SWIG_Error(code, msg); SWIG_fail;; } while(0) /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_GeosCoordinateSequence swig_types[0] #define SWIGTYPE_p_GeosGeometry swig_types[1] #define SWIGTYPE_p_GeosGeometryCollection swig_types[2] #define SWIGTYPE_p_GeosIndexItem swig_types[3] #define SWIGTYPE_p_GeosLineString swig_types[4] #define SWIGTYPE_p_GeosLinearRing swig_types[5] #define SWIGTYPE_p_GeosMultiLineString swig_types[6] #define SWIGTYPE_p_GeosMultiLinearRing swig_types[7] #define SWIGTYPE_p_GeosMultiPoint swig_types[8] #define SWIGTYPE_p_GeosMultiPolygon swig_types[9] #define SWIGTYPE_p_GeosPoint swig_types[10] #define SWIGTYPE_p_GeosPolygon swig_types[11] #define SWIGTYPE_p_GeosPreparedGeometry swig_types[12] #define SWIGTYPE_p_GeosQueryCallback swig_types[13] #define SWIGTYPE_p_GeosSTRtree swig_types[14] #define SWIGTYPE_p_GeosWkbReader swig_types[15] #define SWIGTYPE_p_GeosWkbWriter swig_types[16] #define SWIGTYPE_p_GeosWktReader swig_types[17] #define SWIGTYPE_p_GeosWktWriter swig_types[18] #define SWIGTYPE_p_char swig_types[19] #define SWIGTYPE_p_p_GeosLinearRing swig_types[20] #define SWIGTYPE_p_size_t swig_types[21] #define SWIGTYPE_p_std__invalid_argument swig_types[22] #define SWIGTYPE_p_swig__SwigPyIterator swig_types[23] #define SWIGTYPE_p_unsigned_char swig_types[24] static swig_type_info *swig_types[26]; static swig_module_info swig_module = {swig_types, 25, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ #if (PY_VERSION_HEX <= 0x02000000) # if !defined(SWIG_PYTHON_CLASSIC) # error "This python version requires swig to be run with the '-classic' option" # endif #endif #if (PY_VERSION_HEX <= 0x02020000) # error "This python version requires swig to be run with the '-nomodern' option" #endif #if (PY_VERSION_HEX <= 0x02020000) # error "This python version requires swig to be run with the '-nomodernargs' option" #endif /*----------------------------------------------- @(target):= _geos.so ------------------------------------------------*/ #if PY_VERSION_HEX >= 0x03000000 # define SWIG_init PyInit__geos #else # define SWIG_init init_geos #endif #define SWIG_name "_geos" #define SWIGVERSION 0x020004 #define SWIG_VERSION SWIGVERSION #define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) #include namespace swig { class SwigPtr_PyObject { protected: PyObject *_obj; public: SwigPtr_PyObject() :_obj(0) { } SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj) { Py_XINCREF(_obj); } SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj) { if (initial_ref) { Py_XINCREF(_obj); } } SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) { Py_XINCREF(item._obj); Py_XDECREF(_obj); _obj = item._obj; return *this; } ~SwigPtr_PyObject() { Py_XDECREF(_obj); } operator PyObject *() const { return _obj; } PyObject *operator->() const { return _obj; } }; } namespace swig { struct SwigVar_PyObject : SwigPtr_PyObject { SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { } SwigVar_PyObject & operator = (PyObject* obj) { Py_XDECREF(_obj); _obj = obj; return *this; } }; } #include #include #if PY_VERSION_HEX >= 0x03020000 # define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj)) #else # define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj)) #endif #include #if defined(__GNUC__) # if __GNUC__ == 2 && __GNUC_MINOR <= 96 # define SWIG_STD_NOMODERN_STL # endif #endif #include #include #include namespace swig { struct stop_iteration { }; struct SwigPyIterator { private: SwigPtr_PyObject _seq; protected: SwigPyIterator(PyObject *seq) : _seq(seq) { } public: virtual ~SwigPyIterator() {} // Access iterator method, required by Python virtual PyObject *value() const = 0; // Forward iterator method, required by Python virtual SwigPyIterator *incr(size_t n = 1) = 0; // Backward iterator method, very common in C++, but not required in Python virtual SwigPyIterator *decr(size_t /*n*/ = 1) { throw stop_iteration(); } // Random access iterator methods, but not required in Python virtual ptrdiff_t distance(const SwigPyIterator &/*x*/) const { throw std::invalid_argument("operation not supported"); } virtual bool equal (const SwigPyIterator &/*x*/) const { throw std::invalid_argument("operation not supported"); } // C++ common/needed methods virtual SwigPyIterator *copy() const = 0; PyObject *next() { SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads PyObject *obj = value(); incr(); SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads return obj; } /* Make an alias for Python 3.x */ PyObject *__next__() { return next(); } PyObject *previous() { SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads decr(); PyObject *obj = value(); SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads return obj; } SwigPyIterator *advance(ptrdiff_t n) { return (n > 0) ? incr(n) : decr(-n); } bool operator == (const SwigPyIterator& x) const { return equal(x); } bool operator != (const SwigPyIterator& x) const { return ! operator==(x); } SwigPyIterator& operator += (ptrdiff_t n) { return *advance(n); } SwigPyIterator& operator -= (ptrdiff_t n) { return *advance(-n); } SwigPyIterator* operator + (ptrdiff_t n) const { return copy()->advance(n); } SwigPyIterator* operator - (ptrdiff_t n) const { return copy()->advance(-n); } ptrdiff_t operator - (const SwigPyIterator& x) const { return x.distance(*this); } static swig_type_info* descriptor() { static int init = 0; static swig_type_info* desc = 0; if (!init) { desc = SWIG_TypeQuery("swig::SwigPyIterator *"); init = 1; } return desc; } }; #if defined(SWIGPYTHON_BUILTIN) inline PyObject* make_output_iterator_builtin (PyObject *pyself) { Py_INCREF(pyself); return pyself; } #endif } SWIGINTERN int SWIG_AsVal_double (PyObject *obj, double *val) { int res = SWIG_TypeError; if (PyFloat_Check(obj)) { if (val) *val = PyFloat_AsDouble(obj); return SWIG_OK; } else if (PyInt_Check(obj)) { if (val) *val = PyInt_AsLong(obj); return SWIG_OK; } else if (PyLong_Check(obj)) { double v = PyLong_AsDouble(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_OK; } else { PyErr_Clear(); } } #ifdef SWIG_PYTHON_CAST_MODE { int dispatch = 0; double d = PyFloat_AsDouble(obj); if (!PyErr_Occurred()) { if (val) *val = d; return SWIG_AddCast(SWIG_OK); } else { PyErr_Clear(); } if (!dispatch) { long v = PyLong_AsLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); } else { PyErr_Clear(); } } } #endif return res; } #include #include SWIGINTERNINLINE int SWIG_CanCastAsInteger(double *d, double min, double max) { double x = *d; if ((min <= x && x <= max)) { double fx = floor(x); double cx = ceil(x); double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ if ((errno == EDOM) || (errno == ERANGE)) { errno = 0; } else { double summ, reps, diff; if (rd < x) { diff = x - rd; } else if (rd > x) { diff = rd - x; } else { return 1; } summ = rd + x; reps = diff/summ; if (reps < 8*DBL_EPSILON) { *d = rd; return 1; } } } return 0; } SWIGINTERN int SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) { if (PyInt_Check(obj)) { long v = PyInt_AsLong(obj); if (v >= 0) { if (val) *val = v; return SWIG_OK; } else { return SWIG_OverflowError; } } else if (PyLong_Check(obj)) { unsigned long v = PyLong_AsUnsignedLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_OK; } else { PyErr_Clear(); } } #ifdef SWIG_PYTHON_CAST_MODE { int dispatch = 0; unsigned long v = PyLong_AsUnsignedLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_AddCast(SWIG_OK); } else { PyErr_Clear(); } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { if (val) *val = (unsigned long)(d); return res; } } } #endif return SWIG_TypeError; } SWIGINTERNINLINE int SWIG_AsVal_size_t (PyObject * obj, size_t *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v); return res; } #define SWIG_From_long PyInt_FromLong SWIGINTERNINLINE PyObject * SWIG_From_ptrdiff_t (ptrdiff_t value) { return SWIG_From_long (static_cast< long >(value)); } SWIGINTERNINLINE PyObject* SWIG_From_bool (bool value) { return PyBool_FromLong(value ? 1 : 0); } SWIGINTERN int SWIG_AsVal_long (PyObject *obj, long* val) { if (PyInt_Check(obj)) { if (val) *val = PyInt_AsLong(obj); return SWIG_OK; } else if (PyLong_Check(obj)) { long v = PyLong_AsLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_OK; } else { PyErr_Clear(); } } #ifdef SWIG_PYTHON_CAST_MODE { int dispatch = 0; long v = PyInt_AsLong(obj); if (!PyErr_Occurred()) { if (val) *val = v; return SWIG_AddCast(SWIG_OK); } else { PyErr_Clear(); } if (!dispatch) { double d; int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { if (val) *val = (long)(d); return res; } } } #endif return SWIG_TypeError; } SWIGINTERNINLINE int SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val) { long v; int res = SWIG_AsVal_long (obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v); return res; } #include #include #include #include "geos_c.h" /* Needed for va_start, etc. */ #include SWIGINTERNINLINE PyObject * SWIG_From_int (int value) { return SWIG_From_long (value); } SWIGINTERN swig_type_info* SWIG_pchar_descriptor(void) { static int init = 0; static swig_type_info* info = 0; if (!init) { info = SWIG_TypeQuery("_p_char"); init = 1; } return info; } SWIGINTERNINLINE PyObject * SWIG_FromCharPtrAndSize(const char* carray, size_t size) { if (carray) { if (size > INT_MAX) { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); return pchar_descriptor ? SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void(); } else { #if PY_VERSION_HEX >= 0x03000000 return PyUnicode_FromStringAndSize(carray, static_cast< int >(size)); #else return PyString_FromStringAndSize(carray, static_cast< int >(size)); #endif } } else { return SWIG_Py_Void(); } } SWIGINTERNINLINE PyObject * SWIG_FromCharPtr(const char *cptr) { return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); } static const int DEFAULT_QUADRANT_SEGMENTS=8; /* This is not thread safe ! */ static const int MESSAGE_SIZE = 1000; static char message[MESSAGE_SIZE]; void noticeHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } void errorHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } typedef void GeosCoordinateSequence; void checkCoordSeqBounds(const GEOSCoordSeq coordSeq, const size_t index) { unsigned int size = 0; GEOSCoordSeq_getSize(coordSeq, &size); if (index < 0 || index >= size) throw std::runtime_error("Index out of bounds"); } SWIGINTERN GeosCoordinateSequence *new_GeosCoordinateSequence(size_t size,size_t dims){ return (GeosCoordinateSequence*) GEOSCoordSeq_create(size, dims); } SWIGINTERN void delete_GeosCoordinateSequence(GeosCoordinateSequence *self){ GEOSCoordSeq coords = (GEOSCoordSeq) self; return GEOSCoordSeq_destroy(coords); } SWIGINTERN GeosCoordinateSequence *GeosCoordinateSequence_clone(GeosCoordinateSequence *self){ GEOSCoordSeq coords = (GEOSCoordSeq) self; return (GeosCoordinateSequence*) GEOSCoordSeq_clone(coords); } SWIGINTERN int GeosCoordinateSequence_setX(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setX(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setY(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setY(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setZ(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setZ(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setOrdinate(GeosCoordinateSequence *self,size_t idx,size_t dim,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setOrdinate(coords, idx, dim, val); } SWIGINTERN double GeosCoordinateSequence_getX(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getX(coords, idx, &result); return result; } #define SWIG_From_double PyFloat_FromDouble SWIGINTERN double GeosCoordinateSequence_getY(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getY(coords, idx, &result); return result; } SWIGINTERN double GeosCoordinateSequence_getZ(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getZ(coords, idx, &result); return result; } SWIGINTERN double GeosCoordinateSequence_getOrdinate(GeosCoordinateSequence *self,size_t idx,size_t dim){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getOrdinate(coords, idx, dim, &result); return result; } SWIGINTERN unsigned int GeosCoordinateSequence_getSize(GeosCoordinateSequence *self){ unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getSize(coords, &result); return result; } SWIGINTERNINLINE PyObject* SWIG_From_unsigned_SS_long (unsigned long value) { return (value > LONG_MAX) ? PyLong_FromUnsignedLong(value) : PyInt_FromLong(static_cast< long >(value)); } SWIGINTERNINLINE PyObject * SWIG_From_unsigned_SS_int (unsigned int value) { return SWIG_From_unsigned_SS_long (value); } SWIGINTERN unsigned int GeosCoordinateSequence_getDimensions(GeosCoordinateSequence *self){ unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getDimensions(coords, &result); return result; } typedef void GeosGeometry; typedef void GeosPoint; typedef void GeosLineString; typedef void GeosLinearRing; typedef void GeosPolygon; typedef void GeosGeometryCollection; typedef void GeosMultiPoint; typedef void GeosMultiLineString; typedef void GeosMultiLinearRing; typedef void GeosMultiPolygon; typedef void GeosWktReader; typedef void GeosWktWriter; typedef void GeosWkbReader; typedef void GeosWkbWriter; bool checkBoolResult(char result) { int intResult = (int) result; if (intResult == 1) return true; else if (intResult == 0) return false; else throw std::runtime_error(message); } SWIGINTERN void delete_GeosGeometry(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosGeometry *GeosGeometry_clone(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_clone(geom); } SWIGINTERN char *GeosGeometry_geomType(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeomType(geom); } SWIGINTERN int GeosGeometry_typeId(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeomTypeId(geom); } SWIGINTERN void GeosGeometry_normalize(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; int result = GEOSNormalize(geom); if (result == -1) throw std::runtime_error(message); } SWIGINTERN int GeosGeometry_getSRID(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGetSRID(geom); } #include #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) # define LLONG_MAX __LONG_LONG_MAX__ # define LLONG_MIN (-LLONG_MAX - 1LL) # define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) # endif #endif SWIGINTERN int SWIG_AsVal_int (PyObject * obj, int *val) { long v; int res = SWIG_AsVal_long (obj, &v); if (SWIG_IsOK(res)) { if ((v < INT_MIN || v > INT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = static_cast< int >(v); } } return res; } SWIGINTERN void GeosGeometry_setSRID(GeosGeometry *self,int SRID){ GEOSGeom geom = (GEOSGeom) self; return GEOSSetSRID(geom, SRID); } SWIGINTERN size_t GeosGeometry_getDimensions(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_getDimensions(geom); } SWIGINTERNINLINE PyObject * SWIG_From_size_t (size_t value) { return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value)); } SWIGINTERN size_t GeosGeometry_getNumGeometries(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumGeometries(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } SWIGINTERN GeosGeometry *GeosGeometry_intersection(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSIntersection(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_buffer(GeosGeometry *self,double width,int quadsegs){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBuffer(geom, width, quadsegs); } SWIGINTERN GeosGeometry *GeosGeometry_convexHull(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSConvexHull(geom); } SWIGINTERN GeosGeometry *GeosGeometry_difference(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSDifference(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_symDifference(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSSymDifference(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_boundary(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBoundary(geom); } SWIGINTERN GeosGeometry *GeosGeometry_geomUnion(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSUnion(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_pointOnSurface(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSPointOnSurface(geom); } SWIGINTERN GeosGeometry *GeosGeometry_getCentroid(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSGetCentroid(geom); } SWIGINTERN GeosGeometry *GeosGeometry_getEnvelope(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSEnvelope(geom); } SWIGINTERN char *GeosGeometry_relate(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return GEOSRelate(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_lineMerge(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSLineMerge(geom); } SWIGINTERN GeosGeometry *GeosGeometry_simplify(GeosGeometry *self,double tolerance){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSSimplify(geom, tolerance); } SWIGINTERN GeosGeometry *GeosGeometry_topologyPreserveSimplify(GeosGeometry *self,double tolerance){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSTopologyPreserveSimplify(geom, tolerance); } SWIGINTERN int SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) { #if PY_VERSION_HEX>=0x03000000 if (PyUnicode_Check(obj)) #else if (PyString_Check(obj)) #endif { char *cstr; Py_ssize_t len; #if PY_VERSION_HEX>=0x03000000 if (!alloc && cptr) { /* We can't allow converting without allocation, since the internal representation of string in Python 3 is UCS-2/UCS-4 but we require a UTF-8 representation. TODO(bhy) More detailed explanation */ return SWIG_RuntimeError; } obj = PyUnicode_AsUTF8String(obj); PyBytes_AsStringAndSize(obj, &cstr, &len); if(alloc) *alloc = SWIG_NEWOBJ; #else PyString_AsStringAndSize(obj, &cstr, &len); #endif if (cptr) { if (alloc) { /* In python the user should not be able to modify the inner string representation. To warranty that, if you define SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string buffer is always returned. The default behavior is just to return the pointer value, so, be careful. */ #if defined(SWIG_PYTHON_SAFE_CSTRINGS) if (*alloc != SWIG_OLDOBJ) #else if (*alloc == SWIG_NEWOBJ) #endif { *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); *alloc = SWIG_NEWOBJ; } else { *cptr = cstr; *alloc = SWIG_OLDOBJ; } } else { #if PY_VERSION_HEX>=0x03000000 assert(0); /* Should never reach here in Python 3 */ #endif *cptr = SWIG_Python_str_AsChar(obj); } } if (psize) *psize = len + 1; #if PY_VERSION_HEX>=0x03000000 Py_XDECREF(obj); #endif return SWIG_OK; } else { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); if (pchar_descriptor) { void* vptr = 0; if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { if (cptr) *cptr = (char *) vptr; if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; if (alloc) *alloc = SWIG_OLDOBJ; return SWIG_OK; } } } return SWIG_TypeError; } SWIGINTERN bool GeosGeometry_relatePattern(GeosGeometry *self,GeosGeometry const *other,char const *pat){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSRelatePattern(geom, otherGeom, pat)); } SWIGINTERN bool GeosGeometry_disjoint(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSDisjoint(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_touches(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSTouches(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_intersects(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSIntersects(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_crosses(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSCrosses(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_within(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSWithin(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_contains(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSContains(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_overlaps(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSOverlaps(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_equals(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEquals(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_equalsExact(GeosGeometry *self,GeosGeometry const *other,double tolerance){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEqualsExact(geom, otherGeom, tolerance)); } SWIGINTERN bool GeosGeometry_isEmpty(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisEmpty(geom)); } SWIGINTERN bool GeosGeometry_isValid(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisValid(geom)); } SWIGINTERN bool GeosGeometry_isSimple(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisSimple(geom)); } SWIGINTERN bool GeosGeometry_isRing(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisRing(geom)); } SWIGINTERN bool GeosGeometry_hasZ(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSHasZ(geom)); } SWIGINTERN double GeosGeometry_area(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSArea(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN double GeosGeometry_length(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSLength(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN double GeosGeometry_distance(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; double result; int code = GEOSDistance(geom, otherGeom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN void delete_GeosPoint(GeosPoint *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosCoordinateSequence const *GeosPoint_getCoordSeq(GeosPoint *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN void delete_GeosLineString(GeosLineString *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosCoordinateSequence const *GeosLineString_getCoordSeq(GeosLineString *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN void delete_GeosLinearRing(GeosLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosCoordinateSequence const *GeosLinearRing_getCoordSeq(GeosLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN void delete_GeosPolygon(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosGeometry const *GeosPolygon_getExteriorRing(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetExteriorRing(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } SWIGINTERN size_t GeosPolygon_getNumInteriorRings(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumInteriorRings(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } SWIGINTERN GeosGeometry const *GeosPolygon_getInteriorRingN(GeosPolygon *self,size_t n){ GEOSGeom geom = (GEOSGeom) self; size_t size = GEOSGetNumInteriorRings(geom); if (n < 0 || n >= size) throw std::runtime_error("Index out of bounds"); const GEOSGeom result = (const GEOSGeom) GEOSGetInteriorRingN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } SWIGINTERN void delete_GeosGeometryCollection(GeosGeometryCollection *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN GeosGeometry const *GeosGeometryCollection_getGeometryN(GeosGeometryCollection *self,size_t n){ GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetGeometryN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } SWIGINTERN void delete_GeosMultiPoint(GeosMultiPoint *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void delete_GeosMultiLineString(GeosMultiLineString *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void delete_GeosMultiLinearRing(GeosMultiLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void delete_GeosMultiPolygon(GeosMultiPolygon *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } GeosGeometry *createPoint(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createPoint(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLineString(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLineString(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLinearRing(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLinearRing(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createPolygon(GeosLinearRing *shell, GeosLinearRing **holes, size_t nholes) { GEOSGeom shellGeom = (GEOSGeom) shell; GEOSGeom* holeGeoms = (GEOSGeom*) holes; GEOSGeom geom = GEOSGeom_createPolygon(shellGeom, holeGeoms, nholes); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } typedef void GeosPreparedGeometry; SWIGINTERN GeosPreparedGeometry *new_GeosPreparedGeometry(GeosGeometry const *source){ const GEOSPreparedGeometry *prep = GEOSPrepare((const GEOSGeometry *)source); if(prep == NULL) throw std::runtime_error(message); return (GeosPreparedGeometry *) prep; } SWIGINTERN void delete_GeosPreparedGeometry(GeosPreparedGeometry *self){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; return GEOSPreparedGeom_destroy(prep); } SWIGINTERN bool GeosPreparedGeometry_contains(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContains(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_containsProperly(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContainsProperly(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_covers(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedCovers(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_intersects(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedIntersects(prep, otherGeom)); } typedef void GeosSTRtree; /* GeosIndexItem typedef'd here so it can be %typemap(typecheck)'d as a native object by each language specially */ typedef void *GeosIndexItem; typedef GEOSQueryCallback GeosQueryCallback; SWIGINTERN GeosSTRtree *new_GeosSTRtree(int nodeCapacity){ GEOSSTRtree *tree = GEOSSTRtree_create(nodeCapacity); if(tree == NULL) throw std::runtime_error(message); return (GeosSTRtree *) tree; } SWIGINTERN void delete_GeosSTRtree(GeosSTRtree *self){ GEOSSTRtree *tree = (GEOSSTRtree *) self; return GEOSSTRtree_destroy(tree); } SWIGINTERN void GeosSTRtree_insert(GeosSTRtree *self,GeosGeometry const *g,GeosIndexItem item){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_insert(tree, geom, item); } SWIGINTERN void GeosSTRtree_remove(GeosSTRtree *self,GeosGeometry const *g,GeosIndexItem item){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_remove(tree, geom, item); } SWIGINTERN void GeosSTRtree_query(GeosSTRtree *self,GeosGeometry const *g,GeosQueryCallback callback,GeosIndexItem accumulator){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_query(tree, geom, callback, accumulator); } SWIGINTERN void GeosSTRtree_iterate(GeosSTRtree *self,GeosQueryCallback callback,GeosIndexItem accumulator){ GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, callback, accumulator); } SWIGINTERN GeosWktReader *new_GeosWktReader(){ return GEOSWKTReader_create(); } SWIGINTERN void delete_GeosWktReader(GeosWktReader *self){ GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSWKTReader_destroy(reader); } SWIGINTERN GeosGeometry *GeosWktReader_read(GeosWktReader *self,char const *wkt){ if(wkt == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSGeometry *geom = GEOSWKTReader_read(reader, wkt); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosWktWriter *new_GeosWktWriter(){ return GEOSWKTWriter_create(); } SWIGINTERN void delete_GeosWktWriter(GeosWktWriter *self){ GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSWKTWriter_destroy(writer); } SWIGINTERN char *GeosWktWriter_write(GeosWktWriter *self,GeosGeometry const *g){ GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKTWriter_write(writer, geom); } SWIGINTERN GeosWkbReader *new_GeosWkbReader(){ return GEOSWKBReader_create(); } SWIGINTERN void delete_GeosWkbReader(GeosWkbReader *self){ GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSWKBReader_destroy(reader); } SWIGINTERN GeosGeometry *GeosWkbReader_read(GeosWkbReader *self,unsigned char const *wkb,size_t size){ if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_read(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosGeometry *GeosWkbReader_readHEX(GeosWkbReader *self,unsigned char const *wkb,size_t size){ if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_readHEX(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosWkbWriter *new_GeosWkbWriter(){ return GEOSWKBWriter_create(); } SWIGINTERN void delete_GeosWkbWriter(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_destroy(writer); } SWIGINTERN int GeosWkbWriter_getOutputDimension(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getOutputDimension(writer); } SWIGINTERN void GeosWkbWriter_setOutputDimension(GeosWkbWriter *self,int newDimension){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_setOutputDimension(writer, newDimension); } SWIGINTERN int GeosWkbWriter_getByteOrder(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getByteOrder(writer); } SWIGINTERN void GeosWkbWriter_setByteOrder(GeosWkbWriter *self,int newByteOrder){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setByteOrder(writer, newByteOrder); } SWIGINTERN bool GeosWkbWriter_getIncludeSRID(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getIncludeSRID(writer); } SWIGINTERN int SWIG_AsVal_bool (PyObject *obj, bool *val) { int r = PyObject_IsTrue(obj); if (r == -1) return SWIG_ERROR; if (val) *val = r ? true : false; return SWIG_OK; } SWIGINTERN void GeosWkbWriter_setIncludeSRID(GeosWkbWriter *self,bool newIncludeSRID){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setIncludeSRID(writer, newIncludeSRID); } SWIGINTERN unsigned char *GeosWkbWriter_write(GeosWkbWriter *self,GeosGeometry const *g,size_t *size){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_write(writer, geom, size); } SWIGINTERN unsigned char *GeosWkbWriter_writeHEX(GeosWkbWriter *self,GeosGeometry const *g,size_t *size){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_writeHEX(writer, geom, size); } #ifdef __cplusplus extern "C" { #endif SWIGINTERN PyObject *_wrap_delete_SwigPyIterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_SwigPyIterator",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); delete arg1; resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_value",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = result; return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_incr",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); try { result = (swig::SwigPyIterator *)(arg1)->incr(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_incr",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (swig::SwigPyIterator *)(arg1)->incr(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; for (ii = 0; (ii < 2) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_SwigPyIterator_incr__SWIG_1(self, args); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_SwigPyIterator_incr__SWIG_0(self, args); } } } fail: SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_incr'.\n" " Possible C/C++ prototypes are:\n" " swig::SwigPyIterator::incr(size_t)\n" " swig::SwigPyIterator::incr()\n"); return 0; } SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_decr",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); try { result = (swig::SwigPyIterator *)(arg1)->decr(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_decr",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (swig::SwigPyIterator *)(arg1)->decr(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; for (ii = 0; (ii < 2) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_SwigPyIterator_decr__SWIG_1(self, args); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_SwigPyIterator_decr__SWIG_0(self, args); } } } fail: SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_decr'.\n" " Possible C/C++ prototypes are:\n" " swig::SwigPyIterator::decr(size_t)\n" " swig::SwigPyIterator::decr()\n"); return 0; } SWIGINTERN PyObject *_wrap_SwigPyIterator_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; swig::SwigPyIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; ptrdiff_t result; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_distance",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); try { result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2); } catch(std::invalid_argument &_e) { SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; } resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; swig::SwigPyIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_equal",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); try { result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2); } catch(std::invalid_argument &_e) { SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_copy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_copy",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy(); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_next",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (PyObject *)(arg1)->next(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = result; return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___next__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___next__",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (PyObject *)(arg1)->__next__(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = result; return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_previous(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_previous",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { result = (PyObject *)(arg1)->previous(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = result; return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator_advance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator_advance",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::SwigPyIterator *)(arg1)->advance(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; swig::SwigPyIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___eq__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2); resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; swig::SwigPyIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___ne__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2); resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___iadd__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___isub__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___add__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; swig::SwigPyIterator *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___sub__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); SWIG_fail; } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; swig::SwigPyIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; ptrdiff_t result; if(!PyArg_UnpackTuple(args,(char *)"SwigPyIterator___sub__",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); } arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); } arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2); resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; for (ii = 0; (ii < 2) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_SwigPyIterator___sub____SWIG_1(self, args); } } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_SwigPyIterator___sub____SWIG_0(self, args); } } } fail: Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_version(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; char *result = 0 ; result = (char *)GEOSversion(); resultobj = SWIG_FromCharPtr((const char *)result); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_new_CoordinateSequence(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; size_t arg1 ; size_t arg2 ; size_t val1 ; int ecode1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosCoordinateSequence *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"new_CoordinateSequence",2,2,&obj0,&obj1)) SWIG_fail; ecode1 = SWIG_AsVal_size_t(obj0, &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CoordinateSequence" "', argument " "1"" of type '" "size_t""'"); } arg1 = static_cast< size_t >(val1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CoordinateSequence" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (GeosCoordinateSequence *)new_GeosCoordinateSequence(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_CoordinateSequence(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_CoordinateSequence",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CoordinateSequence" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { delete_GeosCoordinateSequence(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosCoordinateSequence *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_clone",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_clone" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (GeosCoordinateSequence *)GeosCoordinateSequence_clone(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_OWN | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_setX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_setX",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_setX" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_setX" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoordinateSequence_setX" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setX(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_setY(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_setY",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_setY" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_setY" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoordinateSequence_setY" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setY(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_setZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_setZ",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_setZ" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_setZ" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoordinateSequence_setZ" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setZ(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_setOrdinate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; size_t arg3 ; double arg4 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; size_t val3 ; int ecode3 = 0 ; double val4 ; int ecode4 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_setOrdinate",4,4,&obj0,&obj1,&obj2,&obj3)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_setOrdinate" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_setOrdinate" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_size_t(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoordinateSequence_setOrdinate" "', argument " "3"" of type '" "size_t""'"); } arg3 = static_cast< size_t >(val3); ecode4 = SWIG_AsVal_double(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "CoordinateSequence_setOrdinate" "', argument " "4"" of type '" "double""'"); } arg4 = static_cast< double >(val4); { try { result = (int)GeosCoordinateSequence_setOrdinate(arg1,arg2,arg3,arg4); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getX",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getX" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_getX" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getX(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getY(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getY",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getY" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_getY" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getY(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getZ",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getZ" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_getZ" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getZ(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getOrdinate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; size_t val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getOrdinate",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getOrdinate" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CoordinateSequence_getOrdinate" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_size_t(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CoordinateSequence_getOrdinate" "', argument " "3"" of type '" "size_t""'"); } arg3 = static_cast< size_t >(val3); { try { result = (double)GeosCoordinateSequence_getOrdinate(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getSize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; unsigned int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getSize",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getSize" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (unsigned int)GeosCoordinateSequence_getSize(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_CoordinateSequence_getDimensions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; unsigned int result; if(!PyArg_UnpackTuple(args,(char *)"CoordinateSequence_getDimensions",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoordinateSequence_getDimensions" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (unsigned int)GeosCoordinateSequence_getDimensions(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *CoordinateSequence_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosCoordinateSequence, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_Geometry(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_Geometry",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Geometry" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { delete_GeosGeometry(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_clone",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_clone" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_clone(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_geomType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; char *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_geomType",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_geomType" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (char *)GeosGeometry_geomType(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_FromCharPtr((const char *)result); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_typeId(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_typeId",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_typeId" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (int)GeosGeometry_typeId(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_normalize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_normalize",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_normalize" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { GeosGeometry_normalize(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_getSRID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_getSRID",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_getSRID" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (int)GeosGeometry_getSRID(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_setSRID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_setSRID",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_setSRID" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Geometry_setSRID" "', argument " "2"" of type '" "int""'"); } arg2 = static_cast< int >(val2); { try { GeosGeometry_setSRID(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_getDimensions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; size_t result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_getDimensions",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_getDimensions" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = GeosGeometry_getDimensions(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_size_t(static_cast< size_t >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_getNumGeometries(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; size_t result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_getNumGeometries",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_getNumGeometries" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = GeosGeometry_getNumGeometries(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_size_t(static_cast< size_t >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_intersection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_intersection",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_intersection" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_intersection" "', argument " "2"" of type '" "GeosGeometry *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_intersection(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_buffer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; int arg3 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; GeosGeometry *result = 0 ; { arg3 = DEFAULT_QUADRANT_SEGMENTS; } if(!PyArg_UnpackTuple(args,(char *)"Geometry_buffer",2,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_buffer" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Geometry_buffer" "', argument " "2"" of type '" "double""'"); } arg2 = static_cast< double >(val2); if (obj2) { ecode3 = SWIG_AsVal_int(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Geometry_buffer" "', argument " "3"" of type '" "int""'"); } arg3 = static_cast< int >(val3); } { try { result = (GeosGeometry *)GeosGeometry_buffer(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_convexHull(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_convexHull",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_convexHull" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_convexHull(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_difference(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_difference",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_difference" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_difference" "', argument " "2"" of type '" "GeosGeometry *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_difference(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_symDifference(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_symDifference",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_symDifference" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_symDifference" "', argument " "2"" of type '" "GeosGeometry *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_symDifference(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_boundary(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_boundary",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_boundary" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_boundary(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_union(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_union",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_union" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_union" "', argument " "2"" of type '" "GeosGeometry *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_geomUnion(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_pointOnSurface(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_pointOnSurface",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_pointOnSurface" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_pointOnSurface(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_getCentroid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_getCentroid",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_getCentroid" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_getCentroid(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_getEnvelope(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_getEnvelope",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_getEnvelope" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_getEnvelope(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_relate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; char *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_relate",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_relate" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_relate" "', argument " "2"" of type '" "GeosGeometry *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (char *)GeosGeometry_relate(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_FromCharPtr((const char *)result); delete[] result; return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_lineMerge(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_lineMerge",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_lineMerge" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_lineMerge(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_simplify(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_simplify",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_simplify" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Geometry_simplify" "', argument " "2"" of type '" "double""'"); } arg2 = static_cast< double >(val2); { try { result = (GeosGeometry *)GeosGeometry_simplify(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_topologyPreserveSimplify(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Geometry_topologyPreserveSimplify",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_topologyPreserveSimplify" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Geometry_topologyPreserveSimplify" "', argument " "2"" of type '" "double""'"); } arg2 = static_cast< double >(val2); { try { result = (GeosGeometry *)GeosGeometry_topologyPreserveSimplify(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_relatePattern(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; char *arg3 = (char *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int res3 ; char *buf3 = 0 ; int alloc3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_relatePattern",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_relatePattern" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_relatePattern" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Geometry_relatePattern" "', argument " "3"" of type '" "char const *""'"); } arg3 = reinterpret_cast< char * >(buf3); { try { result = (bool)GeosGeometry_relatePattern(arg1,(GeosGeometry const *)arg2,(char const *)arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); if (alloc3 == SWIG_NEWOBJ) delete[] buf3; return resultobj; fail: if (alloc3 == SWIG_NEWOBJ) delete[] buf3; return NULL; } SWIGINTERN PyObject *_wrap_Geometry_disjoint(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_disjoint",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_disjoint" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_disjoint" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_disjoint(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_touches(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_touches",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_touches" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_touches" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_touches(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_intersects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_intersects",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_intersects" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_intersects" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_intersects(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_crosses(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_crosses",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_crosses" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_crosses" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_crosses(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_within(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_within",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_within" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_within" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_within(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_contains(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_contains",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_contains" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_contains" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_contains(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_overlaps(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_overlaps",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_overlaps" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_overlaps" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_overlaps(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_equals(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_equals",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_equals" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_equals" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_equals(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_equalsExact(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; double val3 ; int ecode3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_equalsExact",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_equalsExact" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_equalsExact" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); ecode3 = SWIG_AsVal_double(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Geometry_equalsExact" "', argument " "3"" of type '" "double""'"); } arg3 = static_cast< double >(val3); { try { result = (bool)GeosGeometry_equalsExact(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_isEmpty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_isEmpty",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_isEmpty" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isEmpty(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_isValid(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_isValid",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_isValid" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isValid(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_isSimple(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_isSimple",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_isSimple" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isSimple(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_isRing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_isRing",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_isRing" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_hasZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_hasZ",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_hasZ" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_hasZ(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_area(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_area",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_area" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (double)GeosGeometry_area(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_length(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_length",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_length" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (double)GeosGeometry_length(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Geometry_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; double result; if(!PyArg_UnpackTuple(args,(char *)"Geometry_distance",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Geometry_distance" "', argument " "1"" of type '" "GeosGeometry *""'"); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Geometry_distance" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (double)GeosGeometry_distance(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_double(static_cast< double >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *Geometry_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosGeometry, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_Point(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPoint *arg1 = (GeosPoint *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_Point",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPoint, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Point" "', argument " "1"" of type '" "GeosPoint *""'"); } arg1 = reinterpret_cast< GeosPoint * >(argp1); { try { delete_GeosPoint(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Point_getCoordSeq(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPoint *arg1 = (GeosPoint *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosCoordinateSequence *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Point_getCoordSeq",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPoint, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Point_getCoordSeq" "', argument " "1"" of type '" "GeosPoint *""'"); } arg1 = reinterpret_cast< GeosPoint * >(argp1); { try { result = (GeosCoordinateSequence *)GeosPoint_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *Point_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosPoint, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_LineString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosLineString *arg1 = (GeosLineString *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_LineString",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosLineString, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LineString" "', argument " "1"" of type '" "GeosLineString *""'"); } arg1 = reinterpret_cast< GeosLineString * >(argp1); { try { delete_GeosLineString(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_LineString_getCoordSeq(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosLineString *arg1 = (GeosLineString *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosCoordinateSequence *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"LineString_getCoordSeq",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosLineString, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LineString_getCoordSeq" "', argument " "1"" of type '" "GeosLineString *""'"); } arg1 = reinterpret_cast< GeosLineString * >(argp1); { try { result = (GeosCoordinateSequence *)GeosLineString_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *LineString_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosLineString, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_LinearRing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosLinearRing *arg1 = (GeosLinearRing *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_LinearRing",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosLinearRing, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LinearRing" "', argument " "1"" of type '" "GeosLinearRing *""'"); } arg1 = reinterpret_cast< GeosLinearRing * >(argp1); { try { delete_GeosLinearRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_LinearRing_getCoordSeq(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosLinearRing *arg1 = (GeosLinearRing *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosCoordinateSequence *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"LinearRing_getCoordSeq",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosLinearRing, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LinearRing_getCoordSeq" "', argument " "1"" of type '" "GeosLinearRing *""'"); } arg1 = reinterpret_cast< GeosLinearRing * >(argp1); { try { result = (GeosCoordinateSequence *)GeosLinearRing_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *LinearRing_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosLinearRing, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_Polygon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPolygon *arg1 = (GeosPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_Polygon",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPolygon, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Polygon" "', argument " "1"" of type '" "GeosPolygon *""'"); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); { try { delete_GeosPolygon(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Polygon_getExteriorRing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPolygon *arg1 = (GeosPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Polygon_getExteriorRing",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Polygon_getExteriorRing" "', argument " "1"" of type '" "GeosPolygon *""'"); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); { try { result = (GeosGeometry *)GeosPolygon_getExteriorRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Polygon_getNumInteriorRings(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPolygon *arg1 = (GeosPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; size_t result; if(!PyArg_UnpackTuple(args,(char *)"Polygon_getNumInteriorRings",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Polygon_getNumInteriorRings" "', argument " "1"" of type '" "GeosPolygon *""'"); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); { try { result = GeosPolygon_getNumInteriorRings(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_size_t(static_cast< size_t >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Polygon_getInteriorRingN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPolygon *arg1 = (GeosPolygon *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"Polygon_getInteriorRingN",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Polygon_getInteriorRingN" "', argument " "1"" of type '" "GeosPolygon *""'"); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Polygon_getInteriorRingN" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (GeosGeometry *)GeosPolygon_getInteriorRingN(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *Polygon_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosPolygon, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_GeometryCollection(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometryCollection *arg1 = (GeosGeometryCollection *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_GeometryCollection",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometryCollection, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_GeometryCollection" "', argument " "1"" of type '" "GeosGeometryCollection *""'"); } arg1 = reinterpret_cast< GeosGeometryCollection * >(argp1); { try { delete_GeosGeometryCollection(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_GeometryCollection_getGeometryN(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosGeometryCollection *arg1 = (GeosGeometryCollection *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"GeometryCollection_getGeometryN",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosGeometryCollection, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GeometryCollection_getGeometryN" "', argument " "1"" of type '" "GeosGeometryCollection *""'"); } arg1 = reinterpret_cast< GeosGeometryCollection * >(argp1); ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "GeometryCollection_getGeometryN" "', argument " "2"" of type '" "size_t""'"); } arg2 = static_cast< size_t >(val2); { try { result = (GeosGeometry *)GeosGeometryCollection_getGeometryN(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *GeometryCollection_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosGeometryCollection, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_MultiPoint(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosMultiPoint *arg1 = (GeosMultiPoint *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_MultiPoint",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosMultiPoint, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MultiPoint" "', argument " "1"" of type '" "GeosMultiPoint *""'"); } arg1 = reinterpret_cast< GeosMultiPoint * >(argp1); { try { delete_GeosMultiPoint(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *MultiPoint_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosMultiPoint, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_MultiLineString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosMultiLineString *arg1 = (GeosMultiLineString *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_MultiLineString",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosMultiLineString, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MultiLineString" "', argument " "1"" of type '" "GeosMultiLineString *""'"); } arg1 = reinterpret_cast< GeosMultiLineString * >(argp1); { try { delete_GeosMultiLineString(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *MultiLineString_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosMultiLineString, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_MultiLinearRing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosMultiLinearRing *arg1 = (GeosMultiLinearRing *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_MultiLinearRing",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosMultiLinearRing, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MultiLinearRing" "', argument " "1"" of type '" "GeosMultiLinearRing *""'"); } arg1 = reinterpret_cast< GeosMultiLinearRing * >(argp1); { try { delete_GeosMultiLinearRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *MultiLinearRing_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosMultiLinearRing, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_delete_MultiPolygon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosMultiPolygon *arg1 = (GeosMultiPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_MultiPolygon",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosMultiPolygon, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MultiPolygon" "', argument " "1"" of type '" "GeosMultiPolygon *""'"); } arg1 = reinterpret_cast< GeosMultiPolygon * >(argp1); { try { delete_GeosMultiPolygon(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *MultiPolygon_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosMultiPolygon, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_createPoint(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"createPoint",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "createPoint" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } { try { result = (GeosGeometry *)createPoint(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_createLineString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"createLineString",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "createLineString" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } { try { result = (GeosGeometry *)createLineString(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_createLinearRing(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"createLinearRing",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "createLinearRing" "', argument " "1"" of type '" "GeosCoordinateSequence *""'"); } { try { result = (GeosGeometry *)createLinearRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_createPolygon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosLinearRing *arg1 = (GeosLinearRing *) 0 ; GeosLinearRing **arg2 = (GeosLinearRing **) 0 ; size_t arg3 ; int res1 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; { arg2 = NULL; arg3 = 0; } if(!PyArg_UnpackTuple(args,(char *)"createPolygon",1,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosLinearRing, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "createPolygon" "', argument " "1"" of type '" "GeosLinearRing *""'"); } if (obj1) { { if (obj1 == Py_None) { arg2 = NULL; arg3 = 0; } else { /* Make sure the input can be treated as an array. */ if (!PySequence_Check(obj1)) SWIG_exception_fail(SWIG_RuntimeError, "in method '" "createPolygon" "', argument " "1"" of type '" "GeosLinearRing *""'"); /* Get the length */ arg3 = PySequence_Size(obj1); /* Allocate space for the C array. */ arg2 = (GeosLinearRing**) malloc(arg3*sizeof(GeosLinearRing*)); for(size_t i = 0; i(argp1); { try { result = (GeosPreparedGeometry *)new_GeosPreparedGeometry((GeosGeometry const *)arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPreparedGeometry, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_Prepared(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_Prepared",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPreparedGeometry, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prepared" "', argument " "1"" of type '" "GeosPreparedGeometry *""'"); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); { try { delete_GeosPreparedGeometry(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Prepared_contains(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Prepared_contains",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prepared_contains" "', argument " "1"" of type '" "GeosPreparedGeometry *""'"); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Prepared_contains" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_contains(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Prepared_containsProperly(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Prepared_containsProperly",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prepared_containsProperly" "', argument " "1"" of type '" "GeosPreparedGeometry *""'"); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Prepared_containsProperly" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_containsProperly(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Prepared_covers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Prepared_covers",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prepared_covers" "', argument " "1"" of type '" "GeosPreparedGeometry *""'"); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Prepared_covers" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_covers(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_Prepared_intersects(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"Prepared_intersects",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prepared_intersects" "', argument " "1"" of type '" "GeosPreparedGeometry *""'"); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Prepared_intersects" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_intersects(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *Prepared_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosPreparedGeometry, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_new_STRtree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; int arg1 ; int val1 ; int ecode1 = 0 ; PyObject * obj0 = 0 ; GeosSTRtree *result = 0 ; { arg1 = 10; } if(!PyArg_UnpackTuple(args,(char *)"new_STRtree",0,1,&obj0)) SWIG_fail; if (obj0) { ecode1 = SWIG_AsVal_int(obj0, &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_STRtree" "', argument " "1"" of type '" "int""'"); } arg1 = static_cast< int >(val1); } { try { result = (GeosSTRtree *)new_GeosSTRtree(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosSTRtree, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_STRtree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_STRtree",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosSTRtree, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_STRtree" "', argument " "1"" of type '" "GeosSTRtree *""'"); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); { try { delete_GeosSTRtree(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_STRtree_insert(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; void *argp3 ; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"STRtree_insert",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "STRtree_insert" "', argument " "1"" of type '" "GeosSTRtree *""'"); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "STRtree_insert" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_GeosIndexItem, 0 | 0); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "STRtree_insert" "', argument " "3"" of type '" "GeosIndexItem""'"); } if (!argp3) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_insert" "', argument " "3"" of type '" "GeosIndexItem""'"); } else { GeosIndexItem * temp = reinterpret_cast< GeosIndexItem * >(argp3); arg3 = *temp; if (SWIG_IsNewObj(res3)) delete temp; } } { try { GeosSTRtree_insert(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_STRtree_remove(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; void *argp3 ; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"STRtree_remove",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "STRtree_remove" "', argument " "1"" of type '" "GeosSTRtree *""'"); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "STRtree_remove" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_GeosIndexItem, 0 | 0); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "STRtree_remove" "', argument " "3"" of type '" "GeosIndexItem""'"); } if (!argp3) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_remove" "', argument " "3"" of type '" "GeosIndexItem""'"); } else { GeosIndexItem * temp = reinterpret_cast< GeosIndexItem * >(argp3); arg3 = *temp; if (SWIG_IsNewObj(res3)) delete temp; } } { try { GeosSTRtree_remove(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_STRtree_query(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosQueryCallback arg3 ; GeosIndexItem arg4 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; void *argp3 ; int res3 = 0 ; void *argp4 ; int res4 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"STRtree_query",4,4,&obj0,&obj1,&obj2,&obj3)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "STRtree_query" "', argument " "1"" of type '" "GeosSTRtree *""'"); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "STRtree_query" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_GeosQueryCallback, 0 | 0); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "STRtree_query" "', argument " "3"" of type '" "GeosQueryCallback""'"); } if (!argp3) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_query" "', argument " "3"" of type '" "GeosQueryCallback""'"); } else { GeosQueryCallback * temp = reinterpret_cast< GeosQueryCallback * >(argp3); arg3 = *temp; if (SWIG_IsNewObj(res3)) delete temp; } } { res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_GeosIndexItem, 0 | 0); if (!SWIG_IsOK(res4)) { SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "STRtree_query" "', argument " "4"" of type '" "GeosIndexItem""'"); } if (!argp4) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_query" "', argument " "4"" of type '" "GeosIndexItem""'"); } else { GeosIndexItem * temp = reinterpret_cast< GeosIndexItem * >(argp4); arg4 = *temp; if (SWIG_IsNewObj(res4)) delete temp; } } { try { GeosSTRtree_query(arg1,(GeosGeometry const *)arg2,arg3,arg4); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_STRtree_iterate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosQueryCallback arg2 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; void *argp3 ; int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"STRtree_iterate",3,3,&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "STRtree_iterate" "', argument " "1"" of type '" "GeosSTRtree *""'"); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_GeosQueryCallback, 0 | 0); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "STRtree_iterate" "', argument " "2"" of type '" "GeosQueryCallback""'"); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_iterate" "', argument " "2"" of type '" "GeosQueryCallback""'"); } else { GeosQueryCallback * temp = reinterpret_cast< GeosQueryCallback * >(argp2); arg2 = *temp; if (SWIG_IsNewObj(res2)) delete temp; } } { res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_GeosIndexItem, 0 | 0); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "STRtree_iterate" "', argument " "3"" of type '" "GeosIndexItem""'"); } if (!argp3) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "STRtree_iterate" "', argument " "3"" of type '" "GeosIndexItem""'"); } else { GeosIndexItem * temp = reinterpret_cast< GeosIndexItem * >(argp3); arg3 = *temp; if (SWIG_IsNewObj(res3)) delete temp; } } { try { GeosSTRtree_iterate(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *STRtree_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosSTRtree, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_new_WktReader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktReader *result = 0 ; { try { result = (GeosWktReader *)new_GeosWktReader(); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosWktReader, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_WktReader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktReader *arg1 = (GeosWktReader *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_WktReader",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWktReader, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WktReader" "', argument " "1"" of type '" "GeosWktReader *""'"); } arg1 = reinterpret_cast< GeosWktReader * >(argp1); { try { delete_GeosWktReader(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WktReader_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktReader *arg1 = (GeosWktReader *) 0 ; char *arg2 = (char *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WktReader_read",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWktReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WktReader_read" "', argument " "1"" of type '" "GeosWktReader *""'"); } arg1 = reinterpret_cast< GeosWktReader * >(argp1); res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WktReader_read" "', argument " "2"" of type '" "char const *""'"); } arg2 = reinterpret_cast< char * >(buf2); { try { result = (GeosGeometry *)GeosWktReader_read(arg1,(char const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } if (alloc2 == SWIG_NEWOBJ) delete[] buf2; return resultobj; fail: if (alloc2 == SWIG_NEWOBJ) delete[] buf2; return NULL; } SWIGINTERN PyObject *WktReader_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosWktReader, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_new_WktWriter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktWriter *result = 0 ; { try { result = (GeosWktWriter *)new_GeosWktWriter(); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosWktWriter, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_WktWriter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktWriter *arg1 = (GeosWktWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_WktWriter",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWktWriter, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WktWriter" "', argument " "1"" of type '" "GeosWktWriter *""'"); } arg1 = reinterpret_cast< GeosWktWriter * >(argp1); { try { delete_GeosWktWriter(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WktWriter_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWktWriter *arg1 = (GeosWktWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; char *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WktWriter_write",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWktWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WktWriter_write" "', argument " "1"" of type '" "GeosWktWriter *""'"); } arg1 = reinterpret_cast< GeosWktWriter * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WktWriter_write" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (char *)GeosWktWriter_write(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_FromCharPtr((const char *)result); return resultobj; fail: return NULL; } SWIGINTERN PyObject *WktWriter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosWktWriter, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_new_WkbReader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbReader *result = 0 ; { try { result = (GeosWkbReader *)new_GeosWkbReader(); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosWkbReader, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_WkbReader(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbReader *arg1 = (GeosWkbReader *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_WkbReader",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbReader, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WkbReader" "', argument " "1"" of type '" "GeosWkbReader *""'"); } arg1 = reinterpret_cast< GeosWkbReader * >(argp1); { try { delete_GeosWkbReader(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbReader_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbReader *arg1 = (GeosWkbReader *) 0 ; unsigned char *arg2 = (unsigned char *) 0 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int alloc2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WkbReader_read",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbReader_read" "', argument " "1"" of type '" "GeosWkbReader *""'"); } arg1 = reinterpret_cast< GeosWkbReader * >(argp1); { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc2 = 0) */ if (SWIG_AsCharPtrAndSize(obj1, (char**)&arg2, &arg3, &alloc2) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ arg3--; } { try { result = (GeosGeometry *)GeosWkbReader_read(arg1,(unsigned char const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbReader_readHEX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbReader *arg1 = (GeosWkbReader *) 0 ; unsigned char *arg2 = (unsigned char *) 0 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int alloc2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; GeosGeometry *result = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WkbReader_readHEX",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbReader_readHEX" "', argument " "1"" of type '" "GeosWkbReader *""'"); } arg1 = reinterpret_cast< GeosWkbReader * >(argp1); { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc2 = 0) */ if (SWIG_AsCharPtrAndSize(obj1, (char**)&arg2, &arg3, &alloc2) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ arg3--; } { try { result = (GeosGeometry *)GeosWkbReader_readHEX(arg1,(unsigned char const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return resultobj; fail: return NULL; } SWIGINTERN PyObject *WkbReader_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosWkbReader, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } SWIGINTERN PyObject *_wrap_new_WkbWriter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *result = 0 ; { try { result = (GeosWkbWriter *)new_GeosWkbWriter(); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosWkbWriter, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_delete_WkbWriter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"delete_WkbWriter",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WkbWriter" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { delete_GeosWkbWriter(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_getOutputDimension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_getOutputDimension",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_getOutputDimension" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (int)GeosWkbWriter_getOutputDimension(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_setOutputDimension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_setOutputDimension",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_setOutputDimension" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WkbWriter_setOutputDimension" "', argument " "2"" of type '" "int""'"); } arg2 = static_cast< int >(val2); { try { GeosWkbWriter_setOutputDimension(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_getByteOrder(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; int result; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_getByteOrder",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_getByteOrder" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (int)GeosWkbWriter_getByteOrder(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_int(static_cast< int >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_setByteOrder(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_setByteOrder",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_setByteOrder" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WkbWriter_setByteOrder" "', argument " "2"" of type '" "int""'"); } arg2 = static_cast< int >(val2); { try { GeosWkbWriter_setByteOrder(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_getIncludeSRID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; bool result; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_getIncludeSRID",1,1,&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_getIncludeSRID" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (bool)GeosWkbWriter_getIncludeSRID(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_From_bool(static_cast< bool >(result)); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_setIncludeSRID(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; bool arg2 ; void *argp1 = 0 ; int res1 = 0 ; bool val2 ; int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_setIncludeSRID",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_setIncludeSRID" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_bool(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WkbWriter_setIncludeSRID" "', argument " "2"" of type '" "bool""'"); } arg2 = static_cast< bool >(val2); { try { GeosWkbWriter_setIncludeSRID(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_write(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; size_t *arg3 = (size_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; size_t temp3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; unsigned char *result = 0 ; { /* %typemap(in, numinputs=0) size_t *size (size_t temp3 = 0) */ arg3 = &temp3; } if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_write",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_write" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WkbWriter_write" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (unsigned char *)GeosWkbWriter_write(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) unsigned char* */ } { /* %typemap(argout) size_t *size */ resultobj = SWIG_FromCharPtrAndSize((const char*)result, *arg3); } { /* %typemap(freearg) size_t *size */ std::free(result); } return resultobj; fail: { /* %typemap(freearg) size_t *size */ std::free(result); } return NULL; } SWIGINTERN PyObject *_wrap_WkbWriter_writeHEX(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; size_t *arg3 = (size_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; size_t temp3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; unsigned char *result = 0 ; { /* %typemap(in, numinputs=0) size_t *size (size_t temp3 = 0) */ arg3 = &temp3; } if(!PyArg_UnpackTuple(args,(char *)"WkbWriter_writeHEX",2,2,&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WkbWriter_writeHEX" "', argument " "1"" of type '" "GeosWkbWriter *""'"); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WkbWriter_writeHEX" "', argument " "2"" of type '" "GeosGeometry const *""'"); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (unsigned char *)GeosWkbWriter_writeHEX(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) unsigned char* */ } { /* %typemap(argout) size_t *size */ resultobj = SWIG_FromCharPtrAndSize((const char*)result, *arg3); } { /* %typemap(freearg) size_t *size */ std::free(result); } return resultobj; fail: { /* %typemap(freearg) size_t *size */ std::free(result); } return NULL; } SWIGINTERN PyObject *WkbWriter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL; SWIG_TypeNewClientData(SWIGTYPE_p_GeosWkbWriter, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } static PyMethodDef SwigMethods[] = { { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, { (char *)"delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_value", _wrap_SwigPyIterator_value, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_incr", _wrap_SwigPyIterator_incr, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_decr", _wrap_SwigPyIterator_decr, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_distance", _wrap_SwigPyIterator_distance, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_equal", _wrap_SwigPyIterator_equal, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_copy", _wrap_SwigPyIterator_copy, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_next", _wrap_SwigPyIterator_next, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___next__", _wrap_SwigPyIterator___next__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_previous", _wrap_SwigPyIterator_previous, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_advance", _wrap_SwigPyIterator_advance, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL}, { (char *)"version", _wrap_version, METH_VARARGS, NULL}, { (char *)"new_CoordinateSequence", _wrap_new_CoordinateSequence, METH_VARARGS, NULL}, { (char *)"delete_CoordinateSequence", _wrap_delete_CoordinateSequence, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_clone", _wrap_CoordinateSequence_clone, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_setX", _wrap_CoordinateSequence_setX, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_setY", _wrap_CoordinateSequence_setY, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_setZ", _wrap_CoordinateSequence_setZ, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_setOrdinate", _wrap_CoordinateSequence_setOrdinate, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getX", _wrap_CoordinateSequence_getX, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getY", _wrap_CoordinateSequence_getY, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getZ", _wrap_CoordinateSequence_getZ, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getOrdinate", _wrap_CoordinateSequence_getOrdinate, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getSize", _wrap_CoordinateSequence_getSize, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_getDimensions", _wrap_CoordinateSequence_getDimensions, METH_VARARGS, NULL}, { (char *)"CoordinateSequence_swigregister", CoordinateSequence_swigregister, METH_VARARGS, NULL}, { (char *)"delete_Geometry", _wrap_delete_Geometry, METH_VARARGS, NULL}, { (char *)"Geometry_clone", _wrap_Geometry_clone, METH_VARARGS, NULL}, { (char *)"Geometry_geomType", _wrap_Geometry_geomType, METH_VARARGS, NULL}, { (char *)"Geometry_typeId", _wrap_Geometry_typeId, METH_VARARGS, NULL}, { (char *)"Geometry_normalize", _wrap_Geometry_normalize, METH_VARARGS, NULL}, { (char *)"Geometry_getSRID", _wrap_Geometry_getSRID, METH_VARARGS, NULL}, { (char *)"Geometry_setSRID", _wrap_Geometry_setSRID, METH_VARARGS, NULL}, { (char *)"Geometry_getDimensions", _wrap_Geometry_getDimensions, METH_VARARGS, NULL}, { (char *)"Geometry_getNumGeometries", _wrap_Geometry_getNumGeometries, METH_VARARGS, NULL}, { (char *)"Geometry_intersection", _wrap_Geometry_intersection, METH_VARARGS, NULL}, { (char *)"Geometry_buffer", _wrap_Geometry_buffer, METH_VARARGS, NULL}, { (char *)"Geometry_convexHull", _wrap_Geometry_convexHull, METH_VARARGS, NULL}, { (char *)"Geometry_difference", _wrap_Geometry_difference, METH_VARARGS, NULL}, { (char *)"Geometry_symDifference", _wrap_Geometry_symDifference, METH_VARARGS, NULL}, { (char *)"Geometry_boundary", _wrap_Geometry_boundary, METH_VARARGS, NULL}, { (char *)"Geometry_union", _wrap_Geometry_union, METH_VARARGS, NULL}, { (char *)"Geometry_pointOnSurface", _wrap_Geometry_pointOnSurface, METH_VARARGS, NULL}, { (char *)"Geometry_getCentroid", _wrap_Geometry_getCentroid, METH_VARARGS, NULL}, { (char *)"Geometry_getEnvelope", _wrap_Geometry_getEnvelope, METH_VARARGS, NULL}, { (char *)"Geometry_relate", _wrap_Geometry_relate, METH_VARARGS, NULL}, { (char *)"Geometry_lineMerge", _wrap_Geometry_lineMerge, METH_VARARGS, NULL}, { (char *)"Geometry_simplify", _wrap_Geometry_simplify, METH_VARARGS, NULL}, { (char *)"Geometry_topologyPreserveSimplify", _wrap_Geometry_topologyPreserveSimplify, METH_VARARGS, NULL}, { (char *)"Geometry_relatePattern", _wrap_Geometry_relatePattern, METH_VARARGS, NULL}, { (char *)"Geometry_disjoint", _wrap_Geometry_disjoint, METH_VARARGS, NULL}, { (char *)"Geometry_touches", _wrap_Geometry_touches, METH_VARARGS, NULL}, { (char *)"Geometry_intersects", _wrap_Geometry_intersects, METH_VARARGS, NULL}, { (char *)"Geometry_crosses", _wrap_Geometry_crosses, METH_VARARGS, NULL}, { (char *)"Geometry_within", _wrap_Geometry_within, METH_VARARGS, NULL}, { (char *)"Geometry_contains", _wrap_Geometry_contains, METH_VARARGS, NULL}, { (char *)"Geometry_overlaps", _wrap_Geometry_overlaps, METH_VARARGS, NULL}, { (char *)"Geometry_equals", _wrap_Geometry_equals, METH_VARARGS, NULL}, { (char *)"Geometry_equalsExact", _wrap_Geometry_equalsExact, METH_VARARGS, NULL}, { (char *)"Geometry_isEmpty", _wrap_Geometry_isEmpty, METH_VARARGS, NULL}, { (char *)"Geometry_isValid", _wrap_Geometry_isValid, METH_VARARGS, NULL}, { (char *)"Geometry_isSimple", _wrap_Geometry_isSimple, METH_VARARGS, NULL}, { (char *)"Geometry_isRing", _wrap_Geometry_isRing, METH_VARARGS, NULL}, { (char *)"Geometry_hasZ", _wrap_Geometry_hasZ, METH_VARARGS, NULL}, { (char *)"Geometry_area", _wrap_Geometry_area, METH_VARARGS, NULL}, { (char *)"Geometry_length", _wrap_Geometry_length, METH_VARARGS, NULL}, { (char *)"Geometry_distance", _wrap_Geometry_distance, METH_VARARGS, NULL}, { (char *)"Geometry_swigregister", Geometry_swigregister, METH_VARARGS, NULL}, { (char *)"delete_Point", _wrap_delete_Point, METH_VARARGS, NULL}, { (char *)"Point_getCoordSeq", _wrap_Point_getCoordSeq, METH_VARARGS, NULL}, { (char *)"Point_swigregister", Point_swigregister, METH_VARARGS, NULL}, { (char *)"delete_LineString", _wrap_delete_LineString, METH_VARARGS, NULL}, { (char *)"LineString_getCoordSeq", _wrap_LineString_getCoordSeq, METH_VARARGS, NULL}, { (char *)"LineString_swigregister", LineString_swigregister, METH_VARARGS, NULL}, { (char *)"delete_LinearRing", _wrap_delete_LinearRing, METH_VARARGS, NULL}, { (char *)"LinearRing_getCoordSeq", _wrap_LinearRing_getCoordSeq, METH_VARARGS, NULL}, { (char *)"LinearRing_swigregister", LinearRing_swigregister, METH_VARARGS, NULL}, { (char *)"delete_Polygon", _wrap_delete_Polygon, METH_VARARGS, NULL}, { (char *)"Polygon_getExteriorRing", _wrap_Polygon_getExteriorRing, METH_VARARGS, NULL}, { (char *)"Polygon_getNumInteriorRings", _wrap_Polygon_getNumInteriorRings, METH_VARARGS, NULL}, { (char *)"Polygon_getInteriorRingN", _wrap_Polygon_getInteriorRingN, METH_VARARGS, NULL}, { (char *)"Polygon_swigregister", Polygon_swigregister, METH_VARARGS, NULL}, { (char *)"delete_GeometryCollection", _wrap_delete_GeometryCollection, METH_VARARGS, NULL}, { (char *)"GeometryCollection_getGeometryN", _wrap_GeometryCollection_getGeometryN, METH_VARARGS, NULL}, { (char *)"GeometryCollection_swigregister", GeometryCollection_swigregister, METH_VARARGS, NULL}, { (char *)"delete_MultiPoint", _wrap_delete_MultiPoint, METH_VARARGS, NULL}, { (char *)"MultiPoint_swigregister", MultiPoint_swigregister, METH_VARARGS, NULL}, { (char *)"delete_MultiLineString", _wrap_delete_MultiLineString, METH_VARARGS, NULL}, { (char *)"MultiLineString_swigregister", MultiLineString_swigregister, METH_VARARGS, NULL}, { (char *)"delete_MultiLinearRing", _wrap_delete_MultiLinearRing, METH_VARARGS, NULL}, { (char *)"MultiLinearRing_swigregister", MultiLinearRing_swigregister, METH_VARARGS, NULL}, { (char *)"delete_MultiPolygon", _wrap_delete_MultiPolygon, METH_VARARGS, NULL}, { (char *)"MultiPolygon_swigregister", MultiPolygon_swigregister, METH_VARARGS, NULL}, { (char *)"createPoint", _wrap_createPoint, METH_VARARGS, NULL}, { (char *)"createLineString", _wrap_createLineString, METH_VARARGS, NULL}, { (char *)"createLinearRing", _wrap_createLinearRing, METH_VARARGS, NULL}, { (char *)"createPolygon", _wrap_createPolygon, METH_VARARGS, NULL}, { (char *)"new_Prepared", _wrap_new_Prepared, METH_VARARGS, NULL}, { (char *)"delete_Prepared", _wrap_delete_Prepared, METH_VARARGS, NULL}, { (char *)"Prepared_contains", _wrap_Prepared_contains, METH_VARARGS, NULL}, { (char *)"Prepared_containsProperly", _wrap_Prepared_containsProperly, METH_VARARGS, NULL}, { (char *)"Prepared_covers", _wrap_Prepared_covers, METH_VARARGS, NULL}, { (char *)"Prepared_intersects", _wrap_Prepared_intersects, METH_VARARGS, NULL}, { (char *)"Prepared_swigregister", Prepared_swigregister, METH_VARARGS, NULL}, { (char *)"new_STRtree", _wrap_new_STRtree, METH_VARARGS, NULL}, { (char *)"delete_STRtree", _wrap_delete_STRtree, METH_VARARGS, NULL}, { (char *)"STRtree_insert", _wrap_STRtree_insert, METH_VARARGS, NULL}, { (char *)"STRtree_remove", _wrap_STRtree_remove, METH_VARARGS, NULL}, { (char *)"STRtree_query", _wrap_STRtree_query, METH_VARARGS, NULL}, { (char *)"STRtree_iterate", _wrap_STRtree_iterate, METH_VARARGS, NULL}, { (char *)"STRtree_swigregister", STRtree_swigregister, METH_VARARGS, NULL}, { (char *)"new_WktReader", _wrap_new_WktReader, METH_VARARGS, NULL}, { (char *)"delete_WktReader", _wrap_delete_WktReader, METH_VARARGS, NULL}, { (char *)"WktReader_read", _wrap_WktReader_read, METH_VARARGS, NULL}, { (char *)"WktReader_swigregister", WktReader_swigregister, METH_VARARGS, NULL}, { (char *)"new_WktWriter", _wrap_new_WktWriter, METH_VARARGS, NULL}, { (char *)"delete_WktWriter", _wrap_delete_WktWriter, METH_VARARGS, NULL}, { (char *)"WktWriter_write", _wrap_WktWriter_write, METH_VARARGS, NULL}, { (char *)"WktWriter_swigregister", WktWriter_swigregister, METH_VARARGS, NULL}, { (char *)"new_WkbReader", _wrap_new_WkbReader, METH_VARARGS, NULL}, { (char *)"delete_WkbReader", _wrap_delete_WkbReader, METH_VARARGS, NULL}, { (char *)"WkbReader_read", _wrap_WkbReader_read, METH_VARARGS, NULL}, { (char *)"WkbReader_readHEX", _wrap_WkbReader_readHEX, METH_VARARGS, NULL}, { (char *)"WkbReader_swigregister", WkbReader_swigregister, METH_VARARGS, NULL}, { (char *)"new_WkbWriter", _wrap_new_WkbWriter, METH_VARARGS, NULL}, { (char *)"delete_WkbWriter", _wrap_delete_WkbWriter, METH_VARARGS, NULL}, { (char *)"WkbWriter_getOutputDimension", _wrap_WkbWriter_getOutputDimension, METH_VARARGS, NULL}, { (char *)"WkbWriter_setOutputDimension", _wrap_WkbWriter_setOutputDimension, METH_VARARGS, NULL}, { (char *)"WkbWriter_getByteOrder", _wrap_WkbWriter_getByteOrder, METH_VARARGS, NULL}, { (char *)"WkbWriter_setByteOrder", _wrap_WkbWriter_setByteOrder, METH_VARARGS, NULL}, { (char *)"WkbWriter_getIncludeSRID", _wrap_WkbWriter_getIncludeSRID, METH_VARARGS, NULL}, { (char *)"WkbWriter_setIncludeSRID", _wrap_WkbWriter_setIncludeSRID, METH_VARARGS, NULL}, { (char *)"WkbWriter_write", _wrap_WkbWriter_write, METH_VARARGS, NULL}, { (char *)"WkbWriter_writeHEX", _wrap_WkbWriter_writeHEX, METH_VARARGS, NULL}, { (char *)"WkbWriter_swigregister", WkbWriter_swigregister, METH_VARARGS, NULL}, { NULL, NULL, 0, NULL } }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static void *_p_GeosMultiPolygonTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiPolygon *) x)); } static void *_p_GeosMultiPointTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiPoint *) x)); } static void *_p_GeosMultiLineStringTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiLineString *) x)); } static void *_p_GeosMultiLinearRingTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiLinearRing *) x)); } static void *_p_GeosPolygonTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosPolygon *) x)); } static void *_p_GeosMultiPolygonTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiPolygon *) x)); } static void *_p_GeosPointTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosPoint *) x)); } static void *_p_GeosLineStringTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosLineString *) x)); } static void *_p_GeosLinearRingTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosLinearRing *) x)); } static void *_p_GeosMultiPointTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiPoint *) x)); } static void *_p_GeosMultiLineStringTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiLineString *) x)); } static void *_p_GeosMultiLinearRingTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiLinearRing *) x)); } static void *_p_GeosGeometryCollectionTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosGeometryCollection *) x)); } static swig_type_info _swigt__p_GeosCoordinateSequence = {"_p_GeosCoordinateSequence", "GeosCoordinateSequence *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosGeometry = {"_p_GeosGeometry", "GeosGeometry *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosGeometryCollection = {"_p_GeosGeometryCollection", "GeosGeometryCollection *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosIndexItem = {"_p_GeosIndexItem", "GeosIndexItem *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosLineString = {"_p_GeosLineString", "GeosLineString *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosLinearRing = {"_p_GeosLinearRing", "GeosLinearRing *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiLineString = {"_p_GeosMultiLineString", "GeosMultiLineString *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiLinearRing = {"_p_GeosMultiLinearRing", "GeosMultiLinearRing *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiPoint = {"_p_GeosMultiPoint", "GeosMultiPoint *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiPolygon = {"_p_GeosMultiPolygon", "GeosMultiPolygon *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPoint = {"_p_GeosPoint", "GeosPoint *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPolygon = {"_p_GeosPolygon", "GeosPolygon *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPreparedGeometry = {"_p_GeosPreparedGeometry", "GeosPreparedGeometry *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosQueryCallback = {"_p_GeosQueryCallback", "GeosQueryCallback *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosSTRtree = {"_p_GeosSTRtree", "GeosSTRtree *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWkbReader = {"_p_GeosWkbReader", "GeosWkbReader *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWkbWriter = {"_p_GeosWkbWriter", "GeosWkbWriter *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWktReader = {"_p_GeosWktReader", "GeosWktReader *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWktWriter = {"_p_GeosWktWriter", "GeosWktWriter *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_GeosLinearRing = {"_p_p_GeosLinearRing", "GeosLinearRing **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_size_t = {"_p_size_t", "size_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argument", "std::invalid_argument *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_GeosCoordinateSequence, &_swigt__p_GeosGeometry, &_swigt__p_GeosGeometryCollection, &_swigt__p_GeosIndexItem, &_swigt__p_GeosLineString, &_swigt__p_GeosLinearRing, &_swigt__p_GeosMultiLineString, &_swigt__p_GeosMultiLinearRing, &_swigt__p_GeosMultiPoint, &_swigt__p_GeosMultiPolygon, &_swigt__p_GeosPoint, &_swigt__p_GeosPolygon, &_swigt__p_GeosPreparedGeometry, &_swigt__p_GeosQueryCallback, &_swigt__p_GeosSTRtree, &_swigt__p_GeosWkbReader, &_swigt__p_GeosWkbWriter, &_swigt__p_GeosWktReader, &_swigt__p_GeosWktWriter, &_swigt__p_char, &_swigt__p_p_GeosLinearRing, &_swigt__p_size_t, &_swigt__p_std__invalid_argument, &_swigt__p_swig__SwigPyIterator, &_swigt__p_unsigned_char, }; static swig_cast_info _swigc__p_GeosCoordinateSequence[] = { {&_swigt__p_GeosCoordinateSequence, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosGeometry[] = { {&_swigt__p_GeosPolygon, _p_GeosPolygonTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiPolygon, _p_GeosMultiPolygonTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosPoint, _p_GeosPointTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosGeometry, 0, 0, 0}, {&_swigt__p_GeosLineString, _p_GeosLineStringTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosLinearRing, _p_GeosLinearRingTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiPoint, _p_GeosMultiPointTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiLineString, _p_GeosMultiLineStringTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiLinearRing, _p_GeosMultiLinearRingTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosGeometryCollection, _p_GeosGeometryCollectionTo_p_GeosGeometry, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosGeometryCollection[] = { {&_swigt__p_GeosMultiPolygon, _p_GeosMultiPolygonTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiPoint, _p_GeosMultiPointTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiLineString, _p_GeosMultiLineStringTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiLinearRing, _p_GeosMultiLinearRingTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosGeometryCollection, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosIndexItem[] = { {&_swigt__p_GeosIndexItem, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosLineString[] = { {&_swigt__p_GeosLineString, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosLinearRing[] = { {&_swigt__p_GeosLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiLineString[] = { {&_swigt__p_GeosMultiLineString, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiLinearRing[] = { {&_swigt__p_GeosMultiLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiPoint[] = { {&_swigt__p_GeosMultiPoint, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiPolygon[] = { {&_swigt__p_GeosMultiPolygon, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPoint[] = { {&_swigt__p_GeosPoint, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPolygon[] = { {&_swigt__p_GeosPolygon, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPreparedGeometry[] = { {&_swigt__p_GeosPreparedGeometry, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosQueryCallback[] = { {&_swigt__p_GeosQueryCallback, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosSTRtree[] = { {&_swigt__p_GeosSTRtree, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWkbReader[] = { {&_swigt__p_GeosWkbReader, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWkbWriter[] = { {&_swigt__p_GeosWkbWriter, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWktReader[] = { {&_swigt__p_GeosWktReader, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWktWriter[] = { {&_swigt__p_GeosWktWriter, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_GeosLinearRing[] = { {&_swigt__p_p_GeosLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_size_t[] = { {&_swigt__p_size_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_std__invalid_argument[] = { {&_swigt__p_std__invalid_argument, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_swig__SwigPyIterator[] = { {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_GeosCoordinateSequence, _swigc__p_GeosGeometry, _swigc__p_GeosGeometryCollection, _swigc__p_GeosIndexItem, _swigc__p_GeosLineString, _swigc__p_GeosLinearRing, _swigc__p_GeosMultiLineString, _swigc__p_GeosMultiLinearRing, _swigc__p_GeosMultiPoint, _swigc__p_GeosMultiPolygon, _swigc__p_GeosPoint, _swigc__p_GeosPolygon, _swigc__p_GeosPreparedGeometry, _swigc__p_GeosQueryCallback, _swigc__p_GeosSTRtree, _swigc__p_GeosWkbReader, _swigc__p_GeosWkbWriter, _swigc__p_GeosWktReader, _swigc__p_GeosWktWriter, _swigc__p_char, _swigc__p_p_GeosLinearRing, _swigc__p_size_t, _swigc__p_std__invalid_argument, _swigc__p_swig__SwigPyIterator, _swigc__p_unsigned_char, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_const_info swig_const_table[] = { {0, 0, 0, 0.0, 0, 0}}; #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * * The generated swig_type_info structures are assigned staticly to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #if 0 } /* c-mode */ #endif #endif #if 0 #define SWIGRUNTIME_DEBUG #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int found, init; clientdata = clientdata; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; swig_module.next = &swig_module; init = 1; } else { init = 0; } /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); module_head = &swig_module; } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ found=0; iter=module_head; do { if (iter==&swig_module) { found=1; break; } iter=iter->next; } while (iter!= module_head); /* if the is found in the list, then all is done and we may leave */ if (found) return; /* otherwise we must add out module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } /* When multiple interpeters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif for (i = 0; i < swig_module.size; ++i) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found type %s\n", type->name); #endif if (swig_module.type_initial[i]->clientdata) { type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif } } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif } if (ret) { if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif cast->type = ret; ret = 0; } else { /* Check for casting already in the list */ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif if (!ocast) ret = 0; } } if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { int j = 0; swig_cast_info *cast = swig_module.cast_initial[i]; printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); while (cast->type) { printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); cast++; ++j; } printf("---- Total casts: %d\n",j); } printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus #if 0 { /* c-mode */ #endif } #endif #ifdef __cplusplus extern "C" { #endif /* Python-specific SWIG API */ #define SWIG_newvarlink() SWIG_Python_newvarlink() #define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) #define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) /* ----------------------------------------------------------------------------- * global variable support code. * ----------------------------------------------------------------------------- */ typedef struct swig_globalvar { char *name; /* Name of global variable */ PyObject *(*get_attr)(void); /* Return the current value */ int (*set_attr)(PyObject *); /* Set the value */ struct swig_globalvar *next; } swig_globalvar; typedef struct swig_varlinkobject { PyObject_HEAD swig_globalvar *vars; } swig_varlinkobject; SWIGINTERN PyObject * swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { #if PY_VERSION_HEX >= 0x03000000 return PyUnicode_InternFromString(""); #else return PyString_FromString(""); #endif } SWIGINTERN PyObject * swig_varlink_str(swig_varlinkobject *v) { #if PY_VERSION_HEX >= 0x03000000 PyObject *str = PyUnicode_InternFromString("("); PyObject *tail; PyObject *joined; swig_globalvar *var; for (var = v->vars; var; var=var->next) { tail = PyUnicode_FromString(var->name); joined = PyUnicode_Concat(str, tail); Py_DecRef(str); Py_DecRef(tail); str = joined; if (var->next) { tail = PyUnicode_InternFromString(", "); joined = PyUnicode_Concat(str, tail); Py_DecRef(str); Py_DecRef(tail); str = joined; } } tail = PyUnicode_InternFromString(")"); joined = PyUnicode_Concat(str, tail); Py_DecRef(str); Py_DecRef(tail); str = joined; #else PyObject *str = PyString_FromString("("); swig_globalvar *var; for (var = v->vars; var; var=var->next) { PyString_ConcatAndDel(&str,PyString_FromString(var->name)); if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); } PyString_ConcatAndDel(&str,PyString_FromString(")")); #endif return str; } SWIGINTERN int swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { char *tmp; PyObject *str = swig_varlink_str(v); fprintf(fp,"Swig global variables "); fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); SWIG_Python_str_DelForPy3(tmp); Py_DECREF(str); return 0; } SWIGINTERN void swig_varlink_dealloc(swig_varlinkobject *v) { swig_globalvar *var = v->vars; while (var) { swig_globalvar *n = var->next; free(var->name); free(var); var = n; } } SWIGINTERN PyObject * swig_varlink_getattr(swig_varlinkobject *v, char *n) { PyObject *res = NULL; swig_globalvar *var = v->vars; while (var) { if (strcmp(var->name,n) == 0) { res = (*var->get_attr)(); break; } var = var->next; } if (res == NULL && !PyErr_Occurred()) { PyErr_SetString(PyExc_NameError,"Unknown C global variable"); } return res; } SWIGINTERN int swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { int res = 1; swig_globalvar *var = v->vars; while (var) { if (strcmp(var->name,n) == 0) { res = (*var->set_attr)(p); break; } var = var->next; } if (res == 1 && !PyErr_Occurred()) { PyErr_SetString(PyExc_NameError,"Unknown C global variable"); } return res; } SWIGINTERN PyTypeObject* swig_varlink_type(void) { static char varlink__doc__[] = "Swig var link object"; static PyTypeObject varlink_type; static int type_init = 0; if (!type_init) { const PyTypeObject tmp = { /* PyObject header changed in Python 3 */ #if PY_VERSION_HEX >= 0x03000000 PyVarObject_HEAD_INIT(NULL, 0) #else PyObject_HEAD_INIT(NULL) 0, /* ob_size */ #endif (char *)"swigvarlink", /* tp_name */ sizeof(swig_varlinkobject), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor) swig_varlink_dealloc, /* tp_dealloc */ (printfunc) swig_varlink_print, /* tp_print */ (getattrfunc) swig_varlink_getattr, /* tp_getattr */ (setattrfunc) swig_varlink_setattr, /* tp_setattr */ 0, /* tp_compare */ (reprfunc) swig_varlink_repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ (reprfunc) swig_varlink_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ 0, /* tp_flags */ varlink__doc__, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ #if PY_VERSION_HEX >= 0x02020000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ #endif #if PY_VERSION_HEX >= 0x02030000 0, /* tp_del */ #endif #if PY_VERSION_HEX >= 0x02060000 0, /* tp_version */ #endif #ifdef COUNT_ALLOCS 0,0,0,0 /* tp_alloc -> tp_next */ #endif }; varlink_type = tmp; type_init = 1; #if PY_VERSION_HEX < 0x02020000 varlink_type.ob_type = &PyType_Type; #else if (PyType_Ready(&varlink_type) < 0) return NULL; #endif } return &varlink_type; } /* Create a variable linking object for use later */ SWIGINTERN PyObject * SWIG_Python_newvarlink(void) { swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); if (result) { result->vars = 0; } return ((PyObject*) result); } SWIGINTERN void SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { swig_varlinkobject *v = (swig_varlinkobject *) p; swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); if (gv) { size_t size = strlen(name)+1; gv->name = (char *)malloc(size); if (gv->name) { strncpy(gv->name,name,size); gv->get_attr = get_attr; gv->set_attr = set_attr; gv->next = v->vars; } } v->vars = gv; } SWIGINTERN PyObject * SWIG_globals(void) { static PyObject *_SWIG_globals = 0; if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); return _SWIG_globals; } /* ----------------------------------------------------------------------------- * constants/methods manipulation * ----------------------------------------------------------------------------- */ /* Install Constants */ SWIGINTERN void SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { PyObject *obj = 0; size_t i; for (i = 0; constants[i].type; ++i) { switch(constants[i].type) { case SWIG_PY_POINTER: obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); break; case SWIG_PY_BINARY: obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); break; default: obj = 0; break; } if (obj) { PyDict_SetItemString(d, constants[i].name, obj); Py_DECREF(obj); } } } /* -----------------------------------------------------------------------------*/ /* Fix SwigMethods to carry the callback ptrs when needed */ /* -----------------------------------------------------------------------------*/ SWIGINTERN void SWIG_Python_FixMethods(PyMethodDef *methods, swig_const_info *const_table, swig_type_info **types, swig_type_info **types_initial) { size_t i; for (i = 0; methods[i].ml_name; ++i) { const char *c = methods[i].ml_doc; if (c && (c = strstr(c, "swig_ptr: "))) { int j; swig_const_info *ci = 0; const char *name = c + 10; for (j = 0; const_table[j].type; ++j) { if (strncmp(const_table[j].name, name, strlen(const_table[j].name)) == 0) { ci = &(const_table[j]); break; } } if (ci) { void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; if (ptr) { size_t shift = (ci->ptype) - types; swig_type_info *ty = types_initial[shift]; size_t ldoc = (c - methods[i].ml_doc); size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; char *ndoc = (char*)malloc(ldoc + lptr + 10); if (ndoc) { char *buff = ndoc; strncpy(buff, methods[i].ml_doc, ldoc); buff += ldoc; strncpy(buff, "swig_ptr: ", 10); buff += 10; SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); methods[i].ml_doc = ndoc; } } } } } } #ifdef __cplusplus } #endif /* -----------------------------------------------------------------------------* * Partial Init method * -----------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" #endif SWIGEXPORT #if PY_VERSION_HEX >= 0x03000000 PyObject* #else void #endif SWIG_init(void) { PyObject *m, *d, *md; #if PY_VERSION_HEX >= 0x03000000 static struct PyModuleDef SWIG_module = { # if PY_VERSION_HEX >= 0x03020000 PyModuleDef_HEAD_INIT, # else { PyObject_HEAD_INIT(NULL) NULL, /* m_init */ 0, /* m_index */ NULL, /* m_copy */ }, # endif (char *) SWIG_name, NULL, -1, SwigMethods, NULL, NULL, NULL, NULL }; #endif #if defined(SWIGPYTHON_BUILTIN) static SwigPyClientData SwigPyObject_clientdata = { 0, 0, 0, 0, 0, 0, 0 }; static PyGetSetDef this_getset_def = { (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL }; static SwigPyGetSet thisown_getset_closure = { (PyCFunction) SwigPyObject_own, (PyCFunction) SwigPyObject_own }; static PyGetSetDef thisown_getset_def = { (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure }; PyObject *metatype_args; PyTypeObject *builtin_pytype; int builtin_base_count; swig_type_info *builtin_basetype; PyObject *tuple; PyGetSetDescrObject *static_getset; PyTypeObject *metatype; SwigPyClientData *cd; PyObject *public_interface, *public_symbol; PyObject *this_descr; PyObject *thisown_descr; int i; (void)builtin_pytype; (void)builtin_base_count; (void)builtin_basetype; (void)tuple; (void)static_getset; /* metatype is used to implement static member variables. */ metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type); assert(metatype_args); metatype = (PyTypeObject *) PyType_Type.tp_call((PyObject *) &PyType_Type, metatype_args, NULL); assert(metatype); Py_DECREF(metatype_args); metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro; assert(PyType_Ready(metatype) >= 0); #endif /* Fix SwigMethods to carry the callback ptrs when needed */ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); #if PY_VERSION_HEX >= 0x03000000 m = PyModule_Create(&SWIG_module); #else m = Py_InitModule((char *) SWIG_name, SwigMethods); #endif md = d = PyModule_GetDict(m); SWIG_InitializeModule(0); #ifdef SWIGPYTHON_BUILTIN SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); assert(SwigPyObject_stype); cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; if (!cd) { SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; SwigPyObject_clientdata.pytype = SwigPyObject_TypeOnce(); } else if (SwigPyObject_TypeOnce()->tp_basicsize != cd->pytype->tp_basicsize) { PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); # if PY_VERSION_HEX >= 0x03000000 return NULL; # else return; # endif } /* All objects have a 'this' attribute */ this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); (void)this_descr; /* All objects have a 'thisown' attribute */ thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); (void)thisown_descr; public_interface = PyList_New(0); public_symbol = 0; (void)public_symbol; PyDict_SetItemString(md, "__all__", public_interface); Py_DECREF(public_interface); for (i = 0; SwigMethods[i].ml_name != NULL; ++i) SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); for (i = 0; swig_const_table[i].name != 0; ++i) SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); #endif SWIG_InstallConstants(d,swig_const_table); SWIG_Python_SetConstant(d, "GEOS_VERSION_MAJOR",SWIG_From_int(static_cast< int >(3))); SWIG_Python_SetConstant(d, "GEOS_VERSION_MINOR",SWIG_From_int(static_cast< int >(4))); SWIG_Python_SetConstant(d, "GEOS_VERSION",SWIG_FromCharPtr("3.4.0dev")); SWIG_Python_SetConstant(d, "GEOS_JTS_PORT",SWIG_FromCharPtr("1.12.0")); SWIG_Python_SetConstant(d, "GEOS_CAPI_VERSION_MAJOR",SWIG_From_int(static_cast< int >(1))); SWIG_Python_SetConstant(d, "GEOS_CAPI_VERSION_MINOR",SWIG_From_int(static_cast< int >(8))); SWIG_Python_SetConstant(d, "GEOS_CAPI_VERSION_PATCH",SWIG_From_int(static_cast< int >(0))); SWIG_Python_SetConstant(d, "GEOS_CAPI_FIRST_INTERFACE",SWIG_From_int(static_cast< int >(1))); SWIG_Python_SetConstant(d, "GEOS_CAPI_LAST_INTERFACE",SWIG_From_int(static_cast< int >((1+8)))); SWIG_Python_SetConstant(d, "GEOS_CAPI_VERSION",SWIG_FromCharPtr("3.4.0dev-CAPI-1.8.0")); SWIG_Python_SetConstant(d, "GEOS_POINT",SWIG_From_int(static_cast< int >(GEOS_POINT))); SWIG_Python_SetConstant(d, "GEOS_LINESTRING",SWIG_From_int(static_cast< int >(GEOS_LINESTRING))); SWIG_Python_SetConstant(d, "GEOS_LINEARRING",SWIG_From_int(static_cast< int >(GEOS_LINEARRING))); SWIG_Python_SetConstant(d, "GEOS_POLYGON",SWIG_From_int(static_cast< int >(GEOS_POLYGON))); SWIG_Python_SetConstant(d, "GEOS_MULTIPOINT",SWIG_From_int(static_cast< int >(GEOS_MULTIPOINT))); SWIG_Python_SetConstant(d, "GEOS_MULTILINESTRING",SWIG_From_int(static_cast< int >(GEOS_MULTILINESTRING))); SWIG_Python_SetConstant(d, "GEOS_MULTIPOLYGON",SWIG_From_int(static_cast< int >(GEOS_MULTIPOLYGON))); SWIG_Python_SetConstant(d, "GEOS_GEOMETRYCOLLECTION",SWIG_From_int(static_cast< int >(GEOS_GEOMETRYCOLLECTION))); SWIG_Python_SetConstant(d, "GEOS_WKB_XDR",SWIG_From_int(static_cast< int >(GEOS_WKB_XDR))); SWIG_Python_SetConstant(d, "GEOS_WKB_NDR",SWIG_From_int(static_cast< int >(GEOS_WKB_NDR))); initGEOS(noticeHandler, errorHandler); #if PY_VERSION_HEX >= 0x03000000 return m; #else return; #endif } geos-3.4.2/swig/python/python.i0000644000175000017500000000360612206417150016265 0ustar frankiefrankie/* ========================================================================= * Copyright 2005-2007 Charlie Savage, cfis@interserv.com * * Interface for a SWIG generated geos module. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ========================================================================= */ /* Convert a Ruby array of GeosLinearRings to a C array. */ %typemap(in,numinputs=1) (GeosLinearRing **holes, size_t nholes) { if ($input == Py_None) { $1 = NULL; $2 = 0; } else { /* Make sure the input can be treated as an array. */ if (!PySequence_Check($input)) SWIG_exception_fail(SWIG_RuntimeError, "in method '" "createPolygon" "', argument " "1"" of type '" "GeosLinearRing *""'"); /* Get the length */ $2 = PySequence_Size($input); /* Allocate space for the C array. */ $1 = (GeosLinearRing**) malloc($2*sizeof(GeosLinearRing*)); for(size_t i = 0; i<$2; i++) { /* Get the Python Object */ PyObject *item = PySequence_GetItem($input,i); /* Get the underlying pointer and give up ownership of it. */ GeosLinearRing *ring = NULL; int convertResult = SWIG_ConvertPtr(item, (void**)&ring, $descriptor(GeosLinearRing*), SWIG_POINTER_DISOWN); if (!SWIG_IsOK(convertResult)) { SWIG_exception_fail(SWIG_ArgError(convertResult), "in method '" "createPolygon" "', argument " "1"" of type '" "GeosLinearRing *""'"); } /* Put the pointer in the array */ $1[i] = ring; } } } %typemap(freearg) (GeosLinearRing **holes, size_t nholes) { if ($1) { free((void*) $1); } } geos-3.4.2/swig/python/tests/0000755000175000017500000000000012206417241015730 5ustar frankiefrankiegeos-3.4.2/swig/python/tests/Makefile.am0000644000175000017500000000030312206417150017757 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # PYTHON_TESTS = \ example.py \ test_geometry.py \ runtests.py EXTRA_DIST = $(PYTHON_TESTS) test: $(PYTHON) runtests.py geos-3.4.2/swig/python/tests/Makefile.in0000644000175000017500000002670612206417165020015 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/python/tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # PYTHON_TESTS = \ example.py \ test_geometry.py \ runtests.py EXTRA_DIST = $(PYTHON_TESTS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/python/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/python/tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am test: $(PYTHON) runtests.py # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/swig/python/tests/example.py0000644000175000017500000003547212206417150017747 0ustar frankiefrankieimport os import sys import distutils.util import math # Put local build directory on head of python path platformdir = '-'.join((distutils.util.get_platform(), '.'.join(map(str, sys.version_info[0:2])))) sys.path.insert(0, os.path.join('build', 'lib.' + platformdir)) # import geos from the local build directory import geos pm = geos.PrecisionModel(2.0,0,0) global_factory = geos.GeometryFactory(pm,-1) def wkt_print_geoms(geoms): wkt = geos.WKTWriter() size = len(geoms) for i in range(size): tmp = wkt.write(geoms[i]) print "[%d]" % i, tmp def create_point(x,y): c = geos.Coordinate(x,y) p = global_factory.createPoint(c) return p def create_ushaped_linestring(xoffset, yoffset, side): cl = geos.DefaultCoordinateSequence() cl.add(geos.Coordinate(xoffset, yoffset)) cl.add(geos.Coordinate(xoffset, yoffset+side)) cl.add(geos.Coordinate(xoffset+side, yoffset+side)) cl.add(geos.Coordinate(xoffset+side, yoffset)) ls = global_factory.createLineString(cl) return ls def create_square_linearring(xoffset,yoffset,side): cl = geos.DefaultCoordinateSequence() cl.add(geos.Coordinate(xoffset,yoffset)) cl.add(geos.Coordinate(xoffset,yoffset+side)) cl.add(geos.Coordinate(xoffset+side,yoffset+side)) cl.add(geos.Coordinate(xoffset+side,yoffset)) cl.add(geos.Coordinate(xoffset,yoffset)) lr = global_factory.createLinearRing(cl) return lr def create_square_polygon(xoffset,yoffset,side): outer = create_square_linearring(xoffset,yoffset,side) inner = create_square_linearring(xoffset+(side/3.),yoffset+(side/3.),(side/3.)) holes = geos.vector_GeometryP() holes.push_back(inner) poly = global_factory.createPolygon(outer,holes) return poly def create_simple_collection(geoms): collect = geos.vector_GeometryP() for i in geoms: collect.push_back(i) return global_factory.createGeometryCollection(collect) def create_circle(centerX,centerY,radius): shapefactory = geos.GeometricShapeFactory(global_factory) shapefactory.setCentre(geos.Coordinate(centerX, centerY)) shapefactory.setSize(radius) return shapefactory.createCircle() def create_ellipse(centerX,centerY,width,height): shapefactory = geos.GeometricShapeFactory(global_factory) shapefactory.setCentre(geos.Coordinate(centerX, centerY)) shapefactory.setHeight(height) shapefactory.setWidth(width) return shapefactory.createCircle() def create_rectangle(llX,llY,width,height): shapefactory = geos.GeometricShapeFactory(global_factory) shapefactory.setBase(geos.Coordinate(llX, llY)) shapefactory.setHeight(height) shapefactory.setWidth(width) shapefactory.setNumPoints(4) return shapefactory.createRectangle() def create_arc(llX,llY,width,height,startang,endang): shapefactory = geos.GeometricShapeFactory(global_factory) shapefactory.setBase(geos.Coordinate(llX, llY)) shapefactory.setHeight(height) shapefactory.setWidth(width) #shapefactory.setNumPoints(100) #the default (100 pts) return shapefactory.createArc(startang, endang) def do_all(): geoms = [] geoms.append(create_point(150, 350)) geoms.append(create_ushaped_linestring(60,60,100)) geoms.append(create_square_linearring(0,0,100)) geoms.append(create_square_polygon(0,200,300)) geoms.append(create_square_polygon(0,250,300)) geoms.append(create_simple_collection(geoms)) # These ones use a GeometricShapeFactory geoms.append(create_circle(0, 0, 10)) geoms.append(create_ellipse(0, 0, 8, 12)) geoms.append(create_rectangle(-5, -5, 10, 10)) # a square geoms.append(create_rectangle(-5, -5, 10, 20)) # a rectangle # The upper-right quarter of a vertical ellipse geoms.append(create_arc(0, 0, 10, 20, 0, math.pi/2)) print "--------HERE ARE THE BASE GEOMS ----------" wkt_print_geoms(geoms) #################### # UNARY OPERATIONS # #################### ################ #CENTROID # ################ # Find centroid of each base geometry newgeoms = [] for i in range(len(geoms)): newgeoms.append(geoms[i].getCentroid()) print "\n","------- AND HERE ARE THEIR CENTROIDS -----" wkt_print_geoms(newgeoms) ################ # BUFFER # ################ newgeoms = [] for i in range(len(geoms)): try: newgeoms.append(geoms[i].buffer(10)) except geos.GEOSException(): exc = geos.GEOSException() print "GEOS Exception: geometry ",geoms[i],"->buffer(10): ",exc.toString() print "\n","--------HERE COMES THE BUFFERED GEOMS ----------" wkt_print_geoms(newgeoms) ################ # CONVEX HULL # ################ newgeoms = [] for i in range(len(geoms)): newgeoms.append(geoms[i].convexHull()) print "\n","--------HERE COMES THE HULLS----------" wkt_print_geoms(newgeoms) #################### # RELATIONAL OPERATORS # #################### print "-------------------------------------------------------------------------------" print "RELATIONAL OPERATORS" print "-------------------------------------------------------------------------------" size = len(geoms) ################ # DISJOINT # ################ print print "\t".join([" DISJOINT "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].disjoint(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # TOUCHES # ################ print print "\t".join([" TOUCHES "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].touches(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # INTERSECTS # ################ print print "\t".join([" INTERSECTS "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].intersects(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # CROSSES # ################ print print "\t".join([" CROSSES "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].crosses(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # WITHIN # ################ print print "\t".join([" WITHIN "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].within(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # CONTAINS # ################ print print "\t".join([" CONTAINS "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].contains(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # OVERLAPS # ################ print print "\t".join([" OVERLAPS "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].overlaps(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # RELATE # ################ print print "\t".join([" RELATE "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): im = geos.IntersectionMatrix('') try: if geoms[i].relate(geoms[j],"212101212"): print " 1\t", else: print " 0\t", im=geoms[i].relate(geoms[j]) except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # EQUALS # ################ print print "\t".join([" EQUALS "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].equals(geoms[j]): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # EQUALS_EXACT # ################ print print "\t".join(["EQUALS_EXACT "]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].equalsExact(geoms[j],0.5): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print ################ # IS_WITHIN_DISTANCE # ################ print print "\t".join(["IS_WITHIN_DIST"]+["[%d]" % i for i in range(size)]) for i in range(size): print " [%d]\t" % i, for j in range(size): try: if geoms[i].isWithinDistance(geoms[j],2): print " 1\t", else: print " 0\t", except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: print " X\t", print #################### # COMBINATIONS #################### print print "-------------------------------------------------------------------------------" print "COMBINATIONS" print "-------------------------------------------------------------------------------" ################ # UNION ################ newgeoms = [] for i in range(size-1): for j in range(i+1,size): try: newgeoms.append(geoms[i].Union(geoms[j])) except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: pass print "\n", "----- AND HERE ARE SOME UNION COMBINATIONS ------" wkt_print_geoms(newgeoms) ################ # INTERSECTION ################ newgeoms = [] for i in range(size-1): for j in range(i+1,size): try: newgeoms.append(geoms[i].intersection(geoms[j])) except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: pass print "\n", "----- HERE ARE SOME INTERSECTIONS COMBINATIONS ------" wkt_print_geoms(newgeoms) ################ # DIFFERENCE ################ newgeoms = [] for i in range(size-1): for j in range(i+1,size): try: newgeoms.append(geoms[i].difference(geoms[j])) except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: pass print "\n", "----- HERE ARE SOME DIFFERENCE COMBINATIONS ------" wkt_print_geoms(newgeoms) ################ # SYMMETRIC DIFFERENCE ################ newgeoms = [] for i in range(size-1): for j in range(i+1,size): try: newgeoms.append(geoms[i].symDifference(geoms[j])) except geos.GEOSException(): exc = geos.GEOSException() print exc.toString() except: pass print "\n", "----- HERE ARE SYMMETRIC DIFFERENCES ------" wkt_print_geoms(newgeoms) ################ # LINEMERGE ################ temp = geos.vector_GeometryP() for g in geoms: temp.push_back(g) lm = geos.LineMerger() lm.add(temp) mls = lm.getMergedLineStrings() newgeoms = [] for i in range(mls.size()): newgeoms.append(mls[i]) del mls print "\n", "----- HERE IS THE LINEMERGE OUTPUT ------" wkt_print_geoms(newgeoms) ################ # POLYGONIZE ################ temp = geos.vector_GeometryP() for g in geoms: temp.push_back(g) plgnzr = geos.Polygonizer() plgnzr.add(temp) polys = plgnzr.getPolygons() newgeoms = [] for i in range(polys.size()): newgeoms.append(polys[i]) del polys print "\n", "----- HERE IS POLYGONIZE OUTPUT ------" wkt_print_geoms(newgeoms) print "GEOS", geos.geosversion(), "ported from JTS", geos.jtsport() do_all() geos-3.4.2/swig/python/tests/runtests.py0000644000175000017500000000157012206417150020173 0ustar frankiefrankie# =========================================================================== # Copyright 2004 Sean Gillies, sgillies@frii.com # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # =========================================================================== # # Execute this module as a script from PyGEOS # # python tests/runtests.py -v # # =========================================================================== import unittest # Import test cases from test_geometry import TestGeometry # Create a test suite suite = unittest.TestSuite() # Add tests to the suite suite.addTest(TestGeometry) # If module is run as a script, execute every test case in the suite if __name__ == '__main__': unittest.main() geos-3.4.2/swig/python/tests/test_geometry.py0000644000175000017500000001465312206417150021204 0ustar frankiefrankie#!/usr/bin/env python import unittest import geos class TestGeometry(unittest.TestCase): def testCreatePoint(self): cs = geos.CoordinateSequence(1,3) cs.setX(0, 7) cs.setY(0, 8) cs.setZ(0, 9) geom = geos.createPoint(cs) assert isinstance(geom, geos.Point) self.assertEqual('Point', geom.geomType()) self.assertEqual(geos.GEOS_POINT, geom.typeId()) self.assertEqual(False, geom.isEmpty()) self.assertEqual(True, geom.isValid()) self.assertEqual(True, geom.isSimple()) self.assertEqual(False, geom.isRing()) self.assertEqual(True, geom.hasZ()) self.assertEqual(1, geom.getNumGeometries()) coords = geom.getCoordSeq() assert isinstance(coords, geos.CoordinateSequence) self.assertEqual(7, coords.getX(0)) self.assertEqual(8, coords.getY(0)) self.assertEqual(9, coords.getZ(0)) self.assertEqual(0, geom.area()) self.assertEqual(0, geom.length()) def testCreatePointIllegal(self): cs = geos.CoordinateSequence(0, 0) self.assertRaises(RuntimeError, geos.createPoint, cs) def testCreateLineString(self): cs = geos.CoordinateSequence(2,3) cs.setX(0, 7) cs.setY(0, 8) cs.setZ(0, 9) cs.setX(1, 3) cs.setY(1, 3) cs.setZ(1, 3) geom = geos.createLineString(cs) assert isinstance(geom, geos.LineString) self.assertEqual('LineString', geom.geomType()) self.assertEqual(geos.GEOS_LINESTRING, geom.typeId()) self.assertEqual(False, geom.isEmpty()) self.assertEqual(True, geom.isValid()) self.assertEqual(True, geom.isSimple()) self.assertEqual(False, geom.isRing()) self.assertEqual(True, geom.hasZ()) self.assertEqual(1, geom.getNumGeometries()) coords = geom.getCoordSeq() assert isinstance(coords, geos.CoordinateSequence) self.assertEqual(7, coords.getX(0)) self.assertEqual(8, coords.getY(0)) self.assertEqual(9, coords.getZ(0)) self.assertEqual(3, coords.getX(1)) self.assertEqual(3, coords.getY(1)) self.assertEqual(3, coords.getZ(1)) self.assertEqual(0, geom.area()) self.assertEqual(6.4031242374328485, geom.length()) def testCreateLineStringIllegal(self): cs = geos.CoordinateSequence(1,0) self.assertRaises(RuntimeError, geos.createLineString, cs) def testCreateLinearRing(self): cs = geos.CoordinateSequence(4,3) cs.setX(0, 7) cs.setY(0, 8) cs.setZ(0, 9) cs.setX(1, 3) cs.setY(1, 3) cs.setZ(1, 3) cs.setX(2, 11) cs.setY(2, 15.2) cs.setZ(2, 2) cs.setX(3, 7) cs.setY(3, 8) cs.setZ(3, 9) geom = geos.createLinearRing(cs) assert isinstance(geom, geos.LinearRing) self.assertEqual('LinearRing', geom.geomType()) self.assertEqual(geos.GEOS_LINEARRING, geom.typeId()) self.assertEqual(False, geom.isEmpty()) self.assertEqual(True, geom.isValid()) self.assertEqual(True, geom.isSimple()) self.assertEqual(True, geom.isRing()) self.assertEqual(True, geom.hasZ()) self.assertEqual(1, geom.getNumGeometries()) coords = geom.getCoordSeq() assert isinstance(coords, geos.CoordinateSequence) self.assertEqual(7, coords.getX(0)) self.assertEqual(8, coords.getY(0)) self.assertEqual(9, coords.getZ(0)) self.assertEqual(3, coords.getX(1)) self.assertEqual(3, coords.getY(1)) self.assertEqual(3, coords.getZ(1)) self.assertEqual(11, coords.getX(2)) self.assertEqual(15.2, coords.getY(2)) self.assertEqual(2, coords.getZ(2)) self.assertEqual(7, coords.getX(3)) self.assertEqual(8, coords.getY(3)) self.assertEqual(9, coords.getZ(3)) self.assertEqual(0, geom.area()) self.assertEqual(29.228665330091953, geom.length()) def testCreateLinearRingIllegal(self): cs = geos.CoordinateSequence(1,0) self.assertRaises(RuntimeError, geos.createLinearRing, cs) def testCreatePolygon(self): # Polygon shell cs = geos.CoordinateSequence(5,2) cs.setX(0, 0) cs.setY(0, 0) cs.setX(1, 0) cs.setY(1, 10) cs.setX(2, 10) cs.setY(2, 10) cs.setX(3, 10) cs.setY(3, 0) cs.setX(4, 0) cs.setY(4, 0) shell = geos.createLinearRing(cs) geom = geos.createPolygon(shell) assert isinstance(geom, geos.Polygon) self.assertEqual('Polygon', geom.geomType()) self.assertEqual(geos.GEOS_POLYGON, geom.typeId()) self.assertEqual(False, geom.isEmpty()) self.assertEqual(True, geom.isValid()) self.assertEqual(True, geom.isSimple()) self.assertEqual(False, geom.isRing()) self.assertEqual(True, geom.hasZ()) self.assertEqual(1, geom.getNumGeometries()) exteriorRing = geom.getExteriorRing() assert(shell.equals(exteriorRing)) self.assertEqual(0, geom.getNumInteriorRings()) self.assertRaises(RuntimeError, geom.getInteriorRingN, 1) self.assertEqual(100, geom.area()) self.assertEqual(40, geom.length()) def testCreatePolygonWithHoles(self): # Polygon shell cs = geos.CoordinateSequence(5,2) cs.setX(0, 0) cs.setY(0, 0) cs.setX(1, 0) cs.setY(1, 10) cs.setX(2, 10) cs.setY(2, 10) cs.setX(3, 10) cs.setY(3, 0) cs.setX(4, 0) cs.setY(4, 0) shell = geos.createLinearRing(cs) # Hole 1 cs = geos.CoordinateSequence(5,2) cs.setX(0, 2) cs.setY(0, 2) cs.setX(1, 2) cs.setY(1, 4) cs.setX(2, 4) cs.setY(2, 4) cs.setX(3, 4) cs.setY(3, 2) cs.setX(4, 2) cs.setY(4, 2) hole1 = geos.createLinearRing(cs) # Hole 2 cs = geos.CoordinateSequence(5,2) cs.setX(0, 6) cs.setY(0, 6) cs.setX(1, 6) cs.setY(1, 8) cs.setX(2, 8) cs.setY(2, 8) cs.setX(3, 8) cs.setY(3, 6) cs.setX(4, 6) cs.setY(4, 6) hole2 = geos.createLinearRing(cs) geom = geos.createPolygon(shell, [hole1, hole2]) assert isinstance(geom, geos.Polygon) self.assertEqual('Polygon', geom.geomType()) self.assertEqual(geos.GEOS_POLYGON, geom.typeId()) self.assertEqual(False, geom.isEmpty()) self.assertEqual(True, geom.isValid()) self.assertEqual(True, geom.isSimple()) self.assertEqual(False, geom.isRing()) self.assertEqual(True, geom.hasZ()) self.assertEqual(1, geom.getNumGeometries()) exteriorRing = geom.getExteriorRing() assert(shell.equals(exteriorRing)) self.assertEqual(2, geom.getNumInteriorRings()) assert(hole1.equals(geom.getInteriorRingN(0))) assert(hole2.equals(geom.getInteriorRingN(1))) self.assertEqual(92, geom.area()) self.assertEqual(56, geom.length()) def testDistance(self): cs = geos.CoordinateSequence(1,2) cs.setX(0, 0) cs.setY(0, 0) geom1 = geos.createPoint(cs) cs = geos.CoordinateSequence(1,2) cs.setX(0, 3) cs.setY(0, 4) geom2 = geos.createPoint(cs) self.assertEqual(5, geom1.distance(geom2)) if __name__ == "__main__": unittest.main() geos-3.4.2/swig/ruby/0000755000175000017500000000000012206417241014226 5ustar frankiefrankiegeos-3.4.2/swig/ruby/Makefile.am0000644000175000017500000000211012206417150016253 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # EXTRA_DIST = \ ruby.i MAINTAINERCLEANFILES = geos_wrap.cxx if ENABLE_RUBY SUBDIRS = \ test BUILT_SOURCES = geos_wrap.cxx # Don't know why there needs to be dirdir but it makes automake happy rubyextensiondirdir = $(RUBY_EXTENSION_DIR) # Setup includes INCLUDES = -I$(RUBY_INCLUDE_DIR) -I$(RUBY_INCLUDE_DIR)/$(RUBY_SITE_ARCH) # Build Ruby module as shared library rubyextensiondir_LTLIBRARIES = geos.la geos_la_SOURCES = geos_wrap.cxx geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la -l$(RUBY_SO_NAME) # Only need to grab the capi header files geos_la_CPPFLAGS = -I$(top_builddir)/capi # Specify -module and -avoid-version so we can create a file called geos.dll/so which is what Ruby wants geos_la_LDFLAGS = -no-undefined -module -avoid-version -L$(RUBY_LIB_DIR) if ENABLE_SWIG geos_wrap.cxx: ../geos.i ruby.i $(SWIG) -c++ -ruby -autorename -o $@ $< else # !ENABLE_SWIG geos_wrap.cxx: ../geos.i ruby.i @echo "SWIG is disabled, can't build geos_wrap.cxx" false endif # ENABLE_SWIG endif # ENABLE_RUBY geos-3.4.2/swig/ruby/Makefile.in0000644000175000017500000006466712206417165016323 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/ruby DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(rubyextensiondirdir)" LTLIBRARIES = $(rubyextensiondir_LTLIBRARIES) @ENABLE_RUBY_TRUE@geos_la_DEPENDENCIES = \ @ENABLE_RUBY_TRUE@ $(top_builddir)/capi/libgeos_c.la am__geos_la_SOURCES_DIST = geos_wrap.cxx @ENABLE_RUBY_TRUE@am_geos_la_OBJECTS = geos_la-geos_wrap.lo geos_la_OBJECTS = $(am_geos_la_OBJECTS) geos_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(geos_la_LDFLAGS) $(LDFLAGS) -o $@ @ENABLE_RUBY_TRUE@am_geos_la_rpath = -rpath $(rubyextensiondirdir) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(geos_la_SOURCES) DIST_SOURCES = $(am__geos_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # EXTRA_DIST = \ ruby.i MAINTAINERCLEANFILES = geos_wrap.cxx @ENABLE_RUBY_TRUE@SUBDIRS = \ @ENABLE_RUBY_TRUE@ test @ENABLE_RUBY_TRUE@BUILT_SOURCES = geos_wrap.cxx # Don't know why there needs to be dirdir but it makes automake happy @ENABLE_RUBY_TRUE@rubyextensiondirdir = $(RUBY_EXTENSION_DIR) # Setup includes @ENABLE_RUBY_TRUE@INCLUDES = -I$(RUBY_INCLUDE_DIR) -I$(RUBY_INCLUDE_DIR)/$(RUBY_SITE_ARCH) # Build Ruby module as shared library @ENABLE_RUBY_TRUE@rubyextensiondir_LTLIBRARIES = geos.la @ENABLE_RUBY_TRUE@geos_la_SOURCES = geos_wrap.cxx @ENABLE_RUBY_TRUE@geos_la_LIBADD = $(top_builddir)/capi/libgeos_c.la -l$(RUBY_SO_NAME) # Only need to grab the capi header files @ENABLE_RUBY_TRUE@geos_la_CPPFLAGS = -I$(top_builddir)/capi # Specify -module and -avoid-version so we can create a file called geos.dll/so which is what Ruby wants @ENABLE_RUBY_TRUE@geos_la_LDFLAGS = -no-undefined -module -avoid-version -L$(RUBY_LIB_DIR) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/ruby/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/ruby/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-rubyextensiondirLTLIBRARIES: $(rubyextensiondir_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(rubyextensiondirdir)" || $(MKDIR_P) "$(DESTDIR)$(rubyextensiondirdir)" @list='$(rubyextensiondir_LTLIBRARIES)'; test -n "$(rubyextensiondirdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(rubyextensiondirdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(rubyextensiondirdir)"; \ } uninstall-rubyextensiondirLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(rubyextensiondir_LTLIBRARIES)'; test -n "$(rubyextensiondirdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(rubyextensiondirdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(rubyextensiondirdir)/$$f"; \ done clean-rubyextensiondirLTLIBRARIES: -test -z "$(rubyextensiondir_LTLIBRARIES)" || rm -f $(rubyextensiondir_LTLIBRARIES) @list='$(rubyextensiondir_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done geos.la: $(geos_la_OBJECTS) $(geos_la_DEPENDENCIES) $(geos_la_LINK) $(am_geos_la_rpath) $(geos_la_OBJECTS) $(geos_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geos_la-geos_wrap.Plo@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< geos_la-geos_wrap.lo: geos_wrap.cxx @am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT geos_la-geos_wrap.lo -MD -MP -MF $(DEPDIR)/geos_la-geos_wrap.Tpo -c -o geos_la-geos_wrap.lo `test -f 'geos_wrap.cxx' || echo '$(srcdir)/'`geos_wrap.cxx @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/geos_la-geos_wrap.Tpo $(DEPDIR)/geos_la-geos_wrap.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geos_wrap.cxx' object='geos_la-geos_wrap.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geos_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o geos_la-geos_wrap.lo `test -f 'geos_wrap.cxx' || echo '$(srcdir)/'`geos_wrap.cxx mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(rubyextensiondirdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool \ clean-rubyextensiondirLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-rubyextensiondirLTLIBRARIES install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-rubyextensiondirLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-rubyextensiondirLTLIBRARIES ctags ctags-recursive \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-rubyextensiondirLTLIBRARIES \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-rubyextensiondirLTLIBRARIES @ENABLE_RUBY_TRUE@@ENABLE_SWIG_TRUE@geos_wrap.cxx: ../geos.i ruby.i @ENABLE_RUBY_TRUE@@ENABLE_SWIG_TRUE@ $(SWIG) -c++ -ruby -autorename -o $@ $< @ENABLE_RUBY_TRUE@@ENABLE_SWIG_FALSE@geos_wrap.cxx: ../geos.i ruby.i @ENABLE_RUBY_TRUE@@ENABLE_SWIG_FALSE@ @echo "SWIG is disabled, can't build geos_wrap.cxx" @ENABLE_RUBY_TRUE@@ENABLE_SWIG_FALSE@ false # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/swig/ruby/geos_wrap.cxx0000644000175000017500000114116412206417150016747 0ustar frankiefrankie/* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 2.0.4 * * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make * changes to this file unless you know what you are doing--modify the SWIG * interface file instead. * ----------------------------------------------------------------------------- */ #define SWIGRUBY #ifdef __cplusplus /* SwigValueWrapper is described in swig.swg */ template class SwigValueWrapper { struct SwigMovePointer { T *ptr; SwigMovePointer(T *p) : ptr(p) { } ~SwigMovePointer() { delete ptr; } SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } } pointer; SwigValueWrapper& operator=(const SwigValueWrapper& rhs); SwigValueWrapper(const SwigValueWrapper& rhs); public: SwigValueWrapper() : pointer(0) { } SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } operator T&() const { return *pointer.ptr; } T *operator&() { return pointer.ptr; } }; template T SwigValueInit() { return T(); } #endif /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* ----------------------------------------------------------------------------- * This section contains generic SWIG labels for method/variable * declarations/attributes, and other compiler dependent labels. * ----------------------------------------------------------------------------- */ /* template workaround for compilers that cannot correctly implement the C++ standard */ #ifndef SWIGTEMPLATEDISAMBIGUATOR # if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) # define SWIGTEMPLATEDISAMBIGUATOR template # elif defined(__HP_aCC) /* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ /* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ # define SWIGTEMPLATEDISAMBIGUATOR template # else # define SWIGTEMPLATEDISAMBIGUATOR # endif #endif /* inline attribute */ #ifndef SWIGINLINE # if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define SWIGINLINE inline # else # define SWIGINLINE # endif #endif /* attribute recognised by some compilers to avoid 'unused' warnings */ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) # define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ # endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else # define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif /* internal SWIG method */ #ifndef SWIGINTERN # define SWIGINTERN static SWIGUNUSED #endif /* internal inline SWIG method */ #ifndef SWIGINTERNINLINE # define SWIGINTERNINLINE SWIGINTERN SWIGINLINE #endif /* exporting methods */ #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef GCC_HASCLASSVISIBILITY # define GCC_HASCLASSVISIBILITY # endif #endif #ifndef SWIGEXPORT # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # if defined(STATIC_LINKED) # define SWIGEXPORT # else # define SWIGEXPORT __declspec(dllexport) # endif # else # if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) # define SWIGEXPORT __attribute__ ((visibility("default"))) # else # define SWIGEXPORT # endif # endif #endif /* calling conventions for Windows */ #ifndef SWIGSTDCALL # if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL # endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ #if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) # define _CRT_SECURE_NO_DEPRECATE #endif /* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ #if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) # define _SCL_SECURE_NO_DEPRECATE #endif /* ----------------------------------------------------------------------------- * swigrun.swg * * This file contains generic C API SWIG runtime support for pointer * type checking. * ----------------------------------------------------------------------------- */ /* This should only be incremented when either the layout of swig_type_info changes, or for whatever reason, the runtime changes incompatibly */ #define SWIG_RUNTIME_VERSION "4" /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ #ifdef SWIG_TYPE_TABLE # define SWIG_QUOTE_STRING(x) #x # define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) # define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) #else # define SWIG_TYPE_TABLE_NAME #endif /* You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ #ifndef SWIGRUNTIME # define SWIGRUNTIME SWIGINTERN #endif #ifndef SWIGRUNTIMEINLINE # define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE #endif /* Generic buffer size */ #ifndef SWIG_BUFFER_SIZE # define SWIG_BUFFER_SIZE 1024 #endif /* Flags for pointer conversions */ #define SWIG_POINTER_DISOWN 0x1 #define SWIG_CAST_NEW_MEMORY 0x2 /* Flags for new pointer objects */ #define SWIG_POINTER_OWN 0x1 /* Flags/methods for returning states. The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). Use the following macros/flags to set or process the returning states. In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { // success code } else { //fail code } Now you can be more explicit: int res = SWIG_ConvertPtr(obj,vptr,ty.flags); if (SWIG_IsOK(res)) { // success code } else { // fail code } which is the same really, but now you can also do Type *ptr; int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); if (SWIG_IsOK(res)) { // success code if (SWIG_IsNewObj(res) { ... delete *ptr; } else { ... } } else { // fail code } I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as int SWIG_ConvertPtr(obj, ptr,...) { if () { if () { *ptr = ; return SWIG_NEWOBJ; } else { *ptr = ; return SWIG_OLDOBJ; } } else { return SWIG_BADOBJ; } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the SWIG errors code. Finally, if the SWIG_CASTRANK_MODE is enabled, the result code allows to return the 'cast rank', for example, if you have this int food(double) int fooi(int); and you call food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ #define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) /* The NewMask denotes the object was created (using new/malloc) */ #define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) /* The TmpMask is for in/out typemaps that use temporal objects */ #define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) /* Simple returning values */ #define SWIG_BADOBJ (SWIG_ERROR) #define SWIG_OLDOBJ (SWIG_OK) #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) /* Check, add and del mask methods */ #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) #define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) #define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) #define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) /* Cast-Rank Mode */ #if defined(SWIG_CASTRANK_MODE) # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif # ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } SWIGINTERNINLINE int SWIG_CheckState(int r) { return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast # define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) #endif #include #ifdef __cplusplus extern "C" { #endif typedef void *(*swig_converter_func)(void *, int *); typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ typedef struct swig_type_info { const char *name; /* mangled name of this type */ const char *str; /* human readable name of this type */ swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ struct swig_cast_info *cast; /* linked list of types that can cast into this type */ void *clientdata; /* language specific type data */ int owndata; /* flag if the structure owns the clientdata */ } swig_type_info; /* Structure to store a type and conversion function used for casting */ typedef struct swig_cast_info { swig_type_info *type; /* pointer to type that is equivalent to this type */ swig_converter_func converter; /* function to cast the void pointers */ struct swig_cast_info *next; /* pointer to next cast in linked list */ struct swig_cast_info *prev; /* pointer to the previous cast */ } swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ typedef struct swig_module_info { swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ size_t size; /* Number of types in this module */ struct swig_module_info *next; /* Pointer to next element in circularly linked list */ swig_type_info **type_initial; /* Array of initially generated type structures */ swig_cast_info **cast_initial; /* Array of initially generated casting structures */ void *clientdata; /* Language specific module data */ } swig_module_info; /* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { while ((*f1 == ' ') && (f1 != l1)) ++f1; while ((*f2 == ' ') && (f2 != l2)) ++f2; if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; } return (int)((l1 - f1) - (l2 - f2)); } /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ SWIGRUNTIME int SWIG_TypeCompare(const char *nb, const char *tb) { int equiv = 0; const char* te = tb + strlen(tb); const char* ne = nb; while (!equiv && *ne) { for (nb = ne; *ne; ++ne) { if (*ne == '|') break; } equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; if (*ne) ++ne; } return equiv; } /* Check the typename */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheck(const char *c, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (strcmp(iter->type->name, c) == 0) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { if (ty) { swig_cast_info *iter = ty->cast; while (iter) { if (iter->type == from) { if (iter == ty->cast) return iter; /* Move iter to the top of the linked list */ iter->prev->next = iter->next; if (iter->next) iter->next->prev = iter->prev; iter->next = ty->cast; iter->prev = 0; if (ty->cast) ty->cast->prev = iter; ty->cast = iter; return iter; } iter = iter->next; } } return 0; } /* Cast a pointer up an inheritance hierarchy */ SWIGRUNTIMEINLINE void * SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } /* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; while (ty && (ty->dcast)) { ty = (*ty->dcast)(ptr); if (ty) lastty = ty; } return lastty; } /* Return the name associated with this type */ SWIGRUNTIMEINLINE const char * SWIG_TypeName(const swig_type_info *ty) { return ty->name; } /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ SWIGRUNTIME const char * SWIG_TypePrettyName(const swig_type_info *type) { /* The "str" field contains the equivalent pretty names of the type, separated by vertical-bar characters. We choose to print the last name, as it is often (?) the most specific. */ if (!type) return NULL; if (type->str != NULL) { const char *last_name = type->str; const char *s; for (s = type->str; *s; s++) if (*s == '|') last_name = s+1; return last_name; } else return type->name; } /* Set the clientdata field for a type */ SWIGRUNTIME void SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } } cast = cast->next; } } SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_MangledTypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { swig_module_info *iter = start; do { if (iter->size) { register size_t l = 0; register size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ register size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { register int compare = strcmp(name, iname); if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { r = i - 1; } else { break; } } else if (compare > 0) { l = i + 1; } } else { break; /* should never happen */ } } while (l <= r); } iter = iter->next; } while (iter != end); return 0; } /* Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * SWIG_TypeQueryModule(swig_module_info *start, swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); if (ret) { return ret; } else { /* STEP 2: If the type hasn't been found, do a complete search of the str field (the human readable name) */ swig_module_info *iter = start; do { register size_t i = 0; for (; i < iter->size; ++i) { if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) return iter->types[i]; } iter = iter->next; } while (iter != end); } /* neither found a match */ return 0; } /* Pack binary data into a string */ SWIGRUNTIME char * SWIG_PackData(char *c, void *ptr, size_t sz) { static const char hex[17] = "0123456789abcdef"; register const unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register unsigned char uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } /* Unpack binary data from a string */ SWIGRUNTIME const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { register unsigned char *u = (unsigned char *) ptr; register const unsigned char *eu = u + sz; for (; u != eu; ++u) { register char d = *(c++); register unsigned char uu; if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); else return (char *) 0; *u = uu; } return c; } /* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { char *r = buff; if ((2*sizeof(void *) + 2) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,&ptr,sizeof(void *)); if (strlen(name) + 1 > (bsz - (r - buff))) return 0; strcpy(r,name); return buff; } SWIGRUNTIME const char * SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { *ptr = (void *) 0; return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sizeof(void *)); } SWIGRUNTIME char * SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { char *r = buff; size_t lname = (name ? strlen(name) : 0); if ((2*sz + 2 + lname) > bsz) return 0; *(r++) = '_'; r = SWIG_PackData(r,ptr,sz); if (lname) { strncpy(r,name,lname+1); } else { *r = 0; } return buff; } SWIGRUNTIME const char * SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { if (*c != '_') { if (strcmp(c,"NULL") == 0) { memset(ptr,0,sz); return name; } else { return 0; } } return SWIG_UnpackData(++c,ptr,sz); } #ifdef __cplusplus } #endif /* Errors in SWIG */ #define SWIG_UnknownError -1 #define SWIG_IOError -2 #define SWIG_RuntimeError -3 #define SWIG_IndexError -4 #define SWIG_TypeError -5 #define SWIG_DivisionByZero -6 #define SWIG_OverflowError -7 #define SWIG_SyntaxError -8 #define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 #define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 #include /* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which * breaks using rb_intern as an lvalue, as SWIG does. We work around this * issue for now by disabling this. * https://sourceforge.net/tracker/?func=detail&aid=2859614&group_id=1645&atid=101645 */ #ifdef rb_intern # undef rb_intern #endif /* Remove global macros defined in Ruby's win32.h */ #ifdef write # undef write #endif #ifdef read # undef read #endif #ifdef bind # undef bind #endif #ifdef close # undef close #endif #ifdef connect # undef connect #endif /* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */ #ifndef NUM2LL #define NUM2LL(x) NUM2LONG((x)) #endif #ifndef LL2NUM #define LL2NUM(x) INT2NUM((long) (x)) #endif #ifndef ULL2NUM #define ULL2NUM(x) UINT2NUM((unsigned long) (x)) #endif /* Ruby 1.7 doesn't (yet) define NUM2ULL() */ #ifndef NUM2ULL #ifdef HAVE_LONG_LONG #define NUM2ULL(x) rb_num2ull((x)) #else #define NUM2ULL(x) NUM2ULONG(x) #endif #endif /* RSTRING_LEN, etc are new in Ruby 1.9, but ->ptr and ->len no longer work */ /* Define these for older versions so we can just write code the new way */ #ifndef RSTRING_LEN # define RSTRING_LEN(x) RSTRING(x)->len #endif #ifndef RSTRING_PTR # define RSTRING_PTR(x) RSTRING(x)->ptr #endif #ifndef RSTRING_END # define RSTRING_END(x) (RSTRING_PTR(x) + RSTRING_LEN(x)) #endif #ifndef RARRAY_LEN # define RARRAY_LEN(x) RARRAY(x)->len #endif #ifndef RARRAY_PTR # define RARRAY_PTR(x) RARRAY(x)->ptr #endif #ifndef RFLOAT_VALUE # define RFLOAT_VALUE(x) RFLOAT(x)->value #endif #ifndef DOUBLE2NUM # define DOUBLE2NUM(x) rb_float_new(x) #endif #ifndef RHASH_TBL # define RHASH_TBL(x) (RHASH(x)->tbl) #endif #ifndef RHASH_ITER_LEV # define RHASH_ITER_LEV(x) (RHASH(x)->iter_lev) #endif #ifndef RHASH_IFNONE # define RHASH_IFNONE(x) (RHASH(x)->ifnone) #endif #ifndef RHASH_SIZE # define RHASH_SIZE(x) (RHASH(x)->tbl->num_entries) #endif #ifndef RHASH_EMPTY_P # define RHASH_EMPTY_P(x) (RHASH_SIZE(x) == 0) #endif #ifndef RSTRUCT_LEN # define RSTRUCT_LEN(x) RSTRUCT(x)->len #endif #ifndef RSTRUCT_PTR # define RSTRUCT_PTR(x) RSTRUCT(x)->ptr #endif /* * Need to be very careful about how these macros are defined, especially * when compiling C++ code or C code with an ANSI C compiler. * * VALUEFUNC(f) is a macro used to typecast a C function that implements * a Ruby method so that it can be passed as an argument to API functions * like rb_define_method() and rb_define_singleton_method(). * * VOIDFUNC(f) is a macro used to typecast a C function that implements * either the "mark" or "free" stuff for a Ruby Data object, so that it * can be passed as an argument to API functions like Data_Wrap_Struct() * and Data_Make_Struct(). */ #ifdef __cplusplus # ifndef RUBY_METHOD_FUNC /* These definitions should work for Ruby 1.4.6 */ # define PROTECTFUNC(f) ((VALUE (*)()) f) # define VALUEFUNC(f) ((VALUE (*)()) f) # define VOIDFUNC(f) ((void (*)()) f) # else # ifndef ANYARGS /* These definitions should work for Ruby 1.6 */ # define PROTECTFUNC(f) ((VALUE (*)()) f) # define VALUEFUNC(f) ((VALUE (*)()) f) # define VOIDFUNC(f) ((RUBY_DATA_FUNC) f) # else /* These definitions should work for Ruby 1.7+ */ # define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f) # define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f) # define VOIDFUNC(f) ((RUBY_DATA_FUNC) f) # endif # endif #else # define VALUEFUNC(f) (f) # define VOIDFUNC(f) (f) #endif /* Don't use for expressions have side effect */ #ifndef RB_STRING_VALUE #define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s))) #endif #ifndef StringValue #define StringValue(s) RB_STRING_VALUE(s) #endif #ifndef StringValuePtr #define StringValuePtr(s) RSTRING_PTR(RB_STRING_VALUE(s)) #endif #ifndef StringValueLen #define StringValueLen(s) RSTRING_LEN(RB_STRING_VALUE(s)) #endif #ifndef SafeStringValue #define SafeStringValue(v) do {\ StringValue(v);\ rb_check_safe_str(v);\ } while (0) #endif #ifndef HAVE_RB_DEFINE_ALLOC_FUNC #define rb_define_alloc_func(klass, func) rb_define_singleton_method((klass), "new", VALUEFUNC((func)), -1) #define rb_undef_alloc_func(klass) rb_undef_method(CLASS_OF((klass)), "new") #endif static VALUE _mSWIG = Qnil; /* ----------------------------------------------------------------------------- * error manipulation * ----------------------------------------------------------------------------- */ /* Define some additional error types */ #define SWIG_ObjectPreviouslyDeletedError -100 /* Define custom exceptions for errors that do not map to existing Ruby exceptions. Note this only works for C++ since a global cannot be initialized by a function in C. For C, fallback to rb_eRuntimeError.*/ SWIGINTERN VALUE getNullReferenceError(void) { static int init = 0; static VALUE rb_eNullReferenceError ; if (!init) { init = 1; rb_eNullReferenceError = rb_define_class("NullReferenceError", rb_eRuntimeError); } return rb_eNullReferenceError; } SWIGINTERN VALUE getObjectPreviouslyDeletedError(void) { static int init = 0; static VALUE rb_eObjectPreviouslyDeleted ; if (!init) { init = 1; rb_eObjectPreviouslyDeleted = rb_define_class("ObjectPreviouslyDeleted", rb_eRuntimeError); } return rb_eObjectPreviouslyDeleted; } SWIGINTERN VALUE SWIG_Ruby_ErrorType(int SWIG_code) { VALUE type; switch (SWIG_code) { case SWIG_MemoryError: type = rb_eNoMemError; break; case SWIG_IOError: type = rb_eIOError; break; case SWIG_RuntimeError: type = rb_eRuntimeError; break; case SWIG_IndexError: type = rb_eIndexError; break; case SWIG_TypeError: type = rb_eTypeError; break; case SWIG_DivisionByZero: type = rb_eZeroDivError; break; case SWIG_OverflowError: type = rb_eRangeError; break; case SWIG_SyntaxError: type = rb_eSyntaxError; break; case SWIG_ValueError: type = rb_eArgError; break; case SWIG_SystemError: type = rb_eFatal; break; case SWIG_AttributeError: type = rb_eRuntimeError; break; case SWIG_NullReferenceError: type = getNullReferenceError(); break; case SWIG_ObjectPreviouslyDeletedError: type = getObjectPreviouslyDeletedError(); break; case SWIG_UnknownError: type = rb_eRuntimeError; break; default: type = rb_eRuntimeError; } return type; } /* This function is called when a user inputs a wrong argument to a method. */ SWIGINTERN const char* Ruby_Format_TypeError( const char* msg, const char* type, const char* name, const int argn, VALUE input ) { char buf[128]; VALUE str; VALUE asStr; if ( msg && *msg ) { str = rb_str_new2(msg); } else { str = rb_str_new(NULL, 0); } str = rb_str_cat2( str, "Expected argument " ); sprintf( buf, "%d of type ", argn-1 ); str = rb_str_cat2( str, buf ); str = rb_str_cat2( str, type ); str = rb_str_cat2( str, ", but got " ); str = rb_str_cat2( str, rb_obj_classname(input) ); str = rb_str_cat2( str, " " ); asStr = rb_inspect(input); if ( RSTRING_LEN(asStr) > 30 ) { str = rb_str_cat( str, StringValuePtr(asStr), 30 ); str = rb_str_cat2( str, "..." ); } else { str = rb_str_append( str, asStr ); } if ( name ) { str = rb_str_cat2( str, "\n\tin SWIG method '" ); str = rb_str_cat2( str, name ); str = rb_str_cat2( str, "'" ); } return StringValuePtr( str ); } /* This function is called when an overloaded method fails */ SWIGINTERN void Ruby_Format_OverloadedError( const int argc, const int maxargs, const char* method, const char* prototypes ) { const char* msg = "Wrong # of arguments"; if ( argc <= maxargs ) msg = "Wrong arguments"; rb_raise(rb_eArgError,"%s for overloaded method '%s'.\n" "Possible C/C++ prototypes are:\n%s", msg, method, prototypes); } /* ----------------------------------------------------------------------------- * rubytracking.swg * * This file contains support for tracking mappings from * Ruby objects to C++ objects. This functionality is needed * to implement mark functions for Ruby's mark and sweep * garbage collector. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif /* Ruby 1.8 actually assumes the first case. */ #if SIZEOF_VOIDP == SIZEOF_LONG # define SWIG2NUM(v) LONG2NUM((unsigned long)v) # define NUM2SWIG(x) (unsigned long)NUM2LONG(x) #elif SIZEOF_VOIDP == SIZEOF_LONG_LONG # define SWIG2NUM(v) LL2NUM((unsigned long long)v) # define NUM2SWIG(x) (unsigned long long)NUM2LL(x) #else # error sizeof(void*) is not the same as long or long long #endif /* Global Ruby hash table to store Trackings from C/C++ structs to Ruby Objects. */ static VALUE swig_ruby_trackings = Qnil; /* Global variable that stores a reference to the ruby hash table delete function. */ static ID swig_ruby_hash_delete; /* Setup a Ruby hash table to store Trackings */ SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) { /* Create a ruby hash table to store Trackings from C++ objects to Ruby objects. */ /* Try to see if some other .so has already created a tracking hash table, which we keep hidden in an instance var in the SWIG module. This is done to allow multiple DSOs to share the same tracking table. */ ID trackings_id = rb_intern( "@__trackings__" ); VALUE verbose = rb_gv_get("VERBOSE"); rb_gv_set("VERBOSE", Qfalse); swig_ruby_trackings = rb_ivar_get( _mSWIG, trackings_id ); rb_gv_set("VERBOSE", verbose); /* No, it hasn't. Create one ourselves */ if ( swig_ruby_trackings == Qnil ) { swig_ruby_trackings = rb_hash_new(); rb_ivar_set( _mSWIG, trackings_id, swig_ruby_trackings ); } /* Now store a reference to the hash table delete function so that we only have to look it up once.*/ swig_ruby_hash_delete = rb_intern("delete"); } /* Get a Ruby number to reference a pointer */ SWIGRUNTIME VALUE SWIG_RubyPtrToReference(void* ptr) { /* We cast the pointer to an unsigned long and then store a reference to it using a Ruby number object. */ /* Convert the pointer to a Ruby number */ return SWIG2NUM(ptr); } /* Get a Ruby number to reference an object */ SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) { /* We cast the object to an unsigned long and then store a reference to it using a Ruby number object. */ /* Convert the Object to a Ruby number */ return SWIG2NUM(object); } /* Get a Ruby object from a previously stored reference */ SWIGRUNTIME VALUE SWIG_RubyReferenceToObject(VALUE reference) { /* The provided Ruby number object is a reference to the Ruby object we want.*/ /* Convert the Ruby number to a Ruby object */ return NUM2SWIG(reference); } /* Add a Tracking from a C/C++ struct to a Ruby object */ SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) { /* In a Ruby hash table we store the pointer and the associated Ruby object. The trick here is that we cannot store the Ruby object directly - if we do then it cannot be garbage collected. So instead we typecast it as a unsigned long and convert it to a Ruby number object.*/ /* Get a reference to the pointer as a Ruby number */ VALUE key = SWIG_RubyPtrToReference(ptr); /* Get a reference to the Ruby object as a Ruby number */ VALUE value = SWIG_RubyObjectToReference(object); /* Store the mapping to the global hash table. */ rb_hash_aset(swig_ruby_trackings, key, value); } /* Get the Ruby object that owns the specified C/C++ struct */ SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) { /* Get a reference to the pointer as a Ruby number */ VALUE key = SWIG_RubyPtrToReference(ptr); /* Now lookup the value stored in the global hash table */ VALUE value = rb_hash_aref(swig_ruby_trackings, key); if (value == Qnil) { /* No object exists - return nil. */ return Qnil; } else { /* Convert this value to Ruby object */ return SWIG_RubyReferenceToObject(value); } } /* Remove a Tracking from a C/C++ struct to a Ruby object. It is very important to remove objects once they are destroyed since the same memory address may be reused later to create a new object. */ SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) { /* Get a reference to the pointer as a Ruby number */ VALUE key = SWIG_RubyPtrToReference(ptr); /* Delete the object from the hash table by calling Ruby's do this we need to call the Hash.delete method.*/ rb_funcall(swig_ruby_trackings, swig_ruby_hash_delete, 1, key); } /* This is a helper method that unlinks a Ruby object from its underlying C++ object. This is needed if the lifetime of the Ruby object is longer than the C++ object */ SWIGRUNTIME void SWIG_RubyUnlinkObjects(void* ptr) { VALUE object = SWIG_RubyInstanceFor(ptr); if (object != Qnil) { DATA_PTR(object) = 0; } } #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * Ruby API portion that goes into the runtime * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif SWIGINTERN VALUE SWIG_Ruby_AppendOutput(VALUE target, VALUE o) { if (NIL_P(target)) { target = o; } else { if (TYPE(target) != T_ARRAY) { VALUE o2 = target; target = rb_ary_new(); rb_ary_push(target, o2); } rb_ary_push(target, o); } return target; } /* For ruby1.8.4 and earlier. */ #ifndef RUBY_INIT_STACK RUBY_EXTERN void Init_stack(VALUE* addr); # define RUBY_INIT_STACK \ VALUE variable_in_this_stack_frame; \ Init_stack(&variable_in_this_stack_frame); #endif #ifdef __cplusplus } #endif /* ----------------------------------------------------------------------------- * rubyrun.swg * * This file contains the runtime support for Ruby modules * and includes code for managing global variables and pointer * type checking. * ----------------------------------------------------------------------------- */ /* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 /* for raw pointers */ #define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, 0) #define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, own) #define SWIG_NewPointerObj(ptr, type, flags) SWIG_Ruby_NewPointerObj(ptr, type, flags) #define SWIG_AcquirePtr(ptr, own) SWIG_Ruby_AcquirePtr(ptr, own) #define swig_owntype ruby_owntype /* for raw packed data */ #define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty, flags) #define SWIG_NewPackedObj(ptr, sz, type) SWIG_Ruby_NewPackedObj(ptr, sz, type) /* for class or struct pointers */ #define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) #define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) /* for C or C++ function pointers */ #define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0) #define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0) /* for C++ member pointers, ie, member methods */ #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty) #define SWIG_NewMemberObj(ptr, sz, type) SWIG_Ruby_NewPackedObj(ptr, sz, type) /* Runtime API */ #define SWIG_GetModule(clientdata) SWIG_Ruby_GetModule() #define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer) /* Error manipulation */ #define SWIG_ErrorType(code) SWIG_Ruby_ErrorType(code) #define SWIG_Error(code, msg) rb_raise(SWIG_Ruby_ErrorType(code), "%s", msg) #define SWIG_fail goto fail /* Ruby-specific SWIG API */ #define SWIG_InitRuntime() SWIG_Ruby_InitRuntime() #define SWIG_define_class(ty) SWIG_Ruby_define_class(ty) #define SWIG_NewClassInstance(value, ty) SWIG_Ruby_NewClassInstance(value, ty) #define SWIG_MangleStr(value) SWIG_Ruby_MangleStr(value) #define SWIG_CheckConvert(value, ty) SWIG_Ruby_CheckConvert(value, ty) #include "assert.h" /* ----------------------------------------------------------------------------- * pointers/data manipulation * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #endif typedef struct { VALUE klass; VALUE mImpl; void (*mark)(void *); void (*destroy)(void *); int trackObjects; } swig_class; /* Global pointer used to keep some internal SWIG stuff */ static VALUE _cSWIG_Pointer = Qnil; static VALUE swig_runtime_data_type_pointer = Qnil; /* Global IDs used to keep some internal SWIG stuff */ static ID swig_arity_id = 0; static ID swig_call_id = 0; /* If your swig extension is to be run within an embedded ruby and has director callbacks, you should set -DRUBY_EMBEDDED during compilation. This will reset ruby's stack frame on each entry point from the main program the first time a virtual director function is invoked (in a non-recursive way). If this is not done, you run the risk of Ruby trashing the stack. */ #ifdef RUBY_EMBEDDED # define SWIG_INIT_STACK \ if ( !swig_virtual_calls ) { RUBY_INIT_STACK } \ ++swig_virtual_calls; # define SWIG_RELEASE_STACK --swig_virtual_calls; # define Ruby_DirectorTypeMismatchException(x) \ rb_raise( rb_eTypeError, "%s", x ); return c_result; static unsigned int swig_virtual_calls = 0; #else /* normal non-embedded extension */ # define SWIG_INIT_STACK # define SWIG_RELEASE_STACK # define Ruby_DirectorTypeMismatchException(x) \ throw Swig::DirectorTypeMismatchException( x ); #endif /* RUBY_EMBEDDED */ SWIGRUNTIME VALUE getExceptionClass(void) { static int init = 0; static VALUE rubyExceptionClass ; if (!init) { init = 1; rubyExceptionClass = rb_const_get(_mSWIG, rb_intern("Exception")); } return rubyExceptionClass; } /* This code checks to see if the Ruby object being raised as part of an exception inherits from the Ruby class Exception. If so, the object is simply returned. If not, then a new Ruby exception object is created and that will be returned to Ruby.*/ SWIGRUNTIME VALUE SWIG_Ruby_ExceptionType(swig_type_info *desc, VALUE obj) { VALUE exceptionClass = getExceptionClass(); if (rb_obj_is_kind_of(obj, exceptionClass)) { return obj; } else { return rb_exc_new3(rb_eRuntimeError, rb_obj_as_string(obj)); } } /* Initialize Ruby runtime support */ SWIGRUNTIME void SWIG_Ruby_InitRuntime(void) { if (_mSWIG == Qnil) { _mSWIG = rb_define_module("SWIG"); swig_call_id = rb_intern("call"); swig_arity_id = rb_intern("arity"); } } /* Define Ruby class for C type */ SWIGRUNTIME void SWIG_Ruby_define_class(swig_type_info *type) { VALUE klass; char *klass_name = (char *) malloc(4 + strlen(type->name) + 1); sprintf(klass_name, "TYPE%s", type->name); if (NIL_P(_cSWIG_Pointer)) { _cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject); rb_undef_method(CLASS_OF(_cSWIG_Pointer), "new"); } klass = rb_define_class_under(_mSWIG, klass_name, _cSWIG_Pointer); free((void *) klass_name); } /* Create a new pointer object */ SWIGRUNTIME VALUE SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags) { int own = flags & SWIG_POINTER_OWN; int track; char *klass_name; swig_class *sklass; VALUE klass; VALUE obj; if (!ptr) return Qnil; if (type->clientdata) { sklass = (swig_class *) type->clientdata; /* Are we tracking this class and have we already returned this Ruby object? */ track = sklass->trackObjects; if (track) { obj = SWIG_RubyInstanceFor(ptr); /* Check the object's type and make sure it has the correct type. It might not in cases where methods do things like downcast methods. */ if (obj != Qnil) { VALUE value = rb_iv_get(obj, "@__swigtype__"); char* type_name = RSTRING_PTR(value); if (strcmp(type->name, type_name) == 0) { return obj; } } } /* Create a new Ruby object */ obj = Data_Wrap_Struct(sklass->klass, VOIDFUNC(sklass->mark), ( own ? VOIDFUNC(sklass->destroy) : (track ? VOIDFUNC(SWIG_RubyRemoveTracking) : 0 ) ), ptr); /* If tracking is on for this class then track this object. */ if (track) { SWIG_RubyAddTracking(ptr, obj); } } else { klass_name = (char *) malloc(4 + strlen(type->name) + 1); sprintf(klass_name, "TYPE%s", type->name); klass = rb_const_get(_mSWIG, rb_intern(klass_name)); free((void *) klass_name); obj = Data_Wrap_Struct(klass, 0, 0, ptr); } rb_iv_set(obj, "@__swigtype__", rb_str_new2(type->name)); return obj; } /* Create a new class instance (always owned) */ SWIGRUNTIME VALUE SWIG_Ruby_NewClassInstance(VALUE klass, swig_type_info *type) { VALUE obj; swig_class *sklass = (swig_class *) type->clientdata; obj = Data_Wrap_Struct(klass, VOIDFUNC(sklass->mark), VOIDFUNC(sklass->destroy), 0); rb_iv_set(obj, "@__swigtype__", rb_str_new2(type->name)); return obj; } /* Get type mangle from class name */ SWIGRUNTIMEINLINE char * SWIG_Ruby_MangleStr(VALUE obj) { VALUE stype = rb_iv_get(obj, "@__swigtype__"); return StringValuePtr(stype); } /* Acquire a pointer value */ typedef void (*ruby_owntype)(void*); SWIGRUNTIME ruby_owntype SWIG_Ruby_AcquirePtr(VALUE obj, ruby_owntype own) { if (obj) { ruby_owntype oldown = RDATA(obj)->dfree; RDATA(obj)->dfree = own; return oldown; } else { return 0; } } /* Convert a pointer value */ SWIGRUNTIME int SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags, ruby_owntype *own) { char *c; swig_cast_info *tc; void *vptr = 0; /* Grab the pointer */ if (NIL_P(obj)) { *ptr = 0; return SWIG_OK; } else { if (TYPE(obj) != T_DATA) { return SWIG_ERROR; } Data_Get_Struct(obj, void, vptr); } if (own) *own = RDATA(obj)->dfree; /* Check to see if the input object is giving up ownership of the underlying C struct or C++ object. If so then we need to reset the destructor since the Ruby object no longer owns the underlying C++ object.*/ if (flags & SWIG_POINTER_DISOWN) { /* Is tracking on for this class? */ int track = 0; if (ty && ty->clientdata) { swig_class *sklass = (swig_class *) ty->clientdata; track = sklass->trackObjects; } if (track) { /* We are tracking objects for this class. Thus we change the destructor * to SWIG_RubyRemoveTracking. This allows us to * remove the mapping from the C++ to Ruby object * when the Ruby object is garbage collected. If we don't * do this, then it is possible we will return a reference * to a Ruby object that no longer exists thereby crashing Ruby. */ RDATA(obj)->dfree = SWIG_RubyRemoveTracking; } else { RDATA(obj)->dfree = 0; } } /* Do type-checking if type info was provided */ if (ty) { if (ty->clientdata) { if (rb_obj_is_kind_of(obj, ((swig_class *) (ty->clientdata))->klass)) { if (vptr == 0) { /* The object has already been deleted */ return SWIG_ObjectPreviouslyDeletedError; } *ptr = vptr; return SWIG_OK; } } if ((c = SWIG_MangleStr(obj)) == NULL) { return SWIG_ERROR; } tc = SWIG_TypeCheck(c, ty); if (!tc) { return SWIG_ERROR; } else { int newmemory = 0; *ptr = SWIG_TypeCast(tc, vptr, &newmemory); assert(!newmemory); /* newmemory handling not yet implemented */ } } else { *ptr = vptr; } return SWIG_OK; } /* Check convert */ SWIGRUNTIMEINLINE int SWIG_Ruby_CheckConvert(VALUE obj, swig_type_info *ty) { char *c = SWIG_MangleStr(obj); if (!c) return 0; return SWIG_TypeCheck(c,ty) != 0; } SWIGRUNTIME VALUE SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type) { char result[1024]; char *r = result; if ((2*sz + 1 + strlen(type->name)) > 1000) return 0; *(r++) = '_'; r = SWIG_PackData(r, ptr, sz); strcpy(r, type->name); return rb_str_new2(result); } /* Convert a packed value value */ SWIGRUNTIME int SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) { swig_cast_info *tc; const char *c; if (TYPE(obj) != T_STRING) goto type_error; c = StringValuePtr(obj); /* Pointer values must start with leading underscore */ if (*c != '_') goto type_error; c++; c = SWIG_UnpackData(c, ptr, sz); if (ty) { tc = SWIG_TypeCheck(c, ty); if (!tc) goto type_error; } return SWIG_OK; type_error: return SWIG_ERROR; } SWIGRUNTIME swig_module_info * SWIG_Ruby_GetModule(void) { VALUE pointer; swig_module_info *ret = 0; VALUE verbose = rb_gv_get("VERBOSE"); /* temporarily disable warnings, since the pointer check causes warnings with 'ruby -w' */ rb_gv_set("VERBOSE", Qfalse); /* first check if pointer already created */ pointer = rb_gv_get("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); if (pointer != Qnil) { Data_Get_Struct(pointer, swig_module_info, ret); } /* reinstate warnings */ rb_gv_set("VERBOSE", verbose); return ret; } SWIGRUNTIME void SWIG_Ruby_SetModule(swig_module_info *pointer) { /* register a new class */ VALUE cl = rb_define_class("swig_runtime_data", rb_cObject); /* create and store the structure pointer to a global variable */ swig_runtime_data_type_pointer = Data_Wrap_Struct(cl, 0, 0, pointer); rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer); } /* This function can be used to check whether a proc or method or similarly callable function has been passed. Usually used in a %typecheck, like: %typecheck(c_callback_t, precedence=SWIG_TYPECHECK_POINTER) { $result = SWIG_Ruby_isCallable( $input ); } */ SWIGINTERN int SWIG_Ruby_isCallable( VALUE proc ) { if ( rb_respond_to( proc, swig_call_id ) == Qtrue ) return 1; return 0; } /* This function can be used to check the arity (number of arguments) a proc or method can take. Usually used in a %typecheck. Valid arities will be that equal to minimal or those < 0 which indicate a variable number of parameters at the end. */ SWIGINTERN int SWIG_Ruby_arity( VALUE proc, int minimal ) { if ( rb_respond_to( proc, swig_arity_id ) == Qtrue ) { VALUE num = rb_funcall( proc, swig_arity_id, 0 ); int arity = NUM2INT(num); if ( arity < 0 && (arity+1) < -minimal ) return 1; if ( arity == minimal ) return 1; return 1; } return 0; } #ifdef __cplusplus } #endif #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else #define SWIG_exception(code, msg) do { SWIG_Error(code, msg);; } while(0) /* -------- TYPES TABLE (BEGIN) -------- */ #define SWIGTYPE_p_GeosCoordinateSequence swig_types[0] #define SWIGTYPE_p_GeosGeometry swig_types[1] #define SWIGTYPE_p_GeosGeometryCollection swig_types[2] #define SWIGTYPE_p_GeosLineString swig_types[3] #define SWIGTYPE_p_GeosLinearRing swig_types[4] #define SWIGTYPE_p_GeosMultiLineString swig_types[5] #define SWIGTYPE_p_GeosMultiLinearRing swig_types[6] #define SWIGTYPE_p_GeosMultiPoint swig_types[7] #define SWIGTYPE_p_GeosMultiPolygon swig_types[8] #define SWIGTYPE_p_GeosPoint swig_types[9] #define SWIGTYPE_p_GeosPolygon swig_types[10] #define SWIGTYPE_p_GeosPreparedGeometry swig_types[11] #define SWIGTYPE_p_GeosSTRtree swig_types[12] #define SWIGTYPE_p_GeosWkbReader swig_types[13] #define SWIGTYPE_p_GeosWkbWriter swig_types[14] #define SWIGTYPE_p_GeosWktReader swig_types[15] #define SWIGTYPE_p_GeosWktWriter swig_types[16] #define SWIGTYPE_p_char swig_types[17] #define SWIGTYPE_p_p_GeosLinearRing swig_types[18] #define SWIGTYPE_p_size_t swig_types[19] #define SWIGTYPE_p_swig__ConstIterator swig_types[20] #define SWIGTYPE_p_swig__GC_VALUE swig_types[21] #define SWIGTYPE_p_swig__Iterator swig_types[22] #define SWIGTYPE_p_unsigned_char swig_types[23] #define SWIGTYPE_p_void swig_types[24] static swig_type_info *swig_types[26]; static swig_module_info swig_module = {swig_types, 25, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ #define SWIG_init Init_geos #define SWIG_name "Geos" static VALUE mGeos; #define SWIG_RUBY_THREAD_BEGIN_BLOCK #define SWIG_RUBY_THREAD_END_BLOCK #define SWIGVERSION 0x020004 #define SWIG_VERSION SWIGVERSION #define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) #define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) #include #include #include #include namespace swig { class GC_VALUE { protected: // Hash of all GC_VALUE's currently in use static VALUE _hash; VALUE _obj; static ID hash_id; static ID lt_id; static ID gt_id; static ID eq_id; static ID le_id; static ID ge_id; static ID pos_id; static ID neg_id; static ID inv_id; static ID add_id; static ID sub_id; static ID mul_id; static ID div_id; static ID mod_id; static ID and_id; static ID or_id; static ID xor_id; static ID lshift_id; static ID rshift_id; struct OpArgs { VALUE src; ID id; int nargs; VALUE target; }; public: static void initialize() { if ( _hash == Qnil ) { _hash = rb_hash_new(); rb_gc_register_address( &_hash ); } } // this function is never called. Provided for symmetry only. static void cleanup() { rb_gc_unregister_address( &_hash ); } GC_VALUE() : _obj( Qnil ) { } GC_VALUE(const GC_VALUE& item) : _obj(item._obj) { GC_register(); } GC_VALUE(VALUE obj) :_obj(obj) { GC_register(); } ~GC_VALUE() { GC_unregister(); } GC_VALUE & operator=(const GC_VALUE& item) { GC_unregister(); _obj = item._obj; GC_register(); return *this; } void GC_register() { if ( FIXNUM_P(_obj) || SPECIAL_CONST_P(_obj) || SYMBOL_P(_obj) ) return; VALUE val = rb_hash_aref( _hash, _obj ); unsigned n = FIXNUM_P(val) ? NUM2UINT(val) : 0; ++n; rb_hash_aset( _hash, _obj, INT2NUM(n) ); } void GC_unregister() { if ( FIXNUM_P(_obj) || SPECIAL_CONST_P(_obj) || SYMBOL_P(_obj) ) return; // this test should not be needed but I've noticed some very erratic // behavior of none being unregistered in some very rare situations. if ( BUILTIN_TYPE(_obj) == T_NONE ) return; VALUE val = rb_hash_aref( _hash, _obj ); unsigned n = FIXNUM_P(val) ? NUM2UINT(val) : 1; --n; if ( n ) rb_hash_aset( _hash, _obj, INT2NUM(n) ); else rb_hash_delete( _hash, _obj ); } operator VALUE() const { return _obj; } VALUE inspect() const { return rb_inspect(_obj); } VALUE to_s() const { return rb_inspect(_obj); } static VALUE swig_protect_funcall( VALUE p ) { OpArgs* args = (OpArgs*) p; return rb_funcall( args->src, args->id, args->nargs, args->target ); } #define GC_VALUE_CMP( op_id, op, cmp, cmpval ) \ bool op( const GC_VALUE& other ) const \ { \ if ( FIXNUM_P(_obj) && FIXNUM_P(other._obj) ) \ { \ return _obj cmp other._obj; \ } \ bool res = false; \ VALUE ret = Qnil; \ SWIG_RUBY_THREAD_BEGIN_BLOCK; \ if ( rb_respond_to( _obj, op_id ) == Qtrue ) \ { \ int status; \ OpArgs args; \ args.src = _obj; \ args.id = op_id; \ args.nargs = 1; \ args.target = VALUE(other); \ ret = rb_protect( PROTECTFUNC(swig_protect_funcall), \ VALUE(&args), &status ); \ } \ if ( ret == Qnil ) { \ VALUE a = rb_funcall( _obj, hash_id, 0 ); \ VALUE b = rb_funcall( VALUE(other), hash_id, 0 ); \ res = a cmp b; \ } \ else \ { \ res = RTEST( ret ); \ } \ SWIG_RUBY_THREAD_END_BLOCK; \ return res; \ } GC_VALUE_CMP( eq_id, operator==, ==, == 0 ) GC_VALUE_CMP( lt_id, operator<, < , < 0 ) GC_VALUE_CMP( le_id, operator<=, <=, <= 0 ) GC_VALUE_CMP( gt_id, operator>, > , > 0 ) GC_VALUE_CMP( ge_id, operator>=, >=, >= 0 ) #undef GC_VALUE_CMP bool operator!=( const GC_VALUE& other ) { return !(this->operator==(other)); } #define GC_VALUE_UNARY( proc_id, op ) \ GC_VALUE op() const \ { \ VALUE ret = Qnil; \ SWIG_RUBY_THREAD_BEGIN_BLOCK; \ int status; \ OpArgs args; \ args.src = _obj; \ args.id = proc_id; \ args.nargs = 0; \ args.target = Qnil; \ ret = rb_protect( PROTECTFUNC(swig_protect_funcall), VALUE(&args), \ &status ); \ SWIG_RUBY_THREAD_END_BLOCK; \ return ret; \ } GC_VALUE_UNARY( pos_id, operator+ ) GC_VALUE_UNARY( neg_id, operator- ) GC_VALUE_UNARY( inv_id, operator~ ) #undef GC_VALUE_BINARY #define GC_VALUE_BINARY( proc_id, op ) \ GC_VALUE op( const GC_VALUE& other ) const \ { \ VALUE ret = Qnil; \ SWIG_RUBY_THREAD_BEGIN_BLOCK; \ int status; \ OpArgs args; \ args.src = _obj; \ args.id = proc_id; \ args.nargs = 1; \ args.target = VALUE(other); \ ret = rb_protect( PROTECTFUNC(swig_protect_funcall), VALUE(&args), \ &status ); \ SWIG_RUBY_THREAD_END_BLOCK; \ return GC_VALUE(ret); \ } GC_VALUE_BINARY( add_id, operator+ ); GC_VALUE_BINARY( sub_id, operator- ); GC_VALUE_BINARY( mul_id, operator* ); GC_VALUE_BINARY( div_id, operator/ ); GC_VALUE_BINARY( mod_id, operator% ); GC_VALUE_BINARY( and_id, operator& ); GC_VALUE_BINARY( xor_id, operator^ ); GC_VALUE_BINARY( or_id, operator| ); GC_VALUE_BINARY( lshift_id, operator<< ); GC_VALUE_BINARY( rshift_id, operator>> ); #undef GC_VALUE_BINARY }; ID GC_VALUE::hash_id = rb_intern("hash"); ID GC_VALUE::lt_id = rb_intern("<"); ID GC_VALUE::gt_id = rb_intern(">"); ID GC_VALUE::eq_id = rb_intern("=="); ID GC_VALUE::le_id = rb_intern("<="); ID GC_VALUE::ge_id = rb_intern(">="); ID GC_VALUE::pos_id = rb_intern("+@"); ID GC_VALUE::neg_id = rb_intern("-@"); ID GC_VALUE::inv_id = rb_intern("~"); ID GC_VALUE::add_id = rb_intern("+"); ID GC_VALUE::sub_id = rb_intern("-"); ID GC_VALUE::mul_id = rb_intern("*"); ID GC_VALUE::div_id = rb_intern("/"); ID GC_VALUE::mod_id = rb_intern("%"); ID GC_VALUE::and_id = rb_intern("&"); ID GC_VALUE::or_id = rb_intern("|"); ID GC_VALUE::xor_id = rb_intern("^"); ID GC_VALUE::lshift_id = rb_intern("<<"); ID GC_VALUE::rshift_id = rb_intern(">>"); VALUE GC_VALUE::_hash = Qnil; typedef GC_VALUE LANGUAGE_OBJ; } // namespace swig #if defined(__GNUC__) # if __GNUC__ == 2 && __GNUC_MINOR <= 96 # define SWIG_STD_NOMODERN_STL # endif #endif #include #include #include namespace swig { struct stop_iteration { }; /** * Abstract base class used to represent all iterators of STL containers. */ struct ConstIterator { public: typedef ConstIterator self_type; protected: GC_VALUE _seq; protected: ConstIterator(VALUE seq) : _seq(seq) { } // Random access iterator methods, but not required in Ruby virtual ptrdiff_t distance(const ConstIterator &x) const { throw std::invalid_argument("distance not supported"); } virtual bool equal (const ConstIterator &x) const { throw std::invalid_argument("equal not supported"); } virtual self_type* advance(ptrdiff_t n) { throw std::invalid_argument("advance not supported"); } public: virtual ~ConstIterator() {} // Access iterator method, required by Ruby virtual VALUE value() const { throw std::invalid_argument("value not supported"); return Qnil; }; virtual VALUE setValue( const VALUE& v ) { throw std::invalid_argument("value= not supported"); return Qnil; } virtual self_type* next( size_t n = 1 ) { return this->advance( n ); } virtual self_type* previous( size_t n = 1 ) { ptrdiff_t nn = n; return this->advance( -nn ); } virtual VALUE to_s() const { throw std::invalid_argument("to_s not supported"); return Qnil; } virtual VALUE inspect() const { throw std::invalid_argument("inspect not supported"); return Qnil; } virtual ConstIterator *dup() const { throw std::invalid_argument("dup not supported"); return NULL; } // // C++ common/needed methods. We emulate a bidirectional // operator, to be compatible with all the STL. // The iterator traits will then tell the STL what type of // iterator we really are. // ConstIterator() : _seq( Qnil ) { } ConstIterator( const self_type& b ) : _seq( b._seq ) { } self_type& operator=( const self_type& b ) { _seq = b._seq; return *this; } bool operator == (const ConstIterator& x) const { return equal(x); } bool operator != (const ConstIterator& x) const { return ! operator==(x); } // Pre-decrement operator self_type& operator--() { return *previous(); } // Pre-increment operator self_type& operator++() { return *next(); } // Post-decrement operator self_type operator--(int) { self_type r = *this; previous(); return r; } // Post-increment operator self_type operator++(int) { self_type r = *this; next(); return r; } ConstIterator& operator += (ptrdiff_t n) { return *advance(n); } ConstIterator& operator -= (ptrdiff_t n) { return *advance(-n); } ConstIterator* operator + (ptrdiff_t n) const { return dup()->advance(n); } ConstIterator* operator - (ptrdiff_t n) const { return dup()->advance(-n); } ptrdiff_t operator - (const ConstIterator& x) const { return x.distance(*this); } static swig_type_info* descriptor() { static int init = 0; static swig_type_info* desc = 0; if (!init) { desc = SWIG_TypeQuery("swig::ConstIterator *"); init = 1; } return desc; } }; /** * Abstract base class used to represent all non-const iterators of STL containers. * */ struct Iterator : public ConstIterator { public: typedef Iterator self_type; protected: Iterator(VALUE seq) : ConstIterator(seq) { } virtual self_type* advance(ptrdiff_t n) { throw std::invalid_argument("operation not supported"); } public: static swig_type_info* descriptor() { static int init = 0; static swig_type_info* desc = 0; if (!init) { desc = SWIG_TypeQuery("swig::Iterator *"); init = 1; } return desc; } virtual Iterator *dup() const { throw std::invalid_argument("dup not supported"); return NULL; } virtual self_type* next( size_t n = 1 ) { return this->advance( n ); } virtual self_type* previous( size_t n = 1 ) { ptrdiff_t nn = n; return this->advance( -nn ); } bool operator == (const ConstIterator& x) const { return equal(x); } bool operator != (const Iterator& x) const { return ! operator==(x); } Iterator& operator += (ptrdiff_t n) { return *advance(n); } Iterator& operator -= (ptrdiff_t n) { return *advance(-n); } Iterator* operator + (ptrdiff_t n) const { return dup()->advance(n); } Iterator* operator - (ptrdiff_t n) const { return dup()->advance(-n); } ptrdiff_t operator - (const Iterator& x) const { return x.distance(*this); } }; } SWIGINTERN VALUE SWIG_ruby_failed(void) { return Qnil; } /*@SWIG:/usr/share/swig2.0/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/ SWIGINTERN VALUE SWIG_AUX_NUM2ULONG(VALUE *args) { VALUE obj = args[0]; VALUE type = TYPE(obj); unsigned long *res = (unsigned long *)(args[1]); *res = type == T_FIXNUM ? NUM2ULONG(obj) : rb_big2ulong(obj); return obj; } /*@SWIG@*/ SWIGINTERN int SWIG_AsVal_unsigned_SS_long (VALUE obj, unsigned long *val) { VALUE type = TYPE(obj); if ((type == T_FIXNUM) || (type == T_BIGNUM)) { unsigned long v; VALUE a[2]; a[0] = obj; a[1] = (VALUE)(&v); if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2ULONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) { if (val) *val = v; return SWIG_OK; } } return SWIG_TypeError; } SWIGINTERNINLINE int SWIG_AsVal_size_t (VALUE obj, size_t *val) { unsigned long v; int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v); return res; } SWIGINTERNINLINE VALUE SWIG_From_bool (bool value) { return value ? Qtrue : Qfalse; } /*@SWIG:/usr/share/swig2.0/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/ SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE *args) { VALUE obj = args[0]; VALUE type = TYPE(obj); long *res = (long *)(args[1]); *res = type == T_FIXNUM ? NUM2LONG(obj) : rb_big2long(obj); return obj; } /*@SWIG@*/ SWIGINTERN int SWIG_AsVal_long (VALUE obj, long* val) { VALUE type = TYPE(obj); if ((type == T_FIXNUM) || (type == T_BIGNUM)) { long v; VALUE a[2]; a[0] = obj; a[1] = (VALUE)(&v); if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2LONG), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) { if (val) *val = v; return SWIG_OK; } } return SWIG_TypeError; } SWIGINTERNINLINE int SWIG_AsVal_ptrdiff_t (VALUE obj, ptrdiff_t *val) { long v; int res = SWIG_AsVal_long (obj, val ? &v : 0); if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v); return res; } #include #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) # define LLONG_MAX __LONG_LONG_MAX__ # define LLONG_MIN (-LLONG_MAX - 1LL) # define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) # endif #endif #define SWIG_From_long LONG2NUM SWIGINTERNINLINE VALUE SWIG_From_ptrdiff_t (ptrdiff_t value) { return SWIG_From_long (static_cast< long >(value)); } #include #include #include #include "geos_c.h" /* Needed for va_start, etc. */ #include SWIGINTERNINLINE VALUE SWIG_From_int (int value) { return SWIG_From_long (value); } SWIGINTERN swig_type_info* SWIG_pchar_descriptor(void) { static int init = 0; static swig_type_info* info = 0; if (!init) { info = SWIG_TypeQuery("_p_char"); init = 1; } return info; } SWIGINTERNINLINE VALUE SWIG_FromCharPtrAndSize(const char* carray, size_t size) { if (carray) { if (size > LONG_MAX) { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); return pchar_descriptor ? SWIG_NewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : Qnil; } else { return rb_str_new(carray, static_cast< long >(size)); } } else { return Qnil; } } SWIGINTERNINLINE VALUE SWIG_FromCharPtr(const char *cptr) { return SWIG_FromCharPtrAndSize(cptr, (cptr ? strlen(cptr) : 0)); } static const int DEFAULT_QUADRANT_SEGMENTS=8; /* This is not thread safe ! */ static const int MESSAGE_SIZE = 1000; static char message[MESSAGE_SIZE]; void noticeHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } void errorHandler(const char *fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(message, sizeof(message) - 1, fmt, args); va_end(args); } /* this callback yields the data item to the block */ static void GeosSTRtree_query_callback (void *data, void *nothing) { if (rb_block_given_p()) { rb_yield((VALUE) data); } } static void GeosSTRtree_mark_item (void *data, void *nothing) { if ((VALUE) data != Qnil) { rb_gc_mark((VALUE)data); } } static void mark_GeosSTRtree(void *self) { GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, GeosSTRtree_mark_item, NULL); } typedef void GeosCoordinateSequence; void checkCoordSeqBounds(const GEOSCoordSeq coordSeq, const size_t index) { unsigned int size = 0; GEOSCoordSeq_getSize(coordSeq, &size); if (index < 0 || index >= size) throw std::runtime_error("Index out of bounds"); } SWIGINTERN GeosCoordinateSequence *new_GeosCoordinateSequence(size_t size,size_t dims){ return (GeosCoordinateSequence*) GEOSCoordSeq_create(size, dims); } SWIGINTERN GeosCoordinateSequence *GeosCoordinateSequence_clone(GeosCoordinateSequence *self){ GEOSCoordSeq coords = (GEOSCoordSeq) self; return (GeosCoordinateSequence*) GEOSCoordSeq_clone(coords); } /*@SWIG:/usr/share/swig2.0/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/ SWIGINTERN VALUE SWIG_AUX_NUM2DBL(VALUE *args) { VALUE obj = args[0]; VALUE type = TYPE(obj); double *res = (double *)(args[1]); *res = NUM2DBL(obj); return obj; } /*@SWIG@*/ SWIGINTERN int SWIG_AsVal_double (VALUE obj, double *val) { VALUE type = TYPE(obj); if ((type == T_FLOAT) || (type == T_FIXNUM) || (type == T_BIGNUM)) { double v; VALUE a[2]; a[0] = obj; a[1] = (VALUE)(&v); if (rb_rescue(RUBY_METHOD_FUNC(SWIG_AUX_NUM2DBL), (VALUE)a, RUBY_METHOD_FUNC(SWIG_ruby_failed), 0) != Qnil) { if (val) *val = v; return SWIG_OK; } } return SWIG_TypeError; } SWIGINTERN int GeosCoordinateSequence_setX(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setX(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setY(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setY(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setZ(GeosCoordinateSequence *self,size_t idx,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setZ(coords, idx, val); } SWIGINTERN int GeosCoordinateSequence_setOrdinate(GeosCoordinateSequence *self,size_t idx,size_t dim,double val){ GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); return GEOSCoordSeq_setOrdinate(coords, idx, dim, val); } SWIGINTERN double GeosCoordinateSequence_getX(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getX(coords, idx, &result); return result; } #define SWIG_From_double rb_float_new SWIGINTERN double GeosCoordinateSequence_getY(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getY(coords, idx, &result); return result; } SWIGINTERN double GeosCoordinateSequence_getZ(GeosCoordinateSequence *self,size_t idx){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getZ(coords, idx, &result); return result; } SWIGINTERN double GeosCoordinateSequence_getOrdinate(GeosCoordinateSequence *self,size_t idx,size_t dim){ double result; GEOSCoordSeq coords = (GEOSCoordSeq) self; checkCoordSeqBounds(coords, idx); GEOSCoordSeq_getOrdinate(coords, idx, dim, &result); return result; } SWIGINTERN unsigned int GeosCoordinateSequence_getSize(GeosCoordinateSequence *self){ unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getSize(coords, &result); return result; } SWIGINTERNINLINE VALUE SWIG_From_unsigned_SS_long (unsigned long value) { return ULONG2NUM(value); } SWIGINTERNINLINE VALUE SWIG_From_unsigned_SS_int (unsigned int value) { return SWIG_From_unsigned_SS_long (value); } SWIGINTERN unsigned int GeosCoordinateSequence_getDimensions(GeosCoordinateSequence *self){ unsigned int result; GEOSCoordSeq coords = (GEOSCoordSeq) self; GEOSCoordSeq_getDimensions(coords, &result); return result; } typedef void GeosGeometry; typedef void GeosPoint; typedef void GeosLineString; typedef void GeosLinearRing; typedef void GeosPolygon; typedef void GeosGeometryCollection; typedef void GeosMultiPoint; typedef void GeosMultiLineString; typedef void GeosMultiLinearRing; typedef void GeosMultiPolygon; typedef void GeosWktReader; typedef void GeosWktWriter; typedef void GeosWkbReader; typedef void GeosWkbWriter; bool checkBoolResult(char result) { int intResult = (int) result; if (intResult == 1) return true; else if (intResult == 0) return false; else throw std::runtime_error(message); } SWIGINTERN GeosGeometry *GeosGeometry_clone(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_clone(geom); } SWIGINTERN char *GeosGeometry_geomType(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeomType(geom); } SWIGINTERN int GeosGeometry_typeId(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeomTypeId(geom); } SWIGINTERN void GeosGeometry_normalize(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; int result = GEOSNormalize(geom); if (result == -1) throw std::runtime_error(message); } SWIGINTERN int GeosGeometry_getSRID(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGetSRID(geom); } SWIGINTERN int SWIG_AsVal_int (VALUE obj, int *val) { long v; int res = SWIG_AsVal_long (obj, &v); if (SWIG_IsOK(res)) { if ((v < INT_MIN || v > INT_MAX)) { return SWIG_OverflowError; } else { if (val) *val = static_cast< int >(v); } } return res; } SWIGINTERN void GeosGeometry_setSRID(GeosGeometry *self,int SRID){ GEOSGeom geom = (GEOSGeom) self; return GEOSSetSRID(geom, SRID); } SWIGINTERN size_t GeosGeometry_getDimensions(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSGeom_getDimensions(geom); } SWIGINTERNINLINE VALUE SWIG_From_size_t (size_t value) { return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value)); } SWIGINTERN size_t GeosGeometry_getNumGeometries(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumGeometries(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } SWIGINTERN GeosGeometry *GeosGeometry_intersection(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSIntersection(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_buffer(GeosGeometry *self,double width,int quadsegs){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBuffer(geom, width, quadsegs); } SWIGINTERN GeosGeometry *GeosGeometry_convexHull(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSConvexHull(geom); } SWIGINTERN GeosGeometry *GeosGeometry_difference(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSDifference(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_symDifference(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSSymDifference(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_boundary(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSBoundary(geom); } SWIGINTERN GeosGeometry *GeosGeometry_geomUnion(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return (GeosGeometry*) GEOSUnion(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_pointOnSurface(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSPointOnSurface(geom); } SWIGINTERN GeosGeometry *GeosGeometry_getCentroid(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSGetCentroid(geom); } SWIGINTERN GeosGeometry *GeosGeometry_getEnvelope(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSEnvelope(geom); } SWIGINTERN char *GeosGeometry_relate(GeosGeometry *self,GeosGeometry *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return GEOSRelate(geom, otherGeom); } SWIGINTERN GeosGeometry *GeosGeometry_lineMerge(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return GEOSLineMerge(geom); } SWIGINTERN GeosGeometry *GeosGeometry_simplify(GeosGeometry *self,double tolerance){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSSimplify(geom, tolerance); } SWIGINTERN GeosGeometry *GeosGeometry_topologyPreserveSimplify(GeosGeometry *self,double tolerance){ GEOSGeom geom = (GEOSGeom) self; return (GeosGeometry*) GEOSTopologyPreserveSimplify(geom, tolerance); } SWIGINTERN int SWIG_AsCharPtrAndSize(VALUE obj, char** cptr, size_t* psize, int *alloc) { if (TYPE(obj) == T_STRING) { #if defined(StringValuePtr) char *cstr = StringValuePtr(obj); #else char *cstr = STR2CSTR(obj); #endif size_t size = RSTRING_LEN(obj) + 1; if (cptr) { if (alloc) { if (*alloc == SWIG_NEWOBJ) { *cptr = reinterpret_cast< char* >(memcpy((new char[size]), cstr, sizeof(char)*(size))); } else { *cptr = cstr; *alloc = SWIG_OLDOBJ; } } } if (psize) *psize = size; return SWIG_OK; } else { swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); if (pchar_descriptor) { void* vptr = 0; if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { if (cptr) *cptr = (char *)vptr; if (psize) *psize = vptr ? (strlen((char*)vptr) + 1) : 0; if (alloc) *alloc = SWIG_OLDOBJ; return SWIG_OK; } } } return SWIG_TypeError; } SWIGINTERN bool GeosGeometry_relatePattern(GeosGeometry *self,GeosGeometry const *other,char const *pat){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSRelatePattern(geom, otherGeom, pat)); } SWIGINTERN bool GeosGeometry_disjoint(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSDisjoint(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_touches(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSTouches(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_intersects(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSIntersects(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_crosses(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSCrosses(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_within(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSWithin(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_contains(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSContains(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_overlaps(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSOverlaps(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_equals(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEquals(geom, otherGeom)); } SWIGINTERN bool GeosGeometry_equalsExact(GeosGeometry *self,GeosGeometry const *other,double tolerance){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSEqualsExact(geom, otherGeom, tolerance)); } SWIGINTERN bool GeosGeometry_isEmpty(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisEmpty(geom)); } SWIGINTERN bool GeosGeometry_isValid(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisValid(geom)); } SWIGINTERN bool GeosGeometry_isSimple(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisSimple(geom)); } SWIGINTERN bool GeosGeometry_isRing(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSisRing(geom)); } SWIGINTERN bool GeosGeometry_hasZ(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; return checkBoolResult(GEOSHasZ(geom)); } SWIGINTERN double GeosGeometry_area(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSArea(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN double GeosGeometry_length(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; double result; int code = GEOSLength(geom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN double GeosGeometry_distance(GeosGeometry *self,GeosGeometry const *other){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom otherGeom = (GEOSGeom) other; double result; int code = GEOSDistance(geom, otherGeom, &result); if (code == 0) throw std::runtime_error(message); return result; } SWIGINTERN GeosCoordinateSequence const *GeosPoint_getCoordSeq(GeosPoint *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN GeosCoordinateSequence const *GeosLineString_getCoordSeq(GeosLineString *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN GeosCoordinateSequence const *GeosLinearRing_getCoordSeq(GeosLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSCoordSeq result = (const GEOSCoordSeq) GEOSGeom_getCoordSeq(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosCoordinateSequence*) result; } SWIGINTERN GeosGeometry const *GeosPolygon_getExteriorRing(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetExteriorRing(geom); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } SWIGINTERN size_t GeosPolygon_getNumInteriorRings(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; size_t result = GEOSGetNumInteriorRings(geom); if ((int)result == -1) throw std::runtime_error(message); return result; } SWIGINTERN GeosGeometry const *GeosPolygon_getInteriorRingN(GeosPolygon *self,size_t n){ GEOSGeom geom = (GEOSGeom) self; size_t size = GEOSGetNumInteriorRings(geom); if (n < 0 || n >= size) throw std::runtime_error("Index out of bounds"); const GEOSGeom result = (const GEOSGeom) GEOSGetInteriorRingN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } SWIGINTERN GeosGeometry const *GeosGeometryCollection_getGeometryN(GeosGeometryCollection *self,size_t n){ GEOSGeom geom = (GEOSGeom) self; const GEOSGeom result = (const GEOSGeom) GEOSGetGeometryN(geom, n); if (result == NULL) throw std::runtime_error(message); return (const GeosGeometry*) result; } GeosGeometry *createPoint(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createPoint(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLineString(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLineString(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createLinearRing(GeosCoordinateSequence *s) { GEOSCoordSeq coords = (GEOSCoordSeq) s; GEOSGeom geom = GEOSGeom_createLinearRing(coords); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } GeosGeometry *createPolygon(GeosLinearRing *shell, GeosLinearRing **holes, size_t nholes) { GEOSGeom shellGeom = (GEOSGeom) shell; GEOSGeom* holeGeoms = (GEOSGeom*) holes; GEOSGeom geom = GEOSGeom_createPolygon(shellGeom, holeGeoms, nholes); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } typedef void GeosPreparedGeometry; SWIGINTERN GeosPreparedGeometry *new_GeosPreparedGeometry(GeosGeometry const *source){ const GEOSPreparedGeometry *prep = GEOSPrepare((const GEOSGeometry *)source); if(prep == NULL) throw std::runtime_error(message); return (GeosPreparedGeometry *) prep; } SWIGINTERN bool GeosPreparedGeometry_contains(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContains(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_containsProperly(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedContainsProperly(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_covers(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedCovers(prep, otherGeom)); } SWIGINTERN bool GeosPreparedGeometry_intersects(GeosPreparedGeometry *self,GeosGeometry const *other){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; GEOSGeom otherGeom = (GEOSGeom) other; return checkBoolResult(GEOSPreparedIntersects(prep, otherGeom)); } typedef void GeosSTRtree; /* GeosIndexItem typedef'd here so it can be %typemap(typecheck)'d as a native object by each language specially */ typedef void *GeosIndexItem; typedef GEOSQueryCallback GeosQueryCallback; SWIGINTERN GeosSTRtree *new_GeosSTRtree(int nodeCapacity){ GEOSSTRtree *tree = GEOSSTRtree_create(nodeCapacity); if(tree == NULL) throw std::runtime_error(message); return (GeosSTRtree *) tree; } SWIGINTERN void GeosSTRtree_insert(GeosSTRtree *self,GeosGeometry const *g,GeosIndexItem item){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_insert(tree, geom, item); } SWIGINTERN void GeosSTRtree_remove(GeosSTRtree *self,GeosGeometry const *g,GeosIndexItem item){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_remove(tree, geom, item); } SWIGINTERN void GeosSTRtree_query(GeosSTRtree *self,GeosGeometry const *g,GeosQueryCallback callback,GeosIndexItem accumulator){ GEOSSTRtree *tree = (GEOSSTRtree *) self; const GEOSGeometry *geom = (const GEOSGeometry *) g; GEOSSTRtree_query(tree, geom, callback, accumulator); } SWIGINTERN void GeosSTRtree_iterate(GeosSTRtree *self,GeosQueryCallback callback,GeosIndexItem accumulator){ GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, callback, accumulator); } SWIGINTERN GeosWktReader *new_GeosWktReader(){ return GEOSWKTReader_create(); } SWIGINTERN GeosGeometry *GeosWktReader_read(GeosWktReader *self,char const *wkt){ if(wkt == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSGeometry *geom = GEOSWKTReader_read(reader, wkt); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosWktWriter *new_GeosWktWriter(){ return GEOSWKTWriter_create(); } SWIGINTERN char *GeosWktWriter_write(GeosWktWriter *self,GeosGeometry const *g){ GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKTWriter_write(writer, geom); } SWIGINTERN GeosWkbReader *new_GeosWkbReader(){ return GEOSWKBReader_create(); } SWIGINTERN GeosGeometry *GeosWkbReader_read(GeosWkbReader *self,unsigned char const *wkb,size_t size){ if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_read(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosGeometry *GeosWkbReader_readHEX(GeosWkbReader *self,unsigned char const *wkb,size_t size){ if(wkb == NULL) throw std::runtime_error("Trying to create geometry from a NULL string"); GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSGeometry *geom = GEOSWKBReader_readHEX(reader, wkb, size); if(geom == NULL) throw std::runtime_error(message); return (GeosGeometry*) geom; } SWIGINTERN GeosWkbWriter *new_GeosWkbWriter(){ return GEOSWKBWriter_create(); } SWIGINTERN int GeosWkbWriter_getOutputDimension(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getOutputDimension(writer); } SWIGINTERN void GeosWkbWriter_setOutputDimension(GeosWkbWriter *self,int newDimension){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_setOutputDimension(writer, newDimension); } SWIGINTERN int GeosWkbWriter_getByteOrder(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getByteOrder(writer); } SWIGINTERN void GeosWkbWriter_setByteOrder(GeosWkbWriter *self,int newByteOrder){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setByteOrder(writer, newByteOrder); } SWIGINTERN bool GeosWkbWriter_getIncludeSRID(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_getIncludeSRID(writer); } SWIGINTERN int SWIG_AsVal_bool (VALUE obj, bool *val) { if (obj == Qtrue) { if (val) *val = true; return SWIG_OK; } else if (obj == Qfalse) { if (val) *val = false; return SWIG_OK; } else { int res = 0; if (SWIG_AsVal_int (obj, &res) == SWIG_OK) { if (val) *val = res ? true : false; return SWIG_OK; } } return SWIG_TypeError; } SWIGINTERN void GeosWkbWriter_setIncludeSRID(GeosWkbWriter *self,bool newIncludeSRID){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; return GEOSWKBWriter_setIncludeSRID(writer, newIncludeSRID); } SWIGINTERN unsigned char *GeosWkbWriter_write(GeosWkbWriter *self,GeosGeometry const *g,size_t *size){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_write(writer, geom, size); } SWIGINTERN unsigned char *GeosWkbWriter_writeHEX(GeosWkbWriter *self,GeosGeometry const *g,size_t *size){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSGeom geom = (GEOSGeom) g; return GEOSWKBWriter_writeHEX(writer, geom, size); } swig_class SwigClassGCVALUE; /* Document-method: Geos::GCVALUE.inspect call-seq: inspect -> VALUE Inspect class and its contents. */ SWIGINTERN VALUE _wrap_GCVALUE_inspect(int argc, VALUE *argv, VALUE self) { swig::GC_VALUE *arg1 = (swig::GC_VALUE *) 0 ; swig::GC_VALUE r1 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } r1 = self; arg1 = &r1; result = (VALUE)((swig::GC_VALUE const *)arg1)->inspect(); vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::GCVALUE.to_s call-seq: to_s -> VALUE Convert class to a String representation. */ SWIGINTERN VALUE _wrap_GCVALUE_to_s(int argc, VALUE *argv, VALUE self) { swig::GC_VALUE *arg1 = (swig::GC_VALUE *) 0 ; swig::GC_VALUE r1 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } r1 = self; arg1 = &r1; result = (VALUE)((swig::GC_VALUE const *)arg1)->to_s(); vresult = result; return vresult; fail: return Qnil; } swig_class SwigClassConstIterator; SWIGINTERN void free_swig_ConstIterator(swig::ConstIterator *arg1) { delete arg1; } SWIGINTERN VALUE _wrap_ConstIterator_value(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","value", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); try { result = (VALUE)((swig::ConstIterator const *)arg1)->value(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::ConstIterator.dup call-seq: dup -> ConstIterator Create a duplicate of the class and unfreeze it if needed. */ SWIGINTERN VALUE _wrap_ConstIterator_dup(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","dup", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); result = (swig::ConstIterator *)((swig::ConstIterator const *)arg1)->dup(); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } /* Document-method: Geos::ConstIterator.inspect call-seq: inspect -> VALUE Inspect class and its contents. */ SWIGINTERN VALUE _wrap_ConstIterator_inspect(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","inspect", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); result = (VALUE)((swig::ConstIterator const *)arg1)->inspect(); vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::ConstIterator.to_s call-seq: to_s -> VALUE Convert class to a String representation. */ SWIGINTERN VALUE _wrap_ConstIterator_to_s(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","to_s", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); result = (VALUE)((swig::ConstIterator const *)arg1)->to_s(); vresult = result; return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_next__SWIG_0(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator *","next", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","next", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); result = (swig::ConstIterator *)(arg1)->next(arg2); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_next__SWIG_1(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator *","next", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); try { result = (swig::ConstIterator *)(arg1)->next(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_next(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_ConstIterator_next__SWIG_1(nargs, args, self); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_ConstIterator_next__SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "ConstIterator.next", " swig::ConstIterator * ConstIterator.next(size_t n)\n" " swig::ConstIterator * ConstIterator.next()\n"); return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_previous__SWIG_0(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator *","previous", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","previous", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); result = (swig::ConstIterator *)(arg1)->previous(arg2); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_previous__SWIG_1(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator *","previous", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); try { result = (swig::ConstIterator *)(arg1)->previous(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator_previous(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_ConstIterator_previous__SWIG_1(nargs, args, self); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_ConstIterator_previous__SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "ConstIterator.previous", " swig::ConstIterator * ConstIterator.previous(size_t n)\n" " swig::ConstIterator * ConstIterator.previous()\n"); return Qnil; } /* Document-method: Geos::ConstIterator.== call-seq: ==(x) -> bool Equality comparison operator. */ SWIGINTERN VALUE _wrap_ConstIterator___eq__(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; swig::ConstIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","operator ==", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_swig__ConstIterator, 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "swig::ConstIterator const &","operator ==", 2, argv[0] )); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "swig::ConstIterator const &","operator ==", 2, argv[0])); } arg2 = reinterpret_cast< swig::ConstIterator * >(argp2); result = (bool)((swig::ConstIterator const *)arg1)->operator ==((swig::ConstIterator const &)*arg2); vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } /* Document-method: Geos::ConstIterator.+ call-seq: +(n) -> ConstIterator Add operator. */ SWIGINTERN VALUE _wrap_ConstIterator___add__(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","operator +", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "ptrdiff_t","operator +", 2, argv[0] )); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::ConstIterator *)((swig::ConstIterator const *)arg1)->operator +(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } /* Document-method: Geos::ConstIterator.- call-seq: -(n) -> ConstIterator -(x) -> ptrdiff_t Substraction operator. */ SWIGINTERN VALUE _wrap_ConstIterator___sub____SWIG_0(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; swig::ConstIterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","operator -", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "ptrdiff_t","operator -", 2, argv[0] )); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::ConstIterator *)((swig::ConstIterator const *)arg1)->operator -(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__ConstIterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator___sub____SWIG_1(int argc, VALUE *argv, VALUE self) { swig::ConstIterator *arg1 = (swig::ConstIterator *) 0 ; swig::ConstIterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; ptrdiff_t result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__ConstIterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::ConstIterator const *","operator -", 1, self )); } arg1 = reinterpret_cast< swig::ConstIterator * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_swig__ConstIterator, 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "swig::ConstIterator const &","operator -", 2, argv[0] )); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "swig::ConstIterator const &","operator -", 2, argv[0])); } arg2 = reinterpret_cast< swig::ConstIterator * >(argp2); result = ((swig::ConstIterator const *)arg1)->operator -((swig::ConstIterator const &)*arg2); vresult = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_ConstIterator___sub__(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { void *vptr = 0; int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_ConstIterator___sub____SWIG_1(nargs, args, self); } } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__ConstIterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_ConstIterator___sub____SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "__sub__.new", " __sub__.new(ptrdiff_t n)\n" " __sub__.new(swig::ConstIterator const &x)\n"); return Qnil; } swig_class SwigClassIterator; SWIGINTERN VALUE _wrap_Iterator_valuee___(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; VALUE *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE temp2 ; VALUE result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator *","setValue", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); temp2 = static_cast< VALUE >(argv[0]); arg2 = &temp2; result = (VALUE)(arg1)->setValue((VALUE const &)*arg2); vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::Iterator.dup call-seq: dup -> Iterator Create a duplicate of the class and unfreeze it if needed. */ SWIGINTERN VALUE _wrap_Iterator_dup(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","dup", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); result = (swig::Iterator *)((swig::Iterator const *)arg1)->dup(); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator_next__SWIG_0(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator *","next", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","next", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); result = (swig::Iterator *)(arg1)->next(arg2); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator_next__SWIG_1(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator *","next", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); try { result = (swig::Iterator *)(arg1)->next(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator_next(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_Iterator_next__SWIG_1(nargs, args, self); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_Iterator_next__SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "Iterator.next", " swig::Iterator * Iterator.next(size_t n)\n" " swig::Iterator * Iterator.next()\n"); return Qnil; } SWIGINTERN VALUE _wrap_Iterator_previous__SWIG_0(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator *","previous", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","previous", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); result = (swig::Iterator *)(arg1)->previous(arg2); vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator_previous__SWIG_1(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator *","previous", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); try { result = (swig::Iterator *)(arg1)->previous(); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, 0 | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator_previous(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 1) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_Iterator_previous__SWIG_1(nargs, args, self); } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_size_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_Iterator_previous__SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "Iterator.previous", " swig::Iterator * Iterator.previous(size_t n)\n" " swig::Iterator * Iterator.previous()\n"); return Qnil; } /* Document-method: Geos::Iterator.inspect call-seq: inspect -> VALUE Inspect class and its contents. */ SWIGINTERN VALUE _wrap_Iterator_inspect(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","inspect", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); result = (VALUE)((swig::Iterator const *)arg1)->inspect(); vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::Iterator.to_s call-seq: to_s -> VALUE Convert class to a String representation. */ SWIGINTERN VALUE _wrap_Iterator_to_s(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; void *argp1 = 0 ; int res1 = 0 ; VALUE result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","to_s", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); result = (VALUE)((swig::Iterator const *)arg1)->to_s(); vresult = result; return vresult; fail: return Qnil; } /* Document-method: Geos::Iterator.== call-seq: ==(x) -> bool Equality comparison operator. */ SWIGINTERN VALUE _wrap_Iterator___eq__(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; swig::Iterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","operator ==", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_swig__Iterator, 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "swig::Iterator const &","operator ==", 2, argv[0] )); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "swig::Iterator const &","operator ==", 2, argv[0])); } arg2 = reinterpret_cast< swig::Iterator * >(argp2); result = (bool)((swig::Iterator const *)arg1)->operator ==((swig::Iterator const &)*arg2); vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } /* Document-method: Geos::Iterator.+ call-seq: +(n) -> Iterator Add operator. */ SWIGINTERN VALUE _wrap_Iterator___add__(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","operator +", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "ptrdiff_t","operator +", 2, argv[0] )); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::Iterator *)((swig::Iterator const *)arg1)->operator +(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } /* Document-method: Geos::Iterator.- call-seq: -(n) -> Iterator -(x) -> ptrdiff_t Substraction operator. */ SWIGINTERN VALUE _wrap_Iterator___sub____SWIG_0(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; ptrdiff_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; ptrdiff_t val2 ; int ecode2 = 0 ; swig::Iterator *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","operator -", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); ecode2 = SWIG_AsVal_ptrdiff_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "ptrdiff_t","operator -", 2, argv[0] )); } arg2 = static_cast< ptrdiff_t >(val2); try { result = (swig::Iterator *)((swig::Iterator const *)arg1)->operator -(arg2); } catch(swig::stop_iteration &_e) { { (void)_e; SWIG_Ruby_ExceptionType(NULL, Qnil); SWIG_fail; } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__Iterator, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator___sub____SWIG_1(int argc, VALUE *argv, VALUE self) { swig::Iterator *arg1 = (swig::Iterator *) 0 ; swig::Iterator *arg2 = 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 ; int res2 = 0 ; ptrdiff_t result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_swig__Iterator, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "swig::Iterator const *","operator -", 1, self )); } arg1 = reinterpret_cast< swig::Iterator * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2, SWIGTYPE_p_swig__Iterator, 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "swig::Iterator const &","operator -", 2, argv[0] )); } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, Ruby_Format_TypeError("invalid null reference ", "swig::Iterator const &","operator -", 2, argv[0])); } arg2 = reinterpret_cast< swig::Iterator * >(argp2); result = ((swig::Iterator const *)arg1)->operator -((swig::Iterator const &)*arg2); vresult = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Iterator___sub__(int nargs, VALUE *args, VALUE self) { int argc; VALUE argv[3]; int ii; argc = nargs + 1; argv[0] = self; if (argc > 3) SWIG_fail; for (ii = 1; (ii < argc); ++ii) { argv[ii] = args[ii-1]; } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { void *vptr = 0; int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { return _wrap_Iterator___sub____SWIG_1(nargs, args, self); } } } if (argc == 2) { int _v; void *vptr = 0; int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__Iterator, 0); _v = SWIG_CheckState(res); if (_v) { { int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { return _wrap_Iterator___sub____SWIG_0(nargs, args, self); } } } fail: Ruby_Format_OverloadedError( argc, 3, "__sub__.new", " __sub__.new(ptrdiff_t n)\n" " __sub__.new(swig::Iterator const &x)\n"); return Qnil; } SWIGINTERN void free_swig_Iterator(swig::Iterator *arg1) { delete arg1; } SWIGINTERN VALUE _wrap_version(int argc, VALUE *argv, VALUE self) { char *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } result = (char *)GEOSversion(); vresult = SWIG_FromCharPtr((const char *)result); return vresult; fail: return Qnil; } swig_class SwigClassCoordinateSequence; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_CoordinateSequence_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_CoordinateSequence_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosCoordinateSequence); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_CoordinateSequence(int argc, VALUE *argv, VALUE self) { size_t arg1 ; size_t arg2 ; size_t val1 ; int ecode1 = 0 ; size_t val2 ; int ecode2 = 0 ; GeosCoordinateSequence *result = 0 ; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } ecode1 = SWIG_AsVal_size_t(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "size_t","GeosCoordinateSequence", 1, argv[0] )); } arg1 = static_cast< size_t >(val1); ecode2 = SWIG_AsVal_size_t(argv[1], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","GeosCoordinateSequence", 2, argv[1] )); } arg2 = static_cast< size_t >(val2); { try { result = (GeosCoordinateSequence *)new_GeosCoordinateSequence(arg1,arg2); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosCoordinateSequence(GeosCoordinateSequence *self){ GEOSCoordSeq coords = (GEOSCoordSeq) self; return GEOSCoordSeq_destroy(coords); } SWIGINTERN void free_GeosCoordinateSequence(GeosCoordinateSequence *arg1) { delete_GeosCoordinateSequence(arg1); } /* Document-method: Geos::CoordinateSequence.clone call-seq: clone -> CoordinateSequence Create a duplicate of the class. */ SWIGINTERN VALUE _wrap_CoordinateSequence_clone(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosCoordinateSequence *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","clone", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (GeosCoordinateSequence *)GeosCoordinateSequence_clone(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_OWN | 0 ); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_set_x(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","setX", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","setX", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "double","setX", 3, argv[1] )); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setX(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_set_y(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","setY", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","setY", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "double","setY", 3, argv[1] )); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setY(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_set_z(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double val3 ; int ecode3 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","setZ", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","setZ", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_double(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "double","setZ", 3, argv[1] )); } arg3 = static_cast< double >(val3); { try { result = (int)GeosCoordinateSequence_setZ(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_set_ordinate(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; size_t arg3 ; double arg4 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; size_t val3 ; int ecode3 = 0 ; double val4 ; int ecode4 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 3) || (argc > 3)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","setOrdinate", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","setOrdinate", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_size_t(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "size_t","setOrdinate", 3, argv[1] )); } arg3 = static_cast< size_t >(val3); ecode4 = SWIG_AsVal_double(argv[2], &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "double","setOrdinate", 4, argv[2] )); } arg4 = static_cast< double >(val4); { try { result = (int)GeosCoordinateSequence_setOrdinate(arg1,arg2,arg3,arg4); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_get_x(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getX", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getX", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getX(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_get_y(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getY", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getY", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getY(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_get_z(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getZ", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getZ", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); { try { result = (double)GeosCoordinateSequence_getZ(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_get_ordinate(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; size_t arg2 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; size_t val3 ; int ecode3 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getOrdinate", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getOrdinate", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); ecode3 = SWIG_AsVal_size_t(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "size_t","getOrdinate", 3, argv[1] )); } arg3 = static_cast< size_t >(val3); { try { result = (double)GeosCoordinateSequence_getOrdinate(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence___len__(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getSize", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (unsigned int)GeosCoordinateSequence_getSize(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_CoordinateSequence_dimensions(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; void *argp1 = 0 ; int res1 = 0 ; unsigned int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","getDimensions", 1, self )); } arg1 = reinterpret_cast< GeosCoordinateSequence * >(argp1); { try { result = (unsigned int)GeosCoordinateSequence_getDimensions(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result)); return vresult; fail: return Qnil; } swig_class SwigClassGeometry; SWIGINTERN void delete_GeosGeometry(GeosGeometry *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosGeometry(GeosGeometry *arg1) { delete_GeosGeometry(arg1); } /* Document-method: Geos::Geometry.clone call-seq: clone -> Geometry Create a duplicate of the class. */ SWIGINTERN VALUE _wrap_Geometry_clone(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","clone", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_clone(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_geom_type(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; char *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","geomType", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (char *)GeosGeometry_geomType(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_FromCharPtr((const char *)result); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_type_id(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","typeId", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (int)GeosGeometry_typeId(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_normalize(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","normalize", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { GeosGeometry_normalize(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_srid(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","getSRID", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (int)GeosGeometry_getSRID(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_sride___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","setSRID", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_int(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","setSRID", 2, argv[0] )); } arg2 = static_cast< int >(val2); { try { GeosGeometry_setSRID(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_dimensions(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; size_t result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","getDimensions", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = GeosGeometry_getDimensions(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_size_t(static_cast< size_t >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_num_geometries(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; size_t result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","getNumGeometries", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = GeosGeometry_getNumGeometries(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_size_t(static_cast< size_t >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_intersection(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","intersection", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry *","intersection", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_intersection(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_buffer(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; int arg3 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; int val3 ; int ecode3 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; { arg3 = DEFAULT_QUADRANT_SEGMENTS; } if ((argc < 1) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","buffer", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "double","buffer", 2, argv[0] )); } arg2 = static_cast< double >(val2); if (argc > 1) { ecode3 = SWIG_AsVal_int(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "int","buffer", 3, argv[1] )); } arg3 = static_cast< int >(val3); } { try { result = (GeosGeometry *)GeosGeometry_buffer(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_convex_hull(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","convexHull", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_convexHull(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_difference(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","difference", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry *","difference", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_difference(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_sym_difference(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","symDifference", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry *","symDifference", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_symDifference(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_boundary(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","boundary", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_boundary(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_union(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","geomUnion", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry *","geomUnion", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (GeosGeometry *)GeosGeometry_geomUnion(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_point_on_surface(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","pointOnSurface", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_pointOnSurface(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_centroid(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","getCentroid", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_getCentroid(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_envelope(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","getEnvelope", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_getEnvelope(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_relate(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; char *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","relate", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry *","relate", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (char *)GeosGeometry_relate(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_FromCharPtr((const char *)result); delete[] result; return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_line_merge(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","lineMerge", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosGeometry *)GeosGeometry_lineMerge(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_simplify(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","simplify", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "double","simplify", 2, argv[0] )); } arg2 = static_cast< double >(val2); { try { result = (GeosGeometry *)GeosGeometry_simplify(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_topology_preserve_simplify(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; double arg2 ; void *argp1 = 0 ; int res1 = 0 ; double val2 ; int ecode2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","topologyPreserveSimplify", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); ecode2 = SWIG_AsVal_double(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "double","topologyPreserveSimplify", 2, argv[0] )); } arg2 = static_cast< double >(val2); { try { result = (GeosGeometry *)GeosGeometry_topologyPreserveSimplify(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_relate_pattern(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; char *arg3 = (char *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; int res3 ; char *buf3 = 0 ; int alloc3 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","relatePattern", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","relatePattern", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3); if (!SWIG_IsOK(res3)) { SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","relatePattern", 3, argv[1] )); } arg3 = reinterpret_cast< char * >(buf3); { try { result = (bool)GeosGeometry_relatePattern(arg1,(GeosGeometry const *)arg2,(char const *)arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); if (alloc3 == SWIG_NEWOBJ) delete[] buf3; return vresult; fail: if (alloc3 == SWIG_NEWOBJ) delete[] buf3; return Qnil; } SWIGINTERN VALUE _wrap_Geometry_disjointq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","disjoint", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","disjoint", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_disjoint(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_touchesq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","touches", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","touches", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_touches(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_intersectsq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","intersects", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","intersects", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_intersects(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_crossesq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","crosses", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","crosses", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_crosses(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_withinq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","within", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","within", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_within(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_containsq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","contains", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","contains", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_contains(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_overlapsq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","overlaps", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","overlaps", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_overlaps(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_eqlq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","equals", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","equals", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosGeometry_equals(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_eql_exactq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; double arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; double val3 ; int ecode3 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","equalsExact", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","equalsExact", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); ecode3 = SWIG_AsVal_double(argv[1], &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "double","equalsExact", 3, argv[1] )); } arg3 = static_cast< double >(val3); { try { result = (bool)GeosGeometry_equalsExact(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_emptyq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","isEmpty", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isEmpty(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_validq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","isValid", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isValid(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_simpleq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","isSimple", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isSimple(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_ringq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","isRing", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_isRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_has_zq___(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","hasZ", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (bool)GeosGeometry_hasZ(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_area(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","area", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (double)GeosGeometry_area(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } /* Document-method: Geos::Geometry.length call-seq: length -> double Size or Length of the Geometry. */ SWIGINTERN VALUE _wrap_Geometry_length(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","length", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (double)GeosGeometry_length(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Geometry_distance(int argc, VALUE *argv, VALUE self) { GeosGeometry *arg1 = (GeosGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; double result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry *","distance", 1, self )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","distance", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (double)GeosGeometry_distance(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_double(static_cast< double >(result)); return vresult; fail: return Qnil; } swig_class SwigClassPoint; SWIGINTERN void delete_GeosPoint(GeosPoint *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosPoint(GeosPoint *arg1) { delete_GeosPoint(arg1); } SWIGINTERN VALUE _wrap_Point_coord_seq(int argc, VALUE *argv, VALUE self) { GeosPoint *arg1 = (GeosPoint *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosCoordinateSequence *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPoint, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPoint *","getCoordSeq", 1, self )); } arg1 = reinterpret_cast< GeosPoint * >(argp1); { try { result = (GeosCoordinateSequence *)GeosPoint_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return vresult; fail: return Qnil; } swig_class SwigClassLineString; SWIGINTERN void delete_GeosLineString(GeosLineString *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosLineString(GeosLineString *arg1) { delete_GeosLineString(arg1); } SWIGINTERN VALUE _wrap_LineString_coord_seq(int argc, VALUE *argv, VALUE self) { GeosLineString *arg1 = (GeosLineString *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosCoordinateSequence *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosLineString, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosLineString *","getCoordSeq", 1, self )); } arg1 = reinterpret_cast< GeosLineString * >(argp1); { try { result = (GeosCoordinateSequence *)GeosLineString_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return vresult; fail: return Qnil; } swig_class SwigClassLinearRing; SWIGINTERN void delete_GeosLinearRing(GeosLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosLinearRing(GeosLinearRing *arg1) { delete_GeosLinearRing(arg1); } SWIGINTERN VALUE _wrap_LinearRing_coord_seq(int argc, VALUE *argv, VALUE self) { GeosLinearRing *arg1 = (GeosLinearRing *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosCoordinateSequence *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosLinearRing, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosLinearRing *","getCoordSeq", 1, self )); } arg1 = reinterpret_cast< GeosLinearRing * >(argp1); { try { result = (GeosCoordinateSequence *)GeosLinearRing_getCoordSeq(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosCoordinateSequence, 0 | 0 ); return vresult; fail: return Qnil; } swig_class SwigClassPolygon; SWIGINTERN void delete_GeosPolygon(GeosPolygon *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosPolygon(GeosPolygon *arg1) { delete_GeosPolygon(arg1); } SWIGINTERN VALUE _wrap_Polygon_exterior_ring(int argc, VALUE *argv, VALUE self) { GeosPolygon *arg1 = (GeosPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPolygon *","getExteriorRing", 1, self )); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); { try { result = (GeosGeometry *)GeosPolygon_getExteriorRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Polygon_num_interior_rings(int argc, VALUE *argv, VALUE self) { GeosPolygon *arg1 = (GeosPolygon *) 0 ; void *argp1 = 0 ; int res1 = 0 ; size_t result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPolygon *","getNumInteriorRings", 1, self )); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); { try { result = GeosPolygon_getNumInteriorRings(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_size_t(static_cast< size_t >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Polygon_interior_ring_n(int argc, VALUE *argv, VALUE self) { GeosPolygon *arg1 = (GeosPolygon *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPolygon, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPolygon *","getInteriorRingN", 1, self )); } arg1 = reinterpret_cast< GeosPolygon * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getInteriorRingN", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); { try { result = (GeosGeometry *)GeosPolygon_getInteriorRingN(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return vresult; fail: return Qnil; } swig_class SwigClassGeometryCollection; SWIGINTERN void delete_GeosGeometryCollection(GeosGeometryCollection *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosGeometryCollection(GeosGeometryCollection *arg1) { delete_GeosGeometryCollection(arg1); } SWIGINTERN VALUE _wrap_GeometryCollection_get_geometry_n(int argc, VALUE *argv, VALUE self) { GeosGeometryCollection *arg1 = (GeosGeometryCollection *) 0 ; size_t arg2 ; void *argp1 = 0 ; int res1 = 0 ; size_t val2 ; int ecode2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosGeometryCollection, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometryCollection *","getGeometryN", 1, self )); } arg1 = reinterpret_cast< GeosGeometryCollection * >(argp1); ecode2 = SWIG_AsVal_size_t(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "size_t","getGeometryN", 2, argv[0] )); } arg2 = static_cast< size_t >(val2); { try { result = (GeosGeometry *)GeosGeometryCollection_getGeometryN(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | 0); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | 0); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | 0); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | 0); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | 0); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | 0); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | 0); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | 0); break; } } return vresult; fail: return Qnil; } swig_class SwigClassMultiPoint; SWIGINTERN void delete_GeosMultiPoint(GeosMultiPoint *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosMultiPoint(GeosMultiPoint *arg1) { delete_GeosMultiPoint(arg1); } swig_class SwigClassMultiLineString; SWIGINTERN void delete_GeosMultiLineString(GeosMultiLineString *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosMultiLineString(GeosMultiLineString *arg1) { delete_GeosMultiLineString(arg1); } swig_class SwigClassMultiLinearRing; SWIGINTERN void delete_GeosMultiLinearRing(GeosMultiLinearRing *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosMultiLinearRing(GeosMultiLinearRing *arg1) { delete_GeosMultiLinearRing(arg1); } swig_class SwigClassMultiPolygon; SWIGINTERN void delete_GeosMultiPolygon(GeosMultiPolygon *self){ GEOSGeom geom = (GEOSGeom) self; GEOSGeom_destroy(geom); } SWIGINTERN void free_GeosMultiPolygon(GeosMultiPolygon *arg1) { delete_GeosMultiPolygon(arg1); } SWIGINTERN VALUE _wrap_create_point(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(argv[0], SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","createPoint", 1, argv[0] )); } { try { result = (GeosGeometry *)createPoint(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_create_line_string(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(argv[0], SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","createLineString", 1, argv[0] )); } { try { result = (GeosGeometry *)createLineString(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_create_linear_ring(int argc, VALUE *argv, VALUE self) { GeosCoordinateSequence *arg1 = (GeosCoordinateSequence *) 0 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(argv[0], SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosCoordinateSequence, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosCoordinateSequence *","createLinearRing", 1, argv[0] )); } { try { result = (GeosGeometry *)createLinearRing(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_create_polygon(int argc, VALUE *argv, VALUE self) { GeosLinearRing *arg1 = (GeosLinearRing *) 0 ; GeosLinearRing **arg2 = (GeosLinearRing **) 0 ; size_t arg3 ; int res1 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; { arg2 = NULL; arg3 = 0; } if ((argc < 1) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(argv[0], SWIG_as_voidptrptr(&arg1), SWIGTYPE_p_GeosLinearRing, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosLinearRing *","createPolygon", 1, argv[0] )); } if (argc > 1) { { if (NIL_P(argv[1])) { arg2 = NULL; arg3 = 0; } else { /* Make sure the input can be treated as an array. */ Check_Type(argv[1], T_ARRAY); /* Get the length */ arg3 = RARRAY_LEN(argv[1]); /* Allocate space for the C array. */ arg2 = (GeosLinearRing**) malloc(arg3*sizeof(GeosLinearRing*)); for(size_t i = 0; i 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosGeometry const *","GeosPreparedGeometry", 1, argv[0] )); } arg1 = reinterpret_cast< GeosGeometry * >(argp1); { try { result = (GeosPreparedGeometry *)new_GeosPreparedGeometry((GeosGeometry const *)arg1); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosPreparedGeometry(GeosPreparedGeometry *self){ GEOSPreparedGeometry *prep = (GEOSPreparedGeometry *) self; return GEOSPreparedGeom_destroy(prep); } SWIGINTERN void free_GeosPreparedGeometry(GeosPreparedGeometry *arg1) { delete_GeosPreparedGeometry(arg1); } SWIGINTERN VALUE _wrap_Prepared_containsq___(int argc, VALUE *argv, VALUE self) { GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPreparedGeometry *","contains", 1, self )); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","contains", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_contains(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Prepared_contains_properlyq___(int argc, VALUE *argv, VALUE self) { GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPreparedGeometry *","containsProperly", 1, self )); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","containsProperly", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_containsProperly(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Prepared_coversq___(int argc, VALUE *argv, VALUE self) { GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPreparedGeometry *","covers", 1, self )); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","covers", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_covers(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_Prepared_intersectsq___(int argc, VALUE *argv, VALUE self) { GeosPreparedGeometry *arg1 = (GeosPreparedGeometry *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosPreparedGeometry, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosPreparedGeometry *","intersects", 1, self )); } arg1 = reinterpret_cast< GeosPreparedGeometry * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","intersects", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (bool)GeosPreparedGeometry_intersects(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = (result ? Qtrue : Qfalse); return vresult; fail: return Qnil; } swig_class SwigClassSTRtree; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_STRtree_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_STRtree_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosSTRtree); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_STRtree(int argc, VALUE *argv, VALUE self) { int arg1 ; int val1 ; int ecode1 = 0 ; GeosSTRtree *result = 0 ; { arg1 = 10; } if ((argc < 0) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } if (argc > 0) { ecode1 = SWIG_AsVal_int(argv[0], &val1); if (!SWIG_IsOK(ecode1)) { SWIG_exception_fail(SWIG_ArgError(ecode1), Ruby_Format_TypeError( "", "int","GeosSTRtree", 1, argv[0] )); } arg1 = static_cast< int >(val1); } { try { result = (GeosSTRtree *)new_GeosSTRtree(arg1); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosSTRtree(GeosSTRtree *self){ GEOSSTRtree *tree = (GEOSSTRtree *) self; return GEOSSTRtree_destroy(tree); } SWIGINTERN void free_GeosSTRtree(GeosSTRtree *arg1) { delete_GeosSTRtree(arg1); } /* Document-method: Geos::STRtree.insert call-seq: insert(g, item) Insert one or more new elements in the STRtree. */ SWIGINTERN VALUE _wrap_STRtree_insert(int argc, VALUE *argv, VALUE self) { GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosSTRtree *","insert", 1, self )); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","insert", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { arg3 = (GeosIndexItem) argv[1]; } { try { GeosSTRtree_insert(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_STRtree_remove(int argc, VALUE *argv, VALUE self) { GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; if ((argc < 2) || (argc > 2)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 2)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosSTRtree *","remove", 1, self )); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","remove", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { arg3 = (GeosIndexItem) argv[1]; } { try { GeosSTRtree_remove(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_STRtree_query(int argc, VALUE *argv, VALUE self) { GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; GeosQueryCallback arg3 ; GeosIndexItem arg4 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; { arg3 = GeosSTRtree_query_callback; } { arg4 = (GeosIndexItem) Qnil; } if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosSTRtree *","query", 1, self )); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","query", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { GeosSTRtree_query(arg1,(GeosGeometry const *)arg2,arg3,arg4); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_STRtree_each(int argc, VALUE *argv, VALUE self) { GeosSTRtree *arg1 = (GeosSTRtree *) 0 ; GeosQueryCallback arg2 ; GeosIndexItem arg3 ; void *argp1 = 0 ; int res1 = 0 ; { arg2 = GeosSTRtree_query_callback; } { arg3 = (GeosIndexItem) Qnil; } if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosSTRtree, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosSTRtree *","iterate", 1, self )); } arg1 = reinterpret_cast< GeosSTRtree * >(argp1); { try { GeosSTRtree_iterate(arg1,arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } swig_class SwigClassWktReader; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_WktReader_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_WktReader_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosWktReader); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_WktReader(int argc, VALUE *argv, VALUE self) { GeosWktReader *result = 0 ; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } { try { result = (GeosWktReader *)new_GeosWktReader(); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosWktReader(GeosWktReader *self){ GEOSWKTReader *reader = (GEOSWKTReader*) self; GEOSWKTReader_destroy(reader); } SWIGINTERN void free_GeosWktReader(GeosWktReader *arg1) { delete_GeosWktReader(arg1); } SWIGINTERN VALUE _wrap_WktReader_read(int argc, VALUE *argv, VALUE self) { GeosWktReader *arg1 = (GeosWktReader *) 0 ; char *arg2 = (char *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int res2 ; char *buf2 = 0 ; int alloc2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWktReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWktReader *","read", 1, self )); } arg1 = reinterpret_cast< GeosWktReader * >(argp1); res2 = SWIG_AsCharPtrAndSize(argv[0], &buf2, NULL, &alloc2); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","read", 2, argv[0] )); } arg2 = reinterpret_cast< char * >(buf2); { try { result = (GeosGeometry *)GeosWktReader_read(arg1,(char const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } if (alloc2 == SWIG_NEWOBJ) delete[] buf2; return vresult; fail: if (alloc2 == SWIG_NEWOBJ) delete[] buf2; return Qnil; } swig_class SwigClassWktWriter; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_WktWriter_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_WktWriter_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosWktWriter); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_WktWriter(int argc, VALUE *argv, VALUE self) { GeosWktWriter *result = 0 ; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } { try { result = (GeosWktWriter *)new_GeosWktWriter(); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosWktWriter(GeosWktWriter *self){ GEOSWKTWriter *writer = (GEOSWKTWriter*) self; GEOSWKTWriter_destroy(writer); } SWIGINTERN void free_GeosWktWriter(GeosWktWriter *arg1) { delete_GeosWktWriter(arg1); } SWIGINTERN VALUE _wrap_WktWriter_write(int argc, VALUE *argv, VALUE self) { GeosWktWriter *arg1 = (GeosWktWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; char *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWktWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWktWriter *","write", 1, self )); } arg1 = reinterpret_cast< GeosWktWriter * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","write", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (char *)GeosWktWriter_write(arg1,(GeosGeometry const *)arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_FromCharPtr((const char *)result); return vresult; fail: return Qnil; } swig_class SwigClassWkbReader; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_WkbReader_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_WkbReader_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosWkbReader); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_WkbReader(int argc, VALUE *argv, VALUE self) { GeosWkbReader *result = 0 ; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } { try { result = (GeosWkbReader *)new_GeosWkbReader(); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosWkbReader(GeosWkbReader *self){ GEOSWKBReader *reader = (GEOSWKBReader*) self; GEOSWKBReader_destroy(reader); } SWIGINTERN void free_GeosWkbReader(GeosWkbReader *arg1) { delete_GeosWkbReader(arg1); } SWIGINTERN VALUE _wrap_WkbReader_read(int argc, VALUE *argv, VALUE self) { GeosWkbReader *arg1 = (GeosWkbReader *) 0 ; unsigned char *arg2 = (unsigned char *) 0 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int alloc2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbReader *","read", 1, self )); } arg1 = reinterpret_cast< GeosWkbReader * >(argp1); { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc2 = 0) */ if (SWIG_AsCharPtrAndSize(argv[0], (char**)&arg2, &arg3, &alloc2) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ arg3--; } { try { result = (GeosGeometry *)GeosWkbReader_read(arg1,(unsigned char const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbReader_read_hex(int argc, VALUE *argv, VALUE self) { GeosWkbReader *arg1 = (GeosWkbReader *) 0 ; unsigned char *arg2 = (unsigned char *) 0 ; size_t arg3 ; void *argp1 = 0 ; int res1 = 0 ; int alloc2 = 0 ; GeosGeometry *result = 0 ; VALUE vresult = Qnil; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbReader, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbReader *","readHEX", 1, self )); } arg1 = reinterpret_cast< GeosWkbReader * >(argp1); { /* %typemap(in) (const unsigned char* wkb, size_t size) (int alloc2 = 0) */ if (SWIG_AsCharPtrAndSize(argv[0], (char**)&arg2, &arg3, &alloc2) != SWIG_OK) SWIG_exception(SWIG_RuntimeError, "Expecting a string"); /* Don't want to include last null character! */ arg3--; } { try { result = (GeosGeometry *)GeosWkbReader_readHEX(arg1,(unsigned char const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) GeosGeometry */ if (result == NULL) SWIG_exception(SWIG_RuntimeError, message); GeosGeometry *geom = result; GEOSGeomTypes geomId = (GEOSGeomTypes)GEOSGeomTypeId((GEOSGeom) geom); switch (geomId) { case GEOS_POINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_LINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_LINEARRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosLinearRing, 0 | SWIG_POINTER_OWN); break; case GEOS_POLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOINT: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPoint, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTILINESTRING: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiLineString, 0 | SWIG_POINTER_OWN); break; case GEOS_MULTIPOLYGON: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosMultiPolygon, 0 | SWIG_POINTER_OWN); break; case GEOS_GEOMETRYCOLLECTION: vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GeosGeometryCollection, 0 | SWIG_POINTER_OWN); break; } } return vresult; fail: return Qnil; } swig_class SwigClassWkbWriter; #ifdef HAVE_RB_DEFINE_ALLOC_FUNC SWIGINTERN VALUE _wrap_WkbWriter_allocate(VALUE self) { #else SWIGINTERN VALUE _wrap_WkbWriter_allocate(int argc, VALUE *argv, VALUE self) { #endif VALUE vresult = SWIG_NewClassInstance(self, SWIGTYPE_p_GeosWkbWriter); #ifndef HAVE_RB_DEFINE_ALLOC_FUNC rb_obj_call_init(vresult, argc, argv); #endif return vresult; } SWIGINTERN VALUE _wrap_new_WkbWriter(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *result = 0 ; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } { try { result = (GeosWkbWriter *)new_GeosWkbWriter(); DATA_PTR(self) = result; } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return self; fail: return Qnil; } SWIGINTERN void delete_GeosWkbWriter(GeosWkbWriter *self){ GEOSWKBWriter *writer = (GEOSWKBWriter*) self; GEOSWKBWriter_destroy(writer); } SWIGINTERN void free_GeosWkbWriter(GeosWkbWriter *arg1) { delete_GeosWkbWriter(arg1); } SWIGINTERN VALUE _wrap_WkbWriter_output_dimensions(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","getOutputDimension", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (int)GeosWkbWriter_getOutputDimension(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_output_dimensionse___(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","setOutputDimension", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_int(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","setOutputDimension", 2, argv[0] )); } arg2 = static_cast< int >(val2); { try { GeosWkbWriter_setOutputDimension(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_byte_order(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; int result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","getByteOrder", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (int)GeosWkbWriter_getByteOrder(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_int(static_cast< int >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_byte_ordere___(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; int val2 ; int ecode2 = 0 ; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","setByteOrder", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_int(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "int","setByteOrder", 2, argv[0] )); } arg2 = static_cast< int >(val2); { try { GeosWkbWriter_setByteOrder(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_include_srid(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; void *argp1 = 0 ; int res1 = 0 ; bool result; VALUE vresult = Qnil; if ((argc < 0) || (argc > 0)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","getIncludeSRID", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); { try { result = (bool)GeosWkbWriter_getIncludeSRID(arg1); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } vresult = SWIG_From_bool(static_cast< bool >(result)); return vresult; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_include_sride___(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; bool arg2 ; void *argp1 = 0 ; int res1 = 0 ; bool val2 ; int ecode2 = 0 ; if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","setIncludeSRID", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); ecode2 = SWIG_AsVal_bool(argv[0], &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","setIncludeSRID", 2, argv[0] )); } arg2 = static_cast< bool >(val2); { try { GeosWkbWriter_setIncludeSRID(arg1,arg2); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } return Qnil; fail: return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_write(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; size_t *arg3 = (size_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; size_t temp3 = 0 ; unsigned char *result = 0 ; VALUE vresult = Qnil; { /* %typemap(in, numinputs=0) size_t *size (size_t temp3 = 0) */ arg3 = &temp3; } if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","write", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","write", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (unsigned char *)GeosWkbWriter_write(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) unsigned char* */ } { /* %typemap(argout) size_t *size */ vresult = SWIG_FromCharPtrAndSize((const char*)result, *arg3); } { /* %typemap(freearg) size_t *size */ std::free(result); } return vresult; fail: { /* %typemap(freearg) size_t *size */ std::free(result); } return Qnil; } SWIGINTERN VALUE _wrap_WkbWriter_write_hex(int argc, VALUE *argv, VALUE self) { GeosWkbWriter *arg1 = (GeosWkbWriter *) 0 ; GeosGeometry *arg2 = (GeosGeometry *) 0 ; size_t *arg3 = (size_t *) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; size_t temp3 = 0 ; unsigned char *result = 0 ; VALUE vresult = Qnil; { /* %typemap(in, numinputs=0) size_t *size (size_t temp3 = 0) */ arg3 = &temp3; } if ((argc < 1) || (argc > 1)) { rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail; } res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GeosWkbWriter, 0 | 0 ); if (!SWIG_IsOK(res1)) { SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GeosWkbWriter *","writeHEX", 1, self )); } arg1 = reinterpret_cast< GeosWkbWriter * >(argp1); res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_GeosGeometry, 0 | 0 ); if (!SWIG_IsOK(res2)) { SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "GeosGeometry const *","writeHEX", 2, argv[0] )); } arg2 = reinterpret_cast< GeosGeometry * >(argp2); { try { result = (unsigned char *)GeosWkbWriter_writeHEX(arg1,(GeosGeometry const *)arg2,arg3); } catch (const std::exception& e) { SWIG_exception(SWIG_RuntimeError, e.what()); } } { /* %typemap(out) unsigned char* */ } { /* %typemap(argout) size_t *size */ vresult = SWIG_FromCharPtrAndSize((const char*)result, *arg3); } { /* %typemap(freearg) size_t *size */ std::free(result); } return vresult; fail: { /* %typemap(freearg) size_t *size */ std::free(result); } return Qnil; } /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ static void *_p_GeosMultiPolygonTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiPolygon *) x)); } static void *_p_GeosMultiPointTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiPoint *) x)); } static void *_p_GeosMultiLineStringTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiLineString *) x)); } static void *_p_GeosMultiLinearRingTo_p_GeosGeometryCollection(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometryCollection *) ((GeosMultiLinearRing *) x)); } static void *_p_GeosPolygonTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosPolygon *) x)); } static void *_p_GeosMultiPolygonTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiPolygon *) x)); } static void *_p_GeosPointTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosPoint *) x)); } static void *_p_GeosLineStringTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosLineString *) x)); } static void *_p_GeosLinearRingTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosLinearRing *) x)); } static void *_p_GeosMultiPointTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiPoint *) x)); } static void *_p_GeosMultiLineStringTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiLineString *) x)); } static void *_p_GeosMultiLinearRingTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) (GeosGeometryCollection *) ((GeosMultiLinearRing *) x)); } static void *_p_GeosGeometryCollectionTo_p_GeosGeometry(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((GeosGeometry *) ((GeosGeometryCollection *) x)); } static void *_p_swig__IteratorTo_p_swig__ConstIterator(void *x, int *SWIGUNUSEDPARM(newmemory)) { return (void *)((swig::ConstIterator *) ((swig::Iterator *) x)); } static swig_type_info _swigt__p_GeosCoordinateSequence = {"_p_GeosCoordinateSequence", "GeosCoordinateSequence *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosGeometry = {"_p_GeosGeometry", "GeosGeometry *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosGeometryCollection = {"_p_GeosGeometryCollection", "GeosGeometryCollection *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosLineString = {"_p_GeosLineString", "GeosLineString *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosLinearRing = {"_p_GeosLinearRing", "GeosLinearRing *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiLineString = {"_p_GeosMultiLineString", "GeosMultiLineString *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiLinearRing = {"_p_GeosMultiLinearRing", "GeosMultiLinearRing *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiPoint = {"_p_GeosMultiPoint", "GeosMultiPoint *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosMultiPolygon = {"_p_GeosMultiPolygon", "GeosMultiPolygon *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPoint = {"_p_GeosPoint", "GeosPoint *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPolygon = {"_p_GeosPolygon", "GeosPolygon *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosPreparedGeometry = {"_p_GeosPreparedGeometry", "GeosPreparedGeometry *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosSTRtree = {"_p_GeosSTRtree", "GeosSTRtree *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWkbReader = {"_p_GeosWkbReader", "GeosWkbReader *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWkbWriter = {"_p_GeosWkbWriter", "GeosWkbWriter *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWktReader = {"_p_GeosWktReader", "GeosWktReader *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_GeosWktWriter = {"_p_GeosWktWriter", "GeosWktWriter *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_GeosLinearRing = {"_p_p_GeosLinearRing", "GeosLinearRing **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_size_t = {"_p_size_t", "size_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_swig__ConstIterator = {"_p_swig__ConstIterator", "swig::ConstIterator *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_swig__GC_VALUE = {"_p_swig__GC_VALUE", "swig::GC_VALUE *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_swig__Iterator = {"_p_swig__Iterator", "swig::Iterator *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_void = {"_p_void", "VALUE|void *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { &_swigt__p_GeosCoordinateSequence, &_swigt__p_GeosGeometry, &_swigt__p_GeosGeometryCollection, &_swigt__p_GeosLineString, &_swigt__p_GeosLinearRing, &_swigt__p_GeosMultiLineString, &_swigt__p_GeosMultiLinearRing, &_swigt__p_GeosMultiPoint, &_swigt__p_GeosMultiPolygon, &_swigt__p_GeosPoint, &_swigt__p_GeosPolygon, &_swigt__p_GeosPreparedGeometry, &_swigt__p_GeosSTRtree, &_swigt__p_GeosWkbReader, &_swigt__p_GeosWkbWriter, &_swigt__p_GeosWktReader, &_swigt__p_GeosWktWriter, &_swigt__p_char, &_swigt__p_p_GeosLinearRing, &_swigt__p_size_t, &_swigt__p_swig__ConstIterator, &_swigt__p_swig__GC_VALUE, &_swigt__p_swig__Iterator, &_swigt__p_unsigned_char, &_swigt__p_void, }; static swig_cast_info _swigc__p_GeosCoordinateSequence[] = { {&_swigt__p_GeosCoordinateSequence, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosGeometry[] = { {&_swigt__p_GeosPolygon, _p_GeosPolygonTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiPolygon, _p_GeosMultiPolygonTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosPoint, _p_GeosPointTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosGeometry, 0, 0, 0}, {&_swigt__p_GeosLineString, _p_GeosLineStringTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosLinearRing, _p_GeosLinearRingTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiPoint, _p_GeosMultiPointTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiLineString, _p_GeosMultiLineStringTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosMultiLinearRing, _p_GeosMultiLinearRingTo_p_GeosGeometry, 0, 0}, {&_swigt__p_GeosGeometryCollection, _p_GeosGeometryCollectionTo_p_GeosGeometry, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosGeometryCollection[] = { {&_swigt__p_GeosMultiPolygon, _p_GeosMultiPolygonTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiPoint, _p_GeosMultiPointTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiLineString, _p_GeosMultiLineStringTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosMultiLinearRing, _p_GeosMultiLinearRingTo_p_GeosGeometryCollection, 0, 0}, {&_swigt__p_GeosGeometryCollection, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosLineString[] = { {&_swigt__p_GeosLineString, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosLinearRing[] = { {&_swigt__p_GeosLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiLineString[] = { {&_swigt__p_GeosMultiLineString, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiLinearRing[] = { {&_swigt__p_GeosMultiLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiPoint[] = { {&_swigt__p_GeosMultiPoint, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosMultiPolygon[] = { {&_swigt__p_GeosMultiPolygon, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPoint[] = { {&_swigt__p_GeosPoint, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPolygon[] = { {&_swigt__p_GeosPolygon, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosPreparedGeometry[] = { {&_swigt__p_GeosPreparedGeometry, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosSTRtree[] = { {&_swigt__p_GeosSTRtree, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWkbReader[] = { {&_swigt__p_GeosWkbReader, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWkbWriter[] = { {&_swigt__p_GeosWkbWriter, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWktReader[] = { {&_swigt__p_GeosWktReader, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_GeosWktWriter[] = { {&_swigt__p_GeosWktWriter, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_GeosLinearRing[] = { {&_swigt__p_p_GeosLinearRing, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_size_t[] = { {&_swigt__p_size_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_swig__ConstIterator[] = { {&_swigt__p_swig__ConstIterator, 0, 0, 0}, {&_swigt__p_swig__Iterator, _p_swig__IteratorTo_p_swig__ConstIterator, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_swig__GC_VALUE[] = { {&_swigt__p_swig__GC_VALUE, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_swig__Iterator[] = { {&_swigt__p_swig__Iterator, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { _swigc__p_GeosCoordinateSequence, _swigc__p_GeosGeometry, _swigc__p_GeosGeometryCollection, _swigc__p_GeosLineString, _swigc__p_GeosLinearRing, _swigc__p_GeosMultiLineString, _swigc__p_GeosMultiLinearRing, _swigc__p_GeosMultiPoint, _swigc__p_GeosMultiPolygon, _swigc__p_GeosPoint, _swigc__p_GeosPolygon, _swigc__p_GeosPreparedGeometry, _swigc__p_GeosSTRtree, _swigc__p_GeosWkbReader, _swigc__p_GeosWkbWriter, _swigc__p_GeosWktReader, _swigc__p_GeosWktWriter, _swigc__p_char, _swigc__p_p_GeosLinearRing, _swigc__p_size_t, _swigc__p_swig__ConstIterator, _swigc__p_swig__GC_VALUE, _swigc__p_swig__Iterator, _swigc__p_unsigned_char, _swigc__p_void, }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ /* ----------------------------------------------------------------------------- * Type initialization: * This problem is tough by the requirement that no dynamic * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back * to swig_type_info structures, we need some lookup code at initialization. * The idea is that swig generates all the structures that are needed. * The runtime then collects these partially filled structures. * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * * The generated swig_type_info structures are assigned staticly to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the * cast linked list. The cast data is initially stored in something like a * two-dimensional array. Each row corresponds to a type (there are the same * number of rows as there are in the swig_type_initial array). Each entry in * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that * swig_cast_info to the linked list (because the cast->type) pointer will * be correct. * ----------------------------------------------------------------------------- */ #ifdef __cplusplus extern "C" { #if 0 } /* c-mode */ #endif #endif #if 0 #define SWIGRUNTIME_DEBUG #endif SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int found, init; clientdata = clientdata; /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ swig_module.type_initial = swig_type_initial; swig_module.cast_initial = swig_cast_initial; swig_module.next = &swig_module; init = 1; } else { init = 0; } /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { /* This is the first module loaded for this interpreter */ /* so set the swig module into the interpreter */ SWIG_SetModule(clientdata, &swig_module); module_head = &swig_module; } else { /* the interpreter has loaded a SWIG module, but has it loaded this one? */ found=0; iter=module_head; do { if (iter==&swig_module) { found=1; break; } iter=iter->next; } while (iter!= module_head); /* if the is found in the list, then all is done and we may leave */ if (found) return; /* otherwise we must add out module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } /* When multiple interpeters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif for (i = 0; i < swig_module.size; ++i) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); } if (type) { /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found type %s\n", type->name); #endif if (swig_module.type_initial[i]->clientdata) { type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif } } else { type = swig_module.type_initial[i]; } /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { /* Don't need to add information already in the list */ ret = 0; #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif if (swig_module.next != &swig_module) { ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif } if (ret) { if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif cast->type = ret; ret = 0; } else { /* Check for casting already in the list */ swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif if (!ocast) ret = 0; } } if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif if (type->cast) { type->cast->prev = cast; cast->next = type->cast; } type->cast = cast; } cast++; } /* Set entry in modules->types array equal to the type */ swig_module.types[i] = type; } swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { int j = 0; swig_cast_info *cast = swig_module.cast_initial[i]; printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); while (cast->type) { printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); cast++; ++j; } printf("---- Total casts: %d\n",j); } printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } /* This function will propagate the clientdata field of type to * any new swig_type_info structures that have been added into the list * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ SWIGRUNTIME void SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; if (init_run) return; init_run = 1; for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; while (equiv) { if (!equiv->converter) { if (equiv->type && !equiv->type->clientdata) SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); } equiv = equiv->next; } } } } #ifdef __cplusplus #if 0 { /* c-mode */ #endif } #endif /* */ #ifdef __cplusplus extern "C" #endif SWIGEXPORT void Init_geos(void) { size_t i; SWIG_InitRuntime(); mGeos = rb_define_module("Geos"); SWIG_InitializeModule(0); for (i = 0; i < swig_module.size; i++) { SWIG_define_class(swig_module.types[i]); } SWIG_RubyInitializeTrackings(); SwigClassGCVALUE.klass = rb_define_class_under(mGeos, "GCVALUE", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_swig__GC_VALUE, (void *) &SwigClassGCVALUE); rb_undef_alloc_func(SwigClassGCVALUE.klass); rb_define_method(SwigClassGCVALUE.klass, "inspect", VALUEFUNC(_wrap_GCVALUE_inspect), -1); rb_define_method(SwigClassGCVALUE.klass, "to_s", VALUEFUNC(_wrap_GCVALUE_to_s), -1); SwigClassGCVALUE.mark = 0; SwigClassGCVALUE.trackObjects = 0; swig::GC_VALUE::initialize(); SwigClassConstIterator.klass = rb_define_class_under(mGeos, "ConstIterator", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_swig__ConstIterator, (void *) &SwigClassConstIterator); rb_undef_alloc_func(SwigClassConstIterator.klass); rb_define_method(SwigClassConstIterator.klass, "value", VALUEFUNC(_wrap_ConstIterator_value), -1); rb_define_method(SwigClassConstIterator.klass, "dup", VALUEFUNC(_wrap_ConstIterator_dup), -1); rb_define_method(SwigClassConstIterator.klass, "inspect", VALUEFUNC(_wrap_ConstIterator_inspect), -1); rb_define_method(SwigClassConstIterator.klass, "to_s", VALUEFUNC(_wrap_ConstIterator_to_s), -1); rb_define_method(SwigClassConstIterator.klass, "next", VALUEFUNC(_wrap_ConstIterator_next), -1); rb_define_method(SwigClassConstIterator.klass, "previous", VALUEFUNC(_wrap_ConstIterator_previous), -1); rb_define_method(SwigClassConstIterator.klass, "==", VALUEFUNC(_wrap_ConstIterator___eq__), -1); rb_define_method(SwigClassConstIterator.klass, "+", VALUEFUNC(_wrap_ConstIterator___add__), -1); rb_define_method(SwigClassConstIterator.klass, "-", VALUEFUNC(_wrap_ConstIterator___sub__), -1); SwigClassConstIterator.mark = 0; SwigClassConstIterator.destroy = (void (*)(void *)) free_swig_ConstIterator; SwigClassConstIterator.trackObjects = 0; SwigClassIterator.klass = rb_define_class_under(mGeos, "Iterator", ((swig_class *) SWIGTYPE_p_swig__ConstIterator->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_swig__Iterator, (void *) &SwigClassIterator); rb_undef_alloc_func(SwigClassIterator.klass); rb_define_method(SwigClassIterator.klass, "value=", VALUEFUNC(_wrap_Iterator_valuee___), -1); rb_define_method(SwigClassIterator.klass, "dup", VALUEFUNC(_wrap_Iterator_dup), -1); rb_define_method(SwigClassIterator.klass, "next", VALUEFUNC(_wrap_Iterator_next), -1); rb_define_method(SwigClassIterator.klass, "previous", VALUEFUNC(_wrap_Iterator_previous), -1); rb_define_method(SwigClassIterator.klass, "inspect", VALUEFUNC(_wrap_Iterator_inspect), -1); rb_define_method(SwigClassIterator.klass, "to_s", VALUEFUNC(_wrap_Iterator_to_s), -1); rb_define_method(SwigClassIterator.klass, "==", VALUEFUNC(_wrap_Iterator___eq__), -1); rb_define_method(SwigClassIterator.klass, "+", VALUEFUNC(_wrap_Iterator___add__), -1); rb_define_method(SwigClassIterator.klass, "-", VALUEFUNC(_wrap_Iterator___sub__), -1); SwigClassIterator.mark = 0; SwigClassIterator.destroy = (void (*)(void *)) free_swig_Iterator; SwigClassIterator.trackObjects = 0; rb_define_const(mGeos, "GEOS_VERSION_MAJOR", SWIG_From_int(static_cast< int >(3))); rb_define_const(mGeos, "GEOS_VERSION_MINOR", SWIG_From_int(static_cast< int >(4))); rb_define_const(mGeos, "GEOS_VERSION", SWIG_FromCharPtr("3.4.0dev")); rb_define_const(mGeos, "GEOS_JTS_PORT", SWIG_FromCharPtr("1.12.0")); rb_define_const(mGeos, "GEOS_CAPI_VERSION_MAJOR", SWIG_From_int(static_cast< int >(1))); rb_define_const(mGeos, "GEOS_CAPI_VERSION_MINOR", SWIG_From_int(static_cast< int >(8))); rb_define_const(mGeos, "GEOS_CAPI_VERSION_PATCH", SWIG_From_int(static_cast< int >(0))); rb_define_const(mGeos, "GEOS_CAPI_FIRST_INTERFACE", SWIG_From_int(static_cast< int >(1))); rb_define_const(mGeos, "GEOS_CAPI_LAST_INTERFACE", SWIG_From_int(static_cast< int >((1+8)))); rb_define_const(mGeos, "GEOS_CAPI_VERSION", SWIG_FromCharPtr("3.4.0dev-CAPI-1.8.0")); rb_define_const(mGeos, "GEOS_POINT", SWIG_From_int(static_cast< int >(GEOS_POINT))); rb_define_const(mGeos, "GEOS_LINESTRING", SWIG_From_int(static_cast< int >(GEOS_LINESTRING))); rb_define_const(mGeos, "GEOS_LINEARRING", SWIG_From_int(static_cast< int >(GEOS_LINEARRING))); rb_define_const(mGeos, "GEOS_POLYGON", SWIG_From_int(static_cast< int >(GEOS_POLYGON))); rb_define_const(mGeos, "GEOS_MULTIPOINT", SWIG_From_int(static_cast< int >(GEOS_MULTIPOINT))); rb_define_const(mGeos, "GEOS_MULTILINESTRING", SWIG_From_int(static_cast< int >(GEOS_MULTILINESTRING))); rb_define_const(mGeos, "GEOS_MULTIPOLYGON", SWIG_From_int(static_cast< int >(GEOS_MULTIPOLYGON))); rb_define_const(mGeos, "GEOS_GEOMETRYCOLLECTION", SWIG_From_int(static_cast< int >(GEOS_GEOMETRYCOLLECTION))); rb_define_const(mGeos, "GEOS_WKB_XDR", SWIG_From_int(static_cast< int >(GEOS_WKB_XDR))); rb_define_const(mGeos, "GEOS_WKB_NDR", SWIG_From_int(static_cast< int >(GEOS_WKB_NDR))); initGEOS(noticeHandler, errorHandler); rb_define_module_function(mGeos, "version", VALUEFUNC(_wrap_version), -1); SwigClassCoordinateSequence.klass = rb_define_class_under(mGeos, "CoordinateSequence", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosCoordinateSequence, (void *) &SwigClassCoordinateSequence); rb_define_alloc_func(SwigClassCoordinateSequence.klass, _wrap_CoordinateSequence_allocate); rb_define_method(SwigClassCoordinateSequence.klass, "initialize", VALUEFUNC(_wrap_new_CoordinateSequence), -1); rb_define_method(SwigClassCoordinateSequence.klass, "clone", VALUEFUNC(_wrap_CoordinateSequence_clone), -1); rb_define_method(SwigClassCoordinateSequence.klass, "set_x", VALUEFUNC(_wrap_CoordinateSequence_set_x), -1); rb_define_method(SwigClassCoordinateSequence.klass, "set_y", VALUEFUNC(_wrap_CoordinateSequence_set_y), -1); rb_define_method(SwigClassCoordinateSequence.klass, "set_z", VALUEFUNC(_wrap_CoordinateSequence_set_z), -1); rb_define_method(SwigClassCoordinateSequence.klass, "set_ordinate", VALUEFUNC(_wrap_CoordinateSequence_set_ordinate), -1); rb_define_method(SwigClassCoordinateSequence.klass, "get_x", VALUEFUNC(_wrap_CoordinateSequence_get_x), -1); rb_define_method(SwigClassCoordinateSequence.klass, "get_y", VALUEFUNC(_wrap_CoordinateSequence_get_y), -1); rb_define_method(SwigClassCoordinateSequence.klass, "get_z", VALUEFUNC(_wrap_CoordinateSequence_get_z), -1); rb_define_method(SwigClassCoordinateSequence.klass, "get_ordinate", VALUEFUNC(_wrap_CoordinateSequence_get_ordinate), -1); rb_define_method(SwigClassCoordinateSequence.klass, "length", VALUEFUNC(_wrap_CoordinateSequence___len__), -1); rb_define_method(SwigClassCoordinateSequence.klass, "dimensions", VALUEFUNC(_wrap_CoordinateSequence_dimensions), -1); SwigClassCoordinateSequence.mark = 0; SwigClassCoordinateSequence.destroy = (void (*)(void *)) free_GeosCoordinateSequence; SwigClassCoordinateSequence.trackObjects = 0; SwigClassGeometry.klass = rb_define_class_under(mGeos, "Geometry", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosGeometry, (void *) &SwigClassGeometry); rb_undef_alloc_func(SwigClassGeometry.klass); rb_define_method(SwigClassGeometry.klass, "clone", VALUEFUNC(_wrap_Geometry_clone), -1); rb_define_method(SwigClassGeometry.klass, "geom_type", VALUEFUNC(_wrap_Geometry_geom_type), -1); rb_define_method(SwigClassGeometry.klass, "type_id", VALUEFUNC(_wrap_Geometry_type_id), -1); rb_define_method(SwigClassGeometry.klass, "normalize", VALUEFUNC(_wrap_Geometry_normalize), -1); rb_define_method(SwigClassGeometry.klass, "srid", VALUEFUNC(_wrap_Geometry_srid), -1); rb_define_method(SwigClassGeometry.klass, "srid=", VALUEFUNC(_wrap_Geometry_sride___), -1); rb_define_method(SwigClassGeometry.klass, "dimensions", VALUEFUNC(_wrap_Geometry_dimensions), -1); rb_define_method(SwigClassGeometry.klass, "num_geometries", VALUEFUNC(_wrap_Geometry_num_geometries), -1); rb_define_method(SwigClassGeometry.klass, "intersection", VALUEFUNC(_wrap_Geometry_intersection), -1); rb_define_method(SwigClassGeometry.klass, "buffer", VALUEFUNC(_wrap_Geometry_buffer), -1); rb_define_method(SwigClassGeometry.klass, "convex_hull", VALUEFUNC(_wrap_Geometry_convex_hull), -1); rb_define_method(SwigClassGeometry.klass, "difference", VALUEFUNC(_wrap_Geometry_difference), -1); rb_define_method(SwigClassGeometry.klass, "sym_difference", VALUEFUNC(_wrap_Geometry_sym_difference), -1); rb_define_method(SwigClassGeometry.klass, "boundary", VALUEFUNC(_wrap_Geometry_boundary), -1); rb_define_method(SwigClassGeometry.klass, "union", VALUEFUNC(_wrap_Geometry_union), -1); rb_define_method(SwigClassGeometry.klass, "point_on_surface", VALUEFUNC(_wrap_Geometry_point_on_surface), -1); rb_define_method(SwigClassGeometry.klass, "centroid", VALUEFUNC(_wrap_Geometry_centroid), -1); rb_define_alias(SwigClassGeometry.klass, "center", "centroid"); rb_define_method(SwigClassGeometry.klass, "envelope", VALUEFUNC(_wrap_Geometry_envelope), -1); rb_define_method(SwigClassGeometry.klass, "relate", VALUEFUNC(_wrap_Geometry_relate), -1); rb_define_method(SwigClassGeometry.klass, "line_merge", VALUEFUNC(_wrap_Geometry_line_merge), -1); rb_define_method(SwigClassGeometry.klass, "simplify", VALUEFUNC(_wrap_Geometry_simplify), -1); rb_define_method(SwigClassGeometry.klass, "topology_preserve_simplify", VALUEFUNC(_wrap_Geometry_topology_preserve_simplify), -1); rb_define_method(SwigClassGeometry.klass, "relate_pattern", VALUEFUNC(_wrap_Geometry_relate_pattern), -1); rb_define_method(SwigClassGeometry.klass, "disjoint?", VALUEFUNC(_wrap_Geometry_disjointq___), -1); rb_define_method(SwigClassGeometry.klass, "touches?", VALUEFUNC(_wrap_Geometry_touchesq___), -1); rb_define_method(SwigClassGeometry.klass, "intersects?", VALUEFUNC(_wrap_Geometry_intersectsq___), -1); rb_define_method(SwigClassGeometry.klass, "crosses?", VALUEFUNC(_wrap_Geometry_crossesq___), -1); rb_define_method(SwigClassGeometry.klass, "within?", VALUEFUNC(_wrap_Geometry_withinq___), -1); rb_define_method(SwigClassGeometry.klass, "contains?", VALUEFUNC(_wrap_Geometry_containsq___), -1); rb_define_method(SwigClassGeometry.klass, "overlaps?", VALUEFUNC(_wrap_Geometry_overlapsq___), -1); rb_define_method(SwigClassGeometry.klass, "eql?", VALUEFUNC(_wrap_Geometry_eqlq___), -1); rb_define_alias(SwigClassGeometry.klass, "==", "eql?"); rb_define_method(SwigClassGeometry.klass, "eql_exact?", VALUEFUNC(_wrap_Geometry_eql_exactq___), -1); rb_define_method(SwigClassGeometry.klass, "empty?", VALUEFUNC(_wrap_Geometry_emptyq___), -1); rb_define_method(SwigClassGeometry.klass, "valid?", VALUEFUNC(_wrap_Geometry_validq___), -1); rb_define_method(SwigClassGeometry.klass, "simple?", VALUEFUNC(_wrap_Geometry_simpleq___), -1); rb_define_method(SwigClassGeometry.klass, "ring?", VALUEFUNC(_wrap_Geometry_ringq___), -1); rb_define_method(SwigClassGeometry.klass, "has_z?", VALUEFUNC(_wrap_Geometry_has_zq___), -1); rb_define_method(SwigClassGeometry.klass, "area", VALUEFUNC(_wrap_Geometry_area), -1); rb_define_method(SwigClassGeometry.klass, "length", VALUEFUNC(_wrap_Geometry_length), -1); rb_define_method(SwigClassGeometry.klass, "distance", VALUEFUNC(_wrap_Geometry_distance), -1); SwigClassGeometry.mark = 0; SwigClassGeometry.destroy = (void (*)(void *)) free_GeosGeometry; SwigClassGeometry.trackObjects = 0; SwigClassPoint.klass = rb_define_class_under(mGeos, "Point", ((swig_class *) SWIGTYPE_p_GeosGeometry->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosPoint, (void *) &SwigClassPoint); rb_undef_alloc_func(SwigClassPoint.klass); rb_define_method(SwigClassPoint.klass, "coord_seq", VALUEFUNC(_wrap_Point_coord_seq), -1); SwigClassPoint.mark = 0; SwigClassPoint.destroy = (void (*)(void *)) free_GeosPoint; SwigClassPoint.trackObjects = 0; SwigClassLineString.klass = rb_define_class_under(mGeos, "LineString", ((swig_class *) SWIGTYPE_p_GeosGeometry->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosLineString, (void *) &SwigClassLineString); rb_undef_alloc_func(SwigClassLineString.klass); rb_define_method(SwigClassLineString.klass, "coord_seq", VALUEFUNC(_wrap_LineString_coord_seq), -1); SwigClassLineString.mark = 0; SwigClassLineString.destroy = (void (*)(void *)) free_GeosLineString; SwigClassLineString.trackObjects = 0; SwigClassLinearRing.klass = rb_define_class_under(mGeos, "LinearRing", ((swig_class *) SWIGTYPE_p_GeosGeometry->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosLinearRing, (void *) &SwigClassLinearRing); rb_undef_alloc_func(SwigClassLinearRing.klass); rb_define_method(SwigClassLinearRing.klass, "coord_seq", VALUEFUNC(_wrap_LinearRing_coord_seq), -1); SwigClassLinearRing.mark = 0; SwigClassLinearRing.destroy = (void (*)(void *)) free_GeosLinearRing; SwigClassLinearRing.trackObjects = 0; SwigClassPolygon.klass = rb_define_class_under(mGeos, "Polygon", ((swig_class *) SWIGTYPE_p_GeosGeometry->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosPolygon, (void *) &SwigClassPolygon); rb_undef_alloc_func(SwigClassPolygon.klass); rb_define_method(SwigClassPolygon.klass, "exterior_ring", VALUEFUNC(_wrap_Polygon_exterior_ring), -1); rb_define_method(SwigClassPolygon.klass, "num_interior_rings", VALUEFUNC(_wrap_Polygon_num_interior_rings), -1); rb_define_method(SwigClassPolygon.klass, "interior_ring_n", VALUEFUNC(_wrap_Polygon_interior_ring_n), -1); SwigClassPolygon.mark = 0; SwigClassPolygon.destroy = (void (*)(void *)) free_GeosPolygon; SwigClassPolygon.trackObjects = 0; SwigClassGeometryCollection.klass = rb_define_class_under(mGeos, "GeometryCollection", ((swig_class *) SWIGTYPE_p_GeosGeometry->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosGeometryCollection, (void *) &SwigClassGeometryCollection); rb_undef_alloc_func(SwigClassGeometryCollection.klass); rb_define_method(SwigClassGeometryCollection.klass, "get_geometry_n", VALUEFUNC(_wrap_GeometryCollection_get_geometry_n), -1); SwigClassGeometryCollection.mark = 0; SwigClassGeometryCollection.destroy = (void (*)(void *)) free_GeosGeometryCollection; SwigClassGeometryCollection.trackObjects = 0; SwigClassMultiPoint.klass = rb_define_class_under(mGeos, "MultiPoint", ((swig_class *) SWIGTYPE_p_GeosGeometryCollection->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosMultiPoint, (void *) &SwigClassMultiPoint); rb_undef_alloc_func(SwigClassMultiPoint.klass); SwigClassMultiPoint.mark = 0; SwigClassMultiPoint.destroy = (void (*)(void *)) free_GeosMultiPoint; SwigClassMultiPoint.trackObjects = 0; SwigClassMultiLineString.klass = rb_define_class_under(mGeos, "MultiLineString", ((swig_class *) SWIGTYPE_p_GeosGeometryCollection->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosMultiLineString, (void *) &SwigClassMultiLineString); rb_undef_alloc_func(SwigClassMultiLineString.klass); SwigClassMultiLineString.mark = 0; SwigClassMultiLineString.destroy = (void (*)(void *)) free_GeosMultiLineString; SwigClassMultiLineString.trackObjects = 0; SwigClassMultiLinearRing.klass = rb_define_class_under(mGeos, "MultiLinearRing", ((swig_class *) SWIGTYPE_p_GeosGeometryCollection->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosMultiLinearRing, (void *) &SwigClassMultiLinearRing); rb_undef_alloc_func(SwigClassMultiLinearRing.klass); SwigClassMultiLinearRing.mark = 0; SwigClassMultiLinearRing.destroy = (void (*)(void *)) free_GeosMultiLinearRing; SwigClassMultiLinearRing.trackObjects = 0; SwigClassMultiPolygon.klass = rb_define_class_under(mGeos, "MultiPolygon", ((swig_class *) SWIGTYPE_p_GeosGeometryCollection->clientdata)->klass); SWIG_TypeClientData(SWIGTYPE_p_GeosMultiPolygon, (void *) &SwigClassMultiPolygon); rb_undef_alloc_func(SwigClassMultiPolygon.klass); SwigClassMultiPolygon.mark = 0; SwigClassMultiPolygon.destroy = (void (*)(void *)) free_GeosMultiPolygon; SwigClassMultiPolygon.trackObjects = 0; rb_define_module_function(mGeos, "create_point", VALUEFUNC(_wrap_create_point), -1); rb_define_module_function(mGeos, "create_line_string", VALUEFUNC(_wrap_create_line_string), -1); rb_define_module_function(mGeos, "create_linear_ring", VALUEFUNC(_wrap_create_linear_ring), -1); rb_define_module_function(mGeos, "create_polygon", VALUEFUNC(_wrap_create_polygon), -1); SwigClassPrepared.klass = rb_define_class_under(mGeos, "Prepared", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosPreparedGeometry, (void *) &SwigClassPrepared); rb_define_alloc_func(SwigClassPrepared.klass, _wrap_Prepared_allocate); rb_define_method(SwigClassPrepared.klass, "initialize", VALUEFUNC(_wrap_new_Prepared), -1); rb_define_method(SwigClassPrepared.klass, "contains?", VALUEFUNC(_wrap_Prepared_containsq___), -1); rb_define_method(SwigClassPrepared.klass, "contains_properly?", VALUEFUNC(_wrap_Prepared_contains_properlyq___), -1); rb_define_method(SwigClassPrepared.klass, "covers?", VALUEFUNC(_wrap_Prepared_coversq___), -1); rb_define_method(SwigClassPrepared.klass, "intersects?", VALUEFUNC(_wrap_Prepared_intersectsq___), -1); SwigClassPrepared.mark = 0; SwigClassPrepared.destroy = (void (*)(void *)) free_GeosPreparedGeometry; SwigClassPrepared.trackObjects = 0; SwigClassSTRtree.klass = rb_define_class_under(mGeos, "STRtree", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosSTRtree, (void *) &SwigClassSTRtree); rb_define_alloc_func(SwigClassSTRtree.klass, _wrap_STRtree_allocate); rb_define_method(SwigClassSTRtree.klass, "initialize", VALUEFUNC(_wrap_new_STRtree), -1); rb_define_method(SwigClassSTRtree.klass, "insert", VALUEFUNC(_wrap_STRtree_insert), -1); rb_define_method(SwigClassSTRtree.klass, "remove", VALUEFUNC(_wrap_STRtree_remove), -1); rb_define_method(SwigClassSTRtree.klass, "query", VALUEFUNC(_wrap_STRtree_query), -1); rb_define_method(SwigClassSTRtree.klass, "each", VALUEFUNC(_wrap_STRtree_each), -1); SwigClassSTRtree.mark = (void (*)(void *)) mark_GeosSTRtree; SwigClassSTRtree.destroy = (void (*)(void *)) free_GeosSTRtree; SwigClassSTRtree.trackObjects = 0; SwigClassWktReader.klass = rb_define_class_under(mGeos, "WktReader", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosWktReader, (void *) &SwigClassWktReader); rb_define_alloc_func(SwigClassWktReader.klass, _wrap_WktReader_allocate); rb_define_method(SwigClassWktReader.klass, "initialize", VALUEFUNC(_wrap_new_WktReader), -1); rb_define_method(SwigClassWktReader.klass, "read", VALUEFUNC(_wrap_WktReader_read), -1); SwigClassWktReader.mark = 0; SwigClassWktReader.destroy = (void (*)(void *)) free_GeosWktReader; SwigClassWktReader.trackObjects = 0; SwigClassWktWriter.klass = rb_define_class_under(mGeos, "WktWriter", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosWktWriter, (void *) &SwigClassWktWriter); rb_define_alloc_func(SwigClassWktWriter.klass, _wrap_WktWriter_allocate); rb_define_method(SwigClassWktWriter.klass, "initialize", VALUEFUNC(_wrap_new_WktWriter), -1); rb_define_method(SwigClassWktWriter.klass, "write", VALUEFUNC(_wrap_WktWriter_write), -1); SwigClassWktWriter.mark = 0; SwigClassWktWriter.destroy = (void (*)(void *)) free_GeosWktWriter; SwigClassWktWriter.trackObjects = 0; SwigClassWkbReader.klass = rb_define_class_under(mGeos, "WkbReader", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosWkbReader, (void *) &SwigClassWkbReader); rb_define_alloc_func(SwigClassWkbReader.klass, _wrap_WkbReader_allocate); rb_define_method(SwigClassWkbReader.klass, "initialize", VALUEFUNC(_wrap_new_WkbReader), -1); rb_define_method(SwigClassWkbReader.klass, "read", VALUEFUNC(_wrap_WkbReader_read), -1); rb_define_method(SwigClassWkbReader.klass, "read_hex", VALUEFUNC(_wrap_WkbReader_read_hex), -1); SwigClassWkbReader.mark = 0; SwigClassWkbReader.destroy = (void (*)(void *)) free_GeosWkbReader; SwigClassWkbReader.trackObjects = 0; SwigClassWkbWriter.klass = rb_define_class_under(mGeos, "WkbWriter", rb_cObject); SWIG_TypeClientData(SWIGTYPE_p_GeosWkbWriter, (void *) &SwigClassWkbWriter); rb_define_alloc_func(SwigClassWkbWriter.klass, _wrap_WkbWriter_allocate); rb_define_method(SwigClassWkbWriter.klass, "initialize", VALUEFUNC(_wrap_new_WkbWriter), -1); rb_define_method(SwigClassWkbWriter.klass, "output_dimensions", VALUEFUNC(_wrap_WkbWriter_output_dimensions), -1); rb_define_method(SwigClassWkbWriter.klass, "output_dimensions=", VALUEFUNC(_wrap_WkbWriter_output_dimensionse___), -1); rb_define_method(SwigClassWkbWriter.klass, "byte_order", VALUEFUNC(_wrap_WkbWriter_byte_order), -1); rb_define_method(SwigClassWkbWriter.klass, "byte_order=", VALUEFUNC(_wrap_WkbWriter_byte_ordere___), -1); rb_define_method(SwigClassWkbWriter.klass, "include_srid", VALUEFUNC(_wrap_WkbWriter_include_srid), -1); rb_define_method(SwigClassWkbWriter.klass, "include_srid=", VALUEFUNC(_wrap_WkbWriter_include_sride___), -1); rb_define_method(SwigClassWkbWriter.klass, "write", VALUEFUNC(_wrap_WkbWriter_write), -1); rb_define_method(SwigClassWkbWriter.klass, "write_hex", VALUEFUNC(_wrap_WkbWriter_write_hex), -1); SwigClassWkbWriter.mark = 0; SwigClassWkbWriter.destroy = (void (*)(void *)) free_GeosWkbWriter; SwigClassWkbWriter.trackObjects = 0; } geos-3.4.2/swig/ruby/ruby.i0000644000175000017500000001241412206417150015362 0ustar frankiefrankie/* ========================================================================= * Copyright 2005-2007 Charlie Savage, cfis@interserv.com * * Interface for a SWIG generated geos module. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * ========================================================================= */ %rename("dimensions") GeosCoordinateSequence::getDimensions; %rename("srid") GeosGeometry::getSRID; %rename("srid=") GeosGeometry::setSRID; %rename("envelope") GeosGeometry::getEnvelope; %rename("read_hex") GeosWkbReader::readHEX; %rename("write_hex") GeosWkbWriter::writeHEX; %rename("output_dimensions") GeosWkbWriter::getOutputDimension; %rename("output_dimensions=") GeosWkbWriter::setOutputDimension; %rename("byte_order") GeosWkbWriter::getByteOrder; %rename("byte_order=") GeosWkbWriter::setByteOrder; %rename("include_srid") GeosWkbWriter::getIncludeSRID; %rename("include_srid=") GeosWkbWriter::setIncludeSRID; %rename("__len__") GeosCoordinateSequence::getSize; %rename("coord_seq") GeosPoint::getCoordSeq; %rename("coord_seq") GeosLineString::getCoordSeq; %rename("coord_seq") GeosLinearRing::getCoordSeq; %rename("exterior_ring") GeosPolygon::getExteriorRing; %rename("num_interior_rings") GeosPolygon::getNumInteriorRings; %rename("interior_ring_n") GeosPolygon::getInteriorRingN; // Use predicates to make the ruby code nicer - so disjoint? %predicate GeosGeometry::disjoint; %predicate GeosGeometry::touches; %predicate GeosGeometry::intersects; %predicate GeosGeometry::crosses; %predicate GeosGeometry::within; %predicate GeosGeometry::contains; %predicate GeosGeometry::overlaps; // Use ruby naming conventions for equals %rename("eql?") GeosGeometry::equals; %alias GeosGeometry::equals "=="; %rename("eql_exact?") GeosGeometry::equalsExact; %rename("dimensions") GeosGeometry::getDimensions; %rename("num_geometries") GeosGeometry::getNumGeometries; %rename("centroid") GeosGeometry::getCentroid; %alias GeosGeometry::getCentroid "center" %rename("empty?") GeosGeometry::isEmpty; %rename("valid?") GeosGeometry::isValid; %rename("simple?") GeosGeometry::isSimple; %rename("ring?") GeosGeometry::isRing; %rename("has_z?") GeosGeometry::hasZ; /* Convert a Ruby array of GeosLinearRings to a C array. */ %typemap(in,numinputs=1) (GeosLinearRing **holes, size_t nholes) { if (NIL_P($input)) { $1 = NULL; $2 = 0; } else { /* Make sure the input can be treated as an array. */ Check_Type($input, T_ARRAY); /* Get the length */ $2 = RARRAY_LEN($input); /* Allocate space for the C array. */ $1 = (GeosLinearRing**) malloc($2*sizeof(GeosLinearRing*)); for(size_t i = 0; i<$2; i++) { /* Get the Ruby Object */ VALUE item = rb_ary_entry($input,i); /* Get the underlying pointer and give up ownership of it. */ GeosLinearRing *ring = NULL; int convertResult = SWIG_ConvertPtr(item, (void**)&ring, $descriptor(GeosLinearRing*), SWIG_POINTER_DISOWN); if (!SWIG_IsOK(convertResult)) { SWIG_exception_fail(SWIG_ArgError(convertResult), "in method '" "createPolygon" "', argument " "1"" of type '" "GeosLinearRing *""'"); } /* Put the pointer in the array */ $1[i] = ring; } } } %typemap(freearg) (GeosLinearRing **holes, size_t nholes) { if ($1) { free((void*) $1); } } // GeosPreparedGeometry // Use predicates to make the ruby code nicer - so disjoint? %rename("contains_properly?") GeosPreparedGeometry::containsProperly; %predicate GeosPreparedGeometry::contains; %predicate GeosPreparedGeometry::intersects; %predicate GeosPreparedGeometry::covers; // GeosSTRtree %rename("each") GeosSTRtree::iterate; %typemap(in) GeosIndexItem { $1 = (GeosIndexItem) $input; } /* accumulator will be blissfully unused because * Ruby supports closures, more or less */ %typemap(in,numinputs=0) (GeosIndexItem accumulator) { $1 = (GeosIndexItem) Qnil; } /* typecheck GeosIndexItem and make sure it's really a VALUE */ %typemap(typecheck) GeosIndexItem { $1 = (TYPE($input) & T_MASK) ? 1 : 0; } /* always call the provided block as the query callback */ %typemap(in,numinputs=0) GeosQueryCallback { $1 = GeosSTRtree_query_callback; } %typemap(typecheck) GeosQueryCallback { /* SWIG throws a warning if we don't do this */ $1 = 1; } %{ /* this callback yields the data item to the block */ static void GeosSTRtree_query_callback (void *data, void *nothing) { if (rb_block_given_p()) { rb_yield((VALUE) data); } } %} /* assuming that GeosIndexItems are all VALUEs (since this gets tested * on typemap(in)), mark them during the mark phase of GC to hang on to them */ %{ static void GeosSTRtree_mark_item (void *data, void *nothing) { if ((VALUE) data != Qnil) { rb_gc_mark((VALUE)data); } } static void mark_GeosSTRtree(void *self) { GEOSSTRtree *tree = (GEOSSTRtree *) self; GEOSSTRtree_iterate(tree, GeosSTRtree_mark_item, NULL); } %} %markfunc GeosSTRtree "mark_GeosSTRtree"; geos-3.4.2/swig/ruby/test/0000755000175000017500000000000012206417241015205 5ustar frankiefrankiegeos-3.4.2/swig/ruby/test/Makefile.am0000644000175000017500000000070012206417150017235 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #geos_tests.rb runs the full Ruby geos test suite # RUBY_TESTS = \ example.rb \ geos_tests.rb \ test_buffer.rb \ test_combinations.rb \ test_coordinate_sequence.rb \ test_envelope.rb \ test_geometry.rb \ test_helper.rb \ test_io.rb \ test_operations.rb \ test_relations.rb \ test_srid.rb \ test_version.rb EXTRA_DIST = $(RUBY_TESTS) test: $(RUBY) geos_tests.rb geos-3.4.2/swig/ruby/test/Makefile.in0000644000175000017500000002727212206417165017271 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = swig/ruby/test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #geos_tests.rb runs the full Ruby geos test suite # RUBY_TESTS = \ example.rb \ geos_tests.rb \ test_buffer.rb \ test_combinations.rb \ test_coordinate_sequence.rb \ test_envelope.rb \ test_geometry.rb \ test_helper.rb \ test_io.rb \ test_operations.rb \ test_relations.rb \ test_srid.rb \ test_version.rb EXTRA_DIST = $(RUBY_TESTS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu swig/ruby/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu swig/ruby/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am test: $(RUBY) geos_tests.rb # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/swig/ruby/test/example.rb0000644000175000017500000002574112206417150017175 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' require 'stringio' class TestGeos < Test::Unit::TestCase def setup @geom_factory = Geos::GeometryFactory.new() end def create_coord(x, y) Geos::Coordinate.new(x, y) end def test_create_coord coord = create_coord(5,6) assert_equal(5, coord.x) assert_equal(6, coord.y) end def create_point(x, y) coord = create_coord(x, y) @geom_factory.create_point(coord) end def test_create_point point = create_point(5,6) assert_equal(5, point.x) assert_equal(6, point.y) end def create_ushaped_linestring(xoffset, yoffset, side) # We will use a coordinate list to build the linestring cl = Geos::DefaultCoordinateSequence.new() cl.add(Geos::Coordinate.new(xoffset, yoffset)) cl.add(Geos::Coordinate.new(xoffset, yoffset+side)) cl.add(Geos::Coordinate.new(xoffset+side, yoffset+side)) cl.add(Geos::Coordinate.new(xoffset+side, yoffset)) # Now that we have a CoordinateSequence we can create the linestring. # The newly created LineString will take ownership of the CoordinateSequence. # @geom_factory.create_line_string!(cl) # This is what you do if you want the new LineString # to make a copy of your CoordinateSequence: @geom_factory.create_line_string(cl) end # This function will create a LinearRing geometry # representing a square with the given origin and side def create_square_linearring(xoffset, yoffset, side) # We will use a coordinate list to build the linearring cl = Geos::DefaultCoordinateSequence.new() cl.add(Geos::Coordinate.new(xoffset, yoffset)) cl.add(Geos::Coordinate.new(xoffset, yoffset+side)) cl.add(Geos::Coordinate.new(xoffset+side, yoffset+side)) cl.add(Geos::Coordinate.new(xoffset+side, yoffset)) cl.add(Geos::Coordinate.new(xoffset, yoffset)) # Create the line string The newly created LinearRing will # take ownership of the CoordinateSequence. #@geom_factory.create_linear_ring!(cl) # To make a copy of your CoordinateSequence @geom_factory.create_linear_ring(cl) end def create_square_polygon(xoffset, yoffset, side) # This function will create a Polygon # geometry rapresenting a square with the given origin # and side and with a central hole 1/3 sided. # We need a LinearRing for the polygon shell outer = create_square_linearring(xoffset,yoffset,side); # And another for the hole inner = create_square_linearring(xoffset+(side/3), yoffset+(side/3),(side/3)); # Specify hole as vector of Geometries holes = Geos::GeometryVector.new() # Add the newly created geometry to the vector of holes. holes.push(inner) # Finally we call the polygon constructor. Both the outer LinearRing # and the vector of holes will be referenced by the resulting # Polygon object. poly = @geom_factory.create_polygon(outer, holes) end def create_simple_collection(geoms) # To transfer ownership of the vector and its # elements you can do this #@geom_factory.create_geometry_collection!(geoms) # This function creates a GeometryCollection # containing copies of all Geometries in given vector. @geom_factory.create_geometry_collection(geoms) end def create_circle(centerX, centerY, radius) # Use a GeometricShapeFactory to render # a circle having the specified center and radius shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) shapefactory.set_centre(Geos::Coordinate.new(centerX, centerY)) shapefactory.set_size(radius); # same as: # shapefactory.set_height(radius) # shapefactory.set_width(radius) shapefactory.create_circle() end def create_ellipse(centerX, centerY, width, height) # Use a GeometricShapeFactory to render # a circle having the specified center and radius shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) shapefactory.set_centre(Geos::Coordinate.new(centerX, centerY)) shapefactory.set_height(width) shapefactory.set_width(height) shapefactory.create_circle() end def create_rectangle(llX, llY, width, height) # This function uses GeometricShapeFactory to render # a rectangle having lower-left corner at given coordinates # and given sizes. shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) shapefactory.set_base(Geos::Coordinate.new(llX, llY)) shapefactory.set_height(height) shapefactory.set_width(width) # we don't need more then 4 points for a rectangle... shapefactory.set_num_points(4) # can use setSize for a square shapefactory.create_rectangle() end def create_arc(llX, llY, width, height, startang, endang) # This function uses GeometricShapeFactory to render # an arc having lower-left corner at given coordinates, # given sizes and given angles. shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) shapefactory.set_base(Geos::Coordinate.new(llX, llY)) shapefactory.set_height(height) shapefactory.set_width(width) # the default (100 pts) shapefactory.set_num_points(100) shapefactory.create_arc(startang, endang) end def create_geoms geoms = Geos::GeometryVector.new() # Define a precision model using 0,0 as the reference origin # and 2.0 as coordinates scale. pm = Geos::PrecisionModel.new(2.0, 0, 0) # Initialize global factory with defined PrecisionModel # and a SRID of -1 (undefined). global_factory = Geos::GeometryFactory.new(pm, -1) geoms.push(create_point(150, 350)) geoms.push(create_ushaped_linestring(60,60,100)) geoms.push(create_square_linearring(0,0,100)) geoms.push(create_square_polygon(0,200,300)) # geoms.push(create_simple_collection(geoms)) geoms.push(create_circle(0, 0, 10)) geoms.push(create_ellipse(0, 0, 8, 12)) ## A square geoms.push(create_rectangle(-5, -5, 10, 10)) ## A rectangle geoms.push(create_rectangle(-5, -5, 10, 20)) ## The upper-right quarter of a vertical ellipse geoms.push(create_arc(0, 0, 10, 20, 0, Math::PI/2)) return geoms end def test_wkb() # This function tests writing and reading geometries to # the well-known binary format geoms = create_geoms() wkb_writer = Geos::WKBWriter.new() wkb_reader = Geos::WKBReader.new(@geom_factory) STDOUT << "\n" << "-------- TESTING WKB OUTPUT ----------" << "\n" geoms.each do |geom_in| value = wkb_writer.write(geom_in) geom_out = wkb_reader.read(value); # Geometries should be equal assert(geom_out.equals(geom_in)) # Check precision model geom_in.normalize() geom_out.normalize() # This seems to always fail #assert_equal(0, geom_in.compare_to(geom_out)) # Print out a hex value STDOUT << Geos::WKBReader.print_hex(value) << "\n" end STDOUT << "\n" end def print_wkt(geoms, message) ## This function will print given geometries in WKT ## format to stdout. wkt_writer = Geos::WKTWriter.new() STDOUT << "\n" << "-------- #{message} ----------" << "\n" geoms.each do |geom_in| puts wkt_writer.write(geom_in) end STDOUT << "\n" end def test_wkt() ## This function will print given geometries in WKT ## format to stdout. geoms = create_geoms() print_wkt(geoms, "BASE GEOMS") end def test_operation(message, &block) # First find the centroid of each base geometry new_geoms = Geos::GeometryVector.new() geoms = create_geoms() geoms.each do |geom| new_geoms.push(yield(geom)) end # Print results print_wkt(new_geoms, message) end def test_centroid() test_operation("CENTROIDS") do |geom| geom.get_centroid() end end def test_buffer() test_operation("BUFFERS") do |geom| geom.buffer(10) end end def test_convex_hull() test_operation("CONVEX HULL") do |geom| geom.convex_hull() end end def test_relational_operation(message, &block) STDOUT << "\n" << "-------- #{message} ----------" << "\n" geoms = create_geoms() geoms.each do |geom1| geoms.each do |geom2| result = yield(geom1, geom2) if result STDOUT << " 1\t" else STDOUT << " 0\t" end end end STDOUT << "\n" end def test_disjoint() test_relational_operation("DISJOINT") do |geom1, geom2| geom1.disjoint(geom2) end end def test_touches() test_relational_operation("TOUCHES") do |geom1, geom2| geom1.touches(geom2) end end def test_intersects() test_relational_operation("INTERSECTS") do |geom1, geom2| geom1.intersects(geom2) end end def test_crosses() test_relational_operation("CROSSES") do |geom1, geom2| geom1.touches(geom2) end end def test_within() test_relational_operation("WITHIN") do |geom1, geom2| geom1.touches(geom2) end end def test_contains() test_relational_operation("CONTAINS") do |geom1, geom2| geom1.contains(geom2) end end def test_overlaps() test_relational_operation("OVERLAPS") do |geom1, geom2| geom1.overlaps(geom2) end end def test_relate() test_relational_operation("RELATE") do |geom1, geom2| geom1.relate(geom2, "212101212") end end def test_equals() test_relational_operation("EQUALS") do |geom1, geom2| geom1.equals(geom2) end end def test_equals_exact() test_relational_operation("EQUALS EXACT") do |geom1, geom2| geom1.equals_exact(geom2) end end def test_is_within_distance() test_relational_operation("IS WITHIN DISTANCE") do |geom1, geom2| geom1.is_within_distance(geom2, 2) end end def test_combination(message, &block) puts "#{message} GGGGGGGGGGGGGG" STDOUT.flush() geoms = create_geoms() geoms.each do |geom1| puts "1: #{geom1}" STDOUT.flush() geoms.each do |geom2| puts "2: #{geom2}" STDOUT.flush() result = yield(geom1, geom2) puts "result: #{result}" STDOUT.flush() end end print_wkt(geoms, message) end def test_union() test_combination("UNION") do |geom1, geom2| geom1.union(geom2) end end def test_intersection() test_combination("INTERSECTION") do |geom1, geom2| geom1.intersection(geom2) end end def test_difference() test_combination("DIFFERENCE") do |geom1, geom2| geom1.difference(geom2) end end def test_symdifference() test_combination("SYMDIFFERENCE") do |geom1, geom2| geom1.sym_difference(geom2) end end def test_line_merge() geoms = create_geoms() merger = Geos::LineMerger.new() merger.add(geoms) new_geoms = merger.get_merged_line_strings() print_wkt(new_geoms, "LINE MERGE") end def test_polygonize() geoms = create_geoms() polygonizer = Geos::Polygonizer.new() polygonizer.add(geoms) new_geoms = polygonizer.get_polygons() print_wkt(new_geoms, "POLYGONIZE") end endgeos-3.4.2/swig/ruby/test/geos_tests.rb0000644000175000017500000000051612206417150017712 0ustar frankiefrankie# Runs the test cases that have been developed for GEOS require 'test_buffer' require 'test_combinations' require 'test_coordinate_sequence' # require 'test_envelope' - No longer exposed in c api. require 'test_geometry' require 'test_io' require 'test_operations' require 'test_relations' require 'test_srid' require 'test_version' geos-3.4.2/swig/ruby/test/test_buffer.rb0000644000175000017500000000205412206417150020042 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' require 'test_helper' class TestBuffer < Test::Unit::TestCase def setup @test_helper = GeosTestHelper.new() end def test_xml_cases cases = @test_helper.load_tests("buffer.xml") cases.each do |test_case| geom = test_case.geom1 tolerance = test_case.arg3.to_f expected = @test_helper.parse_geometry(test_case.expected) expected.normalize result = geom.buffer(tolerance, 8) result.normalize writer = Geos::WktWriter.new geom_wkt = writer.write(geom) expected_wkt = writer.write(expected) result_wkt = writer.write(result) assert(expected.eql_exact?(result, 0.00000000001), "Buffer:\n" + " Case: #{test_case.case_id}\n" + " Test: #{test_case.test_id}\n" + " Geom: #{geom_wkt}\n" + " Tolerance: #{tolerance}\n" + " Expected: #{expected_wkt}.\n" + " Actual: #{result_wkt}") end end end geos-3.4.2/swig/ruby/test/test_combinations.rb0000644000175000017500000000235112206417150021256 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' require 'test_helper' class TestGeosCombinations < Test::Unit::TestCase def setup @test_helper = GeosTestHelper.new() end def run_combination(message, &block) STDOUT << "\n" << "-------- #{message} COMBINATION ------" << "\n" STDOUT.flush() geoms = @test_helper.create_geoms() new_geoms = Array.new() geoms.each do |geom1| geoms.each do |geom2| begin # Get the actual result from the provided block result = yield(geom1, geom2) new_geoms.push(result) # puts result # Geometry Collection is not a valid argument rescue RuntimeError => error # This is ok end end end end def test_union() run_combination("UNION") do |geom1, geom2| geom1.union(geom2) end end def test_intersection() run_combination("INTERSECTION") do |geom1, geom2| geom1.intersection(geom2) end end def test_difference() run_combination("DIFFERENCE") do |geom1, geom2| geom1.difference(geom2) end end def test_symdifference() run_combination("SYMDIFFERENCE") do |geom1, geom2| geom1.sym_difference(geom2) end end endgeos-3.4.2/swig/ruby/test/test_coordinate_sequence.rb0000644000175000017500000000354512206417150022616 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' class TestWkbReader < Test::Unit::TestCase def test_create cs = Geos::CoordinateSequence.new(5,2) assert_instance_of(Geos::CoordinateSequence, cs) end def test_size cs = Geos::CoordinateSequence.new(7,2) assert_equal(7, cs.length) end def test_getter_setter cs = Geos::CoordinateSequence.new(2,3) cs.set_x(0, 3) cs.set_y(0, 4) cs.set_z(0, 5) cs.set_x(1, 6) cs.set_y(1, 7) cs.set_z(1, 8) assert_equal(3, cs.get_x(0)) assert_equal(4, cs.get_y(0)) assert_equal(5, cs.get_z(0)) assert_equal(6, cs.get_x(1)) assert_equal(7, cs.get_y(1)) assert_equal(8, cs.get_z(1)) end def test_index_out_of_bounds cs = Geos::CoordinateSequence.new(2,3) assert_raise(RuntimeError) do cs.set_x(2, 6) end assert_raise(RuntimeError) do cs.set_y(2, 6) end assert_raise(RuntimeError) do cs.set_z(2, 6) end end def test_ordinate cs = Geos::CoordinateSequence.new(1,3) cs.set_ordinate(0, 0, 2) cs.set_ordinate(0, 1, 3) cs.set_ordinate(0, 2, 4) assert_equal(2, cs.get_ordinate(0, 0)) assert_equal(3, cs.get_ordinate(0, 1)) assert_equal(4, cs.get_ordinate(0, 2)) end def test_clone cs1 = Geos::CoordinateSequence.new(1,3) cs1.set_x(0, 2) cs1.set_y(0, 3) cs1.set_y(0, 4) cs2 = cs1.clone assert(!cs1.equal?(cs2)) assert(2, cs2.get_x(0)) assert(3, cs2.get_y(0)) assert(4, cs2.get_z(0)) cs2.set_x(0, 5) cs2.set_y(0, 6) cs2.set_y(0, 7) assert(2, cs1.get_x(0)) assert(3, cs1.get_y(0)) assert(4, cs1.get_z(0)) assert(5, cs2.get_x(0)) assert(6, cs2.get_y(0)) assert(7, cs2.get_z(0)) end def test_dimensions cs = Geos::CoordinateSequence.new(1,3) assert_equal(3, cs.dimensions) end endgeos-3.4.2/swig/ruby/test/test_envelope.rb0000644000175000017500000000202412206417150020403 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' # NOTE - These tests are no longer valid with the C-API class TestGeosEnvelope < Test::Unit::TestCase def check(envelope) assert_equal(5, envelope.get_min_x()) assert_equal(6, envelope.get_min_y()) assert_equal(10, envelope.get_max_x()) assert_equal(11, envelope.get_max_y()) end def test_from_coords min_coord = Geos::Coordinate.new(5,6) max_coord = Geos::Coordinate.new(10, 11) envelope = Geos::Envelope.new(min_coord, max_coord) check(envelope) end def test_from_values envelope = Geos::Envelope.new(5, 10, 6, 11) check(envelope) end def test_serialize out_envelope = Geos::Envelope.new(5, 10, 6, 11) str = out_envelope.to_string() in_envelope = Geos::Envelope.new(str) check(in_envelope) assert(out_envelope.equals(in_envelope)) end def test_to_s envelope = Geos::Envelope.new(5, 10, 6, 11) string = envelope.to_s assert_equal("", string) end endgeos-3.4.2/swig/ruby/test/test_geometry.rb0000644000175000017500000001502712206417150020430 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' class TestGeometry < Test::Unit::TestCase def test_create_point cs = Geos::CoordinateSequence.new(1,3) cs.set_x(0, 7) cs.set_y(0, 8) cs.set_z(0, 9) geom = Geos::create_point(cs) assert_instance_of(Geos::Point, geom) assert_equal('Point', geom.geom_type) assert_equal(Geos::GEOS_POINT, geom.type_id) assert(!geom.empty?) assert(geom.valid?) assert(geom.simple?) assert(!geom.ring?) assert(geom.has_z?) assert_equal(1, geom.num_geometries) coords = geom.coord_seq assert_instance_of(Geos::CoordinateSequence, coords) assert_equal(7, coords.get_x(0)) assert_equal(8, coords.get_y(0)) assert_equal(9, coords.get_z(0)) assert_in_delta(0, geom.area, 0.01) assert_in_delta(0, geom.length, 0.01) end def test_create_point_illegal cs = Geos::CoordinateSequence.new(0, 0) assert_raise(RuntimeError) do geom = Geos::create_point(cs) end end def test_create_line_string cs = Geos::CoordinateSequence.new(2,3) cs.set_x(0, 7) cs.set_y(0, 8) cs.set_z(0, 9) cs.set_x(1, 3) cs.set_y(1, 3) cs.set_z(1, 3) geom = Geos::create_line_string(cs) assert_instance_of(Geos::LineString, geom) assert_equal('LineString', geom.geom_type) assert_equal(Geos::GEOS_LINESTRING, geom.type_id) assert(!geom.empty?) assert(geom.valid?) assert(geom.simple?) assert(!geom.ring?) assert(geom.has_z?) assert_equal(1, geom.num_geometries) coords = geom.coord_seq assert_instance_of(Geos::CoordinateSequence, coords) assert_equal(7, coords.get_x(0)) assert_equal(8, coords.get_y(0)) assert_equal(9, coords.get_z(0)) assert_equal(3, coords.get_x(1)) assert_equal(3, coords.get_y(1)) assert_equal(3, coords.get_z(1)) assert_in_delta(0, geom.area, 0.01) assert_in_delta(6.40312423743285, geom.length, 0.01) end def test_create_line_string_illegal cs = Geos::CoordinateSequence.new(1,0) assert_raise(RuntimeError) do geom = Geos::create_line_string(cs) end end def test_create_linear_ring cs = Geos::CoordinateSequence.new(4,3) cs.set_x(0, 7) cs.set_y(0, 8) cs.set_z(0, 9) cs.set_x(1, 3) cs.set_y(1, 3) cs.set_z(1, 3) cs.set_x(2, 11) cs.set_y(2, 15.2) cs.set_z(2, 2) cs.set_x(3, 7) cs.set_y(3, 8) cs.set_z(3, 9) geom = Geos::create_linear_ring(cs) assert_instance_of(Geos::LinearRing, geom) assert_equal('LinearRing', geom.geom_type) assert_equal(Geos::GEOS_LINEARRING, geom.type_id) assert(!geom.empty?) assert(geom.valid?) assert(geom.simple?) assert(geom.ring?) assert(geom.has_z?) assert_equal(1, geom.num_geometries) coords = geom.coord_seq assert_instance_of(Geos::CoordinateSequence, coords) assert_equal(7, coords.get_x(0)) assert_equal(8, coords.get_y(0)) assert_equal(9, coords.get_z(0)) assert_equal(3, coords.get_x(1)) assert_equal(3, coords.get_y(1)) assert_equal(3, coords.get_z(1)) assert_equal(11, coords.get_x(2)) assert_equal(15.2, coords.get_y(2)) assert_equal(2, coords.get_z(2)) assert_equal(7, coords.get_x(3)) assert_equal(8, coords.get_y(3)) assert_equal(9, coords.get_z(3)) assert_in_delta(0, geom.area, 0.01) assert_in_delta(29.228665330092, geom.length, 0.01) end def test_create_linear_ring_illegal cs = Geos::CoordinateSequence.new(1,0) assert_raise(RuntimeError) do geom = Geos::create_linear_ring(cs) end end def test_create_polygon # Polygon shell cs = Geos::CoordinateSequence.new(5,2) cs.set_x(0, 0) cs.set_y(0, 0) cs.set_x(1, 0) cs.set_y(1, 10) cs.set_x(2, 10) cs.set_y(2, 10) cs.set_x(3, 10) cs.set_y(3, 0) cs.set_x(4, 0) cs.set_y(4, 0) shell = Geos::create_linear_ring(cs) geom = Geos::create_polygon(shell) assert_instance_of(Geos::Polygon, geom) assert_equal('Polygon', geom.geom_type) assert_equal(Geos::GEOS_POLYGON, geom.type_id) assert(!geom.empty?) assert(geom.valid?) assert(geom.simple?) assert(!geom.ring?) assert(geom.has_z?) assert_equal(1, geom.num_geometries) exterior_ring = geom.exterior_ring() assert(shell.eql?(exterior_ring)) assert_equal(0, geom.num_interior_rings) assert_raise(RuntimeError) do assert_equal(0, geom.interior_ring_n(1)) end assert_in_delta(100, geom.area, 0.01) assert_in_delta(40, geom.length, 0.01) end def test_create_polygon_with_holes # Polygon shell cs = Geos::CoordinateSequence.new(5,2) cs.set_x(0, 0) cs.set_y(0, 0) cs.set_x(1, 0) cs.set_y(1, 10) cs.set_x(2, 10) cs.set_y(2, 10) cs.set_x(3, 10) cs.set_y(3, 0) cs.set_x(4, 0) cs.set_y(4, 0) shell = Geos::create_linear_ring(cs) # Hole 1 cs = Geos::CoordinateSequence.new(5,2) cs.set_x(0, 2) cs.set_y(0, 2) cs.set_x(1, 2) cs.set_y(1, 4) cs.set_x(2, 4) cs.set_y(2, 4) cs.set_x(3, 4) cs.set_y(3, 2) cs.set_x(4, 2) cs.set_y(4, 2) hole1 = Geos::create_linear_ring(cs) # Hole 2 cs = Geos::CoordinateSequence.new(5,2) cs.set_x(0, 6) cs.set_y(0, 6) cs.set_x(1, 6) cs.set_y(1, 8) cs.set_x(2, 8) cs.set_y(2, 8) cs.set_x(3, 8) cs.set_y(3, 6) cs.set_x(4, 6) cs.set_y(4, 6) hole2 = Geos::create_linear_ring(cs) geom = Geos::create_polygon(shell, [hole1, hole2]) assert_instance_of(Geos::Polygon, geom) assert_equal('Polygon', geom.geom_type) assert_equal(Geos::GEOS_POLYGON, geom.type_id) assert(!geom.empty?) assert(geom.valid?) assert(geom.simple?) assert(!geom.ring?) assert(geom.has_z?) assert_equal(1, geom.num_geometries) exterior_ring = geom.exterior_ring() assert(shell.eql?(exterior_ring)) assert_equal(2, geom.num_interior_rings) assert(hole1.eql?(geom.interior_ring_n(0))) assert(hole2.eql?(geom.interior_ring_n(1))) assert_in_delta(92, geom.area, 0.01) assert_in_delta(56, geom.length, 0.01) end def test_distance cs = Geos::CoordinateSequence.new(1,2) cs.set_x(0, 0) cs.set_y(0, 0) geom1 = Geos::create_point(cs) cs = Geos::CoordinateSequence.new(1,2) cs.set_x(0, 3) cs.set_y(0, 4) geom2 = Geos::create_point(cs) assert_equal(5, geom1.distance(geom2)) end end geos-3.4.2/swig/ruby/test/test_helper.rb0000644000175000017500000002660012206417150020053 0ustar frankiefrankie#!/usr/bin/env ruby require 'geos' require "rexml/document" XmlTest = Struct.new(:case_id, :test_id, :operation, :expected, :geom1, :geom2, :arg1, :arg2, :arg3) class GeosTestHelper def create_point(x, y) cs = Geos::CoordinateSequence.new(1,2) cs.set_x(0, x) cs.set_y(0, y) Geos.create_point(cs) end def create_ushaped_linestring(xoffset, yoffset, side) cs = Geos::CoordinateSequence.new(4,2) cs.set_x(0, xoffset) cs.set_y(0, yoffset) cs.set_x(1, xoffset) cs.set_y(1, yoffset + side) cs.set_x(2, xoffset + side) cs.set_y(2, yoffset + side) cs.set_x(3, xoffset + side) cs.set_y(3, yoffset) Geos.create_line_string(cs) end # This function will create a LinearRing geometry # representing a square with the given origin and side def create_square_linear_ring(xoffset, yoffset, side) cs = Geos::CoordinateSequence.new(5,2) cs.set_x(0, xoffset) cs.set_y(0, yoffset) cs.set_x(1, xoffset) cs.set_y(1, yoffset + side) cs.set_x(2, xoffset + side) cs.set_y(2, yoffset + side) cs.set_x(3, xoffset + side) cs.set_y(3, yoffset) cs.set_x(4, xoffset) cs.set_y(4, yoffset) Geos.create_linear_ring(cs) end # This function will create a Polygon # geometry representing a square with the given origin # and side and with a central hole 1/3 sided. def create_square_polygon(xoffset, yoffset, side) # We need a LinearRing for the polygon shell outer = create_square_linear_ring(xoffset,yoffset,side); # And another for the hole inner = create_square_linear_ring(xoffset+(side/3), yoffset+(side/3),(side/3)); Geos.create_polygon(outer, [inner]) end def create_simple_collection(geoms) # This function creates a GeometryCollection # containing copies of all Geometries in given vector. #@geom_factory.create_geometry_collection(geoms) wkt = "GEOMETRYCOLLECTION (POLYGON ((0.00 250.00, 0.00 550.00, 300.00 550.00, 300.00 250.00, 0.00 250.00), (100.00 350.00, 200.00 350.00, 200.00 450.00, 100.00 450.00, 100.00 350.00)), POLYGON ((0.00 200.00, 0.00 500.00, 300.00 500.00, 300.00 200.00, 0.00 200.00), (100.00 300.00, 200.00 300.00, 200.00 400.00, 100.00 400.00, 100.00 300.00)), LINEARRING (0.00 0.00, 0.00 100.00, 100.00 100.00, 100.00 0.00, 0.00 0.00), LINEARRING (0.00 0.00, 0.00 100.00, 100.00 100.00, 100.00 0.00, 0.00 0.00), LINESTRING (60.00 60.00, 60.00 160.00, 160.00 160.00, 160.00 60.00), POINT (150.00 350.00))" reader = Geos::WktReader.new reader.read(wkt) end def create_circle(centerX, centerY, radius) # Use a GeometricShapeFactory to render # a circle having the specified center and radius #shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) #shapefactory.set_centre(Geos::Coordinate.new(centerX, centerY)) #shapefactory.set_size(radius); # same as: # shapefactory.set_height(radius) # shapefactory.set_width(radius) #shapefactory.create_circle() wkt = "POLYGON ((-5.00 0.00, -4.99 0.31, -4.96 0.63, -4.91 0.94, -4.84 1.24, -4.76 1.55, -4.65 1.84, -4.52 2.13, -4.38 2.41, -4.22 2.68, -4.05 2.94, -3.85 3.19, -3.64 3.42, -3.42 3.64, -3.19 3.85, -2.94 4.05, -2.68 4.22, -2.41 4.38, -2.13 4.52, -1.84 4.65, -1.55 4.76, -1.24 4.84, -0.94 4.91, -0.63 4.96, -0.31 4.99, 0.00 5.00, 0.31 4.99, 0.63 4.96, 0.94 4.91, 1.24 4.84, 1.55 4.76, 1.84 4.65, 2.13 4.52, 2.41 4.38, 2.68 4.22, 2.94 4.05, 3.19 3.85, 3.42 3.64, 3.64 3.42, 3.85 3.19, 4.05 2.94, 4.22 2.68, 4.38 2.41, 4.52 2.13, 4.65 1.84, 4.76 1.55, 4.84 1.24, 4.91 0.94, 4.96 0.63, 4.99 0.31, 5.00 0.00, 4.99 -0.31, 4.96 -0.63, 4.91 -0.94, 4.84 -1.24, 4.76 -1.55, 4.65 -1.84, 4.52 -2.13, 4.38 -2.41, 4.22 -2.68, 4.05 -2.94, 3.85 -3.19, 3.64 -3.42, 3.42 -3.64, 3.19 -3.85, 2.94 -4.05, 2.68 -4.22, 2.41 -4.38, 2.13 -4.52, 1.84 -4.65, 1.55 -4.76, 1.24 -4.84, 0.94 -4.91, 0.63 -4.96, 0.31 -4.99, -0.00 -5.00, -0.31 -4.99, -0.63 -4.96, -0.94 -4.91, -1.24 -4.84, -1.55 -4.76, -1.84 -4.65, -2.13 -4.52, -2.41 -4.38, -2.68 -4.22, -2.94 -4.05, -3.19 -3.85, -3.42 -3.64, -3.64 -3.42, -3.85 -3.19, -4.05 -2.94, -4.22 -2.68, -4.38 -2.41, -4.52 -2.13, -4.65 -1.84, -4.76 -1.55, -4.84 -1.24, -4.91 -0.94, -4.96 -0.63, -4.99 -0.31, -5.00 0.00))" reader = Geos::WktReader.new reader.read(wkt) end def create_ellipse(centerX, centerY, width, height) # Use a GeometricShapeFactory to render # a circle having the specified center and radius #shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) #shapefactory.set_centre(Geos::Coordinate.new(centerX, centerY)) #shapefactory.set_height(width) #shapefactory.set_width(height) #shapefactory.create_circle() wkt = "POLYGON ((-4.00 0.00, -3.99 0.38, -3.97 0.75, -3.93 1.12, -3.87 1.49, -3.80 1.85, -3.72 2.21, -3.62 2.55, -3.51 2.89, -3.38 3.21, -3.24 3.53, -3.08 3.82, -2.92 4.11, -2.74 4.37, -2.55 4.62, -2.35 4.85, -2.14 5.07, -1.93 5.26, -1.70 5.43, -1.47 5.58, -1.24 5.71, -0.99 5.81, -0.75 5.89, -0.50 5.95, -0.25 5.99, 0.00 6.00, 0.25 5.99, 0.50 5.95, 0.75 5.89, 0.99 5.81, 1.24 5.71, 1.47 5.58, 1.70 5.43, 1.93 5.26, 2.14 5.07, 2.35 4.85, 2.55 4.62, 2.74 4.37, 2.92 4.11, 3.08 3.82, 3.24 3.53, 3.38 3.21, 3.51 2.89, 3.62 2.55, 3.72 2.21, 3.80 1.85, 3.87 1.49, 3.93 1.12, 3.97 0.75, 3.99 0.38, 4.00 0.00, 3.99 -0.38, 3.97 -0.75, 3.93 -1.12, 3.87 -1.49, 3.80 -1.85, 3.72 -2.21, 3.62 -2.55, 3.51 -2.89, 3.38 -3.21, 3.24 -3.53, 3.08 -3.82, 2.92 -4.11, 2.74 -4.37, 2.55 -4.62, 2.35 -4.85, 2.14 -5.07, 1.93 -5.26, 1.70 -5.43, 1.47 -5.58, 1.24 -5.71, 0.99 -5.81, 0.75 -5.89, 0.50 -5.95, 0.25 -5.99, -0.00 -6.00, -0.25 -5.99, -0.50 -5.95, -0.75 -5.89, -0.99 -5.81, -1.24 -5.71, -1.47 -5.58, -1.70 -5.43, -1.93 -5.26, -2.14 -5.07, -2.35 -4.85, -2.55 -4.62, -2.74 -4.37, -2.92 -4.11, -3.08 -3.82, -3.24 -3.53, -3.38 -3.21, -3.51 -2.89, -3.62 -2.55, -3.72 -2.21, -3.80 -1.85, -3.87 -1.49, -3.93 -1.12, -3.97 -0.75, -3.99 -0.38, -4.00 0.00))" reader = Geos::WktReader.new reader.read(wkt) end def create_rectangle(llX, llY, width, height) # This function uses GeometricShapeFactory to render # a rectangle having lower-left corner at given coordinates # and given sizes. #shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) #shapefactory.set_base(Geos::Coordinate.new(llX, llY)) #shapefactory.set_height(height) #shapefactory.set_width(width) # we don't need more then 4 points for a rectangle... #shapefactory.set_num_points(4) # can use setSize for a square #shapefactory.create_rectangle() wkt = "POLYGON ((#{llX} #{llY}, #{llX} #{llY + height}, #{llX+width} #{llY+height}, #{llX+width} #{llY}, #{llX} #{llY}))" reader = Geos::WktReader.new reader.read(wkt) end def create_arc(llX, llY, width, height, startang, endang) # This function uses GeometricShapeFactory to render # an arc having lower-left corner at given coordinates, # given sizes and given angles. #shapefactory = Geos::GeometricShapeFactory.new(@geom_factory) #shapefactory.set_base(Geos::Coordinate.new(llX, llY)) #shapefactory.set_height(height) #shapefactory.set_width(width) # the default (100 pts) #shapefactory.set_num_points(100) #shapefactory.create_arc(startang, endang) wkt = "LINESTRING (5.00 20.00, 5.00 20.00, 5.00 20.00, 5.50 20.00, 5.50 20.00, 5.50 20.00, 5.50 20.00, 5.50 20.00, 5.50 20.00, 6.00 20.00, 6.00 20.00, 6.00 20.00, 6.00 20.00, 6.00 20.00, 6.00 19.50, 6.00 19.50, 6.50 19.50, 6.50 19.50, 6.50 19.50, 6.50 19.50, 6.50 19.50, 6.50 19.50, 7.00 19.50, 7.00 19.50, 7.00 19.00, 7.00 19.00, 7.00 19.00, 7.00 19.00, 7.00 19.00, 7.50 19.00, 7.50 19.00, 7.50 19.00, 7.50 18.50, 7.50 18.50, 7.50 18.50, 7.50 18.50, 7.50 18.50, 8.00 18.50, 8.00 18.00, 8.00 18.00, 8.00 18.00, 8.00 18.00, 8.00 18.00, 8.00 17.50, 8.00 17.50, 8.50 17.50, 8.50 17.50, 8.50 17.50, 8.50 17.00, 8.50 17.00, 8.50 17.00, 8.50 17.00, 8.50 16.50, 9.00 16.50, 9.00 16.50, 9.00 16.50, 9.00 16.50, 9.00 16.00, 9.00 16.00, 9.00 16.00, 9.00 16.00, 9.00 15.50, 9.00 15.50, 9.00 15.50, 9.50 15.00, 9.50 15.00, 9.50 15.00, 9.50 15.00, 9.50 14.50, 9.50 14.50, 9.50 14.50, 9.50 14.50, 9.50 14.00, 9.50 14.00, 9.50 14.00, 9.50 13.50, 9.50 13.50, 9.50 13.50, 9.50 13.00, 10.00 13.00, 10.00 13.00, 10.00 13.00, 10.00 12.50, 10.00 12.50, 10.00 12.50, 10.00 12.00, 10.00 12.00, 10.00 12.00, 10.00 11.50, 10.00 11.50, 10.00 11.50, 10.00 11.50, 10.00 11.00, 10.00 11.00, 10.00 11.00, 10.00 10.50, 10.00 10.50, 10.00 10.50, 10.00 10.00, 10.00 10.00)" reader = Geos::WktReader.new reader.read(wkt) end def create_geoms geoms = Array.new geoms.push(create_point(150, 350)) geoms.push(create_square_linear_ring(0,0,100)) geoms.push(create_ushaped_linestring(60,60,100)) geoms.push(create_square_linear_ring(0,0,100)) geoms.push(create_square_polygon(0,200,300)) geoms.push(create_square_polygon(0,250,300)) geoms.push(create_simple_collection(geoms)) # These ones use a GeometricShapeFactory geoms.push(create_circle(0, 0, 10)) geoms.push(create_ellipse(0, 0, 8, 12)) # A square geoms.push(create_rectangle(-5, -5, 10, 10)) # A rectangle geoms.push(create_rectangle(-5, -5, 10, 20)) # The upper-right quarter of a vertical ellipse geoms.push(create_arc(0, 0, 10, 20, 0, Math::PI/2)) return geoms end def print_geoms(geoms) geoms.each do |geom| wkt = Geos.geom_to_wkt(geom) STDOUT << wkt << "\n" end end # ----- xml support --------- def load_tests(file_name) current_path = File.expand_path(__FILE__) xml_path = File.join(current_path, "..", "..", "..", "..", "tests", "xmltester") file_path = File.expand_path(File.join(xml_path, file_name)) file = File.new(file_path) result = nil begin doc = REXML::Document.new(file) result = load_cases(doc) ensure file.close end result end def parse_geometry(value) value.strip! if value.match(/\A[0-9A-F]/) reader = Geos::WkbReader.new reader.read_hex(value) else reader = Geos::WktReader.new reader.read(value) end end def load_cases(doc) case_id = 1 result = Array.new # get the run element run_element = doc.elements["run"] # Iterate over each case run_element.elements.each("case") do |case_element| test_id = 1 # Get geometry a a_element = case_element.elements["a"] geom1 = parse_geometry(a_element.text) if a_element # Get geometry b b_element = case_element.elements["b"] geom2 = parse_geometry(b_element.text) if b_element # Iterate over each test in this case case_element.elements.each("test") do |test_element| operation_element = test_element.elements["op"] # Get operation name and result operation = operation_element.attributes['name'].strip! expected = operation_element.text.strip! # Figure arguments arg1 = operation_element.attributes['arg1'] arg2 = operation_element.attributes['arg2'] arg3 = operation_element.attributes['arg3'] arg1.strip! if arg1 arg2.strip! if arg2 arg3.strip! if arg3 # Create test test = XmlTest.new(case_id, test_id, operation, expected, geom1, geom2, arg1, arg2, arg3) result.push(test) test_id += 1 end case_id += 1 end result end end geos-3.4.2/swig/ruby/test/test_io.rb0000644000175000017500000002372212206417150017205 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' class TestIo < Test::Unit::TestCase def check(wkt, ndr_hex_in, xdr_hex_in) wkt_reader = Geos::WktReader.new geom1 = wkt_reader.read(wkt) wkb_reader = Geos::WkbReader.new geom2 = wkb_reader.read_hex(ndr_hex_in) geom3 = wkb_reader.read_hex(xdr_hex_in) assert(geom1.eql?(geom2)) assert(geom1.eql?(geom3)) assert(geom2.eql?(geom3)) wkb_writer = Geos::WkbWriter.new wkb_writer.byte_order = Geos::GEOS_WKB_NDR ndr_hex_out = wkb_writer.write_hex(geom1) assert_equal(ndr_hex_in, ndr_hex_out) wkb_writer.byte_order = Geos::GEOS_WKB_XDR xdr_hex_out = wkb_writer.write_hex(geom1) assert_equal(xdr_hex_in, xdr_hex_out) geom1 end def test_output_dimensions writer = Geos::WkbWriter.new assert_equal(2, writer.output_dimensions) writer.output_dimensions = 3 assert_equal(3, writer.output_dimensions) end def test_byte_order writer = Geos::WkbWriter.new assert_equal(Geos::GEOS_WKB_NDR, writer.byte_order) writer.byte_order = Geos::GEOS_WKB_XDR assert_equal(Geos::GEOS_WKB_XDR, writer.byte_order) writer.byte_order = Geos::GEOS_WKB_NDR assert_equal(Geos::GEOS_WKB_NDR, writer.byte_order) end def test_point wkt = "POINT(0 0)" ndr = "010100000000000000000000000000000000000000" xdr = "000000000100000000000000000000000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::Point, geom) assert_equal('Point', geom.geom_type) assert_equal(Geos::GEOS_POINT, geom.type_id) end def test_line_string wkt = "LINESTRING(1 2, 3 4)" ndr = "010200000002000000000000000000F03F000000000000004000000000000008400000000000001040" xdr = "0000000002000000023FF0000000000000400000000000000040080000000000004010000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::LineString, geom) assert_equal('LineString', geom.geom_type) assert_equal(Geos::GEOS_LINESTRING, geom.type_id) end def test_polygon wkt = "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2))" ndr = "0103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040" xdr = "0000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::Polygon, geom) assert_equal('Polygon', geom.geom_type) assert_equal(Geos::GEOS_POLYGON, geom.type_id) end def test_multipoint wkt = "MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)" ndr = "010400000005000000010100000000000000000000000000000000000000010100000000000000000024400000000000000000010100000000000000000024400000000000002440010100000000000000000000000000000000002440010100000000000000000000000000000000000000" xdr = "000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::MultiPoint, geom) assert_equal('MultiPoint', geom.geom_type) assert_equal(Geos::GEOS_MULTIPOINT, geom.type_id) end def test_multipoint wkt = "MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 10 20),(2 2, 2 6, 6 4, 20 2))" ndr = "010500000002000000010200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000002440000000000000344001020000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000034400000000000000040" xdr = "000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::MultiPoint, geom) assert_equal('MultiLineString', geom.geom_type) assert_equal(Geos::GEOS_MULTILINESTRING, geom.type_id) end def test_multipoint wkt = "MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))" ndr = "0106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40" xdr = "000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000" geom = check(wkt, ndr, xdr) assert_instance_of(Geos::MultiPolygon, geom) assert_equal('MultiPolygon', geom.geom_type) assert_equal(Geos::GEOS_MULTIPOLYGON, geom.type_id) end def test_collection wkt = "GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 2,3 4),POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),MULTIPOINT(0 0,10 0,10 10,0 10,0 0),MULTILINESTRING((0 0,10 0,10 10,0 10,10 20),(2 2,2 6,6 4,20 2)),MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),((60 60,60 50,70 40,60 60))))" ndr = "010700000006000000010100000000000000000000000000000000000000010200000002000000000000000000F03F00000000000000400000000000000840000000000000104001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000004000000000000000400104000000050000000101000000000000000000000000000000000000000101000000000000000000244000000000000000000101000000000000000000244000000000000024400101000000000000000000000000000000000024400101000000000000000000000000000000000000000105000000020000000102000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000024400000000000003440010200000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000344000000000000000400106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40" xdr = "0000000007000000060000000001000000000000000000000000000000000000000002000000023FF00000000000004000000000000000400800000000000040100000000000000000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000" assert_raise(RuntimeError) do geom = check(wkt, ndr, xdr) assert_instance_of(Geos::MultiPolygon, geom) assert_equal('Collection', geom.geom_type) assert_equal(Geos::GEOS_COLLECTION, geom.type_id) end end def test_wkt_invalid assert_raise(RuntimeError) do reader = Geos::WktReader.new geom = reader.read("invalid") end end def test_wkb_invalid assert_raise(RuntimeError) do reader = Geos::WkbReader.new geom = reader.read("invalid") end end def test_hex_invalid assert_raise(RuntimeError) do reader = Geos::WkbReader.new geom = reader.read_hex("invalid") end end endgeos-3.4.2/swig/ruby/test/test_operations.rb0000644000175000017500000017303312206417150020762 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' require 'test_helper' class TestGeosOperations < Test::Unit::TestCase def setup @test_helper = GeosTestHelper.new() end def run_operation(results, &block) geoms = @test_helper.create_geoms() geoms.each_with_index do |geom_in, i| # Get expected result reader = Geos::WktReader.new expected = reader.read(results[i]) # Get the actual result actual = yield(geom_in) writer = Geos::WktWriter.new assert(actual.eql?(expected), " Geom: #{writer.write(geom_in)} Expected: #{results[i]} Actual: #{writer.write(actual)}") end end def test_centroid() results = Array.new() results[0] = "POINT (150.0000000000000000 350.0000000000000000)" results[1] = "POINT (50.0000000000000000 50.0000000000000000)" results[2] = "POINT (110.0000000000000000 126.6666666666666700)" results[3] = "POINT (50.0000000000000000 50.0000000000000000)" results[4] = "POINT (150.0000000000000000 350.0000000000000000)" results[5] = "POINT (150.0000000000000000 400.0000000000000000)" results[6] = "POINT (150.0000000000000000 375.0000000000000000)" results[7] = "POINT (0.0000000000000002 0.0000000000000001)" results[8] = "POINT (-0.0000000000000002 0.0000000000000002)" results[9] = "POINT (-0.0000000000000000 -0.0000000000000000)" results[10] = "POINT (-0.0000000000000000 5.0000000000000000)" results[11] = "POINT (8.5510137343037833 15.6700508986182890)" run_operation(results) do |geom| geom.centroid() end end def test_buffer() results = Array.new() results[0] = "POLYGON ((140.0000000000000000 349.9999999999999400, 140.1921471959676900 351.9509032201612500, 140.7612046748871300 353.8268343236508700, 141.6853038769745300 355.5557023301959700, 142.9289321881345000 357.0710678118654200, 144.4442976698039400 358.3146961230254400, 146.1731656763490700 359.2387953251128500, 148.0490967798386900 359.8078528040322800, 149.9999999999999700 360.0000000000000000, 151.9509032201612500 359.8078528040323400, 153.8268343236508700 359.2387953251129000, 155.5557023301960000 358.3146961230254400, 157.0710678118654500 357.0710678118654800, 158.3146961230254400 355.5557023301960300, 159.2387953251128500 353.8268343236509300, 159.8078528040323100 351.9509032201613100, 160.0000000000000000 350.0000000000000000, 159.8078528040323100 348.0490967798386900, 159.2387953251128700 346.1731656763491300, 158.3146961230254400 344.4442976698039700, 157.0710678118654800 342.9289321881345200, 155.5557023301960300 341.6853038769745600, 153.8268343236509000 340.7612046748871500, 151.9509032201613100 340.1921471959677200, 150.0000000000000300 340.0000000000000000, 148.0490967798387500 340.1921471959676600, 146.1731656763491300 340.7612046748871500, 144.4442976698040000 341.6853038769745600, 142.9289321881345500 342.9289321881345200, 141.6853038769745600 344.4442976698039700, 140.7612046748871500 346.1731656763490700, 140.1921471959676900 348.0490967798386900, 140.0000000000000000 349.9999999999999400))" results[1] = "POLYGON ((-10.0000000000000000 0.0000000000000012, -10.0000000000000000 100.0000000000000000, -9.8078528040323043 101.9509032201612800, -9.2387953251128678 103.8268343236509000, -8.3146961230254526 105.5557023301960300, -7.0710678118654746 107.0710678118654800, -5.5557023301960200 108.3146961230254600, -3.8268343236508970 109.2387953251128700, -1.9509032201612819 109.8078528040323100, 0.0000000000000000 110.0000000000000000, 100.0000000000000000 110.0000000000000000, 101.9509032201612800 109.8078528040323100, 103.8268343236509000 109.2387953251128700, 105.5557023301960300 108.3146961230254600, 107.0710678118654800 107.0710678118654800, 108.3146961230254600 105.5557023301960300, 109.2387953251128700 103.8268343236509000, 109.8078528040323100 101.9509032201612800, 110.0000000000000000 100.0000000000000000, 110.0000000000000000 0.0000000000000000, 109.8078528040323100 -1.9509032201612824, 109.2387953251128700 -3.8268343236508979, 108.3146961230254600 -5.5557023301960218, 107.0710678118654800 -7.0710678118654746, 105.5557023301960300 -8.3146961230254526, 103.8268343236509000 -9.2387953251128678, 101.9509032201612800 -9.8078528040323043, 100.0000000000000000 -10.0000000000000000, 0.0000000000000028 -10.0000000000000000, 0.0000000000000000 -10.0000000000000000, -0.2636355702920707 -9.9740341627070670, -1.9509032201612777 -9.8078528040323061, -1.9509032201612866 -9.8078528040323025, -1.9509032201612952 -9.8078528040323025, -2.7195138806188379 -9.5746973091972567, -3.8268343236508908 -9.2387953251128714, -3.8268343236509019 -9.2387953251128661, -3.8268343236509117 -9.2387953251128625, -4.3727926415072558 -8.9469745244536831, -5.5557023301960120 -8.3146961230254597, -5.5557023301960289 -8.3146961230254455, -5.5557023301960360 -8.3146961230254419, -6.2156195560843335 -7.7731160520364293, -7.0710678118654684 -7.0710678118654826, -7.0710678118654746 -7.0710678118654746, -7.0710678118654826 -7.0710678118654684, -7.4895965704289287 -6.5610890439959491, -8.3146961230254437 -5.5557023301960360, -8.3146961230254526 -5.5557023301960182, -8.3146961230254561 -5.5557023301960147, -8.5385013985309968 -5.1369921098608780, -9.2387953251128625 -3.8268343236509113, -9.2387953251128661 -3.8268343236508979, -9.2387953251128696 -3.8268343236508922, -9.4674344907501400 -3.0731120052845418, -9.8078528040323008 -1.9509032201613032, -9.8078528040323025 -1.9509032201612937, -9.8078528040323061 -1.9509032201612793, -9.9916266130197560 -0.0850164247318053, -10.0000000000000000 0.0000000000000000, -10.0000000000000000 0.0000000000000012), (10.0000000000000000 10.0000000000000000, 90.0000000000000000 10.0000000000000000, 90.0000000000000000 90.0000000000000000, 10.0000000000000000 90.0000000000000000, 10.0000000000000000 10.0000000000000000))" results[2] = "POLYGON ((50.0000000000000000 60.0000000000000000, 50.0000000000000000 160.0000000000000000, 50.1921471959676920 161.9509032201612800, 50.7612046748871320 163.8268343236509000, 51.6853038769745440 165.5557023301960300, 52.9289321881345240 167.0710678118654800, 54.4442976698039800 168.3146961230254400, 56.1731656763491000 169.2387953251128700, 58.0490967798387200 169.8078528040323100, 60.0000000000000000 170.0000000000000000, 160.0000000000000000 170.0000000000000000, 161.9509032201612800 169.8078528040323100, 163.8268343236509000 169.2387953251128700, 165.5557023301960300 168.3146961230254400, 167.0710678118654800 167.0710678118654800, 168.3146961230254400 165.5557023301960300, 169.2387953251128700 163.8268343236509000, 169.8078528040323100 161.9509032201612800, 170.0000000000000000 160.0000000000000000, 170.0000000000000000 60.0000000000000000, 170.0000000000000000 59.9999999999999860, 169.8078528040323100 58.0490967798387060, 169.2387953251128700 56.1731656763490930, 168.3146961230254400 54.4442976698039730, 167.0710678118654800 52.9289321881345170, 165.5557023301960300 51.6853038769745440, 163.8268343236509000 50.7612046748871320, 161.9509032201612800 50.1921471959676920, 160.0000000000000000 50.0000000000000000, 158.0490967798387200 50.1921471959676920, 156.1731656763491000 50.7612046748871250, 154.4442976698040000 51.6853038769745440, 152.9289321881345200 52.9289321881345170, 151.6853038769745600 54.4442976698039660, 150.7612046748871300 56.1731656763490860, 150.1921471959676900 58.0490967798386990, 150.0000000000000000 60.0000000000000000, 150.0000000000000000 150.0000000000000000, 70.0000000000000000 150.0000000000000000, 70.0000000000000000 60.0000000000000000, 70.0000000000000000 59.9999999999999860, 69.8078528040323080 58.0490967798387060, 69.2387953251128610 56.1731656763490930, 68.3146961230254420 54.4442976698039730, 67.0710678118654760 52.9289321881345170, 65.5557023301960130 51.6853038769745440, 63.8268343236509000 50.7612046748871320, 61.9509032201612800 50.1921471959676920, 60.0000000000000000 50.0000000000000000, 58.0490967798387200 50.1921471959676920, 56.1731656763491070 50.7612046748871250, 54.4442976698039870 51.6853038769745440, 52.9289321881345320 52.9289321881345170, 51.6853038769745580 54.4442976698039660, 50.7612046748871390 56.1731656763490860, 50.1921471959676990 58.0490967798386990, 50.0000000000000000 60.0000000000000000))" results[3] = "POLYGON ((-10.0000000000000000 0.0000000000000012, -10.0000000000000000 100.0000000000000000, -9.8078528040323043 101.9509032201612800, -9.2387953251128678 103.8268343236509000, -8.3146961230254526 105.5557023301960300, -7.0710678118654746 107.0710678118654800, -5.5557023301960200 108.3146961230254600, -3.8268343236508970 109.2387953251128700, -1.9509032201612819 109.8078528040323100, 0.0000000000000000 110.0000000000000000, 100.0000000000000000 110.0000000000000000, 101.9509032201612800 109.8078528040323100, 103.8268343236509000 109.2387953251128700, 105.5557023301960300 108.3146961230254600, 107.0710678118654800 107.0710678118654800, 108.3146961230254600 105.5557023301960300, 109.2387953251128700 103.8268343236509000, 109.8078528040323100 101.9509032201612800, 110.0000000000000000 100.0000000000000000, 110.0000000000000000 0.0000000000000000, 109.8078528040323100 -1.9509032201612824, 109.2387953251128700 -3.8268343236508979, 108.3146961230254600 -5.5557023301960218, 107.0710678118654800 -7.0710678118654746, 105.5557023301960300 -8.3146961230254526, 103.8268343236509000 -9.2387953251128678, 101.9509032201612800 -9.8078528040323043, 100.0000000000000000 -10.0000000000000000, 0.0000000000000028 -10.0000000000000000, 0.0000000000000000 -10.0000000000000000, -0.2636355702920707 -9.9740341627070670, -1.9509032201612777 -9.8078528040323061, -1.9509032201612866 -9.8078528040323025, -1.9509032201612952 -9.8078528040323025, -2.7195138806188379 -9.5746973091972567, -3.8268343236508908 -9.2387953251128714, -3.8268343236509019 -9.2387953251128661, -3.8268343236509117 -9.2387953251128625, -4.3727926415072558 -8.9469745244536831, -5.5557023301960120 -8.3146961230254597, -5.5557023301960289 -8.3146961230254455, -5.5557023301960360 -8.3146961230254419, -6.2156195560843335 -7.7731160520364293, -7.0710678118654684 -7.0710678118654826, -7.0710678118654746 -7.0710678118654746, -7.0710678118654826 -7.0710678118654684, -7.4895965704289287 -6.5610890439959491, -8.3146961230254437 -5.5557023301960360, -8.3146961230254526 -5.5557023301960182, -8.3146961230254561 -5.5557023301960147, -8.5385013985309968 -5.1369921098608780, -9.2387953251128625 -3.8268343236509113, -9.2387953251128661 -3.8268343236508979, -9.2387953251128696 -3.8268343236508922, -9.4674344907501400 -3.0731120052845418, -9.8078528040323008 -1.9509032201613032, -9.8078528040323025 -1.9509032201612937, -9.8078528040323061 -1.9509032201612793, -9.9916266130197560 -0.0850164247318053, -10.0000000000000000 0.0000000000000000, -10.0000000000000000 0.0000000000000012), (10.0000000000000000 10.0000000000000000, 90.0000000000000000 10.0000000000000000, 90.0000000000000000 90.0000000000000000, 10.0000000000000000 90.0000000000000000, 10.0000000000000000 10.0000000000000000))" results[4] = "POLYGON ((-10.0000000000000000 200.0000000000000000, -10.0000000000000000 500.0000000000000000, -9.8078528040323043 501.9509032201613100, -9.2387953251128678 503.8268343236508700, -8.3146961230254526 505.5557023301960300, -7.0710678118654746 507.0710678118654800, -5.5557023301960200 508.3146961230254400, -3.8268343236508970 509.2387953251128500, -1.9509032201612819 509.8078528040322800, 0.0000000000000000 510.0000000000000000, 300.0000000000000000 510.0000000000000000, 301.9509032201613100 509.8078528040322800, 303.8268343236508700 509.2387953251128500, 305.5557023301960300 508.3146961230254400, 307.0710678118654800 507.0710678118654800, 308.3146961230254400 505.5557023301960300, 309.2387953251128500 503.8268343236508700, 309.8078528040322800 501.9509032201613100, 310.0000000000000000 500.0000000000000000, 310.0000000000000000 200.0000000000000000, 309.8078528040322800 198.0490967798387200, 309.2387953251128500 196.1731656763491000, 308.3146961230254400 194.4442976698039700, 307.0710678118654800 192.9289321881345200, 305.5557023301960300 191.6853038769745600, 303.8268343236508700 190.7612046748871300, 301.9509032201613100 190.1921471959676900, 300.0000000000000000 190.0000000000000000, 0.0000000000000000 190.0000000000000000, -0.0000000000000640 190.0000000000000000, -1.9509032201613388 190.1921471959677200, -3.8268343236509446 190.7612046748871500, -5.5557023301960582 191.6853038769745600, -7.0710678118654977 192.9289321881345500, -8.3146961230254668 194.4442976698040000, -9.2387953251128732 196.1731656763491300, -9.8078528040323061 198.0490967798387200, -10.0000000000000000 200.0000000000000000), (110.0000000000000000 310.0000000000000000, 190.0000000000000000 310.0000000000000000, 190.0000000000000000 390.0000000000000000, 110.0000000000000000 390.0000000000000000, 110.0000000000000000 310.0000000000000000))" results[5] = "POLYGON ((-10.0000000000000000 250.0000000000000000, -10.0000000000000000 550.0000000000000000, -9.8078528040323043 551.9509032201613100, -9.2387953251128678 553.8268343236509300, -8.3146961230254526 555.5557023301960300, -7.0710678118654746 557.0710678118655300, -5.5557023301960200 558.3146961230254400, -3.8268343236508970 559.2387953251128500, -1.9509032201612819 559.8078528040323400, 0.0000000000000000 560.0000000000000000, 300.0000000000000000 560.0000000000000000, 301.9509032201613100 559.8078528040323400, 303.8268343236508700 559.2387953251128500, 305.5557023301960300 558.3146961230254400, 307.0710678118654800 557.0710678118654200, 308.3146961230254400 555.5557023301960300, 309.2387953251128500 553.8268343236509300, 309.8078528040322800 551.9509032201613100, 310.0000000000000000 550.0000000000000000, 310.0000000000000000 250.0000000000000000, 309.8078528040322800 248.0490967798387200, 309.2387953251128500 246.1731656763491000, 308.3146961230254400 244.4442976698039700, 307.0710678118654800 242.9289321881345200, 305.5557023301960300 241.6853038769745600, 303.8268343236508700 240.7612046748871300, 301.9509032201613100 240.1921471959676900, 300.0000000000000000 240.0000000000000000, 0.0000000000000000 240.0000000000000000, -0.0000000000000640 240.0000000000000000, -1.9509032201613388 240.1921471959677200, -3.8268343236509446 240.7612046748871500, -5.5557023301960582 241.6853038769745600, -7.0710678118654977 242.9289321881345500, -8.3146961230254668 244.4442976698040000, -9.2387953251128732 246.1731656763491300, -9.8078528040323061 248.0490967798387200, -10.0000000000000000 250.0000000000000000), (110.0000000000000000 360.0000000000000000, 190.0000000000000000 360.0000000000000000, 190.0000000000000000 440.0000000000000000, 110.0000000000000000 440.0000000000000000, 110.0000000000000000 360.0000000000000000))" results[6] = "MULTIPOLYGON (((-10.0000000000000000 0.0000000000000000, -10.0000000000000000 0.0000000000000012, -10.0000000000000000 100.0000000000000000, -9.8078528040323043 101.9509032201612800, -9.2387953251128678 103.8268343236509000, -8.3146961230254526 105.5557023301960300, -7.0710678118654746 107.0710678118654800, -5.5557023301960200 108.3146961230254600, -3.8268343236508970 109.2387953251128700, -1.9509032201612819 109.8078528040323100, 0.0000000000000000 110.0000000000000000, 50.0000000000000000 110.0000000000000000, 50.0000000000000000 160.0000000000000000, 50.1921471959676920 161.9509032201612800, 50.7612046748871320 163.8268343236509000, 51.6853038769745440 165.5557023301960300, 52.9289321881345240 167.0710678118654800, 54.4442976698039800 168.3146961230254400, 56.1731656763491000 169.2387953251128700, 58.0490967798387200 169.8078528040323100, 60.0000000000000000 170.0000000000000000, 160.0000000000000000 170.0000000000000000, 161.9509032201612800 169.8078528040323100, 163.8268343236509000 169.2387953251128700, 165.5557023301960300 168.3146961230254400, 167.0710678118654800 167.0710678118654800, 168.3146961230254400 165.5557023301960300, 169.2387953251128700 163.8268343236509000, 169.8078528040323100 161.9509032201612800, 170.0000000000000000 160.0000000000000000, 170.0000000000000000 60.0000000000000000, 170.0000000000000000 59.9999999999999860, 169.8078528040323100 58.0490967798387060, 169.2387953251128700 56.1731656763490930, 168.3146961230254400 54.4442976698039730, 167.0710678118654800 52.9289321881345170, 165.5557023301960300 51.6853038769745440, 163.8268343236509000 50.7612046748871320, 161.9509032201612800 50.1921471959676920, 160.0000000000000000 50.0000000000000000, 158.0490967798387200 50.1921471959676920, 156.1731656763491000 50.7612046748871250, 154.4442976698040000 51.6853038769745440, 152.9289321881345200 52.9289321881345170, 151.6853038769745600 54.4442976698039660, 150.7612046748871300 56.1731656763490860, 150.1921471959676900 58.0490967798386990, 150.0000000000000000 60.0000000000000000, 150.0000000000000000 150.0000000000000000, 70.0000000000000000 150.0000000000000000, 70.0000000000000000 110.0000000000000000, 100.0000000000000000 110.0000000000000000, 101.9509032201612800 109.8078528040323100, 103.8268343236509000 109.2387953251128700, 105.5557023301960300 108.3146961230254600, 107.0710678118654800 107.0710678118654800, 108.3146961230254600 105.5557023301960300, 109.2387953251128700 103.8268343236509000, 109.8078528040323100 101.9509032201612800, 110.0000000000000000 100.0000000000000000, 110.0000000000000000 0.0000000000000000, 109.8078528040323100 -1.9509032201612824, 109.2387953251128700 -3.8268343236508979, 108.3146961230254600 -5.5557023301960218, 107.0710678118654800 -7.0710678118654746, 105.5557023301960300 -8.3146961230254526, 103.8268343236509000 -9.2387953251128678, 101.9509032201612800 -9.8078528040323043, 100.0000000000000000 -10.0000000000000000, 0.0000000000000028 -10.0000000000000000, 0.0000000000000000 -10.0000000000000000, -0.0000000000000196 -10.0000000000000000, -1.0757640096988681 -9.8940464930036285, -1.9509032201612777 -9.8078528040323061, -1.9509032201612866 -9.8078528040323025, -1.9509032201612952 -9.8078528040323025, -2.7195138806188379 -9.5746973091972567, -3.8268343236508908 -9.2387953251128714, -3.8268343236509019 -9.2387953251128661, -3.8268343236509117 -9.2387953251128625, -4.3727926415072558 -8.9469745244536831, -5.5557023301960120 -8.3146961230254597, -5.5557023301960289 -8.3146961230254455, -5.5557023301960360 -8.3146961230254419, -6.2156195560843335 -7.7731160520364293, -7.0710678118654684 -7.0710678118654826, -7.0710678118654746 -7.0710678118654746, -7.0710678118654826 -7.0710678118654684, -7.4895965704289287 -6.5610890439959491, -8.3146961230254437 -5.5557023301960360, -8.3146961230254526 -5.5557023301960182, -8.3146961230254561 -5.5557023301960147, -8.5385013985309968 -5.1369921098608780, -9.2387953251128625 -3.8268343236509113, -9.2387953251128661 -3.8268343236508979, -9.2387953251128696 -3.8268343236508922, -9.4674344907501400 -3.0731120052845418, -9.8078528040323008 -1.9509032201613032, -9.8078528040323025 -1.9509032201612937, -9.8078528040323061 -1.9509032201612793, -9.9916266130197560 -0.0850164247318053, -10.0000000000000000 0.0000000000000000), (10.0000000000000000 10.0000000000000000, 90.0000000000000000 10.0000000000000000, 90.0000000000000000 90.0000000000000000, 70.0000000000000000 90.0000000000000000, 70.0000000000000000 60.0000000000000000, 70.0000000000000000 59.9999999999999860, 69.8078528040323080 58.0490967798387060, 69.2387953251128610 56.1731656763490930, 68.3146961230254420 54.4442976698039730, 67.0710678118654760 52.9289321881345170, 65.5557023301960130 51.6853038769745440, 63.8268343236509000 50.7612046748871320, 61.9509032201612800 50.1921471959676920, 60.0000000000000000 50.0000000000000000, 58.0490967798387200 50.1921471959676920, 56.1731656763491070 50.7612046748871250, 54.4442976698039870 51.6853038769745440, 52.9289321881345320 52.9289321881345170, 51.6853038769745580 54.4442976698039660, 50.7612046748871390 56.1731656763490860, 50.1921471959676990 58.0490967798386990, 50.0000000000000000 60.0000000000000000, 50.0000000000000000 90.0000000000000000, 10.0000000000000000 90.0000000000000000, 10.0000000000000000 10.0000000000000000)), ((-10.0000000000000000 200.0000000000000000, -10.0000000000000000 250.0000000000000000, -10.0000000000000000 500.0000000000000000, -10.0000000000000000 550.0000000000000000, -9.8078528040323043 551.9509032201613100, -9.2387953251128678 553.8268343236509300, -8.3146961230254526 555.5557023301960300, -7.0710678118654746 557.0710678118655300, -5.5557023301960200 558.3146961230254400, -3.8268343236508970 559.2387953251128500, -1.9509032201612819 559.8078528040323400, 0.0000000000000000 560.0000000000000000, 300.0000000000000000 560.0000000000000000, 301.9509032201613100 559.8078528040323400, 303.8268343236508700 559.2387953251128500, 305.5557023301960300 558.3146961230254400, 307.0710678118654800 557.0710678118654200, 308.3146961230254400 555.5557023301960300, 309.2387953251128500 553.8268343236509300, 309.8078528040322800 551.9509032201613100, 310.0000000000000000 550.0000000000000000, 310.0000000000000000 500.0000000000000000, 310.0000000000000000 250.0000000000000000, 310.0000000000000000 200.0000000000000000, 309.8078528040322800 198.0490967798387200, 309.2387953251128500 196.1731656763491000, 308.3146961230254400 194.4442976698039700, 307.0710678118654800 192.9289321881345200, 305.5557023301960300 191.6853038769745600, 303.8268343236508700 190.7612046748871300, 301.9509032201613100 190.1921471959676900, 300.0000000000000000 190.0000000000000000, 0.0000000000000000 190.0000000000000000, -0.0000000000000640 190.0000000000000000, -1.9509032201613388 190.1921471959677200, -3.8268343236509446 190.7612046748871500, -5.5557023301960582 191.6853038769745600, -7.0710678118654977 192.9289321881345500, -8.3146961230254668 194.4442976698040000, -9.2387953251128732 196.1731656763491300, -9.8078528040323061 198.0490967798387200, -10.0000000000000000 200.0000000000000000), (110.0000000000000000 360.0000000000000000, 149.9999999999999700 360.0000000000000000, 190.0000000000000000 360.0000000000000000, 190.0000000000000000 390.0000000000000000, 110.0000000000000000 390.0000000000000000, 110.0000000000000000 360.0000000000000000)))" results[7] = "POLYGON ((-14.9950656036573160 -0.3141075907812337, -14.9950656036573160 0.3141075907813203, -14.9851992457986740 0.6280601884278876, -14.9457532881721510 1.2550357308317843, -14.9161931526031810 1.5677493010067369, -14.8374569125237630 2.1910108182238575, -14.7883196595948160 2.5012512233309598, -14.6706038730309080 3.1183389868940914, -14.6020834250306190 3.4248818497897422, -14.4458526624125750 4.0333604962166074, -14.3582194382451860 4.3349960322670693, -14.1640902710180080 4.9324641743276931, -14.0576901189834940 5.2280019658763459, -13.8264286862810510 5.8121016697712404, -13.7016815191698900 6.1003753641732139, -13.4342005042137610 6.6688014552208621, -13.2915986421029830 6.9486733679040729, -12.9889536702587340 7.4991825280123248, -12.8290598975494900 7.7695481323987314, -12.4924453702556700 8.2999677534163254, -12.3158907146203300 8.5597600399837077, -11.9466350956316130 9.0679967979921656, -11.7541163376358230 9.3161904852732462, -11.3536769101835220 9.8002386019799896, -11.1459538334116320 10.0358541828799850, -10.7159109489725180 10.4938033415089350, -10.4938033415089010 10.7159109489725490, -10.0358541828799270 11.1459538334116850, -9.8002386019799310 11.3536769101835730, -9.3161904852731698 11.7541163376358830, -9.0679967979920875 11.9466350956316740, -8.5597600399836544 12.3158907146203680, -8.2999677534162721 12.4924453702557050, -7.7695481323986657 12.8290598975495310, -7.4991825280122608 12.9889536702587700, -6.9486733679040125 13.2915986421030110, -6.6688014552207990 13.4342005042137910, -6.1003753641731482 13.7016815191699180, -5.8121016697711747 13.8264286862810760, -5.2280019658762695 14.0576901189835260, -4.9324641743276159 14.1640902710180360, -4.3349960322670062 14.3582194382452040, -4.0333604962165435 14.4458526624125910, -3.4248818497896689 14.6020834250306350, -3.1183389868940190 14.6706038730309240, -2.5012512233309079 14.7883196595948260, -2.1910108182238055 14.8374569125237700, -1.5677493010066250 14.9161931526031920, -1.2550357308316711 14.9457532881721600, -0.6280601884278352 14.9851992457986720, -0.3141075907812689 14.9950656036573150, 0.3141075907813134 14.9950656036573160, 0.6280601884278796 14.9851992457986740, 1.2550357308317122 14.9457532881721580, 1.5677493010066668 14.9161931526031890, 2.1910108182238561 14.8374569125237630, 2.5012512233309572 14.7883196595948160, 3.1183389868940905 14.6706038730309080, 3.4248818497897404 14.6020834250306190, 4.0333604962165541 14.4458526624125910, 4.3349960322670169 14.3582194382452040, 4.9324641743276940 14.1640902710180100, 5.2280019658763459 14.0576901189834980, 5.8121016697712218 13.8264286862810570, 6.1003753641731944 13.7016815191698970, 6.6688014552208479 13.4342005042137680, 6.9486733679040604 13.2915986421029880, 7.4991825280122821 12.9889536702587570, 7.7695481323986879 12.8290598975495160, 8.2999677534163254 12.4924453702556700, 8.5597600399837077 12.3158907146203300, 9.0679967979921301 11.9466350956316420, 9.3161904852732107 11.7541163376358500, 9.8002386019799825 11.3536769101835270, 10.0358541828799770 11.1459538334116390, 10.4938033415089220 10.7159109489725300, 10.7159109489725350 10.4938033415089170, 11.1459538334116490 10.0358541828799660, 11.3536769101835390 9.8002386019799719, 11.7541163376358670 9.3161904852731929, 11.9466350956316580 9.0679967979921106, 12.3158907146203550 8.5597600399836740, 12.4924453702556930 8.2999677534162917, 12.8290598975495200 7.7695481323986808, 12.9889536702587630 7.4991825280122750, 13.2915986421030080 6.9486733679040249, 13.4342005042137860 6.6688014552208115, 13.7016815191699010 6.1003753641731864, 13.8264286862810600 5.8121016697712138, 14.0576901189835210 5.2280019658762811, 14.1640902710180310 4.9324641743276283, 14.3582194382451950 4.3349960322670409, 14.4458526624125840 4.0333604962165781, 14.6020834250306350 3.4248818497896769, 14.6706038730309240 3.1183389868940266, 14.7883196595948190 2.5012512233309465, 14.8374569125237650 2.1910108182238446, 14.9161931526031900 1.5677493010066605, 14.9457532881721600 1.2550357308317064, 14.9851992457986720 0.6280601884278432, 14.9950656036573150 0.3141075907812767, 14.9950656036573150 -0.3141075907813262, 14.9851992457986700 -0.6280601884279280, 14.9457532881721490 -1.2550357308318028, 14.9161931526031780 -1.5677493010067551, 14.8374569125237490 -2.1910108182239427, 14.7883196595948000 -2.5012512233310424, 14.6706038730309010 -3.1183389868941243, 14.6020834250306120 -3.4248818497897728, 14.4458526624125610 -4.0333604962166634, 14.3582194382451700 -4.3349960322671288, 14.1640902710179920 -4.9324641743277358, 14.0576901189834800 -5.2280019658763859, 13.8264286862810410 -5.8121016697712617, 13.7016815191698810 -6.1003753641732335, 13.4342005042137340 -6.6688014552209189, 13.2915986421029510 -6.9486733679041333, 12.9889536702587090 -7.4991825280123656, 12.8290598975494670 -7.7695481323987705, 12.4924453702556340 -8.2999677534163787, 12.3158907146202950 -8.5597600399837575, 11.9466350956316010 -9.0679967979921834, 11.7541163376358070 -9.3161904852732675, 11.3536769101834660 -9.8002386019800536, 11.1459538334115770 -10.0358541828800460, 10.7159109489724860 -10.4938033415089680, 10.4938033415088710 -10.7159109489725800, 10.0358541828799050 -11.1459538334117050, 9.8002386019799097 -11.3536769101835930, 9.3161904852731432 -11.7541163376359070, 9.0679967979920590 -11.9466350956316950, 8.5597600399835905 -12.3158907146204120, 8.2999677534162082 -12.4924453702557480, 7.7695481323986328 -12.8290598975495480, 7.4991825280122235 -12.9889536702587910, 6.9486733679039743 -13.2915986421030330, 6.6688014552207626 -13.4342005042138110, 6.1003753641730931 -13.7016815191699410, 5.8121016697711205 -13.8264286862810980, 5.2280019658762296 -14.0576901189835370, 4.9324641743275741 -14.1640902710180470, 4.3349960322669716 -14.3582194382452140, 4.0333604962165097 -14.4458526624126020, 3.4248818497896059 -14.6020834250306530, 3.1183389868939568 -14.6706038730309380, 2.5012512233308808 -14.7883196595948280, 2.1910108182237762 -14.8374569125237730, 1.5677493010065828 -14.9161931526031970, 1.2550357308316300 -14.9457532881721630, 0.6280601884277636 -14.9851992457986750, 0.3141075907811984 -14.9950656036573160, -0.3141075907813534 -14.9950656036573150, -0.6280601884279229 -14.9851992457986720, -1.2550357308317934 -14.9457532881721490, -1.5677493010067458 -14.9161931526031800, -2.1910108182239059 -14.8374569125237560, -2.5012512233310060 -14.7883196595948090, -3.1183389868941118 -14.6706038730309040, -3.4248818497897648 -14.6020834250306140, -4.0333604962166163 -14.4458526624125730, -4.3349960322670782 -14.3582194382451840, -4.9324641743277269 -14.1640902710179950, -5.2280019658763770 -14.0576901189834840, -5.8121016697712520 -13.8264286862810440, -6.1003753641732263 -13.7016815191698830, -6.6688014552208932 -13.4342005042137470, -6.9486733679041039 -13.2915986421029670, -7.4991825280123576 -12.9889536702587150, -7.7695481323987625 -12.8290598975494700, -8.2999677534163503 -12.4924453702556520, -8.5597600399837344 -12.3158907146203130, -9.0679967979921816 -11.9466350956316030, -9.3161904852732622 -11.7541163376358120, -9.8002386019800056 -11.3536769101835110, -10.0358541828800000 -11.1459538334116210, -10.4938033415089680 -10.7159109489724820, -10.7159109489725810 -10.4938033415088690, -11.1459538334116890 -10.0358541828799210, -11.3536769101835750 -9.8002386019799275, -11.7541163376358800 -9.3161904852731752, -11.9466350956316700 -9.0679967979920910, -12.3158907146203980 -8.5597600399836082, -12.4924453702557340 -8.2999677534162259, -12.8290598975495450 -7.7695481323986435, -12.9889536702587860 -7.4991825280122359, -13.2915986421030170 -6.9486733679040045, -13.4342005042137950 -6.6688014552207910, -13.7016815191699380 -6.1003753641731020, -13.8264286862810960 -5.8121016697711294, -14.0576901189835280 -5.2280019658762589, -14.1640902710180380 -4.9324641743276061, -14.3582194382452110 -4.3349960322669894, -14.4458526624125980 -4.0333604962165257, -14.6020834250306490 -3.4248818497896130, -14.6706038730309340 -3.1183389868939639, -14.7883196595948260 -2.5012512233308986, -14.8374569125237720 -2.1910108182237962, -14.9161931526031960 -1.5677493010066135, -14.9457532881721630 -1.2550357308316589, -14.9851992457986750 -0.6280601884277989, -14.9950656036573160 -0.3141075907812337))" results[8] = "POLYGON ((-13.9978060329073970 -0.2094624748266045, -13.9978060329073950 0.2094624748266889, -13.9899129466204800 0.5862055920025697, -13.9723091710683090 1.0056810332548318, -13.9486610626131340 1.3809373174647748, -13.9131748095786600 1.8020582537397334, -13.8738650072355010 2.1743467398682563, -13.8199333198798020 2.5981893751580385, -13.7651169614795710 2.9660408106328200, -13.6918816367286350 3.3936470893355333, -13.6217750573947250 3.7556097325960867, -13.5280664950561210 4.1879672781986219, -13.4429463734285120 4.5426126280570056, -13.3272628147087370 4.9806278220575830, -13.2274650810198080 5.3265562553399510, -13.0879482319261640 5.7710177916185499, -12.9738667422375400 6.1068640868384030, -12.8082754908518410 6.5583938485882607, -12.6803604726844450 6.8828325738519487, -12.4860455048912550 7.3418201699763186, -12.3448017803829830 7.6535709138571768, -12.1186855141924110 8.1200877988898483, -11.9646705077957790 8.4179202236271458, -11.7032390472997270 8.8916092271572076, -11.5370605858822160 9.1743479242371997, -11.2363774530640650 9.6542845978244500, -11.0586913670931730 9.9208137267807857, -10.7144465907463000 10.4053377449800630, -10.5259541260263050 10.6546054371063280, -10.1335665546816960 11.1411241625366360, -9.9350116048568289 11.3721466721315850, -9.4898062292295364 11.8569198901936450, -9.2819723999756292 12.0687854769560520, -8.7794563174207489 12.5467111407040800, -8.5631638339116236 12.7385836679551690, -7.9994214052444379 13.2030195472396450, -7.7755238750978668 13.3741417817725790, -7.1477396542304596 13.8168157925036010, -6.9171206987088816 13.9665123930369910, -6.2242137310627568 14.3775906467337030, -5.9877834978238340 14.5052708291751160, -5.2310967209111192 14.8736585172804930, -4.9897882920707488 14.9788183862813580, -4.1737264480282601 15.2927525470066940, -3.9284921577117395 15.3749770846070390, -3.0609555812582574 15.6229213059541010, -2.8127632571725756 15.6818860094688350, -1.9052082437959865 15.8536545301842760, -1.6550373876560236 15.8891266928670380, -0.7220331923269177 15.9770682384900770, -0.4708711142096648 15.9889078679204460, 0.4708711142097127 15.9889078679204420, 0.7220331923269657 15.9770682384900710, 1.6550373876561006 15.8891266928670250, 1.9052082437960645 15.8536545301842620, 2.8127632571726640 15.6818860094688160, 3.0609555812583449 15.6229213059540800, 3.9284921577117862 15.3749770846070250, 4.1737264480283063 15.2927525470066800, 4.9897882920707826 14.9788183862813450, 5.2310967209111530 14.8736585172804790, 5.9877834978238864 14.5052708291750850, 6.2242137310628074 14.3775906467336720, 6.9171206987089455 13.9665123930369500, 7.1477396542305236 13.8168157925035580, 7.7755238750979068 13.3741417817725510, 7.9994214052444779 13.2030195472396150, 8.5631638339116591 12.7385836679551400, 8.7794563174207827 12.5467111407040480, 9.2819723999756629 12.0687854769560160, 9.4898062292295684 11.8569198901936110, 9.9350116048568538 11.3721466721315560, 10.1335665546817210 11.1411241625366100, 10.5259541260263450 10.6546054371062770, 10.7144465907463410 10.4053377449800100, 11.0586913670931950 9.9208137267807537, 11.2363774530640870 9.6542845978244163, 11.5370605858822340 9.1743479242371677, 11.7032390472997460 8.8916092271571721, 11.9646705077958020 8.4179202236271049, 12.1186855141924340 8.1200877988898057, 12.3448017803830050 7.6535709138571342, 12.4860455048912740 7.3418201699762751, 12.6803604726844630 6.8828325738519034, 12.8082754908518570 6.5583938485882154, 12.9738667422375520 6.1068640868383675, 13.0879482319261750 5.7710177916185117, 13.2274650810198190 5.3265562553399128, 13.3272628147087460 4.9806278220575457, 13.4429463734285230 4.5426126280569576, 13.5280664950561320 4.1879672781985740, 13.6217750573947300 3.7556097325960591, 13.6918816367286400 3.3936470893355035, 13.7651169614795780 2.9660408106327787, 13.8199333198798090 2.5981893751579981, 13.8738650072355050 2.1743467398682150, 13.9131748095786620 1.8020582537396930, 13.9486610626131360 1.3809373174647297, 13.9723091710683110 1.0056810332547848, 13.9899129466204820 0.5862055920025263, 13.9978060329073950 0.2094624748266465, 13.9978060329073950 -0.2094624748266701, 13.9899129466204780 -0.5862055920025923, 13.9723091710683070 -1.0056810332548776, 13.9486610626131300 -1.3809373174648205, 13.9131748095786540 -1.8020582537397756, 13.8738650072354960 -2.1743467398682954, 13.8199333198797940 -2.5981893751580794, 13.7651169614795630 -2.9660408106328582, 13.6918816367286260 -3.3936470893355826, 13.6217750573947130 -3.7556097325961408, 13.5280664950561110 -4.1879672781986637, 13.4429463734285020 -4.5426126280570447, 13.3272628147087280 -4.9806278220576088, 13.2274650810198010 -5.3265562553399741, 13.0879482319261480 -5.7710177916185987, 12.9738667422375220 -6.1068640868384563, 12.8082754908518270 -6.5583938485882953, 12.6803604726844340 -6.8828325738519798, 12.4860455048912340 -7.3418201699763692, 12.3448017803829620 -7.6535709138572248, 12.1186855141923960 -8.1200877988898768, 11.9646705077957630 -8.4179202236271777, 11.7032390472996980 -8.8916092271572555, 11.5370605858821880 -9.1743479242372459, 11.2363774530640370 -9.6542845978244927, 11.0586913670931470 -9.9208137267808283, 10.7144465907462810 -10.4053377449800890, 10.5259541260262830 -10.6546054371063570, 10.1335665546816620 -11.1411241625366770, 9.9350116048567969 -11.3721466721316240, 9.4898062292294831 -11.8569198901937010, 9.2819723999755759 -12.0687854769561030, 8.7794563174207294 -12.5467111407040960, 8.5631638339116005 -12.7385836679551860, 7.9994214052443882 -13.2030195472396840, 7.7755238750978179 -13.3741417817726160, 7.1477396542304321 -13.8168157925036180, 6.9171206987088540 -13.9665123930370070, 6.2242137310626875 -14.3775906467337380, 5.9877834978237630 -14.5052708291751490, 5.2310967209110570 -14.8736585172805180, 4.9897882920706875 -14.9788183862813820, 4.1737264480281953 -15.2927525470067170, 3.9284921577116760 -15.3749770846070600, 3.0609555812582285 -15.6229213059541080, 2.8127632571725445 -15.6818860094688400, 1.9052082437959421 -15.8536545301842790, 1.6550373876559801 -15.8891266928670410, 0.7220331923268358 -15.9770682384900770, 0.4708711142095837 -15.9889078679204460, -0.4708711142097903 -15.9889078679204390, -0.7220331923270460 -15.9770682384900660, -1.6550373876561599 -15.8891266928670150, -1.9052082437961220 -15.8536545301842510, -2.8127632571727186 -15.6818860094688050, -3.0609555812583986 -15.6229213059540690, -3.9284921577118315 -15.3749770846070070, -4.1737264480283534 -15.2927525470066610, -4.9897882920708492 -14.9788183862813150, -5.2310967209112178 -14.8736585172804490, -5.9877834978239459 -14.5052708291750570, -6.2242137310628660 -14.3775906467336420, -6.9171206987089651 -13.9665123930369360, -7.1477396542305449 -13.8168157925035440, -7.7755238750979725 -13.3741417817724990, -7.9994214052445418 -13.2030195472395630, -8.5631638339116876 -12.7385836679551120, -8.7794563174208129 -12.5467111407040230, -9.2819723999757109 -12.0687854769559700, -9.4898062292296181 -11.8569198901935610, -9.9350116048568875 -11.3721466721315170, -10.1335665546817510 -11.1411241625365700, -10.5259541260263670 -10.6546054371062480, -10.7144465907463630 -10.4053377449799810, -11.0586913670932270 -9.9208137267807111, -11.2363774530641150 -9.6542845978243736, -11.5370605858822550 -9.1743479242371304, -11.7032390472997660 -8.8916092271571365, -11.9646705077958200 -8.4179202236270676, -12.1186855141924530 -8.1200877988897666, -12.3448017803830300 -7.6535709138570844, -12.4860455048912970 -7.3418201699762262, -12.6803604726844770 -6.8828325738518696, -12.8082754908518690 -6.5583938485881799, -12.9738667422375680 -6.1068640868383275, -13.0879482319261910 -5.7710177916184708, -13.2274650810198370 -5.3265562553398542, -13.3272628147087620 -4.9806278220574880, -13.4429463734285300 -4.5426126280569328, -13.5280664950561370 -4.1879672781985482, -13.6217750573947430 -3.7556097325960112, -13.6918816367286510 -3.3936470893354542, -13.7651169614795850 -2.9660408106327285, -13.8199333198798140 -2.5981893751579488, -13.8738650072355090 -2.1743467398681817, -13.9131748095786650 -1.8020582537396588, -13.9486610626131390 -1.3809373174646844, -13.9723091710683120 -1.0056810332547386, -13.9899129466204840 -0.5862055920024827, -13.9978060329073970 -0.2094624748266045))" results[9] = "POLYGON ((-15.0000000000000000 -5.0000000000000000, -15.0000000000000000 5.0000000000000000, -15.0000000000000000 5.0000000000000009, -14.8078528040323040 6.9509032201612859, -14.2387953251128680 8.8268343236508997, -13.3146961230254530 10.5557023301960220, -12.0710678118654760 12.0710678118654760, -10.5557023301960200 13.3146961230254540, -8.8268343236508962 14.2387953251128680, -6.9509032201612815 14.8078528040323040, -5.0000000000000000 15.0000000000000000, 5.0000000000000000 15.0000000000000000, 5.0000000000000009 15.0000000000000000, 6.9509032201612833 14.8078528040323040, 8.8268343236508979 14.2387953251128680, 10.5557023301960240 13.3146961230254530, 12.0710678118654760 12.0710678118654760, 13.3146961230254530 10.5557023301960220, 14.2387953251128680 8.8268343236508979, 14.8078528040323040 6.9509032201612824, 15.0000000000000000 5.0000000000000000, 15.0000000000000000 -5.0000000000000000, 14.8078528040323040 -6.9509032201612824, 14.2387953251128680 -8.8268343236508979, 13.3146961230254530 -10.5557023301960220, 12.0710678118654760 -12.0710678118654760, 10.5557023301960240 -13.3146961230254530, 8.8268343236508979 -14.2387953251128680, 6.9509032201612833 -14.8078528040323040, 5.0000000000000000 -15.0000000000000000, -5.0000000000000000 -15.0000000000000000, -5.0000000000000639 -15.0000000000000000, -6.9509032201613383 -14.8078528040322940, -8.8268343236509441 -14.2387953251128480, -10.5557023301960590 -13.3146961230254280, -12.0710678118654970 -12.0710678118654520, -13.3146961230254670 -10.5557023301960000, -14.2387953251128730 -8.8268343236508837, -14.8078528040323060 -6.9509032201612753, -15.0000000000000000 -5.0000000000000000))" results[10] = "POLYGON ((-15.0000000000000000 -5.0000000000000000, -15.0000000000000000 15.0000000000000000, -15.0000000000000000 15.0000000000000020, -14.8078528040323040 16.9509032201612870, -14.2387953251128680 18.8268343236509000, -13.3146961230254530 20.5557023301960200, -12.0710678118654760 22.0710678118654760, -10.5557023301960200 23.3146961230254560, -8.8268343236508962 24.2387953251128680, -6.9509032201612815 24.8078528040323040, -5.0000000000000000 25.0000000000000000, 5.0000000000000000 25.0000000000000000, 5.0000000000000009 25.0000000000000000, 6.9509032201612833 24.8078528040323040, 8.8268343236508979 24.2387953251128680, 10.5557023301960240 23.3146961230254530, 12.0710678118654760 22.0710678118654760, 13.3146961230254530 20.5557023301960200, 14.2387953251128680 18.8268343236509000, 14.8078528040323040 16.9509032201612830, 15.0000000000000000 15.0000000000000000, 15.0000000000000000 -5.0000000000000000, 14.8078528040323040 -6.9509032201612824, 14.2387953251128680 -8.8268343236508979, 13.3146961230254530 -10.5557023301960220, 12.0710678118654760 -12.0710678118654760, 10.5557023301960240 -13.3146961230254530, 8.8268343236508979 -14.2387953251128680, 6.9509032201612833 -14.8078528040323040, 5.0000000000000000 -15.0000000000000000, -5.0000000000000000 -15.0000000000000000, -5.0000000000000639 -15.0000000000000000, -6.9509032201613383 -14.8078528040322940, -8.8268343236509441 -14.2387953251128480, -10.5557023301960590 -13.3146961230254280, -12.0710678118654970 -12.0710678118654520, -13.3146961230254670 -10.5557023301960000, -14.2387953251128730 -8.8268343236508837, -14.8078528040323060 -6.9509032201612753, -15.0000000000000000 -5.0000000000000000))" results[11] = "POLYGON ((-4.9103744697600717 20.4695697964951080, -4.6265911438397591 22.4092633143693900, -3.9698452019385542 24.2563227847574440, -2.9653750222963513 25.9397667480551420, -1.6517818306034355 27.3949013968392060, -0.0795462765450168 28.5658067226057780, 1.6909115092562979 29.4074854903369170, 3.5915538269763281 29.8875924570076070, 5.5493400582376058 29.9876773811357820, 5.6278572670691434 29.9839766599764910, 5.9404410084800183 29.9643336045873770, 6.0189194666375911 29.9581667505497610, 6.3295917178667622 29.9288702731470690, 6.4080120619651151 29.9202388078100870, 6.7160404911374041 29.8814868828436180, 6.7943833721300617 29.8703929358921770, 7.0990668285800007 29.8224434320268090, 7.1773129165333476 29.8088897407263360, 7.4779888532593635 29.7520554974644290, 7.5561188421220180 29.7360454059854260, 7.8521697243958748 29.6706884354204090, 7.9301643367621706 29.6522258940133910, 8.2210229143039797 29.5787509122483740, 8.2988629061703705 29.5578404762691700, 8.5840162756186249 29.4766879811174930, 8.6616824411318660 29.4533348099032960, 8.9406748746620632 29.3649739222275020, 9.0181480508579579 29.3391837778238620, 9.2905826126437105 29.2441050542940030, 9.3678436841752841 29.2158843000331530, 9.6333826967564828 29.1145927067962660, 9.7104126006104234 29.0839483057270340, 9.9687770563317084 28.9769565175726380, 10.0455567865318580 28.9438960307424580, 10.2965248242413310 28.8317181910290120, 10.3730354365381460 28.7962497756183000, 10.6164400202622660 28.6793958207788830, 10.6926626368070130 28.6415282280884290, 10.9283885816910900 28.5204988489090570, 11.0043043956936800 28.4802414222007270, 11.2322848876917870 28.3555237040574820, 11.3078751680610700 28.3128863762489330, 11.5280879190573310 28.1849501332928510, 11.6033340150227030 28.1399434245067180, 11.8157971853363580 28.0092382193844500, 11.8906805310495760 27.9618732343526870, 12.0954485381516010 27.8288260558393250, 12.1699506572676110 27.7791144811632440, 12.3671099741412470 27.6441280372757700, 12.4412124843769560 27.5920821385425730, 12.6308775145774630 27.4555337120658720, 12.7045621322472930 27.4011663308222890, 12.8868712321622280 27.2634071374508340, 12.9601197766893320 27.2067316880346790, 13.1352314796513490 27.0680866739418490, 13.2080258780534090 27.0091171401722010, 13.3761153602672940 26.8698851552653440, 13.4484376516157480 26.8086360869922870, 13.6096934667481250 26.6690903717772620, 13.6815258065997650 26.6055768812919060, 13.8361469044984380 26.4659658086311750, 13.9074715692982590 26.4002035669369160, 14.0556646047481450 26.2607515845158090, 14.1264639962023550 26.1927568174617700, 14.2684409258494010 26.0536655420355350, 14.3386975752675600 25.9834550263130560, 14.4746735347063190 25.8449044464575940, 14.5443701073114550 25.7724955054608490, 14.6745615557304860 25.6346452552539970, 14.7436808549361940 25.5600557548056990, 14.8683039714141620 25.4230464264451680, 14.9368289430676240 25.3462947703884430, 15.0560982564523800 25.2102492390159580, 15.1240119930421970 25.1313543646734840, 15.2381392261114570 24.9963791035365830, 15.3054249709393450 24.9153604770380670, 15.4146180790690420 24.7815468455051470, 15.4812592303842800 24.6984244569843770, 15.5857216150722180 24.5658499478089710, 15.6517017301678930 24.4806443064715250, 15.7516316083214180 24.3493737420907800, 15.8169344075914130 24.2621058711536970, 15.9125243183881010 24.1321925416932680, 15.9771336893438410 24.0428839731978850, 16.0685701215833060 23.9143707113044610, 16.1324701228292750 23.8230434808036970, 16.2199332469519670 23.6959636704462040, 16.2831081121190200 23.6026403115676400, 16.3667716023927740 23.4770188295994300, 16.4292057440282380 23.3817223684854310, 16.5092366777428770 23.2575764590880140, 16.5709146911565170 23.1603304087144050, 16.6474735129953690 23.0376704918732220, 16.7083801800602880 22.9384988462478180, 16.7816207210942990 22.8173292621981110, 16.8417410140017690 22.7162564904405290, 16.9118105559487260 22.5965761826218490, 16.9711296409160680 22.4936272229261360, 17.0381690174452630 22.3754303623765690, 17.0966722583758680 22.2706306158580740, 17.1608159862670110 22.1539071702642650, 17.2184889483615850 22.0472824946922830, 17.2798653822779260 21.9320187454586130, 17.3366938355960580 21.8235954488763860, 17.3954253410840600 21.7097744596465110, 17.4513952640552250 21.5995792938800970, 17.5075984041521660 21.4871813339333290, 17.5626959870353720 21.3752414879909980, 17.6164817185509010 21.2642444138712640, 17.6706933668420160 21.1505875072350060, 17.7221672429814740 21.0409671058719890, 17.7754795807674670 20.9256211816828350, 17.8247419573017470 20.8173514781224110, 17.8771418305609940 20.7003449962611940, 17.9242880732093750 20.5933985289760170, 17.9757625530572330 20.4747603590413370, 18.0208832441590130 20.3691084256178740, 18.0714196300378020 20.2488678398029340, 18.1146007729376630 20.1444807156312710, 18.1641865957503650 20.0226673815014240, 18.2055098156268760 19.9195145139147410, 18.2541328408136780 19.7961584870874570, 18.2936755809398800 19.6942086672228420, 18.3413238114968810 19.5693403839519140, 18.3791595241430910 19.4685618984353610, 18.4258212035823730 19.3422121681012520, 18.4620195349622160 19.2425729324875300, 18.5076831502125930 19.1147729299955810, 18.5423101190292240 19.0162406057442370, 18.5869644032769160 18.8870218638327570, 18.6200825725636360 18.7895639604425640, 18.6637165080321770 18.6589583619025770, 18.6953851500898050 18.5625423256949950, 18.7379879707585320 18.4305820955036420, 18.7682632250880060 18.3351753864040500, 18.8098244193483880 18.2018930837735730, 18.8387594435497760 18.1074632413252770, 18.8792687567990360 17.9728917516695010, 18.9069138704722800 17.8794064513958910, 18.9463613076435170 17.7435789782162560, 18.9727641293746920 17.6510060793448100, 19.0111399574030530 17.5139561360378910, 19.0363455349606490 17.4222637214992840, 19.0736402851847980 17.2840251230878650, 19.0976912190791950 17.1931815326219460, 19.1338956895775670 17.0537883874116790, 19.1568322501631130 16.9637622445207970, 19.1919375080243530 16.8232489456844830, 19.2137977463376400 16.7340091791108880, 19.2477951298646590 16.5924103962024640, 19.2686149824063730 16.5039262565328320, 19.3014961032535020 16.3612769269331930, 19.3213094909285270 16.2735179988721090, 19.3530662361712020 16.1298533191688240, 19.3719051576045090 16.0427895299729360, 19.4025296917410370 15.8981449472760290, 19.4204243111900610 15.8117465717801500, 19.4499090780748820 15.6661577749760320, 19.4668878081547090 15.5803954376104610, 19.4952255328627900 15.4338983485562530, 19.5113151123006150 15.3487430226972870, 19.5384988029224050 15.2013737873576280, 19.5537243695492440 15.1167967923323800, 19.5797473189158460 14.9685917718609590, 19.5941324781007250 14.8845647678777500, 19.6189882654387660 14.7355605296457310, 19.6325551541602050 14.6520555109072530, 19.6562376466760860 14.5022888194808190, 19.6690069934207230 14.4192781056948980, 19.6915103478137890 14.2687859137641500, 19.7035015284816880 14.1862421402526330, 19.7248201923859630 14.0350615795140690, 19.7360512823736020 13.9529576860968060, 19.7561799957277660 13.8011260580916260, 19.7666678183519020 13.7194352768955150, 19.7856016146971290 13.5669900438060210, 19.7953617861115560 13.4856858861426880, 19.8130959938169120 13.3326646615490580, 19.8221429645666230 13.2517209039780060, 19.8386732079817140 13.0981614435777070, 19.8470203013280870 13.0175521132683690, 19.8623425018627020 12.8634923055604900, 19.8700019490058750 12.7831916650397750, 19.8841123261362970 12.6286695219766240, 19.8910952984494430 12.5486520533562530, 19.9039903706512650 12.3937057009644660, 19.9103070090348380 12.3139460897111860, 19.9219835946419370 12.1586137586847030, 19.9276430360947890 12.0790868770077160, 19.9380982540843910 11.9234068932749330, 19.9431086555816680 11.8440877831797150, 19.9523399262851770 11.6880985584471250, 19.9567084860427890 11.6089624145124030, 19.9647135317822910 11.4527024367870940, 19.9684465079802960 11.3737245887041890, 19.9752233536305330 11.2172324127974950, 19.9783260806587220 11.1383883077153140, 19.9838730541344420 10.9817025457299970, 19.9863499564155380 10.9029677304352400, 19.9906656890840250 10.7461270422385340, 19.9925202925213910 10.6674771452100130, 19.9956037195401990 10.5105202288948690, 19.9968386606294960 10.4319309422496200, 19.9986890212091420 10.2748965245865430, 19.9993060538448080 10.1963435859522380, 19.9999228914365050 10.0392704128340320, 19.9999228914365050 10.0392704128340160, 19.8154384545737300 8.0876276658361625, 19.2537522224629920 6.2094763151694643, 18.3364494820070330 4.4769926639606306, 17.0987816630922750 2.9567550873375925, 15.5883116459075030 1.7071854628109175, 13.8630859461317810 0.7763040502844447, 11.9894040198897740 0.1998841003972611, 10.0392704128340320 0.0000771085634952, 8.0876276658361785 0.1845615454262664, 6.2094763151694794 0.7462477775370040, 4.4769926639606430 1.6635505179929595, 2.9567550873376023 2.9012183369077151, 1.7071854628109246 4.4116883540924858, 0.7763040502844518 6.1369140538682041, 0.1998841003972647 8.0105959801102102, 0.0000771085634952 9.9607295871659680, -0.0003854827636063 10.0785250791770250, -0.0013100135817629 10.1569871693435840, -0.0028489305257864 10.2353232728173200, -0.0049992781425850 10.3134703745929120, -0.0077569111363205 10.3913654337257100, -0.0111164866743112 10.4689453747775760, -0.0150714544478075 10.5461470793401430, -0.0196140444524358 10.6229073776629510, -0.0247352524453730 10.6991630404167640, -0.0304248230273945 10.7748507706131530, -0.0366712302907328 10.8499071957234550, -0.0434616559648921 10.9242688600350120, -0.0507819649836831 10.9978722172844710, -0.0586166783888482 11.0706536236241910, -0.0669489434765769 11.1425493309795250, -0.0757605010840268 11.2134954808618140, -0.0850316499044404 11.2834280987154260, -0.0947412077101664 11.3522830888866830, -0.1048664693528146 11.4199962303081220, -0.1153831614023232 11.4865031730190450, -0.1195673616875290 11.5115864088718510, -0.8624638366794510 11.9548547159611670, -2.3175984854635079 13.2684479076540820, -3.4885038112300748 14.8406834617125030, -4.3301825789612103 16.6111412475138210, -4.8102895456318997 18.5117835652338520, -4.9103744697600717 20.4695697964951080))" # Note - this test is quite slow run_operation(results) do |geom| geom.buffer(10, 8) end end def test_convex_hull() results = Array.new() results[0] = "POINT (150.0000000000000000 350.0000000000000000)" results[1] = "POLYGON ((0.0000000000000000 0.0000000000000000, 0.0000000000000000 100.0000000000000000, 100.0000000000000000 100.0000000000000000, 100.0000000000000000 0.0000000000000000, 0.0000000000000000 0.0000000000000000))" results[2] = "POLYGON ((60.0000000000000000 60.0000000000000000, 60.0000000000000000 160.0000000000000000, 160.0000000000000000 160.0000000000000000, 160.0000000000000000 60.0000000000000000, 60.0000000000000000 60.0000000000000000))" results[3] = "POLYGON ((0.0000000000000000 0.0000000000000000, 0.0000000000000000 100.0000000000000000, 100.0000000000000000 100.0000000000000000, 100.0000000000000000 0.0000000000000000, 0.0000000000000000 0.0000000000000000))" results[4] = "POLYGON ((0.0000000000000000 200.0000000000000000, 0.0000000000000000 500.0000000000000000, 300.0000000000000000 500.0000000000000000, 300.0000000000000000 200.0000000000000000, 0.0000000000000000 200.0000000000000000))" results[5] = "POLYGON ((0.0000000000000000 250.0000000000000000, 0.0000000000000000 550.0000000000000000, 300.0000000000000000 550.0000000000000000, 300.0000000000000000 250.0000000000000000, 0.0000000000000000 250.0000000000000000))" results[6] = "POLYGON ((0.0000000000000000 0.0000000000000000, 0.0000000000000000 550.0000000000000000, 300.0000000000000000 550.0000000000000000, 300.0000000000000000 200.0000000000000000, 100.0000000000000000 0.0000000000000000, 0.0000000000000000 0.0000000000000000))" results[7] = "POLYGON ((-0.0000000000000000 -5.0000000000000000, -0.3100000000000000 -4.9900000000000002, -0.6300000000000000 -4.9600000000000000, -0.9400000000000000 -4.9100000000000001, -1.2400000000000000 -4.8399999999999999, -1.5500000000000000 -4.7599999999999998, -1.8400000000000001 -4.6500000000000004, -2.1299999999999999 -4.5199999999999996, -2.4100000000000001 -4.3799999999999999, -2.6800000000000002 -4.2199999999999998, -2.9399999999999999 -4.0499999999999998, -3.1899999999999999 -3.8500000000000001, -3.4199999999999999 -3.6400000000000001, -3.6400000000000001 -3.4199999999999999, -3.8500000000000001 -3.1899999999999999, -4.0499999999999998 -2.9399999999999999, -4.2199999999999998 -2.6800000000000002, -4.3799999999999999 -2.4100000000000001, -4.5199999999999996 -2.1299999999999999, -4.6500000000000004 -1.8400000000000001, -4.7599999999999998 -1.5500000000000000, -4.8399999999999999 -1.2400000000000000, -4.9100000000000001 -0.9400000000000000, -4.9600000000000000 -0.6300000000000000, -4.9900000000000002 -0.3100000000000000, -5.0000000000000000 0.0000000000000000, -4.9900000000000002 0.3100000000000000, -4.9600000000000000 0.6300000000000000, -4.9100000000000001 0.9400000000000000, -4.8399999999999999 1.2400000000000000, -4.7599999999999998 1.5500000000000000, -4.6500000000000004 1.8400000000000001, -4.5199999999999996 2.1299999999999999, -4.3799999999999999 2.4100000000000001, -4.2199999999999998 2.6800000000000002, -4.0499999999999998 2.9399999999999999, -3.8500000000000001 3.1899999999999999, -3.6400000000000001 3.4199999999999999, -3.4199999999999999 3.6400000000000001, -3.1899999999999999 3.8500000000000001, -2.9399999999999999 4.0499999999999998, -2.6800000000000002 4.2199999999999998, -2.4100000000000001 4.3799999999999999, -2.1299999999999999 4.5199999999999996, -1.8400000000000001 4.6500000000000004, -1.5500000000000000 4.7599999999999998, -1.2400000000000000 4.8399999999999999, -0.9400000000000000 4.9100000000000001, -0.6300000000000000 4.9600000000000000, -0.3100000000000000 4.9900000000000002, 0.0000000000000000 5.0000000000000000, 0.3100000000000000 4.9900000000000002, 0.6300000000000000 4.9600000000000000, 0.9400000000000000 4.9100000000000001, 1.2400000000000000 4.8399999999999999, 1.5500000000000000 4.7599999999999998, 1.8400000000000001 4.6500000000000004, 2.1299999999999999 4.5199999999999996, 2.4100000000000001 4.3799999999999999, 2.6800000000000002 4.2199999999999998, 2.9399999999999999 4.0499999999999998, 3.1899999999999999 3.8500000000000001, 3.4199999999999999 3.6400000000000001, 3.6400000000000001 3.4199999999999999, 3.8500000000000001 3.1899999999999999, 4.0499999999999998 2.9399999999999999, 4.2199999999999998 2.6800000000000002, 4.3799999999999999 2.4100000000000001, 4.5199999999999996 2.1299999999999999, 4.6500000000000004 1.8400000000000001, 4.7599999999999998 1.5500000000000000, 4.8399999999999999 1.2400000000000000, 4.9100000000000001 0.9400000000000000, 4.9600000000000000 0.6300000000000000, 4.9900000000000002 0.3100000000000000, 5.0000000000000000 0.0000000000000000, 4.9900000000000002 -0.3100000000000000, 4.9600000000000000 -0.6300000000000000, 4.9100000000000001 -0.9400000000000000, 4.8399999999999999 -1.2400000000000000, 4.7599999999999998 -1.5500000000000000, 4.6500000000000004 -1.8400000000000001, 4.5199999999999996 -2.1299999999999999, 4.3799999999999999 -2.4100000000000001, 4.2199999999999998 -2.6800000000000002, 4.0499999999999998 -2.9399999999999999, 3.8500000000000001 -3.1899999999999999, 3.6400000000000001 -3.4199999999999999, 3.4199999999999999 -3.6400000000000001, 3.1899999999999999 -3.8500000000000001, 2.9399999999999999 -4.0499999999999998, 2.6800000000000002 -4.2199999999999998, 2.4100000000000001 -4.3799999999999999, 2.1299999999999999 -4.5199999999999996, 1.8400000000000001 -4.6500000000000004, 1.5500000000000000 -4.7599999999999998, 1.2400000000000000 -4.8399999999999999, 0.9400000000000000 -4.9100000000000001, 0.6300000000000000 -4.9600000000000000, 0.3100000000000000 -4.9900000000000002, -0.0000000000000000 -5.0000000000000000))" results[8] = "POLYGON ((-0.0000000000000000 -6.0000000000000000, -0.2500000000000000 -5.9900000000000002, -0.5000000000000000 -5.9500000000000002, -0.7500000000000000 -5.8899999999999997, -0.9900000000000000 -5.8099999999999996, -1.2400000000000000 -5.7100000000000000, -1.4700000000000000 -5.5800000000000001, -1.7000000000000000 -5.4299999999999997, -1.9299999999999999 -5.2599999999999998, -2.1400000000000001 -5.0700000000000003, -2.3500000000000001 -4.8499999999999996, -2.5499999999999998 -4.6200000000000001, -2.7400000000000002 -4.3700000000000001, -2.9199999999999999 -4.1100000000000003, -3.2400000000000002 -3.5299999999999998, -3.3799999999999999 -3.2100000000000000, -3.5099999999999998 -2.8900000000000001, -3.6200000000000001 -2.5499999999999998, -3.7200000000000002 -2.2100000000000000, -3.7999999999999998 -1.8500000000000001, -3.8700000000000001 -1.4900000000000000, -3.9300000000000002 -1.1200000000000001, -3.9700000000000002 -0.7500000000000000, -3.9900000000000002 -0.3800000000000000, -4.0000000000000000 0.0000000000000000, -3.9900000000000002 0.3800000000000000, -3.9700000000000002 0.7500000000000000, -3.9300000000000002 1.1200000000000001, -3.8700000000000001 1.4900000000000000, -3.7999999999999998 1.8500000000000001, -3.7200000000000002 2.2100000000000000, -3.6200000000000001 2.5499999999999998, -3.5099999999999998 2.8900000000000001, -3.3799999999999999 3.2100000000000000, -3.2400000000000002 3.5299999999999998, -2.9199999999999999 4.1100000000000003, -2.7400000000000002 4.3700000000000001, -2.5499999999999998 4.6200000000000001, -2.3500000000000001 4.8499999999999996, -2.1400000000000001 5.0700000000000003, -1.9299999999999999 5.2599999999999998, -1.7000000000000000 5.4299999999999997, -1.4700000000000000 5.5800000000000001, -1.2400000000000000 5.7100000000000000, -0.9900000000000000 5.8099999999999996, -0.7500000000000000 5.8899999999999997, -0.5000000000000000 5.9500000000000002, -0.2500000000000000 5.9900000000000002, 0.0000000000000000 6.0000000000000000, 0.2500000000000000 5.9900000000000002, 0.5000000000000000 5.9500000000000002, 0.7500000000000000 5.8899999999999997, 0.9900000000000000 5.8099999999999996, 1.2400000000000000 5.7100000000000000, 1.4700000000000000 5.5800000000000001, 1.7000000000000000 5.4299999999999997, 1.9299999999999999 5.2599999999999998, 2.1400000000000001 5.0700000000000003, 2.3500000000000001 4.8499999999999996, 2.5499999999999998 4.6200000000000001, 2.7400000000000002 4.3700000000000001, 2.9199999999999999 4.1100000000000003, 3.2400000000000002 3.5299999999999998, 3.3799999999999999 3.2100000000000000, 3.5099999999999998 2.8900000000000001, 3.6200000000000001 2.5499999999999998, 3.7200000000000002 2.2100000000000000, 3.7999999999999998 1.8500000000000001, 3.8700000000000001 1.4900000000000000, 3.9300000000000002 1.1200000000000001, 3.9700000000000002 0.7500000000000000, 3.9900000000000002 0.3800000000000000, 4.0000000000000000 0.0000000000000000, 3.9900000000000002 -0.3800000000000000, 3.9700000000000002 -0.7500000000000000, 3.9300000000000002 -1.1200000000000001, 3.8700000000000001 -1.4900000000000000, 3.7999999999999998 -1.8500000000000001, 3.7200000000000002 -2.2100000000000000, 3.6200000000000001 -2.5499999999999998, 3.5099999999999998 -2.8900000000000001, 3.3799999999999999 -3.2100000000000000, 3.2400000000000002 -3.5299999999999998, 2.9199999999999999 -4.1100000000000003, 2.7400000000000002 -4.3700000000000001, 2.5499999999999998 -4.6200000000000001, 2.3500000000000001 -4.8499999999999996, 2.1400000000000001 -5.0700000000000003, 1.9299999999999999 -5.2599999999999998, 1.7000000000000000 -5.4299999999999997, 1.4700000000000000 -5.5800000000000001, 1.2400000000000000 -5.7100000000000000, 0.9900000000000000 -5.8099999999999996, 0.7500000000000000 -5.8899999999999997, 0.5000000000000000 -5.9500000000000002, 0.2500000000000000 -5.9900000000000002, -0.0000000000000000 -6.0000000000000000))" results[9] = "POLYGON ((-5.0000000000000000 -5.0000000000000000, -5.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 5.0000000000000000 -5.0000000000000000, -5.0000000000000000 -5.0000000000000000))" results[10] = "POLYGON ((-5.0000000000000000 -5.0000000000000000, -5.0000000000000000 15.0000000000000000, 5.0000000000000000 15.0000000000000000, 5.0000000000000000 -5.0000000000000000, -5.0000000000000000 -5.0000000000000000))" results[11] = "POLYGON ((10.0000000000000000 10.0000000000000000, 5.0000000000000000 20.0000000000000000, 6.0000000000000000 20.0000000000000000, 7.0000000000000000 19.5000000000000000, 8.0000000000000000 18.5000000000000000, 9.0000000000000000 16.5000000000000000, 9.5000000000000000 15.0000000000000000, 10.0000000000000000 13.0000000000000000, 10.0000000000000000 10.0000000000000000))" run_operation(results) do |geom| geom.convex_hull() end end endgeos-3.4.2/swig/ruby/test/test_relations.rb0000644000175000017500000003323012206417150020571 0ustar frankiefrankie#!/usr/bin/env ruby # These tests evaluate the geos relational operators require 'test/unit' require 'geos' require 'test_helper' class TestGeosRelations < Test::Unit::TestCase X = RuntimeError def setup @test_helper = GeosTestHelper.new() end def get_expected_result(value) # 0 is false and 1 is true case when value == 0 return false when value == 1 return true when value == X return X else return value end end def run_relational_operation(operation, results, &block) STDOUT << "\n" << "------ #{operation} RELATION ------" << "\n" STDOUT.flush() # Create the geometries geoms = @test_helper.create_geoms() #@test_helper.print_geoms(geoms) # Loop through the the geometries the first time row = 0 geoms.each do |geom1| # Loop through the the geometries the second time column = 0 geoms.each do |geom2| # get value value = results[row][column] expected = self.get_expected_result(value) begin # Get the actual result from the provided block result = yield(geom1, geom2) STDOUT << "#{value}\t" # Did this work? assert_equal(expected, result, "#{operation} failure. Row: #{row}. Column: #{column}") # Geometry Collection is not a valid argument rescue RuntimeError => error assert_equal(expected, RuntimeError) STDOUT << "X\t" end STDOUT.flush() column += 1 end STDOUT << "\n" STDOUT.flush() row += 1 end end def test_contains() results = Array.new() # CONTAINS [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] results[1] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] results[3] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, 0, 0, 0, 0, X] results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0] results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] results[9] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0] results[10] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0] results[11] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] self.run_relational_operation("CONTAINS", results) do |geom1, geom2| geom1.contains?(geom2) end end def test_crosses() results = Array.new() # CROSSES [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[1] = [0, 0, 1, 0, 0, 0, X, 1, 1, 1, 1, 0] results[2] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 0, 1, 0, 0, 0, X, 1, 1, 1, 1, 0] results[4] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, X, X, X, X, X] results[7] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[8] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[9] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[10] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] self.run_relational_operation("CROSSES", results) do |geom1, geom2| geom1.crosses?(geom2) end end def test_disjoint() results = Array.new() # DISJOINT [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [0, 1, 1, 1, 1, 0, X, 1, 1, 1, 1, 1] results[1] = [1, 0, 0, 0, 1, 1, X, 0, 0, 0, 0, 1] results[2] = [1, 0, 0, 0, 1, 1, X, 1, 1, 1, 1, 1] results[3] = [1, 0, 0, 0, 1, 1, X, 0, 0, 0, 0, 1] results[4] = [1, 1, 1, 1, 0, 0, X, 1, 1, 1, 1, 1] results[5] = [0, 1, 1, 1, 0, 0, X, 1, 1, 1, 1, 1] results[6] = [X, X, X, X, X, X, X, X, X, X, X, X] results[7] = [1, 0, 1, 0, 1, 1, X, 0, 0, 0, 0, 1] results[8] = [1, 0, 1, 0, 1, 1, X, 0, 0, 0, 0, 1] results[9] = [1, 0, 1, 0, 1, 1, X, 0, 0, 0, 0, 1] results[10] = [1, 0, 1, 0, 1, 1, X, 0, 0, 0, 0, 1] results[11] = [1, 1, 1, 1, 1, 1, X, 1, 1, 1, 1, 0] self.run_relational_operation("DISJOINT", results) do |geom1, geom2| geom1.disjoint?(geom2) end end def test_equals() results = Array.new() # EQUALS [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] results[1] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] results[3] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] results[6] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0] results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] results[9] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0] results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] results[11] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] self.run_relational_operation("EQUALS", results) do |geom1, geom2| geom1.eql?(geom2) end end #def test_equals_exact() ## Setup the expected results ## EQUALS_EXACT [0][1][2][3][4][5][6][7][8][9][10][11] #results[0] = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] #results[1] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] #results[2] = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0] #results[3] = [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] #results[4] = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0] #results[5] = [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] #results[6] = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0] #results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0] #results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] #results[9] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0] #results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] #results[11] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] #self.run_relational_operation("EQUALS_EXACT", results) do |geom1, geom2| #geom1.equals_exact?(geom2) #end #end def test_intersects() results = Array.new() # INTERSECTS [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [1, 0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0] results[1] = [0, 1, 1, 1, 0, 0, X, 1, 1, 1, 1, 0] results[2] = [0, 1, 1, 1, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 1, 1, 1, 0, 0, X, 1, 1, 1, 1, 0] results[4] = [0, 0, 0, 0, 1, 1, X, 0, 0, 0, 0, 0] results[5] = [1, 0, 0, 0, 1, 1, X, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, X, X, 1, 1, X] results[7] = [0, 1, 0, 1, 0, 0, X, 1, 1, 1, 1, 0] results[8] = [0, 1, 0, 1, 0, 0, X, 1, 1, 1, 1, 0] results[9] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] results[10] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 1] self.run_relational_operation("INTERSECTS", results) do |geom1, geom2| geom1.intersects?(geom2) end end #def test_is_within_distance() #results = Array.new() ## IS_WITHIN_DIST[0][1][2][3][4][5][6][7][8][9][10][11] #results[0] = [1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0] #results[1] = [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[2] = [0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0] #results[3] = [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[4] = [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0] #results[5] = [1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0] #results[6] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] #results[7] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[8] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[9] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[10] = [0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0] #results[11] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] #self.run_relational_operation("IS_WITHIN_DISTANCE", results) do |geom1, geom2| #geom1.is_within_distance?(geom2, 2) #end #end def test_overlaps() results = Array.new() # OVERLAPS [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[1] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[2] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 1, 0, X, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, X, X, X, X, X] results[7] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[8] = [0, 0, 0, 0, 0, 0, X, 1, 0, 1, 1, 0] results[9] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[10] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] self.run_relational_operation("OVERLAPS", results) do |geom1, geom2| geom1.overlaps?(geom2) end end def test_relate_pattern() results = Array.new() # RELATE [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[1] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[2] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, X, X, X, X, X] results[7] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[8] = [0, 0, 0, 0, 0, 0, X, 1, 0, 1, 1, 0] results[9] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[10] = [0, 0, 0, 0, 0, 0, X, 0, 1, 0, 0, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] self.run_relational_operation("RELATE PATTERN", results) do |geom1, geom2| geom1.relate_pattern(geom2, "212101212") end end def test_relate() results = Array.new() # ------ RELATE RELATION ------ results[0] = ["0FFFFFFF2", "FF0FFF1F2", "FF0FFF102", "FF0FFF1F2", "FF0FFF212", "F0FFFF212", nil, "FF0FFF212", "FF0FFF212", "FF0FFF212", "FF0FFF212", "FF0FFF102"] results[1] = ["FF1FFF0F2", "1FFFFFFF2", "0F1FFF102", "1FFFFFFF2", "FF1FFF212", "FF1FFF212", nil, "101FFF212", "101FFF212", "101FFF212", "101FFF212", "FF1FFF102"] results[2] = ["FF1FF00F2", "0F1FF01F2", "1FFF0FFF2", "0F1FF01F2", "FF1FF0212", "FF1FF0212", nil, "FF1FF0212", "FF1FF0212", "FF1FF0212", "FF1FF0212", "FF1FF0102"] results[3] = ["FF1FFF0F2", "1FFFFFFF2", "0F1FFF102", "1FFFFFFF2", "FF1FFF212", "FF1FFF212", nil, "101FFF212", "101FFF212", "101FFF212", "101FFF212", "FF1FFF102"] results[4] = ["FF2FF10F2", "FF2FF11F2", "FF2FF1102", "FF2FF11F2", "2FFF1FFF2", "212111212", nil, "FF2FF1212", "FF2FF1212", "FF2FF1212", "FF2FF1212", "FF2FF1102"] results[5] = ["FF20F1FF2", "FF2FF11F2", "FF2FF1102", "FF2FF11F2", "212111212", "2FFF1FFF2", nil, "FF2FF1212", "FF2FF1212", "FF2FF1212", "FF2FF1212", "FF2FF1102"] results[6] = [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] results[7] = ["FF2FF10F2", "1F20F11F2", "FF2FF1102", "1F20F11F2", "FF2FF1212", "FF2FF1212", nil, "2FFF1FFF2", "212101212", "2FF10F212", "2FF10F212", "FF2FF1102"] results[8] = ["FF2FF10F2", "1F20F11F2", "FF2FF1102", "1F20F11F2", "FF2FF1212", "FF2FF1212", nil, "212101212", "2FFF1FFF2", "212101212", "212101212", "FF2FF1102"] results[9] = ["FF2FF10F2", "1F20F11F2", "FF2FF1102", "1F20F11F2", "FF2FF1212", "FF2FF1212", nil, "212F01FF2", "212101212", "2FFF1FFF2", "2FF11F212", "FF2FF1102"] results[10] = ["FF2FF10F2", "1F20F11F2", "FF2FF1102", "1F20F11F2", "FF2FF1212", "FF2FF1212", nil, "212F01FF2", "212101212", "212F11FF2", "2FFF1FFF2", "FF2FF1102"] results[11] = ["FF1FF00F2", "FF1FF01F2", "FF1FF0102", "FF1FF01F2", "FF1FF0212", "FF1FF0212", nil, "FF1FF0212", "FF1FF0212", "FF1FF0212", "FF1FF0212", "1FFF0FFF2"] self.run_relational_operation("RELATE", results) do |geom1, geom2| geom1.relate(geom2) end end def test_touches() results = Array.new() # TOUCHES [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [0, 0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0] results[1] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[2] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[5] = [1, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[6] = [X, X, X, X, X, X, X, X, X, X, X, X] results[7] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[8] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[9] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[10] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] self.run_relational_operation("TOUCHES", results) do |geom1, geom2| geom1.touches?(geom2) end end def test_within() results = Array.new() # WITHIN [0][1][2][3][4][5][6][7][8][9][10][11] results[0] = [1, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[1] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[2] = [0, 0, 1, 0, 0, 0, X, 0, 0, 0, 0, 0] results[3] = [0, 1, 0, 1, 0, 0, X, 0, 0, 0, 0, 0] results[4] = [0, 0, 0, 0, 1, 0, X, 0, 0, 0, 0, 0] results[5] = [0, 0, 0, 0, 0, 1, X, 0, 0, 0, 0, 0] results[6] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 0] results[7] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0] results[8] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0] results[9] = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0] results[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] results[11] = [0, 0, 0, 0, 0, 0, X, 0, 0, 0, 0, 1] self.run_relational_operation("WITHIN", results) do |geom1, geom2| geom1.within?(geom2) end end endgeos-3.4.2/swig/ruby/test/test_srid.rb0000644000175000017500000000262412206417150017535 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' class SridTest < Test::Unit::TestCase def test_srid cs = Geos::CoordinateSequence.new(1,2) cs.set_x(0, 7) cs.set_y(0, 8) geom1 = Geos.create_point(cs) geom1.srid = 4326 end def test_write_srid reader = Geos::WktReader.new geom = reader.read("POINT(7 8)") geom.srid = 4326 # without srid writer = Geos::WkbWriter.new writer.include_srid = false hex = writer.write_hex(geom) assert_equal("01010000000000000000001C400000000000002040", hex) # with srid writer.include_srid = true hex = writer.write_hex(geom) assert_equal("0101000020E61000000000000000001C400000000000002040", hex) end def test_roundtrip_srid reader = Geos::WktReader.new geom1 = reader.read("POINT(7 8)") geom1.srid = 4326 assert_equal(4326, geom1.srid) writer = Geos::WkbWriter.new writer.include_srid = true hex = writer.write_hex(geom1) reader = Geos::WkbReader.new geom2 = reader.read_hex(hex) assert_equal(4326, geom2.srid) end def test_read_srid # srid=4326;POINT(7 8) xdr = "0101000020E61000000000000000001C400000000000002040" reader = Geos::WkbReader.new geom = reader.read_hex(xdr) assert_equal(7, geom.coord_seq.get_x(0)) assert_equal(8,geom.coord_seq.get_y(0)) assert_equal(4326, geom.srid) end end geos-3.4.2/swig/ruby/test/test_version.rb0000644000175000017500000000126712206417150020263 0ustar frankiefrankie#!/usr/bin/env ruby require 'test/unit' require 'geos' class TestVersion < Test::Unit::TestCase def test_versions assert_equal("3.0.0rc4-CAPI-1.3.3", Geos::version) assert_equal(3, Geos::GEOS_VERSION_MAJOR) assert_equal(0, Geos::GEOS_VERSION_MINOR) assert_equal("3.0.0rc4", Geos::GEOS_VERSION) assert_equal("1.7.1", Geos::GEOS_JTS_PORT) assert_equal(1, Geos::GEOS_CAPI_VERSION_MAJOR) assert_equal(3, Geos::GEOS_CAPI_VERSION_MINOR) assert_equal(3, Geos::GEOS_CAPI_VERSION_PATCH) assert_equal(1, Geos::GEOS_CAPI_FIRST_INTERFACE) assert_equal(4, Geos::GEOS_CAPI_LAST_INTERFACE) assert_equal("3.0.0rc4-CAPI-1.3.3", Geos::GEOS_CAPI_VERSION) end end geos-3.4.2/tests/0000755000175000017500000000000012206417241013436 5ustar frankiefrankiegeos-3.4.2/tests/CMakeLists.txt0000644000175000017500000000114412206417147016203 0ustar frankiefrankie ################################################################################# # # GEOS tests build configuration for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# add_subdirectory(unit) add_subdirectory(xmltester) add_subdirectory(bigtest) # TODO: add other test programsgeos-3.4.2/tests/Makefile.am0000644000175000017500000000027612206417147015504 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ bigtest \ xmltester \ unit \ perf \ geostest \ thread EXTRA_DIST = CMakeLists.txt geos-3.4.2/tests/Makefile.in0000644000175000017500000004475312206417165015525 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ bigtest \ xmltester \ unit \ perf \ geostest \ thread EXTRA_DIST = CMakeLists.txt all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/bigtest/0000755000175000017500000000000012206417242015100 5ustar frankiefrankiegeos-3.4.2/tests/bigtest/CMakeLists.txt0000644000175000017500000000256512206417146017653 0ustar frankiefrankie################################################################################# # # CMake configuration for GEOS big test # # Copyright (C) 2011 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# set(STATUS_MESSAGE "Enable GEOS large geometry tests build") set(STATUS_RESULT "OFF") if(GEOS_ENABLE_TESTS) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/io/markup) add_executable(bug234 bug234.cpp) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) target_link_libraries(bug234 GEOS) else() target_link_libraries(bug234 geos) endif() add_executable(TestSweepLineSpeed TestSweepLineSpeed.cpp GeometryTestFactory.cpp bigtest.h) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) target_link_libraries(TestSweepLineSpeed GEOS) else() target_link_libraries(TestSweepLineSpeed geos) endif() add_test(bug234 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bug234) add_test(TestSweepLineSpeed ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/TestSweepLineSpeed) set(STATUS_RESULT "ON") endif() message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}") geos-3.4.2/tests/bigtest/GeometryTestFactory.cpp0000644000175000017500000001004412206417146021571 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #include #include #include #include #include "bigtest.h" #define PI 3.14159265358979 using namespace geos::geom; Polygon* GeometryTestFactory::createBox(GeometryFactory *fact,double minx,double miny,int nSide,double segLen) { CoordinateSequence *pts=createBox(minx, miny, nSide, segLen); return fact->createPolygon(fact->createLinearRing(pts),NULL); } CoordinateSequence* GeometryTestFactory::createBox(double minx, double miny,int nSide,double segLen) { int i; CoordinateSequence *pts=new CoordinateArraySequence(); double maxx=minx+nSide*segLen; double maxy=miny+nSide*segLen; for(i=0;iadd(Coordinate(x,y)); } for(i=0;iadd(Coordinate(x,y)); } for(i=0;iadd(Coordinate(x,y)); } for(i=0;iadd(Coordinate(x,y)); } pts->add(pts->getAt(0)); return pts; } /** * Creates a circle * @param x the centre x coord * @param y the centre y coord * @param size the size of the envelope of the star * @param nPts the number of points in the star */ CoordinateSequence* GeometryTestFactory::createCircle(double basex,double basey,double size,int nPts) { CoordinateSequence *pts=new CoordinateArraySequence(nPts+1); double len=size/2.0; for(int i=0;iadd(Coordinate(x,y)); } pts->add(Coordinate(pts->getAt(0))); return pts; } Polygon* GeometryTestFactory::createCircle(GeometryFactory *fact,double basex,double basey,double size,int nPts) { CoordinateSequence *pts=createCircle(basex, basey, size, nPts); return fact->createPolygon(fact->createLinearRing(pts),NULL); } /** * Creates a star from a "circular" sine wave * @param basex the centre x coord * @param basey the centre y coord * @param size the size of the envelope of the star * @param armLen the length of an arm of the star * @param nArms the number of arms of the star * @param nPts the number of points in the star */ CoordinateSequence* GeometryTestFactory::createSineStar(double basex,double basey,double size,double armLen,int nArms,int nPts) { double armBaseLen=size/2-armLen; if (armBaseLen<0) armBaseLen=0.5; double angInc=2*PI/nArms; int nArmPt=nPts/nArms; if (nArmPt<5) nArmPt=5; //int nPts2=nArmPt*nArms; CoordinateSequence *pts=new CoordinateArraySequence(); double starAng=0.0; for(int iArm=0;iArmadd(*(new Coordinate(x,y))); } starAng+=angInc; } // FIXME - mloskot: The same problems as above pts->add(*(new Coordinate(pts->getAt(0)))); return pts; } Polygon* GeometryTestFactory::createSineStar(GeometryFactory *fact,double basex,double basey,double size,double armLen,int nArms,int nPts){ CoordinateSequence *pts=createSineStar(basex, basey, size, armLen, nArms, nPts); return fact->createPolygon(fact->createLinearRing(pts),NULL); } geos-3.4.2/tests/bigtest/Makefile.am0000644000175000017500000000106712206417146017143 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ top_builddir=@top_builddir@ check_PROGRAMS = bug234 check_PROGRAMS += TestSweepLineSpeed LIBS = $(top_builddir)/src/libgeos.la # -lmpatrol -lbfd -lintl -liberty -limagehlp TestSweepLineSpeed_SOURCES = TestSweepLineSpeed.cpp GeometryTestFactory.cpp bigtest.h TestSweepLineSpeed_LDADD = $(LIBS) bug234_SOURCES = bug234.cpp bug234_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include INCLUDES += -I$(top_srcdir)/src/io/markup EXTRA_DIST = CMakeLists.txt geos-3.4.2/tests/bigtest/Makefile.in0000644000175000017500000004240212206417165017153 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = bug234$(EXEEXT) TestSweepLineSpeed$(EXEEXT) subdir = tests/bigtest DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_TestSweepLineSpeed_OBJECTS = TestSweepLineSpeed.$(OBJEXT) \ GeometryTestFactory.$(OBJEXT) TestSweepLineSpeed_OBJECTS = $(am_TestSweepLineSpeed_OBJECTS) TestSweepLineSpeed_DEPENDENCIES = $(LIBS) am_bug234_OBJECTS = bug234.$(OBJEXT) bug234_OBJECTS = $(am_bug234_OBJECTS) bug234_DEPENDENCIES = $(LIBS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(TestSweepLineSpeed_SOURCES) $(bug234_SOURCES) DIST_SOURCES = $(TestSweepLineSpeed_SOURCES) $(bug234_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(top_builddir)/src/libgeos.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -lmpatrol -lbfd -lintl -liberty -limagehlp TestSweepLineSpeed_SOURCES = TestSweepLineSpeed.cpp GeometryTestFactory.cpp bigtest.h TestSweepLineSpeed_LDADD = $(LIBS) bug234_SOURCES = bug234.cpp bug234_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/io/markup EXTRA_DIST = CMakeLists.txt all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/bigtest/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/bigtest/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list TestSweepLineSpeed$(EXEEXT): $(TestSweepLineSpeed_OBJECTS) $(TestSweepLineSpeed_DEPENDENCIES) @rm -f TestSweepLineSpeed$(EXEEXT) $(CXXLINK) $(TestSweepLineSpeed_OBJECTS) $(TestSweepLineSpeed_LDADD) $(LIBS) bug234$(EXEEXT): $(bug234_OBJECTS) $(bug234_DEPENDENCIES) @rm -f bug234$(EXEEXT) $(CXXLINK) $(bug234_OBJECTS) $(bug234_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryTestFactory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestSweepLineSpeed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bug234.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/bigtest/README0000644000175000017500000000033012206417146015757 0ustar frankiefrankieThis directory is a mess, should be renamed to reflect that :) Now seriously, there's no automated test in this directory, but random tests intended for manual runs. They get built by 'make check' but not executed. geos-3.4.2/tests/bigtest/TestSweepLineSpeed.cpp0000644000175000017500000000401712206417146021325 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** **********************************************************************/ //#define _CRTDBG_MAP_ALLOC #include //#include #include #include #include #include #include "bigtest.h" using namespace geos::geom; /** * Run relate between two large geometries to test the performance * of the sweepline intersection detection algorithm */ void run(int nPts, GeometryFactory *fact) { clock_t startTime, endTime; double size=100.0; double armLen=50.0; int nArms=10; Polygon *poly=GeometryTestFactory::createSineStar(fact,0.0,0.0,size,armLen,nArms,nPts); Polygon *box=GeometryTestFactory::createSineStar(fact,0.0,size/2,size,armLen,nArms,nPts); //Polygon *box=GeometryTestFactory::createBox(fact,0,0,1,100.0); startTime=clock(); poly->intersects(box); endTime=clock(); double totalTime=(double)(endTime-startTime); printf( "n Pts: %i Executed in %6.0f ms.\n",nPts,totalTime); //cout << "n Pts: " << nPts << " Executed in " << totalTime << endl; // FIXME - mloskot: Why generated test geometries are not destroyed?" } int main(int /* argc */, char** /* argv[] */) { GeometryFactory *fact=new GeometryFactory(); run(1000,fact); run(2000,fact); run(4000,fact); run(8000,fact); run(16000,fact); run(32000,fact); run(64000,fact); run(128000,fact); run(256000,fact); run(512000,fact); run(1024000,fact); // _CrtDumpMemoryLeaks(); cout << "Done" << endl; // FIXME - mloskot: Who's gonna to eat the 'fact'? Mr. Leak! return 0; } geos-3.4.2/tests/bigtest/bigtest.h0000644000175000017500000000277012206417146016723 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** **********************************************************************/ #ifndef GEOS_BIGTEST_H #define GEOS_BIGTEST_H #include using namespace std; using namespace geos; // Forward declaration namespace geos { namespace geom { class Polygon; class CoordinateSequence; class GeometryFactory; } } class GeometryTestFactory { public: static geom::Polygon* createBox(geom::GeometryFactory *fact,double minx,double miny,int nSide,double segLen); static geom::CoordinateSequence* createBox(double minx,double miny,int nSide,double segLen); static geom::CoordinateSequence* createCircle(double basex,double basey,double size,int nPts); static geom::Polygon* createCircle(geom::GeometryFactory *fact,double basex,double basey,double size,int nPts); static geom::CoordinateSequence* createSineStar(double basex,double basey,double size,double armLen,int nArms,int nPts); static geom::Polygon* createSineStar(geom::GeometryFactory *fact,double basex,double basey,double size,double armLen,int nArms,int nPts); }; #endif geos-3.4.2/tests/bigtest/bug234.cpp0000644000175000017500000000305212206417146016615 0ustar frankiefrankie#include #include "geos/geom/GeometryFactory.h" #include "geos/geom/Geometry.h" #include "geos/geom/Coordinate.h" #include "geos/geom/CoordinateArraySequence.h" #include "geos/geom/LinearRing.h" #include "geos/geom/Polygon.h" #include "geos/geom/MultiPolygon.h" using namespace geos::geom; using namespace std; int main() { GeometryFactory factory; vector< Geometry * > *polys1 = new vector(); vector< Geometry * > *polys2 = new vector(); vector< Geometry * > *holes1 = new vector(); CoordinateArraySequence coords1; coords1.add(Coordinate(1, 1)); coords1.add(Coordinate(1, 5)); coords1.add(Coordinate(5, 5)); coords1.add(Coordinate(5, 1)); coords1.add(Coordinate(1, 1)); holes1->push_back( factory.createLinearRing() ); polys1->push_back( factory.createPolygon(factory.createLinearRing(coords1), holes1) ); CoordinateArraySequence coords2; coords2.add(Coordinate(3, 3)); coords2.add(Coordinate(3, 4)); coords2.add(Coordinate(4, 4)); coords2.add(Coordinate(4, 3)); coords2.add(Coordinate(3, 3)); polys2->push_back( factory.createPolygon(factory.createLinearRing(coords2), new vector) ); MultiPolygon *mpoly1 = factory.createMultiPolygon(polys1); MultiPolygon *mpoly2 = factory.createMultiPolygon(polys2); cout << " Mpoly1: " << mpoly1->toString() << endl; cout << " Mpoly2: " << mpoly2->toString() << endl; Geometry *intersection = mpoly1->intersection(mpoly2); cout << "Intersection: " << intersection->toString() << endl; delete mpoly1; delete mpoly2; delete intersection; } geos-3.4.2/tests/geostest/0000755000175000017500000000000012206417244015276 5ustar frankiefrankiegeos-3.4.2/tests/geostest/Makefile.am0000644000175000017500000000074012206417147017335 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi EXTRA_DIST = \ brokengrammar \ test.wkt \ test.expected \ testrunner.sh # TODO: Enable if sample input WKT file is provided #TESTS = geostest check_PROGRAMS = geostest # The -lstdc++ is needed for --disable-shared to work geostest_SOURCES = geostest.c geostest_LDADD = $(top_builddir)/capi/libgeos_c.la -lstdc++ geos-3.4.2/tests/geostest/Makefile.in0000644000175000017500000004016412206417165017352 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = geostest$(EXEEXT) subdir = tests/geostest DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_geostest_OBJECTS = geostest.$(OBJEXT) geostest_OBJECTS = $(am_geostest_OBJECTS) geostest_DEPENDENCIES = $(top_builddir)/capi/libgeos_c.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(geostest_SOURCES) DIST_SOURCES = $(geostest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi EXTRA_DIST = \ brokengrammar \ test.wkt \ test.expected \ testrunner.sh # The -lstdc++ is needed for --disable-shared to work geostest_SOURCES = geostest.c geostest_LDADD = $(top_builddir)/capi/libgeos_c.la -lstdc++ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/geostest/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/geostest/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list geostest$(EXEEXT): $(geostest_OBJECTS) $(geostest_DEPENDENCIES) @rm -f geostest$(EXEEXT) $(LINK) $(geostest_OBJECTS) $(geostest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geostest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/geostest/brokengrammar0000644000175000017500000000022212206417147020046 0ustar frankiefrankieMULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3)),((78 45,65 34,100 54,78 45),(4 65, 54 23, 544 346, 2 1, 4 65))) geos-3.4.2/tests/geostest/geostest.c0000644000175000017500000002131112206417147017277 0ustar frankiefrankie/************************************************************************ * * * Test for C-Wrapper of GEOS library * * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * ***********************************************************************/ #define _GNU_SOURCE #include #include #include #include "geos_c.h" #define MAXWKTLEN 1047551 void usage(char *me) { fprintf(stderr, "Usage: %s \n", me); exit(1); } void notice(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void log_and_exit(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); exit(1); } GEOSGeometry* fineGrainedReconstructionTest(const GEOSGeometry* g1) { GEOSCoordSequence* cs; GEOSGeometry* g2; GEOSGeometry* shell; const GEOSGeometry* gtmp; GEOSGeometry**geoms; unsigned int ngeoms, i; int type; /* Geometry reconstruction from CoordSeq */ type = GEOSGeomTypeId(g1); switch ( type ) { case GEOS_POINT: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createPoint(cs); return g2; break; case GEOS_LINESTRING: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createLineString(cs); return g2; break; case GEOS_LINEARRING: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createLinearRing(cs); return g2; break; case GEOS_POLYGON: gtmp = GEOSGetExteriorRing(g1); cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(gtmp)); shell = GEOSGeom_createLinearRing(cs); ngeoms = GEOSGetNumInteriorRings(g1); geoms = malloc(ngeoms*sizeof(GEOSGeometry*)); for (i=0; i>4], hex[bytes[i]&0x0F]); } } int do_all(char *inputfile) { GEOSGeometry* g1; GEOSGeometry* g2; GEOSGeometry* g3; GEOSGeometry* g4; const GEOSGeometry **gg; unsigned int npoints, ndims; static char wkt[MAXWKTLEN]; FILE *input; char *ptr; unsigned char* uptr; size_t size; double dist, area; input = fopen(inputfile, "r"); if ( ! input ) { perror("fopen"); exit(1); } size = fread(wkt, 1, MAXWKTLEN-1, input); fclose(input); if ( ! size ) { perror("fread"); exit(1); } if ( size == MAXWKTLEN-1 ) { perror("WKT input too big!"); exit(1); } wkt[size] = '\0'; /* ensure it is null terminated */ /* WKT input */ g1 = GEOSGeomFromWKT(wkt); /* WKT output */ ptr = GEOSGeomToWKT(g1); printf("Input (WKT): %s\n", ptr); free(ptr); /* WKB output */ uptr = GEOSGeomToWKB_buf(g1, &size); printf("Input (WKB): "); printHEX(stdout, uptr, size); putchar('\n'); /* WKB input */ g2 = GEOSGeomFromWKB_buf(uptr, size); free(uptr); if ( ! GEOSEquals(g1, g2) ) log_and_exit("Round WKB conversion failed"); GEOSGeom_destroy(g2); /* Size and dimension */ npoints = GEOSGetNumCoordinates(g1); ndims = GEOSGeom_getDimensions(g1); printf("Geometry coordinates: %dx%d\n", npoints, ndims); /* Geometry fine-grained deconstruction/reconstruction test */ g2 = fineGrainedReconstructionTest(g1); if ( ! GEOSEquals(g1, g2) ) { log_and_exit("Reconstruction test failed\n"); } GEOSGeom_destroy(g2); /* Unary predicates */ if ( GEOSisEmpty(g1) ) printf("isEmpty\n"); if ( GEOSisValid(g1) ) printf("isValid\n"); if ( GEOSisSimple(g1) ) printf("isSimple\n"); if ( GEOSisRing(g1) ) printf("isRing\n"); /* Convex Hull */ g2 = GEOSConvexHull(g1); if ( ! g2 ) { log_and_exit("GEOSConvexHull() raised an exception"); } ptr = GEOSGeomToWKT(g2); printf("ConvexHull: %s\n", ptr); free(ptr); /* Buffer */ GEOSGeom_destroy(g1); g1 = GEOSBuffer(g2, 100, 30); if ( ! g1 ) { log_and_exit("GEOSBuffer() raised an exception"); } ptr = GEOSGeomToWKT(g1); printf("Buffer: %s\n", ptr); free(ptr); /* Intersection */ g3 = GEOSIntersection(g1, g2); if ( ! GEOSEquals(g3, g2) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); log_and_exit("Intersection(g, Buffer(g)) didn't return g"); } ptr = GEOSGeomToWKT(g3); printf("Intersection: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* Difference */ g3 = GEOSDifference(g1, g2); ptr = GEOSGeomToWKT(g3); printf("Difference: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* SymDifference */ g3 = GEOSSymDifference(g1, g2); ptr = GEOSGeomToWKT(g3); printf("SymDifference: %s\n", ptr); free(ptr); /* Boundary */ g4 = GEOSBoundary(g3); ptr = GEOSGeomToWKT(g4); printf("Boundary: %s\n", ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g4); free(ptr); /* Union */ g3 = GEOSUnion(g1, g2); if ( ! GEOSEquals(g3, g1) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); log_and_exit("Union(g, Buffer(g)) didn't return Buffer(g)"); } ptr = GEOSGeomToWKT(g3); printf("Union: %s\n", ptr); free(ptr); /* PointOnSurcace */ g4 = GEOSPointOnSurface(g3); ptr = GEOSGeomToWKT(g4); printf("PointOnSurface: %s\n", ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g4); free(ptr); /* Centroid */ g3 = GEOSGetCentroid(g2); ptr = GEOSGeomToWKT(g3); printf("Centroid: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* Relate (and RelatePattern )*/ ptr = GEOSRelate(g1, g2); if ( ! GEOSRelatePattern(g1, g2, ptr) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); free(ptr); log_and_exit("! RelatePattern(g1, g2, Relate(g1, g2))"); } printf("Relate: %s\n", ptr); free(ptr); /* Polygonize */ gg = (const GEOSGeometry**)malloc(2*sizeof(GEOSGeometry*)); gg[0] = g1; gg[1] = g2; g3 = GEOSPolygonize(gg, 2); free(gg); if ( ! g3 ) { log_and_exit("Exception running GEOSPolygonize"); } ptr = GEOSGeomToWKT(g3); GEOSGeom_destroy(g3); printf("Polygonize: %s\n", ptr); free(ptr); /* LineMerge */ g3 = GEOSLineMerge(g1); if ( ! g3 ) { log_and_exit("Exception running GEOSLineMerge"); } ptr = GEOSGeomToWKT(g3); printf("LineMerge: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); /* Binary predicates */ if ( GEOSIntersects(g1, g2) ) printf("Intersect\n"); if ( GEOSDisjoint(g1, g2) ) printf("Disjoint\n"); if ( GEOSTouches(g1, g2) ) printf("Touches\n"); if ( GEOSCrosses(g1, g2) ) printf("Crosses\n"); if ( GEOSWithin(g1, g2) ) printf("Within\n"); if ( GEOSContains(g1, g2) ) printf("Contains\n"); if ( GEOSOverlaps(g1, g2) ) printf("Overlaps\n"); /* Distance */ if ( GEOSDistance(g1, g2, &dist) ) printf("Distance: %g\n", dist); /* Hausdorff Distance */ if ( GEOSHausdorffDistance(g1, g2, &dist) ) printf("HausdorffDistance: %g\n", dist); /* Hausdorff Distance with densification */ if ( GEOSHausdorffDistanceDensify(g1, g2, 0.001, &dist) ) printf("HausdorffDistanceDensify: %g\n", dist); /* Area */ if ( GEOSArea(g1, &area) ) printf("Area 1: %g\n", area); if ( GEOSArea(g2, &area) ) printf("Area 2: %g\n", area); GEOSGeom_destroy(g2); /* Simplify */ g3 = GEOSSimplify(g1, 0.5); ptr = GEOSGeomToWKT(g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); /* Topology Preserve Simplify */ g3 = GEOSTopologyPreserveSimplify(g1, 0.5); ptr = GEOSGeomToWKT(g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g1); return 0; } int main(int argc, char **argv) { int i, n=1; initGEOS(notice, log_and_exit); printf("GEOS version %s\n", GEOSversion()); if ( argc < 2 ) usage(argv[0]); if ( argc > 2 ) n=atoi(argv[2]); if ( ! n ) n=1; for (i=0; i ${runner} #!/bin/sh ./geostest ${srcdir}/test.wkt > test.out ret=\$? if test "\$ret" -ne "0"; then echo "geostest exited with non-zero status (\$ret)" fi # It's enough that it doesn't segfault for now... # computing a diff doesn't currently work as geostest # was not initially made taking arch differences into # account diff ${srcdir}/test.expected test.out >&2 exit \$ret EOF chmod +x ${runner} echo "Runner: ${runner} created" geos-3.4.2/tests/perf/0000755000175000017500000000000012206417243014374 5ustar frankiefrankiegeos-3.4.2/tests/perf/ClassSizes.cpp0000644000175000017500000000231212206417147017164 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * - Monitor class sizes * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace geos; #define check(x) \ { cout << "Size of " << #x << " is " << sizeof(x) << endl; } int main() { check(geomgraph::PlanarGraph); check(geomgraph::EdgeEnd); check(geomgraph::DirectedEdge); check(noding::NodedSegmentString); check(int64); } geos-3.4.2/tests/perf/Makefile.am0000644000175000017500000000031512206417147016432 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ operation \ capi INCLUDES = -I$(top_srcdir)/include noinst_PROGRAMS = ClassSizes ClassSizes_SOURCES = ClassSizes.cpp geos-3.4.2/tests/perf/Makefile.in0000644000175000017500000005247412206417165016460 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = ClassSizes$(EXEEXT) subdir = tests/perf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_ClassSizes_OBJECTS = ClassSizes.$(OBJEXT) ClassSizes_OBJECTS = $(am_ClassSizes_OBJECTS) ClassSizes_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(ClassSizes_SOURCES) DIST_SOURCES = $(ClassSizes_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # SUBDIRS = \ operation \ capi INCLUDES = -I$(top_srcdir)/include ClassSizes_SOURCES = ClassSizes.cpp all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/perf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/perf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ClassSizes$(EXEEXT): $(ClassSizes_OBJECTS) $(ClassSizes_DEPENDENCIES) @rm -f ClassSizes$(EXEEXT) $(CXXLINK) $(ClassSizes_OBJECTS) $(ClassSizes_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClassSizes.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/perf/capi/0000755000175000017500000000000012206417244015311 5ustar frankiefrankiegeos-3.4.2/tests/perf/capi/Makefile.am0000644000175000017500000000054112206417147017347 0ustar frankiefrankie# # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ top_builddir=@top_builddir@ check_PROGRAMS = memleak_mp_prep LIBS = $(top_builddir)/capi/libgeos_c.la INCLUDES = -I$(top_builddir)/capi -I$(top_srcdir)/include memleak_mp_prep_SOURCES = memleak_mp_prep.c memleak_mp_prep_LDADD = $(LIBS) geos-3.4.2/tests/perf/capi/Makefile.in0000644000175000017500000004006212206417165017362 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = memleak_mp_prep$(EXEEXT) subdir = tests/perf/capi DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_memleak_mp_prep_OBJECTS = memleak_mp_prep.$(OBJEXT) memleak_mp_prep_OBJECTS = $(am_memleak_mp_prep_OBJECTS) memleak_mp_prep_DEPENDENCIES = $(LIBS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(memleak_mp_prep_SOURCES) DIST_SOURCES = $(memleak_mp_prep_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(top_builddir)/capi/libgeos_c.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I$(top_builddir)/capi -I$(top_srcdir)/include memleak_mp_prep_SOURCES = memleak_mp_prep.c memleak_mp_prep_LDADD = $(LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/perf/capi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/perf/capi/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list memleak_mp_prep$(EXEEXT): $(memleak_mp_prep_OBJECTS) $(memleak_mp_prep_DEPENDENCIES) @rm -f memleak_mp_prep$(EXEEXT) $(LINK) $(memleak_mp_prep_OBJECTS) $(memleak_mp_prep_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memleak_mp_prep.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/perf/capi/memleak_mp_prep.c0000644000175000017500000000146012206417147020615 0ustar frankiefrankie#include #include #include "geos_c.h" int main(void) { GEOSWKTReader *reader; GEOSGeometry *mp; GEOSGeometry *p; const GEOSPreparedGeometry *prep_mp; unsigned long int i; unsigned long int count = 1e6; initGEOS(NULL, NULL); reader = GEOSWKTReader_create(); mp = GEOSWKTReader_read(reader, "MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))"); p = GEOSWKTReader_read(reader, "POLYGON((2 2, 6 2, 6 6, 2 6, 2 2))"); assert(GEOSisValid(mp)); assert(GEOSisValid(p)); prep_mp = GEOSPrepare(mp); for (i=0; i/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/perf/operation/buffer/0000755000175000017500000000000012206417244017646 5ustar frankiefrankiegeos-3.4.2/tests/perf/operation/buffer/IteratedBufferStressTest.cpp0000644000175000017500000000406612206417147025321 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: perf/operation/buffer/IteratedBufferStressTest.java rev 1.1 * * - Added exit condition when number of vertices is zero * **********************************************************************/ #include #include #include #include #include #include using namespace geos::geom; using namespace geos::io; using namespace std; typedef auto_ptr GeomPtr; GeomPtr doBuffer(const Geometry& g, double dist) { cout << "Buffering with dist = " << dist << endl; GeomPtr buf ( g.buffer(dist) ); cout << "Buffer result has " << buf->getNumPoints() << " vertices" << endl; //cout << *buf << endl; return buf; } // throws Exception void run(const Geometry* base) { GeomPtr tmp; // profile here geos::util::Profile totalSW("buffer"); double dist = 1.0; while (true) { totalSW.start(); GeomPtr b1 = doBuffer(*base, dist); GeomPtr b2 = doBuffer(*b1, -dist); totalSW.stop(); cout << "---------------------- " << totalSW << endl; // totalSW.getTimeString() << endl; dist += 1; base = b2.get(); tmp = b2; if ( ! base->getNumPoints() ) break; } } int main() { PrecisionModel pm; GeometryFactory gf(&pm); WKTReader rdr(&gf); string inputWKT = "POLYGON ((110 320, 190 220, 60 200, 180 120, 120 40, 290 150, 410 40, 410 230, 500 340, 320 310, 260 370, 220 310, 110 320), (220 260, 250 180, 290 220, 360 150, 350 250, 260 280, 220 260))"; GeomPtr base ( rdr.read(inputWKT) ); run(base.get()); } geos-3.4.2/tests/perf/operation/buffer/Makefile.am0000644000175000017500000000062712206417147021711 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ top_builddir=@top_builddir@ noinst_PROGRAMS = IteratedBufferStressTest LIBS = $(top_builddir)/src/libgeos.la IteratedBufferStressTest_SOURCES = IteratedBufferStressTest.cpp IteratedBufferStressTest_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include INCLUDES += -I$(top_srcdir)/src/io/markup geos-3.4.2/tests/perf/operation/buffer/Makefile.in0000644000175000017500000004052512206417166021724 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = IteratedBufferStressTest$(EXEEXT) subdir = tests/perf/operation/buffer DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_IteratedBufferStressTest_OBJECTS = \ IteratedBufferStressTest.$(OBJEXT) IteratedBufferStressTest_OBJECTS = \ $(am_IteratedBufferStressTest_OBJECTS) IteratedBufferStressTest_DEPENDENCIES = $(LIBS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(IteratedBufferStressTest_SOURCES) DIST_SOURCES = $(IteratedBufferStressTest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(top_builddir)/src/libgeos.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ IteratedBufferStressTest_SOURCES = IteratedBufferStressTest.cpp IteratedBufferStressTest_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/io/markup all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/perf/operation/buffer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/perf/operation/buffer/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list IteratedBufferStressTest$(EXEEXT): $(IteratedBufferStressTest_OBJECTS) $(IteratedBufferStressTest_DEPENDENCIES) @rm -f IteratedBufferStressTest$(EXEEXT) $(CXXLINK) $(IteratedBufferStressTest_OBJECTS) $(IteratedBufferStressTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IteratedBufferStressTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/perf/operation/predicate/0000755000175000017500000000000012206417244020335 5ustar frankiefrankiegeos-3.4.2/tests/perf/operation/predicate/Makefile.am0000644000175000017500000000064312206417147022376 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix=@prefix@ top_srcdir=@top_srcdir@ top_builddir=@top_builddir@ noinst_PROGRAMS = RectangleIntersectsPerfTest LIBS = $(top_builddir)/src/libgeos.la RectangleIntersectsPerfTest_SOURCES = RectangleIntersectsPerfTest.cpp RectangleIntersectsPerfTest_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include INCLUDES += -I$(top_srcdir)/src/io/markup geos-3.4.2/tests/perf/operation/predicate/Makefile.in0000644000175000017500000004062412206417166022413 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = RectangleIntersectsPerfTest$(EXEEXT) subdir = tests/perf/operation/predicate DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_RectangleIntersectsPerfTest_OBJECTS = \ RectangleIntersectsPerfTest.$(OBJEXT) RectangleIntersectsPerfTest_OBJECTS = \ $(am_RectangleIntersectsPerfTest_OBJECTS) RectangleIntersectsPerfTest_DEPENDENCIES = $(LIBS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(RectangleIntersectsPerfTest_SOURCES) DIST_SOURCES = $(RectangleIntersectsPerfTest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(top_builddir)/src/libgeos.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ RectangleIntersectsPerfTest_SOURCES = RectangleIntersectsPerfTest.cpp RectangleIntersectsPerfTest_LDADD = $(LIBS) INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/io/markup all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/perf/operation/predicate/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/perf/operation/predicate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list RectangleIntersectsPerfTest$(EXEEXT): $(RectangleIntersectsPerfTest_OBJECTS) $(RectangleIntersectsPerfTest_DEPENDENCIES) @rm -f RectangleIntersectsPerfTest$(EXEEXT) $(CXXLINK) $(RectangleIntersectsPerfTest_OBJECTS) $(RectangleIntersectsPerfTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RectangleIntersectsPerfTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/perf/operation/predicate/RectangleIntersectsPerfTest.cpp0000644000175000017500000001001512206417147026465 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: perf/operation/predicate/RectangleIntersectsPerfTest.java r378 (JTS-1.12) * **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace geos::geom; using namespace geos::io; using namespace std; class RectangleIntersectsPerfTest { public: RectangleIntersectsPerfTest() : pm(), fact(&pm, 0) {} void test(int nPts) { double size = 100; Coordinate origin(0, 0); auto_ptr sinePoly ( createSineStar(origin, size, nPts)->getBoundary() ); /** * Make the geometry "crinkly" by rounding off the points. * This defeats the MonotoneChain optimization in the full relate * algorithm, and provides a more realistic test. */ using geos::precision::SimpleGeometryPrecisionReducer; PrecisionModel pm(size/10); SimpleGeometryPrecisionReducer reducer(&pm); auto_ptr sinePolyCrinkly ( reducer.reduce(sinePoly.get()) ); sinePoly.reset(); Geometry& target = *sinePolyCrinkly; testRectangles(target, 30, 5); } private: static const int MAX_ITER = 10; static const int NUM_AOI_PTS = 2000; static const int NUM_LINES = 5000; static const int NUM_LINE_PTS = 1000; PrecisionModel pm; GeometryFactory fact; void testRectangles(const Geometry& target, int nRect, double rectSize) { vector rects; createRectangles(*target.getEnvelopeInternal(), nRect, rectSize, rects); test(rects, target); for (vector::iterator i=rects.begin(), n=rects.end(); i!=n; ++i) delete *i; } void test(vector& rect, const Geometry& g) { typedef vector::size_type size_type; geos::util::Profile sw(""); sw.start(); for (int i = 0; i < MAX_ITER; i++) { for (size_type j = 0; j < rect.size(); j++) { rect[j]->intersects(&g); } } sw.stop(); cout << g.getNumPoints() << " points: " << sw.getTot() << " usecs" << endl; } // Push newly created geoms to rectLit void createRectangles(const Envelope& env, int nRect, double rectSize, vector& rectList) { int nSide = 1 + (int)sqrt((double) nRect); double dx = env.getWidth() / nSide; double dy = env.getHeight() / nSide; for (int i = 0; i < nSide; i++) { for (int j = 0; j < nSide; j++) { double baseX = env.getMinX() + i * dx; double baseY = env.getMinY() + j * dy; Envelope envRect( baseX, baseX + dx, baseY, baseY + dy); Geometry* rect = fact.toGeometry(&envRect); rectList.push_back(rect); } } } auto_ptr createSineStar(const Coordinate& origin, double size, int nPts) { using geos::geom::util::SineStarFactory; SineStarFactory gsf(&fact); gsf.setCentre(origin); gsf.setSize(size); gsf.setNumPoints(nPts); gsf.setArmLengthRatio(2); gsf.setNumArms(20); auto_ptr poly = gsf.createSineStar(); return poly; } }; int main() { RectangleIntersectsPerfTest tester; tester.test(500); tester.test(100000); } geos-3.4.2/tests/thread/0000755000175000017500000000000012206417244014710 5ustar frankiefrankiegeos-3.4.2/tests/thread/Makefile.am0000644000175000017500000000115612206417146016750 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi # TODO: Enable if sample input WKT file is provided #TESTS = threadtest badthreadtest check_PROGRAMS = threadtest badthreadtest # The -lstdc++ is needed for --disable-shared to work threadtest_SOURCES = threadtest.c threadtest_LDADD = $(top_builddir)/capi/libgeos_c.la -lpthread -lstdc++ # The -lstdc++ is needed for --disable-shared to work badthreadtest_SOURCES = badthreadtest.c badthreadtest_LDADD = $(top_builddir)/capi/libgeos_c.la -lpthread -lstdc++ geos-3.4.2/tests/thread/Makefile.in0000644000175000017500000004134512206417166016767 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = threadtest$(EXEEXT) badthreadtest$(EXEEXT) subdir = tests/thread DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_badthreadtest_OBJECTS = badthreadtest.$(OBJEXT) badthreadtest_OBJECTS = $(am_badthreadtest_OBJECTS) badthreadtest_DEPENDENCIES = $(top_builddir)/capi/libgeos_c.la am_threadtest_OBJECTS = threadtest.$(OBJEXT) threadtest_OBJECTS = $(am_threadtest_OBJECTS) threadtest_DEPENDENCIES = $(top_builddir)/capi/libgeos_c.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(badthreadtest_SOURCES) $(threadtest_SOURCES) DIST_SOURCES = $(badthreadtest_SOURCES) $(threadtest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi # The -lstdc++ is needed for --disable-shared to work threadtest_SOURCES = threadtest.c threadtest_LDADD = $(top_builddir)/capi/libgeos_c.la -lpthread -lstdc++ # The -lstdc++ is needed for --disable-shared to work badthreadtest_SOURCES = badthreadtest.c badthreadtest_LDADD = $(top_builddir)/capi/libgeos_c.la -lpthread -lstdc++ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/thread/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/thread/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list badthreadtest$(EXEEXT): $(badthreadtest_OBJECTS) $(badthreadtest_DEPENDENCIES) @rm -f badthreadtest$(EXEEXT) $(LINK) $(badthreadtest_OBJECTS) $(badthreadtest_LDADD) $(LIBS) threadtest$(EXEEXT): $(threadtest_OBJECTS) $(threadtest_DEPENDENCIES) @rm -f threadtest$(EXEEXT) $(LINK) $(threadtest_OBJECTS) $(threadtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/badthreadtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threadtest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/thread/badthreadtest.c0000644000175000017500000002354612206417146017705 0ustar frankiefrankie/************************************************************************ * * * Test for C-Wrapper of GEOS library * * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * ***********************************************************************/ #define _GNU_SOURCE #include #include #include #include #include #include "geos_c.h" #define MAXWKTLEN 1047551 void usage(char *me) { fprintf(stderr, "Usage: %s \n", me); exit(1); } void notice1(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE1: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void notice2(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE2: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void notice(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void log_and_exit(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); exit(1); } void log_and_exit1(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR1: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); pthread_exit(NULL); } void log_and_exit2(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR2: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); pthread_exit(NULL); } GEOSGeometry* fineGrainedReconstructionTest(const GEOSGeometry* g1) { GEOSCoordSequence* cs; GEOSGeometry* g2; GEOSGeometry* shell; const GEOSGeometry* gtmp; GEOSGeometry**geoms; unsigned int ngeoms, i; int type; /* Geometry reconstruction from CoordSeq */ type = GEOSGeomTypeId(g1); switch ( type ) { case GEOS_POINT: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createPoint(cs); return g2; break; case GEOS_LINESTRING: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createLineString(cs); return g2; break; case GEOS_LINEARRING: cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(g1)); g2 = GEOSGeom_createLinearRing(cs); return g2; break; case GEOS_POLYGON: gtmp = GEOSGetExteriorRing(g1); cs = GEOSCoordSeq_clone(GEOSGeom_getCoordSeq(gtmp)); shell = GEOSGeom_createLinearRing(cs); ngeoms = GEOSGetNumInteriorRings(g1); geoms = malloc(ngeoms*sizeof(GEOSGeometry*)); for (i=0; i>4], hex[bytes[i]&0x0F]); } } int do_all(char *inputfile) { GEOSGeometry* g1; GEOSGeometry* g2; GEOSGeometry* g3; GEOSGeometry* g4; const GEOSGeometry **gg; unsigned int npoints, ndims; static char wkt[MAXWKTLEN]; FILE *input; char *ptr; unsigned char* uptr; size_t size; double dist, area; input = fopen(inputfile, "r"); if ( ! input ) { perror("fopen"); exit(1); } size = fread(wkt, 1, MAXWKTLEN-1, input); fclose(input); if ( ! size ) { perror("fread"); exit(1); } if ( size == MAXWKTLEN-1 ) { perror("WKT input too big!"); exit(1); } wkt[size] = '\0'; /* ensure it is null terminated */ /* WKT input */ g1 = GEOSGeomFromWKT(wkt); /* WKT output */ ptr = GEOSGeomToWKT(g1); printf("Input (WKT): %s\n", ptr); free(ptr); /* WKB output */ uptr = GEOSGeomToWKB_buf(g1, &size); printf("Input (WKB): "); printHEX(stdout, uptr, size); putchar('\n'); /* WKB input */ g2 = GEOSGeomFromWKB_buf(uptr, size); free(uptr); if ( ! GEOSEquals(g1, g2) ) log_and_exit("Round WKB conversion failed"); GEOSGeom_destroy(g2); /* Size and dimension */ npoints = GEOSGetNumCoordinates(g1); ndims = GEOSGeom_getDimensions(g1); printf("Geometry coordinates: %dx%d\n", npoints, ndims); /* Geometry fine-grained deconstruction/reconstruction test */ g2 = fineGrainedReconstructionTest(g1); if ( ! GEOSEquals(g1, g2) ) { log_and_exit("Reconstruction test failed\n"); } GEOSGeom_destroy(g2); /* Unary predicates */ if ( GEOSisEmpty(g1) ) printf("isEmpty\n"); if ( GEOSisValid(g1) ) printf("isValid\n"); if ( GEOSisSimple(g1) ) printf("isSimple\n"); if ( GEOSisRing(g1) ) printf("isRing\n"); /* Convex Hull */ g2 = GEOSConvexHull(g1); if ( ! g2 ) { log_and_exit("GEOSConvexHull() raised an exception"); } ptr = GEOSGeomToWKT(g2); printf("ConvexHull: %s\n", ptr); free(ptr); /* Buffer */ GEOSGeom_destroy(g1); g1 = GEOSBuffer(g2, 100, 30); if ( ! g1 ) { log_and_exit("GEOSBuffer() raised an exception"); } ptr = GEOSGeomToWKT(g1); printf("Buffer: %s\n", ptr); free(ptr); /* Intersection */ g3 = GEOSIntersection(g1, g2); if ( ! GEOSEquals(g3, g2) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); log_and_exit("Intersection(g, Buffer(g)) didn't return g"); } ptr = GEOSGeomToWKT(g3); printf("Intersection: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* Difference */ g3 = GEOSDifference(g1, g2); ptr = GEOSGeomToWKT(g3); printf("Difference: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* SymDifference */ g3 = GEOSSymDifference(g1, g2); ptr = GEOSGeomToWKT(g3); printf("SymDifference: %s\n", ptr); free(ptr); /* Boundary */ g4 = GEOSBoundary(g3); ptr = GEOSGeomToWKT(g4); printf("Boundary: %s\n", ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g4); free(ptr); /* Union */ g3 = GEOSUnion(g1, g2); if ( ! GEOSEquals(g3, g1) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); GEOSGeom_destroy(g3); log_and_exit("Union(g, Buffer(g)) didn't return Buffer(g)"); } ptr = GEOSGeomToWKT(g3); printf("Union: %s\n", ptr); free(ptr); /* PointOnSurcace */ g4 = GEOSPointOnSurface(g3); ptr = GEOSGeomToWKT(g4); printf("PointOnSurface: %s\n", ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g4); free(ptr); /* Centroid */ g3 = GEOSGetCentroid(g2); ptr = GEOSGeomToWKT(g3); printf("Centroid: %s\n", ptr); GEOSGeom_destroy(g3); free(ptr); /* Relate (and RelatePattern )*/ ptr = GEOSRelate(g1, g2); if ( ! GEOSRelatePattern(g1, g2, ptr) ) { GEOSGeom_destroy(g1); GEOSGeom_destroy(g2); free(ptr); log_and_exit("! RelatePattern(g1, g2, Relate(g1, g2))"); } printf("Relate: %s\n", ptr); free(ptr); /* Polygonize */ gg = (const GEOSGeometry**)malloc(2*sizeof(GEOSGeometry*)); gg[0] = g1; gg[1] = g2; g3 = GEOSPolygonize(gg, 2); free(gg); if ( ! g3 ) { log_and_exit("Exception running GEOSPolygonize"); } ptr = GEOSGeomToWKT(g3); GEOSGeom_destroy(g3); printf("Polygonize: %s\n", ptr); free(ptr); /* LineMerge */ g3 = GEOSLineMerge(g1); if ( ! g3 ) { log_and_exit("Exception running GEOSLineMerge"); } ptr = GEOSGeomToWKT(g3); printf("LineMerge: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); /* Binary predicates */ if ( GEOSIntersects(g1, g2) ) printf("Intersect\n"); if ( GEOSDisjoint(g1, g2) ) printf("Disjoint\n"); if ( GEOSTouches(g1, g2) ) printf("Touches\n"); if ( GEOSCrosses(g1, g2) ) printf("Crosses\n"); if ( GEOSWithin(g1, g2) ) printf("Within\n"); if ( GEOSContains(g1, g2) ) printf("Contains\n"); if ( GEOSOverlaps(g1, g2) ) printf("Overlaps\n"); /* Distance */ if ( GEOSDistance(g1, g2, &dist) ) printf("Distance: %g\n", dist); /* Area */ if ( GEOSArea(g1, &area) ) printf("Area 1: %g\n", area); if ( GEOSArea(g2, &area) ) printf("Area 2: %g\n", area); GEOSGeom_destroy(g2); /* Simplify */ g3 = GEOSSimplify(g1, 0.5); ptr = GEOSGeomToWKT(g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); /* Topology Preserve Simplify */ g3 = GEOSTopologyPreserveSimplify(g1, 0.5); ptr = GEOSGeomToWKT(g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy(g3); GEOSGeom_destroy(g1); return 0; } void *threadfunc1( void *arg ) { initGEOS( notice1, log_and_exit1 ); printf("GEOS version %s\n", GEOSversion()); putc('.', stderr); fflush(stderr); do_all((char*)arg); putc('+', stderr); fflush(stderr); finishGEOS(); pthread_exit(NULL); } void *threadfunc2( void *arg ) { initGEOS( notice2, log_and_exit2 ); printf("GEOS version %s\n", GEOSversion()); putc('.', stderr); fflush(stderr); do_all((char *)arg); putc('+', stderr); fflush(stderr); finishGEOS(); pthread_exit(NULL); } int main(int argc, char **argv) { pthread_t thread1, thread2; if ( argc < 2 ) usage(argv[0]); pthread_create( &thread1, NULL, threadfunc1, argv[1] ); pthread_create( &thread2, NULL, threadfunc2, argv[1] ); pthread_join( thread1, NULL ); pthread_join( thread2, NULL ); return EXIT_SUCCESS; } geos-3.4.2/tests/thread/threadtest.c0000644000175000017500000002640612206417146017234 0ustar frankiefrankie/************************************************************************ * * * Multithreaded test for C-Wrapper of GEOS library * * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * * Author: Sandro Santilli * ***********************************************************************/ #define _GNU_SOURCE #include #include #include #include #include #include "geos_c.h" #define MAXWKTLEN 1047551 void usage(char *me) { fprintf(stderr, "Usage: %s \n", me); exit(1); } void notice1(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE1: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void notice2(const char *fmt, ...) { va_list ap; fprintf( stdout, "NOTICE2: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); } void log_and_exit(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); exit(1); } void log_and_exit1(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR1: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); pthread_exit(NULL); } void log_and_exit2(const char *fmt, ...) { va_list ap; fprintf( stdout, "ERROR2: "); va_start (ap, fmt); vfprintf( stdout, fmt, ap); va_end(ap); fprintf( stdout, "\n" ); pthread_exit(NULL); } GEOSGeometry* fineGrainedReconstructionTest(const GEOSGeometry* g1, GEOSContextHandle_t handle) { GEOSCoordSequence* cs; GEOSGeometry* g2; GEOSGeometry* shell; const GEOSGeometry* gtmp; GEOSGeometry**geoms; unsigned int ngeoms, i; int type; /* Geometry reconstruction from CoordSeq */ type = GEOSGeomTypeId_r(handle, g1); switch ( type ) { case GEOS_POINT: cs = GEOSCoordSeq_clone_r(handle, GEOSGeom_getCoordSeq_r(handle, g1)); g2 = GEOSGeom_createPoint_r(handle, cs); return g2; break; case GEOS_LINESTRING: cs = GEOSCoordSeq_clone_r(handle, GEOSGeom_getCoordSeq_r(handle, g1)); g2 = GEOSGeom_createLineString_r(handle, cs); return g2; break; case GEOS_LINEARRING: cs = GEOSCoordSeq_clone_r(handle, GEOSGeom_getCoordSeq_r(handle, g1)); g2 = GEOSGeom_createLinearRing_r(handle, cs); return g2; break; case GEOS_POLYGON: gtmp = GEOSGetExteriorRing_r(handle, g1); cs = GEOSCoordSeq_clone_r(handle, GEOSGeom_getCoordSeq_r(handle, gtmp)); shell = GEOSGeom_createLinearRing_r(handle, cs); ngeoms = GEOSGetNumInteriorRings_r(handle, g1); geoms = malloc(ngeoms*sizeof(GEOSGeometry*)); for (i=0; i>4], hex[bytes[i]&0x0F]); } } int do_all(char *inputfile, GEOSContextHandle_t handle) { GEOSGeometry* g1; GEOSGeometry* g2; GEOSGeometry* g3; GEOSGeometry* g4; const GEOSGeometry **gg; unsigned int npoints, ndims; static char wkt[MAXWKTLEN]; FILE *input; char *ptr; unsigned char* uptr; size_t size; double dist, area; input = fopen(inputfile, "r"); if ( ! input ) { perror("fopen"); exit(1); } size = fread(wkt, 1, MAXWKTLEN-1, input); fclose(input); if ( ! size ) { perror("fread"); exit(1); } if ( size == MAXWKTLEN-1 ) { perror("WKT input too big!"); exit(1); } wkt[size] = '\0'; /* ensure it is null terminated */ /* WKT input */ g1 = GEOSGeomFromWKT_r(handle, wkt); /* WKT output */ ptr = GEOSGeomToWKT_r(handle, g1); printf("Input (WKT): %s\n", ptr); free(ptr); /* WKB output */ uptr = GEOSGeomToWKB_buf_r(handle, g1, &size); printf("Input (WKB): "); printHEX(stdout, uptr, size); putchar('\n'); /* WKB input */ g2 = GEOSGeomFromWKB_buf_r(handle, uptr, size); free(uptr); if ( ! GEOSEquals_r(handle, g1, g2) ) log_and_exit("Round WKB conversion failed"); GEOSGeom_destroy_r(handle, g2); /* Size and dimension */ npoints = GEOSGetNumCoordinates_r(handle, g1); ndims = GEOSGeom_getDimensions_r(handle, g1); printf("Geometry coordinates: %dx%d\n", npoints, ndims); /* Geometry fine-grained deconstruction/reconstruction test */ g2 = fineGrainedReconstructionTest(g1, handle); if ( ! GEOSEquals_r(handle, g1, g2) ) { log_and_exit("Reconstruction test failed\n"); } GEOSGeom_destroy_r(handle, g2); /* Unary predicates */ if ( GEOSisEmpty_r(handle, g1) ) printf("isEmpty\n"); if ( GEOSisValid_r(handle, g1) ) printf("isValid\n"); if ( GEOSisSimple_r(handle, g1) ) printf("isSimple\n"); if ( GEOSisRing_r(handle, g1) ) printf("isRing\n"); /* Convex Hull */ g2 = GEOSConvexHull_r(handle, g1); if ( ! g2 ) { log_and_exit("GEOSConvexHull() raised an exception"); } ptr = GEOSGeomToWKT_r(handle, g2); printf("ConvexHull: %s\n", ptr); free(ptr); /* Buffer */ GEOSGeom_destroy_r(handle, g1); g1 = GEOSBuffer_r(handle, g2, 100, 30); if ( ! g1 ) { log_and_exit("GEOSBuffer() raised an exception"); } ptr = GEOSGeomToWKT_r(handle, g1); printf("Buffer: %s\n", ptr); free(ptr); /* Intersection */ g3 = GEOSIntersection_r(handle, g1, g2); if ( ! GEOSEquals_r(handle, g3, g2) ) { GEOSGeom_destroy_r(handle, g1); GEOSGeom_destroy_r(handle, g2); GEOSGeom_destroy_r(handle, g3); log_and_exit("Intersection(g, Buffer(g)) didn't return g"); } ptr = GEOSGeomToWKT_r(handle, g3); printf("Intersection: %s\n", ptr); GEOSGeom_destroy_r(handle, g3); free(ptr); /* Difference */ g3 = GEOSDifference_r(handle, g1, g2); ptr = GEOSGeomToWKT_r(handle, g3); printf("Difference: %s\n", ptr); GEOSGeom_destroy_r(handle, g3); free(ptr); /* SymDifference */ g3 = GEOSSymDifference_r(handle, g1, g2); ptr = GEOSGeomToWKT_r(handle, g3); printf("SymDifference: %s\n", ptr); free(ptr); /* Boundary */ g4 = GEOSBoundary_r(handle, g3); ptr = GEOSGeomToWKT_r(handle, g4); printf("Boundary: %s\n", ptr); GEOSGeom_destroy_r(handle, g3); GEOSGeom_destroy_r(handle, g4); free(ptr); /* Union */ g3 = GEOSUnion_r(handle, g1, g2); if ( ! GEOSEquals_r(handle, g3, g1) ) { GEOSGeom_destroy_r(handle, g1); GEOSGeom_destroy_r(handle, g2); GEOSGeom_destroy_r(handle, g3); log_and_exit("Union(g, Buffer(g)) didn't return Buffer(g)"); } ptr = GEOSGeomToWKT_r(handle, g3); printf("Union: %s\n", ptr); free(ptr); /* PointOnSurcace */ g4 = GEOSPointOnSurface_r(handle, g3); ptr = GEOSGeomToWKT_r(handle, g4); printf("PointOnSurface: %s\n", ptr); GEOSGeom_destroy_r(handle, g3); GEOSGeom_destroy_r(handle, g4); free(ptr); /* Centroid */ g3 = GEOSGetCentroid_r(handle, g2); ptr = GEOSGeomToWKT_r(handle, g3); printf("Centroid: %s\n", ptr); GEOSGeom_destroy_r(handle, g3); free(ptr); /* Relate (and RelatePattern )*/ ptr = GEOSRelate_r(handle, g1, g2); if ( ! GEOSRelatePattern_r(handle, g1, g2, ptr) ) { GEOSGeom_destroy_r(handle, g1); GEOSGeom_destroy_r(handle, g2); free(ptr); log_and_exit("! RelatePattern(g1, g2, Relate(g1, g2))"); } printf("Relate: %s\n", ptr); free(ptr); /* Polygonize */ gg = (const GEOSGeometry**)malloc(2*sizeof(GEOSGeometry*)); gg[0] = g1; gg[1] = g2; g3 = GEOSPolygonize_r(handle, gg, 2); free(gg); if ( ! g3 ) { log_and_exit("Exception running GEOSPolygonize"); } ptr = GEOSGeomToWKT_r(handle, g3); GEOSGeom_destroy_r(handle, g3); printf("Polygonize: %s\n", ptr); free(ptr); /* LineMerge */ g3 = GEOSLineMerge_r(handle, g1); if ( ! g3 ) { log_and_exit("Exception running GEOSLineMerge"); } ptr = GEOSGeomToWKT_r(handle, g3); printf("LineMerge: %s\n", ptr); free(ptr); GEOSGeom_destroy_r(handle, g3); /* Binary predicates */ if ( GEOSIntersects_r(handle, g1, g2) ) printf("Intersect\n"); if ( GEOSDisjoint_r(handle, g1, g2) ) printf("Disjoint\n"); if ( GEOSTouches_r(handle, g1, g2) ) printf("Touches\n"); if ( GEOSCrosses_r(handle, g1, g2) ) printf("Crosses\n"); if ( GEOSWithin_r(handle, g1, g2) ) printf("Within\n"); if ( GEOSContains_r(handle, g1, g2) ) printf("Contains\n"); if ( GEOSOverlaps_r(handle, g1, g2) ) printf("Overlaps\n"); /* Distance */ if ( GEOSDistance_r(handle, g1, g2, &dist) ) printf("Distance: %g\n", dist); /* Area */ if ( GEOSArea_r(handle, g1, &area) ) printf("Area 1: %g\n", area); if ( GEOSArea_r(handle, g2, &area) ) printf("Area 2: %g\n", area); GEOSGeom_destroy_r(handle, g2); /* Simplify */ g3 = GEOSSimplify_r(handle, g1, 0.5); ptr = GEOSGeomToWKT_r(handle, g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy_r(handle, g3); /* Topology Preserve Simplify */ g3 = GEOSTopologyPreserveSimplify_r(handle, g1, 0.5); ptr = GEOSGeomToWKT_r(handle, g3); printf("Simplify: %s\n", ptr); free(ptr); GEOSGeom_destroy_r(handle, g3); GEOSGeom_destroy_r(handle, g1); return 0; } void *threadfunc1( void *arg ) { GEOSContextHandle_t handle = NULL; handle = initGEOS_r( notice1, log_and_exit1 ); printf("GEOS version %s\n", GEOSversion(handle)); putc('.', stderr); fflush(stderr); do_all((char*)arg, handle); putc('+', stderr); fflush(stderr); finishGEOS_r(handle); pthread_exit(NULL); } void *threadfunc2( void *arg ) { GEOSContextHandle_t handle = NULL; handle = initGEOS_r( notice2, log_and_exit2 ); printf("GEOS version %s\n", GEOSversion(handle)); putc('.', stderr); fflush(stderr); do_all((char *)arg, handle); putc('+', stderr); fflush(stderr); finishGEOS_r(handle); pthread_exit(NULL); } int main(int argc, char **argv) { pthread_t thread1, thread2; if ( argc < 2 ) usage(argv[0]); pthread_create( &thread1, NULL, threadfunc1, argv[1] ); pthread_create( &thread2, NULL, threadfunc2, argv[1] ); pthread_join( thread1, NULL ); pthread_join( thread2, NULL ); return EXIT_SUCCESS; } geos-3.4.2/tests/unit/0000755000175000017500000000000012206417243014417 5ustar frankiefrankiegeos-3.4.2/tests/unit/CMakeLists.txt0000644000175000017500000000226112206417146017162 0ustar frankiefrankie################################################################################# # # GEOS unit tests build configuration for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# set(STATUS_MESSAGE "Enable GEOS Unit Tests build") set(STATUS_RESULT "OFF") if(GEOS_ENABLE_TESTS) include_directories(${CMAKE_SOURCE_DIR}/capi) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/tut) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) file(GLOB_RECURSE geos_unit_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) add_executable(geos_unit ${geos_unit_SOURCES}) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) target_link_libraries(geos_unit GEOS) else() target_link_libraries(geos_unit geos geos_c) endif() add_test(geos_unit ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/geos_unit) set(STATUS_RESULT "ON") endif() message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}") geos-3.4.2/tests/unit/Makefile.am0000644000175000017500000001071712206417146016463 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi TESTS = geos_unit EXTRA_DIST = \ tut/tut_assert.hpp \ tut/tut_exception.hpp \ tut/tut.hpp \ tut/tut_posix.hpp \ tut/tut_console_reporter.hpp \ tut/tut_reporter.hpp \ tut/tut_restartable.hpp \ tut/tut_result.hpp \ tut/tut_runner.hpp \ CMakeLists.txt #noinst_PROGRAMS = geos_unit check_PROGRAMS = geos_unit #bin_PROGRAMS = geos_tut geos_unit_LDADD = \ $(top_builddir)/src/libgeos.la \ $(top_builddir)/capi/libgeos_c.la \ $(NULL) geos_unit_SOURCES = \ geos_unit.cpp \ algorithm/AngleTest.cpp \ algorithm/InteriorPointAreaTest.cpp \ algorithm/CGAlgorithms/isCCWTest.cpp \ algorithm/CGAlgorithms/isPointInRingTest.cpp \ algorithm/CGAlgorithms/computeOrientationTest.cpp \ algorithm/CGAlgorithms/signedAreaTest.cpp \ algorithm/ConvexHullTest.cpp \ algorithm/distance/DiscreteHausdorffDistanceTest.cpp \ algorithm/PointLocatorTest.cpp \ algorithm/RobustLineIntersectionTest.cpp \ algorithm/RobustLineIntersectorTest.cpp \ geom/CoordinateArraySequenceFactoryTest.cpp \ geom/CoordinateArraySequenceTest.cpp \ geom/CoordinateListTest.cpp \ geom/CoordinateTest.cpp \ geom/DimensionTest.cpp \ geom/EnvelopeTest.cpp \ geom/Geometry/clone.cpp \ geom/Geometry/coversTest.cpp \ geom/Geometry/isRectangleTest.cpp \ geom/GeometryFactoryTest.cpp \ geom/IntersectionMatrixTest.cpp \ geom/LinearRingTest.cpp \ geom/LineSegmentTest.cpp \ geom/LineStringTest.cpp \ geom/LocationTest.cpp \ geom/MultiLineStringTest.cpp \ geom/MultiPointTest.cpp \ geom/MultiPolygonTest.cpp \ geom/PointTest.cpp \ geom/PolygonTest.cpp \ geom/PrecisionModelTest.cpp \ geom/prep/PreparedGeometryFactoryTest.cpp \ geom/TriangleTest.cpp \ geom/util/GeometryExtracterTest.cpp \ index/quadtree/DoubleBitsTest.cpp \ io/ByteOrderValuesTest.cpp \ io/WKBReaderTest.cpp \ io/WKBWriterTest.cpp \ io/WKTReaderTest.cpp \ io/WKTWriterTest.cpp \ io/WriterTest.cpp \ linearref/LengthIndexedLineTest.cpp \ noding/BasicSegmentStringTest.cpp \ noding/NodedSegmentStringTest.cpp \ noding/OrientedCoordinateArray.cpp \ noding/SegmentNodeTest.cpp \ noding/SegmentPointComparatorTest.cpp \ noding/snapround/HotPixelTest.cpp \ noding/snapround/MCIndexSnapRounderTest.cpp \ operation/buffer/BufferBuilderTest.cpp \ operation/buffer/BufferOpTest.cpp \ operation/buffer/BufferParametersTest.cpp \ operation/distance/DistanceOpTest.cpp \ operation/IsSimpleOpTest.cpp \ operation/linemerge/LineMergerTest.cpp \ operation/linemerge/LineSequencerTest.cpp \ operation/overlay/validate/FuzzyPointLocatorTest.cpp \ operation/overlay/validate/OffsetPointGeneratorTest.cpp \ operation/overlay/validate/OverlayResultValidatorTest.cpp \ operation/overlay/snap/GeometrySnapperTest.cpp \ operation/overlay/snap/LineStringSnapperTest.cpp \ operation/polygonize/PolygonizeTest.cpp \ operation/sharedpaths/SharedPathsOpTest.cpp \ operation/union/CascadedPolygonUnionTest.cpp \ operation/union/UnaryUnionOpTest.cpp \ operation/valid/IsValidTest.cpp \ operation/valid/ValidClosedRingTest.cpp \ operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp \ precision/SimpleGeometryPrecisionReducerTest.cpp \ precision/GeometryPrecisionReducerTest.cpp \ simplify/DouglasPeuckerSimplifierTest.cpp \ simplify/TopologyPreservingSimplifierTest.cpp \ triangulate/quadedge/QuadEdgeTest.cpp \ triangulate/quadedge/QuadEdgeSubdivisionTest.cpp \ triangulate/DelaunayTest.cpp \ util/UniqueCoordinateArrayFilterTest.cpp \ capi/GEOSCoordSeqTest.cpp \ capi/GEOSDelaunayTriangulationTest.cpp \ capi/GEOSGeomFromWKBTest.cpp \ capi/GEOSGeomToWKTTest.cpp \ capi/GEOSGetCentroidTest.cpp \ capi/GEOSContainsTest.cpp \ capi/GEOSConvexHullTest.cpp \ capi/GEOSDistanceTest.cpp \ capi/GEOSInterruptTest.cpp \ capi/GEOSIntersectsTest.cpp \ capi/GEOSNearestPointsTest.cpp \ capi/GEOSWithinTest.cpp \ capi/GEOSSimplifyTest.cpp \ capi/GEOSPreparedGeometryTest.cpp \ capi/GEOSPointOnSurfaceTest.cpp \ capi/GEOSPolygonizer_getCutEdgesTest.cpp \ capi/GEOSBufferTest.cpp \ capi/GEOSOffsetCurveTest.cpp \ capi/GEOSGeom_create.cpp \ capi/GEOSGeom_extractUniquePointsTest.cpp \ capi/GEOSOrientationIndex.cpp \ capi/GEOSLineString_PointTest.cpp \ capi/GEOSNodeTest.cpp \ capi/GEOSSnapTest.cpp \ capi/GEOSSharedPathsTest.cpp \ capi/GEOSRelateBoundaryNodeRuleTest.cpp \ capi/GEOSRelatePatternMatchTest.cpp \ capi/GEOSUnaryUnionTest.cpp \ capi/GEOSisValidDetailTest.cpp noinst_HEADERS = \ utility.h geos-3.4.2/tests/unit/Makefile.in0000644000175000017500000076262312206417166016510 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ TESTS = geos_unit$(EXEEXT) check_PROGRAMS = geos_unit$(EXEEXT) subdir = tests/unit DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_geos_unit_OBJECTS = geos_unit.$(OBJEXT) AngleTest.$(OBJEXT) \ InteriorPointAreaTest.$(OBJEXT) isCCWTest.$(OBJEXT) \ isPointInRingTest.$(OBJEXT) computeOrientationTest.$(OBJEXT) \ signedAreaTest.$(OBJEXT) ConvexHullTest.$(OBJEXT) \ DiscreteHausdorffDistanceTest.$(OBJEXT) \ PointLocatorTest.$(OBJEXT) \ RobustLineIntersectionTest.$(OBJEXT) \ RobustLineIntersectorTest.$(OBJEXT) \ CoordinateArraySequenceFactoryTest.$(OBJEXT) \ CoordinateArraySequenceTest.$(OBJEXT) \ CoordinateListTest.$(OBJEXT) CoordinateTest.$(OBJEXT) \ DimensionTest.$(OBJEXT) EnvelopeTest.$(OBJEXT) clone.$(OBJEXT) \ coversTest.$(OBJEXT) isRectangleTest.$(OBJEXT) \ GeometryFactoryTest.$(OBJEXT) IntersectionMatrixTest.$(OBJEXT) \ LinearRingTest.$(OBJEXT) LineSegmentTest.$(OBJEXT) \ LineStringTest.$(OBJEXT) LocationTest.$(OBJEXT) \ MultiLineStringTest.$(OBJEXT) MultiPointTest.$(OBJEXT) \ MultiPolygonTest.$(OBJEXT) PointTest.$(OBJEXT) \ PolygonTest.$(OBJEXT) PrecisionModelTest.$(OBJEXT) \ PreparedGeometryFactoryTest.$(OBJEXT) TriangleTest.$(OBJEXT) \ GeometryExtracterTest.$(OBJEXT) DoubleBitsTest.$(OBJEXT) \ ByteOrderValuesTest.$(OBJEXT) WKBReaderTest.$(OBJEXT) \ WKBWriterTest.$(OBJEXT) WKTReaderTest.$(OBJEXT) \ WKTWriterTest.$(OBJEXT) WriterTest.$(OBJEXT) \ LengthIndexedLineTest.$(OBJEXT) \ BasicSegmentStringTest.$(OBJEXT) \ NodedSegmentStringTest.$(OBJEXT) \ OrientedCoordinateArray.$(OBJEXT) SegmentNodeTest.$(OBJEXT) \ SegmentPointComparatorTest.$(OBJEXT) HotPixelTest.$(OBJEXT) \ MCIndexSnapRounderTest.$(OBJEXT) BufferBuilderTest.$(OBJEXT) \ BufferOpTest.$(OBJEXT) BufferParametersTest.$(OBJEXT) \ DistanceOpTest.$(OBJEXT) IsSimpleOpTest.$(OBJEXT) \ LineMergerTest.$(OBJEXT) LineSequencerTest.$(OBJEXT) \ FuzzyPointLocatorTest.$(OBJEXT) \ OffsetPointGeneratorTest.$(OBJEXT) \ OverlayResultValidatorTest.$(OBJEXT) \ GeometrySnapperTest.$(OBJEXT) LineStringSnapperTest.$(OBJEXT) \ PolygonizeTest.$(OBJEXT) SharedPathsOpTest.$(OBJEXT) \ CascadedPolygonUnionTest.$(OBJEXT) UnaryUnionOpTest.$(OBJEXT) \ IsValidTest.$(OBJEXT) ValidClosedRingTest.$(OBJEXT) \ ValidSelfTouchingRingFormingHoleTest.$(OBJEXT) \ SimpleGeometryPrecisionReducerTest.$(OBJEXT) \ GeometryPrecisionReducerTest.$(OBJEXT) \ DouglasPeuckerSimplifierTest.$(OBJEXT) \ TopologyPreservingSimplifierTest.$(OBJEXT) \ QuadEdgeTest.$(OBJEXT) QuadEdgeSubdivisionTest.$(OBJEXT) \ DelaunayTest.$(OBJEXT) \ UniqueCoordinateArrayFilterTest.$(OBJEXT) \ GEOSCoordSeqTest.$(OBJEXT) \ GEOSDelaunayTriangulationTest.$(OBJEXT) \ GEOSGeomFromWKBTest.$(OBJEXT) GEOSGeomToWKTTest.$(OBJEXT) \ GEOSGetCentroidTest.$(OBJEXT) GEOSContainsTest.$(OBJEXT) \ GEOSConvexHullTest.$(OBJEXT) GEOSDistanceTest.$(OBJEXT) \ GEOSInterruptTest.$(OBJEXT) GEOSIntersectsTest.$(OBJEXT) \ GEOSNearestPointsTest.$(OBJEXT) GEOSWithinTest.$(OBJEXT) \ GEOSSimplifyTest.$(OBJEXT) GEOSPreparedGeometryTest.$(OBJEXT) \ GEOSPointOnSurfaceTest.$(OBJEXT) \ GEOSPolygonizer_getCutEdgesTest.$(OBJEXT) \ GEOSBufferTest.$(OBJEXT) GEOSOffsetCurveTest.$(OBJEXT) \ GEOSGeom_create.$(OBJEXT) \ GEOSGeom_extractUniquePointsTest.$(OBJEXT) \ GEOSOrientationIndex.$(OBJEXT) \ GEOSLineString_PointTest.$(OBJEXT) GEOSNodeTest.$(OBJEXT) \ GEOSSnapTest.$(OBJEXT) GEOSSharedPathsTest.$(OBJEXT) \ GEOSRelateBoundaryNodeRuleTest.$(OBJEXT) \ GEOSRelatePatternMatchTest.$(OBJEXT) \ GEOSUnaryUnionTest.$(OBJEXT) GEOSisValidDetailTest.$(OBJEXT) geos_unit_OBJECTS = $(am_geos_unit_OBJECTS) geos_unit_DEPENDENCIES = $(top_builddir)/src/libgeos.la \ $(top_builddir)/capi/libgeos_c.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(geos_unit_SOURCES) DIST_SOURCES = $(geos_unit_SOURCES) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/tests/unit/tut -I$(top_builddir)/capi EXTRA_DIST = \ tut/tut_assert.hpp \ tut/tut_exception.hpp \ tut/tut.hpp \ tut/tut_posix.hpp \ tut/tut_console_reporter.hpp \ tut/tut_reporter.hpp \ tut/tut_restartable.hpp \ tut/tut_result.hpp \ tut/tut_runner.hpp \ CMakeLists.txt #bin_PROGRAMS = geos_tut geos_unit_LDADD = \ $(top_builddir)/src/libgeos.la \ $(top_builddir)/capi/libgeos_c.la \ $(NULL) geos_unit_SOURCES = \ geos_unit.cpp \ algorithm/AngleTest.cpp \ algorithm/InteriorPointAreaTest.cpp \ algorithm/CGAlgorithms/isCCWTest.cpp \ algorithm/CGAlgorithms/isPointInRingTest.cpp \ algorithm/CGAlgorithms/computeOrientationTest.cpp \ algorithm/CGAlgorithms/signedAreaTest.cpp \ algorithm/ConvexHullTest.cpp \ algorithm/distance/DiscreteHausdorffDistanceTest.cpp \ algorithm/PointLocatorTest.cpp \ algorithm/RobustLineIntersectionTest.cpp \ algorithm/RobustLineIntersectorTest.cpp \ geom/CoordinateArraySequenceFactoryTest.cpp \ geom/CoordinateArraySequenceTest.cpp \ geom/CoordinateListTest.cpp \ geom/CoordinateTest.cpp \ geom/DimensionTest.cpp \ geom/EnvelopeTest.cpp \ geom/Geometry/clone.cpp \ geom/Geometry/coversTest.cpp \ geom/Geometry/isRectangleTest.cpp \ geom/GeometryFactoryTest.cpp \ geom/IntersectionMatrixTest.cpp \ geom/LinearRingTest.cpp \ geom/LineSegmentTest.cpp \ geom/LineStringTest.cpp \ geom/LocationTest.cpp \ geom/MultiLineStringTest.cpp \ geom/MultiPointTest.cpp \ geom/MultiPolygonTest.cpp \ geom/PointTest.cpp \ geom/PolygonTest.cpp \ geom/PrecisionModelTest.cpp \ geom/prep/PreparedGeometryFactoryTest.cpp \ geom/TriangleTest.cpp \ geom/util/GeometryExtracterTest.cpp \ index/quadtree/DoubleBitsTest.cpp \ io/ByteOrderValuesTest.cpp \ io/WKBReaderTest.cpp \ io/WKBWriterTest.cpp \ io/WKTReaderTest.cpp \ io/WKTWriterTest.cpp \ io/WriterTest.cpp \ linearref/LengthIndexedLineTest.cpp \ noding/BasicSegmentStringTest.cpp \ noding/NodedSegmentStringTest.cpp \ noding/OrientedCoordinateArray.cpp \ noding/SegmentNodeTest.cpp \ noding/SegmentPointComparatorTest.cpp \ noding/snapround/HotPixelTest.cpp \ noding/snapround/MCIndexSnapRounderTest.cpp \ operation/buffer/BufferBuilderTest.cpp \ operation/buffer/BufferOpTest.cpp \ operation/buffer/BufferParametersTest.cpp \ operation/distance/DistanceOpTest.cpp \ operation/IsSimpleOpTest.cpp \ operation/linemerge/LineMergerTest.cpp \ operation/linemerge/LineSequencerTest.cpp \ operation/overlay/validate/FuzzyPointLocatorTest.cpp \ operation/overlay/validate/OffsetPointGeneratorTest.cpp \ operation/overlay/validate/OverlayResultValidatorTest.cpp \ operation/overlay/snap/GeometrySnapperTest.cpp \ operation/overlay/snap/LineStringSnapperTest.cpp \ operation/polygonize/PolygonizeTest.cpp \ operation/sharedpaths/SharedPathsOpTest.cpp \ operation/union/CascadedPolygonUnionTest.cpp \ operation/union/UnaryUnionOpTest.cpp \ operation/valid/IsValidTest.cpp \ operation/valid/ValidClosedRingTest.cpp \ operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp \ precision/SimpleGeometryPrecisionReducerTest.cpp \ precision/GeometryPrecisionReducerTest.cpp \ simplify/DouglasPeuckerSimplifierTest.cpp \ simplify/TopologyPreservingSimplifierTest.cpp \ triangulate/quadedge/QuadEdgeTest.cpp \ triangulate/quadedge/QuadEdgeSubdivisionTest.cpp \ triangulate/DelaunayTest.cpp \ util/UniqueCoordinateArrayFilterTest.cpp \ capi/GEOSCoordSeqTest.cpp \ capi/GEOSDelaunayTriangulationTest.cpp \ capi/GEOSGeomFromWKBTest.cpp \ capi/GEOSGeomToWKTTest.cpp \ capi/GEOSGetCentroidTest.cpp \ capi/GEOSContainsTest.cpp \ capi/GEOSConvexHullTest.cpp \ capi/GEOSDistanceTest.cpp \ capi/GEOSInterruptTest.cpp \ capi/GEOSIntersectsTest.cpp \ capi/GEOSNearestPointsTest.cpp \ capi/GEOSWithinTest.cpp \ capi/GEOSSimplifyTest.cpp \ capi/GEOSPreparedGeometryTest.cpp \ capi/GEOSPointOnSurfaceTest.cpp \ capi/GEOSPolygonizer_getCutEdgesTest.cpp \ capi/GEOSBufferTest.cpp \ capi/GEOSOffsetCurveTest.cpp \ capi/GEOSGeom_create.cpp \ capi/GEOSGeom_extractUniquePointsTest.cpp \ capi/GEOSOrientationIndex.cpp \ capi/GEOSLineString_PointTest.cpp \ capi/GEOSNodeTest.cpp \ capi/GEOSSnapTest.cpp \ capi/GEOSSharedPathsTest.cpp \ capi/GEOSRelateBoundaryNodeRuleTest.cpp \ capi/GEOSRelatePatternMatchTest.cpp \ capi/GEOSUnaryUnionTest.cpp \ capi/GEOSisValidDetailTest.cpp noinst_HEADERS = \ utility.h all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/unit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/unit/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list geos_unit$(EXEEXT): $(geos_unit_OBJECTS) $(geos_unit_DEPENDENCIES) @rm -f geos_unit$(EXEEXT) $(CXXLINK) $(geos_unit_OBJECTS) $(geos_unit_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AngleTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BasicSegmentStringTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferBuilderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferOpTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BufferParametersTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ByteOrderValuesTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CascadedPolygonUnionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConvexHullTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoordinateArraySequenceFactoryTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoordinateArraySequenceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoordinateListTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoordinateTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DelaunayTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DimensionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DiscreteHausdorffDistanceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DistanceOpTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DoubleBitsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DouglasPeuckerSimplifierTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EnvelopeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FuzzyPointLocatorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSBufferTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSContainsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSConvexHullTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSCoordSeqTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSDelaunayTriangulationTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSDistanceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSGeomFromWKBTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSGeomToWKTTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSGeom_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSGeom_extractUniquePointsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSGetCentroidTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSInterruptTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSIntersectsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSLineString_PointTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSNearestPointsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSNodeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSOffsetCurveTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSOrientationIndex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSPointOnSurfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSPreparedGeometryTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSRelatePatternMatchTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSSharedPathsTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSSimplifyTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSSnapTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSUnaryUnionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSWithinTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GEOSisValidDetailTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryExtracterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryFactoryTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometryPrecisionReducerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeometrySnapperTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HotPixelTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InteriorPointAreaTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntersectionMatrixTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IsSimpleOpTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IsValidTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LengthIndexedLineTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineMergerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineSegmentTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineSequencerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineStringSnapperTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LineStringTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LinearRingTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LocationTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MCIndexSnapRounderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiLineStringTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiPointTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiPolygonTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NodedSegmentStringTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OffsetPointGeneratorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OrientedCoordinateArray.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OverlayResultValidatorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PointLocatorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PointTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolygonizeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PrecisionModelTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PreparedGeometryFactoryTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadEdgeSubdivisionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuadEdgeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RobustLineIntersectionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RobustLineIntersectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentNodeTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentPointComparatorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SharedPathsOpTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleGeometryPrecisionReducerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TopologyPreservingSimplifierTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TriangleTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnaryUnionOpTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UniqueCoordinateArrayFilterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ValidClosedRingTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKBReaderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKBWriterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKTReaderTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WKTWriterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WriterTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clone.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/computeOrientationTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coversTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geos_unit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isCCWTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isPointInRingTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isRectangleTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signedAreaTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< AngleTest.o: algorithm/AngleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT AngleTest.o -MD -MP -MF $(DEPDIR)/AngleTest.Tpo -c -o AngleTest.o `test -f 'algorithm/AngleTest.cpp' || echo '$(srcdir)/'`algorithm/AngleTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/AngleTest.Tpo $(DEPDIR)/AngleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/AngleTest.cpp' object='AngleTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o AngleTest.o `test -f 'algorithm/AngleTest.cpp' || echo '$(srcdir)/'`algorithm/AngleTest.cpp AngleTest.obj: algorithm/AngleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT AngleTest.obj -MD -MP -MF $(DEPDIR)/AngleTest.Tpo -c -o AngleTest.obj `if test -f 'algorithm/AngleTest.cpp'; then $(CYGPATH_W) 'algorithm/AngleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/AngleTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/AngleTest.Tpo $(DEPDIR)/AngleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/AngleTest.cpp' object='AngleTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o AngleTest.obj `if test -f 'algorithm/AngleTest.cpp'; then $(CYGPATH_W) 'algorithm/AngleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/AngleTest.cpp'; fi` InteriorPointAreaTest.o: algorithm/InteriorPointAreaTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT InteriorPointAreaTest.o -MD -MP -MF $(DEPDIR)/InteriorPointAreaTest.Tpo -c -o InteriorPointAreaTest.o `test -f 'algorithm/InteriorPointAreaTest.cpp' || echo '$(srcdir)/'`algorithm/InteriorPointAreaTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/InteriorPointAreaTest.Tpo $(DEPDIR)/InteriorPointAreaTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/InteriorPointAreaTest.cpp' object='InteriorPointAreaTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o InteriorPointAreaTest.o `test -f 'algorithm/InteriorPointAreaTest.cpp' || echo '$(srcdir)/'`algorithm/InteriorPointAreaTest.cpp InteriorPointAreaTest.obj: algorithm/InteriorPointAreaTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT InteriorPointAreaTest.obj -MD -MP -MF $(DEPDIR)/InteriorPointAreaTest.Tpo -c -o InteriorPointAreaTest.obj `if test -f 'algorithm/InteriorPointAreaTest.cpp'; then $(CYGPATH_W) 'algorithm/InteriorPointAreaTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/InteriorPointAreaTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/InteriorPointAreaTest.Tpo $(DEPDIR)/InteriorPointAreaTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/InteriorPointAreaTest.cpp' object='InteriorPointAreaTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o InteriorPointAreaTest.obj `if test -f 'algorithm/InteriorPointAreaTest.cpp'; then $(CYGPATH_W) 'algorithm/InteriorPointAreaTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/InteriorPointAreaTest.cpp'; fi` isCCWTest.o: algorithm/CGAlgorithms/isCCWTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isCCWTest.o -MD -MP -MF $(DEPDIR)/isCCWTest.Tpo -c -o isCCWTest.o `test -f 'algorithm/CGAlgorithms/isCCWTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/isCCWTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isCCWTest.Tpo $(DEPDIR)/isCCWTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/isCCWTest.cpp' object='isCCWTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isCCWTest.o `test -f 'algorithm/CGAlgorithms/isCCWTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/isCCWTest.cpp isCCWTest.obj: algorithm/CGAlgorithms/isCCWTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isCCWTest.obj -MD -MP -MF $(DEPDIR)/isCCWTest.Tpo -c -o isCCWTest.obj `if test -f 'algorithm/CGAlgorithms/isCCWTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/isCCWTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/isCCWTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isCCWTest.Tpo $(DEPDIR)/isCCWTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/isCCWTest.cpp' object='isCCWTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isCCWTest.obj `if test -f 'algorithm/CGAlgorithms/isCCWTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/isCCWTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/isCCWTest.cpp'; fi` isPointInRingTest.o: algorithm/CGAlgorithms/isPointInRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isPointInRingTest.o -MD -MP -MF $(DEPDIR)/isPointInRingTest.Tpo -c -o isPointInRingTest.o `test -f 'algorithm/CGAlgorithms/isPointInRingTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/isPointInRingTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isPointInRingTest.Tpo $(DEPDIR)/isPointInRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/isPointInRingTest.cpp' object='isPointInRingTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isPointInRingTest.o `test -f 'algorithm/CGAlgorithms/isPointInRingTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/isPointInRingTest.cpp isPointInRingTest.obj: algorithm/CGAlgorithms/isPointInRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isPointInRingTest.obj -MD -MP -MF $(DEPDIR)/isPointInRingTest.Tpo -c -o isPointInRingTest.obj `if test -f 'algorithm/CGAlgorithms/isPointInRingTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/isPointInRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/isPointInRingTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isPointInRingTest.Tpo $(DEPDIR)/isPointInRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/isPointInRingTest.cpp' object='isPointInRingTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isPointInRingTest.obj `if test -f 'algorithm/CGAlgorithms/isPointInRingTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/isPointInRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/isPointInRingTest.cpp'; fi` computeOrientationTest.o: algorithm/CGAlgorithms/computeOrientationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT computeOrientationTest.o -MD -MP -MF $(DEPDIR)/computeOrientationTest.Tpo -c -o computeOrientationTest.o `test -f 'algorithm/CGAlgorithms/computeOrientationTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/computeOrientationTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/computeOrientationTest.Tpo $(DEPDIR)/computeOrientationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/computeOrientationTest.cpp' object='computeOrientationTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o computeOrientationTest.o `test -f 'algorithm/CGAlgorithms/computeOrientationTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/computeOrientationTest.cpp computeOrientationTest.obj: algorithm/CGAlgorithms/computeOrientationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT computeOrientationTest.obj -MD -MP -MF $(DEPDIR)/computeOrientationTest.Tpo -c -o computeOrientationTest.obj `if test -f 'algorithm/CGAlgorithms/computeOrientationTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/computeOrientationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/computeOrientationTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/computeOrientationTest.Tpo $(DEPDIR)/computeOrientationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/computeOrientationTest.cpp' object='computeOrientationTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o computeOrientationTest.obj `if test -f 'algorithm/CGAlgorithms/computeOrientationTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/computeOrientationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/computeOrientationTest.cpp'; fi` signedAreaTest.o: algorithm/CGAlgorithms/signedAreaTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT signedAreaTest.o -MD -MP -MF $(DEPDIR)/signedAreaTest.Tpo -c -o signedAreaTest.o `test -f 'algorithm/CGAlgorithms/signedAreaTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/signedAreaTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/signedAreaTest.Tpo $(DEPDIR)/signedAreaTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/signedAreaTest.cpp' object='signedAreaTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o signedAreaTest.o `test -f 'algorithm/CGAlgorithms/signedAreaTest.cpp' || echo '$(srcdir)/'`algorithm/CGAlgorithms/signedAreaTest.cpp signedAreaTest.obj: algorithm/CGAlgorithms/signedAreaTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT signedAreaTest.obj -MD -MP -MF $(DEPDIR)/signedAreaTest.Tpo -c -o signedAreaTest.obj `if test -f 'algorithm/CGAlgorithms/signedAreaTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/signedAreaTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/signedAreaTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/signedAreaTest.Tpo $(DEPDIR)/signedAreaTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/CGAlgorithms/signedAreaTest.cpp' object='signedAreaTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o signedAreaTest.obj `if test -f 'algorithm/CGAlgorithms/signedAreaTest.cpp'; then $(CYGPATH_W) 'algorithm/CGAlgorithms/signedAreaTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/CGAlgorithms/signedAreaTest.cpp'; fi` ConvexHullTest.o: algorithm/ConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ConvexHullTest.o -MD -MP -MF $(DEPDIR)/ConvexHullTest.Tpo -c -o ConvexHullTest.o `test -f 'algorithm/ConvexHullTest.cpp' || echo '$(srcdir)/'`algorithm/ConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ConvexHullTest.Tpo $(DEPDIR)/ConvexHullTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/ConvexHullTest.cpp' object='ConvexHullTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ConvexHullTest.o `test -f 'algorithm/ConvexHullTest.cpp' || echo '$(srcdir)/'`algorithm/ConvexHullTest.cpp ConvexHullTest.obj: algorithm/ConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ConvexHullTest.obj -MD -MP -MF $(DEPDIR)/ConvexHullTest.Tpo -c -o ConvexHullTest.obj `if test -f 'algorithm/ConvexHullTest.cpp'; then $(CYGPATH_W) 'algorithm/ConvexHullTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/ConvexHullTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ConvexHullTest.Tpo $(DEPDIR)/ConvexHullTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/ConvexHullTest.cpp' object='ConvexHullTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ConvexHullTest.obj `if test -f 'algorithm/ConvexHullTest.cpp'; then $(CYGPATH_W) 'algorithm/ConvexHullTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/ConvexHullTest.cpp'; fi` DiscreteHausdorffDistanceTest.o: algorithm/distance/DiscreteHausdorffDistanceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DiscreteHausdorffDistanceTest.o -MD -MP -MF $(DEPDIR)/DiscreteHausdorffDistanceTest.Tpo -c -o DiscreteHausdorffDistanceTest.o `test -f 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp' || echo '$(srcdir)/'`algorithm/distance/DiscreteHausdorffDistanceTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DiscreteHausdorffDistanceTest.Tpo $(DEPDIR)/DiscreteHausdorffDistanceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/distance/DiscreteHausdorffDistanceTest.cpp' object='DiscreteHausdorffDistanceTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DiscreteHausdorffDistanceTest.o `test -f 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp' || echo '$(srcdir)/'`algorithm/distance/DiscreteHausdorffDistanceTest.cpp DiscreteHausdorffDistanceTest.obj: algorithm/distance/DiscreteHausdorffDistanceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DiscreteHausdorffDistanceTest.obj -MD -MP -MF $(DEPDIR)/DiscreteHausdorffDistanceTest.Tpo -c -o DiscreteHausdorffDistanceTest.obj `if test -f 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; then $(CYGPATH_W) 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DiscreteHausdorffDistanceTest.Tpo $(DEPDIR)/DiscreteHausdorffDistanceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/distance/DiscreteHausdorffDistanceTest.cpp' object='DiscreteHausdorffDistanceTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DiscreteHausdorffDistanceTest.obj `if test -f 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; then $(CYGPATH_W) 'algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/distance/DiscreteHausdorffDistanceTest.cpp'; fi` PointLocatorTest.o: algorithm/PointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PointLocatorTest.o -MD -MP -MF $(DEPDIR)/PointLocatorTest.Tpo -c -o PointLocatorTest.o `test -f 'algorithm/PointLocatorTest.cpp' || echo '$(srcdir)/'`algorithm/PointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PointLocatorTest.Tpo $(DEPDIR)/PointLocatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/PointLocatorTest.cpp' object='PointLocatorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PointLocatorTest.o `test -f 'algorithm/PointLocatorTest.cpp' || echo '$(srcdir)/'`algorithm/PointLocatorTest.cpp PointLocatorTest.obj: algorithm/PointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PointLocatorTest.obj -MD -MP -MF $(DEPDIR)/PointLocatorTest.Tpo -c -o PointLocatorTest.obj `if test -f 'algorithm/PointLocatorTest.cpp'; then $(CYGPATH_W) 'algorithm/PointLocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/PointLocatorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PointLocatorTest.Tpo $(DEPDIR)/PointLocatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/PointLocatorTest.cpp' object='PointLocatorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PointLocatorTest.obj `if test -f 'algorithm/PointLocatorTest.cpp'; then $(CYGPATH_W) 'algorithm/PointLocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/PointLocatorTest.cpp'; fi` RobustLineIntersectionTest.o: algorithm/RobustLineIntersectionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RobustLineIntersectionTest.o -MD -MP -MF $(DEPDIR)/RobustLineIntersectionTest.Tpo -c -o RobustLineIntersectionTest.o `test -f 'algorithm/RobustLineIntersectionTest.cpp' || echo '$(srcdir)/'`algorithm/RobustLineIntersectionTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/RobustLineIntersectionTest.Tpo $(DEPDIR)/RobustLineIntersectionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/RobustLineIntersectionTest.cpp' object='RobustLineIntersectionTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RobustLineIntersectionTest.o `test -f 'algorithm/RobustLineIntersectionTest.cpp' || echo '$(srcdir)/'`algorithm/RobustLineIntersectionTest.cpp RobustLineIntersectionTest.obj: algorithm/RobustLineIntersectionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RobustLineIntersectionTest.obj -MD -MP -MF $(DEPDIR)/RobustLineIntersectionTest.Tpo -c -o RobustLineIntersectionTest.obj `if test -f 'algorithm/RobustLineIntersectionTest.cpp'; then $(CYGPATH_W) 'algorithm/RobustLineIntersectionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/RobustLineIntersectionTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/RobustLineIntersectionTest.Tpo $(DEPDIR)/RobustLineIntersectionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/RobustLineIntersectionTest.cpp' object='RobustLineIntersectionTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RobustLineIntersectionTest.obj `if test -f 'algorithm/RobustLineIntersectionTest.cpp'; then $(CYGPATH_W) 'algorithm/RobustLineIntersectionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/RobustLineIntersectionTest.cpp'; fi` RobustLineIntersectorTest.o: algorithm/RobustLineIntersectorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RobustLineIntersectorTest.o -MD -MP -MF $(DEPDIR)/RobustLineIntersectorTest.Tpo -c -o RobustLineIntersectorTest.o `test -f 'algorithm/RobustLineIntersectorTest.cpp' || echo '$(srcdir)/'`algorithm/RobustLineIntersectorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/RobustLineIntersectorTest.Tpo $(DEPDIR)/RobustLineIntersectorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/RobustLineIntersectorTest.cpp' object='RobustLineIntersectorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RobustLineIntersectorTest.o `test -f 'algorithm/RobustLineIntersectorTest.cpp' || echo '$(srcdir)/'`algorithm/RobustLineIntersectorTest.cpp RobustLineIntersectorTest.obj: algorithm/RobustLineIntersectorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RobustLineIntersectorTest.obj -MD -MP -MF $(DEPDIR)/RobustLineIntersectorTest.Tpo -c -o RobustLineIntersectorTest.obj `if test -f 'algorithm/RobustLineIntersectorTest.cpp'; then $(CYGPATH_W) 'algorithm/RobustLineIntersectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/RobustLineIntersectorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/RobustLineIntersectorTest.Tpo $(DEPDIR)/RobustLineIntersectorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='algorithm/RobustLineIntersectorTest.cpp' object='RobustLineIntersectorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RobustLineIntersectorTest.obj `if test -f 'algorithm/RobustLineIntersectorTest.cpp'; then $(CYGPATH_W) 'algorithm/RobustLineIntersectorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/algorithm/RobustLineIntersectorTest.cpp'; fi` CoordinateArraySequenceFactoryTest.o: geom/CoordinateArraySequenceFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateArraySequenceFactoryTest.o -MD -MP -MF $(DEPDIR)/CoordinateArraySequenceFactoryTest.Tpo -c -o CoordinateArraySequenceFactoryTest.o `test -f 'geom/CoordinateArraySequenceFactoryTest.cpp' || echo '$(srcdir)/'`geom/CoordinateArraySequenceFactoryTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateArraySequenceFactoryTest.Tpo $(DEPDIR)/CoordinateArraySequenceFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateArraySequenceFactoryTest.cpp' object='CoordinateArraySequenceFactoryTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateArraySequenceFactoryTest.o `test -f 'geom/CoordinateArraySequenceFactoryTest.cpp' || echo '$(srcdir)/'`geom/CoordinateArraySequenceFactoryTest.cpp CoordinateArraySequenceFactoryTest.obj: geom/CoordinateArraySequenceFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateArraySequenceFactoryTest.obj -MD -MP -MF $(DEPDIR)/CoordinateArraySequenceFactoryTest.Tpo -c -o CoordinateArraySequenceFactoryTest.obj `if test -f 'geom/CoordinateArraySequenceFactoryTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateArraySequenceFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateArraySequenceFactoryTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateArraySequenceFactoryTest.Tpo $(DEPDIR)/CoordinateArraySequenceFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateArraySequenceFactoryTest.cpp' object='CoordinateArraySequenceFactoryTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateArraySequenceFactoryTest.obj `if test -f 'geom/CoordinateArraySequenceFactoryTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateArraySequenceFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateArraySequenceFactoryTest.cpp'; fi` CoordinateArraySequenceTest.o: geom/CoordinateArraySequenceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateArraySequenceTest.o -MD -MP -MF $(DEPDIR)/CoordinateArraySequenceTest.Tpo -c -o CoordinateArraySequenceTest.o `test -f 'geom/CoordinateArraySequenceTest.cpp' || echo '$(srcdir)/'`geom/CoordinateArraySequenceTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateArraySequenceTest.Tpo $(DEPDIR)/CoordinateArraySequenceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateArraySequenceTest.cpp' object='CoordinateArraySequenceTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateArraySequenceTest.o `test -f 'geom/CoordinateArraySequenceTest.cpp' || echo '$(srcdir)/'`geom/CoordinateArraySequenceTest.cpp CoordinateArraySequenceTest.obj: geom/CoordinateArraySequenceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateArraySequenceTest.obj -MD -MP -MF $(DEPDIR)/CoordinateArraySequenceTest.Tpo -c -o CoordinateArraySequenceTest.obj `if test -f 'geom/CoordinateArraySequenceTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateArraySequenceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateArraySequenceTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateArraySequenceTest.Tpo $(DEPDIR)/CoordinateArraySequenceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateArraySequenceTest.cpp' object='CoordinateArraySequenceTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateArraySequenceTest.obj `if test -f 'geom/CoordinateArraySequenceTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateArraySequenceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateArraySequenceTest.cpp'; fi` CoordinateListTest.o: geom/CoordinateListTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateListTest.o -MD -MP -MF $(DEPDIR)/CoordinateListTest.Tpo -c -o CoordinateListTest.o `test -f 'geom/CoordinateListTest.cpp' || echo '$(srcdir)/'`geom/CoordinateListTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateListTest.Tpo $(DEPDIR)/CoordinateListTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateListTest.cpp' object='CoordinateListTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateListTest.o `test -f 'geom/CoordinateListTest.cpp' || echo '$(srcdir)/'`geom/CoordinateListTest.cpp CoordinateListTest.obj: geom/CoordinateListTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateListTest.obj -MD -MP -MF $(DEPDIR)/CoordinateListTest.Tpo -c -o CoordinateListTest.obj `if test -f 'geom/CoordinateListTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateListTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateListTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateListTest.Tpo $(DEPDIR)/CoordinateListTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateListTest.cpp' object='CoordinateListTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateListTest.obj `if test -f 'geom/CoordinateListTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateListTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateListTest.cpp'; fi` CoordinateTest.o: geom/CoordinateTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateTest.o -MD -MP -MF $(DEPDIR)/CoordinateTest.Tpo -c -o CoordinateTest.o `test -f 'geom/CoordinateTest.cpp' || echo '$(srcdir)/'`geom/CoordinateTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateTest.Tpo $(DEPDIR)/CoordinateTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateTest.cpp' object='CoordinateTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateTest.o `test -f 'geom/CoordinateTest.cpp' || echo '$(srcdir)/'`geom/CoordinateTest.cpp CoordinateTest.obj: geom/CoordinateTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CoordinateTest.obj -MD -MP -MF $(DEPDIR)/CoordinateTest.Tpo -c -o CoordinateTest.obj `if test -f 'geom/CoordinateTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CoordinateTest.Tpo $(DEPDIR)/CoordinateTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/CoordinateTest.cpp' object='CoordinateTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CoordinateTest.obj `if test -f 'geom/CoordinateTest.cpp'; then $(CYGPATH_W) 'geom/CoordinateTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/CoordinateTest.cpp'; fi` DimensionTest.o: geom/DimensionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DimensionTest.o -MD -MP -MF $(DEPDIR)/DimensionTest.Tpo -c -o DimensionTest.o `test -f 'geom/DimensionTest.cpp' || echo '$(srcdir)/'`geom/DimensionTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DimensionTest.Tpo $(DEPDIR)/DimensionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/DimensionTest.cpp' object='DimensionTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DimensionTest.o `test -f 'geom/DimensionTest.cpp' || echo '$(srcdir)/'`geom/DimensionTest.cpp DimensionTest.obj: geom/DimensionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DimensionTest.obj -MD -MP -MF $(DEPDIR)/DimensionTest.Tpo -c -o DimensionTest.obj `if test -f 'geom/DimensionTest.cpp'; then $(CYGPATH_W) 'geom/DimensionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/DimensionTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DimensionTest.Tpo $(DEPDIR)/DimensionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/DimensionTest.cpp' object='DimensionTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DimensionTest.obj `if test -f 'geom/DimensionTest.cpp'; then $(CYGPATH_W) 'geom/DimensionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/DimensionTest.cpp'; fi` EnvelopeTest.o: geom/EnvelopeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT EnvelopeTest.o -MD -MP -MF $(DEPDIR)/EnvelopeTest.Tpo -c -o EnvelopeTest.o `test -f 'geom/EnvelopeTest.cpp' || echo '$(srcdir)/'`geom/EnvelopeTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/EnvelopeTest.Tpo $(DEPDIR)/EnvelopeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/EnvelopeTest.cpp' object='EnvelopeTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o EnvelopeTest.o `test -f 'geom/EnvelopeTest.cpp' || echo '$(srcdir)/'`geom/EnvelopeTest.cpp EnvelopeTest.obj: geom/EnvelopeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT EnvelopeTest.obj -MD -MP -MF $(DEPDIR)/EnvelopeTest.Tpo -c -o EnvelopeTest.obj `if test -f 'geom/EnvelopeTest.cpp'; then $(CYGPATH_W) 'geom/EnvelopeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/EnvelopeTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/EnvelopeTest.Tpo $(DEPDIR)/EnvelopeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/EnvelopeTest.cpp' object='EnvelopeTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o EnvelopeTest.obj `if test -f 'geom/EnvelopeTest.cpp'; then $(CYGPATH_W) 'geom/EnvelopeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/EnvelopeTest.cpp'; fi` clone.o: geom/Geometry/clone.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT clone.o -MD -MP -MF $(DEPDIR)/clone.Tpo -c -o clone.o `test -f 'geom/Geometry/clone.cpp' || echo '$(srcdir)/'`geom/Geometry/clone.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/clone.Tpo $(DEPDIR)/clone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/clone.cpp' object='clone.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o clone.o `test -f 'geom/Geometry/clone.cpp' || echo '$(srcdir)/'`geom/Geometry/clone.cpp clone.obj: geom/Geometry/clone.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT clone.obj -MD -MP -MF $(DEPDIR)/clone.Tpo -c -o clone.obj `if test -f 'geom/Geometry/clone.cpp'; then $(CYGPATH_W) 'geom/Geometry/clone.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/clone.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/clone.Tpo $(DEPDIR)/clone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/clone.cpp' object='clone.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o clone.obj `if test -f 'geom/Geometry/clone.cpp'; then $(CYGPATH_W) 'geom/Geometry/clone.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/clone.cpp'; fi` coversTest.o: geom/Geometry/coversTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT coversTest.o -MD -MP -MF $(DEPDIR)/coversTest.Tpo -c -o coversTest.o `test -f 'geom/Geometry/coversTest.cpp' || echo '$(srcdir)/'`geom/Geometry/coversTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/coversTest.Tpo $(DEPDIR)/coversTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/coversTest.cpp' object='coversTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o coversTest.o `test -f 'geom/Geometry/coversTest.cpp' || echo '$(srcdir)/'`geom/Geometry/coversTest.cpp coversTest.obj: geom/Geometry/coversTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT coversTest.obj -MD -MP -MF $(DEPDIR)/coversTest.Tpo -c -o coversTest.obj `if test -f 'geom/Geometry/coversTest.cpp'; then $(CYGPATH_W) 'geom/Geometry/coversTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/coversTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/coversTest.Tpo $(DEPDIR)/coversTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/coversTest.cpp' object='coversTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o coversTest.obj `if test -f 'geom/Geometry/coversTest.cpp'; then $(CYGPATH_W) 'geom/Geometry/coversTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/coversTest.cpp'; fi` isRectangleTest.o: geom/Geometry/isRectangleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isRectangleTest.o -MD -MP -MF $(DEPDIR)/isRectangleTest.Tpo -c -o isRectangleTest.o `test -f 'geom/Geometry/isRectangleTest.cpp' || echo '$(srcdir)/'`geom/Geometry/isRectangleTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isRectangleTest.Tpo $(DEPDIR)/isRectangleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/isRectangleTest.cpp' object='isRectangleTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isRectangleTest.o `test -f 'geom/Geometry/isRectangleTest.cpp' || echo '$(srcdir)/'`geom/Geometry/isRectangleTest.cpp isRectangleTest.obj: geom/Geometry/isRectangleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT isRectangleTest.obj -MD -MP -MF $(DEPDIR)/isRectangleTest.Tpo -c -o isRectangleTest.obj `if test -f 'geom/Geometry/isRectangleTest.cpp'; then $(CYGPATH_W) 'geom/Geometry/isRectangleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/isRectangleTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/isRectangleTest.Tpo $(DEPDIR)/isRectangleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/Geometry/isRectangleTest.cpp' object='isRectangleTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o isRectangleTest.obj `if test -f 'geom/Geometry/isRectangleTest.cpp'; then $(CYGPATH_W) 'geom/Geometry/isRectangleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/Geometry/isRectangleTest.cpp'; fi` GeometryFactoryTest.o: geom/GeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryFactoryTest.o -MD -MP -MF $(DEPDIR)/GeometryFactoryTest.Tpo -c -o GeometryFactoryTest.o `test -f 'geom/GeometryFactoryTest.cpp' || echo '$(srcdir)/'`geom/GeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryFactoryTest.Tpo $(DEPDIR)/GeometryFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/GeometryFactoryTest.cpp' object='GeometryFactoryTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryFactoryTest.o `test -f 'geom/GeometryFactoryTest.cpp' || echo '$(srcdir)/'`geom/GeometryFactoryTest.cpp GeometryFactoryTest.obj: geom/GeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryFactoryTest.obj -MD -MP -MF $(DEPDIR)/GeometryFactoryTest.Tpo -c -o GeometryFactoryTest.obj `if test -f 'geom/GeometryFactoryTest.cpp'; then $(CYGPATH_W) 'geom/GeometryFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/GeometryFactoryTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryFactoryTest.Tpo $(DEPDIR)/GeometryFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/GeometryFactoryTest.cpp' object='GeometryFactoryTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryFactoryTest.obj `if test -f 'geom/GeometryFactoryTest.cpp'; then $(CYGPATH_W) 'geom/GeometryFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/GeometryFactoryTest.cpp'; fi` IntersectionMatrixTest.o: geom/IntersectionMatrixTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IntersectionMatrixTest.o -MD -MP -MF $(DEPDIR)/IntersectionMatrixTest.Tpo -c -o IntersectionMatrixTest.o `test -f 'geom/IntersectionMatrixTest.cpp' || echo '$(srcdir)/'`geom/IntersectionMatrixTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IntersectionMatrixTest.Tpo $(DEPDIR)/IntersectionMatrixTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/IntersectionMatrixTest.cpp' object='IntersectionMatrixTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IntersectionMatrixTest.o `test -f 'geom/IntersectionMatrixTest.cpp' || echo '$(srcdir)/'`geom/IntersectionMatrixTest.cpp IntersectionMatrixTest.obj: geom/IntersectionMatrixTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IntersectionMatrixTest.obj -MD -MP -MF $(DEPDIR)/IntersectionMatrixTest.Tpo -c -o IntersectionMatrixTest.obj `if test -f 'geom/IntersectionMatrixTest.cpp'; then $(CYGPATH_W) 'geom/IntersectionMatrixTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/IntersectionMatrixTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IntersectionMatrixTest.Tpo $(DEPDIR)/IntersectionMatrixTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/IntersectionMatrixTest.cpp' object='IntersectionMatrixTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IntersectionMatrixTest.obj `if test -f 'geom/IntersectionMatrixTest.cpp'; then $(CYGPATH_W) 'geom/IntersectionMatrixTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/IntersectionMatrixTest.cpp'; fi` LinearRingTest.o: geom/LinearRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LinearRingTest.o -MD -MP -MF $(DEPDIR)/LinearRingTest.Tpo -c -o LinearRingTest.o `test -f 'geom/LinearRingTest.cpp' || echo '$(srcdir)/'`geom/LinearRingTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LinearRingTest.Tpo $(DEPDIR)/LinearRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LinearRingTest.cpp' object='LinearRingTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LinearRingTest.o `test -f 'geom/LinearRingTest.cpp' || echo '$(srcdir)/'`geom/LinearRingTest.cpp LinearRingTest.obj: geom/LinearRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LinearRingTest.obj -MD -MP -MF $(DEPDIR)/LinearRingTest.Tpo -c -o LinearRingTest.obj `if test -f 'geom/LinearRingTest.cpp'; then $(CYGPATH_W) 'geom/LinearRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LinearRingTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LinearRingTest.Tpo $(DEPDIR)/LinearRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LinearRingTest.cpp' object='LinearRingTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LinearRingTest.obj `if test -f 'geom/LinearRingTest.cpp'; then $(CYGPATH_W) 'geom/LinearRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LinearRingTest.cpp'; fi` LineSegmentTest.o: geom/LineSegmentTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineSegmentTest.o -MD -MP -MF $(DEPDIR)/LineSegmentTest.Tpo -c -o LineSegmentTest.o `test -f 'geom/LineSegmentTest.cpp' || echo '$(srcdir)/'`geom/LineSegmentTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineSegmentTest.Tpo $(DEPDIR)/LineSegmentTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LineSegmentTest.cpp' object='LineSegmentTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineSegmentTest.o `test -f 'geom/LineSegmentTest.cpp' || echo '$(srcdir)/'`geom/LineSegmentTest.cpp LineSegmentTest.obj: geom/LineSegmentTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineSegmentTest.obj -MD -MP -MF $(DEPDIR)/LineSegmentTest.Tpo -c -o LineSegmentTest.obj `if test -f 'geom/LineSegmentTest.cpp'; then $(CYGPATH_W) 'geom/LineSegmentTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LineSegmentTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineSegmentTest.Tpo $(DEPDIR)/LineSegmentTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LineSegmentTest.cpp' object='LineSegmentTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineSegmentTest.obj `if test -f 'geom/LineSegmentTest.cpp'; then $(CYGPATH_W) 'geom/LineSegmentTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LineSegmentTest.cpp'; fi` LineStringTest.o: geom/LineStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineStringTest.o -MD -MP -MF $(DEPDIR)/LineStringTest.Tpo -c -o LineStringTest.o `test -f 'geom/LineStringTest.cpp' || echo '$(srcdir)/'`geom/LineStringTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineStringTest.Tpo $(DEPDIR)/LineStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LineStringTest.cpp' object='LineStringTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineStringTest.o `test -f 'geom/LineStringTest.cpp' || echo '$(srcdir)/'`geom/LineStringTest.cpp LineStringTest.obj: geom/LineStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineStringTest.obj -MD -MP -MF $(DEPDIR)/LineStringTest.Tpo -c -o LineStringTest.obj `if test -f 'geom/LineStringTest.cpp'; then $(CYGPATH_W) 'geom/LineStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LineStringTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineStringTest.Tpo $(DEPDIR)/LineStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LineStringTest.cpp' object='LineStringTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineStringTest.obj `if test -f 'geom/LineStringTest.cpp'; then $(CYGPATH_W) 'geom/LineStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LineStringTest.cpp'; fi` LocationTest.o: geom/LocationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LocationTest.o -MD -MP -MF $(DEPDIR)/LocationTest.Tpo -c -o LocationTest.o `test -f 'geom/LocationTest.cpp' || echo '$(srcdir)/'`geom/LocationTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LocationTest.Tpo $(DEPDIR)/LocationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LocationTest.cpp' object='LocationTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LocationTest.o `test -f 'geom/LocationTest.cpp' || echo '$(srcdir)/'`geom/LocationTest.cpp LocationTest.obj: geom/LocationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LocationTest.obj -MD -MP -MF $(DEPDIR)/LocationTest.Tpo -c -o LocationTest.obj `if test -f 'geom/LocationTest.cpp'; then $(CYGPATH_W) 'geom/LocationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LocationTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LocationTest.Tpo $(DEPDIR)/LocationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/LocationTest.cpp' object='LocationTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LocationTest.obj `if test -f 'geom/LocationTest.cpp'; then $(CYGPATH_W) 'geom/LocationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/LocationTest.cpp'; fi` MultiLineStringTest.o: geom/MultiLineStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiLineStringTest.o -MD -MP -MF $(DEPDIR)/MultiLineStringTest.Tpo -c -o MultiLineStringTest.o `test -f 'geom/MultiLineStringTest.cpp' || echo '$(srcdir)/'`geom/MultiLineStringTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiLineStringTest.Tpo $(DEPDIR)/MultiLineStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiLineStringTest.cpp' object='MultiLineStringTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiLineStringTest.o `test -f 'geom/MultiLineStringTest.cpp' || echo '$(srcdir)/'`geom/MultiLineStringTest.cpp MultiLineStringTest.obj: geom/MultiLineStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiLineStringTest.obj -MD -MP -MF $(DEPDIR)/MultiLineStringTest.Tpo -c -o MultiLineStringTest.obj `if test -f 'geom/MultiLineStringTest.cpp'; then $(CYGPATH_W) 'geom/MultiLineStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiLineStringTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiLineStringTest.Tpo $(DEPDIR)/MultiLineStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiLineStringTest.cpp' object='MultiLineStringTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiLineStringTest.obj `if test -f 'geom/MultiLineStringTest.cpp'; then $(CYGPATH_W) 'geom/MultiLineStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiLineStringTest.cpp'; fi` MultiPointTest.o: geom/MultiPointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiPointTest.o -MD -MP -MF $(DEPDIR)/MultiPointTest.Tpo -c -o MultiPointTest.o `test -f 'geom/MultiPointTest.cpp' || echo '$(srcdir)/'`geom/MultiPointTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiPointTest.Tpo $(DEPDIR)/MultiPointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiPointTest.cpp' object='MultiPointTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiPointTest.o `test -f 'geom/MultiPointTest.cpp' || echo '$(srcdir)/'`geom/MultiPointTest.cpp MultiPointTest.obj: geom/MultiPointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiPointTest.obj -MD -MP -MF $(DEPDIR)/MultiPointTest.Tpo -c -o MultiPointTest.obj `if test -f 'geom/MultiPointTest.cpp'; then $(CYGPATH_W) 'geom/MultiPointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiPointTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiPointTest.Tpo $(DEPDIR)/MultiPointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiPointTest.cpp' object='MultiPointTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiPointTest.obj `if test -f 'geom/MultiPointTest.cpp'; then $(CYGPATH_W) 'geom/MultiPointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiPointTest.cpp'; fi` MultiPolygonTest.o: geom/MultiPolygonTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiPolygonTest.o -MD -MP -MF $(DEPDIR)/MultiPolygonTest.Tpo -c -o MultiPolygonTest.o `test -f 'geom/MultiPolygonTest.cpp' || echo '$(srcdir)/'`geom/MultiPolygonTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiPolygonTest.Tpo $(DEPDIR)/MultiPolygonTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiPolygonTest.cpp' object='MultiPolygonTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiPolygonTest.o `test -f 'geom/MultiPolygonTest.cpp' || echo '$(srcdir)/'`geom/MultiPolygonTest.cpp MultiPolygonTest.obj: geom/MultiPolygonTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MultiPolygonTest.obj -MD -MP -MF $(DEPDIR)/MultiPolygonTest.Tpo -c -o MultiPolygonTest.obj `if test -f 'geom/MultiPolygonTest.cpp'; then $(CYGPATH_W) 'geom/MultiPolygonTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiPolygonTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MultiPolygonTest.Tpo $(DEPDIR)/MultiPolygonTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/MultiPolygonTest.cpp' object='MultiPolygonTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MultiPolygonTest.obj `if test -f 'geom/MultiPolygonTest.cpp'; then $(CYGPATH_W) 'geom/MultiPolygonTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/MultiPolygonTest.cpp'; fi` PointTest.o: geom/PointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PointTest.o -MD -MP -MF $(DEPDIR)/PointTest.Tpo -c -o PointTest.o `test -f 'geom/PointTest.cpp' || echo '$(srcdir)/'`geom/PointTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PointTest.Tpo $(DEPDIR)/PointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PointTest.cpp' object='PointTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PointTest.o `test -f 'geom/PointTest.cpp' || echo '$(srcdir)/'`geom/PointTest.cpp PointTest.obj: geom/PointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PointTest.obj -MD -MP -MF $(DEPDIR)/PointTest.Tpo -c -o PointTest.obj `if test -f 'geom/PointTest.cpp'; then $(CYGPATH_W) 'geom/PointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PointTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PointTest.Tpo $(DEPDIR)/PointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PointTest.cpp' object='PointTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PointTest.obj `if test -f 'geom/PointTest.cpp'; then $(CYGPATH_W) 'geom/PointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PointTest.cpp'; fi` PolygonTest.o: geom/PolygonTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PolygonTest.o -MD -MP -MF $(DEPDIR)/PolygonTest.Tpo -c -o PolygonTest.o `test -f 'geom/PolygonTest.cpp' || echo '$(srcdir)/'`geom/PolygonTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PolygonTest.Tpo $(DEPDIR)/PolygonTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PolygonTest.cpp' object='PolygonTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PolygonTest.o `test -f 'geom/PolygonTest.cpp' || echo '$(srcdir)/'`geom/PolygonTest.cpp PolygonTest.obj: geom/PolygonTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PolygonTest.obj -MD -MP -MF $(DEPDIR)/PolygonTest.Tpo -c -o PolygonTest.obj `if test -f 'geom/PolygonTest.cpp'; then $(CYGPATH_W) 'geom/PolygonTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PolygonTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PolygonTest.Tpo $(DEPDIR)/PolygonTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PolygonTest.cpp' object='PolygonTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PolygonTest.obj `if test -f 'geom/PolygonTest.cpp'; then $(CYGPATH_W) 'geom/PolygonTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PolygonTest.cpp'; fi` PrecisionModelTest.o: geom/PrecisionModelTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PrecisionModelTest.o -MD -MP -MF $(DEPDIR)/PrecisionModelTest.Tpo -c -o PrecisionModelTest.o `test -f 'geom/PrecisionModelTest.cpp' || echo '$(srcdir)/'`geom/PrecisionModelTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PrecisionModelTest.Tpo $(DEPDIR)/PrecisionModelTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PrecisionModelTest.cpp' object='PrecisionModelTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PrecisionModelTest.o `test -f 'geom/PrecisionModelTest.cpp' || echo '$(srcdir)/'`geom/PrecisionModelTest.cpp PrecisionModelTest.obj: geom/PrecisionModelTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PrecisionModelTest.obj -MD -MP -MF $(DEPDIR)/PrecisionModelTest.Tpo -c -o PrecisionModelTest.obj `if test -f 'geom/PrecisionModelTest.cpp'; then $(CYGPATH_W) 'geom/PrecisionModelTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PrecisionModelTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PrecisionModelTest.Tpo $(DEPDIR)/PrecisionModelTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/PrecisionModelTest.cpp' object='PrecisionModelTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PrecisionModelTest.obj `if test -f 'geom/PrecisionModelTest.cpp'; then $(CYGPATH_W) 'geom/PrecisionModelTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/PrecisionModelTest.cpp'; fi` PreparedGeometryFactoryTest.o: geom/prep/PreparedGeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PreparedGeometryFactoryTest.o -MD -MP -MF $(DEPDIR)/PreparedGeometryFactoryTest.Tpo -c -o PreparedGeometryFactoryTest.o `test -f 'geom/prep/PreparedGeometryFactoryTest.cpp' || echo '$(srcdir)/'`geom/prep/PreparedGeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PreparedGeometryFactoryTest.Tpo $(DEPDIR)/PreparedGeometryFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/prep/PreparedGeometryFactoryTest.cpp' object='PreparedGeometryFactoryTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PreparedGeometryFactoryTest.o `test -f 'geom/prep/PreparedGeometryFactoryTest.cpp' || echo '$(srcdir)/'`geom/prep/PreparedGeometryFactoryTest.cpp PreparedGeometryFactoryTest.obj: geom/prep/PreparedGeometryFactoryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PreparedGeometryFactoryTest.obj -MD -MP -MF $(DEPDIR)/PreparedGeometryFactoryTest.Tpo -c -o PreparedGeometryFactoryTest.obj `if test -f 'geom/prep/PreparedGeometryFactoryTest.cpp'; then $(CYGPATH_W) 'geom/prep/PreparedGeometryFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/prep/PreparedGeometryFactoryTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PreparedGeometryFactoryTest.Tpo $(DEPDIR)/PreparedGeometryFactoryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/prep/PreparedGeometryFactoryTest.cpp' object='PreparedGeometryFactoryTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PreparedGeometryFactoryTest.obj `if test -f 'geom/prep/PreparedGeometryFactoryTest.cpp'; then $(CYGPATH_W) 'geom/prep/PreparedGeometryFactoryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/prep/PreparedGeometryFactoryTest.cpp'; fi` TriangleTest.o: geom/TriangleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TriangleTest.o -MD -MP -MF $(DEPDIR)/TriangleTest.Tpo -c -o TriangleTest.o `test -f 'geom/TriangleTest.cpp' || echo '$(srcdir)/'`geom/TriangleTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/TriangleTest.Tpo $(DEPDIR)/TriangleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/TriangleTest.cpp' object='TriangleTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TriangleTest.o `test -f 'geom/TriangleTest.cpp' || echo '$(srcdir)/'`geom/TriangleTest.cpp TriangleTest.obj: geom/TriangleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TriangleTest.obj -MD -MP -MF $(DEPDIR)/TriangleTest.Tpo -c -o TriangleTest.obj `if test -f 'geom/TriangleTest.cpp'; then $(CYGPATH_W) 'geom/TriangleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/TriangleTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/TriangleTest.Tpo $(DEPDIR)/TriangleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/TriangleTest.cpp' object='TriangleTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TriangleTest.obj `if test -f 'geom/TriangleTest.cpp'; then $(CYGPATH_W) 'geom/TriangleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/TriangleTest.cpp'; fi` GeometryExtracterTest.o: geom/util/GeometryExtracterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryExtracterTest.o -MD -MP -MF $(DEPDIR)/GeometryExtracterTest.Tpo -c -o GeometryExtracterTest.o `test -f 'geom/util/GeometryExtracterTest.cpp' || echo '$(srcdir)/'`geom/util/GeometryExtracterTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryExtracterTest.Tpo $(DEPDIR)/GeometryExtracterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/util/GeometryExtracterTest.cpp' object='GeometryExtracterTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryExtracterTest.o `test -f 'geom/util/GeometryExtracterTest.cpp' || echo '$(srcdir)/'`geom/util/GeometryExtracterTest.cpp GeometryExtracterTest.obj: geom/util/GeometryExtracterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryExtracterTest.obj -MD -MP -MF $(DEPDIR)/GeometryExtracterTest.Tpo -c -o GeometryExtracterTest.obj `if test -f 'geom/util/GeometryExtracterTest.cpp'; then $(CYGPATH_W) 'geom/util/GeometryExtracterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/util/GeometryExtracterTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryExtracterTest.Tpo $(DEPDIR)/GeometryExtracterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='geom/util/GeometryExtracterTest.cpp' object='GeometryExtracterTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryExtracterTest.obj `if test -f 'geom/util/GeometryExtracterTest.cpp'; then $(CYGPATH_W) 'geom/util/GeometryExtracterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/geom/util/GeometryExtracterTest.cpp'; fi` DoubleBitsTest.o: index/quadtree/DoubleBitsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DoubleBitsTest.o -MD -MP -MF $(DEPDIR)/DoubleBitsTest.Tpo -c -o DoubleBitsTest.o `test -f 'index/quadtree/DoubleBitsTest.cpp' || echo '$(srcdir)/'`index/quadtree/DoubleBitsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DoubleBitsTest.Tpo $(DEPDIR)/DoubleBitsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='index/quadtree/DoubleBitsTest.cpp' object='DoubleBitsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DoubleBitsTest.o `test -f 'index/quadtree/DoubleBitsTest.cpp' || echo '$(srcdir)/'`index/quadtree/DoubleBitsTest.cpp DoubleBitsTest.obj: index/quadtree/DoubleBitsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DoubleBitsTest.obj -MD -MP -MF $(DEPDIR)/DoubleBitsTest.Tpo -c -o DoubleBitsTest.obj `if test -f 'index/quadtree/DoubleBitsTest.cpp'; then $(CYGPATH_W) 'index/quadtree/DoubleBitsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/index/quadtree/DoubleBitsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DoubleBitsTest.Tpo $(DEPDIR)/DoubleBitsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='index/quadtree/DoubleBitsTest.cpp' object='DoubleBitsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DoubleBitsTest.obj `if test -f 'index/quadtree/DoubleBitsTest.cpp'; then $(CYGPATH_W) 'index/quadtree/DoubleBitsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/index/quadtree/DoubleBitsTest.cpp'; fi` ByteOrderValuesTest.o: io/ByteOrderValuesTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ByteOrderValuesTest.o -MD -MP -MF $(DEPDIR)/ByteOrderValuesTest.Tpo -c -o ByteOrderValuesTest.o `test -f 'io/ByteOrderValuesTest.cpp' || echo '$(srcdir)/'`io/ByteOrderValuesTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ByteOrderValuesTest.Tpo $(DEPDIR)/ByteOrderValuesTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/ByteOrderValuesTest.cpp' object='ByteOrderValuesTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ByteOrderValuesTest.o `test -f 'io/ByteOrderValuesTest.cpp' || echo '$(srcdir)/'`io/ByteOrderValuesTest.cpp ByteOrderValuesTest.obj: io/ByteOrderValuesTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ByteOrderValuesTest.obj -MD -MP -MF $(DEPDIR)/ByteOrderValuesTest.Tpo -c -o ByteOrderValuesTest.obj `if test -f 'io/ByteOrderValuesTest.cpp'; then $(CYGPATH_W) 'io/ByteOrderValuesTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/ByteOrderValuesTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ByteOrderValuesTest.Tpo $(DEPDIR)/ByteOrderValuesTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/ByteOrderValuesTest.cpp' object='ByteOrderValuesTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ByteOrderValuesTest.obj `if test -f 'io/ByteOrderValuesTest.cpp'; then $(CYGPATH_W) 'io/ByteOrderValuesTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/ByteOrderValuesTest.cpp'; fi` WKBReaderTest.o: io/WKBReaderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKBReaderTest.o -MD -MP -MF $(DEPDIR)/WKBReaderTest.Tpo -c -o WKBReaderTest.o `test -f 'io/WKBReaderTest.cpp' || echo '$(srcdir)/'`io/WKBReaderTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKBReaderTest.Tpo $(DEPDIR)/WKBReaderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKBReaderTest.cpp' object='WKBReaderTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKBReaderTest.o `test -f 'io/WKBReaderTest.cpp' || echo '$(srcdir)/'`io/WKBReaderTest.cpp WKBReaderTest.obj: io/WKBReaderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKBReaderTest.obj -MD -MP -MF $(DEPDIR)/WKBReaderTest.Tpo -c -o WKBReaderTest.obj `if test -f 'io/WKBReaderTest.cpp'; then $(CYGPATH_W) 'io/WKBReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKBReaderTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKBReaderTest.Tpo $(DEPDIR)/WKBReaderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKBReaderTest.cpp' object='WKBReaderTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKBReaderTest.obj `if test -f 'io/WKBReaderTest.cpp'; then $(CYGPATH_W) 'io/WKBReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKBReaderTest.cpp'; fi` WKBWriterTest.o: io/WKBWriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKBWriterTest.o -MD -MP -MF $(DEPDIR)/WKBWriterTest.Tpo -c -o WKBWriterTest.o `test -f 'io/WKBWriterTest.cpp' || echo '$(srcdir)/'`io/WKBWriterTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKBWriterTest.Tpo $(DEPDIR)/WKBWriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKBWriterTest.cpp' object='WKBWriterTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKBWriterTest.o `test -f 'io/WKBWriterTest.cpp' || echo '$(srcdir)/'`io/WKBWriterTest.cpp WKBWriterTest.obj: io/WKBWriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKBWriterTest.obj -MD -MP -MF $(DEPDIR)/WKBWriterTest.Tpo -c -o WKBWriterTest.obj `if test -f 'io/WKBWriterTest.cpp'; then $(CYGPATH_W) 'io/WKBWriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKBWriterTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKBWriterTest.Tpo $(DEPDIR)/WKBWriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKBWriterTest.cpp' object='WKBWriterTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKBWriterTest.obj `if test -f 'io/WKBWriterTest.cpp'; then $(CYGPATH_W) 'io/WKBWriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKBWriterTest.cpp'; fi` WKTReaderTest.o: io/WKTReaderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKTReaderTest.o -MD -MP -MF $(DEPDIR)/WKTReaderTest.Tpo -c -o WKTReaderTest.o `test -f 'io/WKTReaderTest.cpp' || echo '$(srcdir)/'`io/WKTReaderTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKTReaderTest.Tpo $(DEPDIR)/WKTReaderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKTReaderTest.cpp' object='WKTReaderTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKTReaderTest.o `test -f 'io/WKTReaderTest.cpp' || echo '$(srcdir)/'`io/WKTReaderTest.cpp WKTReaderTest.obj: io/WKTReaderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKTReaderTest.obj -MD -MP -MF $(DEPDIR)/WKTReaderTest.Tpo -c -o WKTReaderTest.obj `if test -f 'io/WKTReaderTest.cpp'; then $(CYGPATH_W) 'io/WKTReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKTReaderTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKTReaderTest.Tpo $(DEPDIR)/WKTReaderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKTReaderTest.cpp' object='WKTReaderTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKTReaderTest.obj `if test -f 'io/WKTReaderTest.cpp'; then $(CYGPATH_W) 'io/WKTReaderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKTReaderTest.cpp'; fi` WKTWriterTest.o: io/WKTWriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKTWriterTest.o -MD -MP -MF $(DEPDIR)/WKTWriterTest.Tpo -c -o WKTWriterTest.o `test -f 'io/WKTWriterTest.cpp' || echo '$(srcdir)/'`io/WKTWriterTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKTWriterTest.Tpo $(DEPDIR)/WKTWriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKTWriterTest.cpp' object='WKTWriterTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKTWriterTest.o `test -f 'io/WKTWriterTest.cpp' || echo '$(srcdir)/'`io/WKTWriterTest.cpp WKTWriterTest.obj: io/WKTWriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WKTWriterTest.obj -MD -MP -MF $(DEPDIR)/WKTWriterTest.Tpo -c -o WKTWriterTest.obj `if test -f 'io/WKTWriterTest.cpp'; then $(CYGPATH_W) 'io/WKTWriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKTWriterTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WKTWriterTest.Tpo $(DEPDIR)/WKTWriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WKTWriterTest.cpp' object='WKTWriterTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WKTWriterTest.obj `if test -f 'io/WKTWriterTest.cpp'; then $(CYGPATH_W) 'io/WKTWriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WKTWriterTest.cpp'; fi` WriterTest.o: io/WriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WriterTest.o -MD -MP -MF $(DEPDIR)/WriterTest.Tpo -c -o WriterTest.o `test -f 'io/WriterTest.cpp' || echo '$(srcdir)/'`io/WriterTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WriterTest.Tpo $(DEPDIR)/WriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WriterTest.cpp' object='WriterTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WriterTest.o `test -f 'io/WriterTest.cpp' || echo '$(srcdir)/'`io/WriterTest.cpp WriterTest.obj: io/WriterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT WriterTest.obj -MD -MP -MF $(DEPDIR)/WriterTest.Tpo -c -o WriterTest.obj `if test -f 'io/WriterTest.cpp'; then $(CYGPATH_W) 'io/WriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WriterTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/WriterTest.Tpo $(DEPDIR)/WriterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='io/WriterTest.cpp' object='WriterTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o WriterTest.obj `if test -f 'io/WriterTest.cpp'; then $(CYGPATH_W) 'io/WriterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/io/WriterTest.cpp'; fi` LengthIndexedLineTest.o: linearref/LengthIndexedLineTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LengthIndexedLineTest.o -MD -MP -MF $(DEPDIR)/LengthIndexedLineTest.Tpo -c -o LengthIndexedLineTest.o `test -f 'linearref/LengthIndexedLineTest.cpp' || echo '$(srcdir)/'`linearref/LengthIndexedLineTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LengthIndexedLineTest.Tpo $(DEPDIR)/LengthIndexedLineTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='linearref/LengthIndexedLineTest.cpp' object='LengthIndexedLineTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LengthIndexedLineTest.o `test -f 'linearref/LengthIndexedLineTest.cpp' || echo '$(srcdir)/'`linearref/LengthIndexedLineTest.cpp LengthIndexedLineTest.obj: linearref/LengthIndexedLineTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LengthIndexedLineTest.obj -MD -MP -MF $(DEPDIR)/LengthIndexedLineTest.Tpo -c -o LengthIndexedLineTest.obj `if test -f 'linearref/LengthIndexedLineTest.cpp'; then $(CYGPATH_W) 'linearref/LengthIndexedLineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/linearref/LengthIndexedLineTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LengthIndexedLineTest.Tpo $(DEPDIR)/LengthIndexedLineTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='linearref/LengthIndexedLineTest.cpp' object='LengthIndexedLineTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LengthIndexedLineTest.obj `if test -f 'linearref/LengthIndexedLineTest.cpp'; then $(CYGPATH_W) 'linearref/LengthIndexedLineTest.cpp'; else $(CYGPATH_W) '$(srcdir)/linearref/LengthIndexedLineTest.cpp'; fi` BasicSegmentStringTest.o: noding/BasicSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BasicSegmentStringTest.o -MD -MP -MF $(DEPDIR)/BasicSegmentStringTest.Tpo -c -o BasicSegmentStringTest.o `test -f 'noding/BasicSegmentStringTest.cpp' || echo '$(srcdir)/'`noding/BasicSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BasicSegmentStringTest.Tpo $(DEPDIR)/BasicSegmentStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/BasicSegmentStringTest.cpp' object='BasicSegmentStringTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BasicSegmentStringTest.o `test -f 'noding/BasicSegmentStringTest.cpp' || echo '$(srcdir)/'`noding/BasicSegmentStringTest.cpp BasicSegmentStringTest.obj: noding/BasicSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BasicSegmentStringTest.obj -MD -MP -MF $(DEPDIR)/BasicSegmentStringTest.Tpo -c -o BasicSegmentStringTest.obj `if test -f 'noding/BasicSegmentStringTest.cpp'; then $(CYGPATH_W) 'noding/BasicSegmentStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/BasicSegmentStringTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BasicSegmentStringTest.Tpo $(DEPDIR)/BasicSegmentStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/BasicSegmentStringTest.cpp' object='BasicSegmentStringTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BasicSegmentStringTest.obj `if test -f 'noding/BasicSegmentStringTest.cpp'; then $(CYGPATH_W) 'noding/BasicSegmentStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/BasicSegmentStringTest.cpp'; fi` NodedSegmentStringTest.o: noding/NodedSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NodedSegmentStringTest.o -MD -MP -MF $(DEPDIR)/NodedSegmentStringTest.Tpo -c -o NodedSegmentStringTest.o `test -f 'noding/NodedSegmentStringTest.cpp' || echo '$(srcdir)/'`noding/NodedSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/NodedSegmentStringTest.Tpo $(DEPDIR)/NodedSegmentStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/NodedSegmentStringTest.cpp' object='NodedSegmentStringTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NodedSegmentStringTest.o `test -f 'noding/NodedSegmentStringTest.cpp' || echo '$(srcdir)/'`noding/NodedSegmentStringTest.cpp NodedSegmentStringTest.obj: noding/NodedSegmentStringTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT NodedSegmentStringTest.obj -MD -MP -MF $(DEPDIR)/NodedSegmentStringTest.Tpo -c -o NodedSegmentStringTest.obj `if test -f 'noding/NodedSegmentStringTest.cpp'; then $(CYGPATH_W) 'noding/NodedSegmentStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/NodedSegmentStringTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/NodedSegmentStringTest.Tpo $(DEPDIR)/NodedSegmentStringTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/NodedSegmentStringTest.cpp' object='NodedSegmentStringTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o NodedSegmentStringTest.obj `if test -f 'noding/NodedSegmentStringTest.cpp'; then $(CYGPATH_W) 'noding/NodedSegmentStringTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/NodedSegmentStringTest.cpp'; fi` OrientedCoordinateArray.o: noding/OrientedCoordinateArray.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OrientedCoordinateArray.o -MD -MP -MF $(DEPDIR)/OrientedCoordinateArray.Tpo -c -o OrientedCoordinateArray.o `test -f 'noding/OrientedCoordinateArray.cpp' || echo '$(srcdir)/'`noding/OrientedCoordinateArray.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OrientedCoordinateArray.Tpo $(DEPDIR)/OrientedCoordinateArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/OrientedCoordinateArray.cpp' object='OrientedCoordinateArray.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OrientedCoordinateArray.o `test -f 'noding/OrientedCoordinateArray.cpp' || echo '$(srcdir)/'`noding/OrientedCoordinateArray.cpp OrientedCoordinateArray.obj: noding/OrientedCoordinateArray.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OrientedCoordinateArray.obj -MD -MP -MF $(DEPDIR)/OrientedCoordinateArray.Tpo -c -o OrientedCoordinateArray.obj `if test -f 'noding/OrientedCoordinateArray.cpp'; then $(CYGPATH_W) 'noding/OrientedCoordinateArray.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/OrientedCoordinateArray.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OrientedCoordinateArray.Tpo $(DEPDIR)/OrientedCoordinateArray.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/OrientedCoordinateArray.cpp' object='OrientedCoordinateArray.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OrientedCoordinateArray.obj `if test -f 'noding/OrientedCoordinateArray.cpp'; then $(CYGPATH_W) 'noding/OrientedCoordinateArray.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/OrientedCoordinateArray.cpp'; fi` SegmentNodeTest.o: noding/SegmentNodeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentNodeTest.o -MD -MP -MF $(DEPDIR)/SegmentNodeTest.Tpo -c -o SegmentNodeTest.o `test -f 'noding/SegmentNodeTest.cpp' || echo '$(srcdir)/'`noding/SegmentNodeTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmentNodeTest.Tpo $(DEPDIR)/SegmentNodeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/SegmentNodeTest.cpp' object='SegmentNodeTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentNodeTest.o `test -f 'noding/SegmentNodeTest.cpp' || echo '$(srcdir)/'`noding/SegmentNodeTest.cpp SegmentNodeTest.obj: noding/SegmentNodeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentNodeTest.obj -MD -MP -MF $(DEPDIR)/SegmentNodeTest.Tpo -c -o SegmentNodeTest.obj `if test -f 'noding/SegmentNodeTest.cpp'; then $(CYGPATH_W) 'noding/SegmentNodeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/SegmentNodeTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmentNodeTest.Tpo $(DEPDIR)/SegmentNodeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/SegmentNodeTest.cpp' object='SegmentNodeTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentNodeTest.obj `if test -f 'noding/SegmentNodeTest.cpp'; then $(CYGPATH_W) 'noding/SegmentNodeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/SegmentNodeTest.cpp'; fi` SegmentPointComparatorTest.o: noding/SegmentPointComparatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentPointComparatorTest.o -MD -MP -MF $(DEPDIR)/SegmentPointComparatorTest.Tpo -c -o SegmentPointComparatorTest.o `test -f 'noding/SegmentPointComparatorTest.cpp' || echo '$(srcdir)/'`noding/SegmentPointComparatorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmentPointComparatorTest.Tpo $(DEPDIR)/SegmentPointComparatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/SegmentPointComparatorTest.cpp' object='SegmentPointComparatorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentPointComparatorTest.o `test -f 'noding/SegmentPointComparatorTest.cpp' || echo '$(srcdir)/'`noding/SegmentPointComparatorTest.cpp SegmentPointComparatorTest.obj: noding/SegmentPointComparatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentPointComparatorTest.obj -MD -MP -MF $(DEPDIR)/SegmentPointComparatorTest.Tpo -c -o SegmentPointComparatorTest.obj `if test -f 'noding/SegmentPointComparatorTest.cpp'; then $(CYGPATH_W) 'noding/SegmentPointComparatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/SegmentPointComparatorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmentPointComparatorTest.Tpo $(DEPDIR)/SegmentPointComparatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/SegmentPointComparatorTest.cpp' object='SegmentPointComparatorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentPointComparatorTest.obj `if test -f 'noding/SegmentPointComparatorTest.cpp'; then $(CYGPATH_W) 'noding/SegmentPointComparatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/SegmentPointComparatorTest.cpp'; fi` HotPixelTest.o: noding/snapround/HotPixelTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HotPixelTest.o -MD -MP -MF $(DEPDIR)/HotPixelTest.Tpo -c -o HotPixelTest.o `test -f 'noding/snapround/HotPixelTest.cpp' || echo '$(srcdir)/'`noding/snapround/HotPixelTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/HotPixelTest.Tpo $(DEPDIR)/HotPixelTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/snapround/HotPixelTest.cpp' object='HotPixelTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HotPixelTest.o `test -f 'noding/snapround/HotPixelTest.cpp' || echo '$(srcdir)/'`noding/snapround/HotPixelTest.cpp HotPixelTest.obj: noding/snapround/HotPixelTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HotPixelTest.obj -MD -MP -MF $(DEPDIR)/HotPixelTest.Tpo -c -o HotPixelTest.obj `if test -f 'noding/snapround/HotPixelTest.cpp'; then $(CYGPATH_W) 'noding/snapround/HotPixelTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/snapround/HotPixelTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/HotPixelTest.Tpo $(DEPDIR)/HotPixelTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/snapround/HotPixelTest.cpp' object='HotPixelTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HotPixelTest.obj `if test -f 'noding/snapround/HotPixelTest.cpp'; then $(CYGPATH_W) 'noding/snapround/HotPixelTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/snapround/HotPixelTest.cpp'; fi` MCIndexSnapRounderTest.o: noding/snapround/MCIndexSnapRounderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MCIndexSnapRounderTest.o -MD -MP -MF $(DEPDIR)/MCIndexSnapRounderTest.Tpo -c -o MCIndexSnapRounderTest.o `test -f 'noding/snapround/MCIndexSnapRounderTest.cpp' || echo '$(srcdir)/'`noding/snapround/MCIndexSnapRounderTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MCIndexSnapRounderTest.Tpo $(DEPDIR)/MCIndexSnapRounderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/snapround/MCIndexSnapRounderTest.cpp' object='MCIndexSnapRounderTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MCIndexSnapRounderTest.o `test -f 'noding/snapround/MCIndexSnapRounderTest.cpp' || echo '$(srcdir)/'`noding/snapround/MCIndexSnapRounderTest.cpp MCIndexSnapRounderTest.obj: noding/snapround/MCIndexSnapRounderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT MCIndexSnapRounderTest.obj -MD -MP -MF $(DEPDIR)/MCIndexSnapRounderTest.Tpo -c -o MCIndexSnapRounderTest.obj `if test -f 'noding/snapround/MCIndexSnapRounderTest.cpp'; then $(CYGPATH_W) 'noding/snapround/MCIndexSnapRounderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/snapround/MCIndexSnapRounderTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/MCIndexSnapRounderTest.Tpo $(DEPDIR)/MCIndexSnapRounderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='noding/snapround/MCIndexSnapRounderTest.cpp' object='MCIndexSnapRounderTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o MCIndexSnapRounderTest.obj `if test -f 'noding/snapround/MCIndexSnapRounderTest.cpp'; then $(CYGPATH_W) 'noding/snapround/MCIndexSnapRounderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/noding/snapround/MCIndexSnapRounderTest.cpp'; fi` BufferBuilderTest.o: operation/buffer/BufferBuilderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferBuilderTest.o -MD -MP -MF $(DEPDIR)/BufferBuilderTest.Tpo -c -o BufferBuilderTest.o `test -f 'operation/buffer/BufferBuilderTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferBuilderTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferBuilderTest.Tpo $(DEPDIR)/BufferBuilderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferBuilderTest.cpp' object='BufferBuilderTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferBuilderTest.o `test -f 'operation/buffer/BufferBuilderTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferBuilderTest.cpp BufferBuilderTest.obj: operation/buffer/BufferBuilderTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferBuilderTest.obj -MD -MP -MF $(DEPDIR)/BufferBuilderTest.Tpo -c -o BufferBuilderTest.obj `if test -f 'operation/buffer/BufferBuilderTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferBuilderTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferBuilderTest.Tpo $(DEPDIR)/BufferBuilderTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferBuilderTest.cpp' object='BufferBuilderTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferBuilderTest.obj `if test -f 'operation/buffer/BufferBuilderTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferBuilderTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferBuilderTest.cpp'; fi` BufferOpTest.o: operation/buffer/BufferOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferOpTest.o -MD -MP -MF $(DEPDIR)/BufferOpTest.Tpo -c -o BufferOpTest.o `test -f 'operation/buffer/BufferOpTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferOpTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferOpTest.Tpo $(DEPDIR)/BufferOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferOpTest.cpp' object='BufferOpTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferOpTest.o `test -f 'operation/buffer/BufferOpTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferOpTest.cpp BufferOpTest.obj: operation/buffer/BufferOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferOpTest.obj -MD -MP -MF $(DEPDIR)/BufferOpTest.Tpo -c -o BufferOpTest.obj `if test -f 'operation/buffer/BufferOpTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferOpTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferOpTest.Tpo $(DEPDIR)/BufferOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferOpTest.cpp' object='BufferOpTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferOpTest.obj `if test -f 'operation/buffer/BufferOpTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferOpTest.cpp'; fi` BufferParametersTest.o: operation/buffer/BufferParametersTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferParametersTest.o -MD -MP -MF $(DEPDIR)/BufferParametersTest.Tpo -c -o BufferParametersTest.o `test -f 'operation/buffer/BufferParametersTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferParametersTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferParametersTest.Tpo $(DEPDIR)/BufferParametersTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferParametersTest.cpp' object='BufferParametersTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferParametersTest.o `test -f 'operation/buffer/BufferParametersTest.cpp' || echo '$(srcdir)/'`operation/buffer/BufferParametersTest.cpp BufferParametersTest.obj: operation/buffer/BufferParametersTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT BufferParametersTest.obj -MD -MP -MF $(DEPDIR)/BufferParametersTest.Tpo -c -o BufferParametersTest.obj `if test -f 'operation/buffer/BufferParametersTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferParametersTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferParametersTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/BufferParametersTest.Tpo $(DEPDIR)/BufferParametersTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/buffer/BufferParametersTest.cpp' object='BufferParametersTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o BufferParametersTest.obj `if test -f 'operation/buffer/BufferParametersTest.cpp'; then $(CYGPATH_W) 'operation/buffer/BufferParametersTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/buffer/BufferParametersTest.cpp'; fi` DistanceOpTest.o: operation/distance/DistanceOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DistanceOpTest.o -MD -MP -MF $(DEPDIR)/DistanceOpTest.Tpo -c -o DistanceOpTest.o `test -f 'operation/distance/DistanceOpTest.cpp' || echo '$(srcdir)/'`operation/distance/DistanceOpTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DistanceOpTest.Tpo $(DEPDIR)/DistanceOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/distance/DistanceOpTest.cpp' object='DistanceOpTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DistanceOpTest.o `test -f 'operation/distance/DistanceOpTest.cpp' || echo '$(srcdir)/'`operation/distance/DistanceOpTest.cpp DistanceOpTest.obj: operation/distance/DistanceOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DistanceOpTest.obj -MD -MP -MF $(DEPDIR)/DistanceOpTest.Tpo -c -o DistanceOpTest.obj `if test -f 'operation/distance/DistanceOpTest.cpp'; then $(CYGPATH_W) 'operation/distance/DistanceOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/distance/DistanceOpTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DistanceOpTest.Tpo $(DEPDIR)/DistanceOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/distance/DistanceOpTest.cpp' object='DistanceOpTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DistanceOpTest.obj `if test -f 'operation/distance/DistanceOpTest.cpp'; then $(CYGPATH_W) 'operation/distance/DistanceOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/distance/DistanceOpTest.cpp'; fi` IsSimpleOpTest.o: operation/IsSimpleOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IsSimpleOpTest.o -MD -MP -MF $(DEPDIR)/IsSimpleOpTest.Tpo -c -o IsSimpleOpTest.o `test -f 'operation/IsSimpleOpTest.cpp' || echo '$(srcdir)/'`operation/IsSimpleOpTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IsSimpleOpTest.Tpo $(DEPDIR)/IsSimpleOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/IsSimpleOpTest.cpp' object='IsSimpleOpTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IsSimpleOpTest.o `test -f 'operation/IsSimpleOpTest.cpp' || echo '$(srcdir)/'`operation/IsSimpleOpTest.cpp IsSimpleOpTest.obj: operation/IsSimpleOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IsSimpleOpTest.obj -MD -MP -MF $(DEPDIR)/IsSimpleOpTest.Tpo -c -o IsSimpleOpTest.obj `if test -f 'operation/IsSimpleOpTest.cpp'; then $(CYGPATH_W) 'operation/IsSimpleOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/IsSimpleOpTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IsSimpleOpTest.Tpo $(DEPDIR)/IsSimpleOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/IsSimpleOpTest.cpp' object='IsSimpleOpTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IsSimpleOpTest.obj `if test -f 'operation/IsSimpleOpTest.cpp'; then $(CYGPATH_W) 'operation/IsSimpleOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/IsSimpleOpTest.cpp'; fi` LineMergerTest.o: operation/linemerge/LineMergerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineMergerTest.o -MD -MP -MF $(DEPDIR)/LineMergerTest.Tpo -c -o LineMergerTest.o `test -f 'operation/linemerge/LineMergerTest.cpp' || echo '$(srcdir)/'`operation/linemerge/LineMergerTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineMergerTest.Tpo $(DEPDIR)/LineMergerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/linemerge/LineMergerTest.cpp' object='LineMergerTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineMergerTest.o `test -f 'operation/linemerge/LineMergerTest.cpp' || echo '$(srcdir)/'`operation/linemerge/LineMergerTest.cpp LineMergerTest.obj: operation/linemerge/LineMergerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineMergerTest.obj -MD -MP -MF $(DEPDIR)/LineMergerTest.Tpo -c -o LineMergerTest.obj `if test -f 'operation/linemerge/LineMergerTest.cpp'; then $(CYGPATH_W) 'operation/linemerge/LineMergerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/linemerge/LineMergerTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineMergerTest.Tpo $(DEPDIR)/LineMergerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/linemerge/LineMergerTest.cpp' object='LineMergerTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineMergerTest.obj `if test -f 'operation/linemerge/LineMergerTest.cpp'; then $(CYGPATH_W) 'operation/linemerge/LineMergerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/linemerge/LineMergerTest.cpp'; fi` LineSequencerTest.o: operation/linemerge/LineSequencerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineSequencerTest.o -MD -MP -MF $(DEPDIR)/LineSequencerTest.Tpo -c -o LineSequencerTest.o `test -f 'operation/linemerge/LineSequencerTest.cpp' || echo '$(srcdir)/'`operation/linemerge/LineSequencerTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineSequencerTest.Tpo $(DEPDIR)/LineSequencerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/linemerge/LineSequencerTest.cpp' object='LineSequencerTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineSequencerTest.o `test -f 'operation/linemerge/LineSequencerTest.cpp' || echo '$(srcdir)/'`operation/linemerge/LineSequencerTest.cpp LineSequencerTest.obj: operation/linemerge/LineSequencerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineSequencerTest.obj -MD -MP -MF $(DEPDIR)/LineSequencerTest.Tpo -c -o LineSequencerTest.obj `if test -f 'operation/linemerge/LineSequencerTest.cpp'; then $(CYGPATH_W) 'operation/linemerge/LineSequencerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/linemerge/LineSequencerTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineSequencerTest.Tpo $(DEPDIR)/LineSequencerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/linemerge/LineSequencerTest.cpp' object='LineSequencerTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineSequencerTest.obj `if test -f 'operation/linemerge/LineSequencerTest.cpp'; then $(CYGPATH_W) 'operation/linemerge/LineSequencerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/linemerge/LineSequencerTest.cpp'; fi` FuzzyPointLocatorTest.o: operation/overlay/validate/FuzzyPointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FuzzyPointLocatorTest.o -MD -MP -MF $(DEPDIR)/FuzzyPointLocatorTest.Tpo -c -o FuzzyPointLocatorTest.o `test -f 'operation/overlay/validate/FuzzyPointLocatorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/FuzzyPointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/FuzzyPointLocatorTest.Tpo $(DEPDIR)/FuzzyPointLocatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/FuzzyPointLocatorTest.cpp' object='FuzzyPointLocatorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FuzzyPointLocatorTest.o `test -f 'operation/overlay/validate/FuzzyPointLocatorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/FuzzyPointLocatorTest.cpp FuzzyPointLocatorTest.obj: operation/overlay/validate/FuzzyPointLocatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT FuzzyPointLocatorTest.obj -MD -MP -MF $(DEPDIR)/FuzzyPointLocatorTest.Tpo -c -o FuzzyPointLocatorTest.obj `if test -f 'operation/overlay/validate/FuzzyPointLocatorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/FuzzyPointLocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/FuzzyPointLocatorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/FuzzyPointLocatorTest.Tpo $(DEPDIR)/FuzzyPointLocatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/FuzzyPointLocatorTest.cpp' object='FuzzyPointLocatorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o FuzzyPointLocatorTest.obj `if test -f 'operation/overlay/validate/FuzzyPointLocatorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/FuzzyPointLocatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/FuzzyPointLocatorTest.cpp'; fi` OffsetPointGeneratorTest.o: operation/overlay/validate/OffsetPointGeneratorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OffsetPointGeneratorTest.o -MD -MP -MF $(DEPDIR)/OffsetPointGeneratorTest.Tpo -c -o OffsetPointGeneratorTest.o `test -f 'operation/overlay/validate/OffsetPointGeneratorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/OffsetPointGeneratorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OffsetPointGeneratorTest.Tpo $(DEPDIR)/OffsetPointGeneratorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/OffsetPointGeneratorTest.cpp' object='OffsetPointGeneratorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OffsetPointGeneratorTest.o `test -f 'operation/overlay/validate/OffsetPointGeneratorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/OffsetPointGeneratorTest.cpp OffsetPointGeneratorTest.obj: operation/overlay/validate/OffsetPointGeneratorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OffsetPointGeneratorTest.obj -MD -MP -MF $(DEPDIR)/OffsetPointGeneratorTest.Tpo -c -o OffsetPointGeneratorTest.obj `if test -f 'operation/overlay/validate/OffsetPointGeneratorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/OffsetPointGeneratorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/OffsetPointGeneratorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OffsetPointGeneratorTest.Tpo $(DEPDIR)/OffsetPointGeneratorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/OffsetPointGeneratorTest.cpp' object='OffsetPointGeneratorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OffsetPointGeneratorTest.obj `if test -f 'operation/overlay/validate/OffsetPointGeneratorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/OffsetPointGeneratorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/OffsetPointGeneratorTest.cpp'; fi` OverlayResultValidatorTest.o: operation/overlay/validate/OverlayResultValidatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OverlayResultValidatorTest.o -MD -MP -MF $(DEPDIR)/OverlayResultValidatorTest.Tpo -c -o OverlayResultValidatorTest.o `test -f 'operation/overlay/validate/OverlayResultValidatorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/OverlayResultValidatorTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OverlayResultValidatorTest.Tpo $(DEPDIR)/OverlayResultValidatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/OverlayResultValidatorTest.cpp' object='OverlayResultValidatorTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OverlayResultValidatorTest.o `test -f 'operation/overlay/validate/OverlayResultValidatorTest.cpp' || echo '$(srcdir)/'`operation/overlay/validate/OverlayResultValidatorTest.cpp OverlayResultValidatorTest.obj: operation/overlay/validate/OverlayResultValidatorTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT OverlayResultValidatorTest.obj -MD -MP -MF $(DEPDIR)/OverlayResultValidatorTest.Tpo -c -o OverlayResultValidatorTest.obj `if test -f 'operation/overlay/validate/OverlayResultValidatorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/OverlayResultValidatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/OverlayResultValidatorTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/OverlayResultValidatorTest.Tpo $(DEPDIR)/OverlayResultValidatorTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/validate/OverlayResultValidatorTest.cpp' object='OverlayResultValidatorTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o OverlayResultValidatorTest.obj `if test -f 'operation/overlay/validate/OverlayResultValidatorTest.cpp'; then $(CYGPATH_W) 'operation/overlay/validate/OverlayResultValidatorTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/validate/OverlayResultValidatorTest.cpp'; fi` GeometrySnapperTest.o: operation/overlay/snap/GeometrySnapperTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometrySnapperTest.o -MD -MP -MF $(DEPDIR)/GeometrySnapperTest.Tpo -c -o GeometrySnapperTest.o `test -f 'operation/overlay/snap/GeometrySnapperTest.cpp' || echo '$(srcdir)/'`operation/overlay/snap/GeometrySnapperTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometrySnapperTest.Tpo $(DEPDIR)/GeometrySnapperTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/snap/GeometrySnapperTest.cpp' object='GeometrySnapperTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometrySnapperTest.o `test -f 'operation/overlay/snap/GeometrySnapperTest.cpp' || echo '$(srcdir)/'`operation/overlay/snap/GeometrySnapperTest.cpp GeometrySnapperTest.obj: operation/overlay/snap/GeometrySnapperTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometrySnapperTest.obj -MD -MP -MF $(DEPDIR)/GeometrySnapperTest.Tpo -c -o GeometrySnapperTest.obj `if test -f 'operation/overlay/snap/GeometrySnapperTest.cpp'; then $(CYGPATH_W) 'operation/overlay/snap/GeometrySnapperTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/snap/GeometrySnapperTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometrySnapperTest.Tpo $(DEPDIR)/GeometrySnapperTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/snap/GeometrySnapperTest.cpp' object='GeometrySnapperTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometrySnapperTest.obj `if test -f 'operation/overlay/snap/GeometrySnapperTest.cpp'; then $(CYGPATH_W) 'operation/overlay/snap/GeometrySnapperTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/snap/GeometrySnapperTest.cpp'; fi` LineStringSnapperTest.o: operation/overlay/snap/LineStringSnapperTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineStringSnapperTest.o -MD -MP -MF $(DEPDIR)/LineStringSnapperTest.Tpo -c -o LineStringSnapperTest.o `test -f 'operation/overlay/snap/LineStringSnapperTest.cpp' || echo '$(srcdir)/'`operation/overlay/snap/LineStringSnapperTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineStringSnapperTest.Tpo $(DEPDIR)/LineStringSnapperTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/snap/LineStringSnapperTest.cpp' object='LineStringSnapperTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineStringSnapperTest.o `test -f 'operation/overlay/snap/LineStringSnapperTest.cpp' || echo '$(srcdir)/'`operation/overlay/snap/LineStringSnapperTest.cpp LineStringSnapperTest.obj: operation/overlay/snap/LineStringSnapperTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LineStringSnapperTest.obj -MD -MP -MF $(DEPDIR)/LineStringSnapperTest.Tpo -c -o LineStringSnapperTest.obj `if test -f 'operation/overlay/snap/LineStringSnapperTest.cpp'; then $(CYGPATH_W) 'operation/overlay/snap/LineStringSnapperTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/snap/LineStringSnapperTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/LineStringSnapperTest.Tpo $(DEPDIR)/LineStringSnapperTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/overlay/snap/LineStringSnapperTest.cpp' object='LineStringSnapperTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LineStringSnapperTest.obj `if test -f 'operation/overlay/snap/LineStringSnapperTest.cpp'; then $(CYGPATH_W) 'operation/overlay/snap/LineStringSnapperTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/overlay/snap/LineStringSnapperTest.cpp'; fi` PolygonizeTest.o: operation/polygonize/PolygonizeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PolygonizeTest.o -MD -MP -MF $(DEPDIR)/PolygonizeTest.Tpo -c -o PolygonizeTest.o `test -f 'operation/polygonize/PolygonizeTest.cpp' || echo '$(srcdir)/'`operation/polygonize/PolygonizeTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PolygonizeTest.Tpo $(DEPDIR)/PolygonizeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/polygonize/PolygonizeTest.cpp' object='PolygonizeTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PolygonizeTest.o `test -f 'operation/polygonize/PolygonizeTest.cpp' || echo '$(srcdir)/'`operation/polygonize/PolygonizeTest.cpp PolygonizeTest.obj: operation/polygonize/PolygonizeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT PolygonizeTest.obj -MD -MP -MF $(DEPDIR)/PolygonizeTest.Tpo -c -o PolygonizeTest.obj `if test -f 'operation/polygonize/PolygonizeTest.cpp'; then $(CYGPATH_W) 'operation/polygonize/PolygonizeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/polygonize/PolygonizeTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/PolygonizeTest.Tpo $(DEPDIR)/PolygonizeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/polygonize/PolygonizeTest.cpp' object='PolygonizeTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o PolygonizeTest.obj `if test -f 'operation/polygonize/PolygonizeTest.cpp'; then $(CYGPATH_W) 'operation/polygonize/PolygonizeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/polygonize/PolygonizeTest.cpp'; fi` SharedPathsOpTest.o: operation/sharedpaths/SharedPathsOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SharedPathsOpTest.o -MD -MP -MF $(DEPDIR)/SharedPathsOpTest.Tpo -c -o SharedPathsOpTest.o `test -f 'operation/sharedpaths/SharedPathsOpTest.cpp' || echo '$(srcdir)/'`operation/sharedpaths/SharedPathsOpTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SharedPathsOpTest.Tpo $(DEPDIR)/SharedPathsOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/sharedpaths/SharedPathsOpTest.cpp' object='SharedPathsOpTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SharedPathsOpTest.o `test -f 'operation/sharedpaths/SharedPathsOpTest.cpp' || echo '$(srcdir)/'`operation/sharedpaths/SharedPathsOpTest.cpp SharedPathsOpTest.obj: operation/sharedpaths/SharedPathsOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SharedPathsOpTest.obj -MD -MP -MF $(DEPDIR)/SharedPathsOpTest.Tpo -c -o SharedPathsOpTest.obj `if test -f 'operation/sharedpaths/SharedPathsOpTest.cpp'; then $(CYGPATH_W) 'operation/sharedpaths/SharedPathsOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/sharedpaths/SharedPathsOpTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SharedPathsOpTest.Tpo $(DEPDIR)/SharedPathsOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/sharedpaths/SharedPathsOpTest.cpp' object='SharedPathsOpTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SharedPathsOpTest.obj `if test -f 'operation/sharedpaths/SharedPathsOpTest.cpp'; then $(CYGPATH_W) 'operation/sharedpaths/SharedPathsOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/sharedpaths/SharedPathsOpTest.cpp'; fi` CascadedPolygonUnionTest.o: operation/union/CascadedPolygonUnionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CascadedPolygonUnionTest.o -MD -MP -MF $(DEPDIR)/CascadedPolygonUnionTest.Tpo -c -o CascadedPolygonUnionTest.o `test -f 'operation/union/CascadedPolygonUnionTest.cpp' || echo '$(srcdir)/'`operation/union/CascadedPolygonUnionTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CascadedPolygonUnionTest.Tpo $(DEPDIR)/CascadedPolygonUnionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/union/CascadedPolygonUnionTest.cpp' object='CascadedPolygonUnionTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CascadedPolygonUnionTest.o `test -f 'operation/union/CascadedPolygonUnionTest.cpp' || echo '$(srcdir)/'`operation/union/CascadedPolygonUnionTest.cpp CascadedPolygonUnionTest.obj: operation/union/CascadedPolygonUnionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT CascadedPolygonUnionTest.obj -MD -MP -MF $(DEPDIR)/CascadedPolygonUnionTest.Tpo -c -o CascadedPolygonUnionTest.obj `if test -f 'operation/union/CascadedPolygonUnionTest.cpp'; then $(CYGPATH_W) 'operation/union/CascadedPolygonUnionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/union/CascadedPolygonUnionTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/CascadedPolygonUnionTest.Tpo $(DEPDIR)/CascadedPolygonUnionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/union/CascadedPolygonUnionTest.cpp' object='CascadedPolygonUnionTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o CascadedPolygonUnionTest.obj `if test -f 'operation/union/CascadedPolygonUnionTest.cpp'; then $(CYGPATH_W) 'operation/union/CascadedPolygonUnionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/union/CascadedPolygonUnionTest.cpp'; fi` UnaryUnionOpTest.o: operation/union/UnaryUnionOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnaryUnionOpTest.o -MD -MP -MF $(DEPDIR)/UnaryUnionOpTest.Tpo -c -o UnaryUnionOpTest.o `test -f 'operation/union/UnaryUnionOpTest.cpp' || echo '$(srcdir)/'`operation/union/UnaryUnionOpTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UnaryUnionOpTest.Tpo $(DEPDIR)/UnaryUnionOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/union/UnaryUnionOpTest.cpp' object='UnaryUnionOpTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnaryUnionOpTest.o `test -f 'operation/union/UnaryUnionOpTest.cpp' || echo '$(srcdir)/'`operation/union/UnaryUnionOpTest.cpp UnaryUnionOpTest.obj: operation/union/UnaryUnionOpTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnaryUnionOpTest.obj -MD -MP -MF $(DEPDIR)/UnaryUnionOpTest.Tpo -c -o UnaryUnionOpTest.obj `if test -f 'operation/union/UnaryUnionOpTest.cpp'; then $(CYGPATH_W) 'operation/union/UnaryUnionOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/union/UnaryUnionOpTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UnaryUnionOpTest.Tpo $(DEPDIR)/UnaryUnionOpTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/union/UnaryUnionOpTest.cpp' object='UnaryUnionOpTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnaryUnionOpTest.obj `if test -f 'operation/union/UnaryUnionOpTest.cpp'; then $(CYGPATH_W) 'operation/union/UnaryUnionOpTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/union/UnaryUnionOpTest.cpp'; fi` IsValidTest.o: operation/valid/IsValidTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IsValidTest.o -MD -MP -MF $(DEPDIR)/IsValidTest.Tpo -c -o IsValidTest.o `test -f 'operation/valid/IsValidTest.cpp' || echo '$(srcdir)/'`operation/valid/IsValidTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IsValidTest.Tpo $(DEPDIR)/IsValidTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/IsValidTest.cpp' object='IsValidTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IsValidTest.o `test -f 'operation/valid/IsValidTest.cpp' || echo '$(srcdir)/'`operation/valid/IsValidTest.cpp IsValidTest.obj: operation/valid/IsValidTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT IsValidTest.obj -MD -MP -MF $(DEPDIR)/IsValidTest.Tpo -c -o IsValidTest.obj `if test -f 'operation/valid/IsValidTest.cpp'; then $(CYGPATH_W) 'operation/valid/IsValidTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/IsValidTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/IsValidTest.Tpo $(DEPDIR)/IsValidTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/IsValidTest.cpp' object='IsValidTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o IsValidTest.obj `if test -f 'operation/valid/IsValidTest.cpp'; then $(CYGPATH_W) 'operation/valid/IsValidTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/IsValidTest.cpp'; fi` ValidClosedRingTest.o: operation/valid/ValidClosedRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ValidClosedRingTest.o -MD -MP -MF $(DEPDIR)/ValidClosedRingTest.Tpo -c -o ValidClosedRingTest.o `test -f 'operation/valid/ValidClosedRingTest.cpp' || echo '$(srcdir)/'`operation/valid/ValidClosedRingTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ValidClosedRingTest.Tpo $(DEPDIR)/ValidClosedRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/ValidClosedRingTest.cpp' object='ValidClosedRingTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ValidClosedRingTest.o `test -f 'operation/valid/ValidClosedRingTest.cpp' || echo '$(srcdir)/'`operation/valid/ValidClosedRingTest.cpp ValidClosedRingTest.obj: operation/valid/ValidClosedRingTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ValidClosedRingTest.obj -MD -MP -MF $(DEPDIR)/ValidClosedRingTest.Tpo -c -o ValidClosedRingTest.obj `if test -f 'operation/valid/ValidClosedRingTest.cpp'; then $(CYGPATH_W) 'operation/valid/ValidClosedRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/ValidClosedRingTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ValidClosedRingTest.Tpo $(DEPDIR)/ValidClosedRingTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/ValidClosedRingTest.cpp' object='ValidClosedRingTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ValidClosedRingTest.obj `if test -f 'operation/valid/ValidClosedRingTest.cpp'; then $(CYGPATH_W) 'operation/valid/ValidClosedRingTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/ValidClosedRingTest.cpp'; fi` ValidSelfTouchingRingFormingHoleTest.o: operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ValidSelfTouchingRingFormingHoleTest.o -MD -MP -MF $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Tpo -c -o ValidSelfTouchingRingFormingHoleTest.o `test -f 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp' || echo '$(srcdir)/'`operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Tpo $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp' object='ValidSelfTouchingRingFormingHoleTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ValidSelfTouchingRingFormingHoleTest.o `test -f 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp' || echo '$(srcdir)/'`operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp ValidSelfTouchingRingFormingHoleTest.obj: operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ValidSelfTouchingRingFormingHoleTest.obj -MD -MP -MF $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Tpo -c -o ValidSelfTouchingRingFormingHoleTest.obj `if test -f 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; then $(CYGPATH_W) 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Tpo $(DEPDIR)/ValidSelfTouchingRingFormingHoleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp' object='ValidSelfTouchingRingFormingHoleTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ValidSelfTouchingRingFormingHoleTest.obj `if test -f 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; then $(CYGPATH_W) 'operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp'; fi` SimpleGeometryPrecisionReducerTest.o: precision/SimpleGeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SimpleGeometryPrecisionReducerTest.o -MD -MP -MF $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Tpo -c -o SimpleGeometryPrecisionReducerTest.o `test -f 'precision/SimpleGeometryPrecisionReducerTest.cpp' || echo '$(srcdir)/'`precision/SimpleGeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Tpo $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='precision/SimpleGeometryPrecisionReducerTest.cpp' object='SimpleGeometryPrecisionReducerTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SimpleGeometryPrecisionReducerTest.o `test -f 'precision/SimpleGeometryPrecisionReducerTest.cpp' || echo '$(srcdir)/'`precision/SimpleGeometryPrecisionReducerTest.cpp SimpleGeometryPrecisionReducerTest.obj: precision/SimpleGeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SimpleGeometryPrecisionReducerTest.obj -MD -MP -MF $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Tpo -c -o SimpleGeometryPrecisionReducerTest.obj `if test -f 'precision/SimpleGeometryPrecisionReducerTest.cpp'; then $(CYGPATH_W) 'precision/SimpleGeometryPrecisionReducerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/precision/SimpleGeometryPrecisionReducerTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Tpo $(DEPDIR)/SimpleGeometryPrecisionReducerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='precision/SimpleGeometryPrecisionReducerTest.cpp' object='SimpleGeometryPrecisionReducerTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SimpleGeometryPrecisionReducerTest.obj `if test -f 'precision/SimpleGeometryPrecisionReducerTest.cpp'; then $(CYGPATH_W) 'precision/SimpleGeometryPrecisionReducerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/precision/SimpleGeometryPrecisionReducerTest.cpp'; fi` GeometryPrecisionReducerTest.o: precision/GeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryPrecisionReducerTest.o -MD -MP -MF $(DEPDIR)/GeometryPrecisionReducerTest.Tpo -c -o GeometryPrecisionReducerTest.o `test -f 'precision/GeometryPrecisionReducerTest.cpp' || echo '$(srcdir)/'`precision/GeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryPrecisionReducerTest.Tpo $(DEPDIR)/GeometryPrecisionReducerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='precision/GeometryPrecisionReducerTest.cpp' object='GeometryPrecisionReducerTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryPrecisionReducerTest.o `test -f 'precision/GeometryPrecisionReducerTest.cpp' || echo '$(srcdir)/'`precision/GeometryPrecisionReducerTest.cpp GeometryPrecisionReducerTest.obj: precision/GeometryPrecisionReducerTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GeometryPrecisionReducerTest.obj -MD -MP -MF $(DEPDIR)/GeometryPrecisionReducerTest.Tpo -c -o GeometryPrecisionReducerTest.obj `if test -f 'precision/GeometryPrecisionReducerTest.cpp'; then $(CYGPATH_W) 'precision/GeometryPrecisionReducerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/precision/GeometryPrecisionReducerTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GeometryPrecisionReducerTest.Tpo $(DEPDIR)/GeometryPrecisionReducerTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='precision/GeometryPrecisionReducerTest.cpp' object='GeometryPrecisionReducerTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GeometryPrecisionReducerTest.obj `if test -f 'precision/GeometryPrecisionReducerTest.cpp'; then $(CYGPATH_W) 'precision/GeometryPrecisionReducerTest.cpp'; else $(CYGPATH_W) '$(srcdir)/precision/GeometryPrecisionReducerTest.cpp'; fi` DouglasPeuckerSimplifierTest.o: simplify/DouglasPeuckerSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DouglasPeuckerSimplifierTest.o -MD -MP -MF $(DEPDIR)/DouglasPeuckerSimplifierTest.Tpo -c -o DouglasPeuckerSimplifierTest.o `test -f 'simplify/DouglasPeuckerSimplifierTest.cpp' || echo '$(srcdir)/'`simplify/DouglasPeuckerSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DouglasPeuckerSimplifierTest.Tpo $(DEPDIR)/DouglasPeuckerSimplifierTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='simplify/DouglasPeuckerSimplifierTest.cpp' object='DouglasPeuckerSimplifierTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DouglasPeuckerSimplifierTest.o `test -f 'simplify/DouglasPeuckerSimplifierTest.cpp' || echo '$(srcdir)/'`simplify/DouglasPeuckerSimplifierTest.cpp DouglasPeuckerSimplifierTest.obj: simplify/DouglasPeuckerSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DouglasPeuckerSimplifierTest.obj -MD -MP -MF $(DEPDIR)/DouglasPeuckerSimplifierTest.Tpo -c -o DouglasPeuckerSimplifierTest.obj `if test -f 'simplify/DouglasPeuckerSimplifierTest.cpp'; then $(CYGPATH_W) 'simplify/DouglasPeuckerSimplifierTest.cpp'; else $(CYGPATH_W) '$(srcdir)/simplify/DouglasPeuckerSimplifierTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DouglasPeuckerSimplifierTest.Tpo $(DEPDIR)/DouglasPeuckerSimplifierTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='simplify/DouglasPeuckerSimplifierTest.cpp' object='DouglasPeuckerSimplifierTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DouglasPeuckerSimplifierTest.obj `if test -f 'simplify/DouglasPeuckerSimplifierTest.cpp'; then $(CYGPATH_W) 'simplify/DouglasPeuckerSimplifierTest.cpp'; else $(CYGPATH_W) '$(srcdir)/simplify/DouglasPeuckerSimplifierTest.cpp'; fi` TopologyPreservingSimplifierTest.o: simplify/TopologyPreservingSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TopologyPreservingSimplifierTest.o -MD -MP -MF $(DEPDIR)/TopologyPreservingSimplifierTest.Tpo -c -o TopologyPreservingSimplifierTest.o `test -f 'simplify/TopologyPreservingSimplifierTest.cpp' || echo '$(srcdir)/'`simplify/TopologyPreservingSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/TopologyPreservingSimplifierTest.Tpo $(DEPDIR)/TopologyPreservingSimplifierTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='simplify/TopologyPreservingSimplifierTest.cpp' object='TopologyPreservingSimplifierTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TopologyPreservingSimplifierTest.o `test -f 'simplify/TopologyPreservingSimplifierTest.cpp' || echo '$(srcdir)/'`simplify/TopologyPreservingSimplifierTest.cpp TopologyPreservingSimplifierTest.obj: simplify/TopologyPreservingSimplifierTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT TopologyPreservingSimplifierTest.obj -MD -MP -MF $(DEPDIR)/TopologyPreservingSimplifierTest.Tpo -c -o TopologyPreservingSimplifierTest.obj `if test -f 'simplify/TopologyPreservingSimplifierTest.cpp'; then $(CYGPATH_W) 'simplify/TopologyPreservingSimplifierTest.cpp'; else $(CYGPATH_W) '$(srcdir)/simplify/TopologyPreservingSimplifierTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/TopologyPreservingSimplifierTest.Tpo $(DEPDIR)/TopologyPreservingSimplifierTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='simplify/TopologyPreservingSimplifierTest.cpp' object='TopologyPreservingSimplifierTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o TopologyPreservingSimplifierTest.obj `if test -f 'simplify/TopologyPreservingSimplifierTest.cpp'; then $(CYGPATH_W) 'simplify/TopologyPreservingSimplifierTest.cpp'; else $(CYGPATH_W) '$(srcdir)/simplify/TopologyPreservingSimplifierTest.cpp'; fi` QuadEdgeTest.o: triangulate/quadedge/QuadEdgeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QuadEdgeTest.o -MD -MP -MF $(DEPDIR)/QuadEdgeTest.Tpo -c -o QuadEdgeTest.o `test -f 'triangulate/quadedge/QuadEdgeTest.cpp' || echo '$(srcdir)/'`triangulate/quadedge/QuadEdgeTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/QuadEdgeTest.Tpo $(DEPDIR)/QuadEdgeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/quadedge/QuadEdgeTest.cpp' object='QuadEdgeTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QuadEdgeTest.o `test -f 'triangulate/quadedge/QuadEdgeTest.cpp' || echo '$(srcdir)/'`triangulate/quadedge/QuadEdgeTest.cpp QuadEdgeTest.obj: triangulate/quadedge/QuadEdgeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QuadEdgeTest.obj -MD -MP -MF $(DEPDIR)/QuadEdgeTest.Tpo -c -o QuadEdgeTest.obj `if test -f 'triangulate/quadedge/QuadEdgeTest.cpp'; then $(CYGPATH_W) 'triangulate/quadedge/QuadEdgeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/quadedge/QuadEdgeTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/QuadEdgeTest.Tpo $(DEPDIR)/QuadEdgeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/quadedge/QuadEdgeTest.cpp' object='QuadEdgeTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QuadEdgeTest.obj `if test -f 'triangulate/quadedge/QuadEdgeTest.cpp'; then $(CYGPATH_W) 'triangulate/quadedge/QuadEdgeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/quadedge/QuadEdgeTest.cpp'; fi` QuadEdgeSubdivisionTest.o: triangulate/quadedge/QuadEdgeSubdivisionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QuadEdgeSubdivisionTest.o -MD -MP -MF $(DEPDIR)/QuadEdgeSubdivisionTest.Tpo -c -o QuadEdgeSubdivisionTest.o `test -f 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp' || echo '$(srcdir)/'`triangulate/quadedge/QuadEdgeSubdivisionTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/QuadEdgeSubdivisionTest.Tpo $(DEPDIR)/QuadEdgeSubdivisionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/quadedge/QuadEdgeSubdivisionTest.cpp' object='QuadEdgeSubdivisionTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QuadEdgeSubdivisionTest.o `test -f 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp' || echo '$(srcdir)/'`triangulate/quadedge/QuadEdgeSubdivisionTest.cpp QuadEdgeSubdivisionTest.obj: triangulate/quadedge/QuadEdgeSubdivisionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT QuadEdgeSubdivisionTest.obj -MD -MP -MF $(DEPDIR)/QuadEdgeSubdivisionTest.Tpo -c -o QuadEdgeSubdivisionTest.obj `if test -f 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; then $(CYGPATH_W) 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/QuadEdgeSubdivisionTest.Tpo $(DEPDIR)/QuadEdgeSubdivisionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/quadedge/QuadEdgeSubdivisionTest.cpp' object='QuadEdgeSubdivisionTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o QuadEdgeSubdivisionTest.obj `if test -f 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; then $(CYGPATH_W) 'triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/quadedge/QuadEdgeSubdivisionTest.cpp'; fi` DelaunayTest.o: triangulate/DelaunayTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DelaunayTest.o -MD -MP -MF $(DEPDIR)/DelaunayTest.Tpo -c -o DelaunayTest.o `test -f 'triangulate/DelaunayTest.cpp' || echo '$(srcdir)/'`triangulate/DelaunayTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DelaunayTest.Tpo $(DEPDIR)/DelaunayTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/DelaunayTest.cpp' object='DelaunayTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DelaunayTest.o `test -f 'triangulate/DelaunayTest.cpp' || echo '$(srcdir)/'`triangulate/DelaunayTest.cpp DelaunayTest.obj: triangulate/DelaunayTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT DelaunayTest.obj -MD -MP -MF $(DEPDIR)/DelaunayTest.Tpo -c -o DelaunayTest.obj `if test -f 'triangulate/DelaunayTest.cpp'; then $(CYGPATH_W) 'triangulate/DelaunayTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/DelaunayTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/DelaunayTest.Tpo $(DEPDIR)/DelaunayTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='triangulate/DelaunayTest.cpp' object='DelaunayTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o DelaunayTest.obj `if test -f 'triangulate/DelaunayTest.cpp'; then $(CYGPATH_W) 'triangulate/DelaunayTest.cpp'; else $(CYGPATH_W) '$(srcdir)/triangulate/DelaunayTest.cpp'; fi` UniqueCoordinateArrayFilterTest.o: util/UniqueCoordinateArrayFilterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UniqueCoordinateArrayFilterTest.o -MD -MP -MF $(DEPDIR)/UniqueCoordinateArrayFilterTest.Tpo -c -o UniqueCoordinateArrayFilterTest.o `test -f 'util/UniqueCoordinateArrayFilterTest.cpp' || echo '$(srcdir)/'`util/UniqueCoordinateArrayFilterTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UniqueCoordinateArrayFilterTest.Tpo $(DEPDIR)/UniqueCoordinateArrayFilterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='util/UniqueCoordinateArrayFilterTest.cpp' object='UniqueCoordinateArrayFilterTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UniqueCoordinateArrayFilterTest.o `test -f 'util/UniqueCoordinateArrayFilterTest.cpp' || echo '$(srcdir)/'`util/UniqueCoordinateArrayFilterTest.cpp UniqueCoordinateArrayFilterTest.obj: util/UniqueCoordinateArrayFilterTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UniqueCoordinateArrayFilterTest.obj -MD -MP -MF $(DEPDIR)/UniqueCoordinateArrayFilterTest.Tpo -c -o UniqueCoordinateArrayFilterTest.obj `if test -f 'util/UniqueCoordinateArrayFilterTest.cpp'; then $(CYGPATH_W) 'util/UniqueCoordinateArrayFilterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/util/UniqueCoordinateArrayFilterTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UniqueCoordinateArrayFilterTest.Tpo $(DEPDIR)/UniqueCoordinateArrayFilterTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='util/UniqueCoordinateArrayFilterTest.cpp' object='UniqueCoordinateArrayFilterTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UniqueCoordinateArrayFilterTest.obj `if test -f 'util/UniqueCoordinateArrayFilterTest.cpp'; then $(CYGPATH_W) 'util/UniqueCoordinateArrayFilterTest.cpp'; else $(CYGPATH_W) '$(srcdir)/util/UniqueCoordinateArrayFilterTest.cpp'; fi` GEOSCoordSeqTest.o: capi/GEOSCoordSeqTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSCoordSeqTest.o -MD -MP -MF $(DEPDIR)/GEOSCoordSeqTest.Tpo -c -o GEOSCoordSeqTest.o `test -f 'capi/GEOSCoordSeqTest.cpp' || echo '$(srcdir)/'`capi/GEOSCoordSeqTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSCoordSeqTest.Tpo $(DEPDIR)/GEOSCoordSeqTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSCoordSeqTest.cpp' object='GEOSCoordSeqTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSCoordSeqTest.o `test -f 'capi/GEOSCoordSeqTest.cpp' || echo '$(srcdir)/'`capi/GEOSCoordSeqTest.cpp GEOSCoordSeqTest.obj: capi/GEOSCoordSeqTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSCoordSeqTest.obj -MD -MP -MF $(DEPDIR)/GEOSCoordSeqTest.Tpo -c -o GEOSCoordSeqTest.obj `if test -f 'capi/GEOSCoordSeqTest.cpp'; then $(CYGPATH_W) 'capi/GEOSCoordSeqTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSCoordSeqTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSCoordSeqTest.Tpo $(DEPDIR)/GEOSCoordSeqTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSCoordSeqTest.cpp' object='GEOSCoordSeqTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSCoordSeqTest.obj `if test -f 'capi/GEOSCoordSeqTest.cpp'; then $(CYGPATH_W) 'capi/GEOSCoordSeqTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSCoordSeqTest.cpp'; fi` GEOSDelaunayTriangulationTest.o: capi/GEOSDelaunayTriangulationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSDelaunayTriangulationTest.o -MD -MP -MF $(DEPDIR)/GEOSDelaunayTriangulationTest.Tpo -c -o GEOSDelaunayTriangulationTest.o `test -f 'capi/GEOSDelaunayTriangulationTest.cpp' || echo '$(srcdir)/'`capi/GEOSDelaunayTriangulationTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSDelaunayTriangulationTest.Tpo $(DEPDIR)/GEOSDelaunayTriangulationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSDelaunayTriangulationTest.cpp' object='GEOSDelaunayTriangulationTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSDelaunayTriangulationTest.o `test -f 'capi/GEOSDelaunayTriangulationTest.cpp' || echo '$(srcdir)/'`capi/GEOSDelaunayTriangulationTest.cpp GEOSDelaunayTriangulationTest.obj: capi/GEOSDelaunayTriangulationTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSDelaunayTriangulationTest.obj -MD -MP -MF $(DEPDIR)/GEOSDelaunayTriangulationTest.Tpo -c -o GEOSDelaunayTriangulationTest.obj `if test -f 'capi/GEOSDelaunayTriangulationTest.cpp'; then $(CYGPATH_W) 'capi/GEOSDelaunayTriangulationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSDelaunayTriangulationTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSDelaunayTriangulationTest.Tpo $(DEPDIR)/GEOSDelaunayTriangulationTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSDelaunayTriangulationTest.cpp' object='GEOSDelaunayTriangulationTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSDelaunayTriangulationTest.obj `if test -f 'capi/GEOSDelaunayTriangulationTest.cpp'; then $(CYGPATH_W) 'capi/GEOSDelaunayTriangulationTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSDelaunayTriangulationTest.cpp'; fi` GEOSGeomFromWKBTest.o: capi/GEOSGeomFromWKBTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeomFromWKBTest.o -MD -MP -MF $(DEPDIR)/GEOSGeomFromWKBTest.Tpo -c -o GEOSGeomFromWKBTest.o `test -f 'capi/GEOSGeomFromWKBTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeomFromWKBTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeomFromWKBTest.Tpo $(DEPDIR)/GEOSGeomFromWKBTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeomFromWKBTest.cpp' object='GEOSGeomFromWKBTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeomFromWKBTest.o `test -f 'capi/GEOSGeomFromWKBTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeomFromWKBTest.cpp GEOSGeomFromWKBTest.obj: capi/GEOSGeomFromWKBTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeomFromWKBTest.obj -MD -MP -MF $(DEPDIR)/GEOSGeomFromWKBTest.Tpo -c -o GEOSGeomFromWKBTest.obj `if test -f 'capi/GEOSGeomFromWKBTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeomFromWKBTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeomFromWKBTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeomFromWKBTest.Tpo $(DEPDIR)/GEOSGeomFromWKBTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeomFromWKBTest.cpp' object='GEOSGeomFromWKBTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeomFromWKBTest.obj `if test -f 'capi/GEOSGeomFromWKBTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeomFromWKBTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeomFromWKBTest.cpp'; fi` GEOSGeomToWKTTest.o: capi/GEOSGeomToWKTTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeomToWKTTest.o -MD -MP -MF $(DEPDIR)/GEOSGeomToWKTTest.Tpo -c -o GEOSGeomToWKTTest.o `test -f 'capi/GEOSGeomToWKTTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeomToWKTTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeomToWKTTest.Tpo $(DEPDIR)/GEOSGeomToWKTTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeomToWKTTest.cpp' object='GEOSGeomToWKTTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeomToWKTTest.o `test -f 'capi/GEOSGeomToWKTTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeomToWKTTest.cpp GEOSGeomToWKTTest.obj: capi/GEOSGeomToWKTTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeomToWKTTest.obj -MD -MP -MF $(DEPDIR)/GEOSGeomToWKTTest.Tpo -c -o GEOSGeomToWKTTest.obj `if test -f 'capi/GEOSGeomToWKTTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeomToWKTTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeomToWKTTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeomToWKTTest.Tpo $(DEPDIR)/GEOSGeomToWKTTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeomToWKTTest.cpp' object='GEOSGeomToWKTTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeomToWKTTest.obj `if test -f 'capi/GEOSGeomToWKTTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeomToWKTTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeomToWKTTest.cpp'; fi` GEOSGetCentroidTest.o: capi/GEOSGetCentroidTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGetCentroidTest.o -MD -MP -MF $(DEPDIR)/GEOSGetCentroidTest.Tpo -c -o GEOSGetCentroidTest.o `test -f 'capi/GEOSGetCentroidTest.cpp' || echo '$(srcdir)/'`capi/GEOSGetCentroidTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGetCentroidTest.Tpo $(DEPDIR)/GEOSGetCentroidTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGetCentroidTest.cpp' object='GEOSGetCentroidTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGetCentroidTest.o `test -f 'capi/GEOSGetCentroidTest.cpp' || echo '$(srcdir)/'`capi/GEOSGetCentroidTest.cpp GEOSGetCentroidTest.obj: capi/GEOSGetCentroidTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGetCentroidTest.obj -MD -MP -MF $(DEPDIR)/GEOSGetCentroidTest.Tpo -c -o GEOSGetCentroidTest.obj `if test -f 'capi/GEOSGetCentroidTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGetCentroidTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGetCentroidTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGetCentroidTest.Tpo $(DEPDIR)/GEOSGetCentroidTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGetCentroidTest.cpp' object='GEOSGetCentroidTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGetCentroidTest.obj `if test -f 'capi/GEOSGetCentroidTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGetCentroidTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGetCentroidTest.cpp'; fi` GEOSContainsTest.o: capi/GEOSContainsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSContainsTest.o -MD -MP -MF $(DEPDIR)/GEOSContainsTest.Tpo -c -o GEOSContainsTest.o `test -f 'capi/GEOSContainsTest.cpp' || echo '$(srcdir)/'`capi/GEOSContainsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSContainsTest.Tpo $(DEPDIR)/GEOSContainsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSContainsTest.cpp' object='GEOSContainsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSContainsTest.o `test -f 'capi/GEOSContainsTest.cpp' || echo '$(srcdir)/'`capi/GEOSContainsTest.cpp GEOSContainsTest.obj: capi/GEOSContainsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSContainsTest.obj -MD -MP -MF $(DEPDIR)/GEOSContainsTest.Tpo -c -o GEOSContainsTest.obj `if test -f 'capi/GEOSContainsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSContainsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSContainsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSContainsTest.Tpo $(DEPDIR)/GEOSContainsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSContainsTest.cpp' object='GEOSContainsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSContainsTest.obj `if test -f 'capi/GEOSContainsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSContainsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSContainsTest.cpp'; fi` GEOSConvexHullTest.o: capi/GEOSConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSConvexHullTest.o -MD -MP -MF $(DEPDIR)/GEOSConvexHullTest.Tpo -c -o GEOSConvexHullTest.o `test -f 'capi/GEOSConvexHullTest.cpp' || echo '$(srcdir)/'`capi/GEOSConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSConvexHullTest.Tpo $(DEPDIR)/GEOSConvexHullTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSConvexHullTest.cpp' object='GEOSConvexHullTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSConvexHullTest.o `test -f 'capi/GEOSConvexHullTest.cpp' || echo '$(srcdir)/'`capi/GEOSConvexHullTest.cpp GEOSConvexHullTest.obj: capi/GEOSConvexHullTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSConvexHullTest.obj -MD -MP -MF $(DEPDIR)/GEOSConvexHullTest.Tpo -c -o GEOSConvexHullTest.obj `if test -f 'capi/GEOSConvexHullTest.cpp'; then $(CYGPATH_W) 'capi/GEOSConvexHullTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSConvexHullTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSConvexHullTest.Tpo $(DEPDIR)/GEOSConvexHullTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSConvexHullTest.cpp' object='GEOSConvexHullTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSConvexHullTest.obj `if test -f 'capi/GEOSConvexHullTest.cpp'; then $(CYGPATH_W) 'capi/GEOSConvexHullTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSConvexHullTest.cpp'; fi` GEOSDistanceTest.o: capi/GEOSDistanceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSDistanceTest.o -MD -MP -MF $(DEPDIR)/GEOSDistanceTest.Tpo -c -o GEOSDistanceTest.o `test -f 'capi/GEOSDistanceTest.cpp' || echo '$(srcdir)/'`capi/GEOSDistanceTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSDistanceTest.Tpo $(DEPDIR)/GEOSDistanceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSDistanceTest.cpp' object='GEOSDistanceTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSDistanceTest.o `test -f 'capi/GEOSDistanceTest.cpp' || echo '$(srcdir)/'`capi/GEOSDistanceTest.cpp GEOSDistanceTest.obj: capi/GEOSDistanceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSDistanceTest.obj -MD -MP -MF $(DEPDIR)/GEOSDistanceTest.Tpo -c -o GEOSDistanceTest.obj `if test -f 'capi/GEOSDistanceTest.cpp'; then $(CYGPATH_W) 'capi/GEOSDistanceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSDistanceTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSDistanceTest.Tpo $(DEPDIR)/GEOSDistanceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSDistanceTest.cpp' object='GEOSDistanceTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSDistanceTest.obj `if test -f 'capi/GEOSDistanceTest.cpp'; then $(CYGPATH_W) 'capi/GEOSDistanceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSDistanceTest.cpp'; fi` GEOSInterruptTest.o: capi/GEOSInterruptTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSInterruptTest.o -MD -MP -MF $(DEPDIR)/GEOSInterruptTest.Tpo -c -o GEOSInterruptTest.o `test -f 'capi/GEOSInterruptTest.cpp' || echo '$(srcdir)/'`capi/GEOSInterruptTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSInterruptTest.Tpo $(DEPDIR)/GEOSInterruptTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSInterruptTest.cpp' object='GEOSInterruptTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSInterruptTest.o `test -f 'capi/GEOSInterruptTest.cpp' || echo '$(srcdir)/'`capi/GEOSInterruptTest.cpp GEOSInterruptTest.obj: capi/GEOSInterruptTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSInterruptTest.obj -MD -MP -MF $(DEPDIR)/GEOSInterruptTest.Tpo -c -o GEOSInterruptTest.obj `if test -f 'capi/GEOSInterruptTest.cpp'; then $(CYGPATH_W) 'capi/GEOSInterruptTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSInterruptTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSInterruptTest.Tpo $(DEPDIR)/GEOSInterruptTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSInterruptTest.cpp' object='GEOSInterruptTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSInterruptTest.obj `if test -f 'capi/GEOSInterruptTest.cpp'; then $(CYGPATH_W) 'capi/GEOSInterruptTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSInterruptTest.cpp'; fi` GEOSIntersectsTest.o: capi/GEOSIntersectsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSIntersectsTest.o -MD -MP -MF $(DEPDIR)/GEOSIntersectsTest.Tpo -c -o GEOSIntersectsTest.o `test -f 'capi/GEOSIntersectsTest.cpp' || echo '$(srcdir)/'`capi/GEOSIntersectsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSIntersectsTest.Tpo $(DEPDIR)/GEOSIntersectsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSIntersectsTest.cpp' object='GEOSIntersectsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSIntersectsTest.o `test -f 'capi/GEOSIntersectsTest.cpp' || echo '$(srcdir)/'`capi/GEOSIntersectsTest.cpp GEOSIntersectsTest.obj: capi/GEOSIntersectsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSIntersectsTest.obj -MD -MP -MF $(DEPDIR)/GEOSIntersectsTest.Tpo -c -o GEOSIntersectsTest.obj `if test -f 'capi/GEOSIntersectsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSIntersectsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSIntersectsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSIntersectsTest.Tpo $(DEPDIR)/GEOSIntersectsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSIntersectsTest.cpp' object='GEOSIntersectsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSIntersectsTest.obj `if test -f 'capi/GEOSIntersectsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSIntersectsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSIntersectsTest.cpp'; fi` GEOSNearestPointsTest.o: capi/GEOSNearestPointsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSNearestPointsTest.o -MD -MP -MF $(DEPDIR)/GEOSNearestPointsTest.Tpo -c -o GEOSNearestPointsTest.o `test -f 'capi/GEOSNearestPointsTest.cpp' || echo '$(srcdir)/'`capi/GEOSNearestPointsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSNearestPointsTest.Tpo $(DEPDIR)/GEOSNearestPointsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSNearestPointsTest.cpp' object='GEOSNearestPointsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSNearestPointsTest.o `test -f 'capi/GEOSNearestPointsTest.cpp' || echo '$(srcdir)/'`capi/GEOSNearestPointsTest.cpp GEOSNearestPointsTest.obj: capi/GEOSNearestPointsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSNearestPointsTest.obj -MD -MP -MF $(DEPDIR)/GEOSNearestPointsTest.Tpo -c -o GEOSNearestPointsTest.obj `if test -f 'capi/GEOSNearestPointsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSNearestPointsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSNearestPointsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSNearestPointsTest.Tpo $(DEPDIR)/GEOSNearestPointsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSNearestPointsTest.cpp' object='GEOSNearestPointsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSNearestPointsTest.obj `if test -f 'capi/GEOSNearestPointsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSNearestPointsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSNearestPointsTest.cpp'; fi` GEOSWithinTest.o: capi/GEOSWithinTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSWithinTest.o -MD -MP -MF $(DEPDIR)/GEOSWithinTest.Tpo -c -o GEOSWithinTest.o `test -f 'capi/GEOSWithinTest.cpp' || echo '$(srcdir)/'`capi/GEOSWithinTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSWithinTest.Tpo $(DEPDIR)/GEOSWithinTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSWithinTest.cpp' object='GEOSWithinTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSWithinTest.o `test -f 'capi/GEOSWithinTest.cpp' || echo '$(srcdir)/'`capi/GEOSWithinTest.cpp GEOSWithinTest.obj: capi/GEOSWithinTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSWithinTest.obj -MD -MP -MF $(DEPDIR)/GEOSWithinTest.Tpo -c -o GEOSWithinTest.obj `if test -f 'capi/GEOSWithinTest.cpp'; then $(CYGPATH_W) 'capi/GEOSWithinTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSWithinTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSWithinTest.Tpo $(DEPDIR)/GEOSWithinTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSWithinTest.cpp' object='GEOSWithinTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSWithinTest.obj `if test -f 'capi/GEOSWithinTest.cpp'; then $(CYGPATH_W) 'capi/GEOSWithinTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSWithinTest.cpp'; fi` GEOSSimplifyTest.o: capi/GEOSSimplifyTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSimplifyTest.o -MD -MP -MF $(DEPDIR)/GEOSSimplifyTest.Tpo -c -o GEOSSimplifyTest.o `test -f 'capi/GEOSSimplifyTest.cpp' || echo '$(srcdir)/'`capi/GEOSSimplifyTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSimplifyTest.Tpo $(DEPDIR)/GEOSSimplifyTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSimplifyTest.cpp' object='GEOSSimplifyTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSimplifyTest.o `test -f 'capi/GEOSSimplifyTest.cpp' || echo '$(srcdir)/'`capi/GEOSSimplifyTest.cpp GEOSSimplifyTest.obj: capi/GEOSSimplifyTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSimplifyTest.obj -MD -MP -MF $(DEPDIR)/GEOSSimplifyTest.Tpo -c -o GEOSSimplifyTest.obj `if test -f 'capi/GEOSSimplifyTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSimplifyTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSimplifyTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSimplifyTest.Tpo $(DEPDIR)/GEOSSimplifyTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSimplifyTest.cpp' object='GEOSSimplifyTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSimplifyTest.obj `if test -f 'capi/GEOSSimplifyTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSimplifyTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSimplifyTest.cpp'; fi` GEOSPreparedGeometryTest.o: capi/GEOSPreparedGeometryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPreparedGeometryTest.o -MD -MP -MF $(DEPDIR)/GEOSPreparedGeometryTest.Tpo -c -o GEOSPreparedGeometryTest.o `test -f 'capi/GEOSPreparedGeometryTest.cpp' || echo '$(srcdir)/'`capi/GEOSPreparedGeometryTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPreparedGeometryTest.Tpo $(DEPDIR)/GEOSPreparedGeometryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPreparedGeometryTest.cpp' object='GEOSPreparedGeometryTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPreparedGeometryTest.o `test -f 'capi/GEOSPreparedGeometryTest.cpp' || echo '$(srcdir)/'`capi/GEOSPreparedGeometryTest.cpp GEOSPreparedGeometryTest.obj: capi/GEOSPreparedGeometryTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPreparedGeometryTest.obj -MD -MP -MF $(DEPDIR)/GEOSPreparedGeometryTest.Tpo -c -o GEOSPreparedGeometryTest.obj `if test -f 'capi/GEOSPreparedGeometryTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPreparedGeometryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPreparedGeometryTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPreparedGeometryTest.Tpo $(DEPDIR)/GEOSPreparedGeometryTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPreparedGeometryTest.cpp' object='GEOSPreparedGeometryTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPreparedGeometryTest.obj `if test -f 'capi/GEOSPreparedGeometryTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPreparedGeometryTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPreparedGeometryTest.cpp'; fi` GEOSPointOnSurfaceTest.o: capi/GEOSPointOnSurfaceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPointOnSurfaceTest.o -MD -MP -MF $(DEPDIR)/GEOSPointOnSurfaceTest.Tpo -c -o GEOSPointOnSurfaceTest.o `test -f 'capi/GEOSPointOnSurfaceTest.cpp' || echo '$(srcdir)/'`capi/GEOSPointOnSurfaceTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPointOnSurfaceTest.Tpo $(DEPDIR)/GEOSPointOnSurfaceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPointOnSurfaceTest.cpp' object='GEOSPointOnSurfaceTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPointOnSurfaceTest.o `test -f 'capi/GEOSPointOnSurfaceTest.cpp' || echo '$(srcdir)/'`capi/GEOSPointOnSurfaceTest.cpp GEOSPointOnSurfaceTest.obj: capi/GEOSPointOnSurfaceTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPointOnSurfaceTest.obj -MD -MP -MF $(DEPDIR)/GEOSPointOnSurfaceTest.Tpo -c -o GEOSPointOnSurfaceTest.obj `if test -f 'capi/GEOSPointOnSurfaceTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPointOnSurfaceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPointOnSurfaceTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPointOnSurfaceTest.Tpo $(DEPDIR)/GEOSPointOnSurfaceTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPointOnSurfaceTest.cpp' object='GEOSPointOnSurfaceTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPointOnSurfaceTest.obj `if test -f 'capi/GEOSPointOnSurfaceTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPointOnSurfaceTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPointOnSurfaceTest.cpp'; fi` GEOSPolygonizer_getCutEdgesTest.o: capi/GEOSPolygonizer_getCutEdgesTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPolygonizer_getCutEdgesTest.o -MD -MP -MF $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Tpo -c -o GEOSPolygonizer_getCutEdgesTest.o `test -f 'capi/GEOSPolygonizer_getCutEdgesTest.cpp' || echo '$(srcdir)/'`capi/GEOSPolygonizer_getCutEdgesTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Tpo $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPolygonizer_getCutEdgesTest.cpp' object='GEOSPolygonizer_getCutEdgesTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPolygonizer_getCutEdgesTest.o `test -f 'capi/GEOSPolygonizer_getCutEdgesTest.cpp' || echo '$(srcdir)/'`capi/GEOSPolygonizer_getCutEdgesTest.cpp GEOSPolygonizer_getCutEdgesTest.obj: capi/GEOSPolygonizer_getCutEdgesTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSPolygonizer_getCutEdgesTest.obj -MD -MP -MF $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Tpo -c -o GEOSPolygonizer_getCutEdgesTest.obj `if test -f 'capi/GEOSPolygonizer_getCutEdgesTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPolygonizer_getCutEdgesTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPolygonizer_getCutEdgesTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Tpo $(DEPDIR)/GEOSPolygonizer_getCutEdgesTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSPolygonizer_getCutEdgesTest.cpp' object='GEOSPolygonizer_getCutEdgesTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSPolygonizer_getCutEdgesTest.obj `if test -f 'capi/GEOSPolygonizer_getCutEdgesTest.cpp'; then $(CYGPATH_W) 'capi/GEOSPolygonizer_getCutEdgesTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSPolygonizer_getCutEdgesTest.cpp'; fi` GEOSBufferTest.o: capi/GEOSBufferTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSBufferTest.o -MD -MP -MF $(DEPDIR)/GEOSBufferTest.Tpo -c -o GEOSBufferTest.o `test -f 'capi/GEOSBufferTest.cpp' || echo '$(srcdir)/'`capi/GEOSBufferTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSBufferTest.Tpo $(DEPDIR)/GEOSBufferTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSBufferTest.cpp' object='GEOSBufferTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSBufferTest.o `test -f 'capi/GEOSBufferTest.cpp' || echo '$(srcdir)/'`capi/GEOSBufferTest.cpp GEOSBufferTest.obj: capi/GEOSBufferTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSBufferTest.obj -MD -MP -MF $(DEPDIR)/GEOSBufferTest.Tpo -c -o GEOSBufferTest.obj `if test -f 'capi/GEOSBufferTest.cpp'; then $(CYGPATH_W) 'capi/GEOSBufferTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSBufferTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSBufferTest.Tpo $(DEPDIR)/GEOSBufferTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSBufferTest.cpp' object='GEOSBufferTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSBufferTest.obj `if test -f 'capi/GEOSBufferTest.cpp'; then $(CYGPATH_W) 'capi/GEOSBufferTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSBufferTest.cpp'; fi` GEOSOffsetCurveTest.o: capi/GEOSOffsetCurveTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSOffsetCurveTest.o -MD -MP -MF $(DEPDIR)/GEOSOffsetCurveTest.Tpo -c -o GEOSOffsetCurveTest.o `test -f 'capi/GEOSOffsetCurveTest.cpp' || echo '$(srcdir)/'`capi/GEOSOffsetCurveTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSOffsetCurveTest.Tpo $(DEPDIR)/GEOSOffsetCurveTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSOffsetCurveTest.cpp' object='GEOSOffsetCurveTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSOffsetCurveTest.o `test -f 'capi/GEOSOffsetCurveTest.cpp' || echo '$(srcdir)/'`capi/GEOSOffsetCurveTest.cpp GEOSOffsetCurveTest.obj: capi/GEOSOffsetCurveTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSOffsetCurveTest.obj -MD -MP -MF $(DEPDIR)/GEOSOffsetCurveTest.Tpo -c -o GEOSOffsetCurveTest.obj `if test -f 'capi/GEOSOffsetCurveTest.cpp'; then $(CYGPATH_W) 'capi/GEOSOffsetCurveTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSOffsetCurveTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSOffsetCurveTest.Tpo $(DEPDIR)/GEOSOffsetCurveTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSOffsetCurveTest.cpp' object='GEOSOffsetCurveTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSOffsetCurveTest.obj `if test -f 'capi/GEOSOffsetCurveTest.cpp'; then $(CYGPATH_W) 'capi/GEOSOffsetCurveTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSOffsetCurveTest.cpp'; fi` GEOSGeom_create.o: capi/GEOSGeom_create.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeom_create.o -MD -MP -MF $(DEPDIR)/GEOSGeom_create.Tpo -c -o GEOSGeom_create.o `test -f 'capi/GEOSGeom_create.cpp' || echo '$(srcdir)/'`capi/GEOSGeom_create.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeom_create.Tpo $(DEPDIR)/GEOSGeom_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeom_create.cpp' object='GEOSGeom_create.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeom_create.o `test -f 'capi/GEOSGeom_create.cpp' || echo '$(srcdir)/'`capi/GEOSGeom_create.cpp GEOSGeom_create.obj: capi/GEOSGeom_create.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeom_create.obj -MD -MP -MF $(DEPDIR)/GEOSGeom_create.Tpo -c -o GEOSGeom_create.obj `if test -f 'capi/GEOSGeom_create.cpp'; then $(CYGPATH_W) 'capi/GEOSGeom_create.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeom_create.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeom_create.Tpo $(DEPDIR)/GEOSGeom_create.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeom_create.cpp' object='GEOSGeom_create.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeom_create.obj `if test -f 'capi/GEOSGeom_create.cpp'; then $(CYGPATH_W) 'capi/GEOSGeom_create.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeom_create.cpp'; fi` GEOSGeom_extractUniquePointsTest.o: capi/GEOSGeom_extractUniquePointsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeom_extractUniquePointsTest.o -MD -MP -MF $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Tpo -c -o GEOSGeom_extractUniquePointsTest.o `test -f 'capi/GEOSGeom_extractUniquePointsTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeom_extractUniquePointsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Tpo $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeom_extractUniquePointsTest.cpp' object='GEOSGeom_extractUniquePointsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeom_extractUniquePointsTest.o `test -f 'capi/GEOSGeom_extractUniquePointsTest.cpp' || echo '$(srcdir)/'`capi/GEOSGeom_extractUniquePointsTest.cpp GEOSGeom_extractUniquePointsTest.obj: capi/GEOSGeom_extractUniquePointsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSGeom_extractUniquePointsTest.obj -MD -MP -MF $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Tpo -c -o GEOSGeom_extractUniquePointsTest.obj `if test -f 'capi/GEOSGeom_extractUniquePointsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeom_extractUniquePointsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeom_extractUniquePointsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Tpo $(DEPDIR)/GEOSGeom_extractUniquePointsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSGeom_extractUniquePointsTest.cpp' object='GEOSGeom_extractUniquePointsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSGeom_extractUniquePointsTest.obj `if test -f 'capi/GEOSGeom_extractUniquePointsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSGeom_extractUniquePointsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSGeom_extractUniquePointsTest.cpp'; fi` GEOSOrientationIndex.o: capi/GEOSOrientationIndex.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSOrientationIndex.o -MD -MP -MF $(DEPDIR)/GEOSOrientationIndex.Tpo -c -o GEOSOrientationIndex.o `test -f 'capi/GEOSOrientationIndex.cpp' || echo '$(srcdir)/'`capi/GEOSOrientationIndex.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSOrientationIndex.Tpo $(DEPDIR)/GEOSOrientationIndex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSOrientationIndex.cpp' object='GEOSOrientationIndex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSOrientationIndex.o `test -f 'capi/GEOSOrientationIndex.cpp' || echo '$(srcdir)/'`capi/GEOSOrientationIndex.cpp GEOSOrientationIndex.obj: capi/GEOSOrientationIndex.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSOrientationIndex.obj -MD -MP -MF $(DEPDIR)/GEOSOrientationIndex.Tpo -c -o GEOSOrientationIndex.obj `if test -f 'capi/GEOSOrientationIndex.cpp'; then $(CYGPATH_W) 'capi/GEOSOrientationIndex.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSOrientationIndex.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSOrientationIndex.Tpo $(DEPDIR)/GEOSOrientationIndex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSOrientationIndex.cpp' object='GEOSOrientationIndex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSOrientationIndex.obj `if test -f 'capi/GEOSOrientationIndex.cpp'; then $(CYGPATH_W) 'capi/GEOSOrientationIndex.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSOrientationIndex.cpp'; fi` GEOSLineString_PointTest.o: capi/GEOSLineString_PointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSLineString_PointTest.o -MD -MP -MF $(DEPDIR)/GEOSLineString_PointTest.Tpo -c -o GEOSLineString_PointTest.o `test -f 'capi/GEOSLineString_PointTest.cpp' || echo '$(srcdir)/'`capi/GEOSLineString_PointTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSLineString_PointTest.Tpo $(DEPDIR)/GEOSLineString_PointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSLineString_PointTest.cpp' object='GEOSLineString_PointTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSLineString_PointTest.o `test -f 'capi/GEOSLineString_PointTest.cpp' || echo '$(srcdir)/'`capi/GEOSLineString_PointTest.cpp GEOSLineString_PointTest.obj: capi/GEOSLineString_PointTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSLineString_PointTest.obj -MD -MP -MF $(DEPDIR)/GEOSLineString_PointTest.Tpo -c -o GEOSLineString_PointTest.obj `if test -f 'capi/GEOSLineString_PointTest.cpp'; then $(CYGPATH_W) 'capi/GEOSLineString_PointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSLineString_PointTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSLineString_PointTest.Tpo $(DEPDIR)/GEOSLineString_PointTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSLineString_PointTest.cpp' object='GEOSLineString_PointTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSLineString_PointTest.obj `if test -f 'capi/GEOSLineString_PointTest.cpp'; then $(CYGPATH_W) 'capi/GEOSLineString_PointTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSLineString_PointTest.cpp'; fi` GEOSNodeTest.o: capi/GEOSNodeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSNodeTest.o -MD -MP -MF $(DEPDIR)/GEOSNodeTest.Tpo -c -o GEOSNodeTest.o `test -f 'capi/GEOSNodeTest.cpp' || echo '$(srcdir)/'`capi/GEOSNodeTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSNodeTest.Tpo $(DEPDIR)/GEOSNodeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSNodeTest.cpp' object='GEOSNodeTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSNodeTest.o `test -f 'capi/GEOSNodeTest.cpp' || echo '$(srcdir)/'`capi/GEOSNodeTest.cpp GEOSNodeTest.obj: capi/GEOSNodeTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSNodeTest.obj -MD -MP -MF $(DEPDIR)/GEOSNodeTest.Tpo -c -o GEOSNodeTest.obj `if test -f 'capi/GEOSNodeTest.cpp'; then $(CYGPATH_W) 'capi/GEOSNodeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSNodeTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSNodeTest.Tpo $(DEPDIR)/GEOSNodeTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSNodeTest.cpp' object='GEOSNodeTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSNodeTest.obj `if test -f 'capi/GEOSNodeTest.cpp'; then $(CYGPATH_W) 'capi/GEOSNodeTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSNodeTest.cpp'; fi` GEOSSnapTest.o: capi/GEOSSnapTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSnapTest.o -MD -MP -MF $(DEPDIR)/GEOSSnapTest.Tpo -c -o GEOSSnapTest.o `test -f 'capi/GEOSSnapTest.cpp' || echo '$(srcdir)/'`capi/GEOSSnapTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSnapTest.Tpo $(DEPDIR)/GEOSSnapTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSnapTest.cpp' object='GEOSSnapTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSnapTest.o `test -f 'capi/GEOSSnapTest.cpp' || echo '$(srcdir)/'`capi/GEOSSnapTest.cpp GEOSSnapTest.obj: capi/GEOSSnapTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSnapTest.obj -MD -MP -MF $(DEPDIR)/GEOSSnapTest.Tpo -c -o GEOSSnapTest.obj `if test -f 'capi/GEOSSnapTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSnapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSnapTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSnapTest.Tpo $(DEPDIR)/GEOSSnapTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSnapTest.cpp' object='GEOSSnapTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSnapTest.obj `if test -f 'capi/GEOSSnapTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSnapTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSnapTest.cpp'; fi` GEOSSharedPathsTest.o: capi/GEOSSharedPathsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSharedPathsTest.o -MD -MP -MF $(DEPDIR)/GEOSSharedPathsTest.Tpo -c -o GEOSSharedPathsTest.o `test -f 'capi/GEOSSharedPathsTest.cpp' || echo '$(srcdir)/'`capi/GEOSSharedPathsTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSharedPathsTest.Tpo $(DEPDIR)/GEOSSharedPathsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSharedPathsTest.cpp' object='GEOSSharedPathsTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSharedPathsTest.o `test -f 'capi/GEOSSharedPathsTest.cpp' || echo '$(srcdir)/'`capi/GEOSSharedPathsTest.cpp GEOSSharedPathsTest.obj: capi/GEOSSharedPathsTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSSharedPathsTest.obj -MD -MP -MF $(DEPDIR)/GEOSSharedPathsTest.Tpo -c -o GEOSSharedPathsTest.obj `if test -f 'capi/GEOSSharedPathsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSharedPathsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSharedPathsTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSSharedPathsTest.Tpo $(DEPDIR)/GEOSSharedPathsTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSSharedPathsTest.cpp' object='GEOSSharedPathsTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSSharedPathsTest.obj `if test -f 'capi/GEOSSharedPathsTest.cpp'; then $(CYGPATH_W) 'capi/GEOSSharedPathsTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSSharedPathsTest.cpp'; fi` GEOSRelateBoundaryNodeRuleTest.o: capi/GEOSRelateBoundaryNodeRuleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSRelateBoundaryNodeRuleTest.o -MD -MP -MF $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Tpo -c -o GEOSRelateBoundaryNodeRuleTest.o `test -f 'capi/GEOSRelateBoundaryNodeRuleTest.cpp' || echo '$(srcdir)/'`capi/GEOSRelateBoundaryNodeRuleTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Tpo $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSRelateBoundaryNodeRuleTest.cpp' object='GEOSRelateBoundaryNodeRuleTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSRelateBoundaryNodeRuleTest.o `test -f 'capi/GEOSRelateBoundaryNodeRuleTest.cpp' || echo '$(srcdir)/'`capi/GEOSRelateBoundaryNodeRuleTest.cpp GEOSRelateBoundaryNodeRuleTest.obj: capi/GEOSRelateBoundaryNodeRuleTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSRelateBoundaryNodeRuleTest.obj -MD -MP -MF $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Tpo -c -o GEOSRelateBoundaryNodeRuleTest.obj `if test -f 'capi/GEOSRelateBoundaryNodeRuleTest.cpp'; then $(CYGPATH_W) 'capi/GEOSRelateBoundaryNodeRuleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSRelateBoundaryNodeRuleTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Tpo $(DEPDIR)/GEOSRelateBoundaryNodeRuleTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSRelateBoundaryNodeRuleTest.cpp' object='GEOSRelateBoundaryNodeRuleTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSRelateBoundaryNodeRuleTest.obj `if test -f 'capi/GEOSRelateBoundaryNodeRuleTest.cpp'; then $(CYGPATH_W) 'capi/GEOSRelateBoundaryNodeRuleTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSRelateBoundaryNodeRuleTest.cpp'; fi` GEOSRelatePatternMatchTest.o: capi/GEOSRelatePatternMatchTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSRelatePatternMatchTest.o -MD -MP -MF $(DEPDIR)/GEOSRelatePatternMatchTest.Tpo -c -o GEOSRelatePatternMatchTest.o `test -f 'capi/GEOSRelatePatternMatchTest.cpp' || echo '$(srcdir)/'`capi/GEOSRelatePatternMatchTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSRelatePatternMatchTest.Tpo $(DEPDIR)/GEOSRelatePatternMatchTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSRelatePatternMatchTest.cpp' object='GEOSRelatePatternMatchTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSRelatePatternMatchTest.o `test -f 'capi/GEOSRelatePatternMatchTest.cpp' || echo '$(srcdir)/'`capi/GEOSRelatePatternMatchTest.cpp GEOSRelatePatternMatchTest.obj: capi/GEOSRelatePatternMatchTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSRelatePatternMatchTest.obj -MD -MP -MF $(DEPDIR)/GEOSRelatePatternMatchTest.Tpo -c -o GEOSRelatePatternMatchTest.obj `if test -f 'capi/GEOSRelatePatternMatchTest.cpp'; then $(CYGPATH_W) 'capi/GEOSRelatePatternMatchTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSRelatePatternMatchTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSRelatePatternMatchTest.Tpo $(DEPDIR)/GEOSRelatePatternMatchTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSRelatePatternMatchTest.cpp' object='GEOSRelatePatternMatchTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSRelatePatternMatchTest.obj `if test -f 'capi/GEOSRelatePatternMatchTest.cpp'; then $(CYGPATH_W) 'capi/GEOSRelatePatternMatchTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSRelatePatternMatchTest.cpp'; fi` GEOSUnaryUnionTest.o: capi/GEOSUnaryUnionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSUnaryUnionTest.o -MD -MP -MF $(DEPDIR)/GEOSUnaryUnionTest.Tpo -c -o GEOSUnaryUnionTest.o `test -f 'capi/GEOSUnaryUnionTest.cpp' || echo '$(srcdir)/'`capi/GEOSUnaryUnionTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSUnaryUnionTest.Tpo $(DEPDIR)/GEOSUnaryUnionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSUnaryUnionTest.cpp' object='GEOSUnaryUnionTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSUnaryUnionTest.o `test -f 'capi/GEOSUnaryUnionTest.cpp' || echo '$(srcdir)/'`capi/GEOSUnaryUnionTest.cpp GEOSUnaryUnionTest.obj: capi/GEOSUnaryUnionTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSUnaryUnionTest.obj -MD -MP -MF $(DEPDIR)/GEOSUnaryUnionTest.Tpo -c -o GEOSUnaryUnionTest.obj `if test -f 'capi/GEOSUnaryUnionTest.cpp'; then $(CYGPATH_W) 'capi/GEOSUnaryUnionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSUnaryUnionTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSUnaryUnionTest.Tpo $(DEPDIR)/GEOSUnaryUnionTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSUnaryUnionTest.cpp' object='GEOSUnaryUnionTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSUnaryUnionTest.obj `if test -f 'capi/GEOSUnaryUnionTest.cpp'; then $(CYGPATH_W) 'capi/GEOSUnaryUnionTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSUnaryUnionTest.cpp'; fi` GEOSisValidDetailTest.o: capi/GEOSisValidDetailTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSisValidDetailTest.o -MD -MP -MF $(DEPDIR)/GEOSisValidDetailTest.Tpo -c -o GEOSisValidDetailTest.o `test -f 'capi/GEOSisValidDetailTest.cpp' || echo '$(srcdir)/'`capi/GEOSisValidDetailTest.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSisValidDetailTest.Tpo $(DEPDIR)/GEOSisValidDetailTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSisValidDetailTest.cpp' object='GEOSisValidDetailTest.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSisValidDetailTest.o `test -f 'capi/GEOSisValidDetailTest.cpp' || echo '$(srcdir)/'`capi/GEOSisValidDetailTest.cpp GEOSisValidDetailTest.obj: capi/GEOSisValidDetailTest.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT GEOSisValidDetailTest.obj -MD -MP -MF $(DEPDIR)/GEOSisValidDetailTest.Tpo -c -o GEOSisValidDetailTest.obj `if test -f 'capi/GEOSisValidDetailTest.cpp'; then $(CYGPATH_W) 'capi/GEOSisValidDetailTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSisValidDetailTest.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/GEOSisValidDetailTest.Tpo $(DEPDIR)/GEOSisValidDetailTest.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='capi/GEOSisValidDetailTest.cpp' object='GEOSisValidDetailTest.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o GEOSisValidDetailTest.obj `if test -f 'capi/GEOSisValidDetailTest.cpp'; then $(CYGPATH_W) 'capi/GEOSisValidDetailTest.cpp'; else $(CYGPATH_W) '$(srcdir)/capi/GEOSisValidDetailTest.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/unit/algorithm/0000755000175000017500000000000012206417243016405 5ustar frankiefrankiegeos-3.4.2/tests/unit/algorithm/AngleTest.cpp0000644000175000017500000000752612206417146021013 0ustar frankiefrankie// // Test Suite for geos::algorithm::Angle // Ported from JTS junit/algorithm/AngleTest.java r378 #include // geos #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_angle_data { typedef geos::geom::Coordinate Coordinate; typedef geos::algorithm::Angle Angle; double TOL; double PI; test_angle_data() : TOL (1e-5), PI ( 3.14159265358979323846 ) {} }; typedef test_group group; typedef group::object object; group test_angle_group("geos::algorithm::Angle"); // // Test Cases // // testAngle() template<> template<> void object::test<1>() { ensure_equals("1", Angle::angle(Coordinate(10,0)), 0.0, TOL); ensure_equals("2", Angle::angle(Coordinate(10,10)), PI/4, TOL); ensure_equals("3", Angle::angle(Coordinate(0,10)), PI/2, TOL); ensure_equals("4", Angle::angle(Coordinate(-10,10)), 0.75*PI, TOL); ensure_equals("5", Angle::angle(Coordinate(-10,0)), PI, TOL); ensure_equals("6", Angle::angle(Coordinate(-10,-0.1)), -3.131592987, TOL); ensure_equals("7", Angle::angle(Coordinate(-10,-10)), -0.75*PI, TOL); } // testIsAcute() template<> template<> void object::test<2>() { ensure(Angle::isAcute( Coordinate(10,0), Coordinate(0,0), Coordinate(5,10))); ensure(Angle::isAcute( Coordinate(10,0), Coordinate(0,0), Coordinate(5,-10))); // angle of 0 ensure(Angle::isAcute( Coordinate(10,0), Coordinate(0,0), Coordinate(10,0))); ensure_not(Angle::isAcute( Coordinate(10,0), Coordinate(0,0), Coordinate(-5,10))); ensure_not(Angle::isAcute( Coordinate(10,0), Coordinate(0,0), Coordinate(-5,-10))); } // testNormalizePositive() template<> template<> void object::test<3>() { ensure_equals("", Angle::normalizePositive(0.0), 0.0, TOL); ensure_equals("", Angle::normalizePositive(-0.5*PI), 1.5*PI, TOL); ensure_equals("", Angle::normalizePositive(-PI), PI, TOL); ensure_equals("", Angle::normalizePositive(-1.5*PI), .5*PI, TOL); ensure_equals("", Angle::normalizePositive(-2*PI), 0.0, TOL); ensure_equals("", Angle::normalizePositive(-2.5*PI), 1.5*PI, TOL); ensure_equals("", Angle::normalizePositive(-3*PI), PI, TOL); ensure_equals("", Angle::normalizePositive(-4 * PI), 0.0, TOL); ensure_equals("", Angle::normalizePositive(0.5*PI), 0.5*PI, TOL); ensure_equals("", Angle::normalizePositive(PI), PI, TOL); ensure_equals("", Angle::normalizePositive(1.5*PI), 1.5*PI, TOL); ensure_equals("", Angle::normalizePositive(2*PI), 0.0, TOL); ensure_equals("", Angle::normalizePositive(2.5*PI), 0.5*PI, TOL); ensure_equals("", Angle::normalizePositive(3*PI), PI, TOL); ensure_equals("", Angle::normalizePositive(4 * PI), 0.0, TOL); } // testNormalize() template<> template<> void object::test<4>() { ensure_equals("1", Angle::normalize(0.0), 0.0, TOL); ensure_equals("2", Angle::normalize(-0.5*PI), -0.5*PI, TOL); ensure_equals("3", Angle::normalize(-PI), PI, TOL); ensure_equals("4", Angle::normalize(-1.5*PI), .5*PI, TOL); ensure_equals("5", Angle::normalize(-2*PI), 0.0, TOL); ensure_equals("6", Angle::normalize(-2.5*PI), -0.5*PI, TOL); ensure_equals("7", Angle::normalize(-3*PI), PI, TOL); ensure_equals("8", Angle::normalize(-4 * PI), 0.0, TOL); ensure_equals("9", Angle::normalize(0.5*PI), 0.5*PI, TOL); ensure_equals("10", Angle::normalize(PI), PI, TOL); ensure_equals("11", Angle::normalize(1.5*PI), -0.5*PI, TOL); ensure_equals("12", Angle::normalize(2*PI), 0.0, TOL); ensure_equals("13", Angle::normalize(2.5*PI), 0.5*PI, TOL); ensure_equals("14", Angle::normalize(3*PI), PI, TOL); ensure_equals("15", Angle::normalize(4 * PI), 0.0, TOL); } } // namespace tut geos-3.4.2/tests/unit/algorithm/CGAlgorithms/0000755000175000017500000000000012206417243020730 5ustar frankiefrankiegeos-3.4.2/tests/unit/algorithm/CGAlgorithms/computeOrientationTest.cpp0000644000175000017500000000434512206417146026174 0ustar frankiefrankie// // Test Suite for CGAlgorithms::computeOrientation() function // Ported from JTS junit/algorithm/ComputeOrientationTest.java #include // geos #include #include #include #include #include #include #include // std #include #include using namespace geos::geom; using namespace geos::algorithm; namespace tut { // // Test Group // struct test_computeorientation_data { geos::io::WKTReader reader_; test_computeorientation_data() {} }; typedef test_group group; typedef group::object object; group test_computeorientation_group("geos::algorithm::CGAlgorithms::computeOrientation"); // // Test Cases // // 1 - Test CCW orientation template<> template<> void object::test<1>() { const std::string wkt("LINESTRING ( 0 0, 0 1, 1 1)"); Geometry::AutoPtr geom(reader_.read(wkt)); CoordinateSequence::AutoPtr pts(geom->getCoordinates()); int const a = CGAlgorithms::computeOrientation(pts->getAt(0), pts->getAt(1), pts->getAt(2)); int const b = CGAlgorithms::computeOrientation(pts->getAt(0), pts->getAt(1), pts->getAt(2)); int const c = CGAlgorithms::computeOrientation(pts->getAt(0), pts->getAt(1), pts->getAt(2)); ensure_equals( a, b ); ensure_equals( a, c ); } // 2 - Test CCW orientation template<> template<> void object::test<2>() { Coordinate c1(1.0000000000004998, -7.989685402102996); Coordinate c2(10.0, -7.004368924503866); Coordinate c3(1.0000000000005, -7.989685402102996); CoordinateArraySequence pts; pts.add(c1); pts.add(c2); pts.add(c3); int const a = CGAlgorithms::computeOrientation(pts[0], pts[1], pts[2]); int const b = CGAlgorithms::computeOrientation(pts[0], pts[1], pts[2]); int const c = CGAlgorithms::computeOrientation(pts[0], pts[1], pts[2]); ensure_equals( a, b ); ensure_equals( a, c ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/CGAlgorithms/isCCWTest.cpp0000644000175000017500000000702712206417146023254 0ustar frankiefrankie// // Test Suite for CGAlgorithms::isCCW() function // Ported from JTS junit/algorithm/IsCCWTest.java // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include #include using namespace geos::algorithm; namespace tut { // // Test Group // struct test_isccw_data { typedef std::auto_ptr GeometryPtr; geos::geom::CoordinateSequence* cs_; geos::io::WKTReader reader_; geos::io::WKBReader breader_; test_isccw_data() : cs_(0) { assert(0 == cs_); } ~test_isccw_data() { delete cs_; cs_ = 0; } }; typedef test_group group; typedef group::object object; group test_isccw_group("geos::algorithm::CGAlgorithms::isCCW"); // // Test Cases // // 1 - Test if coordinates of polygon are counter-clockwise oriented template<> template<> void object::test<1>() { const std::string wkt("POLYGON ((60 180, 140 240, 140 240, 140 240, 200 180, 120 120, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); bool isCCW = CGAlgorithms::isCCW(cs_); ensure_equals( false, isCCW ); } // 2 - Test if coordinates of polygon are counter-clockwise oriented template<> template<> void object::test<2>() { const std::string wkt("POLYGON ((60 180, 140 120, 100 180, 140 240, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); bool isCCW = CGAlgorithms::isCCW(cs_); ensure_equals( true, isCCW ); } // 3 - Test the same polygon as in test No 2 but with duplicated top point template<> template<> void object::test<3>() { const std::string wkt("POLYGON ((60 180, 140 120, 100 180, 140 240, 140 240, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); bool isCCW = CGAlgorithms::isCCW(cs_); ensure_equals( true, isCCW ); } // 4 - Test orientation the narrow (almost collapsed) ring // resulting in GEOS during execution of the union described // in http://trac.osgeo.org/geos/ticket/398 template<> template<> void object::test<4>() { std::istringstream wkt("0102000000040000000000000000000000841D588465963540F56BFB214F0341408F26B714B2971B40F66BFB214F0341408C26B714B2971B400000000000000000841D588465963540"); GeometryPtr geom(breader_.readHEX(wkt)); cs_ = geom->getCoordinates(); bool isCCW = CGAlgorithms::isCCW(cs_); ensure_equals( isCCW, false ); } // 5 - Test orientation the narrow (almost collapsed) ring // resulting in JTS during execution of the union described // in http://trac.osgeo.org/geos/ticket/398 template<> template<> void object::test<5>() { std::istringstream wkt("0102000000040000000000000000000000841D588465963540F56BFB214F0341408F26B714B2971B40F66BFB214F0341408E26B714B2971B400000000000000000841D588465963540"); GeometryPtr geom(breader_.readHEX(wkt)); cs_ = geom->getCoordinates(); bool isCCW = CGAlgorithms::isCCW(cs_); ensure_equals( isCCW, true ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/CGAlgorithms/isPointInRingTest.cpp0000644000175000017500000000376212206417146025042 0ustar frankiefrankie// // Test Suite for CGAlgorithms::isPointInRing() function // tut #include // geos #include #include #include #include #include #include // std #include #include using namespace geos::algorithm; namespace tut { // // Test Group // struct test_ispointinring_data { typedef std::auto_ptr GeomPtr; geos::geom::CoordinateSequence* cs_; geos::io::WKTReader reader_; test_ispointinring_data() : cs_(0) { assert(0 == cs_); } ~test_ispointinring_data() { delete cs_; cs_ = 0; } }; typedef test_group group; typedef group::object object; group test_ispointintring_group("geos::algorithm::CGAlgorithms::isPointInRing"); // // Test Cases // // Test of point in simple Polygon template<> template<> void object::test<1>() { const std::string wkt("POLYGON ((0 0, 0 20, 20 20, 20 0, 0 0))"); GeomPtr geom(reader_.read(wkt)); geos::geom::Coordinate pt(10, 10); cs_ = geom->getCoordinates(); bool isInRing = CGAlgorithms::isPointInRing(pt, cs_); ensure_equals( true, isInRing ); } // Test of point in bigger Polygon template<> template<> void object::test<2>() { const std::string wkt("POLYGON ((-40 80, -40 -80, 20 0, 20 -100, 40 40, \ 80 -80, 100 80, 140 -20, 120 140, 40 180, 60 40, \ 0 120, -20 -20, -40 80))"); GeomPtr geom(reader_.read(wkt)); geos::geom::Coordinate pt(0, 0); cs_ = geom->getCoordinates(); bool isInRing = CGAlgorithms::isPointInRing(pt, cs_); ensure_equals( true, isInRing ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/CGAlgorithms/signedAreaTest.cpp0000644000175000017500000000442712206417146024347 0ustar frankiefrankie// // Test Suite for CGAlgorithms::signedArea() function // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include #include using namespace geos::algorithm; namespace tut { // // Test Group // struct test_signedarea_data { typedef std::auto_ptr GeometryPtr; geos::geom::CoordinateSequence* cs_; geos::io::WKTReader reader_; geos::io::WKBReader breader_; test_signedarea_data() : cs_(0) { assert(0 == cs_); } ~test_signedarea_data() { delete cs_; cs_ = 0; } }; typedef test_group group; typedef group::object object; group test_signedarea_group("geos::algorithm::CGAlgorithms::signedArea"); // // Test Cases // // 1 - clockwise oriented template<> template<> void object::test<1>() { const std::string wkt("POLYGON ((60 180, 140 240, 140 240, 140 240, 200 180, 120 120, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); double area = CGAlgorithms::signedArea(cs_); ensure_equals( area, 8400 ); } // 2 - counter-clockwise oriented template<> template<> void object::test<2>() { const std::string wkt("POLYGON ((60 180, 140 120, 100 180, 140 240, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); double area = CGAlgorithms::signedArea(cs_); ensure_equals( area, -2400 ); } // 3 - Test the same polygon as in test No 2 but with duplicated top point template<> template<> void object::test<3>() { const std::string wkt("POLYGON ((60 180, 140 120, 100 180, 140 240, 140 240, 60 180))"); GeometryPtr geom(reader_.read(wkt)); cs_ = geom->getCoordinates(); double area = CGAlgorithms::signedArea(cs_); ensure_equals( area, -2400 ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/ConvexHullTest.cpp0000644000175000017500000001254112206417146022045 0ustar frankiefrankie// // Test Suite for geos::algorithm::ConvexHull // Ported from JTS junit/algorithm/ConvexHullTest.java #include #include // geos #include #include #include #include #include #include #include #include #include // std #include #include #include namespace geos { namespace geom { class Geometry; } } using namespace geos::geom; // for Location namespace tut { // // Test Group // // dummy data, not used struct test_convexhull_data { // Typedefs used as short names by test cases typedef std::auto_ptr GeometryAPtr; typedef std::auto_ptr LineStringAPtr; GeometryPtr geom_; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; test_convexhull_data() : geom_(0), pm_(1), factory_(&pm_, 0), reader_(&factory_) { assert(0 == geom_); } ~test_convexhull_data() { factory_.destroyGeometry(geom_); geom_ = 0; } }; typedef test_group group; typedef group::object object; group test_convexhull_group("geos::algorithm::ConvexHull"); // // Test Cases // // 1 - Test convex hull of linestring template<> template<> void object::test<1>() { using geos::geom::LineString; GeometryAPtr lineGeom(reader_.read("LINESTRING (30 220, 240 220, 240 220)")); LineStringAPtr line(dynamic_cast_auto_ptr(lineGeom)); ensure(0 != line.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (30 220, 240 220)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = line->convexHull(); ensure( convexHull->equalsExact(geom_) ); } // 2 - Test convex hull of multipoint template<> template<> void object::test<2>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (130 240, 650 240)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = geom->convexHull(); ensure( convexHull->equalsExact(geom_) ); } // 3 - Test convex hull of multipoint template<> template<> void object::test<3>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (0 0, 0 0, 10 0)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (0 0, 10 0)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = geom->convexHull(); ensure( convexHull->equalsExact(geom_) ); } // 4 - Test convex hull of multipoint template<> template<> void object::test<4>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (0 0, 10 0, 10 0)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (0 0, 10 0)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = geom->convexHull(); ensure( convexHull->equalsExact(geom_) ); } // 5 - Test convex hull of multipoint template<> template<> void object::test<5>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (0 0, 5 0, 10 0)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (0 0, 10 0)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = geom->convexHull(); ensure( convexHull->equalsExact(geom_) ); } // 6 - Test convex hull of multipoint exported to string form template<> template<> void object::test<6>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (0 0, 5 1, 10 0)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(geom->convexHull()); ensure(0 != hullGeom.get()); GeometryAPtr expectedHull(reader_.read("POLYGON ((0 0, 5 1, 10 0, 0 0))")); ensure(0 != expectedHull.get()); ensure_equals( hullGeom->toString(), expectedHull->toString() ); } // 7 - Test convex hull of multipoint template<> template<> void object::test<7>() { using geos::geom::LineString; GeometryAPtr geom(reader_.read("MULTIPOINT (0 0, 0 0, 5 0, 5 0, 10 0, 10 0)")); ensure(0 != geom.get()); GeometryAPtr hullGeom(reader_.read("LINESTRING (0 0, 10 0)")); LineStringAPtr convexHull(dynamic_cast_auto_ptr(hullGeom)); ensure(0 != convexHull.get()); geom_ = geom->convexHull(); ensure( convexHull->equalsExact(geom_) ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/InteriorPointAreaTest.cpp0000644000175000017500000000376712206417146023366 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2011 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ // // Test Suite for geos::algorithm::InteriorPointArea #include // geos #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_interiorpointarea_data { typedef geos::geom::Geometry Geometry; typedef geos::geom::Coordinate Coordinate; typedef geos::algorithm::InteriorPointArea InteriorPointArea; geos::io::WKTReader reader; std::auto_ptr geom; test_interiorpointarea_data() {} }; typedef test_group group; typedef group::object object; group test_interiorpointarea_group("geos::algorithm::InteriorPointArea"); // // Test Cases // // http://trac.osgeo.org/geos/ticket/475 // This is a test for a memory leak more than anything else template<> template<> void object::test<1>() { Coordinate centroid; // this polygon is a typical hourglass-shape with a self intersection // without a node geom.reset( reader.read("POLYGON((6 54, 15 54, 6 47, 15 47, 6 54))") ); bool threw = false; try { InteriorPointArea interior_builder(geom.get()); interior_builder.getInteriorPoint(centroid); } catch(...) { threw = true; } ensure(threw); } } // namespace tut geos-3.4.2/tests/unit/algorithm/PointLocatorTest.cpp0000644000175000017500000000447112206417146022376 0ustar frankiefrankie// // Test Suite for geos::algorithm::PointLocator // Ported from JTS junit/algorithm/PointLocator.java #include // geos #include #include #include #include #include // required for use in auto_ptr #include // std #include #include #include namespace geos { namespace geom { class Geometry; } } using namespace geos::geom; // for Location namespace tut { // // Test Group // // dummy data, not used struct test_pointlocator_data {}; typedef test_group group; typedef group::object object; group test_pointlocator_group("geos::algorithm::PointLocator"); // These are static to avoid namespace pollution // The struct test_*_data above is probably there // for the same reason... // static PrecisionModel pm; static GeometryFactory gf(&pm); static geos::io::WKTReader reader(&gf); typedef std::auto_ptr GeomPtr; void runPtLocator(int expected, const Coordinate& pt, const std::string& wkt) { GeomPtr geom(reader.read(wkt)); geos::algorithm::PointLocator pointLocator; int loc = pointLocator.locate(pt, geom.get()); ensure_equals(loc, expected); } // // Test Cases // // 1 - Test box template<> template<> void object::test<1>() { runPtLocator(Location::INTERIOR, Coordinate(10, 10), "POLYGON ((0 0, 0 20, 20 20, 20 0, 0 0))"); } // 2 - Test complex ring template<> template<> void object::test<2>() { runPtLocator(Location::INTERIOR, Coordinate(0, 0), "POLYGON ((-40 80, -40 -80, 20 0, 20 -100, 40 40, 80 -80, 100 80, 140 -20, 120 140, 40 180, 60 40, 0 120, -20 -20, -40 80))"); } // 3 - Test PointLocator LinearRing LineString template<> template<> void object::test<3>() { runPtLocator(Location::BOUNDARY, Coordinate(0, 0), "GEOMETRYCOLLECTION( LINESTRING(0 0, 10 10), LINEARRING(10 10, 10 20, 20 10, 10 10))"); } // 4 - Test PointLocator Point inside LinearRing template<> template<> void object::test<4>() { runPtLocator(Location::EXTERIOR, Coordinate(11, 11), "LINEARRING(10 10, 10 20, 20 10, 10 10)"); } } // namespace tut geos-3.4.2/tests/unit/algorithm/RobustLineIntersectionTest.cpp0000644000175000017500000003274112206417146024437 0ustar frankiefrankie// // Ported from JTS junit/algorithm/RobustLineIntersectionTest.java r788 #include // geos #include #include #include #include #include // required for use in auto_ptr #include #include // std #include #include #include namespace geos { namespace geom { class Geometry; } } using namespace geos::geom; // namespace tut { // // Test Group // struct test_robustlineintersection_data { typedef std::auto_ptr GeomPtr; bool equals(const Coordinate& p0, const Coordinate& p1, double distanceTolerance) { return p0.distance(p1) <= distanceTolerance; } void checkIntPoints(const Coordinate& p, const Coordinate& q, double distanceTolerance) { bool isEqual = equals(p, q, distanceTolerance); ensure("checkIntPoints: expected: " + p.toString() + " obtained " + q.toString(), isEqual); } /** * * @param pt array of 4 Coordinates * @param expectedIntersectionNum * @param intPt the expected intersection points * (maybe null if not tested) * must contain at least expectedIntersectionNum * elements */ void checkIntersection(const std::vector& pt, int expectedIntersectionNum, const std::vector& intPt, double distanceTolerance) { geos::algorithm::LineIntersector li; li.computeIntersection(pt[0], pt[1], pt[2], pt[3]); int intNum = li.getIntersectionNum(); ensure_equals(intNum, expectedIntersectionNum); if ( intPt.empty() ) return; ensure_equals(intPt.size(), static_cast::size_type>(intNum)); // test that both points are represented here //bool isIntPointsCorrect = true; if (intNum == 1) { checkIntPoints(intPt[0], li.getIntersection(0), distanceTolerance); } else if (intNum == 2) { checkIntPoints(intPt[0], li.getIntersection(0), distanceTolerance); checkIntPoints(intPt[1], li.getIntersection(0), distanceTolerance); if ( !( equals(intPt[0],li.getIntersection(0), distanceTolerance) || equals(intPt[0],li.getIntersection(1), distanceTolerance) ) ) { checkIntPoints(intPt[0], li.getIntersection(0), distanceTolerance); checkIntPoints(intPt[0], li.getIntersection(1), distanceTolerance); } else if ( !( equals(intPt[1],li.getIntersection(0), distanceTolerance) || equals(intPt[1],li.getIntersection(1), distanceTolerance) ) ) { checkIntPoints(intPt[1], li.getIntersection(0), distanceTolerance); checkIntPoints(intPt[1], li.getIntersection(1), distanceTolerance); } } //assertTrue("Int Pts not equal", isIntPointsCorrect); } void checkIntersection(const std::string& wkt1, const std::string& wkt2, int expectedIntersectionNum, const std::string& expectedWKT, double distanceTolerance) //throws ParseException { GeomPtr g1(reader.read(wkt1)); GeomPtr g2(reader.read(wkt2)); LineString* l1ptr = dynamic_cast(g1.get()); LineString* l2ptr = dynamic_cast(g2.get()); ensure(0 != l1ptr); ensure(0 != l2ptr); LineString& l1 = *l1ptr; LineString& l2 = *l2ptr; std::vector pt; pt.push_back(l1.getCoordinateN(0)); pt.push_back(l1.getCoordinateN(1)); pt.push_back(l2.getCoordinateN(0)); pt.push_back(l2.getCoordinateN(1)); GeomPtr g(reader.read(expectedWKT)); std::auto_ptr cs ( g->getCoordinates() ); std::vector intPt; for (size_t i=0; isize(); ++i) intPt.push_back(cs->getAt(i)); checkIntersection(pt, expectedIntersectionNum, intPt, distanceTolerance); } void checkIntersection(const std::string& wkt1, const std::string& wkt2, int expectedIntersectionNum, const std::vector& intPt, double distanceTolerance) // throws ParseException { GeomPtr g1(reader.read(wkt1)); GeomPtr g2(reader.read(wkt2)); LineString* l1ptr = dynamic_cast(g1.get()); LineString* l2ptr = dynamic_cast(g2.get()); ensure(0 != l1ptr); ensure(0 != l2ptr); LineString& l1 = *l1ptr; LineString& l2 = *l2ptr; std::vector pt; pt.push_back(l1.getCoordinateN(0)); pt.push_back(l1.getCoordinateN(1)); pt.push_back(l2.getCoordinateN(0)); pt.push_back(l2.getCoordinateN(1)); checkIntersection(pt, expectedIntersectionNum, intPt, distanceTolerance); } void checkIntersectionNone(const std::string& wkt1, const std::string& wkt2) // throws ParseException { GeomPtr g1(reader.read(wkt1)); GeomPtr g2(reader.read(wkt2)); LineString* l1ptr = dynamic_cast(g1.get()); LineString* l2ptr = dynamic_cast(g2.get()); ensure(0 != l1ptr); ensure(0 != l2ptr); LineString& l1 = *l1ptr; LineString& l2 = *l2ptr; std::vector pt; pt.push_back(l1.getCoordinateN(0)); pt.push_back(l1.getCoordinateN(1)); pt.push_back(l2.getCoordinateN(0)); pt.push_back(l2.getCoordinateN(1)); std::vector intPt; checkIntersection(pt, 0, intPt, 0); } void checkInputNotAltered(const std::string& wkt1, const std::string& wkt2, int scaleFactor) { GeomPtr g1(reader.read(wkt1)); GeomPtr g2(reader.read(wkt2)); LineString* l1ptr = dynamic_cast(g1.get()); LineString* l2ptr = dynamic_cast(g2.get()); ensure(0 != l1ptr); ensure(0 != l2ptr); LineString& l1 = *l1ptr; LineString& l2 = *l2ptr; std::vector pt; pt.push_back(l1.getCoordinateN(0)); pt.push_back(l1.getCoordinateN(1)); pt.push_back(l2.getCoordinateN(0)); pt.push_back(l2.getCoordinateN(1)); checkInputNotAltered(pt, scaleFactor); } void checkInputNotAltered(const std::vector& pt, int scaleFactor) { // save input points std::vector savePt = pt; geos::algorithm::LineIntersector li; PrecisionModel lpm(scaleFactor); li.setPrecisionModel(&lpm); li.computeIntersection(pt[0], pt[1], pt[2], pt[3]); // check that input points are unchanged for (int i = 0; i < 4; i++) { ensure_equals(savePt[i], pt[i]); } } test_robustlineintersection_data() : pm(), gf(&pm), reader(&gf) { } PrecisionModel pm; GeometryFactory gf; geos::io::WKTReader reader; }; typedef test_group group; typedef group::object object; group test_robustlineintersection_group( "geos::algorithm::RobustLineIntersection"); // // Test Cases // // 1 - Test from strk which is bad in GEOS (2009-04-14). template<> template<> void object::test<1>() { checkIntersection( "LINESTRING (588750.7429703881 4518950.493668233, 588748.2060409798 4518933.9452804085)", "LINESTRING (588745.824857241 4518940.742239175, 588748.2060437313 4518933.9452791475)", 1, "POINT (588748.2060416829 4518933.945284994)", 0); } // 2 - Test from strk which is bad in GEOS (2009-04-14). template<> template<> void object::test<2>() { checkIntersection( "LINESTRING (588743.626135934 4518924.610969561, 588732.2822865889 4518925.4314047815)", "LINESTRING (588739.1191384895 4518927.235700594, 588731.7854614238 4518924.578370095)", 1, "POINT (588733.8306132929 4518925.319423238)", 0); } // 3 - DaveSkeaCase // // This used to be a failure case (exception), // but apparently works now. // Possibly normalization has fixed this? // #if 0 // fails: finds 1 intersection rather then two template<> template<> void object::test<3>() { std::vector intPt; intPt.push_back(Coordinate(2089426.5233462777, 1180182.3877339689)); intPt.push_back(Coordinate(2085646.6891757075, 1195618.7333999649)); checkIntersection( "LINESTRING ( 2089426.5233462777 1180182.3877339689, 2085646.6891757075 1195618.7333999649 )", "LINESTRING ( 1889281.8148903656 1997547.0560044837, 2259977.3672235999 483675.17050843034 )", 2, intPt, 0); } #endif // fails #if 0 // fails: the intersection point doesn't match // 4 - Outside envelope using HCoordinate method (testCmp5CaseWKT) template<> template<> void object::test<4>() { std::vector intPt; intPt.push_back(Coordinate(4348437.0557510145, 5552597.375203926)); checkIntersection( "LINESTRING (4348433.262114629 5552595.478385733, 4348440.849387404 5552599.272022122 )", "LINESTRING (4348433.26211463 5552595.47838573, 4348440.8493874 5552599.27202212 )", 1, intPt, 0); } #endif // fails #if 0 // fails: the intersection point doesn't match // 5 - Result of this test should be the same as the WKT one! // (testCmp5CaseRaw) template<> template<> void object::test<5>() { std::vector pt; pt.push_back(Coordinate(4348433.262114629, 5552595.478385733)); pt.push_back(Coordinate(4348440.849387404, 5552599.272022122)); pt.push_back(Coordinate(4348433.26211463, 5552595.47838573)); pt.push_back(Coordinate(4348440.8493874, 5552599.27202212)); std::vector intPt; intPt.push_back(Coordinate(4348437.0557510145, 5552597.375203926)); checkIntersection( pt, 1, intPt, 0); } #endif // fails /** * Test involving two non-almost-parallel lines. * Does not seem to cause problems with basic line intersection algorithm. * */ // (testLeduc_1) template<> template<> void object::test<6>() { checkIntersection( "LINESTRING (305690.0434123494 254176.46578338774, 305601.9999843455 254243.19999846347)", "LINESTRING (305689.6153764265 254177.33102743194, 305692.4999844298 254171.4999983967)", 1, "POINT (305690.0434123494 254176.46578338774)", 0); } #if 0 // fails: finds an intersection (we don't have DD) /** * Test from Tomas Fa - JTS list 6/13/2012 * * Fails using original JTS DeVillers determine orientation test. * Succeeds using DD and Shewchuk orientation * */ // testTomasFa_2 template<> template<> void object::test<7>() { checkIntersectionNone( "LINESTRING (-5.9 163.1, 76.1 250.7)", "LINESTRING (14.6 185.0, 96.6 272.6)"); } #endif // fails #if 0 // fails: finds an intersection (we don't have DD) /** * Test from Tomas Fa - JTS list 6/13/2012 * * Fails using original JTS DeVillers determine orientation test. * Succeeds using DD and Shewchuk orientation * */ // testTomasFa_1 template<> template<> void object::test<8>() { checkIntersectionNone( "LINESTRING (-42.0 163.2, 21.2 265.2)", "LINESTRING (-26.2 188.7, 37.0 290.7)"); } #endif // fails /** * Following cases were failures when using the CentralEndpointIntersector heuristic. * This is because one segment lies at a significant angle to the other, * with only one endpoint is close to the other segment. * The CE heuristic chose the wrong endpoint to return. * The fix is to use a new heuristic which out of the 4 endpoints * chooses the one which is closest to the other segment. * This works in all known failure cases. * */ // public void testCentralEndpointHeuristicFailure() template<> template<> void object::test<9>() { checkIntersection( "LINESTRING (163.81867067 -211.31840378, 165.9174252 -214.1665075)", "LINESTRING (2.84139601 -57.95412726, 469.59990601 -502.63851732)", 1, "POINT (163.81867067 -211.31840378)", 0); } // public void testCentralEndpointHeuristicFailure2() template<> template<> void object::test<10>() { checkIntersection( "LINESTRING (-58.00593335955 -1.43739086465, -513.86101637525 -457.29247388035)", "LINESTRING (-215.22279674875 -158.65425425385, -218.1208801283 -160.68343590235)", 1, "POINT ( -215.22279674875 -158.65425425385 )", 0); } /** * Tests a case where intersection point is rounded, * and it is computed as a nearest endpoint. * Exposed a bug due to aliasing of endpoint. * * MD 8 Mar 2013 * */ // testRoundedPointsNotAltered() template<> template<> void object::test<11>() { checkInputNotAltered( "LINESTRING (-58.00593335955 -1.43739086465, -513.86101637525 -457.29247388035)", "LINESTRING (-215.22279674875 -158.65425425385, -218.1208801283 -160.68343590235)", 100000 ); } } // namespace tut geos-3.4.2/tests/unit/algorithm/RobustLineIntersectorTest.cpp0000644000175000017500000001437112206417146024271 0ustar frankiefrankie// // Ported from JTS junit/algorithm/RobustLineIntersectorTest.java rev. 1.1 #include // geos #include #include #include #include #include #include // required for use in auto_ptr #include #include #include #include #include // std #include #include #include using namespace geos::geom; // using geos::algorithm::LineIntersector; using geos::algorithm::CGAlgorithms; namespace tut { // // Test Group // struct test_robustlineintersector_data { typedef std::auto_ptr GeomPtr; LineIntersector i; }; typedef test_group group; typedef group::object object; group test_robustlineintersector_group( "geos::algorithm::RobustLineIntersector"); // // Test Cases // // 1 - test2Lines template<> template<> void object::test<1>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 20); Coordinate q1(20, 10); Coordinate q2(10, 20); Coordinate x(15, 15); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::POINT_INTERSECTION); ensure_equals(i.getIntersectionNum(), 1); ensure_equals(i.getIntersection(0), x); ensure("isProper", i.isProper()); ensure("hasIntersection", i.hasIntersection()); } // 2 - testCollinear1 template<> template<> void object::test<2>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 10); Coordinate q1(22, 10); Coordinate q2(30, 10); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::NO_INTERSECTION); ensure_equals(i.getIntersectionNum(), 0); ensure("!isProper", !i.isProper()); ensure("!hasIntersection", !i.hasIntersection()); } // 3 - testCollinear2 template<> template<> void object::test<3>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 10); Coordinate q1(20, 10); Coordinate q2(30, 10); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::POINT_INTERSECTION); ensure_equals(i.getIntersectionNum(), 1); ensure("!isProper", !i.isProper()); ensure("hasIntersection", i.hasIntersection()); } // 4 - testCollinear3 template<> template<> void object::test<4>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 10); Coordinate q1(15, 10); Coordinate q2(30, 10); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::COLLINEAR_INTERSECTION); ensure_equals(i.getIntersectionNum(), 2); ensure("!isProper", !i.isProper()); ensure("hasIntersection", i.hasIntersection()); } // 5 - testCollinear4 template<> template<> void object::test<5>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 10); Coordinate q1(10, 10); Coordinate q2(30, 10); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::COLLINEAR_INTERSECTION); ensure_equals(i.getIntersectionNum(), 2); ensure("!isProper", !i.isProper()); ensure("hasIntersection", i.hasIntersection()); } // 6 - testEndpointIntersection template<> template<> void object::test<6>() { i.computeIntersection(Coordinate(100, 100), Coordinate(10, 100), Coordinate(100, 10), Coordinate(100, 100)); ensure("hasIntersection", i.hasIntersection()); ensure_equals(i.getIntersectionNum(), 1); } // 7 - testEndpointIntersection2 template<> template<> void object::test<7>() { i.computeIntersection(Coordinate(190, 50), Coordinate(120, 100), Coordinate(120, 100), Coordinate(50, 150)); ensure("hasIntersection", i.hasIntersection()); ensure_equals(i.getIntersectionNum(), 1); ensure_equals(i.getIntersection(1), Coordinate(120, 100)); } // 8 - testOverlap template<> template<> void object::test<8>() { i.computeIntersection(Coordinate(180, 200), Coordinate(160, 180), Coordinate(220, 240), Coordinate(140, 160)); ensure("hasIntersection", i.hasIntersection()); ensure_equals(i.getIntersectionNum(), 2); } // 9 - testIsProper1 template<> template<> void object::test<9>() { i.computeIntersection(Coordinate(30, 10), Coordinate(30, 30), Coordinate(10, 10), Coordinate(90, 11)); ensure("hasIntersection", i.hasIntersection()); ensure_equals(i.getIntersectionNum(), 1); ensure("isProper", i.isProper()); } // 10 - testIsProper2 template<> template<> void object::test<10>() { i.computeIntersection(Coordinate(10, 30), Coordinate(10, 0), Coordinate(11, 90), Coordinate(10, 10)); ensure("hasIntersection", i.hasIntersection()); ensure_equals(i.getIntersectionNum(), 1); ensure("!isProper", !i.isProper()); } // 11 - testIsCCW template<> template<> void object::test<11>() { ensure_equals(CGAlgorithms::computeOrientation( Coordinate(-123456789, -40), Coordinate(0, 0), Coordinate(381039468754763.0, 123456789)), 1); } // 12 - testIsCCW2 template<> template<> void object::test<12>() { ensure_equals(CGAlgorithms::computeOrientation( Coordinate(10, 10), Coordinate(20, 20), Coordinate(0, 0)), 0); } // 13 - testA template<> template<> void object::test<13>() { Coordinate p1(-123456789, -40); Coordinate p2(381039468754763.0, 123456789); Coordinate q(0, 0); using geos::geom::CoordinateSequence; using geos::geom::GeometryFactory; using geos::geom::LineString; GeometryFactory factory; CoordinateSequence* cs = new CoordinateArraySequence(); cs->add(p1); cs->add(p2); GeomPtr l ( factory.createLineString(cs) ); GeomPtr p ( factory.createPoint(q) ); ensure(!l->intersects(p.get())); ensure(!CGAlgorithms::isOnLine(q, cs)); ensure_equals(CGAlgorithms::computeOrientation(p1, p2, q), -1); } } // namespace tut geos-3.4.2/tests/unit/algorithm/distance/0000755000175000017500000000000012206417243020177 5ustar frankiefrankiegeos-3.4.2/tests/unit/algorithm/distance/DiscreteHausdorffDistanceTest.cpp0000644000175000017500000000620312206417146026625 0ustar frankiefrankie// // Test Suite for geos::algorithm::distance::DiscreteHausdorffDistance // Ported from JTS junit/algorithm/distance/DiscreteHausdorffDistanceTest.java rev. 1.2 #include // geos #include #include #include #include #include #include // required for use in auto_ptr #include // std #include #include #include #include namespace geos { namespace geom { class Geometry; } } using namespace geos::geom; using namespace geos::algorithm::distance; // for Location namespace tut { // // Test Group // // Test data, not used struct test_DiscreteHausdorffDistance_data { typedef std::auto_ptr GeomPtr; test_DiscreteHausdorffDistance_data() : pm(), gf(&pm), reader(&gf) {} static const double TOLERANCE; void runTest(const std::string& wkt1, const std::string& wkt2, double expectedDistance) { GeomPtr g1 ( reader.read(wkt1) ); GeomPtr g2 ( reader.read(wkt2) ); double distance = DiscreteHausdorffDistance::distance(*g1, *g2); double diff = std::fabs(distance-expectedDistance); //std::cerr << "expectedDistance:" << expectedDistance << " actual distance:" << distance << std::endl; ensure( diff <= TOLERANCE ); } void runTest(const std::string& wkt1, const std::string& wkt2, double densifyFactor, double expectedDistance) { GeomPtr g1 ( reader.read(wkt1) ); GeomPtr g2 ( reader.read(wkt2) ); double distance = DiscreteHausdorffDistance::distance(*g1, *g2, densifyFactor); double diff = std::fabs(distance-expectedDistance); //std::cerr << "expectedDistance:" << expectedDistance << " actual distance:" << distance << std::endl; ensure( diff <= TOLERANCE ); } PrecisionModel pm; GeometryFactory gf; geos::io::WKTReader reader; }; const double test_DiscreteHausdorffDistance_data::TOLERANCE = 0.00001; typedef test_group group; typedef group::object object; group test_DiscreteHausdorffDistance_group("geos::algorithm::distace::DiscreteHausdorffDistance"); // // Test Cases // // 1 - testLineSegments template<> template<> void object::test<1>() { runTest("LINESTRING (0 0, 2 1)", "LINESTRING (0 0, 2 0)", 1.0); } // 2 - testLineSegments2 template<> template<> void object::test<2>() { runTest("LINESTRING (0 0, 2 0)", "LINESTRING (0 1, 1 2, 2 1)", 2.0); } // 3 - testLinePoints template<> template<> void object::test<3>() { runTest("LINESTRING (0 0, 2 0)", "MULTIPOINT (0 1, 1 0, 2 1)", 1.0); } // 4 - testLinesShowingDiscretenessEffect // // Shows effects of limiting HD to vertices // Answer is not true Hausdorff distance. // template<> template<> void object::test<4>() { runTest("LINESTRING (130 0, 0 0, 0 150)", "LINESTRING (10 10, 10 150, 130 10)", 14.142135623730951); // densifying provides accurate HD runTest("LINESTRING (130 0, 0 0, 0 150)", "LINESTRING (10 10, 10 150, 130 10)", 0.5, 70.0); } } // namespace tut geos-3.4.2/tests/unit/capi/0000755000175000017500000000000012206417243015333 5ustar frankiefrankiegeos-3.4.2/tests/unit/capi/GEOSBufferTest.cpp0000644000175000017500000003605312206417146020577 0ustar frankiefrankie// // Test Suite for C-API GEOSBuffer and GEOSBufferWithStyle #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosbuffer_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; char* wkt_; GEOSBufferParams* bp_; GEOSWKTWriter* wktw_; double area_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosbuffer_data() : geom1_(0), geom2_(0), wkt_(0), bp_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); } ~test_capigeosbuffer_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(wktw_); GEOSBufferParams_destroy(bp_); GEOSFree(wkt_); geom1_ = 0; geom2_ = 0; wkt_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosbuffer_group("capi::GEOSBuffer"); // // Test Cases // // Buffer against empty point template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POINT EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 1, 8, GEOSBUF_CAP_ROUND, GEOSBUF_JOIN_BEVEL, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(std::string(wkt_), std::string("POLYGON EMPTY")); } // Buffer against empty linestring template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 1, 8, GEOSBUF_CAP_ROUND, GEOSBUF_JOIN_BEVEL, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(std::string(wkt_), std::string("POLYGON EMPTY")); } // Buffer against empty polygon template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 1, 8, GEOSBUF_CAP_ROUND, GEOSBUF_JOIN_BEVEL, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(std::string(wkt_), std::string("POLYGON EMPTY")); } // Simple Buffer on a 2-vertices line (quadSegs: 1) template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBuffer(geom1_, 5, 1); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 7); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 161.803, 0.001); } // Simple Buffer on a 2-vertices line (quadSegs: 2) template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBuffer(geom1_, 5, 2); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 11); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 182.514, 0.001); } // Buffer with square end caps on a 2-vertices line (no matter quadSegs) template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_ROUND, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 7); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 211.803, 0.001); } // Buffer with flat end caps on a 2-vertices line (no matter quadSegs) template<> template<> void object::test<7>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_ROUND, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 5); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 111.803, 0.001); } // Buffer with flat end cap on a 2-vertices horizontal line template<> template<> void object::test<8>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_ROUND, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 5); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 50.0, 0.001); ensure_equals(std::string(wkt_), std::string( "POLYGON ((10.0000000000000000 15.0000000000000000, 10.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 5.0000000000000000 15.0000000000000000, 10.0000000000000000 15.0000000000000000))" )); } // Buffer with square end cap on a 2-vertices horizontal line template<> template<> void object::test<9>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_ROUND, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 7); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 150.0, 0.001); ensure_equals(std::string(wkt_), std::string( "POLYGON ((10.0000000000000000 15.0000000000000000, 15.0000000000000000 15.0000000000000000, 15.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000009, 0.0000000000000000 15.0000000000000000, 10.0000000000000000 15.0000000000000000))" )); } // Buffer with flat end cap and round join style // on an L-shaped simple line template<> template<> void object::test<10>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_ROUND, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 29); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 244.615, 0.001); } // Buffer with flat end cap and mitre join style // on an L-shaped simple line template<> template<> void object::test<11>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_MITRE, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 9); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 250.0, 0.001); ensure_equals(std::string(wkt_), std::string( "POLYGON ((5.0000000000000000 15.0000000000000000, 5.0000000000000000 20.0000000000000000, 5.0000000000000000 25.0000000000000000, 15.0000000000000000 25.0000000000000000, 15.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000009, 0.0000000000000000 15.0000000000000000, 5.0000000000000000 15.0000000000000000))" )); } // Buffer with flat end cap and bevel join style // on an L-shaped simple line template<> template<> void object::test<12>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 20, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_BEVEL, 5.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 10); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 237.5, 0.001); ensure_equals(std::string(wkt_), std::string( "POLYGON ((5.0000000000000000 15.0000000000000000, 5.0000000000000000 20.0000000000000000, 5.0000000000000000 25.0000000000000000, 15.0000000000000000 25.0000000000000000, 15.0000000000000000 10.0000000000000000, 10.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000009, 0.0000000000000000 15.0000000000000000, 5.0000000000000000 15.0000000000000000))" )); } // Buffer with flat end cap and bevel join style // on an L-shaped simple line with different quadSegs and mitreLimit // (result unaffected) template<> template<> void object::test<13>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10, 10 20)"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 5, 200, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_BEVEL, 10.0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 10); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 237.5, 0.001); ensure_equals(std::string(wkt_), std::string( "POLYGON ((5.0000000000000000 15.0000000000000000, 5.0000000000000000 20.0000000000000000, 5.0000000000000000 25.0000000000000000, 15.0000000000000000 25.0000000000000000, 15.0000000000000000 10.0000000000000000, 10.0000000000000000 5.0000000000000000, 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000009, 0.0000000000000000 15.0000000000000000, 5.0000000000000000 15.0000000000000000))" )); } // Buffer with limited mitre (1) template<> template<> void object::test<14>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 0))"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 2, 200, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 1); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 7); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 127.452, 0.001); } // Buffer with limited mitre (2) template<> template<> void object::test<15>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 0))"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 2, 200, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 2); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 6); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 139.043, 0.001); } // Buffer with limited mitre (3) template<> template<> void object::test<16>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 0))"); ensure( 0 != geom1_ ); geom2_ = GEOSBufferWithStyle(geom1_, 2, 200, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 3); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(GEOSGetNumCoordinates(geom2_), 4); ensure(0 != GEOSArea(geom2_, &area_)); ensure_distance(area_, 141.598, 0.001); } // Buffer with params: // flat end cap on a straight line template<> template<> void object::test<17>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10)"); ensure( 0 != geom1_ ); bp_ = GEOSBufferParams_create(); GEOSBufferParams_setEndCapStyle(bp_, GEOSBUF_CAP_SQUARE); geom2_ = GEOSBufferWithParams(geom1_, bp_, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POLYGON ((10 12, 12 12, 12 8, 5 8, 3 8, 3 12, 10 12))" )); } // Buffer with params: // flat end cap on a straight line // Single sided (left) template<> template<> void object::test<18>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10)"); ensure( 0 != geom1_ ); bp_ = GEOSBufferParams_create(); GEOSBufferParams_setEndCapStyle(bp_, GEOSBUF_CAP_SQUARE); GEOSBufferParams_setSingleSided(bp_, 1); geom2_ = GEOSBufferWithParams(geom1_, bp_, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POLYGON ((10 10, 5 10, 5 12, 10 12, 10 10))" )); } // Buffer with params: // flat end cap on a straight line // Single sided (right) template<> template<> void object::test<19>() { geom1_ = GEOSGeomFromWKT("LINESTRING(5 10, 10 10)"); ensure( 0 != geom1_ ); bp_ = GEOSBufferParams_create(); GEOSBufferParams_setEndCapStyle(bp_, GEOSBUF_CAP_SQUARE); GEOSBufferParams_setSingleSided(bp_, 1); geom2_ = GEOSBufferWithParams(geom1_, bp_, -2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POLYGON ((5 10, 10 10, 10 8, 5 8, 5 10))" )); } // Single-sided buffer (3) // http://trac.osgeo.org/geos/ticket/455 template<> template<> void object::test<20>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10)', -10)"); ensure( 0 != geom1_ ); geom2_ = GEOSSingleSidedBuffer(geom1_, 10, 8, GEOSBUF_JOIN_BEVEL, 0, 0); ensure( 0 != geom2_ ); wkt_ = GEOSGeomToWKT(geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (20.0000000000000000 10.0000000000000000, 20.0000000000000000 0.0000000000000000, 10.0000000000000000 -10.0000000000000000, 0.0000000000000000 -10.0000000000000000)" )); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSContainsTest.cpp0000644000175000017500000000474012206417146021142 0ustar frankiefrankie// // Test Suite for C-API GEOSContains #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeoscontains_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeoscontains_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); } ~test_capigeoscontains_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeoscontains_group("capi::GEOSContains"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); geom2_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSContains(geom1_, geom2_); ensure_equals(r1, 0); char const r2 = GEOSContains(geom2_, geom1_); ensure_equals(r2, 0); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POLYGON((1 1,1 5,5 5,5 1,1 1))"); geom2_ = GEOSGeomFromWKT("POINT(2 2)"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSContains(geom1_, geom2_); ensure_equals(int(r1), 1); char const r2 = GEOSContains(geom2_, geom1_); ensure_equals(int(r2), 0); } template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))"); geom2_ = GEOSGeomFromWKT("POLYGON((1 1,1 2,2 2,2 1,1 1))"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSContains(geom1_, geom2_); ensure_equals(int(r1), 1); char const r2 = GEOSContains(geom2_, geom1_); ensure_equals(int(r2), 0); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSConvexHullTest.cpp0000644000175000017500000000352112206417146021447 0ustar frankiefrankie// // Test Suite for C-API GEOSConvexHull #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosconvexhull_data { GEOSGeometry* input_; GEOSGeometry* expected_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosconvexhull_data() : input_(0), expected_(0) { initGEOS(notice, notice); } ~test_capigeosconvexhull_data() { GEOSGeom_destroy(input_); GEOSGeom_destroy(expected_); input_ = 0; expected_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosconvexhull_group("capi::GEOSConvexHull"); // // Test Cases // template<> template<> void object::test<1>() { input_ = GEOSGeomFromWKT("MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240)"); ensure( 0 != input_ ); expected_ = GEOSGeomFromWKT("LINESTRING (130 240, 650 240, 130 240)"); ensure( 0 != expected_ ); GEOSGeometry* output = GEOSConvexHull(input_); ensure( 0 != output ); ensure( 0 == GEOSisEmpty(output) ); // TODO //ensure( 0 != GEOSEquals(output, expected_)); GEOSGeom_destroy(output); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSCoordSeqTest.cpp0000644000175000017500000001504112206417146021077 0ustar frankiefrankie// // Test Suite for C-API GEOSCoordSeq #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeoscoordseq_data { GEOSCoordSequence* cs_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeoscoordseq_data() : cs_(0) { initGEOS(notice, notice); } ~test_capigeoscoordseq_data() { GEOSCoordSeq_destroy(cs_); cs_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeoscoordseq_group("capi::GEOSCoordSeq"); // // Test Cases // // Test construction and fill of a 3D CoordinateSequence template<> template<> void object::test<1>() { cs_ = GEOSCoordSeq_create(5, 3); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 5u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); ensure_equals( dims, 3u ); for (unsigned int i=0; i<5; ++i) { double x = i*10; double y = i*10+1; double z = i*10+2; GEOSCoordSeq_setX(cs_, i, x); GEOSCoordSeq_setY(cs_, i, y); GEOSCoordSeq_setZ(cs_, i, z); double xcheck, ycheck, zcheck; ensure( 0 != GEOSCoordSeq_getX(cs_, i, &xcheck) ); ensure( 0 != GEOSCoordSeq_getY(cs_, i, &ycheck) ); ensure( 0 != GEOSCoordSeq_getZ(cs_, i, &zcheck) ); ensure_equals( xcheck, x ); ensure_equals( ycheck, y ); ensure_equals( zcheck, z ); } } // Test not swapped setX/setY calls (see bug #133, fixed) template<> template<> void object::test<2>() { cs_ = GEOSCoordSeq_create(1, 3); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 1u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); ensure_equals( dims, 3u ); double x = 10; double y = 11; double z = 12; // X, Y, Z GEOSCoordSeq_setX(cs_, 0, x); GEOSCoordSeq_setY(cs_, 0, y); GEOSCoordSeq_setZ(cs_, 0, z); double xcheck, ycheck, zcheck; ensure( 0 != GEOSCoordSeq_getY(cs_, 0, &ycheck) ); ensure( 0 != GEOSCoordSeq_getX(cs_, 0, &xcheck) ); ensure( 0 != GEOSCoordSeq_getZ(cs_, 0, &zcheck) ); ensure_equals( xcheck, x ); ensure_equals( ycheck, y ); ensure_equals( zcheck, z ); } // Test not swapped setOrdinate calls (see bug #133, fixed) template<> template<> void object::test<3>() { cs_ = GEOSCoordSeq_create(1, 3); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 1u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); ensure_equals( dims, 3u ); double x = 10; double y = 11; double z = 12; // X, Y, Z GEOSCoordSeq_setOrdinate(cs_, 0, 0, x); GEOSCoordSeq_setOrdinate(cs_, 0, 1, y); GEOSCoordSeq_setOrdinate(cs_, 0, 2, z); double xcheck, ycheck, zcheck; ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 1, &ycheck) ); ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 0, &xcheck) ); ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 2, &zcheck) ); ensure_equals( xcheck, x ); ensure_equals( ycheck, y ); ensure_equals( zcheck, z ); } // Test swapped setX calls (see bug #133, fixed) template<> template<> void object::test<4>() { cs_ = GEOSCoordSeq_create(1, 3); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 1u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); ensure_equals( dims, 3u ); double x = 10; double y = 11; double z = 12; // Y, X, Z GEOSCoordSeq_setY(cs_, 0, y); GEOSCoordSeq_setX(cs_, 0, x); GEOSCoordSeq_setZ(cs_, 0, z); double xcheck, ycheck, zcheck; ensure( 0 != GEOSCoordSeq_getY(cs_, 0, &ycheck) ); ensure( 0 != GEOSCoordSeq_getX(cs_, 0, &xcheck) ); ensure( 0 != GEOSCoordSeq_getZ(cs_, 0, &zcheck) ); ensure_equals( xcheck, x ); ensure_equals( ycheck, y ); ensure_equals( zcheck, z ); } // Test swapped setOrdinate calls (see bug #133, fixed) template<> template<> void object::test<5>() { cs_ = GEOSCoordSeq_create(1, 3); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 1u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); ensure_equals( dims, 3u ); double x = 10; double y = 11; double z = 12; // Y, X, Z GEOSCoordSeq_setOrdinate(cs_, 0, 1, y); GEOSCoordSeq_setOrdinate(cs_, 0, 0, x); GEOSCoordSeq_setOrdinate(cs_, 0, 2, z); double xcheck, ycheck, zcheck; ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 1, &ycheck) ); ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 0, &xcheck) ); ensure( 0 != GEOSCoordSeq_getOrdinate(cs_, 0, 2, &zcheck) ); ensure_equals( xcheck, x ); ensure_equals( ycheck, y ); ensure_equals( zcheck, z ); } // Test getDimensions call (see bug #135) template<> template<> void object::test<6>() { cs_ = GEOSCoordSeq_create(1, 2); unsigned int size; unsigned int dims; ensure ( 0 != GEOSCoordSeq_getSize(cs_, &size) ); ensure_equals( size, 1u ); ensure ( 0 != GEOSCoordSeq_getDimensions(cs_, &dims) ); // The dimension passed to GEOSCoordSeq_create() // is a request for a minimum, not a strict mandate // for changing actual size. // ensure ( dims >= 2u ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSDelaunayTriangulationTest.cpp0000644000175000017500000001262712206417146023672 0ustar frankiefrankie// // Test Suite for C-API GEOSDelaunayTriangulation #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosdelaunaytriangulation_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTWriter* w_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosdelaunaytriangulation_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); w_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(w_, 1); } void ensure_equals_wkt(GEOSGeometry* g, const std::string& exp) { GEOSNormalize(g); char* wkt_c = GEOSWKTWriter_write(w_, g); std::string out(wkt_c); free(wkt_c); ensure_equals(out, exp); } ~test_capigeosdelaunaytriangulation_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(w_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosdelaunaytriangulation_group("capi::GEOSDelaunayTriangulation"); // // Test Cases // // Empty polygon template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure_equals ( GEOSisEmpty(geom1_), 1 ); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 0); ensure_equals ( GEOSisEmpty(geom2_), 1 ); ensure_equals ( GEOSGeomTypeId(geom2_), GEOS_GEOMETRYCOLLECTION ); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 1); ensure_equals ( GEOSisEmpty(geom2_), 1 ); ensure_equals ( GEOSGeomTypeId(geom2_), GEOS_MULTILINESTRING ); } // Single point template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POINT(0 0)"); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 0); ensure_equals ( GEOSisEmpty(geom2_), 1 ); ensure_equals ( GEOSGeomTypeId(geom2_), GEOS_GEOMETRYCOLLECTION ); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 1); ensure_equals ( GEOSisEmpty(geom2_), 1 ); ensure_equals ( GEOSGeomTypeId(geom2_), GEOS_MULTILINESTRING ); } // Three collinear points template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("MULTIPOINT(0 0, 5 0, 10 0)"); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 0); ensure_equals ( GEOSisEmpty(geom2_), 1 ); ensure_equals ( GEOSGeomTypeId(geom2_), GEOS_GEOMETRYCOLLECTION ); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 1); char* wkt_c = GEOSWKTWriter_write(w_, geom2_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "MULTILINESTRING ((5 0, 10 0), (0 0, 5 0))"); } // Three points template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("MULTIPOINT(0 0, 5 0, 10 10)"); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 0); ensure(geom2_ != 0); ensure_equals_wkt(geom2_, "GEOMETRYCOLLECTION (POLYGON ((0 0, 10 10, 5 0, 0 0)))" ); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 1); ensure_equals_wkt(geom2_, "MULTILINESTRING ((5 0, 10 10), (0 0, 10 10), (0 0, 5 0))" ); } // A polygon with an hole template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 8.5 1, 10 10, 0.5 9, 0 0),(2 2, 3 8, 7 8, 8 2, 2 2)))"); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 0); ensure(geom2_ != 0); ensure_equals_wkt(geom2_, "GEOMETRYCOLLECTION (POLYGON ((8 2, 10 10, 8.5 1, 8 2)), POLYGON ((7 8, 10 10, 8 2, 7 8)), POLYGON ((3 8, 10 10, 7 8, 3 8)), POLYGON ((2 2, 8 2, 8.5 1, 2 2)), POLYGON ((2 2, 7 8, 8 2, 2 2)), POLYGON ((2 2, 3 8, 7 8, 2 2)), POLYGON ((0.5 9, 10 10, 3 8, 0.5 9)), POLYGON ((0.5 9, 3 8, 2 2, 0.5 9)), POLYGON ((0 0, 2 2, 8.5 1, 0 0)), POLYGON ((0 0, 0.5 9, 2 2, 0 0)))" ); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 0, 1); ensure_equals_wkt(geom2_, "MULTILINESTRING ((8.5 1, 10 10), (8 2, 10 10), (8 2, 8.5 1), (7 8, 10 10), (7 8, 8 2), (3 8, 10 10), (3 8, 7 8), (2 2, 8.5 1), (2 2, 8 2), (2 2, 7 8), (2 2, 3 8), (0.5 9, 10 10), (0.5 9, 3 8), (0.5 9, 2 2), (0 0, 8.5 1), (0 0, 2 2), (0 0, 0.5 9))" ); } // Four points with a tolerance making one collapse template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("MULTIPOINT(0 0, 10 0, 10 10, 11 10)"); GEOSGeom_destroy(geom2_); geom2_ = GEOSDelaunayTriangulation(geom1_, 2, 1); ensure_equals_wkt(geom2_, "MULTILINESTRING ((10 0, 10 10), (0 0, 10 10), (0 0, 10 0))" ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSDistanceTest.cpp0000644000175000017500000000351012206417146021110 0ustar frankiefrankie// // Test Suite for C-API GEOSDistance #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosdistance_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSGeometry* geom3_; GEOSWKTWriter* w_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosdistance_data() : geom1_(0), geom2_(0), geom3_(0), w_(0) { initGEOS(notice, notice); w_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(w_, 1); } ~test_capigeosdistance_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSGeom_destroy(geom3_); GEOSWKTWriter_destroy(w_); geom1_ = 0; geom2_ = 0; geom3_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosdistance_group("capi::GEOSDistance"); // // Test Cases // /// See http://trac.osgeo.org/geos/ticket/377 template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POINT(10 10)"); geom2_ = GEOSGeomFromWKT("POINT(3 6)"); double dist; int ret = GEOSDistance(geom1_, geom2_, &dist); ensure_equals(ret, 1); ensure_distance(dist, 8.06225774829855, 1e-12); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSGeomFromWKBTest.cpp0000644000175000017500000001006012206417146021433 0ustar frankiefrankie// // Test Suite for C-API GEOSGeomFromWKB #include #include // wkb_hex_decoder // geos #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosgeomfromwkb_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTReader* reader_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosgeomfromwkb_data() : geom1_(0), geom2_(0), reader_(0) { initGEOS(notice, notice); reader_ = GEOSWKTReader_create(); } ~test_capigeosgeomfromwkb_data() { GEOSGeom_destroy(geom2_); geom2_ = 0; GEOSGeom_destroy(geom1_); geom1_ = 0; GEOSWKTReader_destroy(reader_); reader_ = 0; finishGEOS(); } void test_wkb(std::string const& wkbhex, std::string const& wkt) { wkb_hex_decoder::binary_type wkb; wkb_hex_decoder::decode(wkbhex, wkb); geom1_ = GEOSGeomFromWKB_buf(&wkb[0], wkb.size()); ensure("GEOSGeomFromWKB_buf failed to create geometry", 0 != geom1_ ); // TODO: Update test to compare with WKT-based geometry (void)wkt; // ATM, some XYZ and XYZM geometries fail //geom2_ = GEOSWKTReader_read(reader_, wkt.c_str()); //ensure ( 0 != geom2_ ); //char result = GEOSEquals(geom1_, geom2_); //ensure_equals(result, char(1)); } }; typedef test_group group; typedef group::object object; group test_capigeosgeomfromwkb_group("capi::GEOSGeomFromWKB"); // // Test Cases // template<> template<> void object::test<1>() { // POINT(1.234 5.678) std::string wkt("POINT (1.234 5.678)"); std::string wkb("01010000005839B4C876BEF33F83C0CAA145B61640"); test_wkb(wkb, wkt); } template<> template<> void object::test<2>() { // SRID=4;POINT(0 0) std::string wkt("POINT(0 0)"); std::string ewkb("01010000200400000000000000000000000000000000000000"); test_wkb(ewkb, wkt); } template<> template<> void object::test<3>() { // SRID=32632;POINT(1.234 5.678) std::string wkt("POINT (1.234 5.678)"); std::string ewkb("0101000020787F00005839B4C876BEF33F83C0CAA145B61640"); test_wkb(ewkb, wkt); } template<> template<> void object::test<4>() { // POINT (1.234 5.678 15 79) -- XYZM std::string wkt("POINT (1.234 5.678 15 79)"); std::string ewkb("01010000C05839B4C876BEF33F83C0CAA145B616400000000000002E400000000000C05340"); test_wkb(ewkb, wkt); } template<> template<> void object::test<5>() { std::string wkt("MULTIPOINT (1.123 1.456, 2.123 2.456, 3.123 3.456)"); std::string ewkb("01040000000300000001010000002b8716d9cef7f13fb29defa7c64bf73f010100000096438b6ce7fb0040d9cef753e3a50340010100000096438b6ce7fb0840d9cef753e3a50b40"); test_wkb(ewkb, wkt); } // TODO: Does GEOSGeomFromWKB_buf accept EWKB or WKB only? // The cases below test EWKB input and they are failing. //template<> //template<> //void object::test<6>() //{ // // SELECT st_geomfromewkt('MULTIPOINT((0 0 1 1), (3 2 2 1))') ; // std::string wkt("MULTIPOINT((0 0 1 1), (3 2 2 1))"); // std::string ewkb("01040000C00200000001010000C000000000000000000000000000000000000000000000F03F000000000000F03F01010000C0000000000000084000000000000000400000000000000040000000000000F03F"); // test_wkb(ewkb, wkt); //} } // namespace tut geos-3.4.2/tests/unit/capi/GEOSGeomToWKTTest.cpp0000644000175000017500000001053112206417146021137 0ustar frankiefrankie// // Test Suite for C-API GEOSGeomToWKT #include // geos #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosgeomtowkt_data { GEOSGeometry* geom1_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosgeomtowkt_data() : geom1_(0) { initGEOS(notice, notice); } ~test_capigeosgeomtowkt_data() { GEOSGeom_destroy(geom1_); geom1_ = 0; finishGEOS(); } void test_wkt(std::string const& wkt) { geom1_ = GEOSGeomFromWKT(wkt.c_str()); ensure ( 0 != geom1_ ); char* wkt_c = GEOSGeomToWKT(geom1_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, wkt); } void test_wkt(std::string const& wkt, std::string::size_type n) { geom1_ = GEOSGeomFromWKT(wkt.c_str()); ensure ( 0 != geom1_ ); char* wkt_c = GEOSGeomToWKT(geom1_); std::string out(wkt_c); free(wkt_c); ensure_equals(out.substr(0, n), wkt.substr(0, n)); } void test_writer_wkt(GEOSWKTWriter *writer, std::string const& wkt) { geom1_ = GEOSGeomFromWKT(wkt.c_str()); ensure ( 0 != geom1_ ); char* wkt_c = GEOSWKTWriter_write(writer,geom1_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, wkt); } }; typedef test_group group; typedef group::object object; group test_capigeosgeomtowkt_group("capi::GEOSGeomToWKT"); // // Test Cases // template<> template<> void object::test<1>() { test_wkt("POINT EMPTY"); } template<> template<> void object::test<2>() { test_wkt("LINESTRING EMPTY"); } template<> template<> void object::test<3>() { test_wkt("POLYGON EMPTY"); } template<> template<> void object::test<4>() { test_wkt("MULTIPOINT EMPTY"); } template<> template<> void object::test<5>() { test_wkt("MULTILINESTRING EMPTY"); } template<> template<> void object::test<6>() { test_wkt("MULTIPOLYGON EMPTY"); } // Comparing string based on float-point numbers does not make sense, // so make poor-man comparison of WKT type tag. template<> template<> void object::test<7>() { test_wkt("POINT (1.234 5.678)", 7); } template<> template<> void object::test<8>() { test_wkt("LINESTRING (0 0, 5 5, 10 5, 10 10)", 13); } template<> template<> void object::test<9>() { test_wkt("POLYGON ((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))", 11); } template<> template<> void object::test<10>() { test_wkt("MULTIPOINT (0 0, 5 5, 10 10, 15 15, 20 20)", 13); } template<> template<> void object::test<11>() { test_wkt("MULTILINESTRING ((0 0, 10 0, 10 10, 0 10, 10 20),(2 2, 2 6, 6 4, 20 2))", 19); } template<> template<> void object::test<12>() { test_wkt("MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))", 17); } // Test the WKTWriter API instead of the quicky function. template<> template<> void object::test<13>() { GEOSWKTWriter *writer = GEOSWKTWriter_create(); ensure( "getOutputDimension_1", GEOSWKTWriter_getOutputDimension(writer) == 2 ); GEOSWKTWriter_setTrim( writer, 1 ); GEOSWKTWriter_setOutputDimension( writer, 3 ); ensure( "getOutputDimension_2", GEOSWKTWriter_getOutputDimension(writer) == 3 ); test_writer_wkt(writer, "POINT Z (10 13 3)"); GEOSWKTWriter_destroy( writer ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSGeom_create.cpp0000644000175000017500000000674312206417146020743 0ustar frankiefrankie// // Test Suite for C-API GEOSGeom_createPolygon #include // geos #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosgeom_create_data { GEOSGeometry* geom1_; GEOSContextHandle_t handle_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosgeom_create_data() : geom1_(0), handle_(initGEOS_r(notice, notice)) { } ~test_capigeosgeom_create_data() { GEOSGeom_destroy(geom1_); geom1_ = 0; finishGEOS_r(handle_); } }; typedef test_group group; typedef group::object object; group test_capigeosgeom_create_group("capi::GEOSGeom_create"); // // Test Cases // // EMPTY point template<> template<> void object::test<1>() { geom1_ = GEOSGeom_createEmptyPoint_r(handle_); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_POINT); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY linestring template<> template<> void object::test<2>() { geom1_ = GEOSGeom_createEmptyLineString_r(handle_); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_LINESTRING); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY polygon template<> template<> void object::test<3>() { geom1_ = GEOSGeom_createEmptyPolygon_r(handle_); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_POLYGON); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY multipoint template<> template<> void object::test<4>() { geom1_ = GEOSGeom_createEmptyCollection_r(handle_, GEOS_MULTIPOINT); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_MULTIPOINT); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY multilinestring template<> template<> void object::test<5>() { geom1_ = GEOSGeom_createEmptyCollection_r(handle_, GEOS_MULTILINESTRING); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_MULTILINESTRING); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY multipolygon template<> template<> void object::test<6>() { geom1_ = GEOSGeom_createEmptyCollection_r(handle_, GEOS_MULTIPOLYGON); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_MULTIPOLYGON); GEOSGeom_destroy(geom1_); geom1_=0; } // EMPTY collection template<> template<> void object::test<7>() { geom1_ = GEOSGeom_createEmptyCollection_r(handle_, GEOS_GEOMETRYCOLLECTION); ensure(0 != GEOSisEmpty_r(handle_, geom1_)); ensure_equals(GEOSGeomTypeId_r(handle_, geom1_), GEOS_GEOMETRYCOLLECTION); GEOSGeom_destroy(geom1_); geom1_=0; } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSGeom_extractUniquePointsTest.cpp0000644000175000017500000000531712206417146024372 0ustar frankiefrankie// // Test Suite for C-API GEOSGeom_extractUniquePoints_r #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosextractuniquepoints_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSGeometry* geom3_; GEOSContextHandle_t handle_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosextractuniquepoints_data() : geom1_(0), geom2_(0), geom3_(0) { handle_ = initGEOS_r(notice, notice); } ~test_capigeosextractuniquepoints_data() { GEOSGeom_destroy_r(handle_, geom1_); GEOSGeom_destroy_r(handle_, geom2_); if( geom3_ ) GEOSGeom_destroy_r(handle_, geom3_); geom1_ = 0; geom2_ = 0; geom3_ = 0; finishGEOS_r(handle_); } }; typedef test_group group; typedef group::object object; group test_capigeosextractuniquepoints_group("capi::GEOSGeom_extractUniquePoints"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT_r(handle_, "POLYGON EMPTY"); /* ensure_equals(GEOSGetNumGeometries_r(handle_, geom2_), 0); */ geom3_ = GEOSGeom_extractUniquePoints_r(handle_, geom1_); ensure(0 != GEOSisEmpty_r(handle_, geom3_)); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT_r(handle_, "MULTIPOINT(0 0, 0 0, 1 1)"); geom2_ = GEOSGeomFromWKT_r(handle_, "MULTIPOINT(0 0, 1 1)"); /* ensure_equals(GEOSGetNumGeometries_r(handle_, geom2_), 0); */ geom3_ = GEOSGeom_extractUniquePoints_r(handle_, geom1_); ensure(0 != GEOSEquals_r(handle_, geom3_, geom2_)); } template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT_r(handle_, "GEOMETRYCOLLECTION(MULTIPOINT(0 0, 0 0, 1 1),LINESTRING(1 1, 2 2, 2 2, 0 0),POLYGON((5 5, 0 0, 0 2, 2 2, 5 5)))"); geom2_ = GEOSGeomFromWKT_r(handle_, "MULTIPOINT(0 0, 1 1, 2 2, 5 5, 0 2)"); geom3_ = GEOSGeom_extractUniquePoints_r(handle_, geom1_); /* ensure_equals(GEOSGetNumGeometries_r(handle_, geom2_), 0); */ ensure(0 != GEOSEquals_r(handle_, geom3_, geom2_)); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSGetCentroidTest.cpp0000644000175000017500000000711212206417146021567 0ustar frankiefrankie// $Id$ // // Test Suite for C-API GEOSGetCentroid #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capicentroid_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTWriter* wktw_; char* wkt_; double area_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capicentroid_data() : geom1_(0), geom2_(0), wkt_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); GEOSWKTWriter_setRoundingPrecision(wktw_, 8); } ~test_capicentroid_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(wktw_); GEOSFree(wkt_); geom1_ = 0; geom2_ = 0; wkt_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capicentroid_group("capi::GEOSGetCentroid"); // // Test Cases // // Single point template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POINT(10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSGetCentroid(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (10 0)")); } // line template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSGetCentroid(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (5 0)")); } // polygon template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); ensure( 0 != geom1_ ); geom2_ = GEOSGetCentroid(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (5 5)")); } // Tiny triangle, see http://trac.osgeo.org/geos/ticket/559 template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT( "POLYGON(( \ 56.528666666700 25.2101666667, \ 56.529000000000 25.2105000000, \ 56.528833333300 25.2103333333, \ 56.528666666700 25.2101666667))"); ensure( 0 != geom1_ ); geom2_ = GEOSGetCentroid(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (56.528833 25.210333)" ) ); } // Empty geometry -- see http://trac.osgeo.org/geos/ticket/560 template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("LINESTRING EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSGetCentroid(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT EMPTY")); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSInterruptTest.cpp0000644000175000017500000001000312206417146021345 0ustar frankiefrankie// // Test Suite for C-API custom allocators #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capiinterrupt_data { static int numcalls; static GEOSInterruptCallback* nextcb; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capiinterrupt_data() { } ~test_capiinterrupt_data() { } static void interruptNow() { GEOS_interruptRequest(); } static void countCalls() { ++numcalls; if ( nextcb ) (*nextcb)(); } }; int test_capiinterrupt_data::numcalls = 0; GEOSInterruptCallback* test_capiinterrupt_data::nextcb = 0; typedef test_group group; typedef group::object object; group test_capiinterrupt_group("capi::GEOSInterrupt"); // // Test Cases // /// Test interrupt callback being called template<> template<> void object::test<1>() { numcalls = 0; initGEOS(notice, notice); GEOS_interruptRegisterCallback(countCalls); ensure_equals(numcalls, 0); GEOSGeometry *geom1 = GEOSGeomFromWKT("LINESTRING(0 0, 1 0)"); ensure("GEOSGeomFromWKT failed", 0 != geom1); GEOSGeometry *geom2 = GEOSBuffer(geom1, 1, 8); ensure("GEOSBufferWithStyle failed", 0 != geom2); ensure("interrupt callback never called", numcalls > 0); GEOSGeom_destroy(geom1); GEOSGeom_destroy(geom2); GEOS_interruptRegisterCallback(0); /* unregister */ finishGEOS(); } /// Test interrupt callback being NOT reset by initGEOS template<> template<> void object::test<2>() { numcalls = 0; GEOS_interruptRegisterCallback(countCalls); initGEOS(notice, notice); ensure_equals(numcalls, 0); GEOSGeometry *geom1 = GEOSGeomFromWKT("LINESTRING(0 0, 1 0)"); ensure("GEOSGeomFromWKT failed", 0 != geom1); GEOSGeometry *geom2 = GEOSBuffer(geom1, 1, 8); ensure("GEOSBufferWithStyle failed", 0 != geom2); ensure("interrupt callback never called", numcalls > 0); GEOSGeom_destroy(geom1); GEOSGeom_destroy(geom2); GEOS_interruptRegisterCallback(0); finishGEOS(); } /// Test interrupting from callback template<> template<> void object::test<3>() { initGEOS(notice, notice); GEOSGeometry *geom1 = GEOSGeomFromWKT("LINESTRING(0 0, 1 0)"); ensure("GEOSGeomFromWKT failed", 0 != geom1); GEOS_interruptRegisterCallback(interruptNow); GEOSGeometry *geom2 = GEOSBuffer(geom1, 1, 8); ensure("GEOSBuffer wasn't interrupted", 0 == geom2); GEOS_interruptRegisterCallback(0); /* unregister */ // TODO: check the actual exception ? (sent to notice() callback) GEOSGeom_destroy(geom1); finishGEOS(); } /// Test chaining interrupt callbacks template<> template<> void object::test<4>() { numcalls = 0; initGEOS(notice, notice); GEOSGeometry *geom1 = GEOSGeomFromWKT("LINESTRING(0 0, 1 0)"); ensure("GEOSGeomFromWKT failed", 0 != geom1); GEOS_interruptRegisterCallback(interruptNow); nextcb = GEOS_interruptRegisterCallback(countCalls); GEOSGeometry *geom2 = GEOSBuffer(geom1, 1, 8); ensure("GEOSBuffer wasn't interrupted", 0 == geom2); ensure_equals(numcalls, 1); GEOS_interruptRegisterCallback(0); /* unregister */ nextcb = 0; GEOSGeom_destroy(geom1); finishGEOS(); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSIntersectsTest.cpp0000644000175000017500000000751712206417146021514 0ustar frankiefrankie// // Test Suite for C-API GEOSIntersects #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosintersects_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosintersects_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); } ~test_capigeosintersects_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosintersects_group("capi::GEOSIntersects"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); geom2_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSIntersects(geom1_, geom2_); ensure_equals(r1, 0); char const r2 = GEOSIntersects(geom2_, geom1_); ensure_equals(r2, 0); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POLYGON((1 1,1 5,5 5,5 1,1 1))"); geom2_ = GEOSGeomFromWKT("POINT(2 2)"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSIntersects(geom1_, geom2_); ensure_equals(int(r1), 1); char const r2 = GEOSIntersects(geom2_, geom1_); ensure_equals(int(r2), 1); } template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))"); geom2_ = GEOSGeomFromWKT("POLYGON((1 1,1 2,2 2,2 1,1 1))"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSIntersects(geom1_, geom2_); ensure_equals(int(r1), 1); char const r2 = GEOSIntersects(geom2_, geom1_); ensure_equals(int(r2), 1); } // This is a test for bug #357 (GEOSIntersects with nan coords) template<> template<> void object::test<4>() { GEOSCoordSequence* cs = GEOSCoordSeq_create(5, 2); double nan = std::numeric_limits::quiet_NaN(); GEOSCoordSeq_setX(cs, 0, 1); GEOSCoordSeq_setY(cs, 0, 1); for (unsigned int i=1; i<4; ++i) { GEOSCoordSeq_setX(cs, i, nan); GEOSCoordSeq_setY(cs, i, nan); } GEOSCoordSeq_setX(cs, 4, 1); GEOSCoordSeq_setY(cs, 4, 1); geom1_ = GEOSGeom_createPolygon(GEOSGeom_createLinearRing(cs), NULL, 0); char const r1 = GEOSIntersects(geom1_, geom1_); ensure_equals(int(r1), 2); } // This is a test for bug #357 (GEOSIntersects with inf coords) template<> template<> void object::test<5>() { const char *hex = "0103000020E61000000100000005000000737979F3DDCC2CC0F92154F9E7534540000000000000F07F000000000000F07F8F806E993F7E55C0304B29FFEA8554400634E8D1DD424540B5FEE6A37FCD4540737979F3DDCC2CC0F92154F9E7534540"; geom1_ = GEOSGeomFromHEX_buf((unsigned char*)hex, std::strlen(hex)); ensure( 0 != geom1_ ); char const r1 = GEOSIntersects(geom1_, geom1_); ensure_equals(int(r1), 2); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSLineString_PointTest.cpp0000644000175000017500000000500212206417146022603 0ustar frankiefrankie// Test Suite for C-API LineString and Point functions #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capilinestringpoint_data { GEOSGeometry* geom1_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capilinestringpoint_data() : geom1_(0) { initGEOS(notice, notice); } ~test_capilinestringpoint_data() { GEOSGeom_destroy(geom1_); geom1_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capilinestringpoint_group("capi::GEOSLineStringPoint"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 5 5, 10 10)"); GEOSGeometry *geom2; double x, y; ensure( 0 != geom1_ ); char const r1 = GEOSisClosed(geom1_); ensure_equals(r1, 0); geom2 = GEOSGeomGetPointN(geom1_, 0); GEOSGeomGetX(geom2, &x); GEOSGeomGetY(geom2, &y); ensure_equals(x, 0); ensure_equals(y, 0); GEOSGeom_destroy(geom2); geom2 = GEOSGeomGetStartPoint(geom1_); GEOSGeomGetX(geom2, &x); GEOSGeomGetY(geom2, &y); ensure_equals(x, 0); ensure_equals(y, 0); GEOSGeom_destroy(geom2); geom2 = GEOSGeomGetEndPoint(geom1_); GEOSGeomGetX(geom2, &x); GEOSGeomGetY(geom2, &y); ensure_equals(x, 10); ensure_equals(y, 10); GEOSGeom_destroy(geom2); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 5 5, 10 10)"); double length; ensure( 0 != geom1_ ); GEOSGeomGetLength(geom1_, &length); ensure(length != 0.0); } template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 5 5, 10 10)"); int points; ensure( 0 != geom1_ ); points = GEOSGeomGetNumPoints(geom1_); ensure_equals(points, 3); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSNearestPointsTest.cpp0000644000175000017500000000521212206417146022155 0ustar frankiefrankie// $Id: GEOSNearestPointsTest.cpp 2424 2009-04-29 23:52:36Z mloskot $ // // Test Suite for C-API GEOSNearestPoints #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosnearestpoints_data { GEOSGeometry *geom1_; GEOSGeometry *geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosnearestpoints_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); } ~test_capigeosnearestpoints_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosnearestpoints_group("capi::GEOSNearestPoints"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); geom2_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); GEOSCoordSequence *coords_; coords_ = GEOSNearestPoints(geom1_, geom2_); ensure( 0 == coords_ ); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POLYGON((1 1,1 5,5 5,5 1,1 1))"); // geom2_ = GEOSGeomFromWKT("POINT(8 8)"); geom2_ = GEOSGeomFromWKT("POLYGON((8 8, 9 9, 9 10, 8 8))"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); GEOSCoordSequence *coords_; coords_ = GEOSNearestPoints(geom1_, geom2_); ensure( 0 != coords_ ); unsigned int size; GEOSCoordSeq_getSize(coords_, &size); ensure( 2 == size ); double x1, x2, y1, y2; /* Point in geom1_ */ GEOSCoordSeq_getOrdinate(coords_, 0, 0, &x1); GEOSCoordSeq_getOrdinate(coords_, 0, 1, &y1); /* Point in geom2_ */ GEOSCoordSeq_getOrdinate(coords_, 1, 0, &x2); GEOSCoordSeq_getOrdinate(coords_, 1, 1, &y2); ensure( 5 == x1 ); ensure( 5 == y1 ); ensure( 8 == x2 ); ensure( 8 == y2 ); GEOSCoordSeq_destroy(coords_); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSNodeTest.cpp0000644000175000017500000000540312206417146020246 0ustar frankiefrankie// // Test Suite for C-API GEOSNode #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosnode_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTWriter* w_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosnode_data() : geom1_(0), geom2_(0), w_(0) { initGEOS(notice, notice); w_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(w_, 1); } ~test_capigeosnode_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(w_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosnode_group("capi::GEOSNode"); // // Test Cases // /// Self-intersecting line template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 10, 10 0, 0 10)"); geom2_ = GEOSNode(geom1_); ensure(geom2_); GEOSNormalize(geom2_); char* wkt_c = GEOSWKTWriter_write(w_, geom2_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "MULTILINESTRING ((5 5, 10 0, 10 10, 5 5), (0 10, 5 5), (0 0, 5 5))" ); } /// Overlapping lines template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 2 0, 4 0),(5 0, 3 0, 1 0))"); geom2_ = GEOSNode(geom1_); ensure(geom2_); GEOSNormalize(geom2_); char* wkt_c = GEOSWKTWriter_write(w_, geom2_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "MULTILINESTRING ((4 0, 5 0), (3 0, 4 0), (2 0, 3 0), (1 0, 2 0), (0 0, 1 0))" ); } /// Equal lines template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 2 0, 4 0),(0 0, 2 0, 4 0))"); geom2_ = GEOSNode(geom1_); ensure(geom2_); GEOSNormalize(geom2_); char* wkt_c = GEOSWKTWriter_write(w_, geom2_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "MULTILINESTRING ((2 0, 4 0), (0 0, 2 0))" ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSOffsetCurveTest.cpp0000644000175000017500000001622012206417146021613 0ustar frankiefrankie// // Test Suite for C-API GEOSOffsetCurve #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capioffsetcurve_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTWriter* wktw_; char* wkt_; double area_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capioffsetcurve_data() : geom1_(0), geom2_(0), wkt_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); } ~test_capioffsetcurve_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(wktw_); GEOSFree(wkt_); geom1_ = 0; geom2_ = 0; wkt_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capioffsetcurve_group("capi::GEOSOffsetCurve"); // // Test Cases // // Straight, left template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, 2, 0, GEOSBUF_JOIN_ROUND, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (0 2, 10 2)")); } // Straight, right template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, -2, 0, GEOSBUF_JOIN_ROUND, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (10 -2, 0 -2)" )); } // Outside curve template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, -2, 1, GEOSBUF_JOIN_ROUND, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (12 10, 12 0, 10 -2, 0 -2)" )); } // Inside curve template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, 2, 1, GEOSBUF_JOIN_ROUND, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (0 2, 8 2, 8 10)" )); } // See http://trac.osgeo.org/postgis/ticket/413 template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("LINESTRING(33282908 6005055,33282900 6005050,33282892 6005042,33282876 6005007,33282863 6004982,33282866 6004971,33282876 6004975,33282967 6005018,33282999 6005031)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, 44, 1, GEOSBUF_JOIN_MITRE, 1); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING EMPTY" )); } // 0 distance // See http://trac.osgeo.org/postgis/ticket/454 template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, 0, 0, GEOSBUF_JOIN_ROUND, 2); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "LINESTRING (0 0, 10 0)" )); } // left-side and right-side curve // See http://trac.osgeo.org/postgis/ticket/633 template<> template<> void object::test<7>() { std::string wkt0("LINESTRING (" "665.7317504882812500 133.0762634277343700," "1774.4752197265625000 19.9391822814941410," "756.2413940429687500 466.8306579589843700," "626.1337890625000000 1898.0147705078125000," "433.8007202148437500 404.6052856445312500)"); geom1_ = GEOSGeomFromWKT(wkt0.c_str()); ensure( 0 != geom1_ ); double width = 57.164000837203; // left-sided { geom2_ = GEOSOffsetCurve(geom1_, width, 8, GEOSBUF_JOIN_MITRE, 5.57); ensure( 0 != geom2_ ); // likely, 5 >= 5 ensure(GEOSGeomGetNumPoints(geom2_) >= GEOSGeomGetNumPoints(geom1_)); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); GEOSGeom_destroy(geom2_); GEOSFree(wkt_); //ensure_equals(std::string(wkt_), ...); } // right-sided { width = -width; geom2_ = GEOSOffsetCurve(geom1_, width, 8, GEOSBUF_JOIN_MITRE, 5.57); ensure( 0 != geom2_ ); // likely, 5 >= 7 ensure(GEOSGeomGetNumPoints(geom2_) >= GEOSGeomGetNumPoints(geom1_)); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); //ensure_equals(std::string(wkt_), ...); } } // Test duplicated inner vertex in input // See http://trac.osgeo.org/postgis/ticket/602 template<> template<> void object::test<8>() { double width = -1; geom1_ = GEOSGeomFromWKT("LINESTRING(0 0,0 10,0 10,10 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, width, 8, GEOSBUF_JOIN_ROUND, 0); ensure( "Unexpected exception", 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), "LINESTRING (10 9, 1 9, 1 0)"); } // Test duplicated final vertex in input // See http://trac.osgeo.org/postgis/ticket/602 template<> template<> void object::test<9>() { double width = -1; geom1_ = GEOSGeomFromWKT("LINESTRING(0 0,0 10,0 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, width, 8, GEOSBUF_JOIN_ROUND, 0); ensure( "Unexpected exception", 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), "LINESTRING (1 10, 1 0)"); } // Test only duplicated vertex in input // See http://trac.osgeo.org/postgis/ticket/602 template<> template<> void object::test<10>() { double width = -1; geom1_ = GEOSGeomFromWKT("LINESTRING(0 10,0 10,0 10)"); ensure( 0 != geom1_ ); geom2_ = GEOSOffsetCurve(geom1_, width, 8, GEOSBUF_JOIN_ROUND, 0); ensure( "Missing expected exception", 0 == geom2_ ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSOrientationIndex.cpp0000644000175000017500000000654612206417146022015 0ustar frankiefrankie// // Test Suite for C-API GEOSOrientationIndex* #include // geos #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosorientationindex_data { GEOSContextHandle_t handle_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosorientationindex_data() : handle_(initGEOS_r(notice, notice)) { } ~test_capigeosorientationindex_data() { finishGEOS_r(handle_); } }; typedef test_group group; typedef group::object object; group test_capigeosorientationindex_group("capi::GEOSOrientationIndex"); // // Test Cases // // Interior, collinear template<> template<> void object::test<1>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 0, 5, 0); ensure_equals(ret, 0); } // Boundary (last point), collinear template<> template<> void object::test<2>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 0, 10, 0); ensure_equals(ret, 0); } // Boundary (first point), collinear template<> template<> void object::test<3>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 0, 0, 0); ensure_equals(ret, 0); } // Exterior, before first point, collinear template<> template<> void object::test<4>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 0, -5, 0); ensure_equals(ret, 0); } // Exterior, after last point, collinear template<> template<> void object::test<5>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 0, 20, 0); ensure_equals(ret, 0); } // Exterior, in bounding box, turn left template<> template<> void object::test<6>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 5, 6); ensure_equals(ret, 1); } // Exterior, outside bounding box, turn left template<> template<> void object::test<7>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 5, 20); ensure_equals(ret, 1); } // Exterior, in bounding box, turn right template<> template<> void object::test<8>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 5, 3); ensure_equals(ret, -1); } // Exterior, outside bounding box, turn left template<> template<> void object::test<9>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 5, -2); ensure_equals(ret, -1); } // Exterior, outside bounding box, very close to collinear, turn left template<> template<> void object::test<10>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 1000000, 1000001); ensure_equals(ret, 1); } // Exterior, outside bounding box, very close to collinear, turn right template<> template<> void object::test<11>() { int ret = GEOSOrientationIndex_r(handle_, 0, 0, 10, 10, 1000000, 999999); ensure_equals(ret, -1); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSPointOnSurfaceTest.cpp0000644000175000017500000001007012206417146022254 0ustar frankiefrankie// $Id$ // // Test Suite for C-API GEOSPointOnSurface #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capipointonsurface_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSWKTWriter* wktw_; char* wkt_; double area_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capipointonsurface_data() : geom1_(0), geom2_(0), wkt_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); GEOSWKTWriter_setRoundingPrecision(wktw_, 8); } ~test_capipointonsurface_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(wktw_); GEOSFree(wkt_); geom1_ = 0; geom2_ = 0; wkt_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capipointonsurface_group("capi::GEOSPointOnSurface"); // // Test Cases // // Single point template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POINT(10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (10 0)")); } // line template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 5 0, 10 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (5 0)")); } // polygon template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (5 5)")); } // Tiny triangle, see http://trac.osgeo.org/geos/ticket/559 template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT( "POLYGON(( \ 56.528666666700 25.2101666667, \ 56.529000000000 25.2105000000, \ 56.528833333300 25.2103333333, \ 56.528666666700 25.2101666667))"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (56.528917 25.210417)" ) ); } // Empty geometry -- see http://trac.osgeo.org/geos/ticket/560 template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("LINESTRING EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT EMPTY")); } // Single point linestring -- see http://trac.osgeo.org/geos/ticket/609 template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 0 0)"); ensure( 0 != geom1_ ); geom2_ = GEOSPointOnSurface(geom1_); ensure( 0 != geom2_ ); wkt_ = GEOSWKTWriter_write(wktw_, geom2_); ensure_equals(std::string(wkt_), std::string( "POINT (0 0)")); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSPolygonizer_getCutEdgesTest.cpp0000644000175000017500000000510412206417146024163 0ustar frankiefrankie// // Test Suite for C-API GEOSPolygonizeGetCutEdges #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeospolygonizegetcutedges_data { static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeospolygonizegetcutedges_data() { initGEOS(notice, notice); } ~test_capigeospolygonizegetcutedges_data() { finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeospolygonizegetcutedges_group("capi::GEOSPolygonizeGetCutEdges"); // // Test Cases // template<> template<> void object::test<1>() { const int size = 2; GEOSGeometry* geoms[size] = { 0 }; geoms[0] = GEOSGeomFromWKT("LINESTRING(1 3, 3 3, 3 1, 1 1, 1 3)"); geoms[1] = GEOSGeomFromWKT("LINESTRING(1 3, 3 3, 3 1, 1 1, 1 3)"); GEOSGeometry* g = GEOSPolygonizer_getCutEdges(geoms, size); ensure(0 != g); ensure_equals(GEOSGetNumGeometries(g), size); GEOSGeom_destroy(g); GEOSGeom_destroy(geoms[0]); GEOSGeom_destroy(geoms[1]); } template<> template<> void object::test<2>() { const int size = 6; GEOSGeometry* geoms[size] = { 0 }; // Example from JTS Developer's Guide, Chapter 6 - Polygonization geoms[0] = GEOSGeomFromWKT("LINESTRING(0 0, 10 10)"); // isolated edge geoms[1] = GEOSGeomFromWKT("LINESTRING(185 221, 100 100)"); // dangling edge geoms[2] = GEOSGeomFromWKT("LINESTRING(185 221, 88 275, 180 316)"); geoms[3] = GEOSGeomFromWKT("LINESTRING(185 221, 292 281, 180 316)"); geoms[4] = GEOSGeomFromWKT("LINESTRING(189 98, 83 187, 185 221)"); geoms[5] = GEOSGeomFromWKT("LINESTRING(189 98, 325 168, 185 221)"); GEOSGeometry* g = GEOSPolygonizer_getCutEdges(geoms, size); ensure(0 != g); ensure_equals(GEOSGetNumGeometries(g), 0); GEOSGeom_destroy(g); for (int i = 0; i < size; ++i) { if (0 != geoms[i]) GEOSGeom_destroy(geoms[i]); } } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSPreparedGeometryTest.cpp0000644000175000017500000001004612206417146022636 0ustar frankiefrankie// // Test Suite for C-API GEOSPreparedGeometry #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeospreparedgeometry_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; const GEOSPreparedGeometry* prepGeom1_; const GEOSPreparedGeometry* prepGeom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeospreparedgeometry_data() : geom1_(0), geom2_(0), prepGeom1_(0), prepGeom2_(0) { initGEOS(notice, notice); } ~test_capigeospreparedgeometry_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSPreparedGeom_destroy(prepGeom1_); GEOSPreparedGeom_destroy(prepGeom2_); geom1_ = 0; geom2_ = 0; prepGeom1_ = 0; prepGeom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeospreparedgeometry_group("capi::GEOSPreparedGeometry"); // // Test Cases // // Test geometry preparation template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); } // Test PreparedContainsProperly // Taken from regress/regress_ogc_prep.sql of postgis // as of revno 3936 // ref: containsproperly200 (a) template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"); geom2_ = GEOSGeomFromWKT("POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); int ret = GEOSPreparedContainsProperly(prepGeom1_, geom2_); ensure_equals(ret, 1); } // Test PreparedContainsProperly // Taken from regress/regress_ogc_prep.sql of postgis // as of revno 3936 // ref: containsproperly200 (b) template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("POLYGON((2 2, 2 3, 3 3, 3 2, 2 2))"); geom2_ = GEOSGeomFromWKT("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); int ret = GEOSPreparedContainsProperly(prepGeom1_, geom2_); ensure_equals(ret, 0); } // Test PreparedIntersects // Also used as a linestring leakage reported // by http://trac.osgeo.org/geos/ticket/305 // template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 10)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 10, 10 0)"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); int ret = GEOSPreparedIntersects(prepGeom1_, geom2_); ensure_equals(ret, 1); } // Test PreparedCovers template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))"); geom2_ = GEOSGeomFromWKT("POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); int ret = GEOSPreparedCovers(prepGeom1_, geom2_); ensure_equals(ret, 1); } // Test PreparedContains template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("POLYGON((0 0, 0 10, 10 11, 10 0, 0 0))"); geom2_ = GEOSGeomFromWKT("POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))"); prepGeom1_ = GEOSPrepare(geom1_); ensure(0 != prepGeom1_); int ret = GEOSPreparedContains(prepGeom1_, geom2_); ensure_equals(ret, 1); } // TODO: add lots of more tests } // namespace tut geos-3.4.2/tests/unit/capi/GEOSRelateBoundaryNodeRuleTest.cpp0000644000175000017500000001101112206417146023727 0ustar frankiefrankie// // Test Suite for C-API GEOSRelateBoundaryNodeRule #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosrelateboundarynoderule_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; char* pat_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosrelateboundarynoderule_data() : geom1_(0), geom2_(0), pat_(0) { initGEOS(notice, notice); } ~test_capigeosrelateboundarynoderule_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSFree(pat_); finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosrelateboundarynoderule_group("capi::GEOSRelateBoundaryNodeRule"); // // Test Cases // // Closed line touching open line on endpoint with OGC rule template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10, 0 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 0, 0 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_OGC); ensure_equals(std::string(pat_), std::string("F01FFF102")); } // Closed line touching open line on endpoint with MOD2 rule template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10, 0 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 0, 0 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_MOD2); ensure_equals(std::string(pat_), std::string("F01FFF102")); } // Closed line touching open line on endpoint with ENDPOINT rule template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 10 10, 0 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 0, 0 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_ENDPOINT); ensure_equals(std::string(pat_), std::string("FF1F0F102")); } // Noded multiline touching line on node , MOD2 rule template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 10 0),(10 0, 10 10))"); geom2_ = GEOSGeomFromWKT("LINESTRING(10 0, 10 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_MOD2); ensure_equals(std::string(pat_), std::string("F01FF0102")); } // Noded multiline touching line on node , ENDPOINT rule template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 10 0),(10 0, 10 10))"); geom2_ = GEOSGeomFromWKT("LINESTRING(10 0, 10 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_ENDPOINT); ensure_equals(std::string(pat_), std::string("FF1F00102")); } // Noded multiline touching line on node , MULTIVALENT ENDPOINT rule // NOTE: the single line has no boundary ! template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 10 0),(10 0, 10 10))"); geom2_ = GEOSGeomFromWKT("LINESTRING(10 0, 10 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_MULTIVALENT_ENDPOINT); ensure_equals(std::string(pat_), std::string("0F1FFF1F2")); } // Noded multiline touching line on node , MONOVALENT ENDPOINT rule template<> template<> void object::test<7>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 10 0),(10 0, 10 10))"); geom2_ = GEOSGeomFromWKT("LINESTRING(10 0, 10 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, GEOSRELATE_BNR_MONOVALENT_ENDPOINT); ensure_equals(std::string(pat_), std::string("F01FF0102")); } // Invalid/unknown rule template<> template<> void object::test<8>() { geom1_ = GEOSGeomFromWKT("MULTILINESTRING((0 0, 10 0),(10 0, 10 10))"); geom2_ = GEOSGeomFromWKT("LINESTRING(10 0, 10 -10)"); pat_ = GEOSRelateBoundaryNodeRule(geom1_, geom2_, 5); ensure(0 == pat_); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSRelatePatternMatchTest.cpp0000644000175000017500000000373712206417146023120 0ustar frankiefrankie// // Test Suite for C-API GEOSRelatePatternMatch #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeosrelatepatternmatch_data { static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeosrelatepatternmatch_data() { initGEOS(notice, notice); } ~test_capigeosrelatepatternmatch_data() { finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeosrelatepatternmatch_group("capi::GEOSRelatePatternMatch"); // // Test Cases // template<> template<> void object::test<1>() { char ret = GEOSRelatePatternMatch("000000000", "*********"); ensure_equals(ret, char(1)); } template<> template<> void object::test<2>() { char ret = GEOSRelatePatternMatch("000000000", "TTTTTTTTT"); ensure_equals(ret, char(1)); } template<> template<> void object::test<3>() { char ret = GEOSRelatePatternMatch("000000000", "000000000"); ensure_equals(ret, char(1)); } template<> template<> void object::test<4>() { char ret = GEOSRelatePatternMatch("000000000", "FFFFFFFFF"); ensure_equals(ret, char(0)); } template<> template<> void object::test<5>() { const char* mat = "012TF012F"; char ret = GEOSRelatePatternMatch(mat, "TTTTFTTTF"); ensure_equals(ret, char(1)); ret = GEOSRelatePatternMatch(mat, "TT1TFTTTF"); ensure_equals(ret, char(0)); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSSharedPathsTest.cpp0000644000175000017500000000740512206417146021573 0ustar frankiefrankie// // Test Suite for C-API GEOSSharedPaths #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeossharedpaths_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSGeometry* geom3_; GEOSWKTWriter* w_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeossharedpaths_data() : geom1_(0), geom2_(0), geom3_(0), w_(0) { initGEOS(notice, notice); w_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(w_, 1); } ~test_capigeossharedpaths_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSGeom_destroy(geom3_); GEOSWKTWriter_destroy(w_); geom1_ = 0; geom2_ = 0; geom3_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeossharedpaths_group("capi::GEOSSharedPaths"); // // Test Cases // /// Illegal case (point-poly) template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"); geom2_ = GEOSGeomFromWKT("POINT(0.5 0)"); geom3_ = GEOSSharedPaths(geom1_, geom2_); ensure(!geom3_); } /// Line to line sharing template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING (-30 -20, 50 60, 50 70, 50 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING (-29 -20, 50 60, 50 70, 51 0)"); geom3_ = GEOSSharedPaths(geom1_, geom2_); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "GEOMETRYCOLLECTION (MULTILINESTRING ((50 60, 50 70)), MULTILINESTRING EMPTY)" ); } /// http://trac.osgeo.org/postgis/ticket/670#comment:3 template<> template<> void object::test<3>() { // NOTE: in ticket #670 both geoms were in SRID=4326 geom1_ = GEOSGeomFromWKT( "POINT(-11.1111111 40)" ); geom2_ = GEOSGeomFromWKT( "POLYGON((-8.1111111 60,-8.16875525879031 59.4147290339516,-8.33947250246614 58.8519497029047,-8.61670226309236 58.3332893009412,-8.98979075644036 57.8786796564404,-9.44440040094119 57.5055911630924,-9.96306080290473 57.2283614024661,-10.5258401339516 57.0576441587903,-11.1111111 57,-11.6963820660484 57.0576441587903,-12.2591613970953 57.2283614024661,-12.7778217990588 57.5055911630924,-13.2324314435596 57.8786796564404,-13.6055199369076 58.3332893009412,-13.8827496975339 58.8519497029047,-14.0534669412097 59.4147290339516,-14.1111111 60,-14.0534669412097 60.5852709660484,-13.8827496975339 61.1480502970953,-13.6055199369076 61.6667106990588,-13.2324314435597 62.1213203435596,-12.7778217990588 62.4944088369076,-12.2591613970953 62.7716385975339,-11.6963820660484 62.9423558412097,-11.1111111 63,-10.5258401339516 62.9423558412097,-9.96306080290474 62.7716385975339,-9.4444004009412 62.4944088369076,-8.98979075644036 62.1213203435596,-8.61670226309237 61.6667106990588,-8.33947250246614 61.1480502970953,-8.16875525879031 60.5852709660484,-8.1111111 60))" ); ensure(0 != geom1_); ensure(0 != geom2_); geom3_ = GEOSSharedPaths(geom1_, geom2_); ensure(!geom3_); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSSimplifyTest.cpp0000644000175000017500000000274112206417146021157 0ustar frankiefrankie// // Test Suite for C-API GEOSSimplify #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeossimplify_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeossimplify_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); } ~test_capigeossimplify_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeossimplify_group("capi::GEOSSimplify"); // // Test Cases // // Test GEOSSimplify template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure ( 0 != GEOSisEmpty(geom1_) ); geom2_ = GEOSSimplify(geom1_, 43.2); ensure ( 0 != GEOSisEmpty(geom2_) ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSSnapTest.cpp0000644000175000017500000001460712206417146020270 0ustar frankiefrankie// // Test Suite for C-API GEOSSimplify #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeossnap_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; GEOSGeometry* geom3_; GEOSWKTWriter* w_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeossnap_data() : geom1_(0), geom2_(0), geom3_(0), w_(0) { initGEOS(notice, notice); w_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(w_, 1); GEOSWKTWriter_setRoundingPrecision(w_, 8); } ~test_capigeossnap_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSGeom_destroy(geom3_); GEOSWKTWriter_destroy(w_); geom1_ = 0; geom2_ = 0; geom3_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeossnap_group("capi::GEOSSnap"); // // Test Cases // /// Polygon snapped to point template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"); geom2_ = GEOSGeomFromWKT("POINT(0.5 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 1); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "POLYGON ((0.5 0, 10 0, 10 10, 0 10, 0.5 0))"); } /// Line snapped to line (vertex) template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("LINESTRING (-30 -20, 50 60, 50 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING (-29 -20, 40 60, 51 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (-29 -20, 50 60, 51 0)"); } /// Line snapped to line (segment) template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("LINESTRING (-20 -20, 50 50, 100 100)"); geom2_ = GEOSGeomFromWKT("LINESTRING (-10 -9, 40 20, 80 79)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (-20 -20, -10 -9, 50 50, 80 79, 100 100)" ); } /// Another single segment template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 0, 9 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (0 0, 9 0)"); } /// See http://trac.osgeo.org/geos/ticket/501 template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0)"); geom2_ = GEOSGeomFromWKT("LINESTRING(0 0, 9 0, 10 0, 11 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); //ensure_equals(out, "LINESTRING (0 0, 9 0, 10 0)"); ensure_equals(out, "LINESTRING (0 0, 9 0, 10 0, 11 0)"); } /// Test snapping of equidistant segments to outlyers snap point template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 3,4 1,0 1)"); geom2_ = GEOSGeomFromWKT("MULTIPOINT(5 0,4 1)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (0 3, 4 1, 5 0, 0 1)"); //ensure_equals(out, "LINESTRING (0 3, 4 1, 0 1)"); } /// Test snapping of equidistant segments to outlyers snap point /// Same as the above but with the snap points order reversed template<> template<> void object::test<7>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 3,4 1,0 1)"); geom2_ = GEOSGeomFromWKT("MULTIPOINT(4 1,5 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 2); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (0 3, 4 1, 5 0, 0 1)"); //ensure_equals(out, "LINESTRING (0 3, 4 1, 0 1)"); } /// Test snapping of closed ring to outlyers snap point template<> template<> void object::test<8>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 0,10 0,10 10,0 10,0 0)"); geom2_ = GEOSGeomFromWKT("MULTIPOINT(0 0,-1 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 3); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (-1 0, 0 0, 10 0, 10 10, 0 10, -1 0)"); } template<> template<> void object::test<9>() { geom1_ = GEOSGeomFromWKT("LINESTRING(0 2,5 2,9 2,5 0)"); geom2_ = GEOSGeomFromWKT("POINT(5 0)"); geom3_ = GEOSSnap(geom1_, geom2_, 3); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (0 2, 5 2, 9 2, 5 0)"); } // See http://trac.osgeo.org/geos/ticket/649 template<> template<> void object::test<10>() { geom1_ = GEOSGeomFromWKT("LINESTRING(-71.1317 42.2511,-71.1317 42.2509)"); geom2_ = GEOSGeomFromWKT("MULTIPOINT(-71.1261 42.2703,-71.1257 42.2703,-71.1261 42.2702)"); geom3_ = GEOSSnap(geom1_, geom2_, 0.5); char* wkt_c = GEOSWKTWriter_write(w_, geom3_); std::string out(wkt_c); free(wkt_c); ensure_equals(out, "LINESTRING (-71.1257 42.2703, -71.1261 42.2703, -71.1261 42.2702, -71.1317 42.2509)"); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSUnaryUnionTest.cpp0000644000175000017500000001355612206417146021500 0ustar frankiefrankie// // Test Suite for C-API GEOSUnaryUnion #include // geos #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capiunaryunion_data { GEOSWKTWriter* wktw_; GEOSGeometry* geom1_; GEOSGeometry* geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capiunaryunion_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); GEOSWKTWriter_setOutputDimension(wktw_, 3); } std::string toWKT(GEOSGeometry* g) { char* wkt = GEOSWKTWriter_write(wktw_, g); std::string ret (wkt); GEOSFree(wkt); return ret; } ~test_capiunaryunion_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); GEOSWKTWriter_destroy(wktw_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capiunaryunion_group("capi::GEOSUnaryUnion"); // // Test Cases // // Self-union an empty point template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POINT EMPTY"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string("GEOMETRYCOLLECTION EMPTY")); } // Self-union a 2d point template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POINT (6 3)"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string("POINT (6 3)")); } // Self-union a 3d point template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("POINT (4 5 6)"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string("POINT Z (4 5 6)")); } // Self-union a multipoint with duplicated points template<> template<> void object::test<4>() { geom1_ = GEOSGeomFromWKT("MULTIPOINT (4 5, 6 7, 4 5, 6 5, 6 7)"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string("MULTIPOINT (4 5, 6 5, 6 7)")); } // Self-union a collection of puntal and lineal geometries template<> template<> void object::test<5>() { geom1_ = GEOSGeomFromWKT("GEOMETRYCOLLECTION (POINT(4 5), MULTIPOINT(6 7, 6 5, 6 7), LINESTRING(0 5, 10 5), LINESTRING(4 -10, 4 10))"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string("GEOMETRYCOLLECTION (POINT (6 7), LINESTRING (4 -10, 4 5), LINESTRING (4 5, 4 10), LINESTRING (0 5, 4 5), LINESTRING (4 5, 10 5))")); } // Self-union a collection of puntal and polygonal geometries template<> template<> void object::test<6>() { geom1_ = GEOSGeomFromWKT("GEOMETRYCOLLECTION (POINT(4 5), MULTIPOINT(6 7, 6 5, 6 7), POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 6, 7 6, 7 8, 5 8, 5 6)))"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string( "GEOMETRYCOLLECTION (POINT (6 7), POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0), (5 6, 7 6, 7 8, 5 8, 5 6)))" )); } // Self-union a collection of lineal and polygonal geometries template<> template<> void object::test<7>() { geom1_ = GEOSGeomFromWKT("GEOMETRYCOLLECTION (MULTILINESTRING((5 7, 12 7), (4 5, 6 5), (5.5 7.5, 6.5 7.5)), POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 6, 7 6, 7 8, 5 8, 5 6)))"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string( "GEOMETRYCOLLECTION (LINESTRING (5 7, 7 7), LINESTRING (10 7, 12 7), LINESTRING (5.5 7.5, 6.5 7.5), POLYGON ((10 7, 10 0, 0 0, 0 10, 10 10, 10 7), (5 6, 7 6, 7 7, 7 8, 5 8, 5 7, 5 6)))" )); } // Self-union a collection of puntal, lineal and polygonal geometries template<> template<> void object::test<8>() { geom1_ = GEOSGeomFromWKT("GEOMETRYCOLLECTION (MULTILINESTRING((5 7, 12 7), (4 5, 6 5), (5.5 7.5, 6.5 7.5)), POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 6, 7 6, 7 8, 5 8, 5 6)), MULTIPOINT(6 6.5, 6 1, 12 2, 6 1))"); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 != geom2_ ); ensure_equals(toWKT(geom2_), std::string( "GEOMETRYCOLLECTION (POINT (6 6.5), POINT (12 2), LINESTRING (5 7, 7 7), LINESTRING (10 7, 12 7), LINESTRING (5.5 7.5, 6.5 7.5), POLYGON ((10 7, 10 0, 0 0, 0 10, 10 10, 10 7), (5 6, 7 6, 7 7, 7 8, 5 8, 5 7, 5 6)))" )); } // Self-union a geometry with NaN coordinates // See http://trac.osgeo.org/geos/ticket/530 template<> template<> void object::test<9>() { const char* hexwkb = "010200000002000000000000000000F8FF000000000000F8FF0000000000000000000000000000F03F"; geom1_ = GEOSGeomFromHEX_buf((const unsigned char*)hexwkb, std::strlen(hexwkb)); ensure( 0 != geom1_ ); geom2_ = GEOSUnaryUnion(geom1_); ensure( 0 == geom2_ ); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSWithinTest.cpp0000644000175000017500000000470612206417146020630 0ustar frankiefrankie// // Test Suite for C-API GEOSWithin #include // geos #include // std #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capigeoswithin_data { GEOSGeometry* geom1_; GEOSGeometry* geom2_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capigeoswithin_data() : geom1_(0), geom2_(0) { initGEOS(notice, notice); } ~test_capigeoswithin_data() { GEOSGeom_destroy(geom1_); GEOSGeom_destroy(geom2_); geom1_ = 0; geom2_ = 0; finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capigeoswithin_group("capi::GEOSWithin"); // // Test Cases // template<> template<> void object::test<1>() { geom1_ = GEOSGeomFromWKT("POLYGON EMPTY"); geom2_ = GEOSGeomFromWKT("POLYGON EMPTY"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSWithin(geom1_, geom2_); ensure_equals(r1, 0); char const r2 = GEOSWithin(geom2_, geom1_); ensure_equals(r2, 0); } template<> template<> void object::test<2>() { geom1_ = GEOSGeomFromWKT("POLYGON((1 1,1 5,5 5,5 1,1 1))"); geom2_ = GEOSGeomFromWKT("POINT(2 2)"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSWithin(geom1_, geom2_); ensure_equals(int(r1), 0); char const r2 = GEOSWithin(geom2_, geom1_); ensure_equals(int(r2), 1); } template<> template<> void object::test<3>() { geom1_ = GEOSGeomFromWKT("MULTIPOLYGON(((0 0,0 10,10 10,10 0,0 0)))"); geom2_ = GEOSGeomFromWKT("POLYGON((1 1,1 2,2 2,2 1,1 1))"); ensure( 0 != geom1_ ); ensure( 0 != geom2_ ); char const r1 = GEOSWithin(geom1_, geom2_); ensure_equals(int(r1), 0); char const r2 = GEOSWithin(geom2_, geom1_); ensure_equals(int(r2), 1); } } // namespace tut geos-3.4.2/tests/unit/capi/GEOSisValidDetailTest.cpp0000644000175000017500000001067312206417146022104 0ustar frankiefrankie// // Test Suite for C-API GEOSisValidDetail #include // geos #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_capiisvaliddetail_data { GEOSWKTWriter* wktw_; GEOSGeometry* geom_; GEOSGeometry* loc_; char* reason_; static void notice(const char *fmt, ...) { std::fprintf( stdout, "NOTICE: "); va_list ap; va_start(ap, fmt); std::vfprintf(stdout, fmt, ap); va_end(ap); std::fprintf(stdout, "\n"); } test_capiisvaliddetail_data() : geom_(0), loc_(0), reason_(0) { initGEOS(notice, notice); wktw_ = GEOSWKTWriter_create(); GEOSWKTWriter_setTrim(wktw_, 1); GEOSWKTWriter_setOutputDimension(wktw_, 3); } std::string toWKT(GEOSGeometry* g) { char* wkt = GEOSWKTWriter_write(wktw_, g); std::string ret (wkt); GEOSFree(wkt); return ret; } void strToUpper(std::string &str) { using std::toupper; using std::string; for(string::size_type i = 0, len = str.size(); i < len; ++i) str[i] = static_cast(toupper(str[i])); } ~test_capiisvaliddetail_data() { GEOSGeom_destroy(geom_); GEOSGeom_destroy(loc_); GEOSFree(reason_); GEOSWKTWriter_destroy(wktw_); finishGEOS(); } }; typedef test_group group; typedef group::object object; group test_capiisvaliddetail_group("capi::GEOSisValidDetail"); // // Test Cases // // Flag values template<> template<> void object::test<1>() { ensure_equals(GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE, 1); } // Valid case template<> template<> void object::test<2>() { // Looks invalid (self-intersecting) but isn't // (is non-simple though) geom_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, 5 -5, 5 5)"); int r = GEOSisValidDetail(geom_, 0, &reason_, &loc_); ensure_equals(r, 1); // valid ensure_equals(reason_, (void*)0); ensure_equals(loc_, (void*)0); } // Invalid coordinate template<> template<> void object::test<3>() { geom_ = GEOSGeomFromWKT("LINESTRING(0 0, 10 0, NaN -5)"); ensure(0 != geom_); int r = GEOSisValidDetail(geom_, 0, &reason_, &loc_); std::string wkt = toWKT(loc_); strToUpper(wkt); ensure_equals(r, 0); // invalid ensure_equals(std::string(reason_), std::string("Invalid Coordinate")); std::string exp1 = "POINT (NAN -5)"; std::string exp2 = "POINT (-1#IND -5)"; // http://trac.osgeo.org/geos/ticket/656 std::string exp3 = "POINT (1.#QNAN -5)"; std::stringstream ss; ss << "Expected '" << exp1 << "' or '" << exp2 << "' or '" << exp3 << "', Obtained '" << wkt; ensure(ss.str(), wkt == exp1 || wkt == exp2 || wkt == exp3); } // Self intersecting ring forming hole template<> template<> void object::test<4>() { geom_ = GEOSGeomFromWKT("POLYGON((0 1, -10 10, 10 10, 0 1, 4 6, -4 6, 0 1))"); int r = GEOSisValidDetail(geom_, 0, &reason_, &loc_); ensure_equals(r, 0); // invalid ensure_equals(std::string(reason_), std::string("Ring Self-intersection")); ensure_equals(toWKT(loc_), "POINT (0 1)"); } // Self intersecting ring forming hole (with ESRI flag) template<> template<> void object::test<5>() { geom_ = GEOSGeomFromWKT("POLYGON((0 1, -10 10, 10 10, 0 1, 4 6, -4 6, 0 1))"); int flags = GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE; int r = GEOSisValidDetail(geom_, flags, &reason_, &loc_); ensure_equals(r, 1); // valid ensure_equals(reason_, (void*)0); ensure_equals(loc_, (void*)0); } // Check it is possible to not request details template<> template<> void object::test<6>() { geom_ = GEOSGeomFromWKT("POLYGON((0 1, -10 10, 10 10, 0 1, 4 6, -4 6, 0 1))"); int r = GEOSisValidDetail(geom_, 0, 0, 0); ensure_equals(r, 0); // invalid } } // namespace tut geos-3.4.2/tests/unit/geom/0000755000175000017500000000000012206417243015346 5ustar frankiefrankiegeos-3.4.2/tests/unit/geom/CoordinateArraySequenceFactoryTest.cpp0000644000175000017500000000736112206417146025032 0ustar frankiefrankie// // Test Suite for geos::geom::CoordinateArraySequence class. #include // geos #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used by tests struct test_coordinatearraysequencefactory_data { typedef geos::geom::CoordinateSequence* CoordinateSequencePtr; typedef geos::geom::CoordinateSequenceFactory const* CoordinateFactoryCPtr; typedef geos::geom::CoordinateArraySequenceFactory const* CoordinateArrayFactoryCPtr; test_coordinatearraysequencefactory_data() {} }; typedef test_group group; typedef group::object object; group test_coordinatearraysequencefactory_group("geos::geom::CoordinateArraySequenceFactory"); // // Test Cases // // Test of instance() template<> template<> void object::test<1>() { try { CoordinateFactoryCPtr base = geos::geom::CoordinateArraySequenceFactory::instance(); ensure( 0 != base ); ensure(typeid(base).name(), typeid(base) == typeid(CoordinateFactoryCPtr) ); ensure(typeid(base).name(), typeid(base) != typeid(CoordinateArrayFactoryCPtr) ); CoordinateArrayFactoryCPtr derived; derived = dynamic_cast(base); ensure( 0 != derived ); ensure(typeid(derived).name(), typeid(derived) == typeid(CoordinateArrayFactoryCPtr) ); } catch (std::exception& e) { fail( e.what() ); } } // Test of first version of create() with empty sequence template<> template<> void object::test<2>() { using geos::geom::Coordinate; try { CoordinateFactoryCPtr factory = geos::geom::CoordinateArraySequenceFactory::instance(); ensure( 0 != factory ); std::vector* col = new std::vector(); ensure( 0 != col); const size_t size0 = 0; CoordinateSequencePtr sequence = factory->create(col); ensure( 0 != sequence); ensure( sequence->isEmpty() ); ensure_equals( sequence->size(), size0 ); // FREE MEMORY delete sequence; } catch (std::exception& e) { fail( e.what() ); } } // Test of first version of create() with non-empty sequence template<> template<> void object::test<3>() { using geos::geom::Coordinate; try { CoordinateFactoryCPtr factory = geos::geom::CoordinateArraySequenceFactory::instance(); ensure( 0 != factory ); std::vector* col = new std::vector(); ensure( 0 != col); col->push_back(Coordinate(1, 2, 3)); col->push_back(Coordinate(5, 10, 15)); const size_t size2 = 2; CoordinateSequencePtr sequence = factory->create(col); ensure( 0 != sequence); ensure( !sequence->isEmpty() ); ensure_equals( sequence->size(), size2 ); ensure( sequence->getAt(0) != sequence->getAt(1) ); // FREE MEMORY delete sequence; } catch (std::exception& e) { fail( e.what() ); } } // Test of second version of create() template<> template<> void object::test<4>() { using geos::geom::Coordinate; try { CoordinateFactoryCPtr factory = geos::geom::CoordinateArraySequenceFactory::instance(); ensure( 0 != factory ); const size_t size1000 = 1000; CoordinateSequencePtr sequence = factory->create(size1000, 3); ensure( 0 != sequence); ensure( !sequence->isEmpty() ); ensure_equals( sequence->size(), size1000 ); ensure( sequence->hasRepeatedPoints() ); ensure_equals( sequence->getAt(0), sequence->getAt(size1000 - 1) ); ensure_equals( sequence->getAt(0), sequence->getAt(size1000 / 2) ); // FREE MEMORY delete sequence; } catch (std::exception& e) { fail( e.what() ); } } } // namespace tut geos-3.4.2/tests/unit/geom/CoordinateArraySequenceTest.cpp0000644000175000017500000004137212206417146023502 0ustar frankiefrankie// // Test Suite for geos::geom::CoordinateArraySequence class. #include // geos #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_coordinatearraysequence_data { test_coordinatearraysequence_data() {} struct Filter : public geos::geom::CoordinateFilter { bool is3d; Filter() : is3d(false) {} void filter_rw(geos::geom::Coordinate* c) const { if ( is3d ) { if ( ISNAN(c->z) ) c->z = 0.0; } else c->z = DoubleNotANumber; } }; }; typedef test_group group; typedef group::object object; group test_coordinatearraysequence_group("geos::geom::CoordinateArraySequence"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { const size_t size = 0; geos::geom::CoordinateArraySequence sequence; ensure( sequence.isEmpty() ); ensure_equals( sequence.getSize(), size ); ensure_equals( sequence.size(), size ); ensure_equals( sequence.toString(), std::string("()") ); const size_t dim = 3; ensure_equals( sequence.getDimension() , dim); } // Test of overriden constructor template<> template<> void object::test<2>() { const size_t size = 3; geos::geom::CoordinateArraySequence sequence(size); ensure( !sequence.isEmpty() ); ensure_equals( sequence.getSize(), size ); ensure_equals( sequence.size(), size ); ensure( sequence.toString() != std::string("()") ); ensure("Every coodinate in the default sequence should be same.", sequence.hasRepeatedPoints() ); const size_t dim = 2; // default/empty coordinates now 2D. ensure_equals( sequence.getDimension(), dim ); } // Test of overriden constructor taking vector of coordiantes template<> template<> void object::test<3>() { using geos::geom::Coordinate; const size_t size = 3; const double a = 0; const double b = 5.0; const double c = 10.0; std::vector* col = new std::vector(); col->push_back(Coordinate(a, a, a)); col->push_back(Coordinate(b, b, b)); col->push_back(Coordinate(c, c, c)); // sequence takes ownership of the col geos::geom::CoordinateArraySequence sequence(col); ensure( !sequence.isEmpty() ); ensure_equals( sequence.getSize(), size ); ensure_equals( sequence.size(), size ); ensure( sequence.toString() != std::string("()") ); ensure("Coordinate sequence should contain unique coordinates.", !sequence.hasRepeatedPoints() ); } // Test of copy constructor template<> template<> void object::test<4>() { using geos::geom::Coordinate; // Create empty sequence const size_t sizeEmpty = 0; geos::geom::CoordinateArraySequence empty_original; ensure( empty_original.isEmpty() ); ensure_equals( empty_original.size(), sizeEmpty ); ensure_equals( empty_original.toString(), std::string("()") ); // Create copy of empty sequence geos::geom::CoordinateArraySequence empty_copy(empty_original); ensure( empty_copy.isEmpty() ); ensure_equals( empty_copy.size(), sizeEmpty ); ensure_equals( empty_copy.toString(), std::string("()") ); // Create non-empty sequence const size_t sizeNonEmpty = 2; std::vector* col = new std::vector(); col->push_back(Coordinate(1, 2, 3)); col->push_back(Coordinate(5, 10, 15)); geos::geom::CoordinateArraySequence non_empty_original(col); ensure( !non_empty_original.isEmpty() ); ensure_equals( non_empty_original.size(), sizeNonEmpty ); // Create copy of non-empty sequence geos::geom::CoordinateArraySequence non_empty_copy(non_empty_original); ensure( !non_empty_copy.isEmpty() ); ensure_equals( non_empty_copy.size(), sizeNonEmpty ); // Compare non-empty original and copy using equality operators ensure_equals( non_empty_original.getAt(0), non_empty_copy.getAt(0) ); ensure_equals( non_empty_original.getAt(1), non_empty_copy.getAt(1) ); ensure( non_empty_original.getAt(0) != non_empty_copy.getAt(1) ); } // Test of getX() and getY() template<> template<> void object::test<5>() { using geos::geom::Coordinate; // Create non-empty sequence std::vector* col = new std::vector(); col->push_back(Coordinate(1, 2)); col->push_back(Coordinate(5, 10)); const size_t size = 2; geos::geom::CoordinateArraySequence sequence(col); ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), size ); ensure_equals( sequence.getX(0), 1 ); ensure_equals( sequence.getY(0), 2 ); ensure_equals( sequence.getX(1), 5 ); ensure_equals( sequence.getY(1), 10 ); } // Test of getAt() template<> template<> void object::test<6>() { using geos::geom::Coordinate; // Create non-empty sequence std::vector* col = new std::vector(); col->push_back(Coordinate(1, 2, 3)); col->push_back(Coordinate(5, 10, 15)); const size_t size = 2; geos::geom::CoordinateArraySequence sequence(col); ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), size ); ensure( sequence.getAt(0) != sequence.getAt(1) ); // First version of getAt() ensure_equals( sequence.getAt(0).x, 1 ); ensure_equals( sequence.getAt(0).y, 2 ); ensure_equals( sequence.getAt(0).z, 3 ); ensure_equals( sequence.getAt(1).x, 5 ); ensure_equals( sequence.getAt(1).y, 10 ); ensure_equals( sequence.getAt(1).z, 15 ); // Second version of getAt() Coordinate buf; sequence.getAt(0, buf); ensure_equals( buf.x, 1 ); ensure_equals( buf.y, 2 ); ensure_equals( buf.z, 3 ); sequence.getAt(1, buf); ensure_equals( buf.x, 5 ); ensure_equals( buf.y, 10 ); ensure_equals( buf.z, 15 ); } // Test of add() template<> template<> void object::test<7>() { using geos::geom::Coordinate; // Create empty sequence to fill with coordinates const size_t size = 0; geos::geom::CoordinateArraySequence sequence; ensure( sequence.isEmpty() ); ensure_equals( sequence.size(), size ); // Add coordinates Coordinate tmp(1, 2, 3); sequence.add(tmp); // insert copy of tmp const size_t sizeOne = 1; ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), sizeOne ); tmp.x = 5; tmp.y = 10; tmp.z = 15; sequence.add(tmp); // insert copy of tmp const size_t sizeTwo = 2; ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), sizeTwo ); ensure( !sequence.hasRepeatedPoints() ); // Check elements of sequence ensure( sequence.getAt(0) != sequence.getAt(1) ); ensure_equals( sequence.getAt(0).x, 1 ); ensure_equals( sequence.getAt(0).y, 2 ); ensure_equals( sequence.getAt(0).z, 3 ); ensure_equals( sequence.getAt(1).x, 5 ); ensure_equals( sequence.getAt(1).y, 10 ); ensure_equals( sequence.getAt(1).z, 15 ); } // Test of setAt() template<> template<> void object::test<8>() { using geos::geom::Coordinate; // Create sequence with 2 default coordinates const size_t size = 2; geos::geom::CoordinateArraySequence sequence(size); ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), size ); ensure( sequence.hasRepeatedPoints() ); // Set new values to first coordinate Coordinate first(1, 2, 3); sequence.setAt(first, 0); ensure_equals( sequence.size(), size ); ensure_equals( sequence.getAt(0).x, 1 ); ensure_equals( sequence.getAt(0).y, 2 ); ensure_equals( sequence.getAt(0).z, 3 ); // Set new values to second coordinate Coordinate second(5, 10, 15); sequence.setAt(second, 1); ensure_equals( sequence.size(), size ); ensure_equals( sequence.getAt(1).x, 5 ); ensure_equals( sequence.getAt(1).y, 10 ); ensure_equals( sequence.getAt(1).z, 15 ); ensure( !sequence.hasRepeatedPoints() ); } // Test of deleteAt() template<> template<> void object::test<9>() { using geos::geom::Coordinate; // Create sequence with only 1 default coordinate const size_t sizeOne = 1; geos::geom::CoordinateArraySequence sequence(1); ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), sizeOne ); // Delete the only coordinate in the sequence sequence.deleteAt(0); const size_t sizeZero = 0; ensure( sequence.isEmpty() ); ensure_equals( sequence.size(), sizeZero ); // Add new 3 coordinates Coordinate first(1, 2, 3); sequence.add(first); Coordinate second(5, 10, 15); sequence.add(second); Coordinate third(9, 18, 27); sequence.add(third); const size_t sizeThree = 3; ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), sizeThree ); // Delete coordinate in the middle of sequence - the second one. sequence.deleteAt(1); // (5, 10, 15) const size_t sizeTwo = 2; ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), sizeTwo ); ensure( sequence.getAt(0) != sequence.getAt(1) ); ensure_equals( sequence.getAt(0), first ); ensure( "deleteAt() did not remove coordinate.", sequence.getAt(1) != second ); ensure_equals( sequence.getAt(1), third ); } // Test of setPoints() template<> template<> void object::test<10>() { using geos::geom::Coordinate; // Create empty sequence const size_t size = 0; geos::geom::CoordinateArraySequence sequence; ensure( sequence.isEmpty() ); ensure_equals( sequence.size(), size ); // Create collection of points const std::vector::size_type sizeCol = 3; std::vector col; col.push_back(Coordinate(1, 2, 3)); col.push_back(Coordinate(5, 10, 15)); col.push_back(Coordinate(9, 18, 27)); ensure( "std::vector bug assumed!", !col.empty() ); ensure_equals( "std::vector bug assumed!", col.size(), sizeCol ); // Use setPoints() sequence.setPoints(col); ensure( !sequence.isEmpty() ); ensure_equals( sequence.size(), col.size() ); ensure( !sequence.hasRepeatedPoints() ); // Check inserted points ensure_equals( sequence.getAt(0).x, 1 ); ensure_equals( sequence.getAt(0).y, 2 ); ensure_equals( sequence.getAt(0).z, 3 ); ensure_equals( sequence.getAt(1).x, 5 ); ensure_equals( sequence.getAt(1).y, 10 ); ensure_equals( sequence.getAt(1).z, 15 ); ensure_equals( sequence.getAt(2).x, 9 ); ensure_equals( sequence.getAt(2).y, 18 ); ensure_equals( sequence.getAt(2).z, 27 ); } // Test of removeRepeatedPoints template<> template<> void object::test<11>() { using geos::geom::Coordinate; geos::geom::CoordinateArraySequence sequence; // Add new 3 equal coordinates Coordinate c(1, 2, 3); sequence.add(c); sequence.add(c); sequence.add(c); Coordinate c2(5, 10, 15); sequence.add(c2); sequence.add(c2); sequence.add(c); ensure_equals( sequence.size(), 6u ); sequence.removeRepeatedPoints(); ensure_equals( sequence.size(), 3u ); } // Test of equality and inequality operators template<> template<> void object::test<12>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; using geos::geom::CoordinateSequence; Coordinate c1(1, 2, 3); Coordinate c2(5, 10, 15); Coordinate c3(6, 9, 10); CoordinateArraySequence sequence1; CoordinateArraySequence sequence2; sequence1.add(c1); sequence1.add(c2); sequence1.add(c3); sequence2.add(c1); sequence2.add(c2); sequence2.add(c3); ensure_equals( sequence1, sequence2 ); ensure_equals( sequence2, sequence1 ); // Add a new coordinate to sequence2 sequence2.add(c3); ensure( sequence1 != sequence2 ); ensure( sequence2 != sequence1 ); // Add a new coordinate to sequence1 sequence1.add(c3); ensure_equals( sequence1, sequence2 ); ensure_equals( sequence2, sequence1 ); // Add a new coordinate to sequence1 sequence1.add(c3); sequence2.add(c2); ensure( sequence1 != sequence2 ); ensure( sequence2 != sequence1 ); } // Test setOrdinate template<> template<> void object::test<13>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; using geos::geom::CoordinateSequence; Coordinate c1(1, 2, 3); CoordinateArraySequence sequence1; sequence1.add(c1); ensure_equals( sequence1[0], c1 ); sequence1.setOrdinate(0, CoordinateSequence::X, 4); ensure_equals( sequence1[0].x, 4 ); sequence1.setOrdinate(0, CoordinateSequence::Y, 5); ensure_equals( sequence1[0].y, 5 ); sequence1.setOrdinate(0, CoordinateSequence::Z, 6); ensure_equals( sequence1[0].z, 6 ); } // Test setOrdinate setting ordinates in arbitrary order template<> template<> void object::test<14>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; using geos::geom::CoordinateSequence; Coordinate c1(1, 2, 3); CoordinateArraySequence sequence1; sequence1.add(c1); ensure_equals( sequence1[0], c1 ); // Order: Y, X, Z sequence1.setOrdinate(0, CoordinateSequence::Y, 5); ensure_equals( sequence1[0].y, 5 ); sequence1.setOrdinate(0, CoordinateSequence::X, 4); ensure_equals( sequence1[0].x, 4 ); sequence1.setOrdinate(0, CoordinateSequence::Z, 6); ensure_equals( sequence1[0].z, 6 ); } // Test setOrdinate setting ordinates in arbitrary order // against a non-initialized CoordinateSequence template<> template<> void object::test<15>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; using geos::geom::CoordinateSequence; typedef geos::geom::CoordinateSequenceFactory const* CoordinateFactoryCPtr; CoordinateFactoryCPtr factory = geos::geom::CoordinateArraySequenceFactory::instance(); std::auto_ptr sequence1ptr(factory->create(4, 2)); CoordinateSequence& seq = *sequence1ptr; // Index: 0 - Order: Y, X, Z seq.setOrdinate(0, CoordinateSequence::Y, 5); ensure_equals( seq[0].y, 5 ); seq.setOrdinate(0, CoordinateSequence::Z, 6); ensure_equals( seq[0].z, 6 ); seq.setOrdinate(0, CoordinateSequence::X, 4); ensure_equals( seq[0].x, 4 ); // Index: 1 - Order: Z, X, Y seq.setOrdinate(1, CoordinateSequence::Z, 9); ensure_equals( seq[1].z, 9 ); seq.setOrdinate(1, CoordinateSequence::X, 8); ensure_equals( seq[1].x, 8 ); seq.setOrdinate(1, CoordinateSequence::Y, 7); ensure_equals( seq[1].y, 7 ); // Index: 2 - Order: X, Y, Z seq.setOrdinate(2, CoordinateSequence::X, 34); ensure_equals( seq[2].x, 34 ); seq.setOrdinate(2, CoordinateSequence::Y, -45); ensure_equals( seq[2].y, -45 ); seq.setOrdinate(2, CoordinateSequence::Z, 152); ensure_equals( seq[2].z, 152 ); // Index: 3 - Order: Y, Z, X seq.setOrdinate(3, CoordinateSequence::Y, 63); ensure_equals( seq[3].y, 63 ); seq.setOrdinate(3, CoordinateSequence::Z, 13); ensure_equals( seq[3].z, 13 ); seq.setOrdinate(3, CoordinateSequence::X, -65); ensure_equals( seq[3].x, -65 ); } // Test of add() in the middle template<> template<> void object::test<16>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; // Create empty sequence to fill with coordinates CoordinateArraySequence sequence; sequence.add(Coordinate(0,0)); sequence.add(Coordinate(1,1)); sequence.add(Coordinate(2,2)); ensure_equals( sequence.size(), std::size_t(3)); sequence.add(0, Coordinate(4,4), false); // don't alow repeated ensure_equals( sequence.size(), std::size_t(4) ); ensure_equals( sequence.getAt(0).x, std::size_t(4) ); // do not allow repeated sequence.add(0, Coordinate(4,4), false); ensure_equals( sequence.size(), std::size_t(4) ); // allow repeated sequence.add(0, Coordinate(4,4), true); ensure_equals( sequence.size(), std::size_t(5) ); // Now looks like this: 4,4,0,1,2 // we'll add at position 4 a 2 (equals to the one after) sequence.add(4, Coordinate(2,2), false); ensure_equals( sequence.size(), std::size_t(5) ); // we'll add at position 4 a 1 (equals to the one before) sequence.add(4, Coordinate(1,1), false); ensure_equals( sequence.size(), std::size_t(5) ); // we'll add at position 4 a 1 (equals to the one before) // but allowing duplicates sequence.add(4, Coordinate(1,1), true); ensure_equals( sequence.size(), std::size_t(6) ); ensure_equals( sequence.getAt(3).x, 1 ); ensure_equals( sequence.getAt(4).x, 1 ); ensure_equals( sequence.getAt(5).x, 2 ); } // Test getDimension and filtering (http://trac.osgeo.org/geos/ticket/435) template<> template<> void object::test<17>() { geos::geom::CoordinateArraySequence seq(1); ensure_equals(seq.getDimension(), 2u); Filter f; f.is3d = true; seq.apply_rw(&f); ensure_equals(seq.getDimension(), 3u); f.is3d = false; seq.apply_rw(&f); ensure_equals(seq.getDimension(), 2u); } } // namespace tut geos-3.4.2/tests/unit/geom/CoordinateListTest.cpp0000644000175000017500000000750312206417146021644 0ustar frankiefrankie// // Test Suite for geos::geom::CoordinateList class. // tut #include // geos #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_coordinatelist_data { test_coordinatelist_data() {} }; typedef test_group group; typedef group::object object; group test_coordinatelist_group("geos::geom::CoordinateList"); // // Test Cases // // Test insert and erase template<> template<> void object::test<1>() { using geos::geom::Coordinate; const Coordinate a(0, 0); const Coordinate b(10, 10); const Coordinate c(20, 20); const Coordinate d(5, 5); geos::geom::CoordinateList::iterator it, it2; std::auto_ptr< std::vector > col( new std::vector() ); col->push_back(a); col->push_back(b); col->push_back(c); // coordinates are copied geos::geom::CoordinateList clist(*col); ensure_equals( clist.size(), 3u ); it = clist.begin(); clist.insert(++it, d); ensure_equals( clist.size(), 4u ); it = clist.begin(); ensure_equals(*it, a); ++it; ensure_equals(*it, d); ++it; ensure_equals(*it, b); ++it; ensure_equals(*it, c); it = clist.begin(); ++it; ++it; clist.erase(it); ensure_equals( clist.size(), 3u ); it = clist.begin(); ensure_equals(*it, a); ++it; ensure_equals(*it, d); ++it; ensure_equals(*it, c); clist.insert(clist.end(), b); ensure_equals( clist.size(), 4u ); it = clist.begin(); ++it; it2 = it; ++it2; ++it2; clist.erase(it, it2); ensure_equals( clist.size(), 2u ); it = clist.begin(); ensure_equals(*it, a); ++it; ensure_equals(*it, b); } // Test insert with and without duplicates template<> template<> void object::test<2>() { using geos::geom::Coordinate; geos::geom::CoordinateList clist; ensure_equals( clist.size(), 0u ); clist.insert(clist.end(), Coordinate(0, 0)); ensure_equals( clist.size(), 1u ); clist.insert(clist.end(), Coordinate(0, 0), false); ensure_equals( clist.size(), 1u ); clist.insert(clist.end(), Coordinate(0, 0), true); ensure_equals( clist.size(), 2u ); clist.insert(clist.end(), Coordinate(1, 1), true); ensure_equals( clist.size(), 3u ); geos::geom::CoordinateList::iterator it = clist.end(); --it; clist.insert(it, Coordinate(0, 0), false); ensure_equals( clist.size(), 3u ); } //Test to check the functioning of closeRing() method. template<> template<> void object::test<3>() { using geos::geom::Coordinate; const Coordinate a(0,0); const Coordinate b(10,10); const Coordinate c(45,60); const Coordinate d(100,0); std::auto_ptr< std::vector > v( new std::vector() ); v->push_back(a); v->push_back(b); v->push_back(c); v->push_back(d); geos::geom::CoordinateList coordlist(*v); coordlist.closeRing(); geos::geom::CoordinateList::iterator it1,it2; it1 = coordlist.begin(); it2 = --coordlist.end(); ensure_equals(*it1,*it2); /* for(CoordinateList::iterator it=coordlist.begin() ; it!=coordlist.end() ; ++it) { cout << (*it).x << " " << (*it).y << endl; }*/ //If the list is empty:: coordlist.erase(coordlist.begin(),coordlist.end()); coordlist.closeRing(); ensure_equals(coordlist.empty(), true); } } // namespace tut geos-3.4.2/tests/unit/geom/CoordinateTest.cpp0000644000175000017500000001173512206417146021012 0ustar frankiefrankie// // Test Suite for geos::geom::Coordinate class. #include // geos #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_coordinate_data { const double x; const double y; const double z; test_coordinate_data() : x(1.234), y(2.345), z(3.456) {} private: // Declare type as noncopyable test_coordinate_data(test_coordinate_data const& other); test_coordinate_data& operator=(test_coordinate_data const& rhs); }; typedef test_group group; typedef group::object object; group test_coordinate_group("geos::geom::Coordinate"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { // TODO - mloskot - discuss about adding default constructor ensure("NOTE: Coordinate has no default constructor.", true); } // Test of overriden constructor template<> template<> void object::test<2>() { geos::geom::Coordinate coord; ensure_equals( coord.x, 0.0 ); ensure_equals( coord.y, 0.0 ); ensure(0 != ISNAN( coord.z ) ); } // Test of copy constructor and assignment operator template<> template<> void object::test<3>() { // Create exemplar object geos::geom::Coordinate original(x, y, z); ensure_equals( original.x, x ); ensure_equals( original.y, y ); ensure_equals( original.z, z ); // Use copy ctor geos::geom::Coordinate copy(original); ensure_equals( copy.x, x ); ensure_equals( copy.y, y ); ensure_equals( copy.z, z ); // Use assignment operator geos::geom::Coordinate assigned; // uses default ctor assigned = original; ensure_equals( assigned.x, x ); ensure_equals( assigned.y, y ); ensure_equals( assigned.z, z ); } // Test of equality operators template<> template<> void object::test<4>() { geos::geom::Coordinate original(x, y, z); ensure_equals( original.x, x ); ensure_equals( original.y, y ); ensure_equals( original.z, z ); // Use copy ctor geos::geom::Coordinate copy(original); // Compare copy with original ensure_equals( original, copy ); copy.x += 3.14; // permutation ensure( original != copy ); } // Test of equals() template<> template<> void object::test<5>() { geos::geom::Coordinate first(x, y); geos::geom::Coordinate second(x, y); ensure( first.equals( second ) ); } // Test of equals2D() template<> template<> void object::test<6>() { geos::geom::Coordinate first(x, y); geos::geom::Coordinate second(x, y); ensure( first.equals2D( second ) ); } // Test of equals3D() template<> template<> void object::test<7>() { geos::geom::Coordinate first(x, y); geos::geom::Coordinate second(x, y); // Test with z = NaN ensure( first.equals3D( second ) ); // Test all valid coordinates first.z = second.z = z; ensure( first.equals3D( second ) ); } // Test of distance() template<> template<> void object::test<8>() { geos::geom::Coordinate first(x, y, z); geos::geom::Coordinate second(x, y, z); // Both coordinates are same ensure_equals( first.distance( second ), 0 ); ensure_equals( first.distance( second ), second.distance( first ) ); // Move second coordinate second.x += 10.0; second.y += 10.0; second.z += 10.0; ensure( first.distance( second ) != 0 ); ensure_equals( first.distance( second ), second.distance( first ) ); // TODO - mloskot - I'm not sure if this will work on every platform. // In case of any problems, just remove it. ensure_equals( first.distance( second ), 14.142135623730951); } // Test of set/getNull() template<> template<> void object::test<9>() { // Create not null coordinate geos::geom::Coordinate not_null_coord(x, y, z); ensure_equals( not_null_coord.x, x ); ensure_equals( not_null_coord.y, y ); ensure_equals( not_null_coord.z, z ); // Make it null and check not_null_coord.setNull(); ensure( 0 != ISNAN( not_null_coord.x ) ); ensure( 0 != ISNAN( not_null_coord.y ) ); ensure( 0 != ISNAN( not_null_coord.z ) ); // Build in static null instance geos::geom::Coordinate null_coord; null_coord = geos::geom::Coordinate::getNull(); ensure( 0 != ISNAN( null_coord.x ) ); ensure( 0 != ISNAN( null_coord.y ) ); ensure( 0 != ISNAN( null_coord.z ) ); } } // namespace tut geos-3.4.2/tests/unit/geom/DimensionTest.cpp0000644000175000017500000000632612206417146020650 0ustar frankiefrankie// // Test Suite for geos::geom::Location class. // tut #include // geos #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_dimension_data { int nomatter; int yes; int no; int point; int curve; int surface; test_dimension_data() : nomatter(geos::geom::Dimension::DONTCARE), yes(geos::geom::Dimension::True), no(geos::geom::Dimension::False), point(geos::geom::Dimension::P), curve(geos::geom::Dimension::L), surface(geos::geom::Dimension::A) {} }; typedef test_group group; typedef group::object object; group test_dimension_group("geos::geom::Dimension"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { // Just compile-time test geos::geom::Dimension dim; ::geos::ignore_unused_variable_warning(dim); } // Test of toDimensionSymbol() template<> template<> void object::test<2>() { using geos::geom::Dimension; try { ensure_equals( Dimension::toDimensionSymbol(nomatter), '*' ); ensure_equals( Dimension::toDimensionSymbol(yes), 'T' ); ensure_equals( Dimension::toDimensionSymbol(no), 'F' ); ensure_equals( Dimension::toDimensionSymbol(point), '0' ); ensure_equals( Dimension::toDimensionSymbol(curve), '1' ); ensure_equals( Dimension::toDimensionSymbol(surface), '2' ); } catch ( geos::util::IllegalArgumentException const& e ) { fail( e.what() ); } } // Test of toDimensionSymbol() throwing IllegalArgumentException template<> template<> void object::test<3>() { using geos::geom::Dimension; try { Dimension::toDimensionSymbol(101); Dimension::toDimensionSymbol(-101); fail("IllegalArgumentException expected"); } catch ( geos::util::IllegalArgumentException const& e ) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } // Test of toDimensionValue() template<> template<> void object::test<4>() { using geos::geom::Dimension; try { ensure_equals( Dimension::toDimensionValue('*'), nomatter ); ensure_equals( Dimension::toDimensionValue('F'), no ); ensure_equals( Dimension::toDimensionValue('f'), no ); ensure_equals( Dimension::toDimensionValue('T') , yes ); ensure_equals( Dimension::toDimensionValue('t') , yes ); ensure_equals( Dimension::toDimensionValue('0'), point ); ensure_equals( Dimension::toDimensionValue('1'), curve ); ensure_equals( Dimension::toDimensionValue('2'), surface ); } catch ( geos::util::IllegalArgumentException const& e ) { fail( e.what() ); } } // Test of toDimensionValue() throwing IllegalArgumentException template<> template<> void object::test<5>() { using geos::geom::Dimension; try { Dimension::toDimensionValue('X'); Dimension::toDimensionValue('9'); fail("IllegalArgumentException expected"); } catch ( geos::util::IllegalArgumentException const& e ) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } } // namespace tut geos-3.4.2/tests/unit/geom/EnvelopeTest.cpp0000644000175000017500000001455512206417146020503 0ustar frankiefrankie// // Test Suite for geos::geom::Envelope class. // tut #include // geos #include #include namespace tut { // // Test Group // // dummy data, not used struct test_envelope_data {}; typedef test_group group; typedef group::object object; group test_envelope_group("geos::geom::Envelope"); // // Test Cases // // 1 - Test of default constructor template<> template<> void object::test<1>() { geos::geom::Envelope empty; ensure( empty.isNull() ); ensure_equals( empty.getWidth(), 0 ); ensure_equals( empty.getHeight(), 0 ); } // 2 - Test of overriden constructor template<> template<> void object::test<2>() { geos::geom::Envelope box(0, 100, 0, 100); ensure( !box.isNull() ); ensure_equals( box.getMinX(), 0 ); ensure_equals( box.getMaxX(), 100 ); ensure_equals( box.getMinY(), 0 ); ensure_equals( box.getMaxY(), 100 ); ensure_equals( box.getMinX(), box.getMinY() ); ensure_equals( box.getMaxX(), box.getMaxY() ); ensure_equals( box.getWidth(), box.getHeight() ); } // 3 - Test of copy constructor template<> template<> void object::test<3>() { geos::geom::Envelope box(0, 100, 0, 100); ensure( !box.isNull() ); ensure_equals( box.getWidth(), box.getHeight() ); geos::geom::Envelope copied(box); ensure( !copied.isNull() ); ensure( copied == box ); ensure_equals( copied.getWidth(), copied.getHeight() ); } // 4 - Test of setToNull() template<> template<> void object::test<4>() { geos::geom::Envelope e(100, 200, 100, 200); ensure( !e.isNull() ); e.setToNull(); ensure( e.isNull() ); } // 5 - Test of equals() template<> template<> void object::test<5>() { geos::geom::Envelope empty; geos::geom::Envelope zero(0, 0, 0, 0); geos::geom::Envelope zero2(0, 0, 0, 0); geos::geom::Envelope box(0, 100, 0, 100); ensure( empty.isNull() ); ensure( !zero.isNull() ); ensure( !zero2.isNull() ); ensure( !box.isNull() ); ensure( !empty.equals( &zero ) ); ensure( !zero.equals( &empty ) ); ensure( zero.equals( &zero2 ) ); ensure( zero2.equals( &zero ) ); ensure( !box.equals( &empty ) ); ensure( !box.equals( &zero ) ); } // 6 - Test of contains() template<> template<> void object::test<6>() { geos::geom::Envelope empty; geos::geom::Envelope small(-1, 1, -1, 1); geos::geom::Envelope big(-5, 5, -5, 5); ensure( empty.isNull() ); ensure( !small.isNull() ); ensure( !big.isNull() ); // Test empty envelope by reference ensure( "empty envelope is not empty!", !empty.contains( small ) ); ensure( "empty envelope is not empty!", !small.contains( empty ) ); // Test empty envelope by pointer ensure( "empty envelope is not empty!", !empty.contains( &small ) ); ensure( "empty envelope is not empty!", !small.contains( &empty ) ); // Test non-empty envelope by reference ensure( !small.contains( big ) ); ensure( big.contains( small ) ); // Test raw point ensure( small.contains( 0, 0 ) ); ensure( small.contains( -1, -1 ) ); ensure( !small.contains( 5, 5 ) ); // Test coordinate geos::geom::Coordinate origin(0, 0, 0); ensure_equals( origin.x, 0 ); ensure_equals( origin.y, 0 ); ensure_equals( origin.z, 0 ); ensure( small.contains( origin ) ); } // Test of intersects() template<> template<> void object::test<7>() { geos::geom::Envelope empty; geos::geom::Envelope with_origin(-100, 100, -100, 100); geos::geom::Envelope moved(50, 150, 50, 150); ensure( empty.isNull() ); ensure( !with_origin.isNull() ); ensure( !moved.isNull() ); // Test empty envelope by reference ensure( "empty envelope seems not empty!", !empty.intersects( with_origin ) ); ensure( "empty envelope seems not empty!", !with_origin.intersects( empty ) ); // Test empty envelope by pointer ensure( "empty envelope seems not empty!", !empty.intersects( &with_origin ) ); ensure( "empty envelope seems not empty!", !with_origin.intersects( &empty ) ); // Test non-empty envelope by reference ensure( with_origin.intersects( moved ) ); ensure( moved.intersects( with_origin ) ); // Test intersection with raw point ensure( with_origin.intersects( 0, 0 ) ); ensure( with_origin.intersects( -100, 100 ) ); ensure( !with_origin.intersects( -200, 200 ) ); // Test intersection with coordinate geos::geom::Coordinate origin(0, 0, 0); ensure_equals( origin.x, 0 ); ensure_equals( origin.y, 0 ); ensure_equals( origin.z, 0 ); ensure( with_origin.intersects( origin ) ); } // Test of expand() template<> template<> void object::test<8>() { geos::geom::Envelope empty; geos::geom::Envelope box(-5, 5, -5, 5); // Includes (0,0) point const geos::geom::Envelope exemplar(-5, 5, -5, 5); ensure( empty.isNull() ); ensure( !box.isNull() ); ensure( !exemplar.isNull() ); // Expand box envelope to include null envelope box.expandToInclude(&empty); ensure( box == exemplar ); // no change expected // Expand null envelope to include box envelope empty.expandToInclude(&box); ensure( empty == exemplar ); } // Second test of expand() template<> template<> void object::test<9>() { geos::geom::Envelope empty; geos::geom::Envelope box(100, 101, 100, 101); // Does not include (0,0) point const geos::geom::Envelope exemplar(100, 101, 100, 101); // Expand box envelope to include null envelope box.expandToInclude(&empty); ensure( box == exemplar ); // no change expected // Expand empty envelope to include bigger envelope empty.expandToInclude(&box); ensure( empty == exemplar ); } } // namespace tut geos-3.4.2/tests/unit/geom/Geometry/0000755000175000017500000000000012206417243017141 5ustar frankiefrankiegeos-3.4.2/tests/unit/geom/Geometry/clone.cpp0000644000175000017500000000543212206417146020753 0ustar frankiefrankie// // Test Suite for Geometry's clone() // tut #include // geos #include #include #include #include // std #include #include namespace tut { // // Test Group // struct test_geometry_clone_data { typedef std::auto_ptr GeomAutoPtr; geos::geom::GeometryFactory factory; geos::io::WKTReader reader; test_geometry_clone_data() : reader(&factory) {} }; typedef test_group group; typedef group::object object; group test_geometry_clone_data("geos::geom::Geometry::clone"); // // Test Cases // template<> template<> void object::test<1>() { GeomAutoPtr g1(reader.read( "POINT (0 100)" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<2>() { GeomAutoPtr g1(reader.read( "LINESTRING (0 0, 0 100, 100 100, 100 0)" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<3>() { GeomAutoPtr g1(reader.read( "POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<4>() { GeomAutoPtr g1(reader.read( "MULTIPOINT (0 100, 5 6)" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<5>() { GeomAutoPtr g1(reader.read( "MULTILINESTRING ((0 0, 0 100, 100 100, 100 0), (15 25, 25 52))" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<6>() { GeomAutoPtr g1(reader.read( "MULTIPOLYGON (((0 0, 0 100, 100 100, 100 0, 0 0)))" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } template<> template<> void object::test<7>() { GeomAutoPtr g1(reader.read( "GEOMETRYCOLLECTION(MULTIPOLYGON (((0 0, 0 100, 100 100, 100 0, 0 0))),POINT(3 4))" )); g1->setSRID(66); GeomAutoPtr g2(g1->clone()); ensure( g1->equalsExact(g2.get()) ); ensure_equals( g1->getSRID(), 66 ); ensure_equals( g1->getSRID(), g2->getSRID() ); } } // namespace tut geos-3.4.2/tests/unit/geom/Geometry/coversTest.cpp0000644000175000017500000000575712206417146022026 0ustar frankiefrankie// // Test Suite for Geometry's covers(), coveredBy() and contains() functions // tut #include // geos #include #include #include #include // std #include #include namespace tut { // // Test Group // struct test_contains_data { typedef std::auto_ptr GeomAutoPtr; geos::geom::GeometryFactory factory; geos::io::WKTReader reader; test_contains_data() : reader(&factory) {} }; typedef test_group group; typedef group::object object; group test_contains_data("geos::geom::Geometry::covers"); // // Test Cases // // 1 - Boundaries touch, still g1 covers g2 template<> template<> void object::test<1>() { GeomAutoPtr g1(reader.read( "POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))" )); GeomAutoPtr g2(reader.read( "POLYGON ((0 0, 0 100, 90 90, 90 0, 0 0))" )); ensure( g1->covers(g2.get()) ); ensure( g2->coveredBy(g1.get()) ); } // 2 - Polygon covers line (laying on it's boundary) template<> template<> void object::test<2>() { GeomAutoPtr g1(reader.read( "POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))" )); GeomAutoPtr g2(reader.read( "LINESTRING (0 0, 0 100)" )); ensure( g1->covers(g2.get()) ); ensure( g2->coveredBy(g1.get()) ); ensure( ! g1->contains(g2.get()) ); } // 3 - Line covers point (laying on it's boundary or interior) template<> template<> void object::test<3>() { GeomAutoPtr g1(reader.read( "LINESTRING (0 0, 0 100)" )); GeomAutoPtr g2(reader.read( "POINT(0 0)" )); ensure( g1->covers(g2.get()) ); ensure( g2->coveredBy(g1.get()) ); ensure( ! g1->contains(g2.get()) ); g2.reset(reader.read( "POINT(0 2)" )); ensure( g1->covers(g2.get()) ); ensure( g2->coveredBy(g1.get()) ); ensure( g1->contains(g2.get()) ); } // 4 - http://trac.osgeo.org/geos/ticket/580 template<> template<> void object::test<4>() { GeomAutoPtr g1(reader.read( "POLYGON ((-1.183864 52.951915, -1.183862 52.951903, -1.183890 52.951900, -1.183924 52.951897, -1.183958 52.951894, -1.183954 52.951880, -1.183954 52.951878, -1.183932 52.951841, -1.183904 52.951844, -1.183870 52.951847, -1.183832 52.951852, -1.183824 52.951838, -1.183820 52.951830, -1.183870 52.951819, -1.183886 52.951815, -1.183890 52.951819, -1.183929 52.951810, -1.183909 52.951776, -1.183861 52.951787, -1.183853 52.951788, -1.183842 52.951770, -1.183970 52.951742, -1.183983 52.951763, -1.183963 52.951768, -1.183975 52.951788, -1.183994 52.951785, -1.184009 52.951807, -1.184002 52.951808, -1.184009 52.951835, -1.183990 52.951836, -1.183990 52.951836, -1.183990 52.951838, -1.184001 52.951880, -1.184018 52.951954, -1.184020 52.951956, -1.183998 52.951957, -1.183998 52.951956, -1.183996 52.951948, -1.183970 52.951906, -1.183936 52.951909, -1.183864 52.951915))" )); GeomAutoPtr g2(reader.read( "POINT (-1.183972 52.951871)" )); ensure( g1->covers(g2.get()) ); ensure( g2->coveredBy(g1.get()) ); ensure( g1->contains(g2.get()) ); } } // namespace tut geos-3.4.2/tests/unit/geom/Geometry/isRectangleTest.cpp0000644000175000017500000000757112206417146022761 0ustar frankiefrankie// // Test Suite for Geometry::isRectangle() function // tut #include // geos #include #include #include #include // std #include namespace tut { // // Test Group // struct test_isrectangle_data { geos::geom::GeometryFactory factory; geos::io::WKTReader reader; test_isrectangle_data() : reader(&factory) {} }; typedef test_group group; typedef group::object object; group test_isrectangle_group("geos::geom::Geometry::isRectangle"); // // Test Cases // // 1 - Test of valid rectangle template<> template<> void object::test<1>() { const std::string wkt("POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( poly->isRectangle() ); delete g; } // 2 - Test of another valid rectangle template<> template<> void object::test<2>() { const std::string wkt("POLYGON ((0 0, 0 200, 100 200, 100 0, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( poly->isRectangle() ); delete g; } // 3 - Test of rectangle with hole template<> template<> void object::test<3>() { const std::string wkt("POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0), \ (10 10, 10 90, 90 90, 90 10, 10 10) ))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( !poly->isRectangle() ); delete g; } // 4 - Test of non-rectilinear rectangle template<> template<> void object::test<4>() { const std::string wkt("POLYGON ((0 0, 0 100, 99 100, 100 0, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( !poly->isRectangle() ); delete g; } // 5 - Test of rectangle with too many points template<> template<> void object::test<5>() { const std::string wkt("POLYGON ((0 0, 0 100, 100 50, 100 100, 100 0, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( !poly->isRectangle() ); delete g; } // 6 - Test of rectangle with too few points template<> template<> void object::test<6>() { const std::string wkt("POLYGON ((0 0, 0 100, 100 0, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( !poly->isRectangle() ); delete g; } // 7 - Test of rectangle with points in wrong order template<> template<> void object::test<7>() { const std::string wkt("POLYGON ((0 0, 0 100, 100 0, 100 100, 0 0))"); geos::geom::Geometry* g = reader.read(wkt); geos::geom::Polygon* poly = dynamic_cast(g); ensure( "Geometry is not a Polygon: " + wkt, poly != 0 ); ensure( !poly->isRectangle() ); delete g; } } // namespace tut geos-3.4.2/tests/unit/geom/GeometryFactoryTest.cpp0000644000175000017500000011076712206417146022053 0ustar frankiefrankie// // Test Suite for geos::geom::GeometryFactory class. // tut #include #include // geos #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // std #include #include // std::size_t /*! * \brief * Write brief comment for tut here. * * Write detailed description for tut here. * * \remarks * Write remarks for tut here. * * \see * Separate items with the '|' character. */ namespace tut { // // Test Group // // Common data used by tests struct test_geometryfactory_data { // Test data const int x_; const int y_; const int z_; const int srid_; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; test_geometryfactory_data() : x_(5), y_(10), z_(15), srid_(666), pm_(1.0), factory_(&pm_, srid_), reader_(&factory_) {} private: // Declare type as noncopyable test_geometryfactory_data(const test_geometryfactory_data& other); test_geometryfactory_data& operator=(const test_geometryfactory_data& rhs); }; typedef test_group group; typedef group::object object; group test_geometryfactory_group("geos::geom::GeometryFactory"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { geos::geom::GeometryFactory gf; ensure_equals( gf.getSRID(), 0 ); ensure_equals( gf.getPrecisionModel()->getType(), geos::geom::PrecisionModel::FLOATING ); geos::geom::Geometry* geo = gf.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure_equals( geo->getSRID() , gf.getSRID() ); ensure_equals( geo->getPrecisionModel()->getType(), geos::geom::PrecisionModel::FLOATING ); // FREE MEMORY gf.destroyGeometry(geo); } // Test of user's constructor template<> template<> void object::test<2>() { using geos::geom::GeometryFactory; using geos::geom::PrecisionModel; using geos::geom::CoordinateArraySequenceFactory; CoordinateArraySequenceFactory csf; { PrecisionModel pm(1.0); GeometryFactory gf(&pm, srid_, &csf); ensure_equals( gf.getSRID(), srid_ ); ensure_equals( gf.getPrecisionModel()->getType(), geos::geom::PrecisionModel::FIXED ); ensure_equals( &csf, gf.getCoordinateSequenceFactory() ); GeometryPtr geo = gf.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure_equals( geo->getSRID() , gf.getSRID() ); ensure_equals( geo->getPrecisionModel()->getType(), geos::geom::PrecisionModel::FIXED ); // FREE MEMORY gf.destroyGeometry(geo); } // csf lifetime must exceed lifetime of the GeometryFactory instance } // test<2> // Test of user's constructor template<> template<> void object::test<3>() { using geos::geom::GeometryFactory; using geos::geom::CoordinateArraySequenceFactory; CoordinateArraySequenceFactory csf; { GeometryFactory gf(&csf); ensure_equals( gf.getSRID(), 0 ); ensure_equals( gf.getPrecisionModel()->getType(), geos::geom::PrecisionModel::FLOATING ); GeometryPtr geo = gf.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure_equals( geo->getSRID() , gf.getSRID() ); ensure_equals( geo->getPrecisionModel()->getType(), geos::geom::PrecisionModel::FLOATING ); // FREE MEMORY gf.destroyGeometry(geo); } // csf lifetime must exceed lifetime of the GeometryFactory instance } // Test of user's constructor template<> template<> void object::test<4>() { using geos::geom::PrecisionModel; PrecisionModel pm(PrecisionModel::FIXED); geos::geom::GeometryFactory gf(&pm); ensure_equals( gf.getSRID(), 0 ); ensure_equals( gf.getPrecisionModel()->getType(), PrecisionModel::FIXED ); GeometryPtr geo = gf.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure_equals( geo->getSRID() , gf.getSRID() ); ensure_equals( geo->getPrecisionModel()->getType(), PrecisionModel::FIXED ); // FREE MEMORY gf.destroyGeometry(geo); } // Test of user's constructor template<> template<> void object::test<5>() { using geos::geom::PrecisionModel; PrecisionModel pm(PrecisionModel::FIXED); geos::geom::GeometryFactory gf(&pm, srid_); ensure_equals( gf.getSRID(), srid_ ); ensure_equals( gf.getPrecisionModel()->getType(), PrecisionModel::FIXED ); GeometryPtr geo = gf.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure_equals( geo->getSRID() , gf.getSRID() ); ensure_equals( geo->getPrecisionModel()->getType(), PrecisionModel::FIXED ); // FREE MEMORY gf.destroyGeometry(geo); } // Test of copy constructor template<> template<> void object::test<6>() { geos::geom::GeometryFactory gf(factory_); ensure_equals( factory_.getSRID(), gf.getSRID() ); ensure_equals( factory_.getPrecisionModel()->getType(), gf.getPrecisionModel()->getType() ); } // Test of createEmptyGeometry() const template<> template<> void object::test<7>() { GeometryPtr geo = factory_.createEmptyGeometry(); ensure( "createEmptyGeometry() returned null pointer.", geo != 0 ); ensure( "createEmptyGeometry() returned non-empty geometry.", geo->isEmpty() ); // TODO - mloskot // http://geos.osgeo.org/pipermail/geos-devel/2006-March/001960.html /* ensure( geo->isSimple() ); ensure( geo->isValid() ); ensure( geo->getCentroid() == 0 ); ensure( geo->getCoordinate() == 0 ); */ // FREE MEMORY factory_.destroyGeometry(geo); } // Test of createPoint() const template<> template<> void object::test<8>() { PointPtr pt = factory_.createPoint(); ensure( "createPoint() returned null pointer.", pt != 0 ); ensure( "createPoint() returned non-empty point.", pt->isEmpty() ); ensure( pt->isSimple() ); ensure( pt->isValid() ); ensure( pt->getCentroid() == 0 ); ensure( pt->getCoordinate() == 0 ); GeometryPtr geo = 0; geo = pt->getEnvelope(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( pt->getGeometryTypeId(), geos::geom::GEOS_POINT ); ensure_equals( pt->getDimension(), geos::geom::Dimension::P ); ensure_equals( pt->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( pt->getNumPoints(), 0u ); ensure_equals( pt->getLength(), 0.0 ); ensure_equals( pt->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(pt); } // Test of createPoint(const Coordinate &coordinate) const template<> template<> void object::test<9>() { geos::geom::Coordinate coord(x_, y_, z_); PointPtr pt = factory_.createPoint(coord); ensure( "createPoint() returned null pointer.", pt != 0 ); ensure( "createPoint() returned empty point.", !pt->isEmpty() ); ensure( pt->isSimple() ); ensure( pt->isValid() ); ensure( pt->getCoordinate() != 0 ); CoordinateCPtr pcoord = pt->getCoordinate(); ensure( pcoord != 0 ); ensure_equals( pcoord->x, x_ ); ensure_equals( pcoord->y, y_ ); ensure_equals( pcoord->z, z_ ); GeometryPtr geo = 0; geo = pt->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getCentroid(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( pt->getGeometryTypeId(), geos::geom::GEOS_POINT ); ensure_equals( pt->getDimension(), geos::geom::Dimension::P ); ensure_equals( pt->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( pt->getNumPoints(), 1u ); ensure_equals( pt->getLength(), 0.0 ); ensure_equals( pt->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(pt); } // Test of createPoint(CoordinateSequence *coordinates) const template<> template<> void object::test<10>() { geos::geom::Coordinate coord(x_, y_, z_); CoordArrayPtr sequence = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", sequence != 0 ); sequence->add(coord); PointPtr pt = factory_.createPoint(sequence); ensure( "createPoint() returned null pointer.", pt != 0 ); ensure( "createPoint() returned empty point.", !pt->isEmpty() ); ensure( pt->isSimple() ); ensure( pt->isValid() ); ensure( pt->getCoordinate() != 0 ); CoordinateCPtr pcoord = pt->getCoordinate(); ensure( pcoord != 0 ); ensure_equals( pcoord->x, x_ ); ensure_equals( pcoord->y, y_ ); ensure_equals( pcoord->z, z_ ); GeometryPtr geo = 0; geo = pt->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getCentroid(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( pt->getGeometryTypeId(), geos::geom::GEOS_POINT ); ensure_equals( pt->getDimension(), geos::geom::Dimension::P ); ensure_equals( pt->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( pt->getNumPoints(), 1u ); ensure_equals( pt->getLength(), 0.0 ); ensure_equals( pt->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(pt); } // Test of createPoint(const CoordinateSequence &coordinates) const template<> template<> void object::test<11>() { geos::geom::Coordinate coord(x_, y_, z_); geos::geom::CoordinateArraySequence sequence; sequence.add(coord); PointPtr pt = factory_.createPoint(sequence); ensure( "createPoint() returned null pointer.", pt != 0 ); ensure( "createPoint() returned empty point.", !pt->isEmpty() ); ensure( pt->isSimple() ); ensure( pt->isValid() ); ensure( pt->getCoordinate() != 0 ); CoordinateCPtr pcoord = pt->getCoordinate(); ensure( pcoord != 0 ); ensure_equals( pcoord->x, x_ ); ensure_equals( pcoord->y, y_ ); ensure_equals( pcoord->z, z_ ); GeometryPtr geo = 0; geo = pt->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getCentroid(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = pt->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( pt->getGeometryTypeId(), geos::geom::GEOS_POINT ); ensure_equals( pt->getDimension(), geos::geom::Dimension::P ); ensure_equals( pt->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( pt->getNumPoints(), 1u ); ensure_equals( pt->getLength(), 0.0 ); ensure_equals( pt->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(pt); } // Test of createLinearRing() const template<> template<> void object::test<12>() { LinearRingPtr lr = factory_.createLinearRing(); ensure( "createLinearRing() returned null pointer.", lr != 0 ); ensure( "createLinearRing() returned non-empty point.", lr->isEmpty() ); ensure( lr->isEmpty() ); ensure( lr->isSimple() ); ensure( lr->isValid() ); ensure( lr->getCoordinate() == 0 ); // TODO - mloskot //http://geos.osgeo.org/pipermail/geos-devel/2006-March/001961.html //ensure( lr->isClosed() ); // TODO - mloskot //http://geos.osgeo.org/pipermail/geos-devel/2006-March/001962.html //ensure_equals( lr->getStartPoint(), lr->getEndPoint() ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), 0u ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLinearRing(CoordinateSequence* newCoords) const template<> template<> void object::test<13>() { const std::size_t size = 5; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); ensure_equals( coords->getSize(), size ); LinearRingPtr lr = factory_.createLinearRing(coords); ensure( "createLinearRing() returned null pointer.", lr != 0 ); ensure( "createLinearRing() returned empty point.", !lr->isEmpty() ); ensure( lr->isSimple() ); ensure( lr->getCoordinate() != 0 ); // TODO - mloskot - is this correct? //ensure( !lr->isValid() ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), size ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLinearRing(const CoordinateSequence& coordinates) const template<> template<> void object::test<14>() { const std::size_t size = 5; geos::geom::CoordinateArraySequence coords(size); ensure_equals( coords.getSize(), size ); LinearRingPtr lr = factory_.createLinearRing(coords); ensure( "createLinearRing() returned empty point.", !lr->isEmpty() ); ensure_equals( lr->getNumPoints(), size ); ensure( lr->isSimple() ); ensure( lr->getCoordinate() != 0 ); ensure_equals( lr->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( lr->getDimension(), geos::geom::Dimension::L ); ensure_equals( lr->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( lr->getNumPoints(), size ); ensure_equals( lr->getLength(), 0.0 ); ensure_equals( lr->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(lr); } // Test of createLineString() const template<> template<> void object::test<15>() { LineStringPtr line = factory_.createLineString(); ensure( "createLineString() returned null pointer.", line != 0 ); ensure( "createLineString() returned non-empty point.", line->isEmpty() ); ensure( line->isSimple() ); ensure( line->isValid() ); ensure( line->getCentroid() == 0 ); // TODO - mloskot - waiting for some decision // http://geos.osgeo.org/pipermail/geos-devel/2006-March/002006.html //ensure( line->getCoordinate() == 0 ); GeometryPtr geo = 0; geo = line->getEnvelope(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = line->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = line->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::P ); // empty linestring ensure_equals( line->getNumPoints(), 0u ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createLineString(CoordinateSequence* coordinates) const template<> template<> void object::test<16>() { const std::size_t size = 5; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); ensure_equals( coords->getSize(), size ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned null pointer.", line != 0 ); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); // TODO - mloskot - is this correct? //ensure( line->isValid() ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( line->getNumPoints(), size ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createLineString(const CoordinateSequence& coordinates) const template<> template<> void object::test<17>() { const std::size_t size = 5; geos::geom::CoordinateArraySequence coords(size); ensure_equals( coords.getSize(), size ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure_equals( line->getNumPoints(), size ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( line->getDimension(), geos::geom::Dimension::L ); ensure_equals( line->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( line->getNumPoints(), size ); ensure_equals( line->getLength(), 0.0 ); ensure_equals( line->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(line); } // Test of createPolygon() const template<> template<> void object::test<18>() { PolygonPtr poly = factory_.createPolygon(); ensure( "createPolygon() returned null pointer.", poly != 0 ); ensure( "createPolygon() returned non-empty point.", poly->isEmpty() ); ensure( poly->isSimple() ); ensure( poly->isValid() ); ensure( poly->getCentroid() == 0 ); // TODO - mloskot - waiting for some decision // http://geos.osgeo.org/pipermail/geos-devel/2006-March/002006.html //ensure( poly->getCoordinate() == 0 ); GeometryPtr geo = 0; // TODO - mloskot - waiting for resolution // http://geos.osgeo.org/pipermail/geos-devel/2006-March/002011.html //geo = poly->getEnvelope(); //ensure( geo != 0 ); //ensure( geo->isEmpty() ); //factory_.destroyGeometry(geo); geo = poly->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = poly->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), 0u ); ensure_equals( poly->getLength(), 0.0 ); ensure_equals( poly->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(poly); } // Test of createPolygon(LinearRing* shell, std::vector* holes) const template<> template<> void object::test<19>() { using geos::geom::Coordinate; const std::size_t size = 7; // Create sequence of coordiantes CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(size); ensure( coords != 0 ); coords->setAt(Coordinate(0, 10), 0); coords->setAt(Coordinate(5, 5), 1); coords->setAt(Coordinate(10, 5), 2); coords->setAt(Coordinate(15, 10), 3); coords->setAt(Coordinate(10, 15), 4); coords->setAt(Coordinate(5, 15), 5); coords->setAt(Coordinate(0, 10), 6); ensure_equals( coords->getSize(), size ); // Create exterior ring LinearRingPtr exterior = factory_.createLinearRing(coords); ensure( "createLinearRing returned null pointer.", exterior != 0 ); ensure( "createLinearRing() returned empty point.", !exterior->isEmpty() ); ensure( exterior->isSimple() ); ensure_equals( exterior->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( exterior->getDimension(), geos::geom::Dimension::L ); ensure_equals( exterior->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( exterior->getNumPoints(), size ); ensure_equals( exterior->getArea(), 0.0 ); ensure( exterior->getLength() != 0.0 ); // Create polygon PolygonPtr poly = factory_.createPolygon(exterior, 0); ensure( "createPolygon returned null pointer.", poly != 0 ); ensure( "createPolygon() returned empty point.", !poly->isEmpty() ); ensure( poly->isSimple() ); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), size ); ensure( poly->getArea() != 0.0 ); ensure( poly->getLength() != 0.0 ); // FREE MEMORY factory_.destroyGeometry(poly); } // Test of createPolygon(const LinearRing& shell, const std::vector& holes) const template<> template<> void object::test<20>() { using geos::geom::Coordinate; const std::size_t exteriorSize = 7; const std::size_t interiorSize = 5; // Create sequence of coordiantes CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(exteriorSize); ensure( coords != 0 ); coords->setAt(Coordinate(0, 10), 0); coords->setAt(Coordinate(5, 5), 1); coords->setAt(Coordinate(10, 5), 2); coords->setAt(Coordinate(15, 10), 3); coords->setAt(Coordinate(10, 15), 4); coords->setAt(Coordinate(5, 15), 5); coords->setAt(Coordinate(0, 10), 6); ensure_equals( coords->getSize(), exteriorSize ); // Create exterior ring LinearRingPtr exterior = factory_.createLinearRing(coords); ensure( "createLinearRing returned null pointer.", exterior != 0 ); ensure( "createLinearRing() returned empty point.", !exterior->isEmpty() ); ensure( exterior->isSimple() ); ensure_equals( exterior->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); ensure_equals( exterior->getDimension(), geos::geom::Dimension::L ); ensure_equals( exterior->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( exterior->getNumPoints(), exteriorSize ); ensure_equals( exterior->getArea(), 0.0 ); ensure( exterior->getLength() != 0.0 ); // Create collection of holes GeometryPtr geo = reader_.read(("LINEARRING(7 7, 12 7, 12 12, 7 12, 7 7)")); ensure( geo != 0 ); LinearRingPtr hole = dynamic_cast(geo); ensure( hole != 0 ); ensure( hole->isRing() ); ensure_equals( hole->getNumPoints(), interiorSize ); // REMEMBER TO DEALLOCATE THIS COLLECTION std::vector holes; holes.push_back(hole); // Create polygon using copy ctor PolygonPtr poly = factory_.createPolygon((*exterior), holes); ensure( "createPolygon returned null pointer.", poly != 0 ); ensure( "createPolygon() returned empty point.", !poly->isEmpty() ); ensure( poly->isSimple() ); ensure_equals( poly->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( poly->getDimension(), geos::geom::Dimension::A ); ensure_equals( poly->getBoundaryDimension(), geos::geom::Dimension::L ); ensure_equals( poly->getNumPoints(), exteriorSize + interiorSize ); ensure( poly->getArea() != 0.0 ); ensure( poly->getLength() != 0.0 ); ensure_equals( poly->getNumGeometries(), 1u ); ensure_equals( poly->getNumInteriorRing(), 1u ); // FREE MEMORY std::vector::const_iterator it; for (it = holes.begin(); it != holes.end(); ++it) { delete (*it); } holes.clear(); factory_.destroyGeometry(exterior); factory_.destroyGeometry(poly); } // Test of createGeometryCollection() const template<> template<> void object::test<21>() { GeometryColPtr col = factory_.createGeometryCollection(); ensure( "createGeometryCollection() returned null pointer.", col != 0 ); ensure( col->isEmpty() ); ensure( col->isValid() ); try { ensure( !col->isSimple() ); fail("IllegalArgumentException expected"); } catch ( geos::util::IllegalArgumentException const& e ) { const char* msg = e.what(); // ok ensure( msg != 0 ); } ensure( col->getCentroid() == 0 ); ensure_equals( col->getGeometryTypeId(), geos::geom::GEOS_GEOMETRYCOLLECTION ); ensure_equals( col->getDimension(), geos::geom::Dimension::False ); ensure_equals( col->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( col->getNumPoints(), 0u ); ensure_equals( col->getLength(), 0.0 ); ensure_equals( col->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(col); } // Test of createGeometryCollection(std::vector* newGeoms) const template<> template<> void object::test<22>() { using geos::geom::Coordinate; // Buffer for geometries std::vector* vec = new std::vector(); // Add single point Coordinate coord(x_, y_, z_); GeometryPtr point = factory_.createPoint(coord); ensure( point != 0 ); vec->push_back(point); // Add single LineString CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(3); ensure( coords != 0 ); coords->setAt(Coordinate(0, 0), 0); coords->setAt(Coordinate(5, 5), 1); coords->setAt(Coordinate(10, 5), 2); ensure_equals( coords->getSize(), 3u ); GeometryPtr line = factory_.createLineString(coords); vec->push_back(line); // Create geometry collection GeometryColPtr col = factory_.createGeometryCollection(vec); ensure( coords != 0 ); ensure_equals( col->getGeometryTypeId(), geos::geom::GEOS_GEOMETRYCOLLECTION ); ensure_equals( col->getNumGeometries(), 2u ); // FREE MEMORY factory_.destroyGeometry(col); } // Test of createGeometryCollection(const std::vector& newGeoms) const template<> template<> void object::test<23>() { const std::size_t size = 3; geos::geom::Coordinate coord(x_, y_, z_); std::vector vec; GeometryPtr geo = 0; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 2; coord.y *= 2; coord.z *= 2; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 3; coord.y *= 3; coord.z *= 3; geo = factory_.createPoint(coord); vec.push_back(geo); // Factory creates copy of the vec collection GeometryColPtr col = factory_.createGeometryCollection(vec); ensure( col != 0 ); ensure_equals( col->getGeometryTypeId() , geos::geom::GEOS_GEOMETRYCOLLECTION ); ensure_equals( col->getNumGeometries() , size ); // FREE MEMORY factory_.destroyGeometry(col); std::vector::const_iterator it; for (it = vec.begin(); it != vec.end(); ++it) { delete (*it); } } // Test of createMultiPoint() const template<> template<> void object::test<24>() { MultiPointPtr mp = factory_.createMultiPoint(); ensure( "createMultiPoint() returned null pointer.", mp != 0 ); ensure( "createMultiPoint() returned non-empty point.", mp->isEmpty() ); ensure( mp->isSimple() ); ensure( mp->isValid() ); ensure( mp->getCentroid() == 0 ); GeometryPtr geo = 0; // TODO - mloskot - waiting for resolution // http://geos.osgeo.org/pipermail/geos-devel/2006-March/002011.html //geo = poly->getEnvelope(); //ensure( geo != 0 ); //ensure( geo->isEmpty() ); //factory_.destroyGeometry(geo); geo = mp->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = mp->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( mp->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); ensure_equals( mp->getDimension(), geos::geom::Dimension::P ); ensure_equals( mp->getBoundaryDimension(), geos::geom::Dimension::False ); ensure_equals( mp->getNumPoints(), 0u ); ensure_equals( mp->getLength(), 0.0 ); ensure_equals( mp->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(mp); } // Test of createMultiPoint(std::vector* newPoints) const template<> template<> void object::test<25>() { const std::size_t size = 3; geos::geom::Coordinate coord(x_, y_, z_); std::vector* vec = new std::vector(); GeometryPtr geo = 0; geo = factory_.createPoint(coord); ensure( geo != 0 ); vec->push_back(geo); coord.x *= 2; coord.y *= 2; coord.z *= 2; geo = factory_.createPoint(coord); ensure( geo != 0 ); vec->push_back(geo); coord.x *= 3; coord.y *= 3; coord.z *= 3; geo = factory_.createPoint(coord); ensure( geo != 0 ); vec->push_back(geo); // Factory creates copy of the vec collection MultiPointPtr mp = factory_.createMultiPoint(vec); ensure( mp != 0 ); ensure( mp->isValid() ); ensure( mp->isSimple() ); ensure_equals( mp->getNumGeometries(), size ); ensure_equals( mp->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); // FREE MEMORY factory_.destroyGeometry(mp); } // Test of createMultiPoint(const std::vector& fromPoints) const template<> template<> void object::test<26>() { const std::size_t size = 3; geos::geom::Coordinate coord(x_, y_, z_); std::vector vec; GeometryPtr geo = 0; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 2; coord.y *= 2; coord.z *= 2; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 3; coord.y *= 3; coord.z *= 3; geo = factory_.createPoint(coord); vec.push_back(geo); // Factory creates copy of the vec collection MultiPointPtr mp = factory_.createMultiPoint(vec); ensure( mp != 0 ); ensure( mp->isValid() ); ensure( mp->isSimple() ); ensure_equals( mp->getNumGeometries(), size ); ensure_equals( mp->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); // FREE MEMORY factory_.destroyGeometry(mp); std::vector::const_iterator it; for (it = vec.begin(); it != vec.end(); ++it) { delete (*it); } } // Test of createMultiPoint(const CoordinateSequence& fromCoords) const template<> template<> void object::test<27>() { using geos::geom::Coordinate; const std::size_t size = 3; // Add collection of coordinates geos::geom::CoordinateArraySequence coords(size); coords.setAt(Coordinate(0, 0), 0); coords.setAt(Coordinate(5, 5), 1); coords.setAt(Coordinate(10, 5), 2); ensure_equals( coords.getSize(), size ); MultiPointPtr mp = factory_.createMultiPoint(coords); ensure( mp != 0 ); ensure( mp->isValid() ); ensure( mp->isSimple() ); ensure_equals( mp->getNumGeometries(), size ); ensure_equals( mp->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); // FREE MEMORY factory_.destroyGeometry(mp); } // Test of createMultiLineString() const template<> template<> void object::test<28>() { MultiLineStringPtr mls = factory_.createMultiLineString(); ensure( "createMultiLineString() returned null pointer.", mls != 0 ); ensure( "createMultiLineString() returned non-empty point.", mls->isEmpty() ); ensure( mls->isSimple() ); ensure( mls->isValid() ); ensure( mls->getCentroid() == 0 ); GeometryPtr geo = 0; // TODO - mloskot - waiting for resolution // http://geos.osgeo.org/pipermail/geos-devel/2006-March/002011.html //geo = poly->getEnvelope(); //ensure( geo != 0 ); //ensure( geo->isEmpty() ); //factory_.destroyGeometry(geo); geo = mls->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); geo = mls->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( mls->getGeometryTypeId(), geos::geom::GEOS_MULTILINESTRING ); ensure_equals( mls->getDimension(), geos::geom::Dimension::L ); ensure_equals( mls->getBoundaryDimension(), geos::geom::Dimension::P ); ensure_equals( mls->getNumPoints(), 0u ); ensure_equals( mls->getLength(), 0.0 ); ensure_equals( mls->getArea(), 0.0 ); // FREE MEMORY factory_.destroyGeometry(mls); } // Test of createMultiLineString(std::vector* newLines) const template<> template<> void object::test<29>() { using geos::geom::Coordinate; const std::size_t size = 5; const std::size_t lineSize = 2; std::vector* lines = new std::vector(); for (std::size_t i = 0; i < size; ++i) { const std::size_t factor = i * i; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(lineSize); ensure( coords != 0 ); coords->setAt(Coordinate(0 + factor, 0 + factor), 0); coords->setAt(Coordinate(5 + factor, 5 + factor), 1); ensure_equals( coords->getSize(), lineSize ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure_equals( line->getNumPoints(), lineSize ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); lines->push_back(line); } MultiLineStringPtr mls = factory_.createMultiLineString(lines); ensure( mls != 0 ); // TODO - mloskot - why isValid() returns false? //ensure( mls->isValid() ); ensure_equals( mls->getNumGeometries(), size ); ensure_equals( mls->getGeometryTypeId(), geos::geom::GEOS_MULTILINESTRING ); // FREE MEMORY factory_.destroyGeometry(mls); } // Test of createMultiLineString(const std::vector& fromLines) const template<> template<> void object::test<30>() { using geos::geom::Coordinate; const std::size_t size = 5; const std::size_t lineSize = 2; std::vector lines; for (std::size_t i = 0; i < size; ++i) { const std::size_t factor = i * i; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(lineSize); ensure( coords != 0 ); coords->setAt(Coordinate(0 + factor, 0 + factor), 0); coords->setAt(Coordinate(5 + factor, 5 + factor), 1); ensure_equals( coords->getSize(), lineSize ); LineStringPtr line = factory_.createLineString(coords); ensure( "createLineString() returned empty point.", !line->isEmpty() ); ensure_equals( line->getNumPoints(), lineSize ); ensure( line->isSimple() ); ensure( line->getCoordinate() != 0 ); ensure_equals( line->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); lines.push_back(line); } MultiLineStringPtr mls = factory_.createMultiLineString(lines); ensure( mls != 0 ); // TODO - mloskot - why isValid() returns false? //ensure( mls->isValid() ); ensure_equals( mls->getNumGeometries(), size ); ensure_equals( mls->getGeometryTypeId(), geos::geom::GEOS_MULTILINESTRING ); // FREE MEMORY factory_.destroyGeometry(mls); std::vector::const_iterator it; for (it = lines.begin(); it != lines.end(); ++it) { delete (*it); } } // Test of createMultiPolygon() const template<> template<> void object::test<31>() { // TODO - mloskot //inform("Test not implemented!"); } // Test of createMultiPolygon(std::vector* newPolys) const template<> template<> void object::test<32>() { // TODO - mloskot //inform("Test not implemented!"); } // Test of createMultiPolygon(const std::vector& fromPolys) const template<> template<> void object::test<33>() { // TODO - mloskot //inform("Test not implemented!"); } // Test of buildGeometry(std::vector* geoms) const template<> template<> void object::test<34>() { // TODO - mloskot //inform("Test not implemented!"); } // Test of buildGeometry(const std::vector& geoms) template<> template<> void object::test<35>() { // TODO - mloskot //inform("Test not implemented!"); } // Test of // buildGeometry(from, to, takeOwnership) const template<> template<> void object::test<36>() { typedef std::auto_ptr GeometryAutoPtr; typedef std::vector PointVect; const std::size_t size = 3; geos::geom::Coordinate coord(x_, y_, z_); PointVect vec; PointPtr geo = 0; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 2; coord.y *= 2; coord.z *= 2; geo = factory_.createPoint(coord); vec.push_back(geo); coord.x *= 3; coord.y *= 3; coord.z *= 3; geo = factory_.createPoint(coord); vec.push_back(geo); // Factory creates copy of the vec collection GeometryAutoPtr g = factory_.buildGeometry(vec.begin(), vec.end()); ensure( g.get() != 0 ); ensure_equals( g->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); ensure_equals( g->getNumGeometries(), size ); // FREE MEMORY PointVect::const_iterator it; for (it = vec.begin(); it != vec.end(); ++it) { delete (*it); } } } // namespace tut geos-3.4.2/tests/unit/geom/IntersectionMatrixTest.cpp0000644000175000017500000003432512206417146022556 0ustar frankiefrankie// // Test Suite for geos::geom::IntersectionMatrix class. #include // geos #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by test cases struct test_intersectionmatrix_data { typedef geos::geom::IntersectionMatrix* MatrixPtr; typedef geos::geom::IntersectionMatrix const* MatrixCPtr; const std::string pattern_false_; geos::geom::IntersectionMatrix im_; test_intersectionmatrix_data() : pattern_false_("FFFFFFFFF"),im_(pattern_false_) {} private: // Declare type as noncopyable test_intersectionmatrix_data(const test_intersectionmatrix_data& other); test_intersectionmatrix_data& operator=(const test_intersectionmatrix_data& rhs); }; typedef test_group group; typedef group::object object; group test_intersectionmatrix_group("geos::geom::IntersectionMatrix"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { ensure_equals( im_.toString(), pattern_false_ ); } // Test of user's constructor template<> template<> void object::test<2>() { const std::string pattern("012*TF012"); geos::geom::IntersectionMatrix im(pattern); ensure_equals( im.toString(), pattern ); } // Test of copy constructor template<> template<> void object::test<3>() { geos::geom::IntersectionMatrix copy(im_); ensure_equals( copy.toString(), im_.toString() ); } // Test nr 2 of copy constructor template<> template<> void object::test<4>() { const std::string pattern("012*TF012"); geos::geom::IntersectionMatrix examplar(pattern); ensure_equals( examplar.toString(), pattern ); geos::geom::IntersectionMatrix copy(examplar); ensure_equals( copy.toString(), examplar.toString() ); } // Test of matches(int actualDimensionValue, char requiredDimensionSymbol) template<> template<> void object::test<5>() { const int dummyAny = 999; ensure( im_.matches(dummyAny, '*') ); ensure( im_.matches(geos::geom::Dimension::P, '0') ); ensure( im_.matches(geos::geom::Dimension::True , 'T') ); ensure( !im_.matches(geos::geom::Dimension::False , 'T') ); ensure( !im_.matches(geos::geom::Dimension::DONTCARE , 'T') ); } // Test of matches(const std::string& requiredDimensionSymbols) template<> template<> void object::test<6>() { const std::string pattern("012*TF012"); ensure( im_.matches(pattern_false_) ); ensure( !im_.matches(pattern) ); } // Test of matches(const std::string& actualDimensionSymbols, // const std::string& requiredDimensionSymbols) template<> template<> void object::test<7>() { ensure( im_.matches(pattern_false_, pattern_false_) ); } // Test of matches(const std::string& actualDimensionSymbols, // const std::string& requiredDimensionSymbols) template<> template<> void object::test<8>() { const std::string pattern("012*TF012"); ensure( !im_.matches(pattern_false_, pattern) ); } // Test of matches(const std::string& actualDimensionSymbols, // const std::string& requiredDimensionSymbols) template<> template<> void object::test<9>() { const std::string pattern("012*TF012"); ensure( im_.matches(pattern, pattern) ); } // add(IntersectionMatrix *im) template<> template<> void object::test<10>() { // Create local matrix const std::string pattern("012*TF012"); geos::geom::IntersectionMatrix im_local(pattern); ensure_equals( im_local.toString(), pattern ); // Add local matrix to the matrix with 'FFFFFFFFF' pattern im_local.add(&im_); // Check pattern of local matrix after addition const std::string pattern_result("012FFF012"); ensure_equals( im_local.toString(), pattern_result ); ensure( im_local.matches(pattern_result) ); } // Test of set(int row, int column, int dimensionValue); template<> template<> void object::test<11>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); // Do some changes and checks im_.set(0, 0, geos::geom::Dimension::P); ensure_equals( im_.toString(), "0FFFFFFFF" ); } // Test of set(const std::string& dimensionSymbols); template<> template<> void object::test<12>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); const std::string pattern("012*TF012"); im_.set(pattern); ensure_equals( im_.toString(), pattern); } // Test of setAll(int dimensionValue); template<> template<> void object::test<13>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); const std::string pattern("000000000"); im_.setAll(geos::geom::Dimension::P); ensure_equals( im_.toString(), pattern); } // Test of setAtLeast(std::string minimumDimensionSymbols) template<> template<> void object::test<14>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); // 1. No change expected im_.setAtLeast(pattern_false_); ensure_equals( im_.toString(), pattern_false_); // 2. Set new pattern const std::string pattern_new("FT*012FT*"); const std::string pattern_expected("FFF012FFF"); im_.setAtLeast(pattern_new); ensure( im_.toString() != pattern_false_); ensure_equals( im_.toString(), pattern_expected); // 3. Set old pattern, no change expected im_.setAtLeast(pattern_false_); ensure_equals( im_.toString(), pattern_expected); } // Test of setAtLeast(int row, int column, int minimumDimensionValue); template<> template<> void object::test<15>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); // 1. No change expected im_.setAtLeast(0, 0, geos::geom::Dimension::False); ensure_equals( im_.toString(), pattern_false_); // 2. Change is expected im_.setAtLeast(0, 0, geos::geom::Dimension::A); ensure_equals( im_.toString(), "2FFFFFFFF"); } // Test of setAtLeastIfValid(int row, int column, int minimumDimensionValue) template<> template<> void object::test<16>() { // 'im_' is initialized with 'FFFFFFFFF' ensure_equals( im_.toString(), pattern_false_); // 1. No change expected im_.setAtLeast(0, 0, geos::geom::Dimension::A); ensure( im_.toString() != pattern_false_); ensure_equals( im_.get(0, 0), geos::geom::Dimension::A); } // Test of get(int row, int column) template<> template<> void object::test<17>() { // Test on the original pattern 'FFFFFFFFF' of the 'im_' object ensure_equals( im_.toString(), pattern_false_); ensure_equals( im_.get(0, 0), geos::geom::Dimension::False ); // Change first value and test again im_.setAtLeast(0, 0, geos::geom::Dimension::A); ensure_equals( im_.get(0, 0), geos::geom::Dimension::A ); // Change last value and test again im_.setAtLeast(2, 2, geos::geom::Dimension::L); ensure_equals( im_.get(2, 2), geos::geom::Dimension::L ); } // Test of isContains() template<> template<> void object::test<18>() { // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isContains() ); // 1. Test 'minimum' version of 'contains' matrix const std::string pattern_minimum("T*****FF*"); geos::geom::IntersectionMatrix minimum(pattern_minimum); ensure_equals( minimum.toString(), pattern_minimum ); ensure( minimum.isContains() ); // 2. Test other version of valid 'contains' matrix const std::string pattern_contains("T00000FF0"); geos::geom::IntersectionMatrix contains(pattern_contains); ensure_equals( contains.toString(), pattern_contains ); ensure( contains.isContains() ); // 3. Test 'not-contains' version of 'contains' matrix const std::string pattern_notcontains("T0F00F000"); geos::geom::IntersectionMatrix notcontains(pattern_notcontains); ensure_equals( notcontains.toString(), pattern_notcontains ); ensure( !notcontains.isContains() ); } // Test of isCrosses(int dimensionOfGeometryA, int dimensionOfGeometryB) template<> template<> void object::test<19>() { using geos::geom::Dimension; // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isCrosses(Dimension::L, Dimension::L) ); // P/L: dim(I(a) * I(b)) AND dim(I(a) * E(b)) im_.set("TFTFFFFFF"); ensure( im_.isCrosses(Dimension::P, Dimension::L) ); // L/P: dim(I(a) * I(b)) AND dim(I(a) * E(b)) im_.set("TFTFFFFFF"); ensure( !im_.isCrosses(Dimension::L, Dimension::P) ); // P/L: dim(I(a) * I(b)) AND dim(E(a) * I(b)) im_.set("TFFFFFTFF"); ensure( !im_.isCrosses(Dimension::P, Dimension::L) ); // L/P: dim(I(a) * I(b)) AND dim(E(a) * I(b)) im_.set("TFFFFFTFF"); ensure( im_.isCrosses(Dimension::L, Dimension::P) ); // L/L: dim(I(a) * I(b)) == 0 im_.set("0FFFFFFFF"); ensure( im_.isCrosses(Dimension::L, Dimension::L) ); // L/L: dim(I(a) * I(b)) == 1 im_.set("1FFFFFFFF"); ensure( !im_.isCrosses(Dimension::L, Dimension::L) ); } // Test of isDisjoint() template<> template<> void object::test<20>() { // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( im_.isDisjoint() ); im_.set("FF*FF****"); ensure( im_.isDisjoint() ); im_.set("FF1FF2T*0"); ensure( im_.isDisjoint() ); im_.set("*F*FF****"); ensure( !im_.isDisjoint() ); } // Test of isEquals(int dimensionOfGeometryA, int dimensionOfGeometryB) template<> template<> void object::test<21>() { using geos::geom::Dimension; // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isEquals(Dimension::L, Dimension::L) ); // Test geometries with all dimensions im_.set("0FFFFFFF2"); ensure( im_.isEquals(Dimension::P, Dimension::P) ); im_.set("1FFF0FFF2"); ensure( im_.isEquals(Dimension::L, Dimension::L) ); im_.set("2FFF1FFF2"); ensure( im_.isEquals(Dimension::A, Dimension::A) ); im_.set("0F0FFFFF2"); ensure( !im_.isEquals(Dimension::P, Dimension::P) ); im_.set("1FFF1FFF2"); ensure( im_.isEquals(Dimension::L, Dimension::L) ); im_.set("2FFF1*FF2"); ensure( !im_.isEquals(Dimension::A, Dimension::A) ); im_.set("0FFFFFFF2"); ensure( !im_.isEquals(Dimension::P, Dimension::L) ); im_.set("1FFF0FFF2"); ensure( !im_.isEquals(Dimension::L, Dimension::A) ); im_.set("2FFF1FFF2"); ensure( !im_.isEquals(Dimension::A, Dimension::P) ); } // Test of isIntersects() template<> template<> void object::test<22>() { // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isIntersects() ); im_.set("FF*FF****"); ensure( !im_.isIntersects() ); im_.set("FF1FF2T*0"); ensure( !im_.isIntersects() ); im_.set("*F*FF****"); ensure( im_.isIntersects() ); } // Test of isOverlaps(int dimensionOfGeometryA, int dimensionOfGeometryB) template<> template<> void object::test<23>() { using geos::geom::Dimension; // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isEquals(Dimension::L, Dimension::L) ); im_.set("2*2***2**"); ensure( im_.isOverlaps(Dimension::P, Dimension::P) ); im_.set("2*2***2**"); ensure( im_.isOverlaps(Dimension::A, Dimension::A) ); im_.set("2*2***2**"); ensure( !im_.isOverlaps(Dimension::P, Dimension::A) ); im_.set("2*2***2**"); ensure( !im_.isOverlaps(Dimension::L, Dimension::L) ); im_.set("1*2***2**"); ensure( im_.isOverlaps(Dimension::L, Dimension::L) ); im_.set("0FFFFFFF2"); ensure( !im_.isOverlaps(Dimension::P, Dimension::P) ); im_.set("1FFF0FFF2"); ensure( !im_.isOverlaps(Dimension::L, Dimension::L) ); im_.set("2FFF1FFF2"); ensure( !im_.isOverlaps(Dimension::A, Dimension::A) ); } // Test of isTouches(int dimensionOfGeometryA, int dimensionOfGeometryB) template<> template<> void object::test<24>() { using geos::geom::Dimension; // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isTouches(Dimension::P, Dimension::P) ); im_.set("FT*******"); ensure( im_.isTouches(Dimension::P, Dimension::A) ); im_.set("FT*******"); ensure( im_.isTouches(Dimension::A, Dimension::P) ); im_.set("FT*******"); ensure( !im_.isTouches(Dimension::P, Dimension::P)); } // Test of isWithin() template<> template<> void object::test<25>() { // Test on the FALSE matrix ensure_equals( im_.toString(), pattern_false_); ensure( !im_.isWithin() ); im_.set("T0F00F000"); ensure( im_.isWithin() ); im_.set("T00000FF0"); ensure( !im_.isWithin() ); } // Test of IntersectionMatrix* transpose() template<> template<> void object::test<26>() { using geos::geom::IntersectionMatrix; IntersectionMatrix input("012*TF012"); IntersectionMatrix transposed(input); // transpose() returns 'this' pointer to transposed object MatrixCPtr output = transposed.transpose(); ensure( output != 0 ); // TODO - mloskot - waiting for equality operators //ensure_equals( (*output), input ); ensure_equals( "0*01T12F2", transposed.toString() ); ensure_equals( "012*TF012", input.toString() ); } // Test of toString() and output operator template<> template<> void object::test<27>() { ensure( im_.toString() != "0*01T12F2" ); ensure_equals( "FFFFFFFFF", im_.toString() ); std::stringstream ss; ss << im_; ensure( ss.str() != "0*01T12F2" ); ensure_equals( "FFFFFFFFF", ss.str() ); } // Test of isCovers() template<> template<> void object::test<28>() { using geos::geom::IntersectionMatrix; ensure( IntersectionMatrix("T*****FF*").isCovers() ); ensure( IntersectionMatrix("*T****FF*").isCovers() ); ensure( IntersectionMatrix("***T**FF*").isCovers() ); ensure( IntersectionMatrix("****T*FF*").isCovers() ); } // Test of isCoveredBy() template<> template<> void object::test<29>() { using geos::geom::IntersectionMatrix; ensure( IntersectionMatrix("T*F**F***").isCoveredBy() ); ensure( IntersectionMatrix("*TF**F***").isCoveredBy() ); ensure( IntersectionMatrix("**FT*F***").isCoveredBy() ); ensure( IntersectionMatrix("**F*TF***").isCoveredBy() ); } } // namespace tut geos-3.4.2/tests/unit/geom/LineSegmentTest.cpp0000644000175000017500000000412312206417146021126 0ustar frankiefrankie// // Test Suite for geos::geom::LineSegment class. #include // geos #include #include // std #include namespace tut { // // Test Group // struct test_lineseg_data { geos::geom::Coordinate ph1; geos::geom::Coordinate ph2; geos::geom::Coordinate pv1; geos::geom::Coordinate pv2; geos::geom::LineSegment h1; geos::geom::LineSegment v1; test_lineseg_data() : ph1(0, 2), ph2(10, 2), pv1(0, 0), pv2(0, 10), h1(ph1, ph2), v1(pv1, pv2) {} }; typedef test_group group; typedef group::object object; group test_lineseg_group("geos::geom::LineSegment"); // // Test Cases // // 1 - Test reverse() template<> template<> void object::test<1>() { ensure(v1[0] == pv1); ensure(v1[1] == pv2); v1.reverse(); ensure(v1[1] == pv1); ensure(v1[0] == pv2); ensure(h1[0] == ph1); ensure(h1[1] == ph2); h1.reverse(); ensure(h1[1] == ph1); ensure(h1[0] == ph2); } // 2 - Horizontal LineSegment test template<> template<> void object::test<2>() { ensure( h1.isHorizontal() ); v1.reverse(); ensure( h1.isHorizontal() ); } // 3 - Vertical LineSegment test template<> template<> void object::test<3>() { ensure( v1.isVertical() ); v1.reverse(); ensure( v1.isVertical() ); } // 4 - Test distance() template<> template<> void object::test<4>() { ensure_equals( h1.distance(v1), 0 ); v1.reverse(); ensure_equals( h1.distance(v1), 0 ); h1.reverse(); ensure_equals( h1.distance(v1), 0 ); } // 5 - Test getLength() template<> template<> void object::test<5>() { ensure_equals( v1.getLength(), 10 ); v1.reverse(); ensure_equals( v1.getLength(), 10 ); ensure_equals( h1.getLength(), 10 ); h1.reverse(); ensure_equals( h1.getLength(), 10 ); } // 6 - Test distance again() template<> template<> void object::test<6>() { geos::geom::Coordinate p(1, 1); ensure_equals( v1.distance(p), 1 ); v1.reverse(); ensure_equals( v1.distance(p), 1 ); } } // namespace tut geos-3.4.2/tests/unit/geom/LineStringTest.cpp0000644000175000017500000003076612206417146021006 0ustar frankiefrankie// // Test Suite for geos::geom::LineString class. // tut #include #include // geos #include #include #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_linestring_data { // Typedefs used as short names by test cases typedef std::auto_ptr LineStringAutoPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; LineStringPtr empty_line_; test_linestring_data() : pm_(1000), factory_(&pm_, 0), reader_(&factory_), empty_line_(factory_.createLineString(new geos::geom::CoordinateArraySequence())) { assert(0 != empty_line_); } ~test_linestring_data() { factory_.destroyGeometry(empty_line_); empty_line_ = 0; } }; typedef test_group group; typedef group::object object; group test_linestring_group("geos::geom::LineString"); // // Test Cases // // Test of empty LineString created with user's constructor template<> template<> void object::test<1>() { using geos::geom::Coordinate; // Empty sequence of coordiantes CoordArrayPtr pseq = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", pseq != 0 ); // Create empty linstring instance LineStringAutoPtr ls(factory_.createLineString(pseq)); ensure( ls->isEmpty() ); ensure( ls->isSimple() ); ensure( ls->isValid() ); } // Test of non-tempty LineString created with user's constructor template<> template<> void object::test<2>() { using geos::geom::Coordinate; // Non-empty sequence of coordiantes const size_t size3 = 3; CoordArrayPtr pseq = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", pseq != 0 ); pseq->add(Coordinate(0, 0, 0)); pseq->add(Coordinate(5, 5, 5)); pseq->add(Coordinate(10, 10, 10)); ensure_equals( pseq->size(), size3 ); // Create non-empty linstring instance LineStringAutoPtr ls(factory_.createLineString(pseq)); ensure( !ls->isEmpty() ); ensure( ls->isSimple() ); ensure( ls->isValid() ); ensure( !ls->isClosed() ); ensure( !ls->isRing() ); GeometryPtr geo = 0; geo = ls->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = ls->getBoundary(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = ls->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( ls->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( ls->getDimension(), geos::geom::Dimension::L ); ensure_equals( ls->getBoundaryDimension(), geos::geom::Dimension::P ); ensure_equals( ls->getCoordinateDimension(), 3 ); ensure_equals( ls->getNumPoints(), size3 ); ensure_equals( ls->getArea(), 0.0 ); ensure( ls->getLength() != 0.0 ); } // Test of incomplete LineString user's constructor throwing the IllegalArgumentException template<> template<> void object::test<3>() { // Single-element sequence of coordiantes CoordArrayPtr pseq = 0; try { pseq = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", pseq != 0 ); pseq->add(geos::geom::Coordinate(0, 0, 0)); ensure_equals( pseq->size(), 1u ); // Create incomplete linstring LineStringAutoPtr ls(factory_.createLineString(pseq)); fail("IllegalArgumentException expected."); } catch (geos::util::IllegalArgumentException const& e) { // TODO - mloskot - is waiting for "exception-safety" and bugs resolution // If removed, memory 3 leaks occur //delete pseq; const char* msg = e.what(); // OK ensure( msg != 0 ); } } // Test of copy constructor template<> template<> void object::test<4>() { using geos::geom::Coordinate; // Non-empty sequence of coordiantes const size_t size = 3; CoordArrayPtr pseq = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", pseq != 0 ); pseq->add(Coordinate(0, 0, 0)); pseq->add(Coordinate(5, 5, 5)); pseq->add(Coordinate(10, 10, 10)); ensure_equals( pseq->size(), size ); // Create examplar of linstring instance LineStringAutoPtr examplar(factory_.createLineString(pseq)); // Create copy LineStringAutoPtr copy(dynamic_cast(examplar->clone())); ensure( 0 != copy.get() ); ensure( !copy->isEmpty() ); ensure( copy->isSimple() ); ensure( copy->isValid() ); ensure( !copy->isClosed() ); ensure( !copy->isRing() ); GeometryPtr geo = 0; geo = copy->getEnvelope(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = copy->getBoundary(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); geo = copy->convexHull(); ensure( geo != 0 ); ensure( !geo->isEmpty() ); factory_.destroyGeometry(geo); ensure_equals( copy->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( copy->getDimension(), geos::geom::Dimension::L ); ensure_equals( copy->getBoundaryDimension(), geos::geom::Dimension::P ); ensure_equals( copy->getNumPoints(), size ); ensure_equals( copy->getArea(), 0.0 ); ensure( copy->getLength() != 0.0 ); } // Test of isClosed() and isRing() for empty linestring template<> template<> void object::test<5>() { ensure( !empty_line_->isClosed() ); ensure( !empty_line_->isRing() ); } // Test of getEnvelope() for empty linestring template<> template<> void object::test<6>() { GeometryPtr geo = 0; geo = empty_line_->getEnvelope(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); } // Test of getBoundary() for empty linestring template<> template<> void object::test<7>() { GeometryPtr geo = 0; geo = empty_line_->getBoundary(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); } // Test of convexHull() for empty linestring template<> template<> void object::test<8>() { GeometryPtr geo = 0; geo = empty_line_->convexHull(); ensure( geo != 0 ); ensure( geo->isEmpty() ); factory_.destroyGeometry(geo); } // Test of getGeometryTypeId() for empty linestring template<> template<> void object::test<9>() { ensure_equals( empty_line_->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); } // Test of getDimension() for empty linestring template<> template<> void object::test<10>() { ensure_equals( empty_line_->getDimension(), geos::geom::Dimension::L ); } // Test of getBoundaryDimension() for empty linestring template<> template<> void object::test<11>() { ensure_equals( empty_line_->getBoundaryDimension(), geos::geom::Dimension::P ); } // Test of getNumPoints() for empty linestring template<> template<> void object::test<12>() { ensure_equals( empty_line_->getNumPoints(), 0u ); } // Test of getLength() for empty linestring template<> template<> void object::test<13>() { ensure_equals( empty_line_->getLength(), 0.0 ); } // Test of getArea() for empty linestring template<> template<> void object::test<14>() { ensure_equals( empty_line_->getArea(), 0.0 ); } // Test of isClosed() and isRing() for non-empty linestring template<> template<> void object::test<15>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); LineStringPtr line = dynamic_cast(geo); ensure(line != 0); ensure( !line->isEmpty() ); ensure( !line->isClosed() ); ensure( !line->isRing() ); ensure( line->getCoordinateDimension() == 2 ); // FREE TESTED LINESTRING factory_.destroyGeometry(line); } // Test of getEnvelope() for non-empty linestring template<> template<> void object::test<16>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); LineStringPtr line = dynamic_cast(geo); ensure(line != 0); GeometryPtr envelope = line->getEnvelope(); ensure( envelope != 0 ); ensure( !envelope->isEmpty() ); ensure_equals( envelope->getDimension(), geos::geom::Dimension::A ); factory_.destroyGeometry(envelope); // FREE TESTED LINESTRING factory_.destroyGeometry(line); } // Test of getBoundary() for non-empty linestring template<> template<> void object::test<17>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); LineStringPtr line = dynamic_cast(geo); ensure(line != 0); GeometryPtr boundary = line->getBoundary(); ensure( boundary != 0 ); ensure( !boundary->isEmpty() ); ensure_equals( boundary->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); ensure_equals( boundary->getDimension(), geos::geom::Dimension::P ); factory_.destroyGeometry(boundary); // FREE TESTED LINESTRING factory_.destroyGeometry(line); } // Test of convexHull() for non-empty linestring template<> template<> void object::test<18>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); LineStringPtr line = dynamic_cast(geo); ensure(line != 0); GeometryPtr hull = line->convexHull(); ensure( hull != 0 ); ensure( !hull->isEmpty() ); ensure_equals( hull->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( hull->getDimension(), geos::geom::Dimension::A ); factory_.destroyGeometry(hull); // FREE TESTED LINESTRING factory_.destroyGeometry(line); } // Test of getGeometryTypeId() for non-empty linestring template<> template<> void object::test<19>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); ensure_equals( geo->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getDimension() for non-empty linestring template<> template<> void object::test<20>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); ensure_equals( geo->getDimension(), geos::geom::Dimension::L ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getBoundaryDimension() for non-empty linestring template<> template<> void object::test<21>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); ensure_equals( geo->getBoundaryDimension(), geos::geom::Dimension::P ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getNumPoints() for non-empty linestring template<> template<> void object::test<22>() { const size_t size = 4; GeometryPtr geo = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( geo != 0 ); ensure_equals( geo->getNumPoints(), size ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getLength() for non-empty linestring template<> template<> void object::test<23>() { const double tolerance = 0.0001; const double expected = 2 * 14.142135600000000; GeometryPtr geo = reader_.read("LINESTRING (0 0, 10 10, 20 0)"); ensure( geo != 0 ); ensure( geo->getLength() != 0.0 ); const double diff = std::fabs(geo->getLength() - expected); ensure( diff <= tolerance ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getArea() for non-empty linestring template<> template<> void object::test<24>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 10 10, 20 0)"); ensure( geo != 0 ); ensure_equals( geo->getArea(), 0.0 ); // FREE TESTED LINESTRING factory_.destroyGeometry(geo); } // Test of getGeometryType() for non-empty Polygon template<> template<> void object::test<25>() { GeometryPtr geo = reader_.read("LINESTRING (0 0, 10 10, 20 0)"); ensure( geo != 0 ); const std::string type("LineString"); ensure_equals( geo->getGeometryType(), type ); // FREE MEMORY factory_.destroyGeometry(geo); } } // namespace tut geos-3.4.2/tests/unit/geom/LinearRingTest.cpp0000644000175000017500000002340612206417146020753 0ustar frankiefrankie// // Test Suite for geos::geom::LinearRing class. // tut #include // geos #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_linearring_data { // Typedefs used as short names by test cases typedef geos::geom::Geometry* GeometryPtr; typedef geos::geom::Geometry const* GeometryCPtr; typedef geos::geom::Coordinate* CoordinatePtr; typedef geos::geom::Coordinate const* CoordinateCPtr; typedef geos::geom::CoordinateArraySequence* CoordArrayPtr; typedef geos::geom::CoordinateArraySequence const* CoordArrayCPtr; typedef geos::geom::LinearRing* LinearRingPtr; typedef geos::geom::LinearRing const* LinearRingCPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; geos::geom::LinearRing empty_ring_; LinearRingPtr ring_; const size_t ring_size_; test_linearring_data() : pm_(1000), factory_(&pm_, 0), reader_(&factory_), empty_ring_(new geos::geom::CoordinateArraySequence(), &factory_), ring_size_(7) { // Create non-empty LinearRing GeometryPtr geo = 0; geo = reader_.read("LINEARRING(0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10)"); ring_ = dynamic_cast(geo); } ~test_linearring_data() { factory_.destroyGeometry(ring_); } private: // Declare type as noncopyable test_linearring_data(const test_linearring_data& other); test_linearring_data& operator=(const test_linearring_data& rhs); }; typedef test_group group; typedef group::object object; group test_linearring_group("geos::geom::LinearRing"); // // Test Cases // // Test of user's constructor to create non-empty LinearRing template<> template<> void object::test<1>() { using geos::geom::Coordinate; // Non-empty sequence of coordiantes const size_t size7 = 7; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", coords != 0 ); coords->add(Coordinate(0, 10)); coords->add(Coordinate(5, 5)); coords->add(Coordinate(10, 5)); coords->add(Coordinate(15, 10)); coords->add(Coordinate(10, 15)); coords->add(Coordinate(5, 15)); coords->add(Coordinate(0, 10)); ensure_equals( coords->size(), size7 ); try { // Create non-empty linearring instance geos::geom::LinearRing ring(coords, &factory_); ensure( !ring.isEmpty() ); ensure( ring.isClosed() ); ensure( ring.isRing() ); ensure( ring.isSimple() ); ensure( ring.isValid() ); //ensure_equals( rint.getNumPoints(), 7u ); } catch (geos::util::IllegalArgumentException const& e) { fail(e.what()); } } // Test of copy contructor template<> template<> void object::test<2>() { geos::geom::LinearRing copy(empty_ring_); ensure( copy.isEmpty() ); } // Test of isEmpty() for empty LinearRing template<> template<> void object::test<3>() { ensure( empty_ring_.isEmpty() ); } // Test of isClosed() for empty LinearRing template<> template<> void object::test<4>() { ensure( empty_ring_.isClosed() ); } // Test of isRing() for empty LinearRing template<> template<> void object::test<5>() { ensure( empty_ring_.isRing() ); } // Test of isSimple() for empty LinearRing template<> template<> void object::test<6>() { ensure( empty_ring_.isSimple() ); } // Test of isValid() for empty LinearRing template<> template<> void object::test<7>() { ensure( empty_ring_.isValid() ); } // Test of getEnvelope() for empty LinearRing template<> template<> void object::test<8>() { GeometryPtr envelope = empty_ring_.getEnvelope(); ensure( envelope != 0 ); ensure( envelope->isEmpty() ); factory_.destroyGeometry(envelope); } // Test of getBoundary() for empty LinearRing template<> template<> void object::test<9>() { GeometryPtr boundary = empty_ring_.getBoundary(); ensure( boundary != 0 ); ensure( boundary->isEmpty() ); factory_.destroyGeometry(boundary); } // Test of convexHull() for empty LinearRing template<> template<> void object::test<10>() { GeometryPtr hull = empty_ring_.convexHull(); ensure( hull != 0 ); ensure( hull->isEmpty() ); factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for empty LinearRing template<> template<> void object::test<11>() { ensure_equals( empty_ring_.getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); } // Test of getDimension() for empty LinearRing template<> template<> void object::test<12>() { ensure_equals( empty_ring_.getDimension(), geos::geom::Dimension::L ); } // Test of getBoundaryDimension() for empty LinearRing template<> template<> void object::test<13>() { ensure_equals( empty_ring_.getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for empty LinearRing template<> template<> void object::test<14>() { ensure_equals( empty_ring_.getNumPoints(), 0u ); } // Test of getLength() for empty LinearRing template<> template<> void object::test<15>() { ensure_equals( empty_ring_.getLength(), 0.0 ); } // Test of getArea() for empty LinearRing template<> template<> void object::test<16>() { ensure_equals( empty_ring_.getArea(), 0.0 ); } // Test of isEmpty() for non-empty LinearRing template<> template<> void object::test<17>() { ensure(ring_ != 0); ensure( !ring_->isEmpty() ); } // Test of isClosed() and isRing() for non-empty LinearRing template<> template<> void object::test<18>() { ensure(ring_ != 0); ensure( ring_->isClosed() ); ensure( ring_->isRing() ); } // Test of getEnvelope() for non-empty LinearRing template<> template<> void object::test<19>() { ensure(ring_ != 0); GeometryPtr envelope = ring_->getEnvelope(); ensure( envelope != 0 ); ensure( !envelope->isEmpty() ); ensure_equals( envelope->getDimension(), geos::geom::Dimension::A ); // FREE MEMORY factory_.destroyGeometry(envelope); } // Test of getBoundary() for non-empty LinearRing template<> template<> void object::test<20>() { ensure(ring_ != 0); GeometryPtr boundary = ring_->getBoundary(); ensure( boundary != 0 ); // OGC 05-126, Version: 1.1.0, Chapter 6.1.6 Curve ensure( "[OGC] The boundary of a closed Curve must be empty.", boundary->isEmpty() ); // FREE MEMORY factory_.destroyGeometry(boundary); } // Test of convexHull() for non-empty LinearRing template<> template<> void object::test<21>() { ensure(ring_ != 0); GeometryPtr hull = ring_->convexHull(); ensure( hull != 0 ); ensure( !hull->isEmpty() ); ensure_equals( hull->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( hull->getDimension(), geos::geom::Dimension::A ); // FREE MEMORY factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for non-empty LinearRing template<> template<> void object::test<22>() { ensure(ring_ != 0); ensure_equals( ring_->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); } // Test of getDimension() for non-empty LinearRing template<> template<> void object::test<23>() { ensure(ring_ != 0); ensure_equals( ring_->getDimension(), geos::geom::Dimension::L ); } // Test of getBoundaryDimension() for non-empty LinearRing template<> template<> void object::test<24>() { ensure(ring_ != 0); ensure_equals( ring_->getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for non-empty LinearRing template<> template<> void object::test<25>() { ensure(ring_ != 0); ensure_equals( ring_->getNumPoints(), ring_size_ ); } // Test of getLength() for non-empty LinearRing template<> template<> void object::test<26>() { ensure(ring_ != 0); ensure( ring_->getLength() != 0.0 ); const double tolerance = 0.0001; const double expected = 38.284271247461902; const double diff = std::fabs(ring_->getLength() - expected); ensure( diff <= tolerance ); } // Test of getArea() for non-empty LinearRing template<> template<> void object::test<27>() { ensure(ring_ != 0); ensure_equals( ring_->getArea(), 0.0 ); } // Test of exception thrown when constructing non-empty and non-closed LinearRing template<> template<> void object::test<28>() { try { GeometryPtr geo = reader_.read("LINEARRING(0 0, 5 5, 10 10)"); ensure(geo != 0); // FREE TESTED LINEARRING factory_.destroyGeometry(geo); fail("IllegalArgumentException expected."); } catch (geos::util::IllegalArgumentException const& e) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } // TTest of exception thrown when constructing a self-intersecting LinearRing template<> template<> void object::test<29>() { try { // Construct LinearRing self-intersecting in point (5,5) GeometryPtr geo = reader_.read("LINEARRING(0 0, 5 5, 10 10, 15 5, 5 5, 0 10)"); ensure(geo != 0); LinearRingPtr ring = dynamic_cast(geo); ensure(ring != 0); ensure( !ring->isValid() ); // FREE TESTED LINEARRING factory_.destroyGeometry(geo); fail("IllegalArgumentException expected."); } catch (geos::util::IllegalArgumentException const& e) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } // Test of getGeometryType() for non-empty LinearRing template<> template<> void object::test<30>() { ensure( ring_ != 0 ); const std::string type("LinearRing"); ensure_equals( ring_->getGeometryType(), type ); } } // namespace tut geos-3.4.2/tests/unit/geom/LocationTest.cpp0000644000175000017500000000330312206417146020463 0ustar frankiefrankie// // Test Suite for geos::geom::Location class. // tut #include // geos #include #include namespace tut { // // Test Group // // Common data used by tests struct test_location_data { int undef; int interior; int boundary; int exterior; test_location_data() : undef(geos::geom::Location::UNDEF), interior(geos::geom::Location::INTERIOR), boundary(geos::geom::Location::BOUNDARY), exterior(geos::geom::Location::EXTERIOR) {} }; typedef test_group group; typedef group::object object; group test_location_group("geos::geom::Location"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { ensure("NOTE: Location has no default constructor.", true); } // Test of toLocationSymbol() template<> template<> void object::test<2>() { using geos::geom::Location; ensure_equals( Location::toLocationSymbol(exterior), 'e' ); ensure_equals( Location::toLocationSymbol(boundary), 'b' ); ensure_equals( Location::toLocationSymbol(interior), 'i' ); ensure_equals( Location::toLocationSymbol(undef), '-' ); } // Test of toLocationSymbol() throwing IllegalArgumentException template<> template<> void object::test<3>() { using geos::geom::Location; try { Location::toLocationSymbol(101); Location::toLocationSymbol(-101); fail("IllegalArgumentException expected"); } catch ( geos::util::IllegalArgumentException const& e ) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } } // namespace tut geos-3.4.2/tests/unit/geom/MultiLineStringTest.cpp0000644000175000017500000000122112206417146022001 0ustar frankiefrankie// // Test Suite for geos::geom::MultiLineString class. #include // geos #include namespace tut { // // Test Group // // Common data used by tests struct test_multilinestring_data { test_multilinestring_data() {} }; typedef test_group group; typedef group::object object; group test_multilinestring_group("geos::geom::MultiLineString"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { //inform("Test not implemented!"); } } // namespace tut geos-3.4.2/tests/unit/geom/MultiPointTest.cpp0000644000175000017500000002016212206417146021021 0ustar frankiefrankie// // Test Suite for geos::geom::MultiPoint class. // tut #include #include // geos #include #include #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_multipoint_data { typedef std::auto_ptr MultiPointAutoPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; MultiPointAutoPtr empty_mp_; MultiPointPtr mp_; const size_t mp_size_; test_multipoint_data() : pm_(1.0), factory_(&pm_, 0), reader_(&factory_), empty_mp_(factory_.createMultiPoint()), mp_size_(5) { // Create non-empty MultiPoint GeometryPtr geo = 0; geo = reader_.read("MULTIPOINT(0 0, 5 5, 10 10, 15 15, 20 20)"); mp_ = dynamic_cast(geo); } ~test_multipoint_data() { factory_.destroyGeometry(mp_); } private: // Declare type as noncopyable test_multipoint_data(const test_multipoint_data& other); test_multipoint_data& operator=(const test_multipoint_data& rhs); }; typedef test_group group; typedef group::object object; group test_multipoint_group("geos::geom::MultiPoint"); // // Test Cases // // Test of user's constructor template<> template<> void object::test<1>() { const size_t size0 = 0; MultiPointAutoPtr mp(factory_.createMultiPoint()); ensure( mp->isEmpty() ); ensure( mp->isSimple() ); ensure( mp->isValid() ); ensure( mp->getCentroid() == 0 ); ensure_equals( mp->getNumPoints(), size0 ); ensure_equals( mp->getNumGeometries(), size0 ); } // Test of copy constructor template<> template<> void object::test<2>() { const size_t size0 = 0; MultiPointAutoPtr copy(dynamic_cast(empty_mp_->clone())); ensure( 0 != copy.get() ); ensure( copy->isEmpty() ); ensure( copy->isSimple() ); ensure( copy->isValid() ); ensure( copy->getCentroid() == 0 ); ensure_equals( copy->getNumPoints(), size0 ); ensure_equals( copy->getNumGeometries(), size0 ); } // Test of empty MultiPoint constructed by WKTReader template<> template<> void object::test<3>() { const size_t size0 = 0; GeometryPtr geo = reader_.read("MULTIPOINT EMPTY"); MultiPointPtr mp = dynamic_cast(geo); ensure( mp->isEmpty() ); ensure( mp->isSimple() ); ensure( mp->isValid() ); ensure( mp->getCentroid() == 0 ); ensure_equals( mp->getNumPoints(), size0 ); ensure_equals( mp->getNumGeometries(), size0 ); // FREE MEMORY factory_.destroyGeometry(geo); } // Test of isEmpty() for empty MultiPoint template<> template<> void object::test<4>() { ensure( empty_mp_->isEmpty() ); } // Test of isSimple() for empty MultiPoint template<> template<> void object::test<5>() { ensure( empty_mp_->isSimple() ); } // Test of isValid() for empty MultiPoint template<> template<> void object::test<6>() { ensure( empty_mp_->isValid() ); } // Test of getEnvelope() for empty MultiPoint template<> template<> void object::test<7>() { GeometryPtr envelope = empty_mp_->getEnvelope(); ensure( envelope != 0 ); ensure( envelope->isEmpty() ); factory_.destroyGeometry(envelope); } // Test of getBoundary() for empty MultiPoint template<> template<> void object::test<8>() { GeometryPtr boundary = empty_mp_->getBoundary(); ensure( boundary != 0 ); ensure( boundary->isEmpty() ); factory_.destroyGeometry(boundary); } // Test of convexHull() for empty MultiPoint template<> template<> void object::test<9>() { GeometryPtr hull = empty_mp_->convexHull(); ensure( hull != 0 ); ensure( hull->isEmpty() ); factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for empty MultiPoint template<> template<> void object::test<10>() { ensure_equals( empty_mp_->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); } // Test of getGeometryType() for empty MultiPoint template<> template<> void object::test<11>() { const std::string type("MultiPoint"); ensure_equals( empty_mp_->getGeometryType(), type ); } // Test of getDimension() for empty MultiPoint template<> template<> void object::test<12>() { ensure_equals( empty_mp_->getDimension(), geos::geom::Dimension::P ); } // Test of getBoundaryDimension() for empty MultiPoint template<> template<> void object::test<13>() { ensure_equals( empty_mp_->getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for empty MultiPoint template<> template<> void object::test<14>() { ensure_equals( empty_mp_->getNumPoints(), 0u ); } // Test of getLength() for empty MultiPoint template<> template<> void object::test<15>() { ensure_equals( empty_mp_->getLength(), 0.0 ); } // Test of getArea() for empty MultiPoint template<> template<> void object::test<16>() { ensure_equals( empty_mp_->getArea(), 0.0 ); } // Test of isEmpty() for non-empty LinearRing template<> template<> void object::test<17>() { ensure(mp_ != 0); ensure( !mp_->isEmpty() ); } // Test of getEnvelope() for non-empty LinearRing template<> template<> void object::test<18>() { ensure(mp_ != 0); GeometryPtr envelope = mp_->getEnvelope(); ensure( envelope != 0 ); ensure( !envelope->isEmpty() ); ensure_equals( envelope->getDimension(), geos::geom::Dimension::A ); // FREE MEMORY factory_.destroyGeometry(envelope); } // Test of getBoundary() for non-empty LinearRing template<> template<> void object::test<19>() { ensure(mp_ != 0); GeometryPtr boundary = mp_->getBoundary(); ensure( boundary != 0 ); // OGC 05-126, Version: 1.1.0, Chapter 6.1.5 MultiPoint ensure( "[OGC] The boundary of a MultiPoint is the empty set.", boundary->isEmpty() ); // FREE MEMORY factory_.destroyGeometry(boundary); } // Test of convexHull() for non-empty LinearRing template<> template<> void object::test<20>() { ensure(mp_ != 0); GeometryPtr hull = mp_->convexHull(); ensure( hull != 0 ); ensure( !hull->isEmpty() ); ensure_equals( hull->getGeometryTypeId(), geos::geom::GEOS_LINESTRING ); ensure_equals( hull->getDimension(), geos::geom::Dimension::L ); // FREE MEMORY factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for non-empty LinearRing template<> template<> void object::test<21>() { ensure(mp_ != 0); ensure_equals( mp_->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); } // Test of getGeometryType() for non-empty Polygon template<> template<> void object::test<22>() { ensure( mp_ != 0 ); const std::string type("MultiPoint"); ensure_equals( mp_->getGeometryType(), type ); } // Test of getDimension() for non-empty LinearRing template<> template<> void object::test<23>() { ensure(mp_ != 0); ensure_equals( mp_->getDimension(), geos::geom::Dimension::P ); } // Test of getBoundaryDimension() for non-empty LinearRing template<> template<> void object::test<24>() { ensure(mp_ != 0); ensure_equals( mp_->getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for non-empty LinearRing template<> template<> void object::test<25>() { ensure(mp_ != 0); ensure_equals( mp_->getNumPoints(), mp_size_ ); } // Test of getLength() for non-empty LinearRing template<> template<> void object::test<26>() { ensure(mp_ != 0); ensure_equals( mp_->getLength(), 0.0 ); } // Test of getArea() for non-empty LinearRing template<> template<> void object::test<27>() { ensure(mp_ != 0); ensure_equals( mp_->getArea(), 0.0 ); } // Test of ParseException thrown when constructing MultiPoint from invalind WKT template<> template<> void object::test<28>() { try { GeometryPtr geo = reader_.read("MULTIPOINT(0 0, 5)"); ensure(geo != 0); // FREE TESTED LINEARRING factory_.destroyGeometry(geo); fail("ParseException expected."); } catch (geos::io::ParseException const& e) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } } // namespace tut geos-3.4.2/tests/unit/geom/MultiPolygonTest.cpp0000644000175000017500000000117312206417146021360 0ustar frankiefrankie// // Test Suite for geos::geom::MultiPolygon class. #include // geos #include namespace tut { // // Test Group // // Common data used by tests struct test_multipolygon_data { test_multipolygon_data() {} }; typedef test_group group; typedef group::object object; group test_multipolygon_group("geos::geom::MultiPolygon"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { //inform("Test not implemented!"); } } // namespace tut geos-3.4.2/tests/unit/geom/PointTest.cpp0000644000175000017500000002747612206417146020025 0ustar frankiefrankie// // Test Suite for geos::geom::Point class. #include // geos #include #include #include #include #include #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used by tests struct test_point_data { typedef geos::geom::Coordinate* CoordinatePtr; typedef geos::geom::Coordinate const* CoordinateCPtr; typedef geos::geom::Geometry* GeometryPtr; typedef std::auto_ptr GeometryAutoPtr; typedef geos::geom::Geometry const* GeometryCPtr; typedef geos::geom::Point* PointPtr; typedef std::auto_ptr PointAutoPtr; typedef geos::geom::Point const* PointCPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; PointAutoPtr empty_point_; PointPtr point_; test_point_data() : pm_(1000), factory_(&pm_, 0), reader_(&factory_), empty_point_(factory_.createPoint()) { // Create non-empty Point GeometryPtr geo = 0; geo = reader_.read("POINT(1.234 5.678)"); point_ = dynamic_cast(geo); } ~test_point_data() { factory_.destroyGeometry(point_); } }; typedef test_group group; typedef group::object object; group test_point_group("geos::geom::Point"); // // Test Cases // // Test of user's constructor to build empty Point template<> template<> void object::test<1>() { PointAutoPtr point(factory_.createPoint()); ensure( point->isEmpty() ); } // Test of user's constructor to build non-empty Point template<> template<> void object::test<2>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; CoordinateArraySequence* coords = new CoordinateArraySequence(); ensure( coords != 0 ); coords->add(Coordinate(1.234, 5.678)); PointAutoPtr point(factory_.createPoint(coords)); ensure( !point->isEmpty() ); // currently the empty CoordinateArraySequence constructor // produces a dimension 3 sequence. ensure( point->getCoordinateDimension() == 3 ); } // Test of user's constructor throwing IllegalArgumentException template<> template<> void object::test<3>() { using geos::geom::Coordinate; using geos::geom::CoordinateArraySequence; // TODO - mloskot - temporary solution of Bug #89 CoordinateArraySequence* coords = 0; try { coords = new CoordinateArraySequence(); ensure( coords != 0 ); coords->add(Coordinate(1.234, 5.678)); coords->add(Coordinate(4.321, 8.765)); PointAutoPtr point(factory_.createPoint(coords)); fail("IllegalArgumentException expected."); } catch (geos::util::IllegalArgumentException const& e) { // TODO - mloskot - Bug #89: Possible memory leaks caused by Point constructor //delete coords; const char* msg = e.what(); // ok ensure( msg != 0 ); } } // Test of copy constructor template<> template<> void object::test<4>() { GeometryAutoPtr copy(empty_point_->clone()); ensure( copy->isEmpty() ); } // Test of isEmpty() for empty Point template<> template<> void object::test<5>() { ensure( empty_point_->isEmpty() ); } // Test of isSimple() for empty Point template<> template<> void object::test<6>() { ensure( empty_point_->isSimple() ); } // Test of isValid() for empty Point template<> template<> void object::test<7>() { ensure( empty_point_->isValid() ); } // Test of getEnvelope() for empty Point template<> template<> void object::test<8>() { GeometryPtr envelope = empty_point_->getEnvelope(); ensure( envelope != 0 ); ensure( envelope->isEmpty() ); factory_.destroyGeometry(envelope); } // Test of getBoundary() for empty Point template<> template<> void object::test<9>() { GeometryPtr boundary = empty_point_->getBoundary(); ensure( boundary != 0 ); ensure( boundary->isEmpty() ); factory_.destroyGeometry(boundary); } // Test of convexHull() for empty Point template<> template<> void object::test<10>() { GeometryPtr hull = empty_point_->convexHull(); ensure( hull != 0 ); ensure( hull->isEmpty() ); factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for empty Point template<> template<> void object::test<11>() { ensure_equals( empty_point_->getGeometryTypeId(), geos::geom::GEOS_POINT ); } // Test of getGeometryType() for empty Polygon template<> template<> void object::test<12>() { const std::string type("Point"); ensure_equals( empty_point_->getGeometryType(), type ); } // Test of getDimension() for empty Point template<> template<> void object::test<13>() { ensure_equals( empty_point_->getDimension(), geos::geom::Dimension::P ); } // Test of getBoundaryDimension() for empty Point template<> template<> void object::test<14>() { ensure_equals( empty_point_->getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for empty Point template<> template<> void object::test<15>() { ensure_equals( empty_point_->getNumPoints(), (size_t)0 ); } // Test of getLength() for empty Point template<> template<> void object::test<16>() { ensure_equals( empty_point_->getLength(), 0 ); } // Test of getArea() for empty Point template<> template<> void object::test<17>() { ensure_equals( empty_point_->getArea(), 0 ); } // Test of isEmpty() for non-empty Point template<> template<> void object::test<18>() { ensure( !point_->isEmpty() ); } // Test of isSimple() for non-empty Point template<> template<> void object::test<19>() { ensure( point_->isSimple() ); } // Test of isValid() for non-empty Point template<> template<> void object::test<20>() { ensure( point_->isValid() ); } // Test of getEnvelope() for non-empty Point template<> template<> void object::test<21>() { GeometryPtr envelope = point_->getEnvelope(); ensure( envelope != 0 ); ensure( !envelope->isEmpty() ); factory_.destroyGeometry(envelope); } // Test of getBoundary() for non-empty Point template<> template<> void object::test<22>() { GeometryPtr boundary = point_->getBoundary(); ensure( boundary != 0 ); ensure( boundary->isEmpty() ); factory_.destroyGeometry(boundary); } // Test of convexHull() for non-empty Point template<> template<> void object::test<23>() { GeometryPtr hull = point_->convexHull(); ensure( hull != 0 ); ensure( !hull->isEmpty() ); factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for non-empty Point template<> template<> void object::test<24>() { ensure_equals( point_->getGeometryTypeId(), geos::geom::GEOS_POINT ); } // Test of getGeometryType() for non-empty Polygon template<> template<> void object::test<25>() { const std::string type("Point"); ensure_equals( point_->getGeometryType(), type ); } // Test of getDimension() for non-empty Point template<> template<> void object::test<26>() { ensure_equals( point_->getDimension(), geos::geom::Dimension::P ); } // Test of getBoundaryDimension() for non-empty Point template<> template<> void object::test<27>() { ensure_equals( empty_point_->getBoundaryDimension(), geos::geom::Dimension::False ); } // Test of getNumPoints() for non-empty Point template<> template<> void object::test<28>() { ensure_equals( point_->getNumPoints(), (size_t)1 ); } // Test of getLength() for non-empty Point template<> template<> void object::test<29>() { ensure_equals( point_->getLength(), 0 ); } // Test of getArea() for non-empty Point template<> template<> void object::test<30>() { ensure_equals( point_->getArea(), 0 ); } // Test of equals() for empty Point template<> template<> void object::test<31>() { GeometryAutoPtr geo(empty_point_->clone()); ensure( !empty_point_->equals(geo.get()) ); } // Test of equals() for non-empty Point (1.234,5.678) template<> template<> void object::test<32>() { GeometryPtr p1 = reader_.read("POINT(1.234 5.678)"); GeometryPtr p2 = reader_.read("POINT(1.234 5.678)"); // WARNING! If test fails, memory leaks occur. ensure( p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Point (1.23 5.67) template<> template<> void object::test<33>() { GeometryPtr p1 = reader_.read("POINT(1.23 5.67)"); GeometryPtr p2 = reader_.read("POINT(1.23 5.67)"); // WARNING! If test fails, memory leaks occur. ensure( p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points (1.235 5.678) and (1.234 5.678) template<> template<> void object::test<34>() { GeometryPtr p1 = reader_.read("POINT(1.235 5.678)"); GeometryPtr p2 = reader_.read("POINT(1.234 5.678)"); // WARNING! If test fails, memory leaks occur. ensure( !p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points (1.2334 5.678) and (1.2333 5.678) template<> template<> void object::test<35>() { GeometryPtr p1 = reader_.read("POINT(1.2334 5.678)"); GeometryPtr p2 = reader_.read("POINT(1.2333 5.678)"); // WARNING! If test fails, memory leaks occur. ensure( p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points (1.2334 5.678) and (1.2335 5.678) template<> template<> void object::test<36>() { GeometryPtr p1 = reader_.read("POINT(1.2334 5.678)"); GeometryPtr p2 = reader_.read("POINT(1.2335 5.678)"); // WARNING! If test fails, memory leaks occur. ensure( !p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points (1.2324 5.678) and (1.2325 5.678) template<> template<> void object::test<37>() { GeometryPtr p1 = reader_.read("POINT(1.2324 5.678)"); GeometryPtr p2 = reader_.read("POINT(1.2325 5.678)"); // WARNING! If test fails, memory leaks occur. ensure( !p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points (1.2324 5.678) and (EMPTY) template<> template<> void object::test<38>() { GeometryPtr p1 = reader_.read("POINT(1.2324 5.678)"); GeometryPtr p2 = reader_.read("POINT EMPTY"); // WARNING! If test fails, memory leaks occur. ensure( !p1->equals(p2) ); // FREE MEMORY factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); } // Test of equals() for non-empty Points with negative coordiantes template<> template<> void object::test<39>() { GeometryPtr pLo = reader_.read("POINT(-1.233 5.678)"); GeometryPtr pHi = reader_.read("POINT(-1.232 5.678)"); GeometryPtr p1 = reader_.read("POINT(-1.2326 5.678)"); GeometryPtr p2 = reader_.read("POINT(-1.2325 5.678)"); GeometryPtr p3 = reader_.read("POINT(-1.2324 5.678)"); ensure( !p1->equals(p2) ); ensure( p3->equals(p2) ); ensure( p1->equals(pLo) ); ensure( p2->equals(pHi) ); ensure( p3->equals(pHi) ); // FREE MEMORY factory_.destroyGeometry(pLo); factory_.destroyGeometry(pHi); factory_.destroyGeometry(p1); factory_.destroyGeometry(p2); factory_.destroyGeometry(p3); } // Test of getCoordinateDimension() for 2d/3d. template<> template<> void object::test<40>() { GeometryPtr p = reader_.read("POINT(-1.233 5.678 1.0)"); ensure( p->getCoordinateDimension() == 3 ); delete p; p = reader_.read("POINT(-1.233 5.678)"); ensure( p->getCoordinateDimension() == 2 ); delete p; } } // namespace tut geos-3.4.2/tests/unit/geom/PolygonTest.cpp0000644000175000017500000003262012206417146020346 0ustar frankiefrankie// // Test Suite for geos::geom::Polygon class. #include #include // geos #include #include #include #include #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_polygon_data { // Typedefs used as short names by test cases typedef std::auto_ptr GeometryAutoPtr; typedef std::auto_ptr PolygonAutoPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; PolygonAutoPtr empty_poly_; PolygonPtr poly_; const size_t poly_size_; test_polygon_data() : pm_(1), factory_(&pm_, 0), reader_(&factory_), empty_poly_(factory_.createPolygon()), poly_size_(7) { // Create non-empty LinearRing GeometryPtr geo = 0; geo = reader_.read("POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))"); poly_ = dynamic_cast(geo); } ~test_polygon_data() { // FREE MEMORY factory_.destroyGeometry(poly_); } private: // Declare type as noncopyable test_polygon_data(const test_polygon_data& other); test_polygon_data& operator=(const test_polygon_data& rhs); }; typedef test_group group; typedef group::object object; group test_polygon_group("geos::geom::Polygon"); // // Test Cases // // Test of user's constructor to create non-empty valid Polygon template<> template<> void object::test<1>() { using geos::geom::Coordinate; // Create non-empty Coordiantes sequence for Exterior LinearRing const size_t size = 7; CoordArrayPtr coords = new geos::geom::CoordinateArraySequence(); ensure( "sequence is null pointer.", coords != 0 ); coords->add(Coordinate(0, 10)); coords->add(Coordinate(5, 5)); coords->add(Coordinate(10, 5)); coords->add(Coordinate(15, 10)); coords->add(Coordinate(10, 15)); coords->add(Coordinate(5, 15)); coords->add(Coordinate(0, 10)); ensure_equals( coords->size(), size ); try { // Create non-empty LinearRing instance geos::geom::LinearRing ring(coords, &factory_); ensure( !ring.isEmpty() ); ensure( ring.isClosed() ); ensure( ring.isRing() ); ensure( ring.isSimple() ); // Exterior (clone is required here because Polygon takes ownership) GeometryPtr geo = ring.clone(); LinearRingPtr exterior = dynamic_cast(geo); // Create non-empty Polygon //geos::geom::Polygon poly(exterior, 0, &factory_); PolygonAutoPtr poly(factory_.createPolygon(exterior, 0)); ensure( !poly->isEmpty() ); ensure( poly->isSimple() ); ensure( poly->isValid() ); ensure_equals( poly->getNumGeometries(), 1u ); ensure_equals( poly->getNumInteriorRing(), 0u ); ensure_equals( poly->getNumPoints(), size ); } catch (geos::util::IllegalArgumentException const& e) { fail(e.what()); } } // Test of copy constructor template<> template<> void object::test<2>() { GeometryAutoPtr copy(empty_poly_->clone()); ensure( copy->isEmpty() ); } // Test of isEmpty() for empty Polygon template<> template<> void object::test<3>() { ensure( empty_poly_->isEmpty() ); } // Test of isSimple() for empty Polygon template<> template<> void object::test<4>() { ensure( empty_poly_->isSimple() ); } // Test of isValid() for empty Polygon template<> template<> void object::test<5>() { //inform("Test is waiting for Bug #87 resolution."); // TODO - mloskot - is empty valid or not? //ensure( !ring.isValid() ); } // Test of getEnvelope() for empty Polygon template<> template<> void object::test<6>() { //inform( "Test waiting for resolution of getEnvelope() issue." ); //http://geos.osgeo.org/pipermail/geos-devel/2006-April/002123.html //EnvelopeCPtr envelope = empty_poly_->getEnvelopeInternal(); //ensure( envelope != 0 ); //ensure( envelope->isNull() ); } // Test of getBoundary() for empty Polygon template<> template<> void object::test<7>() { GeometryPtr boundary = empty_poly_->getBoundary(); ensure( boundary != 0 ); ensure( boundary->isEmpty() ); factory_.destroyGeometry(boundary); } // Test of convexHull() for empty Polygon template<> template<> void object::test<8>() { GeometryPtr hull = empty_poly_->convexHull(); ensure( hull != 0 ); ensure( hull->isEmpty() ); factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for empty Polygon template<> template<> void object::test<9>() { ensure_equals( empty_poly_->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); } // Test of getDimension() for empty Polygon template<> template<> void object::test<10>() { ensure_equals( empty_poly_->getDimension(), geos::geom::Dimension::A ); } // Test of getBoundaryDimension() for empty Polygon template<> template<> void object::test<11>() { ensure_equals( empty_poly_->getBoundaryDimension(), geos::geom::Dimension::L ); } // Test of getNumPoints() for empty Polygon template<> template<> void object::test<12>() { ensure_equals( empty_poly_->getNumPoints(), 0u ); } // Test of getLength() for empty Polygon template<> template<> void object::test<13>() { ensure_equals( empty_poly_->getLength(), 0.0 ); } // Test of getArea() for empty Polygon template<> template<> void object::test<14>() { ensure_equals( empty_poly_->getArea(), 0.0 ); } // Test of isEmpty() for non-empty Polygon template<> template<> void object::test<15>() { ensure( poly_ != 0 ); ensure( !poly_->isEmpty() ); } // Test of getEnvelope() for non-empty Polygon template<> template<> void object::test<17>() { ensure( poly_ != 0 ); GeometryPtr envelope = poly_->getEnvelope(); ensure( envelope != 0 ); ensure( !envelope->isEmpty() ); ensure_equals( envelope->getDimension(), geos::geom::Dimension::A ); // FREE MEMORY factory_.destroyGeometry(envelope); } // Test of getBoundary() for non-empty Polygon template<> template<> void object::test<18>() { ensure( poly_ != 0 ); GeometryPtr boundary = poly_->getBoundary(); ensure( boundary != 0 ); // OGC 05-126, Version: 1.1.0, Chapter 6.1.10 Surface ensure( "[OGC] The boundary of Polygin is the set of closed Curves.", !boundary->isEmpty() ); // FREE MEMORY factory_.destroyGeometry(boundary); } // Test of convexHull() for non-empty Polygon template<> template<> void object::test<19>() { ensure( poly_ != 0 ); GeometryPtr hull = poly_->convexHull(); ensure( hull != 0 ); ensure( !hull->isEmpty() ); ensure_equals( hull->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); ensure_equals( hull->getDimension(), geos::geom::Dimension::A ); // FREE MEMORY factory_.destroyGeometry(hull); } // Test of getGeometryTypeId() for non-empty Polygon template<> template<> void object::test<20>() { ensure( poly_ != 0 ); ensure_equals( poly_->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); } // Test of getDimension() for non-empty Polygon template<> template<> void object::test<21>() { ensure( poly_ != 0 ); ensure_equals( poly_->getDimension(), geos::geom::Dimension::A ); } // Test of getBoundaryDimension() for non-empty Polygon template<> template<> void object::test<22>() { ensure( poly_ != 0 ); ensure_equals( poly_->getBoundaryDimension(), geos::geom::Dimension::L ); } // Test of getNumPoints() for non-empty Polygon template<> template<> void object::test<23>() { ensure( poly_ != 0 ); ensure_equals( poly_->getNumPoints(), poly_size_ ); } // Test of getLength() for non-empty Polygon template<> template<> void object::test<24>() { ensure( poly_ != 0 ); ensure( poly_->getLength() != 0.0 ); const double tolerance = 0.0001; const double expected = 38.284271247461902; const double diff = std::fabs(poly_->getLength() - expected); ensure( diff <= tolerance ); } // Test of getArea() for non-empty Polygon template<> template<> void object::test<25>() { ensure( poly_ != 0 ); ensure( poly_->getArea() != 0.0 ); } // Test of getCoordinates() for non-empty Polygon template<> template<> void object::test<26>() { ensure( poly_ != 0 ); // Caller takes ownership of 'coords' CoordSeqPtr coords = poly_->getCoordinates(); ensure( coords != 0 ); ensure( !coords->isEmpty() ); ensure_equals( coords->getSize(), poly_->getNumPoints() ); // FREE MEMORY delete coords; } // Test of clone() and equals() for non-empty Polygon template<> template<> void object::test<27>() { ensure( poly_ != 0 ); GeometryPtr geo = poly_->clone(); ensure( geo != 0 ); ensure( geo->equals(poly_) ); factory_.destroyGeometry(geo); } // Test of getExteriorRing() for non-empty Polygon template<> template<> void object::test<28>() { ensure( poly_ != 0 ); LineStringCPtr ring = poly_->getExteriorRing(); ensure( ring != 0 ); ensure( ring->isRing() ); ensure_equals( ring->getNumPoints(), poly_size_ ); } // Test of getNumInteriorRing() for non-empty Polygon but without interior rings template<> template<> void object::test<29>() { ensure( poly_ != 0 ); ensure_equals( poly_->getNumInteriorRing(), 0u ); } // Test of getInteriorRingN() for non-empty Polygon with interior rings template<> template<> void object::test<30>() { const size_t holesNum = 1; GeometryPtr geo = 0; geo = reader_.read("POLYGON ((0 0, 100 0, 100 100, 0 100, 0 0), (1 1, 1 10, 10 10, 10 1, 1 1) )"); ensure( geo != 0 ); ensure_equals( geo->getGeometryTypeId(), geos::geom::GEOS_POLYGON ); PolygonPtr poly = dynamic_cast(geo); ensure( poly != 0 ); ensure_equals( poly->getNumInteriorRing(), holesNum ); LineStringCPtr interior = poly->getInteriorRingN(0); ensure( interior != 0 ); ensure( interior->isRing() ); ensure_equals( interior->getGeometryTypeId(), geos::geom::GEOS_LINEARRING ); factory_.destroyGeometry(geo); } // Test of getCoordiante() for non-empty Polygon template<> template<> void object::test<31>() { ensure( poly_ != 0 ); // "POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))" CoordinateCPtr coord = poly_->getCoordinate(); ensure( coord != 0 ); ensure_equals( coord->x, 0 ); ensure_equals( coord->y, 10 ); } // Test of getCoordiantes() for non-empty Polygon template<> template<> void object::test<32>() { ensure( poly_ != 0 ); // "POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))" CoordSeqPtr coords = poly_->getCoordinates(); ensure( coords != 0 ); ensure_equals( coords->getSize(), poly_size_ ); // Check first and last coordinates const size_t lastPos = poly_size_ - 1; ensure_equals( coords->getAt(0), coords->getAt(lastPos) ); // Check coordinate from the middle of ring const int middlePos = 3; ensure_equals( coords->getAt(middlePos).x, 15 ); ensure_equals( coords->getAt(middlePos).y, 10 ); // FREE MEMORY delete coords; } // Test of getGeometryType() for non-empty Polygon template<> template<> void object::test<33>() { ensure( poly_ != 0 ); const std::string type("Polygon"); ensure_equals( poly_->getGeometryType(), type ); } // Test of Point* getCentroid() const for empty Polygon template<> template<> void object::test<34>() { PointPtr point = empty_poly_->getCentroid(); ensure( point == 0 ); } // Test of Geometry::getCentroid(Coordinate& ret) const for empty Polygon template<> template<> void object::test<35>() { geos::geom::Coordinate centroid; bool isCentroid = empty_poly_->getCentroid(centroid); ensure( !isCentroid ); } // Test of getCentroid() for non-empty Polygon template<> template<> void object::test<36>() { PointPtr point = poly_->getCentroid(); ensure( point != 0 ); ensure( !point->isEmpty() ); ensure_equals( point->getGeometryTypeId(), geos::geom::GEOS_POINT ); // FREE MEMORY factory_.destroyGeometry(point); } // Test of Geometry::getCentroid(Coordinate& ret) const for non-empty Polygon template<> template<> void object::test<37>() { geos::geom::Coordinate centroid; bool isCentroid = poly_->getCentroid(centroid); ensure( isCentroid ); } // Test of comparison of centroids returned by two versions of getCentroid() for non-empty Polygon template<> template<> void object::test<38>() { // First centroid PointPtr point = poly_->getCentroid(); ensure( point != 0 ); ensure( !point->isEmpty() ); ensure_equals( point->getGeometryTypeId(), geos::geom::GEOS_POINT ); CoordinateCPtr pointCoord = point->getCoordinate(); ensure( pointCoord != 0 ); geos::geom::Coordinate pointCentr(*pointCoord); // FREE MEMORY factory_.destroyGeometry(point); // Second centroid geos::geom::Coordinate coordCentr; bool isCentroid = poly_->getCentroid(coordCentr); ensure( isCentroid ); // Comparison of two centroids ensure_equals( "Check Polygon::getCentroid() functions.", coordCentr, pointCentr ); } } // namespace tut geos-3.4.2/tests/unit/geom/PrecisionModelTest.cpp0000644000175000017500000000673112206417146021637 0ustar frankiefrankie// // Test Suite for geos::geom::PrecisionModel class. // tut #include // geos #include #include namespace tut { // // Test Group // // Common data used by tests struct test_precisionmodel_data { typedef geos::geom::PrecisionModel PrecisionModel; typedef geos::geom::Coordinate Coordinate; test_precisionmodel_data() {} void preciseCoordinateTester(const PrecisionModel& pm, double x1, double y1, double x2, double y2) { Coordinate p(x1, y1); pm.makePrecise(p); Coordinate pPrecise(x2, y2); ensure(p.equals2D(pPrecise)); } }; typedef test_group group; typedef group::object object; group test_precisionmodel_group("geos::geom::PrecisionModel"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { PrecisionModel pm; ensure(pm.isFloating()); ensure_equals(pm.getMaximumSignificantDigits(), 16); ensure_equals(pm.getScale(), 0); } // Test FLOAT_SINGLE model template<> template<> void object::test<2>() { PrecisionModel pm(PrecisionModel::FLOATING_SINGLE); ensure(pm.isFloating()); ensure_equals(pm.getType(), PrecisionModel::FLOATING_SINGLE); ensure_equals(pm.getMaximumSignificantDigits(), 6); } // Test default FIXED model template<> template<> void object::test<3>() { PrecisionModel pm(PrecisionModel::FIXED); ensure(!pm.isFloating()); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), 0); } // Test maximum significant digits (1:0) template<> template<> void object::test<4>() { PrecisionModel pm(1); ensure(!pm.isFloating()); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), 0); } // Test maximum significant digits (10:1) template<> template<> void object::test<5>() { PrecisionModel pm(10); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), 1); } // Test maximum significant digits (1000:3) template<> template<> void object::test<6>() { PrecisionModel pm(1000); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), 3); } // Test maximum significant digits (0.1:-1) template<> template<> void object::test<7>() { PrecisionModel pm(0.1); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), -1); } // Test maximum significant digits (0.001:-3) template<> template<> void object::test<8>() { PrecisionModel pm(0.001); ensure_equals(pm.getType(), PrecisionModel::FIXED); ensure_equals(pm.getMaximumSignificantDigits(), -3); } // Test makePrecise template<> template<> void object::test<9>() { PrecisionModel pm_10(0.1); preciseCoordinateTester(pm_10, 1200.4, 1240.4, 1200, 1240); preciseCoordinateTester(pm_10, 1209.4, 1240.4, 1210, 1240); } } // namespace tut geos-3.4.2/tests/unit/geom/TriangleTest.cpp0000644000175000017500000000467712206417146020477 0ustar frankiefrankie// // Test Suite for geos::geom::Triangle class. // tut #include // geos #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_triangle_data { // Coordiantes of simple triangle: ABC geos::geom::Coordinate a; geos::geom::Coordinate b; geos::geom::Coordinate c; geos::geom::Coordinate d; geos::geom::Coordinate e; geos::geom::Coordinate f; test_triangle_data() : a(3, 3), b(9, 3), c(6, 6), d(-4, -2), e(-8, -2), f(-4, -4) {} }; typedef test_group group; typedef group::object object; group test_triangle_group("geos::geom::Triangle"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { // TODO - mloskot - discuss about adding default constructor ensure("NOTE: Triangle has no default constructor.", true); } // Test of overriden ctor template<> template<> void object::test<2>() { geos::geom::Triangle abc(a, b, c); ensure_equals( abc.p0, a ); ensure_equals( abc.p1, b ); ensure_equals( abc.p2, c ); } // Test of copy ctor template<> template<> void object::test<3>() { geos::geom::Triangle abc(a, b, c); geos::geom::Triangle copy(abc); ensure_equals( copy.p0, a ); ensure_equals( copy.p1, b ); ensure_equals( copy.p2, c ); } // Test of assignment operator template<> template<> void object::test<4>() { geos::geom::Triangle abc(a, b, c); geos::geom::Triangle copy(d, e, f); ensure_equals( abc.p0, a ); ensure_equals( abc.p1, b ); ensure_equals( abc.p2, c ); ensure_equals( copy.p0, d ); ensure_equals( copy.p1, e ); ensure_equals( copy.p2, f ); copy = abc; ensure_equals( copy.p0, a ); ensure_equals( copy.p1, b ); ensure_equals( copy.p2, c ); ensure( copy.p0 != d ); ensure( copy.p1 != e ); ensure( copy.p2 != f ); } // Test of inCenter() template<> template<> void object::test<5>() { geos::geom::Coordinate center; geos::geom::Triangle abc(a, b, c); // Expected: ~4.2426406871192857 abc.inCentre(center); // 1e-16 fails sometimes ensure( std::fabs(center.x - 6.0) < 1e-15 ); ensure( center.y > 4.2 ); ensure( center.y < 4.3 ); ensure( 0 != ISNAN( center.z ) ); } } // namespace tut geos-3.4.2/tests/unit/geom/prep/0000755000175000017500000000000012206417243016314 5ustar frankiefrankiegeos-3.4.2/tests/unit/geom/prep/PreparedGeometryFactoryTest.cpp0000644000175000017500000002714612206417146024502 0ustar frankiefrankie// // Test Suite for geos::geom::prep::PreparedGeometryFactory class. // tut #include #include // geos #include #include #include #include #include #include #include // std #include #include // std::size_t using namespace geos::geom; namespace tut { // // Test Group // // Common data used by tests struct test_preparedgeometryfactory_data { GeometryPtr g_; PreparedGeometryPtr pg_; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; test_preparedgeometryfactory_data() : g_(0), pg_(0), pm_(1.0), factory_(&pm_), reader_(&factory_) { assert(0 == g_); assert(0 == pg_); } ~test_preparedgeometryfactory_data() { // FREE MEMORY per test case prep::PreparedGeometryFactory::destroy(pg_); factory_.destroyGeometry(g_); pg_ = 0; g_ = 0; } }; typedef test_group group; typedef group::object object; group test_preparedgeometryfactory_data("geos::geom::prep::PreparedGeometryFactory"); // // Test Cases // // Test of default constructor template<> template<> void object::test<1>() { prep::PreparedGeometryFactory pgf; ::geos::ignore_unused_variable_warning(pgf); } // Test passing null-pointer to prepare static method template<> template<> void object::test<2>() { try { GeometryPtr nullgeom = 0; // intentionally nullptr prep::PreparedGeometry const* pg = 0; pg = prep::PreparedGeometryFactory::prepare(nullgeom); fail("IllegalArgumentException expected"); } catch (geos::util::IllegalArgumentException const& e) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } // Test passing null-pointer to create method template<> template<> void object::test<3>() { try { GeometryPtr nullgeom = 0; // intentionally nullptr prep::PreparedGeometry const* pg = 0; prep::PreparedGeometryFactory pgf; pg = pgf.create(nullgeom); fail("IllegalArgumentException expected"); } catch (geos::util::IllegalArgumentException const& e) { const char* msg = e.what(); // ok ensure( msg != 0 ); } } // Test prepare empty GEOMETRY template<> template<> void object::test<4>() { g_ = factory_.createEmptyGeometry(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty GEOMETRY template<> template<> void object::test<5>() { g_ = factory_.createEmptyGeometry(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty POINT template<> template<> void object::test<6>() { g_ = factory_.createPoint(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty POINT template<> template<> void object::test<7>() { g_ = factory_.createPoint(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty LINESTRING template<> template<> void object::test<8>() { g_ = factory_.createLineString(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty LINESTRING template<> template<> void object::test<9>() { g_ = factory_.createLineString(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty POLYGON template<> template<> void object::test<10>() { g_ = factory_.createPolygon(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty POLYGON template<> template<> void object::test<11>() { g_ = factory_.createPolygon(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty MULTIPOINT template<> template<> void object::test<12>() { g_ = factory_.createMultiPoint(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty MULTIPOINT template<> template<> void object::test<13>() { g_ = factory_.createMultiPoint(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty MULTILINESTRING template<> template<> void object::test<14>() { g_ = factory_.createMultiLineString(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty MULTILINESTRING template<> template<> void object::test<15>() { g_ = factory_.createMultiLineString(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare empty MULTIPOLYGON template<> template<> void object::test<16>() { g_ = factory_.createMultiPolygon(); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create empty MULTIPOLYGON template<> template<> void object::test<17>() { g_ = factory_.createMultiPolygon(); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty POINT template<> template<> void object::test<18>() { g_ = reader_.read("POINT(1.234 5.678)"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty POINT template<> template<> void object::test<19>() { g_ = reader_.read("POINT(1.234 5.678)"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty LINESTRING template<> template<> void object::test<20>() { g_ = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty LINESTRING template<> template<> void object::test<21>() { g_ = reader_.read("LINESTRING (0 0, 5 5, 10 5, 10 10)"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty LINESTRING template<> template<> void object::test<22>() { g_ = reader_.read("POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty LINESTRING template<> template<> void object::test<23>() { g_ = reader_.read("POLYGON((0 10, 5 5, 10 5, 15 10, 10 15, 5 15, 0 10))"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty MULTIPOINT template<> template<> void object::test<24>() { g_ = reader_.read("MULTIPOINT(0 0, 5 5, 10 10, 15 15, 20 20)"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty MULTIPOINT template<> template<> void object::test<25>() { g_ = reader_.read("MULTIPOINT(0 0, 5 5, 10 10, 15 15, 20 20)"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty MULTILINESTRING template<> template<> void object::test<26>() { g_ = reader_.read("MULTILINESTRING ((20 120, 120 20), (20 20, 120 120))"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty MULTILINESTRING template<> template<> void object::test<27>() { g_ = reader_.read("MULTILINESTRING ((20 120, 120 20), (20 20, 120 120))"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test prepare non-empty POLYGON template<> template<> void object::test<28>() { g_ = reader_.read("MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))"); ensure( 0 != g_ ); pg_ = prep::PreparedGeometryFactory::prepare(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } // Test create non-empty POLYGON template<> template<> void object::test<29>() { g_ = reader_.read("MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))"); ensure( 0 != g_ ); prep::PreparedGeometryFactory pgf; pg_ = pgf.create(g_); ensure( 0 != pg_ ); ensure_equals_geometry( g_, pg_ ); } } // namespace tut geos-3.4.2/tests/unit/geom/util/0000755000175000017500000000000012206417243016323 5ustar frankiefrankiegeos-3.4.2/tests/unit/geom/util/GeometryExtracterTest.cpp0000644000175000017500000000503512206417146023351 0ustar frankiefrankie// // Test Suite for geos::geom::util::GeometryExtracter class. // tut #include // geos #include #include #include #include #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_geometryextracter_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef std::auto_ptr GeomPtr; typedef geos::io::WKTReader WKTReader; typedef geos::io::WKTWriter WKTWriter; test_geometryextracter_data() : pm(1.0), gf(&pm), wktreader(&gf) { } }; typedef test_group group; typedef group::object object; group test_geometryextracter_group("geos::geom::util::GeometryExtracter"); // // Test Cases // // Test extraction of single point template<> template<> void object::test<1>() { using namespace geos::geom::util; using namespace geos::geom; GeomPtr geom(wktreader.read("POINT(-117 33)")); std::vector lst_points; std::vector lst_lines; GeometryExtracter::extract(*geom, lst_points); GeometryExtracter::extract(*geom, lst_lines); ensure_equals( lst_points.size(), 1u ); ensure_equals( lst_lines.size(), 0u ); } // Test extraction of multiple types template<> template<> void object::test<2>() { using namespace geos::geom::util; using namespace geos::geom; GeomPtr geom(wktreader.read("GEOMETRYCOLLECTION(POINT(-117 33),LINESTRING(0 0, 10 0),POINT(0 0),POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),LINESTRING(10 0, 23 30),POINT(20 20))")); std::vector lst_points; std::vector lst_lines; std::vector lst_polys; GeometryExtracter::extract(*geom, lst_points); GeometryExtracter::extract(*geom, lst_lines); GeometryExtracter::extract(*geom, lst_polys); ensure_equals( lst_points.size(), 3u ); ensure_equals( lst_lines.size(), 2u ); ensure_equals( lst_polys.size(), 1u ); } } // namespace tut geos-3.4.2/tests/unit/geos_unit.cpp0000644000175000017500000000657012206417146017131 0ustar frankiefrankie// // Test Suite Runner // #ifdef _MSC_VER #ifdef GEOS_DEBUG_MSVC_USE_VLD #include #endif #endif // tut #include #include // geos #include // std #include #include #include namespace tut { test_runner_singleton runner; } void usage() { using std::cout; using std::endl; const std::string module("geos_unit"); //[list] | [ group] [test] cout << "Usage: " << module << " [OPTION] [TARGET]\n" << endl << "Targets:\n" << " run all tests in all groups\n" << " run all tests from given group\n" << " run single test with given number from given group\n" << endl << "Options:\n" << " --list list all registered test groups\n" << " --verbose run unit tests verbosely; displays non-error information\n" << " --version print version information and exit\n" << " --help print this message and exit\n" << endl << "Examples:\n" << " " << module << " -v\n" << " " << module << " list\n" << " " << module << " geos::geom::Envelope\n" << " " << module << " geos::geom::Envelope 2\n" << endl << "GEOS homepage: http://geos.osgeo.org" << endl; } int main(int argc, const char* argv[]) { tut::reporter visi; if ( (argc == 2 && std::string(argv[1]) == "--help") || argc > 3 ) { usage(); return 0; } std::cout << "===============================\n" << " GEOS Test Suite Application\n" << "===============================\n"; tut::runner.get().set_callback(&visi); try { if ( argc == 1 ) { tut::runner.get().run_tests(); } else if ( argc == 2 && std::string(argv[1]) == "--list" ) { tut::groupnames gl = tut::runner.get().list_groups(); tut::groupnames::const_iterator b = gl.begin(); tut::groupnames::const_iterator e = gl.end(); tut::groupnames::difference_type d = std::distance(b, e); std::cout << "Registered " << d << " test groups:\n" << std::endl; while ( b != e ) { std::cout << " " << *b << std::endl; ++b; } } else if ( argc == 2 && std::string(argv[1]) != "--list" ) { tut::runner.get().run_tests(argv[1]); } else if( argc == 3 ) { // TODO - mloskot - check if test group with given name exists // TODO - mloskot - check if test case with given number exists std::string grpname(argv[1]); if (grpname.empty()) throw std::runtime_error("missing test group name"); tut::test_result result; tut::runner.get().run_test(grpname, std::atoi(argv[2]), result); } } catch( const std::exception& ex ) { std::cerr << "!!! GEOS Test Suite raised exception: " << ex.what() << std::endl; } // XXX - mloskot - this should be removed in future! geos::io::Unload::Release(); return (visi.all_ok() ? EXIT_SUCCESS : EXIT_FAILURE); } geos-3.4.2/tests/unit/index/0000755000175000017500000000000012206417243015526 5ustar frankiefrankiegeos-3.4.2/tests/unit/index/quadtree/0000755000175000017500000000000012206417243017340 5ustar frankiefrankiegeos-3.4.2/tests/unit/index/quadtree/DoubleBitsTest.cpp0000644000175000017500000000123212206417146022740 0ustar frankiefrankie// // Test Suite for geos::index::quadtree::DoubleBits class. #include // geos #include using namespace geos::index::quadtree; namespace tut { // dummy data, not used struct test_doublebits_data {}; typedef test_group group; typedef group::object object; group test_doublebits_group("geos::index::quadtree::DoubleBits"); // // Test Cases // // 1 - Test exponent() template<> template<> void object::test<1>() { ensure_equals(DoubleBits::exponent(-1), 0); ensure_equals(DoubleBits::exponent(8.0), 3); ensure_equals(DoubleBits::exponent(128.0), 7); } } // namespace tut geos-3.4.2/tests/unit/io/0000755000175000017500000000000012206417243015026 5ustar frankiefrankiegeos-3.4.2/tests/unit/io/ByteOrderValuesTest.cpp0000644000175000017500000001026612206417146021460 0ustar frankiefrankie// // Test Suite for geos::io::ByteOrderValues // tut #include // geos #include #include // for int64 // std #include #include namespace tut { // // Test Group // // dummy data, not used struct test_byteordervalues_data { }; typedef test_group group; typedef group::object object; group test_byteordervalues_group("geos::io::ByteOrderValues"); // // Test Cases // // 1 - Read/write an int template<> template<> void object::test<1>() { using geos::io::ByteOrderValues; unsigned char buf[4]; int in = 1; int out; ByteOrderValues::putInt(in, buf, ByteOrderValues::ENDIAN_BIG); ensure("putInt big endian[0]", buf[0] == 0); ensure("putInt big endian[1]", buf[1] == 0); ensure("putInt big endian[2]", buf[2] == 0); ensure("putInt big endian[3]", buf[3] == 1); out = ByteOrderValues::getInt(buf, geos::io::ByteOrderValues::ENDIAN_BIG); ensure_equals("getInt big endian", out, in); ByteOrderValues::putInt(1, buf, geos::io::ByteOrderValues::ENDIAN_LITTLE); ensure("putInt little endian[0]", buf[0] == 1); ensure("putInt little endian[1]", buf[1] == 0); ensure("putInt little endian[2]", buf[2] == 0); ensure("putInt little endian[3]", buf[3] == 0); out = ByteOrderValues::getInt(buf, ByteOrderValues::ENDIAN_LITTLE); ensure_equals("getInt little endian", out, in); } // 2 - Read/write a double template<> template<> void object::test<2>() { using geos::io::ByteOrderValues; unsigned char buf[8]; double in = 2; double out; ByteOrderValues::putDouble(in, buf, ByteOrderValues::ENDIAN_BIG); ensure("putDouble big endian[0]", buf[0] == 64); ensure("putDouble big endian[1]", buf[1] == 0); ensure("putDouble big endian[2]", buf[2] == 0); ensure("putDouble big endian[3]", buf[3] == 0); ensure("putDouble big endian[4]", buf[4] == 0); ensure("putDouble big endian[5]", buf[5] == 0); ensure("putDouble big endian[6]", buf[6] == 0); ensure("putDouble big endian[7]", buf[7] == 0); out = ByteOrderValues::getDouble(buf, ByteOrderValues::ENDIAN_BIG); ensure_equals("getDouble big endian", out, in); ByteOrderValues::putDouble(in, buf, ByteOrderValues::ENDIAN_LITTLE); ensure("putDouble little endian[0]", buf[0] == 0); ensure("putDouble little endian[1]", buf[1] == 0); ensure("putDouble little endian[2]", buf[2] == 0); ensure("putDouble little endian[3]", buf[3] == 0); ensure("putDouble little endian[4]", buf[4] == 0); ensure("putDouble little endian[5]", buf[5] == 0); ensure("putDouble little endian[6]", buf[6] == 0); ensure("putDouble little endian[7]", buf[7] == 64); out = ByteOrderValues::getDouble(buf, ByteOrderValues::ENDIAN_LITTLE); ensure_equals("getDouble little endian", out, in); } // 3 - Read/write a long template<> template<> void object::test<3>() { using geos::io::ByteOrderValues; unsigned char buf[8]; long in = 2; long out; ByteOrderValues::putLong(in, buf, ByteOrderValues::ENDIAN_BIG); ensure("putLong big endian[0]", buf[0] == 0); ensure("putLong big endian[1]", buf[1] == 0); ensure("putLong big endian[2]", buf[2] == 0); ensure("putLong big endian[3]", buf[3] == 0); ensure("putLong big endian[4]", buf[4] == 0); ensure("putLong big endian[5]", buf[5] == 0); ensure("putLong big endian[6]", buf[6] == 0); ensure("putLong big endian[7]", buf[7] == 2); out = static_cast(ByteOrderValues::getLong(buf, ByteOrderValues::ENDIAN_BIG)); ensure_equals("getLong big endian", out, in); ByteOrderValues::putLong(in, buf, ByteOrderValues::ENDIAN_LITTLE); ensure("putLong little endian[0]", buf[0] == 2); ensure("putLong little endian[1]", buf[1] == 0); ensure("putLong little endian[2]", buf[2] == 0); ensure("putLong little endian[3]", buf[3] == 0); ensure("putLong little endian[4]", buf[4] == 0); ensure("putLong little endian[5]", buf[5] == 0); ensure("putLong little endian[6]", buf[6] == 0); ensure("putLong little endian[7]", buf[7] == 0); out = static_cast(ByteOrderValues::getLong(buf, ByteOrderValues::ENDIAN_LITTLE)); ensure_equals("getLong little endian", out, in); } } // namespace tut geos-3.4.2/tests/unit/io/WKBReaderTest.cpp0000644000175000017500000002400512206417146020143 0ustar frankiefrankie// // Test Suite for geos::io::WKBReader // Uses geos::io::WKTReader to check correctness. // Uses geos::io::WKBWriter to check correctness. // Currently only tests 2D geoms of all (7) types. // Tests NDR and XDR input and output . // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_wkbreader_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKBReader wkbreader; geos::io::WKBWriter xdrwkbwriter; geos::io::WKBWriter ndrwkbwriter; geos::io::WKTReader wktreader; typedef std::auto_ptr GeomPtr; test_wkbreader_data() : pm(1.0), gf(&pm), wkbreader(gf), // 2D only, XDR (big endian) xdrwkbwriter(2, geos::io::WKBConstants::wkbXDR), // 2D only, NDR (little endian) ndrwkbwriter(2, geos::io::WKBConstants::wkbNDR), wktreader(&gf) {} void testInputOutput(const std::string& WKT, const std::string& ndrWKB, const std::string& xdrWKB) { GeomPtr gWKT(wktreader.read(WKT)); // NDR input std::stringstream ndr_in(ndrWKB); GeomPtr gWKB_ndr(wkbreader.readHEX(ndr_in)); ensure("NDR input", gWKB_ndr->equalsExact(gWKT.get()) ); // XDR input std::stringstream xdr_in(xdrWKB); GeomPtr gWKB_xdr(wkbreader.readHEX(xdr_in)); ensure("XDR input", gWKB_xdr->equalsExact(gWKT.get()) ); // Compare geoms read from NDR and XDR ensure( gWKB_xdr->equalsExact(gWKB_ndr.get()) ); // NDR output std::stringstream ndr_out; ndrwkbwriter.writeHEX(*gWKT, ndr_out); ensure_equals("NDR output", ndr_out.str(), ndr_in.str()); // XDR output std::stringstream xdr_out; xdrwkbwriter.writeHEX(*gWKT, xdr_out); ensure_equals("XDR output", xdr_out.str(), xdr_in.str()); } }; typedef test_group group; typedef group::object object; group test_wkbreader_group("geos::io::WKBReader"); // // Test Cases // // 1 - Read/write a point in XDR and NDR format template<> template<> void object::test<1>() { testInputOutput( // WKT "POINT(0 0)", // NDR HEXWKB "010100000000000000000000000000000000000000", // XDR HEXWKB "000000000100000000000000000000000000000000" ); } // 2 - Read a linestring template<> template<> void object::test<2>() { testInputOutput( // WKT "LINESTRING(1 2, 3 4)", // NDR HEXWKB "010200000002000000000000000000F03F000000000000004000000000000008400000000000001040", // XDR HEXWKB "0000000002000000023FF0000000000000400000000000000040080000000000004010000000000000" ); } // 3 - Read a polygon template<> template<> void object::test<3>() { testInputOutput( // WKT "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2))", // NDR HEXWKB "0103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040", // XDR HEXWKB "0000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000" ); } // 4 - Read a multipoint template<> template<> void object::test<4>() { testInputOutput( // WKT "MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)", // NDR HEXWKB "010400000005000000010100000000000000000000000000000000000000010100000000000000000024400000000000000000010100000000000000000024400000000000002440010100000000000000000000000000000000002440010100000000000000000000000000000000000000", // XDR HEXWKB "000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000" ); } // 5 - Read a multilinestring template<> template<> void object::test<5>() { testInputOutput( // WKT "MULTILINESTRING((0 0, 10 0, 10 10, 0 10, 10 20),(2 2, 2 6, 6 4, 20 2))", // NDR HEXWKB "010500000002000000010200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000002440000000000000344001020000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000034400000000000000040", // XDR HEXWKB "000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000" ); } // 6 - Read a multipolygon template<> template<> void object::test<6>() { testInputOutput( // WKT "MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 6, 6 4, 2 2)),((60 60, 60 50, 70 40, 60 60)))", // NDR HEXWKB "0106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40", // XDR HEXWKB "000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000" ); } // 7 - Read a collection template<> template<> void object::test<7>() { testInputOutput( // WKT "GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 2,3 4),POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),MULTIPOINT(0 0,10 0,10 10,0 10,0 0),MULTILINESTRING((0 0,10 0,10 10,0 10,10 20),(2 2,2 6,6 4,20 2)),MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(2 2,2 6,6 4,2 2)),((60 60,60 50,70 40,60 60))))", // NDR HEXWKB "010700000006000000010100000000000000000000000000000000000000010200000002000000000000000000F03F00000000000000400000000000000840000000000000104001030000000200000005000000000000000000000000000000000000000000000000002440000000000000000000000000000024400000000000002440000000000000000000000000000024400000000000000000000000000000000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000004000000000000000400104000000050000000101000000000000000000000000000000000000000101000000000000000000244000000000000000000101000000000000000000244000000000000024400101000000000000000000000000000000000024400101000000000000000000000000000000000000000105000000020000000102000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000024400000000000003440010200000004000000000000000000004000000000000000400000000000000040000000000000184000000000000018400000000000001040000000000000344000000000000000400106000000020000000103000000020000000500000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440000000000000000000000000000000000400000000000000000000400000000000000040000000000000004000000000000018400000000000001840000000000000104000000000000000400000000000000040010300000001000000040000000000000000004E400000000000004E400000000000004E400000000000004940000000000080514000000000000044400000000000004E400000000000004E40", // XDR HEXWKB "0000000007000000060000000001000000000000000000000000000000000000000002000000023FF00000000000004000000000000000400800000000000040100000000000000000000003000000020000000500000000000000000000000000000000402400000000000000000000000000004024000000000000402400000000000000000000000000004024000000000000000000000000000000000000000000000000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040000000000000004000000000000000000000000400000005000000000100000000000000000000000000000000000000000140240000000000000000000000000000000000000140240000000000004024000000000000000000000100000000000000004024000000000000000000000100000000000000000000000000000000000000000500000002000000000200000005000000000000000000000000000000004024000000000000000000000000000040240000000000004024000000000000000000000000000040240000000000004024000000000000403400000000000000000000020000000440000000000000004000000000000000400000000000000040180000000000004018000000000000401000000000000040340000000000004000000000000000000000000600000002000000000300000002000000050000000000000000000000000000000040240000000000000000000000000000402400000000000040240000000000000000000000000000402400000000000000000000000000000000000000000000000000044000000000000000400000000000000040000000000000004018000000000000401800000000000040100000000000004000000000000000400000000000000000000000030000000100000004404E000000000000404E000000000000404E000000000000404900000000000040518000000000004044000000000000404E000000000000404E000000000000" ); } } // namespace tut geos-3.4.2/tests/unit/io/WKBWriterTest.cpp0000644000175000017500000001042512206417146020216 0ustar frankiefrankie// // Test Suite for geos::io::WKBWriter // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_wkbwriter_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; geos::io::WKBReader wkbreader; geos::io::WKBWriter wkbwriter; test_wkbwriter_data() : pm(1000.0), gf(&pm), wktreader(&gf), wkbreader(gf) {} }; typedef test_group group; typedef group::object object; group test_wkbwriter_group("geos::io::WKBWriter"); // // Test Cases // // 1 - Test writing a 2D geometry with the WKBWriter in 3D output dimension. template<> template<> void object::test<1>() { geos::geom::Geometry *geom = wktreader.read("POINT(-117 33)"); std::stringstream result_stream; wkbwriter.setOutputDimension( 3 ); wkbwriter.write( *geom, result_stream ); delete geom; geom = NULL; ensure( result_stream.str().length() == 21 ); result_stream.seekg( 0 ); geom = wkbreader.read( result_stream ); ensure( geom != NULL ); ensure( geom->getCoordinateDimension() == 2 ); ensure( geom->getCoordinate()->x == -117.0 ); ensure( geom->getCoordinate()->y == 33.0 ); ensure( ISNAN(geom->getCoordinate()->z) != 0 ); delete geom; } // 2 - Test writing a 3D geometry with the WKBWriter in 3D output dimension. template<> template<> void object::test<2>() { geos::geom::Geometry *geom = wktreader.read("POINT(-117 33 11)"); std::stringstream result_stream; wkbwriter.setOutputDimension( 3 ); wkbwriter.write( *geom, result_stream ); delete geom; geom = NULL; ensure( result_stream.str().length() == 29 ); result_stream.seekg( 0 ); geom = wkbreader.read( result_stream ); ensure( geom->getCoordinateDimension() == 3 ); ensure( geom->getCoordinate()->x == -117.0 ); ensure( geom->getCoordinate()->y == 33.0 ); ensure( geom->getCoordinate()->z == 11.0 ); delete geom; } // 3 - Test writing a 3D geometry with the WKBWriter in 2D output dimension. template<> template<> void object::test<3>() { geos::geom::Geometry *geom = wktreader.read("POINT(-117 33 11)"); std::stringstream result_stream; wkbwriter.setOutputDimension( 2 ); wkbwriter.write( *geom, result_stream ); delete geom; geom = NULL; ensure( result_stream.str().length() == 21 ); result_stream.seekg( 0 ); geom = wkbreader.read( result_stream ); ensure( geom->getCoordinateDimension() == 2 ); ensure( geom->getCoordinate()->x == -117.0 ); ensure( geom->getCoordinate()->y == 33.0 ); ensure( ISNAN(geom->getCoordinate()->z) != 0); delete geom; } // 4 - Test that SRID is output only once // See http://trac.osgeo.org/geos/ticket/583 template<> template<> void object::test<4>() { typedef geos::geom::Geometry Geom; typedef std::vector GeomVect; GeomVect *geoms = new GeomVect; geoms->push_back( wktreader.read("POLYGON((0 0,1 0,1 1,0 1,0 0))") ); geoms->back()->setSRID(4326); Geom *geom = gf.createGeometryCollection(geoms); std::stringstream result_stream; wkbwriter.setOutputDimension( 2 ); wkbwriter.setByteOrder( 1 ); wkbwriter.setIncludeSRID( 1 ); wkbwriter.writeHEX( *geom, result_stream ); delete geom; std::string actual = result_stream.str(); ensure_equals( actual, "0107000000010000000103000000010000000500000000000000000000000000000000000000000000000000F03F0000000000000000000000000000F03F000000000000F03F0000000000000000000000000000F03F00000000000000000000000000000000"); } } // namespace tut geos-3.4.2/tests/unit/io/WKTReaderTest.cpp0000644000175000017500000001106412206417146020166 0ustar frankiefrankie// // Test Suite for geos::io::WKTReader // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_wktreader_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef std::auto_ptr GeomPtr; test_wktreader_data() : pm(1.0), gf(&pm), wktreader(&gf) { wktwriter.setOutputDimension( 3 ); } }; typedef test_group group; typedef group::object object; group test_wktreader_group("geos::io::WKTReader"); // // Test Cases // // 1 - Read a point, confirm 2D. template<> template<> void object::test<1>() { GeomPtr geom(wktreader.read("POINT(-117 33)")); geos::geom::CoordinateSequence *coords = geom->getCoordinates(); ensure( coords->getDimension() == 2 ); ensure( coords->getX(0) == -117 ); ensure( coords->getY(0) == 33 ); delete coords; } // 2 - Read a point, confirm 3D. template<> template<> void object::test<2>() { GeomPtr geom(wktreader.read("POINT(-117 33 10)")); geos::geom::CoordinateSequence *coords = geom->getCoordinates(); ensure( coords->getDimension() == 3 ); ensure( coords->getOrdinate(0,geos::geom::CoordinateSequence::Z) == 10.0 ); delete coords; } // 3 - Linestring dimension preserved. template<> template<> void object::test<3>() { GeomPtr geom(wktreader.read("LINESTRING(-117 33, -116 34)")); geos::geom::CoordinateSequence *coords = geom->getCoordinates(); ensure( coords->getDimension() == 2 ); delete coords; } // 4 - Ensure we can read ZM geometries, just discarding the M. template<> template<> void object::test<4>() { GeomPtr geom(wktreader.read("LINESTRING ZM (-117 33 2 3, -116 34 4 5)")); geos::geom::CoordinateSequence *coords = geom->getCoordinates(); ensure( coords->getDimension() == 3 ); ensure_equals( wktwriter.write(geom.get()), std::string("LINESTRING Z (-117 33 2, -116 34 4)") ); delete coords; } // 5 - Check support for mixed case keywords (and old style 3D) template<> template<> void object::test<5>() { GeomPtr geom(wktreader.read("LineString (-117 33 2, -116 34 4)")); ensure_equals( wktwriter.write(geom.get()), std::string("LINESTRING Z (-117 33 2, -116 34 4)") ); } // 6 - invalid WKT (see http://trac.osgeo.org/geos/ticket/361) template<> template<> void object::test<6>() { GeomPtr geom; try { geom.reset(wktreader.read("POLYGON( EMPTY, (1 1,2 2,1 2,1 1))")); ensure( !"Didn't get expected exception" ); } catch (const geos::util::IllegalArgumentException& ex) { ensure( "Did get expected exception" ); ex.what(); } catch (...) { ensure( !"Got unexpected exception" ); } } // POINT(0 0) http://trac.osgeo.org/geos/ticket/610 template<> template<> void object::test<7>() { GeomPtr geom; try { // use FLOATING model namespace ggm = geos::geom; namespace gio = geos::io; ggm::PrecisionModel pm(ggm::PrecisionModel::FLOATING); ggm::GeometryFactory gf(&pm); gio::WKTReader wktReader(&gf); const std::string str = " POINT (0 0) "; geom.reset(wktReader.read(str)); //HERE IT FAILS geos::geom::CoordinateSequence *coords = geom->getCoordinates(); ensure_equals(coords->getDimension(), 2U); ensure_distance(coords->getX(0), 0.0, 1e-12); ensure_distance( coords->getY(0), 0.0, 1e-12); delete coords; } catch (const geos::util::IllegalArgumentException& ex) { ensure( "Did get expected exception" ); ex.what(); } catch (...) { ensure( !"Got unexpected exception" ); } } } // namespace tut geos-3.4.2/tests/unit/io/WKTWriterTest.cpp0000644000175000017500000000666612206417146020254 0ustar frankiefrankie// // Test Suite for geos::io::WKTWriter // tut #include // geos #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_wktwriter_data { typedef geos::geom::PrecisionModel PrecisionModel; typedef geos::geom::GeometryFactory GeometryFactory; typedef geos::io::WKTReader WKTReader; typedef geos::io::WKTWriter WKTWriter; typedef std::auto_ptr GeomPtr; PrecisionModel pm; GeometryFactory gf; WKTReader wktreader; WKTWriter wktwriter; test_wktwriter_data() : pm(1000.0), gf(&pm), wktreader(&gf) {} }; typedef test_group group; typedef group::object object; group test_wktwriter_group("geos::io::WKTWriter"); // // Test Cases // // 1 - Test the trim capability. template<> template<> void object::test<1>() { GeomPtr geom ( wktreader.read("POINT(-117 33)") ); std::string result; wktwriter.setTrim(false); result = wktwriter.write( geom.get() ); ensure_equals( result , "POINT (-117.000 33.000)" ); wktwriter.setTrim(true); result = wktwriter.write( geom.get() ); ensure_equals( result , "POINT (-117 33)" ); } // 2 - Test the output precision capability template<> template<> void object::test<2>() { GeomPtr geom ( wktreader.read("POINT(-117.1234567 33.1234567)") ); std::string result; wktwriter.setTrim(false); result = wktwriter.write( geom.get() ); ensure_equals( result , "POINT (-117.123 33.123)" ); wktwriter.setRoundingPrecision(2); result = wktwriter.write( geom.get() ); ensure_equals( result , "POINT (-117.12 33.12)" ); } // 3 - Test 3D generation from a 3D geometry. template<> template<> void object::test<3>() { GeomPtr geom ( wktreader.read("POINT Z (-117 33 120)") ); std::string result; wktwriter.setOutputDimension(3); wktwriter.setTrim( true ); wktwriter.setOld3D( false ); result = wktwriter.write( geom.get() ); ensure_equals( result, std::string("POINT Z (-117 33 120)") ); wktwriter.setOld3D( true ); result = wktwriter.write( geom.get() ); ensure_equals( result, std::string("POINT (-117 33 120)") ); } // 4 - Test 2D generation from a 3D geometry. template<> template<> void object::test<4>() { GeomPtr geom ( wktreader.read("POINT(-117 33 120)") ); std::string result; wktwriter.setOutputDimension(2); wktwriter.setTrim( true ); wktwriter.setOld3D( false ); result = wktwriter.write( geom.get() ); ensure_equals( result, std::string("POINT (-117 33)") ); } // 5 - Test negative number of digits in precision model template<> template<> void object::test<5>() { PrecisionModel pm3(0.001); GeometryFactory gf3(&pm3); WKTReader wktreader3(&gf3); GeomPtr geom ( wktreader3.read("POINT(123456 654321)") ); std::string result = wktwriter.write( geom.get() ); ensure_equals( result, std::string("POINT (123000 654000)") ); } } // namespace tut geos-3.4.2/tests/unit/io/WriterTest.cpp0000644000175000017500000000252012206417146017647 0ustar frankiefrankie// // Test Suite for geos::io::Writer // tut #include // geos #include // std #include #include #include namespace tut { // // Test Group // // dummy data, not used struct test_writer_data { test_writer_data() { } }; typedef test_group group; typedef group::object object; group test_writer_group("geos::io::Writer"); // // Test Cases // template<> template<> void object::test<1>() { geos::io::Writer writer; writer.write("Hello "); writer.write("World!"); ensure_equals(writer.toString(), "Hello World!"); } template<> template<> void object::test<2>() { geos::io::Writer writer; writer.reserve(512); writer.write("Hello "); writer.write("World!"); ensure_equals(writer.toString(), "Hello World!"); } template<> template<> void object::test<3>() { geos::io::Writer writer; writer.reserve(1); writer.write("Hello "); writer.write("World!"); ensure_equals(writer.toString(), "Hello World!"); } template<> template<> void object::test<4>() { geos::io::Writer writer; writer.reserve(512); writer.write("Hello World!"); writer.reserve(1); ensure_equals(writer.toString(), "Hello World!"); } } // namespace tut geos-3.4.2/tests/unit/linearref/0000755000175000017500000000000012206417243016366 5ustar frankiefrankiegeos-3.4.2/tests/unit/linearref/LengthIndexedLineTest.cpp0000644000175000017500000003171112206417146023271 0ustar frankiefrankie// // Ported from JTS junit/linearref/AbstractIndexedLineTestCase.java r466 // and junit/linearref/LengthIndexedLineTestCase.java r466 #include #include // geos #include #include #include #include #include #include // required for use in auto_ptr #include #include #include // std #include #include #include #include using namespace geos::geom; using namespace geos::linearref; using namespace std; /** * Tests the {@link LocationIndexedLine} class */ namespace tut { typedef auto_ptr GeomPtr; static const double TOLERANCE_DIST = 0.001; struct test_lengthindexedline_data { test_lengthindexedline_data() : pm(), gf(&pm), reader(&gf), writer() { writer.setTrim(true); } PrecisionModel pm; GeometryFactory gf; geos::io::WKTReader reader; geos::io::WKTWriter writer; void checkExpected(Geometry* result, string const& expected) { GeomPtr subLine(reader.read(expected)); checkExpected(result, subLine.get()); } void checkExpected(Geometry* result, const Geometry* expected) { bool isEqual = result->equalsExact(expected, 1.0e-5); ensure_equals("Expect: "+writer.write(expected)+" Obtained: "+writer.write(result), isEqual, true); } void runIndicesOfThenExtract(string const& inputStr, string const& subLineStr) { GeomPtr input(reader.read(inputStr)); GeomPtr subLine(reader.read(subLineStr)); GeomPtr result(indicesOfThenExtract(input.get(), subLine.get())); checkExpected(result.get(), subLine.get()); } bool indexOfAfterCheck(Geometry* linearGeom, Coordinate testPt) { LengthIndexedLine indexedLine(linearGeom); // check locations are consecutive double loc1 = indexedLine.indexOf(testPt); double loc2 = indexedLine.indexOfAfter(testPt, loc1); if (loc2 <= loc1) return false; // check extracted points are the same as the input Coordinate pt1 = indexedLine.extractPoint(loc1); Coordinate pt2 = indexedLine.extractPoint(loc2); if (! pt1.equals2D(testPt)) return false; if (! pt2.equals2D(testPt)) return false; return true; } void runIndexOfAfterTest(string const& inputStr, string const& testPtWKT) { GeomPtr input(reader.read(inputStr)); GeomPtr testPoint(reader.read(testPtWKT)); const Coordinate* testPt = testPoint->getCoordinate(); bool resultOK = indexOfAfterCheck(input.get(), *testPt); ensure(resultOK); } void runOffsetTest(string const& inputWKT, string const& testPtWKT, double offsetDistance, string const& expectedPtWKT) { GeomPtr input(reader.read(inputWKT)); GeomPtr testPoint(reader.read(testPtWKT)); GeomPtr expectedPoint(reader.read(expectedPtWKT)); const Coordinate* testPt = testPoint->getCoordinate(); const Coordinate* expectedPt = expectedPoint->getCoordinate(); Coordinate offsetPt = extractOffsetAt(input.get(), *testPt, offsetDistance); bool isOk = offsetPt.distance(*expectedPt) < TOLERANCE_DIST; if (! isOk) cout << "Expected = " << *expectedPoint << " Actual = " << offsetPt << endl; ensure(isOk); } Coordinate extractOffsetAt(Geometry* linearGeom, Coordinate testPt, double offsetDistance) { LengthIndexedLine indexedLine(linearGeom); double index = indexedLine.indexOf(testPt); return indexedLine.extractPoint(index, offsetDistance); } void checkExtractLine(const char* wkt, double start, double end, const char* expected) { string wktstr(wkt); GeomPtr linearGeom(reader.read(wktstr)); LengthIndexedLine indexedLine(linearGeom.get()); GeomPtr result(indexedLine.extractLine(start, end)); checkExpected(result.get(), expected); } Geometry* indicesOfThenExtract(Geometry* linearGeom, Geometry* subLine) { LengthIndexedLine indexedLine(linearGeom); double* loc = indexedLine.indicesOf(subLine); Geometry* result = indexedLine.extractLine(loc[0], loc[1]); delete [] loc; return result; } }; // struct test_lengthindexedline_data typedef test_group group; typedef group::object object; group test_lengthindexedline_group("geos::linearref::LocationIndexedLine"); // testML template<> template<> void object::test<1>() { runIndicesOfThenExtract("MULTILINESTRING ((0 0, 10 10), (20 20, 30 30))", "MULTILINESTRING ((1 1, 10 10), (20 20, 25 25))"); } // testPartOfSegmentNoVertex template<> template<> void object::test<2>() { runIndicesOfThenExtract("LINESTRING (0 0, 10 10, 20 20)", "LINESTRING (1 1, 9 9)"); } // testPartOfSegmentContainingVertex() template<> template<> void object::test<3>() { runIndicesOfThenExtract("LINESTRING (0 0, 10 10, 20 20)", "LINESTRING (5 5, 10 10, 15 15)"); } /** * Tests that duplicate coordinates are handled correctly. * * @throws Exception */ // testPartOfSegmentContainingDuplicateCoords template<> template<> void object::test<4>() { runIndicesOfThenExtract("LINESTRING (0 0, 10 10, 10 10, 20 20)", "LINESTRING (5 5, 10 10, 10 10, 15 15)"); } /** * Following tests check that correct portion of loop is identified. * This requires that the correct vertex for (0,0) is selected. */ // testLoopWithStartSubLine template<> template<> void object::test<5>() { runIndicesOfThenExtract("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "LINESTRING (0 0, 0 10, 10 10)"); } // testLoopWithEndingSubLine() template<> template<> void object::test<6>() { runIndicesOfThenExtract("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "LINESTRING (10 10, 10 0, 0 0)"); } // test a subline equal to the parent loop // testLoopWithIdenticalSubLine() template<> template<> void object::test<7>() { runIndicesOfThenExtract("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)"); } // test a zero-length subline equal to the start point // testZeroLenSubLineAtStart() template<> template<> void object::test<8>() { runIndicesOfThenExtract("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "LINESTRING (0 0, 0 0)"); } // test a zero-length subline equal to a mid point // testZeroLenSubLineAtMidVertex() template<> template<> void object::test<9>() { runIndicesOfThenExtract("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "LINESTRING (10 10, 10 10)"); } // testIndexOfAfterSquare() template<> template<> void object::test<10>() { runIndexOfAfterTest("LINESTRING (0 0, 0 10, 10 10, 10 0, 0 0)", "POINT (0 0)"); } // testIndexOfAfterRibbon() template<> template<> void object::test<11>() { runIndexOfAfterTest("LINESTRING (0 0, 0 60, 50 60, 50 20, -20 20)", "POINT (0 20)"); } // testOffsetStartPoint() template<> template<> void object::test<12>() { runOffsetTest("LINESTRING (0 0, 10 10, 10 10, 20 20)", "POINT(0 0)", 1.0, "POINT (-0.7071067811865475 0.7071067811865475)"); runOffsetTest("LINESTRING (0 0, 10 10, 10 10, 20 20)", "POINT(0 0)", -1.0, "POINT (0.7071067811865475 -0.7071067811865475)"); runOffsetTest("LINESTRING (0 0, 10 10, 10 10, 20 20)", "POINT(10 10)", 5.0, "POINT (6.464466094067262 13.535533905932738)"); runOffsetTest("LINESTRING (0 0, 10 10, 10 10, 20 20)", "POINT(10 10)", -5.0, "POINT (13.535533905932738 6.464466094067262)"); } // testExtractLineBothIndicesAtEndpointXXX() template<> template<> void object::test<13>() { checkExtractLine( "MULTILINESTRING ((0 0, 10 0), (20 0, 25 0, 30 0))", -10, 10, "LINESTRING (10 0, 10 0)" ); } // testExtractLineBeyondRange() template<> template<> void object::test<14>() { checkExtractLine("LINESTRING (0 0, 10 10)", -100, 100, "LINESTRING (0 0, 10 10)"); } // testExtractLineReverse() template<> template<> void object::test<15>() { checkExtractLine("LINESTRING (0 0, 10 0)", 9, 1, "LINESTRING (9 0, 1 0)"); } // testExtractLineReverseMulti() template<> template<> void object::test<16>() { checkExtractLine("MULTILINESTRING ((0 0, 10 0), (20 0, 25 0, 30 0))", 19, 1, "MULTILINESTRING ((29 0, 25 0, 20 0), (10 0, 1 0))"); } // testExtractLineNegative() template<> template<> void object::test<17>() { checkExtractLine("LINESTRING (0 0, 10 0)", -9, -1, "LINESTRING (1 0, 9 0)"); } // testExtractLineNegativeReverse() template<> template<> void object::test<18>() { checkExtractLine("LINESTRING (0 0, 10 0)", -1, -9, "LINESTRING (9 0, 1 0)"); } // testExtractLineIndexAtEndpoint() template<> template<> void object::test<19>() { checkExtractLine("MULTILINESTRING ((0 0, 10 0), (20 0, 25 0, 30 0))", 10, -1, "LINESTRING (20 0, 25 0, 29 0)"); } // testExtractLineBothIndicesAtEndpoint() template<> template<> void object::test<20>() { checkExtractLine("MULTILINESTRING ((0 0, 10 0), (20 0, 25 0, 30 0))", 10, 10, "LINESTRING (10 0, 10 0)"); } // testExtractLineBothIndicesAtEndpointNegative() template<> template<> void object::test<21>() { checkExtractLine("MULTILINESTRING ((0 0, 10 0), (20 0, 25 0, 30 0))", -10, 10, "LINESTRING (10 0, 10 0)"); } // testExtractPointBeyondRange() template<> template<> void object::test<22>() { GeomPtr linearGeom(reader.read("LINESTRING (0 0, 10 10)")); LengthIndexedLine indexedLine(linearGeom.get()); Coordinate pt = indexedLine.extractPoint(100); ensure(pt == Coordinate(10, 10)); Coordinate pt2 = indexedLine.extractPoint(0); ensure(pt2 == Coordinate(0, 0)); } // testProjectPointWithDuplicateCoords() template<> template<> void object::test<23>() { GeomPtr linearGeom(reader.read("LINESTRING (0 0, 10 0, 10 0, 20 0)")); LengthIndexedLine indexedLine(linearGeom.get()); double projIndex = indexedLine.project(Coordinate(10, 1)); ensure(projIndex == 10.0); } /** * Tests that z values are interpolated * */ // testComputeZ() template<> template<> void object::test<24>() { GeomPtr linearGeom(reader.read("LINESTRING (0 0 0, 10 10 10)")); LengthIndexedLine indexedLine(linearGeom.get()); double projIndex = indexedLine.project(Coordinate(5, 5)); Coordinate projPt = indexedLine.extractPoint(projIndex); // System.out.println(projPt); ensure(projPt.equals3D(Coordinate(5, 5, 5))); } /** * Tests that if the input does not have Z ordinates, neither does the output. * */ // testComputeZNaN() template<> template<> void object::test<25>() { GeomPtr linearGeom(reader.read("LINESTRING (0 0, 10 10 10)")); LengthIndexedLine indexedLine(linearGeom.get()); double projIndex = indexedLine.project(Coordinate(5, 5)); Coordinate projPt = indexedLine.extractPoint(projIndex); ensure(0 != ISNAN(projPt.z)); } /** * From GEOS Ticket #323 */ // testProjectExtractPoint() template<> template<> void object::test<26>() { GeomPtr linearGeom(reader.read("MULTILINESTRING ((0 2, 0 0), (-1 1, 1 1))")); LengthIndexedLine indexedLine(linearGeom.get()); double index = indexedLine.project(Coordinate(1, 0)); Coordinate pt = indexedLine.extractPoint(index); ensure_equals(pt, Coordinate(0, 0)); } /** * Tests that leading and trailing zero-length sublines are trimmed in * the computed result, and that zero-length extracts return the lowest * extracted zero-length line */ // testExtractLineIndexAtEndpointWithZeroLenComponents() template<> template<> void object::test<27>() { checkExtractLine( "MULTILINESTRING ((0 0, 10 0), (10 0, 10 0), (20 0, 25 0, 30 0))", 10, -1, "LINESTRING (20 0, 25 0, 29 0)"); checkExtractLine( "MULTILINESTRING ((0 0, 10 0), (10 0, 10 0), (20 0, 25 0, 30 0))", 5, 10, "LINESTRING (5 0, 10 0)"); checkExtractLine( "MULTILINESTRING ((0 0,10 0),(10 0,10 0),(10 0,10 0),(20 0,25 0,30 0))", 10, 10, "LINESTRING (10 0, 10 0)"); checkExtractLine( "MULTILINESTRING((0 0,10 0),(10 0,10 0),(10 0,10 0),(10 0,10 0),(20 0,25 0,30 0))", 10, -10, "LINESTRING (10 0, 10 0)"); } #if 0 template<> template<> void object::test<28>() { GeomPtr linearGeom(reader.read( "MULTILINESTRING ((0 -2, 0 2),(-2 0, 2 0))" )); LengthIndexedLine indexedLine(linearGeom.get()); double projIndex = indexedLine.project(Coordinate(2, 1.9)); ensure_equals(projIndex, 8); Coordinate projPt = indexedLine.extractPoint(projIndex); ensure_equals(projPt, Coordinate(2, 0)); projIndex = indexedLine.project(Coordinate(2, 2.1)); ensure_equals(projIndex, 4); projPt = indexedLine.extractPoint(projIndex); ensure_equals(projPt, Coordinate(0, 2)); } #endif } // namespace tut geos-3.4.2/tests/unit/noding/0000755000175000017500000000000012206417243015675 5ustar frankiefrankiegeos-3.4.2/tests/unit/noding/BasicSegmentStringTest.cpp0000644000175000017500000001020212206417146022771 0ustar frankiefrankie// // Test Suite for geos::noding::BasicSegmentString class. #include // geos #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_basicsegmentstring_data { typedef std::auto_ptr \ CoordinateSequenceAutoPtr; typedef std::auto_ptr \ SegmentStringAutoPtr; const geos::geom::CoordinateSequenceFactory* csFactory; SegmentStringAutoPtr makeSegmentString(geos::geom::CoordinateSequence* cs, void *d = 0) { return SegmentStringAutoPtr( new geos::noding::BasicSegmentString(cs, d) ); } test_basicsegmentstring_data() : csFactory(geos::geom::CoordinateArraySequenceFactory::instance()) { } ~test_basicsegmentstring_data() { } }; typedef test_group group; typedef group::object object; group test_basicsegmentstring_group("geos::noding::BasicSegmentString"); // // Test Cases // // test constructor with 2 equal points template<> template<> void object::test<1>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(0, 0); cs->add(c0); cs->add(c1); ensure_equals(cs->size(), 2u); SegmentStringAutoPtr ss(makeSegmentString(cs.get())); ensure(0 != ss.get()); ensure_equals(ss->size(), 2u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinates(), cs.get()); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->isClosed(), true); // this would throw an exception bool octant_failed=false; try { ss->getSegmentOctant(0); } catch (...) { octant_failed=true; } ensure(octant_failed); } // test constructor with 2 different points template<> template<> void object::test<2>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(1, 0); cs->add(c0); cs->add(c1); ensure_equals(cs->size(), 2u); SegmentStringAutoPtr ss(makeSegmentString(cs.get())); ensure(0 != ss.get()); ensure_equals(ss->size(), 2u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinates(), cs.get()); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->isClosed(), false); ensure_equals(ss->getSegmentOctant(0), 0); } // test constructor with 4 different points forming a ring template<> template<> void object::test<3>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(1, 0); geos::geom::Coordinate c2(1, 1); cs->add(c0); cs->add(c1); cs->add(c2); cs->add(c0); ensure_equals(cs->size(), 4u); SegmentStringAutoPtr ss(makeSegmentString(cs.get())); ensure(0 != ss.get()); ensure_equals(ss->size(), 4u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinates(), cs.get()); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->getCoordinate(2), c2); ensure_equals(ss->getCoordinate(3), c0); ensure_equals(ss->isClosed(), true); ensure_equals(ss->getSegmentOctant(2), 4); ensure_equals(ss->getSegmentOctant(1), 1); ensure_equals(ss->getSegmentOctant(0), 0); } // test Octant class template<> template<> void object::test<4>() { geos::geom::Coordinate p0(0, 0); geos::geom::Coordinate p1(5,-5); int octant_rc1 = 0; int octant_rc2 = 0; int testPassed = true; try { octant_rc1 = geos::noding::Octant::octant(p0,p1); octant_rc2 = geos::noding::Octant::octant(&p0,&p1); testPassed = (octant_rc1 == octant_rc2); } catch (...) { testPassed = false; } ensure( 0 != testPassed); } } // namespace tut geos-3.4.2/tests/unit/noding/NodedSegmentStringTest.cpp0000644000175000017500000001455112206417146023014 0ustar frankiefrankie// // Test Suite for geos::noding::NodedSegmentString class. #include // geos #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_nodedsegmentstring_data { typedef std::auto_ptr \ CoordinateSequenceAutoPtr; typedef std::auto_ptr \ SegmentStringAutoPtr; const geos::geom::CoordinateSequenceFactory* csFactory; SegmentStringAutoPtr makeSegmentString(geos::geom::CoordinateSequence* cs, void *d = 0) { return SegmentStringAutoPtr( new geos::noding::NodedSegmentString(cs, d) ); } test_nodedsegmentstring_data() : csFactory(geos::geom::CoordinateArraySequenceFactory::instance()) { } ~test_nodedsegmentstring_data() { } }; typedef test_group group; typedef group::object object; group test_nodedsegmentstring_group("geos::noding::NodedSegmentString"); // // Test Cases // // test constructor with 2 equal points template<> template<> void object::test<1>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(0, 0); cs->add(c0); cs->add(c1); ensure_equals(cs->size(), 2u); SegmentStringAutoPtr ss(makeSegmentString(cs.release())); ensure(0 != ss.get()); ensure_equals(ss->size(), 2u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->isClosed(), true); ensure_equals(ss->getNodeList().size(), 0u); ensure_equals(ss->getSegmentOctant(0), 0); } // test constructor with 2 different points template<> template<> void object::test<2>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(1, 0); cs->add(c0); cs->add(c1); ensure_equals(cs->size(), 2u); SegmentStringAutoPtr ss(makeSegmentString(cs.release())); ensure(0 != ss.get()); ensure_equals(ss->size(), 2u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->isClosed(), false); ensure_equals(ss->getSegmentOctant(0), 0); ensure_equals(ss->getNodeList().size(), 0u); } // test constructor with 4 different points forming a ring template<> template<> void object::test<3>() { CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); ensure(0 != cs.get()); geos::geom::Coordinate c0(0, 0); geos::geom::Coordinate c1(1, 0); geos::geom::Coordinate c2(1, 1); cs->add(c0); cs->add(c1); cs->add(c2); cs->add(c0); ensure_equals(cs->size(), 4u); SegmentStringAutoPtr ss(makeSegmentString(cs.release())); ensure(0 != ss.get()); ensure_equals(ss->size(), 4u); ensure_equals(ss->getData(), (void*)0); ensure_equals(ss->getCoordinate(0), c0); ensure_equals(ss->getCoordinate(1), c1); ensure_equals(ss->getCoordinate(2), c2); ensure_equals(ss->getCoordinate(3), c0); ensure_equals(ss->isClosed(), true); ensure_equals(ss->getSegmentOctant(2), 4); ensure_equals(ss->getSegmentOctant(1), 1); ensure_equals(ss->getSegmentOctant(0), 0); ensure_equals(ss->getNodeList().size(), 0u); } // test Octant class template<> template<> void object::test<4>() { geos::geom::Coordinate p0(0, 0); geos::geom::Coordinate p1(5,-5); int octant_rc1 = 0; int octant_rc2 = 0; int testPassed = true; try { octant_rc1 = geos::noding::Octant::octant(p0,p1); octant_rc2 = geos::noding::Octant::octant(&p0,&p1); testPassed = (octant_rc1 == octant_rc2); } catch (...) { testPassed = false; } ensure( 0 != testPassed); } // test adding intersections template<> template<> void object::test<5>() { geos::geom::Coordinate p0(0, 0); geos::geom::Coordinate p1(10, 0); CoordinateSequenceAutoPtr cs(csFactory->create((size_t)0, 2)); cs->add(p0); cs->add(p1); SegmentStringAutoPtr ss(makeSegmentString(cs.release())); ensure_equals(ss->getNodeList().size(), 0u); // the intersection is invalid, but SegmentString trusts us ss->addIntersection(p0, 0); ensure_equals(ss->getNodeList().size(), 1u); // This node is already present, so shouldn't be // accepted as a new one ss->addIntersection(p0, 0); ensure_equals(ss->getNodeList().size(), 1u); ss->addIntersection(p1, 0); ensure_equals(ss->getNodeList().size(), 2u); ss->addIntersection(p1, 0); ensure_equals(ss->getNodeList().size(), 2u); ss->addIntersection(p0, 0); ensure_equals(ss->getNodeList().size(), 2u); } // TODO: test getting noded substrings // template<> // template<> // void object::test<6>() // { // geos::geom::Coordinate cs1p0(0, 0); // geos::geom::Coordinate cs1p1(10, 0); // CoordinateSequenceAutoPtr cs1(csFactory->create(0, 2)); // cs1->add(cs1p0); // cs1->add(cs1p1); // // geos::geom::Coordinate cs2p0(5, -5); // geos::geom::Coordinate cs2p1(5, 5); // CoordinateSequenceAutoPtr cs2(csFactory->create(0, 2)); // cs2->add(cs2p0); // cs2->add(cs2p1); // // using geos::noding::SegmentString; // using geos::noding::NodedSegmentString; // // SegmentString::NonConstVect inputStrings; // inputStrings.push_back(makeSegmentString(cs2.get()).get()); // // std::auto_ptr nodedStrings( // NodedSegmentString::getNodedSubstrings(inputStrings) // ); // // ensure_equals(nodedStrings->size(), 0u); // } } // namespace tut geos-3.4.2/tests/unit/noding/OrientedCoordinateArray.cpp0000644000175000017500000000727012206417146023171 0ustar frankiefrankie// $Id$ // // Test Suite for geos::noding::OrientedCoordinateArray class. #include // geos #include #include #include #include #include #include #include // std #include using namespace geos::geom; using namespace geos::noding; namespace tut { // // Test Group // // Common data used by all tests struct test_orientedcoordinatearray_data { geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; typedef std::auto_ptr CoordSeqPtr; typedef std::auto_ptr GeomPtr; test_orientedcoordinatearray_data() : pm_(), factory_(&pm_), reader_(&factory_) {} CoordSeqPtr coords_from_wkt(const char *wkt) { GeomPtr g ( reader_.read(wkt) ); CoordSeqPtr cs ( g->getCoordinates() ); return cs; } }; typedef test_group group; typedef group::object object; group test_orientedcoordinatearray_group("geos::noding::OrientedCoordinateArray"); // // Test Cases // // Compare to self, closed template<> template<> void object::test<1>() { const char *coords = "LINESTRING(361600 6126500, 361620 6126560, 361630 6126550, 361620 6126530, 361600 6126500)"; CoordSeqPtr cs = coords_from_wkt(coords); OrientedCoordinateArray oca1(*cs); OrientedCoordinateArray oca2(*cs); ensure_equals(oca1.compareTo(oca2), 0); } // Compare to reverse of self, closed template<> template<> void object::test<2>() { const char *coords1 = "LINESTRING(361600 6126500, 361620 6126560, 361630 6126550, 361620 6126530, 361600 6126500)"; const char *coords2 = "LINESTRING(361600 6126500, 361620 6126530, 361630 6126550, 361620 6126560, 361600 6126500)"; CoordSeqPtr cs1 = coords_from_wkt(coords1); OrientedCoordinateArray oca1(*cs1); CoordSeqPtr cs2 = coords_from_wkt(coords2); OrientedCoordinateArray oca2(*cs2); ensure_equals(oca1.compareTo(oca2), 0); } // Compare to self, not closed template<> template<> void object::test<3>() { const char *coords = "LINESTRING(361620 6126560, 361630 6126550, 361620 6126530, 361600 6126500)"; CoordSeqPtr cs = coords_from_wkt(coords); OrientedCoordinateArray oca1(*cs); OrientedCoordinateArray oca2(*cs); ensure_equals(oca1.compareTo(oca2), 0); } // Compare to reverse of self, not closed template<> template<> void object::test<4>() { const char *coords1 = "LINESTRING(361620 6126560, 361630 6126550, 361620 6126530, 361600 6126500)"; const char *coords2 = "LINESTRING(361600 6126500, 361620 6126530, 361630 6126550, 361620 6126560)"; CoordSeqPtr cs1 = coords_from_wkt(coords1); OrientedCoordinateArray oca1(*cs1); CoordSeqPtr cs2 = coords_from_wkt(coords2); OrientedCoordinateArray oca2(*cs2); ensure_equals(oca1.compareTo(oca2), 0); } // Compare both ways template<> template<> void object::test<5>() { const char *coords1 = "LINESTRING(0 0, 10 0)"; const char *coords2 = "LINESTRING(0 0, 10 0, 11 0)"; CoordSeqPtr cs1 = coords_from_wkt(coords1); OrientedCoordinateArray oca1(*cs1); CoordSeqPtr cs2 = coords_from_wkt(coords2); OrientedCoordinateArray oca2(*cs2); ensure_equals(oca1.compareTo(oca2), -1); ensure_equals(oca2.compareTo(oca1), 1); } } // namespace tut geos-3.4.2/tests/unit/noding/SegmentNodeTest.cpp0000644000175000017500000001306012206417146021453 0ustar frankiefrankie// // Test Suite for geos::noding::SegmentNode class. #include // geos #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by all tests struct test_segmentnode_data { typedef std::auto_ptr CoordSeqPtr; typedef std::auto_ptr SegmentStringPtr; const geos::geom::CoordinateSequenceFactory* factory_; test_segmentnode_data() : factory_(geos::geom::CoordinateArraySequenceFactory::instance()) {} }; typedef test_group group; typedef group::object object; group test_segmentnode_group("geos::noding::SegmentNode"); // // Test Cases // // Test of overriden constructor template<> template<> void object::test<1>() { using geos::geom::Coordinate; using geos::noding::NodedSegmentString; using geos::noding::SegmentNode; // Create coordinates sequence const size_t coords_size = 2; CoordSeqPtr cs( factory_->create((size_t)0, coords_size) ); ensure( 0 != cs.get() ); Coordinate c0(0, 0); Coordinate c1(3, 3); cs->add(c0); cs->add(c1); ensure_equals( cs->size(), coords_size ); // Create SegmentString instance NodedSegmentString segment(cs.release(), 0); ensure_equals( segment.size(), coords_size ); // Construct a node on the given NodedSegmentString { const size_t segment_index = 0; SegmentNode node( segment, Coordinate(3,3), segment_index, segment.getSegmentOctant(segment_index) ); ensure_equals( node.segmentIndex, segment_index ); // only first endpoint is considered interior ensure( node.isInterior() ); // // TODO - mloskot // 1. What's the purpose of isEndPoint() and how to test it? // 2. Add new test cases // } } template<> template<> void object::test<2>() { using geos::geom::Coordinate; using geos::noding::NodedSegmentString; using geos::noding::SegmentNode; // Create coordinates sequence const size_t coords_size = 2; CoordSeqPtr cs( factory_->create((size_t)0, coords_size) ); ensure( 0 != cs.get() ); Coordinate c0(0, 0); Coordinate c1(3, 3); cs->add(c0); cs->add(c1); ensure_equals( cs->size(), coords_size ); // Create SegmentString instance NodedSegmentString segment(cs.release(), 0); ensure_equals( segment.size(), coords_size ); // Construct an interior node on the given NodedSegmentString { const size_t segment_index = 0; SegmentNode node( segment, Coordinate(0,0), segment_index, segment.getSegmentOctant(segment_index) ); ensure_equals( node.segmentIndex, segment_index ); // on first endpoint ... ensure( ! node.isInterior() ); } } template<> template<> void object::test<3>() { using geos::geom::Coordinate; using geos::noding::NodedSegmentString; using geos::noding::SegmentNode; // Create coordinates sequence const size_t coords_size = 2; CoordSeqPtr cs( factory_->create((size_t)0, coords_size) ); ensure( 0 != cs.get() ); Coordinate c0(0, 0); Coordinate c1(3, 3); cs->add(c0); cs->add(c1); ensure_equals( cs->size(), coords_size ); // Create SegmentString instance NodedSegmentString segment(cs.release(), 0); ensure_equals( segment.size(), coords_size ); // Construct an interior node on the given NodedSegmentString { const size_t segment_index = 0; SegmentNode node( segment, Coordinate(2,2), segment_index, segment.getSegmentOctant(segment_index) ); ensure_equals( node.segmentIndex, segment_index ); // on first endpoint ... ensure( node.isInterior() ); } } template<> template<> void object::test<4>() { using geos::geom::Coordinate; using geos::noding::NodedSegmentString; using geos::noding::SegmentNode; // Create coordinates sequence const size_t coords_size = 2; CoordSeqPtr cs( factory_->create((size_t)0, coords_size) ); ensure( 0 != cs.get() ); Coordinate c0(0, 0); Coordinate c1(3, 3); cs->add(c0); cs->add(c1); ensure_equals( cs->size(), coords_size ); // Create SegmentString instance NodedSegmentString segment(cs.release(), 0); ensure_equals( segment.size(), coords_size ); // Construct a node that doesn't even intersect !! { const size_t segment_index = 0; SegmentNode node( segment, Coordinate(1,2), segment_index, segment.getSegmentOctant(segment_index) ); ensure_equals( node.segmentIndex, segment_index ); // on first endpoint ... ensure( node.isInterior() ); } } } // namespace tut geos-3.4.2/tests/unit/noding/SegmentPointComparatorTest.cpp0000644000175000017500000001143312206417146023711 0ustar frankiefrankie// // Test Suite for geos::noding::SegmentPointComparator class. // // Ports tests found in jts/junit/noding/SegmentPointComparatorTest.java // and jts/junit/noding/SegmentPointComparatorFullTest.java #include // geos #include #include #include #include #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_segmentpointcomparator_data { typedef std::auto_ptr CoordinateSequenceAutoPtr; typedef std::auto_ptr SegmentStringAutoPtr; typedef geos::geom::Coordinate Coordinate; typedef geos::geom::LineSegment LineSegment; typedef geos::geom::PrecisionModel PrecisionModel; PrecisionModel pm; test_segmentpointcomparator_data() : pm(1.0) {} void checkNodePosition(int octant, double x0, double y0, double x1, double y1, int expectedPositionValue) { using geos::noding::SegmentPointComparator; int posValue = SegmentPointComparator::compare(octant, Coordinate(x0, y0), Coordinate(x1, y1) ); ensure( posValue == expectedPositionValue ); } void checkNodePosition(const LineSegment& seg, const Coordinate& p0, const Coordinate& p1, int expectedPositionValue) { using geos::noding::Octant; using geos::noding::SegmentPointComparator; int octant = Octant::octant(seg.p0, seg.p1); int posValue = SegmentPointComparator::compare(octant, p0, p1); ensure( posValue == expectedPositionValue ); } Coordinate computePoint(const LineSegment& seg, double dist) { double dx = seg.p1.x - seg.p0.x; double dy = seg.p1.y - seg.p0.y; double len = seg.getLength(); Coordinate pt(dist * dx / len, dist * dy / len); pm.makePrecise(pt); return pt; } void checkPointsAtDistance(const LineSegment& seg, double dist0, double dist1) { using geos::geom::Coordinate; Coordinate p0 = computePoint(seg, dist0); Coordinate p1 = computePoint(seg, dist1); if (p0.equals(p1)) { checkNodePosition(seg, p0, p1, 0); } else { checkNodePosition(seg, p0, p1, -1); checkNodePosition(seg, p1, p0, 1); } } void checkSegment(double x, double y) { Coordinate seg0(0, 0); Coordinate seg1(x, y); LineSegment seg(seg0, seg1); for (int i = 0; i < 4; i++) { double dist = i; double gridSize = 1 / pm.getScale(); checkPointsAtDistance(seg, dist, dist + 1.0 * gridSize); checkPointsAtDistance(seg, dist, dist + 2.0 * gridSize); checkPointsAtDistance(seg, dist, dist + 3.0 * gridSize); checkPointsAtDistance(seg, dist, dist + 4.0 * gridSize); } } }; typedef test_group group; typedef group::object object; group test_segmentpointcomparator_group("geos::noding::SegmentPointComparator"); // // Test Cases // // testOctant0 (from simple unit test) template<> template<> void object::test<1>() { checkNodePosition(0, 1, 1, 2, 2, -1); checkNodePosition(0, 1, 0, 1, 1, -1); } // testQuadrant0 template<> template<> void object::test<2>() { checkSegment(100, 0); checkSegment(100, 50); checkSegment(100, 100); checkSegment(100, 150); checkSegment(0, 100); } // testQuadrant4 template<> template<> void object::test<3>() { checkSegment(100, -50); checkSegment(100, -100); checkSegment(100, -150); checkSegment(0, -100); } // testQuadrant1 template<> template<> void object::test<4>() { checkSegment(-100, 0); checkSegment(-100, 50); checkSegment(-100, 100); checkSegment(-100, 150); } // testQuadrant2 template<> template<> void object::test<5>() { checkSegment(-100, 0); checkSegment(-100, -50); checkSegment(-100, -100); checkSegment(-100, -150); } } // namespace tut geos-3.4.2/tests/unit/noding/snapround/0000755000175000017500000000000012206417243017706 5ustar frankiefrankiegeos-3.4.2/tests/unit/noding/snapround/HotPixelTest.cpp0000644000175000017500000000504312206417146023012 0ustar frankiefrankie// // Test Suite for geos::noding::snapround::HotPixel class. #include // geos #include #include #include #include #include // std #include namespace tut { // // Test Group // // Common data used by all tests struct test_hotpixel_data { typedef geos::geom::Coordinate Coordinate; typedef geos::geom::Envelope Envelope; typedef geos::geom::PrecisionModel PrecisionModel; typedef geos::algorithm::LineIntersector LineIntersector; typedef geos::noding::snapround::HotPixel HotPixel; test_hotpixel_data() {} }; typedef test_group group; typedef group::object object; group test_hotpixel_group("geos::noding::snapround::HotPixel"); // // Test Cases // // Test with scaleFactor=1 template<> template<> void object::test<1>() { LineIntersector li; Coordinate pt(10, 10); HotPixel hp(pt, 1, li); ensure_equals(hp.getCoordinate(), pt); const Envelope& env = hp.getSafeEnvelope(); ensure_equals(env.toString(), "Env[9.25:10.75,9.25:10.75]"); Coordinate p0(0, 10); Coordinate p1(20, 10); ensure( "hp.intersects 0 10, 20 10", hp.intersects(p0, p1) ); p1.y = 11; // intersection point within 0.75 distance ensure( "hp.intersects(0 10, 20 11)", hp.intersects(p0, p1)); p1.y = 20; ensure_not( "!hp.intersects(0 10, 20 20)", hp.intersects(p0, p1)); } // Test with scaleFactor=10 // See http://trac.osgeo.org/geos/ticket/498 template<> template<> void object::test<2>() { LineIntersector li; Coordinate pt(10, 10); HotPixel hp(pt, 10, li); ensure_equals(hp.getCoordinate(), pt); const Envelope& env = hp.getSafeEnvelope(); ensure_equals(env.toString(), "Env[9.925:10.075,9.925:10.075]"); Coordinate p0(0, 10); Coordinate p1(20, 10); ensure( "hp.intersects 0 10, 20 10", hp.intersects(p0, p1) ); p1.y = 11; // intersection point not within 0.075 distance ensure_not( "hp.intersects(0 10, 20 11)", hp.intersects(p0, p1)); } // Test intersects // See http://trac.osgeo.org/geos/ticket/635 template<> template<> void object::test<3>() { double scale = 1.0; Coordinate p1(0,0); Coordinate p2(3,2); Coordinate p3(1,1); PrecisionModel pm(scale); LineIntersector li(&pm); HotPixel hp(p3, scale, li); ensure(hp.intersects(p1,p2)); } // TODO: test addSnappedNode ! } // namespace tut geos-3.4.2/tests/unit/noding/snapround/MCIndexSnapRounderTest.cpp0000644000175000017500000001052212206417146024724 0ustar frankiefrankie// // Test Suite for geos::noding::snapround::MCIndexSnapRounder class. #include // geos #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // std #include #include #include #include #include namespace tut { // // Test Group // // Common data used by all tests struct test_mcidxsnprndr_data { typedef geos::noding::SegmentString SegmentString; typedef geos::noding::NodedSegmentString NodedSegmentString; typedef geos::noding::snapround::MCIndexSnapRounder MCIndexSnapRounder; typedef geos::noding::Noder Noder; typedef geos::io::WKTReader WKTReader; typedef geos::io::WKBReader WKBReader; typedef geos::io::WKTWriter WKTWriter; typedef geos::io::WKBWriter WKBWriter; typedef geos::geom::Geometry Geometry; typedef geos::geom::PrecisionModel PrecisionModel; typedef geos::geom::CoordinateSequence CoordinateSequence; typedef std::auto_ptr CoordSeqPtr; typedef std::auto_ptr GeomPtr; typedef std::vector SegStrVct; typedef std::vector GeomVct; const geos::geom::GeometryFactory gf_; test_mcidxsnprndr_data() : gf_() {} GeomPtr getGeometry(SegStrVct& vct) { GeomVct *lines = new GeomVct; for (SegStrVct::size_type i=0, n=vct.size(); ipush_back( gf_.createLineString(*(ss->getCoordinates())) ); } return GeomPtr(gf_.createMultiLineString(lines)); } void getSegmentStrings(const Geometry& g, SegStrVct& vct) { CoordSeqPtr s ( g.getCoordinates() ); vct.push_back( new NodedSegmentString(s.release(), 0) ); } GeomPtr readGeometry(const std::string& wkt) { GeomPtr g; if ( wkt[0] == '0' || wkt[0] == '1' ) { WKBReader r; std::istringstream is(wkt); g.reset( r.readHEX(is) ); } else { WKTReader r; g.reset( r.read(wkt) ); } return g; } void getSegmentStrings(const std::string& wkt, SegStrVct& vct) { GeomPtr g = readGeometry(wkt); getSegmentStrings(*g, vct); } void freeSegmentStrings(SegStrVct& vct) { for (SegStrVct::size_type i=0, n=vct.size(); i group; typedef group::object object; group test_mcidxsnprndr_group( "geos::noding::snapround::MCIndexSnapRounder" ); // // Test Cases // // This test would fail before fix in r3528 template<> template<> void object::test<1>() { std::string wkt0("LINESTRING(99739.70596 -2239218.0625,99739.85604 -2239218.21258,99739.85605 -2239218.21258, 99739.85605 -2239218.21258,99739.86851 -2239218.21258,99739.86851 -2239218.20012, 99739.86851 -2239218.20012,99739.86851 -2239218.04, 99739.95848 -2239218.11015,99739.86851 -2239218.20012, 99739.86851 -2239218.20012,99739.85605 -2239218.21258, 99739.85605 -2239218.21258,99739.80901 -2239218.25961, 99739.80901 -2239218.25961,99739.68863 -2239218.38, 99739.86204 -2239218.31264,99739.80901 -2239218.25961, 99739.80901 -2239218.25961,99739.66841 -2239218.11901)"); SegStrVct nodable; getSegmentStrings(wkt0, nodable); ensure_equals( nodable.size(), 1u ); PrecisionModel pm(1e-5); MCIndexSnapRounder noder(pm); ensure_equals( nodable.size(), 1u ); noder.computeNodes(&nodable); std::auto_ptr noded ( noder.getNodedSubstrings() ); ensure_equals( "1e-5", noded->size(), 178u ); freeSegmentStrings(*noded); freeSegmentStrings(nodable); } } // namespace tut geos-3.4.2/tests/unit/operation/0000755000175000017500000000000012206417243016417 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/IsSimpleOpTest.cpp0000644000175000017500000000512712206417146022016 0ustar frankiefrankie// // Test Suite for geos::operation::IsSimpleOp class // Ported from JTS junit/operation/IsSimpleTest.java #include // geos #include #include #include #include #include #include #include // std #include #include using namespace geos::geom; using namespace geos::operation; namespace tut { // // Test Group // struct test_issimpleop_data { geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; double tolerance_; test_issimpleop_data() : pm_(1), factory_(&pm_, 0), reader_(&factory_), tolerance_(0.00005) {} }; typedef test_group group; typedef group::object object; group test_issimpleop_group("geos::operation::IsSimpleOp"); // // Test Cases // // 1 - Test cross template<> template<> void object::test<1>() { const std::string wkt("MULTILINESTRING ((20 120, 120 20), (20 20, 120 120))"); const Geometry::AutoPtr geom(reader_.read(wkt)); // TODO - mloskot: What about support of new features of BoundaryNodeRule, in JTS IsSimpleOp op; bool simple = op.isSimpleLinearGeometry(geom.get()); ensure( false == simple ); // TODO - mloskot: // There are missing features not (re)implemented in IsSimpleOp, in GEOS. // So, all tests in this suite have been simplified in comparison to original JTS tests. // //Coordinate loc(70, 70); //Coordinate nonSimpleLoc = op.getNonSimpleLocation(); //loc.distance(nonSimpleLoc) < TOLERANCE } // 2 - Test MultiLineString with ring touching at the end point template<> template<> void object::test<2>() { const std::string wkt("MULTILINESTRING ((100 100, 20 20, 200 20, 100 100), (100 200, 100 100))"); const Geometry::AutoPtr geom(reader_.read(wkt)); IsSimpleOp op; bool simple = op.isSimpleLinearGeometry(geom.get()); ensure( false == simple ); } // 3 - Test simple LineString template<> template<> void object::test<3>() { const std::string wkt("LINESTRING (100 100, 20 20, 200 20, 100 100)"); const Geometry::AutoPtr geom(reader_.read(wkt)); IsSimpleOp op; bool simple = op.isSimpleLinearGeometry(geom.get()); ensure( true == simple ); } } // namespace tut geos-3.4.2/tests/unit/operation/buffer/0000755000175000017500000000000012206417243017670 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/buffer/BufferBuilderTest.cpp0000644000175000017500000001105612206417146023761 0ustar frankiefrankie// // Test Suite for geos::operation::buffer::BufferBuilder class. // tut #include // geos #include #include #include #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_bufferbuilder_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; int const default_quadrant_segments; typedef geos::geom::Geometry::AutoPtr GeomPtr; typedef std::auto_ptr CSPtr; test_bufferbuilder_data() : gf(), wktreader(&gf), default_quadrant_segments(geos::operation::buffer::BufferParameters::DEFAULT_QUADRANT_SEGMENTS) { ensure_equals(default_quadrant_segments, int(8)); } private: // noncopyable test_bufferbuilder_data(test_bufferbuilder_data const& other); test_bufferbuilder_data& operator=(test_bufferbuilder_data const& rhs); }; typedef test_group group; typedef group::object object; group test_bufferbuilder_group("geos::operation::buffer::BufferBuilder"); // // Test Cases // // Left-side and right-side offset curve // See http://trac.osgeo.org/geos/ticket/633 template<> template<> void object::test<1>() { using geos::operation::buffer::BufferBuilder; using geos::operation::buffer::BufferParameters; using geos::algorithm::CGAlgorithms; using geos::geom::LineString; // Original input from test in ticket #633 //std::string wkt0("LINESTRING (" // "665.7317504882812500 133.0762634277343700," // "1774.4752197265625000 19.9391822814941410," // "756.2413940429687500 466.8306579589843700," // "626.1337890625000000 1898.0147705078125000," // "433.8007202148437500 404.6052856445312500)"); //double const distance = 57.164000837203; // Simplified equivalent input std::string wkt0("LINESTRING(0 0, 50 -10, 10 10, 0 50, -10 10)"); double const distance = 5; GeomPtr g0(wktreader.read(wkt0)); ensure(0 != g0.get()); ensure_equals(g0->getNumPoints(), std::size_t(5)); BufferParameters params; params.setEndCapStyle(BufferParameters::CAP_FLAT); params.setQuadrantSegments(8); params.setJoinStyle(BufferParameters::JOIN_MITRE); params.setMitreLimit(5.57F); //params.setSingleSided(true); // DO NOT switch for non-areal input, see ticket #633 BufferBuilder builder(params); ensure(distance > 0); // left-side { GeomPtr gB(builder.bufferLineSingleSided(g0.get(), distance, true)); ensure(0 != gB.get()); ensure_equals(gB->getGeometryTypeId(), geos::geom::GEOS_LINESTRING); // Left-side offset curve expected with 5+ vertices ensure(gB->getNumPoints() >= g0->getNumPoints()); // For left-side offset curve, the offset will be at the left side of the input line // and retain the same direction. ensure_equals( CGAlgorithms::isCCW(dynamic_cast(g0.get())->getCoordinatesRO()), CGAlgorithms::isCCW(dynamic_cast(gB.get())->getCoordinatesRO())); } // right-side { GeomPtr gB(builder.bufferLineSingleSided(g0.get(), distance, false)); ensure(0 != gB.get()); ensure_equals(gB->getGeometryTypeId(), geos::geom::GEOS_LINESTRING); // Right-side offset curve expected with 5+ vertices ensure(gB->getNumPoints() >= g0->getNumPoints()); // For right-side offset curve, it'll be at the right side // and in the opposite direction. ensure_equals( CGAlgorithms::isCCW(dynamic_cast(g0.get())->getCoordinatesRO()), !CGAlgorithms::isCCW(dynamic_cast(gB.get())->getCoordinatesRO())); } } } // namespace tut geos-3.4.2/tests/unit/operation/buffer/BufferOpTest.cpp0000644000175000017500000006760212206417146022761 0ustar frankiefrankie// // Test Suite for geos::operation::buffer::BufferOp class. // tut #include // geos #include #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_bufferop_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; int const default_quadrant_segments; typedef geos::geom::Geometry::AutoPtr GeomPtr; typedef std::auto_ptr CSPtr; test_bufferop_data() : gf(), wktreader(&gf), default_quadrant_segments(geos::operation::buffer::BufferParameters::DEFAULT_QUADRANT_SEGMENTS) { ensure_equals(default_quadrant_segments, int(8)); } private: // noncopyable test_bufferop_data(test_bufferop_data const& other); test_bufferop_data& operator=(test_bufferop_data const& rhs); }; typedef test_group group; typedef group::object object; group test_bufferop_group("geos::operation::buffer::BufferOp"); // // Test Cases // template<> template<> void object::test<1>() { using geos::operation::buffer::BufferOp; std::string wkt0("POINT(0 0)"); GeomPtr g0(wktreader.read(wkt0)); double const distance = 0.0; BufferOp op(g0.get()); GeomPtr gBuffer(op.getResultGeometry(distance)); ensure(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure_equals(gBuffer->getNumPoints(), std::size_t(0)); } template<> template<> void object::test<2>() { using geos::operation::buffer::BufferOp; std::string wkt0("POINT(0 0)"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with default buffering parameters double const distance = 1.0; BufferOp op(g0.get()); GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() > std::size_t(32)); } template<> template<> void object::test<3>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; std::string wkt0("POINT(0 0)"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with custom parameters: 32 quadrant segments int const segments = 32; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = 1.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() > std::size_t(129)); } template<> template<> void object::test<4>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's buffer.xml, test case #25 std::string wkt0("MULTIPOLYGON(((708258.754920656 2402197.91172757,708257.029447455 2402206.56901508,708652.961095455 2402312.65463437,708657.068786251 2402304.6356364,708258.754920656 2402197.91172757)),((708653.498611049 2402311.54647056,708708.895756966 2402203.47250014,708280.326454234 2402089.6337791,708247.896591321 2402252.48269854,708367.379593851 2402324.00761653,708248.882609455 2402253.07294874,708249.523621829 2402244.3124463,708261.854734465 2402182.39086576,708262.818392579 2402183.35452387,708653.498611049 2402311.54647056)))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with custom parameters: 24 quadrant segments { int const segments = default_quadrant_segments * 3; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = 0.0001; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(245)); } // Buffer point with custom parameters: 32 quadrant segments { int const segments = default_quadrant_segments * 4; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = 0.0001; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(318)); } } template<> template<> void object::test<5>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's TestBufferExternal2.xml, test case #31 std::string wkt0("POLYGON((167187.935985 527215.129985,167246.663985 527205.580985,167280.107985 527210.602985,167314.083985 527213.149985,167354.196985 527218.563985,167363.609985 527204.834985,167358.459985 527177.204985,167344.405985 527172.240985,167323.325985 527164.793985,167304.557985 527167.748985,167285.789985 527170.703985,167260.854985 527176.007985,167211.198985 527149.591985,167165.408985 527140.439985,167141.660985 527146.308985,167119.062985 527137.503985,167119.967985 527139.010985,167078.296985 527188.560985,167105.238985 527267.140985,167090.957985 527316.213985,167094.770985 527321.819985,167082.593985 527377.599985,167065.952985 527417.668985,167056.312985 527449.383985,167043.546985 527485.510985,167019.927985 527525.916985,166982.769985 527539.710985,166961.717985 527606.388985,166933.263985 527657.009985,166899.206985 527710.191985,166916.325985 527722.287985,166973.067985 527744.810985,166978.160985 527695.099985,167043.308985 527684.770985,167080.550985 527644.941985,167101.716985 527610.077985,167109.672985 527576.692985,167099.068985 527561.394985,167097.537985 527527.027985,167105.044985 527510.384985,167137.888985 527502.771985,167160.386985 527500.228985,167174.041985 527468.108985,167205.365985 527466.936985,167200.090985 527446.692985,167182.286985 527416.893985,167214.905985 527399.163985,167245.980985 527379.346985,167258.755985 527325.736985,167261.469985 527296.920985,167237.119985 527273.314985,167201.524985 527264.407985,167192.491985 527252.494985,167172.090985 527216.630985,167187.935985 527215.129985))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with quadrant segments value (x4) BufferParameters params(default_quadrant_segments * 4); BufferOp op(g0.get(), params); double const distance = -75.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(8)); } template<> template<> void object::test<6>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's TestBufferExternal2.xml, test case #41 std::string wkt0("POLYGON((148410.699985 522834.902985,148442.757985 522825.725985,148460.309985 522827.514985,148487.864985 522844.888985,148500.821985 522849.224985,148522.555985 522842.060985,148549.245985 522836.360985,148568.572985 522826.852985,148584.252985 522812.743985,148609.816985 522787.145985,148614.009985 522767.881985,148612.795985 522752.758985,148612.563985 522743.189985,148618.720985 522735.053985,148625.781585 522726.296485,148618.662985 522724.739985,148612.278985 522723.775985,148605.112985 522714.525985,148611.687985 522677.987985,148611.797985 522647.963985,148594.739985 522625.727985,148584.565985 522622.805985,148562.730985 522628.324985,148543.283985 522615.292985,148536.597985 522557.684985,148536.223985 522555.223985,148534.274985 522546.378985,148533.665985 522541.970985,148533.794985 522540.094985,148535.172985 522535.741985,148538.094985 522529.403985,148538.611985 522526.777985,148539.936985 522513.990985,148540.169985 522509.496985,148540.192985 522500.589985,148540.851985 522495.877985,148540.474985 522491.607985,148539.391985 522489.734985,148536.121985 522486.259985,148532.239985 522483.953985,148529.487985 522487.690985,148527.557985 522489.161985,148523.269985 522490.157985,148512.547985 522491.130985,148508.089985 522491.855985,148503.708985 522492.860985,148499.171985 522494.926985,148493.577985 522498.401985,148488.746985 522500.495985,148483.626985 522501.803985,148480.736985 522503.655985,148464.117985 522534.086985,148427.843985 522552.590985,148408.790985 522571.476985,148398.223985 522596.340985,148407.833985 522615.400985,148416.753985 522662.875985,148420.236985 522689.856985,148421.081985 522713.013985,148415.508985 522722.819985,148391.177985 522725.213985,148358.228985 522724.834985,148355.953985 522741.826985,148341.696985 522767.846985,148328.778985 522795.425985,148312.269985 522806.114985,148322.213985 522836.436985,148339.137985 522884.626985,148351.181985 522896.189985,148376.682985 522893.652985,148389.158985 522851.634985,148410.699985 522834.902985))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with quadrant segments value (x4) int const segments = default_quadrant_segments * 4; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = -75.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(51)); } template<> template<> void object::test<7>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's TestBufferExternal2.xml, test case #42 std::string wkt0("POLYGON((150213.068985 524020.273985,150226.206985 524020.218985,150245.019985 524022.421985,150248.570985 524017.633985,150243.628985 523991.402985,150233.942985 523969.968985,150203.852985 523929.546985,150189.509985 523905.746985,150179.578985 523905.795985,150163.996985 523891.573985,150150.529985 523872.591985,150158.960985 523848.710985,150150.727985 523827.265985,150129.075985 523796.394985,150110.126985 523782.119985,150064.853985 523787.149985,150051.774985 523791.993985,150035.273985 523796.784985,150034.124985 523803.948985,150047.317985 523842.088985,150048.538985 523846.850985,150048.758985 523856.362985,150044.002985 523858.774985,150033.285985 523861.216985,150022.584985 523866.044985,150013.239985 523875.626985,150010.897985 523882.801985,150007.322985 523904.295985,150015.725985 523913.798985,150028.883985 523920.894985,150036.292985 523937.604985,150033.171985 523964.012985,150028.264985 524013.973985,150020.417985 524042.804985,150014.532985 524064.428985,150004.476985 524083.491985,149987.717985 524115.262985,149981.881985 524139.242985,149991.382985 524146.196985,150012.547985 524165.288985,150017.553385 524169.126585,150024.575985 524166.982985,150037.645985 524157.385985,150054.301985 524147.777985,150067.231985 524142.754985,150080.313985 524135.548985,150096.808985 524132.911985,150108.662985 524120.938985,150113.586985 524111.551985,150113.285985 524097.054985,150114.403985 524085.116985,150121.501985 524075.543985,150134.308985 524061.036985,150143.802985 524053.844985,150159.042985 524051.270985,150177.151985 524046.558985,150188.764985 524039.234985,150195.842985 524027.285985,150213.068985 524020.273985))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with quadrant segments value (x4) int const segments = default_quadrant_segments * 4; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = -75.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(24)); } template<> template<> void object::test<8>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's TestBufferExternal2.xml, test case #98 std::string wkt0("POLYGON((146978.395985 514128.105985,146993.088985 514109.724985,146990.935985 514109.919985,146986.515985 514108.676985,146984.834985 514107.491985,146981.559985 514104.355985,146978.605985 514100.856985,146976.054985 514097.475985,146971.011985 514090.004985,146967.745985 514085.474985,146964.701985 514082.154985,146959.542985 514075.969985,146956.337985 514072.894985,146952.680985 514071.027985,146947.749985 514069.211985,146939.485985 514065.648985,146927.297985 514062.022985,146919.855985 514059.063985,146915.584985 514057.875985,146911.533985 514057.834985,146907.047985 514058.932985,146902.995985 514060.801985,146899.081985 514063.093985,146893.310985 514066.882985,146889.708985 514069.594985,146885.365985 514073.314985,146874.977985 514084.255985,146871.396985 514088.322985,146864.758985 514096.561985,146858.269985 514103.545985,146851.525985 514109.507985,146845.834985 514113.792985,146843.682985 514115.048985,146833.562985 514120.296985,146827.089985 514122.419985,146822.686985 514123.116985,146818.808985 514122.219985,146814.499985 514120.648985,146810.509985 514118.510985,146805.983985 514115.339985,146799.004985 514109.608985,146789.184985 514100.497985,146782.878985 514094.071985,146773.731985 514084.130985,146772.704985 514082.828985,146770.140985 514078.765985,146767.239985 514075.730985,146765.038985 514075.353985,146760.639985 514077.133985,146756.696985 514093.552985,146755.166985 514104.428985,146754.236985 514107.679985,146747.054985 514128.282985,146745.452985 514132.485985,146740.637985 514142.592985,146736.292985 514152.151985,146732.113985 514160.830985,146729.632985 514165.603985,146720.451985 514182.099985,146718.255985 514185.582985,146715.669985 514189.265985,146708.041985 514198.572985,146700.623985 514208.288985,146697.764985 514212.325985,146695.357985 514216.136985,146693.225985 514220.099985,146691.843985 514223.389985,146688.846985 514231.402985,146687.411985 514235.659985,146686.889985 514238.098985,146686.285985 514244.852985,146686.270985 514253.857985,146686.450985 514255.277985,146686.301985 514260.300985,146683.033985 514264.144985,146683.155985 514265.983985,146682.338985 514271.113985,146682.374985 514276.109985,146680.337985 514280.147985,146677.579985 514283.544985,146668.796985 514293.186985,146665.431985 514297.393985,146661.798985 514300.600985,146659.382985 514304.403985,146657.401985 514310.058985,146656.451985 514315.110985,146657.862985 514320.479985,146660.328985 514325.311985,146664.346985 514327.493985,146671.146985 514330.078985,146674.727985 514332.813985,146678.721985 514337.242985,146681.490985 514340.795985,146686.032985 514347.673985,146690.888985 514355.863985,146692.808985 514359.916985,146693.698985 514363.305985,146695.616985 514373.416985,146698.231985 514382.035985,146699.836985 514386.527985,146701.571985 514390.707985,146703.974985 514394.998985,146706.750985 514398.590985,146710.002985 514401.691985,146712.889985 514403.299985,146717.072985 514405.089985,146726.061985 514410.373985,146734.615985 514414.500985,146745.317985 514418.731985,146749.574985 514420.166985,146751.177985 514420.590985,146755.638985 514421.241985,146756.964985 514414.062985,146760.786985 514395.658985,146762.453985 514390.190985,146763.644985 514384.449985,146765.274985 514379.265985,146767.350985 514375.290985,146772.077985 514367.066985,146782.052985 514344.326985,146787.377985 514332.973985,146796.553985 514316.678985,146800.956985 514309.903985,146805.131985 514302.406985,146810.612985 514294.080985,146815.038985 514286.445985,146817.815985 514282.583985,146823.033985 514277.958985,146826.565985 514274.275985,146829.279985 514270.683985,146831.879985 514268.007985,146838.691985 514261.283985,146846.154985 514255.376985,146849.511985 514252.379985,146854.426985 514246.995985,146866.975985 514234.461985,146873.174985 514227.718985,146875.892985 514224.130985,146883.032985 514216.049985,146888.426985 514211.137985,146895.661985 514205.813985,146898.228985 514203.079985,146900.862985 514199.416985,146903.718985 514196.294985,146910.227985 514189.724985,146918.475985 514180.160985,146921.638985 514177.199985,146925.123985 514174.344985,146929.916985 514170.920985,146942.656985 514162.441985,146948.828985 514158.846985,146952.598985 514156.414985,146955.585985 514153.824985,146964.483985 514144.873985,146967.826985 514140.249985,146969.666985 514137.975985,146978.395985 514128.105985))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with quadrant segments value (x4) int const segments = default_quadrant_segments * 4; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = -75.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(7)); } template<> template<> void object::test<9>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // Geometry from XMLTester's TestBufferExternal2.xml, test case #99 std::string wkt0("POLYGON((144130.790985 514542.589985,144136.106985 514541.268985,144140.618985 514541.819985,144146.580985 514542.271985,144155.308985 514545.689985,144159.779985 514546.073985,144165.774985 514546.027985,144170.614985 514545.336985,144174.457985 514542.248985,144180.591985 514535.602985,144185.031985 514531.945985,144188.930985 514529.699985,144202.240985 514526.170985,144204.522985 514525.434985,144208.647985 514523.675985,144209.506985 514523.064985,144212.582985 514519.733985,144214.710985 514516.736985,144217.305985 514512.269985,144225.821985 514492.742985,144230.222985 514479.998985,144238.048985 514458.756985,144239.749985 514453.779985,144242.237985 514445.130985,144246.840985 514428.052985,144247.696985 514425.401985,144249.538985 514420.578985,144253.385985 514411.927985,144260.058985 514394.218985,144264.745985 514384.187985,144266.213985 514379.927985,144267.402985 514375.585985,144266.909985 514372.870985,144264.565985 514368.375985,144255.527985 514363.949985,144249.852985 514362.074985,144245.934985 514359.844985,144246.620985 514355.223985,144248.164985 514351.697985,144250.544985 514347.859985,144251.479985 514346.801985,144258.417985 514340.953985,144264.816985 514336.013985,144266.807985 514330.309985,144266.470985 514325.834985,144264.754985 514315.479985,144263.754985 514311.093985,144261.914985 514304.532985,144260.268985 514300.367985,144258.258985 514296.998985,144255.314985 514293.564985,144253.224985 514291.582985,144249.714985 514288.669985,144245.918985 514286.308985,144244.887985 514285.843985,144240.548985 514284.624985,144234.199985 514283.756985,144225.189985 514283.542985,144216.921985 514283.099985,144200.074985 514283.128985,144195.587985 514283.291985,144186.779985 514284.886985,144177.834985 514285.878985,144169.973985 514286.948985,144165.504985 514287.444985,144158.597985 514287.500985,144150.714985 514288.363985,144146.268985 514289.065985,144138.749985 514290.519985,144129.998985 514292.618985,144122.836985 514294.931985,144118.663985 514296.619985,144116.254985 514315.702985,144113.154985 514338.329985,144110.932985 514350.449985,144109.642985 514359.358985,144103.633985 514384.235985,144100.698985 514392.568985,144099.732985 514399.419985,144098.307985 514417.516985,144097.345985 514425.834985,144096.877985 514434.147985,144095.446985 514450.289985,144095.470985 514467.498985,144095.977985 514472.854985,144095.698985 514478.235985,144090.849985 514512.499985,144086.867985 514532.967985,144086.837985 514540.297985,144083.986985 514558.486985,144082.564985 514573.165985,144082.617985 514579.549985,144083.019985 514582.853985,144084.070985 514587.218985,144088.382985 514601.055985,144090.700985 514599.014985,144094.407985 514596.448985,144099.296985 514594.867985,144103.775985 514594.417985,144104.772985 514593.932985,144108.205985 514590.960985,144109.332985 514588.480985,144110.651985 514584.097985,144115.058985 514573.308985,144115.953985 514570.340985,144117.115985 514565.480985,144117.981985 514561.064985,144120.043985 514555.351985,144121.899985 514551.257985,144123.475985 514548.300985,144126.738985 514544.570985,144130.790985 514542.589985))"); GeomPtr g0(wktreader.read(wkt0)); // Buffer point with quadrant segments value (x4) int const segments = default_quadrant_segments * 4; BufferParameters params(segments); BufferOp op(g0.get(), params); double const distance = -75.0; GeomPtr gBuffer(op.getResultGeometry(distance)); ensure_not(gBuffer->isEmpty()); ensure(gBuffer->isValid()); ensure_equals(gBuffer->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer->getNumPoints() >= std::size_t(5)); } // Test two ways of executing buffer operation // Problems with BufferOp when using BufferParameters by Markus Meyer // http://lists.osgeo.org/pipermail/geos-devel/2011-October/005507.html template<> template<> void object::test<10>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; // TODO: Replace with Markus Meyer's test geometry once received std::string wkt0("POLYGON((144130.790985 514542.589985,144136.106985 514541.268985,144140.618985 514541.819985,144146.580985 514542.271985,144155.308985 514545.689985,144159.779985 514546.073985,144165.774985 514546.027985,144170.614985 514545.336985,144174.457985 514542.248985,144180.591985 514535.602985,144185.031985 514531.945985,144188.930985 514529.699985,144202.240985 514526.170985,144204.522985 514525.434985,144208.647985 514523.675985,144209.506985 514523.064985,144212.582985 514519.733985,144214.710985 514516.736985,144217.305985 514512.269985,144225.821985 514492.742985,144230.222985 514479.998985,144238.048985 514458.756985,144239.749985 514453.779985,144242.237985 514445.130985,144246.840985 514428.052985,144247.696985 514425.401985,144249.538985 514420.578985,144253.385985 514411.927985,144260.058985 514394.218985,144264.745985 514384.187985,144266.213985 514379.927985,144267.402985 514375.585985,144266.909985 514372.870985,144264.565985 514368.375985,144255.527985 514363.949985,144249.852985 514362.074985,144245.934985 514359.844985,144246.620985 514355.223985,144248.164985 514351.697985,144250.544985 514347.859985,144251.479985 514346.801985,144258.417985 514340.953985,144264.816985 514336.013985,144266.807985 514330.309985,144266.470985 514325.834985,144264.754985 514315.479985,144263.754985 514311.093985,144261.914985 514304.532985,144260.268985 514300.367985,144258.258985 514296.998985,144255.314985 514293.564985,144253.224985 514291.582985,144249.714985 514288.669985,144245.918985 514286.308985,144244.887985 514285.843985,144240.548985 514284.624985,144234.199985 514283.756985,144225.189985 514283.542985,144216.921985 514283.099985,144200.074985 514283.128985,144195.587985 514283.291985,144186.779985 514284.886985,144177.834985 514285.878985,144169.973985 514286.948985,144165.504985 514287.444985,144158.597985 514287.500985,144150.714985 514288.363985,144146.268985 514289.065985,144138.749985 514290.519985,144129.998985 514292.618985,144122.836985 514294.931985,144118.663985 514296.619985,144116.254985 514315.702985,144113.154985 514338.329985,144110.932985 514350.449985,144109.642985 514359.358985,144103.633985 514384.235985,144100.698985 514392.568985,144099.732985 514399.419985,144098.307985 514417.516985,144097.345985 514425.834985,144096.877985 514434.147985,144095.446985 514450.289985,144095.470985 514467.498985,144095.977985 514472.854985,144095.698985 514478.235985,144090.849985 514512.499985,144086.867985 514532.967985,144086.837985 514540.297985,144083.986985 514558.486985,144082.564985 514573.165985,144082.617985 514579.549985,144083.019985 514582.853985,144084.070985 514587.218985,144088.382985 514601.055985,144090.700985 514599.014985,144094.407985 514596.448985,144099.296985 514594.867985,144103.775985 514594.417985,144104.772985 514593.932985,144108.205985 514590.960985,144109.332985 514588.480985,144110.651985 514584.097985,144115.058985 514573.308985,144115.953985 514570.340985,144117.115985 514565.480985,144117.981985 514561.064985,144120.043985 514555.351985,144121.899985 514551.257985,144123.475985 514548.300985,144126.738985 514544.570985,144130.790985 514542.589985))"); GeomPtr g0(wktreader.read(wkt0)); ensure_equals(g0->getNumPoints(), std::size_t(112)); double const distance = -75.0; int const segments = 16; BufferParameters params1(segments, BufferParameters::CAP_ROUND); BufferOp op1(g0.get(), params1); GeomPtr gBuffer1(op1.getResultGeometry(distance)); ensure_not(gBuffer1->isEmpty()); ensure(gBuffer1->isValid()); ensure_equals(gBuffer1->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer1->getNumPoints() >= std::size_t(5)); GeomPtr gBuffer2(BufferOp::bufferOp(g0.get(), distance, segments, BufferParameters::CAP_ROUND)); ensure_not(gBuffer2->isEmpty()); ensure(gBuffer2->isValid()); ensure_equals(gBuffer2->getGeometryTypeId(), geos::geom::GEOS_POLYGON); ensure(gBuffer2->getNumPoints() >= std::size_t(5)); ensure(gBuffer1->equals(gBuffer2.get())); ensure(gBuffer2->equals(gBuffer1.get())); } // Test for ticket #473 template<> template<> void object::test<11>() { using geos::operation::buffer::BufferOp; using geos::operation::buffer::BufferParameters; std::string wkt0("\ MULTILINESTRING( \ (-22720.6801580484 130376.223341197, \ -22620.6136206117 130339.222540348, \ -22620.6133224902 130339.333510463), \ (-22720.3807106115 130487.193473695, \ -22620.3154956134 130450.192663993, \ -22620.3151974850 130450.303634126), \ (-22620.6133224902 130339.333510463, -22620.6127262471 130339.555450692), \ (-22620.1376011539 130450.303157004, -22620.3151974850 130450.303634126), \ (-22620.3151974850 130450.303634126, -22620.3146012281 130450.525574392), \ (-21480.3713729115 130150.471377565, \ -21481.6134583498 130150.918429232, \ -21482.5899891895 130151.031891269, \ -21480.9946803241 130149.807142948), \ (-21477.6185334698 130150.464355720,\ -21478.0611246018 130151.020338484, \ -21377.8977465929 130114.034129489) \ ) \ "); GeomPtr g0(wktreader.read(wkt0)); BufferParameters params(8, BufferParameters::CAP_SQUARE, BufferParameters::JOIN_MITRE, 1.0); const double distance = 5.0; BufferOp op(g0.get(), params); GeomPtr gBuffer(op.getResultGeometry(distance)); // We're basically only interested an rough sense of a // meaningful result. ensure_equals(gBuffer->getNumPoints(), std::size_t(47)); ensure_equals(int(gBuffer->getArea()), 3520); } } // namespace tut geos-3.4.2/tests/unit/operation/buffer/BufferParametersTest.cpp0000644000175000017500000001444412206417146024502 0ustar frankiefrankie// // Test Suite for geos::operation::buffer::BufferParameters class. // tut #include // geos #include #include // std #include namespace tut { // // Test Group // // Common data used by tests struct test_bufferparameters_data { typedef geos::operation::buffer::BufferParameters BufferParameters; test_bufferparameters_data() { } private: // noncopyable test_bufferparameters_data(test_bufferparameters_data const& other); test_bufferparameters_data& operator=(test_bufferparameters_data const& rhs); }; typedef test_group group; typedef group::object object; group test_bufferparameters_group("geos::operation::buffer::BufferParameters"); // // Test Cases // // Default constructor template<> template<> void object::test<1>() { BufferParameters bp; ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(8) ); ensure( ! bp.isSingleSided() ); } // Constructor with single integer argument template<> template<> void object::test<2>() { BufferParameters bp(16); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(16) ); ensure( ! bp.isSingleSided() ); } // Constructor with quadrantSegments and EndCapStyle template<> template<> void object::test<3>() { BufferParameters bp(16, BufferParameters::CAP_FLAT); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_FLAT ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(16) ); ensure( ! bp.isSingleSided() ); } // Constructor with quadrantSegments and EndCapStyle (2) template<> template<> void object::test<4>() { BufferParameters bp(16, BufferParameters::CAP_ROUND); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(16) ); ensure( ! bp.isSingleSided() ); } // Constructor with quadrantSegments, EndCapStyle, JoinStyle and mitreLimit template<> template<> void object::test<5>() { BufferParameters bp(31, BufferParameters::CAP_SQUARE, BufferParameters::JOIN_MITRE, 2.0); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_SQUARE ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_MITRE ); ensure_equals( bp.getMitreLimit(), 2.0 ); ensure_equals( bp.getQuadrantSegments(), int(31) ); ensure( ! bp.isSingleSided() ); } // setQuadrantSegments and getQuadrantSegments template<> template<> void object::test<6>() { BufferParameters bp; ensure_equals( bp.getQuadrantSegments(), int(8) ); bp.setQuadrantSegments(16); ensure_equals( bp.getQuadrantSegments(), int(16) ); bp.setQuadrantSegments(3); ensure_equals( bp.getQuadrantSegments(), int(3) ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure( ! bp.isSingleSided() ); } // setEndCapStyle and getEndCapStyle template<> template<> void object::test<7>() { BufferParameters bp; ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); bp.setEndCapStyle( BufferParameters::CAP_FLAT ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_FLAT ); bp.setEndCapStyle( BufferParameters::CAP_SQUARE ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_SQUARE ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(8) ); ensure( ! bp.isSingleSided() ); } // setJoinStyle and getJoinStyle template<> template<> void object::test<8>() { BufferParameters bp; ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); bp.setJoinStyle( BufferParameters::JOIN_MITRE ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_MITRE ); bp.setJoinStyle( BufferParameters::JOIN_BEVEL ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_BEVEL ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getMitreLimit(), 5.0 ); ensure_equals( bp.getQuadrantSegments(), int(8) ); ensure( ! bp.isSingleSided() ); } // setMitreLimit and getMitreLimit template<> template<> void object::test<9>() { BufferParameters bp; ensure_equals( bp.getMitreLimit(), 5.0 ); bp.setMitreLimit( 2.0 ); ensure_equals( bp.getMitreLimit(), 2.0 ); bp.setMitreLimit( 10.12 ); ensure_equals( bp.getMitreLimit(), 10.12 ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getQuadrantSegments(), int(8) ); ensure( ! bp.isSingleSided() ); } // setSingleSided and getSingleSided template<> template<> void object::test<10>() { BufferParameters bp; ensure( ! bp.isSingleSided() ); bp.setSingleSided( true ); ensure( bp.isSingleSided() ); bp.setSingleSided( false ); ensure( ! bp.isSingleSided() ); ensure_equals( bp.getEndCapStyle(), BufferParameters::CAP_ROUND ); ensure_equals( bp.getJoinStyle(), BufferParameters::JOIN_ROUND ); ensure_equals( bp.getQuadrantSegments(), int(8) ); ensure_equals( bp.getMitreLimit(), 5.0 ); } } // namespace tut geos-3.4.2/tests/unit/operation/distance/0000755000175000017500000000000012206417243020211 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/distance/DistanceOpTest.cpp0000644000175000017500000003174412206417146023621 0ustar frankiefrankie// // Test Suite for geos::operation::distance::DistanceOp class. // tut #include // geos #include #include #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_distanceop_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; typedef geos::geom::Geometry::AutoPtr GeomPtr; typedef std::auto_ptr CSPtr; test_distanceop_data() : gf(), wktreader(&gf) {} }; typedef test_group group; typedef group::object object; group test_distanceop_group("geos::operation::distance::DistanceOp"); // // Test Cases // template<> template<> void object::test<1>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(0 0)"); std::string wkt1("POINT(10 0)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(0, 0)); ensure_equals(cs->getAt(1), Coordinate(10, 0)); } template<> template<> void object::test<2>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(0 0)"); std::string wkt1("MULTIPOINT(10 0, 50 30)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(0, 0)); ensure_equals(cs->getAt(1), Coordinate(10, 0)); } template<> template<> void object::test<3>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(3 0)"); std::string wkt1("LINESTRING(0 10, 50 10, 100 50)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(3, 0)); ensure_equals(cs->getAt(1), Coordinate(3, 10)); } template<> template<> void object::test<4>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(3 0)"); std::string wkt1("MULTILINESTRING((34 54, 60 34),(0 10, 50 10, 100 50))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(3, 0)); ensure_equals(cs->getAt(1), Coordinate(3, 10)); } template<> template<> void object::test<5>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(35 60)"); std::string wkt1("POLYGON((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<6>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(35 60)"); std::string wkt1("MULTIPOLYGON(((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)),( (100 100, 150 100, 150 150, 100 150, 100 100),(120 120, 120 130, 130 130, 130 120, 120 120)) ))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<7>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(35 60)"); // This is an invalid geom... anyway std::string wkt1("GEOMETRYCOLLECTION(MULTIPOLYGON(((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)),( (100 100, 150 100, 150 150, 100 150, 100 100),(120 120, 120 130, 130 130, 130 120, 120 120)) )), POLYGON((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)), MULTILINESTRING((34 54, 60 34),(0 10, 50 10, 100 50)), LINESTRING(0 10, 50 10, 100 50), MULTIPOINT(10 0, 50 30), POINT(10 0))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<8>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POINT(35 60)"); // This is an invalid geom... anyway std::string wkt1("GEOMETRYCOLLECTION EMPTY"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 0); ensure_equals(dist.closestPoints(), (void*)0); } template<> template<> void object::test<9>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(10 0, 50 30)"); std::string wkt1("POINT(10 0)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 0); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(10, 0)); ensure_equals(cs->getAt(1), Coordinate(10, 0)); } template<> template<> void object::test<10>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(10 0, 50 30)"); std::string wkt1("MULTIPOINT(0 0, 150 30)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(10, 0)); ensure_equals(cs->getAt(1), Coordinate(0, 0)); } template<> template<> void object::test<11>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(3 0, 200 30)"); std::string wkt1("LINESTRING(0 10, 50 10, 100 50)"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(3, 0)); ensure_equals(cs->getAt(1), Coordinate(3, 10)); } template<> template<> void object::test<12>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(3 0, -50 30)"); std::string wkt1("MULTILINESTRING((34 54, 60 34),(0 10, 50 10, 100 50))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 10); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(3, 0)); ensure_equals(cs->getAt(1), Coordinate(3, 10)); } template<> template<> void object::test<13>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(-100 0, 35 60)"); std::string wkt1("POLYGON((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<14>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(-100 0, 35 60)"); std::string wkt1("MULTIPOLYGON(((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)),( (100 100, 150 100, 150 150, 100 150, 100 100),(120 120, 120 130, 130 130, 130 120, 120 120)) ))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<15>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(-100 0, 35 60)"); // This is an invalid geom... anyway std::string wkt1("GEOMETRYCOLLECTION(MULTIPOLYGON(((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)),( (100 100, 150 100, 150 150, 100 150, 100 100),(120 120, 120 130, 130 130, 130 120, 120 120)) )), POLYGON((34 54, 60 34, 60 54, 34 54),(50 50, 52 50, 52 48, 50 48, 50 50)), MULTILINESTRING((34 54, 60 34),(0 10, 50 10, 100 50)), LINESTRING(0 10, 50 10, 100 50), MULTIPOINT(10 0, 50 30), POINT(10 0))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 6); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(35, 60)); ensure_equals(cs->getAt(1), Coordinate(35, 54)); } template<> template<> void object::test<16>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("MULTIPOINT(-100 0, 35 60)"); // This is an invalid geom... anyway std::string wkt1("GEOMETRYCOLLECTION EMPTY"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 0); ensure_equals(dist.closestPoints(), (void*)0); } // Test for crash reported in Ticket #236: // http://trac.osgeo.org/geos/ticket/236 template<> template<> void object::test<17>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"); std::string wkt1("POLYGON((1.25 0.25, 1.25 0.75, 1.75 0.75, 1.75 0.25, 1.25 0.25))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); DistanceOp dist(g0.get(), g1.get()); ensure_equals(dist.distance(), 0.25); CSPtr cs ( dist.closestPoints()); ensure_equals(cs->getAt(0), Coordinate(1, 0.25)); ensure_equals(cs->getAt(1), Coordinate(1.25, 0.25)); } // Test for isWithinDistance template<> template<> void object::test<18>() { using geos::operation::distance::DistanceOp; using geos::geom::Coordinate; std::string wkt0("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"); std::string wkt1("POLYGON((1.25 0.25, 1.25 0.75, 1.75 0.75, 1.75 0.25, 1.25 0.25))"); GeomPtr g0(wktreader.read(wkt0)); GeomPtr g1(wktreader.read(wkt1)); ensure_equals(DistanceOp::distance(*g0, *g1), 0.25); ensure(DistanceOp::isWithinDistance(*g0, *g1, 0.26)); ensure(!DistanceOp::isWithinDistance(*g0, *g1, 0.24)); wkt0 = "LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)"; wkt1 = "LINESTRING(2 0, 10 1, 10 10)"; g0.reset(wktreader.read(wkt0)); g1.reset(wktreader.read(wkt1)); ensure_equals(DistanceOp::distance(*g0, *g1), 1); ensure(DistanceOp::isWithinDistance(*g0, *g1, 2)); ensure(!DistanceOp::isWithinDistance(*g0, *g1, 0.8)); // TODO: test closestPoints } // Test case submitted to Ticket #367 // http://trac.osgeo.org/geos/ticket/367/ template<> template<> void object::test<19>() { const char* wkb_geom1 = "01060000000100000001030000000100000000000000"; const char* wkb_geom2 = "010100000000000000000000000000000000000000"; geos::geom::PrecisionModel precision(geos::geom::PrecisionModel::FLOATING); geos::geom::GeometryFactory f(&precision); std::istringstream istr1(wkb_geom1); std::istringstream istr2(wkb_geom2); geos::io::WKBReader wkb(f); GeomPtr g1(wkb.readHEX(istr1)); GeomPtr g2(wkb.readHEX(istr2)); ensure(g1->isValid()); ensure(g2->isValid()); ensure_equals(g1->distance(g2.get()), 0); } // TODO: finish the tests by adding: // LINESTRING - *all* // MULTILINESTRING - *all* // POLYGON - *all* // MULTIPOLYGON - *all* // COLLECTION - *all* } // namespace tut geos-3.4.2/tests/unit/operation/linemerge/0000755000175000017500000000000012206417243020366 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/linemerge/LineMergerTest.cpp0000644000175000017500000001334412206417146023772 0ustar frankiefrankie// // Test Suite for geos::operation::linemerge::LineMerger class. // tut #include // geos #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_linemerger_data { typedef geos::operation::linemerge::LineMerger LineMerger; typedef std::vector GeomVect; typedef std::vector LineVect; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry Geom; typedef geos::geom::Geometry::AutoPtr GeomPtr; GeomVect inpGeoms; GeomVect expGeoms; LineVect* mrgGeoms; test_linemerger_data() : gf(), wktreader(&gf), wktwriter(), mrgGeoms(0) { wktwriter.setTrim(true); } ~test_linemerger_data() { delAll(inpGeoms); delAll(expGeoms); if ( mrgGeoms ) { delAll(*mrgGeoms); delete mrgGeoms; } } GeomPtr readWKT(const std::string& inputWKT) { return GeomPtr(wktreader.read(inputWKT)); } void readWKT(const char* const* inputWKT, std::vector& geoms) { for (const char* const* ptr=inputWKT; *ptr; ++ptr) { geoms.push_back(readWKT(*ptr).release()); } } void doTest(const char * const * inputWKT, const char * const * expectedWKT, bool compareDirections=true) { LineMerger lineMerger; readWKT(inputWKT, inpGeoms); readWKT(expectedWKT, expGeoms); lineMerger.add(&inpGeoms); mrgGeoms = lineMerger.getMergedLineStrings(); compare(expGeoms, *mrgGeoms, compareDirections); } template void delAll(TargetContainer& geoms) { for (typename TargetContainer::const_iterator i = geoms.begin(), e = geoms.end(); i != e; ++i) { Geom* g = dynamic_cast(*i); delete g; } } template static void compare(TargetContainer1& expectedGeometries, TargetContainer2& actualGeometries, bool compareDirections) { ensure_equals(actualGeometries.size(), expectedGeometries.size()); for (typename TargetContainer1::const_iterator i = expectedGeometries.begin(), e = expectedGeometries.end(); i != e; ++i) { Geom* g = dynamic_cast(*i); ensure( contains(actualGeometries, g, compareDirections) ); } } template static bool contains(TargetContainer& actualGeometries, const Geom* g, bool exact) { for (typename TargetContainer::const_iterator i = actualGeometries.begin(), e = actualGeometries.end(); i != e; ++i) { Geom* element = dynamic_cast(*i); if (exact && element->equalsExact(g)) { return true; } if (!exact && element->equals(g)) { return true; } } return false; } private: // noncopyable test_linemerger_data(test_linemerger_data const& other); test_linemerger_data& operator=(test_linemerger_data const& rhs); }; typedef test_group group; typedef group::object object; group test_linemerger_group("geos::operation::linemerge::LineMerger"); // // Test Cases // template<> template<> void object::test<1>() { const char* inpWKT[] = { "LINESTRING (120 120, 180 140)", "LINESTRING (200 180, 180 140)", "LINESTRING (200 180, 240 180)", NULL }; const char* expWKT[] = { "LINESTRING (120 120, 180 140, 200 180, 240 180)", NULL }; doTest(inpWKT, expWKT); } template<> template<> void object::test<2>() { const char* inpWKT[] = { "LINESTRING (120 300, 80 340)", "LINESTRING (120 300, 140 320, 160 320)", "LINESTRING (40 320, 20 340, 0 320)", "LINESTRING (0 320, 20 300, 40 320)", "LINESTRING (40 320, 60 320, 80 340)", "LINESTRING (160 320, 180 340, 200 320)", "LINESTRING (200 320, 180 300, 160 320)", NULL }; const char* expWKT[] = { "LINESTRING (160 320, 180 340, 200 320, 180 300, 160 320)", "LINESTRING (40 320, 20 340, 0 320, 20 300, 40 320)", "LINESTRING (40 320, 60 320, 80 340, 120 300, 140 320, 160 320)", NULL }; doTest(inpWKT, expWKT); } template<> template<> void object::test<3>() { const char* inpWKT[] = { "LINESTRING (0 0, 100 100)", "LINESTRING (0 100, 100 0)", NULL }; const char* expWKT[] = { "LINESTRING (0 0, 100 100)", "LINESTRING (0 100, 100 0)", NULL }; doTest(inpWKT, expWKT); } template<> template<> void object::test<4>() { const char* inpWKT[] = { "LINESTRING EMPTY", "LINESTRING EMPTY", NULL }; const char* expWKT[] = { NULL }; doTest(inpWKT, expWKT); } // Don't blame me for this, I'm just copying JTS tests :P template<> template<> void object::test<5>() { const char* inpWKT[] = { NULL }; const char* expWKT[] = { NULL }; doTest(inpWKT, expWKT); } // testSingleUniquePoint() template<> template<> void object::test<6>() { const char* inpWKT[] = { "LINESTRING (10642 31441, 10642 31441)", NULL }; const char* expWKT[] = { NULL }; doTest(inpWKT, expWKT); } } // namespace tut geos-3.4.2/tests/unit/operation/linemerge/LineSequencerTest.cpp0000644000175000017500000001646012206417146024505 0ustar frankiefrankie// // Test Suite for geos::operation::linemerge::LineSequencer class. // tut #include // geos #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_linesequencer_data { typedef geos::operation::linemerge::LineSequencer LineSequencer; typedef std::vector GeomVect; typedef std::vector LineVect; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry Geom; typedef geos::geom::Geometry::AutoPtr GeomPtr; GeomVect inpGeoms; test_linesequencer_data() : gf(), wktreader(&gf), wktwriter() { wktwriter.setTrim(true); } ~test_linesequencer_data() { delAll(inpGeoms); } GeomPtr readWKT(const std::string& inputWKT) { return GeomPtr(wktreader.read(inputWKT)); } void readWKT(const char* const* inputWKT, std::vector& geoms) { for (const char* const* ptr=inputWKT; *ptr; ++ptr) { geoms.push_back(readWKT(*ptr).release()); } } void runLineSequencer(const char * const * inputWKT, const std::string& expectedWKT) { readWKT(inputWKT, inpGeoms); LineSequencer sequencer; sequencer.add(inpGeoms); if ( ! sequencer.isSequenceable() ) { ensure( expectedWKT.empty() ); } else { GeomPtr expected = readWKT(expectedWKT); GeomPtr result ( sequencer.getSequencedLineStrings() ); ensure( expected->equalsExact( result.get() ) ); bool isSequenced = LineSequencer::isSequenced(result.get()); ensure( isSequenced ); } } void runIsSequenced(const std::string& inputWKT, bool exp) { GeomPtr g = readWKT(inputWKT); bool isSequenced = LineSequencer::isSequenced(g.get()); ensure_equals( isSequenced, exp ); } template void delAll(TargetContainer& geoms) { for (typename TargetContainer::const_iterator i = geoms.begin(), e = geoms.end(); i != e; ++i) { Geom* g = dynamic_cast(*i); delete g; } } private: // noncopyable test_linesequencer_data(test_linesequencer_data const& other); test_linesequencer_data& operator=(test_linesequencer_data const& rhs); }; typedef test_group group; typedef group::object object; group test_linesequencer_group("geos::operation::linemerge::LineSequencer"); // // Test Cases // // testSimple template<> template<> void object::test<1>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 20, 0 30 )", "LINESTRING ( 0 10, 0 20 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 0 20), (0 20, 0 30))"; runLineSequencer(inpWKT, expWKT); } // testSimpleLoop template<> template<> void object::test<2>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 0 0 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 0 0))"; runLineSequencer(inpWKT, expWKT); } // testSimpleBigLoop template<> template<> void object::test<3>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 20, 0 30 )", "LINESTRING ( 0 30, 0 00 )", "LINESTRING ( 0 10, 0 20 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 0 20), (0 20, 0 30), (0 30, 0 0))"; runLineSequencer(inpWKT, expWKT); } // test2SimpleLoops template<> template<> void object::test<4>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 0 0 )", "LINESTRING ( 0 0, 0 20 )", "LINESTRING ( 0 20, 0 0 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 10, 0 0), (0 0, 0 20), (0 20, 0 0), (0 0, 0 10))"; runLineSequencer(inpWKT, expWKT); } // testWide8WithTail template<> template<> void object::test<5>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 10 0, 10 10 )", "LINESTRING ( 0 0, 10 0 )", "LINESTRING ( 0 10, 10 10 )", "LINESTRING ( 0 10, 0 20 )", "LINESTRING ( 10 10, 10 20 )", "LINESTRING ( 0 20, 10 20 )", "LINESTRING ( 10 20, 30 30 )", NULL }; const char* expWKT = ""; runLineSequencer(inpWKT, expWKT); } // testSimpleLoopWithTail template<> template<> void object::test<6>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 10 10 )", "LINESTRING ( 10 10, 10 20, 0 10 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 10 10), (10 10, 10 20, 0 10))"; runLineSequencer(inpWKT, expWKT); } // testLineWithRing template<> template<> void object::test<7>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 10 10, 10 20, 0 10 )", "LINESTRING ( 0 30, 0 20 )", "LINESTRING ( 0 20, 0 10 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 10 10, 10 20, 0 10), (0 10, 0 20), (0 20, 0 30))"; runLineSequencer(inpWKT, expWKT); } // testMultipleGraphsWithRing template<> template<> void object::test<8>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 10 10, 10 20, 0 10 )", "LINESTRING ( 0 30, 0 20 )", "LINESTRING ( 0 20, 0 10 )", "LINESTRING ( 0 60, 0 50 )", "LINESTRING ( 0 40, 0 50 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 10 10, 10 20, 0 10), (0 10, 0 20), (0 20, 0 30), (0 40, 0 50), (0 50, 0 60))"; runLineSequencer(inpWKT, expWKT); } // testMultipleGraphsWithMultipeRings template<> template<> void object::test<9>() { const char* inpWKT[] = { "LINESTRING ( 0 0, 0 10 )", "LINESTRING ( 0 10, 10 10, 10 20, 0 10 )", "LINESTRING ( 0 10, 40 40, 40 20, 0 10 )", "LINESTRING ( 0 30, 0 20 )", "LINESTRING ( 0 20, 0 10 )", "LINESTRING ( 0 60, 0 50 )", "LINESTRING ( 0 40, 0 50 )", NULL }; const char* expWKT = "MULTILINESTRING ((0 0, 0 10), (0 10, 40 40, 40 20, 0 10), (0 10, 10 10, 10 20, 0 10), (0 10, 0 20), (0 20, 0 30), (0 40, 0 50), (0 50, 0 60))"; runLineSequencer(inpWKT, expWKT); } // testLineSequence template<> template<> void object::test<10>() { const char* expWKT = "LINESTRING ( 0 0, 0 10 )"; runIsSequenced(expWKT, true); } // testSplitLineSequence template<> template<> void object::test<11>() { const char* expWKT = "MULTILINESTRING ((0 0, 0 1), (0 2, 0 3), (0 3, 0 4) )"; runIsSequenced(expWKT, true); } // testBadLineSequence template<> template<> void object::test<12>() { const char* expWKT = "MULTILINESTRING ((0 0, 0 1), (0 2, 0 3), (0 1, 0 4) )"; runIsSequenced(expWKT, false); } } // namespace tut geos-3.4.2/tests/unit/operation/overlay/0000755000175000017500000000000012206417243020100 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/overlay/snap/0000755000175000017500000000000012206417243021041 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/overlay/snap/GeometrySnapperTest.cpp0000644000175000017500000000444612206417146025543 0ustar frankiefrankie// // Test Suite for geos::operation::overlay::snap::GeometrySnapper class. // tut #include // geos #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_geometrysnapper_data { typedef std::auto_ptr GeomAutoPtr; geos::geom::GeometryFactory factory; geos::io::WKTReader reader; typedef geos::operation::overlay::snap::GeometrySnapper GeometrySnapper; test_geometrysnapper_data() : factory(), // initialize before use! reader(&factory) { } }; typedef test_group group; typedef group::object object; group test_geometrysnapper_group("geos::operation::overlay::snap::GeometrySnapper"); // // Test Cases // // Test vertices snapping template<> template<> void object::test<1>() { GeomAutoPtr src(reader.read( "POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))" )); GeometrySnapper snapper( *(src.get()) ); GeomAutoPtr snap(reader.read( "MULTIPOINT ((0 0), (0 100.0000001), (100 100), (100 0))" )); GeomAutoPtr expected(reader.read( "POLYGON ((0 0, 0 100.0000001, 100 100, 100 0, 0 0))" )); GeomAutoPtr ret(snapper.snapTo( *(snap.get()), 0.000001 )); ensure( ret->equalsExact(expected.get(),0) ); } // Test vertices snapping template<> template<> void object::test<2>() { GeomAutoPtr src(reader.read( "POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0))" )); GeometrySnapper snapper( *(src.get()) ); GeomAutoPtr snap(reader.read( "MULTIPOINT ((0.0000001 50))" )); GeomAutoPtr expected(reader.read( "POLYGON ((0 0, 0.0000001 50, 0 100, 100 100, 100 0, 0 0))" )); GeomAutoPtr ret(snapper.snapTo( *(snap.get()), 0.000001 )); ensure( ret->equalsExact(expected.get(),0) ); } } // namespace tut geos-3.4.2/tests/unit/operation/overlay/snap/LineStringSnapperTest.cpp0000644000175000017500000001726612206417146026032 0ustar frankiefrankie// // Test Suite for geos::operation::overlay::snap::LineStringSnapper class. // tut #include // geos #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used by tests struct test_linestringsnapper_data { test_linestringsnapper_data() {} }; typedef test_group group; typedef group::object object; group test_linestringsnapper_group("geos::operation::overlay::snap::LineStringSnapper"); // // Test Cases // // Test vertices snapping template<> template<> void object::test<1>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate src_a(0, 0); Coordinate src_b(10, 10); // snap coordinates Coordinate snp_a(0.1, 0); Coordinate snp_b(10, 10.1); Coordinate::Vect srcCoords; srcCoords.push_back( src_a ); srcCoords.push_back( src_b ); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); snpCoords.push_back( &snp_b ); LineStringSnapper snapper(srcCoords, 0.4); CoordsVectAptr ret(snapper.snapTo(snpCoords)); // both points should have been snapped ensure_equals(ret->size(), 2u); ensure_equals(ret->operator[](0), snp_a); ensure_equals(ret->operator[](1), snp_b); } // Test segment snapping template<> template<> void object::test<2>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate src_a(0, 0); Coordinate src_b(10, 10); // snap coordinates Coordinate snp_a(0.4, 0); Coordinate snp_b(10, 10.4); Coordinate::Vect srcCoords; srcCoords.push_back( src_a ); srcCoords.push_back( src_b ); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); snpCoords.push_back( &snp_b ); LineStringSnapper snapper(srcCoords, 0.3); CoordsVectAptr ret(snapper.snapTo(snpCoords)); // snap point a should be inserted ensure_equals(ret->size(), 3u); ensure_equals(ret->operator[](0), src_a); ensure_equals(ret->operator[](1), snp_a); ensure_equals(ret->operator[](2), src_b); } // Test vertices snapping in a closed ring template<> template<> void object::test<3>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate src_a(0, 0); Coordinate src_b(10, 10); Coordinate src_c(0, 10); Coordinate::Vect srcCoords; srcCoords.push_back( src_a ); srcCoords.push_back( src_b ); srcCoords.push_back( src_c ); srcCoords.push_back( src_a ); // snap coordinates Coordinate snp_a(0.1, 0); Coordinate snp_b(10, 10.1); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); snpCoords.push_back( &snp_b ); LineStringSnapper snapper(srcCoords, 0.4); CoordsVectAptr ret(snapper.snapTo(snpCoords)); // Points A and B should be snapped ensure_equals(ret->size(), 4u); ensure_equals(ret->operator[](0), snp_a); ensure_equals(ret->operator[](1), snp_b); ensure_equals(ret->operator[](2), src_c); ensure_equals(ret->operator[](3), snp_a); } // Test vertices snapping in a short sequence template<> template<> void object::test<4>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate src_a(0, 0); Coordinate::Vect srcCoords; srcCoords.push_back( src_a ); // snap coordinates Coordinate snp_a(0.1, 0); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); LineStringSnapper snapper(srcCoords, 0.4); CoordsVectAptr ret(snapper.snapTo(snpCoords)); ensure_equals(ret->size(), 1u); ensure_equals(ret->operator[](0), snp_a); } // Test vertices snapping in an empty sequence template<> template<> void object::test<5>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate::Vect srcCoords; // snap coordinates Coordinate::ConstVect snpCoords; LineStringSnapper snapper(srcCoords, 0.4); CoordsVectAptr ret(snapper.snapTo(snpCoords)); ensure_equals(ret->size(), 0u); } // Test snapping an empty sequence template<> template<> void object::test<6>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // source coordinates Coordinate::Vect srcCoords; // snap coordinates Coordinate snp_a(0.1, 0); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); LineStringSnapper snapper(srcCoords, 0.4); CoordsVectAptr ret(snapper.snapTo(snpCoords)); ensure_equals(ret->size(), 0u); } // Test allow snapping to source vertices template<> template<> void object::test<7>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // Source: (0 0, 10 0, 0 1) Coordinate src_a(0, 0); Coordinate src_b(10, 0); Coordinate src_c(0, 1); Coordinate::Vect srcCoords; srcCoords.push_back(src_a); srcCoords.push_back(src_b); srcCoords.push_back(src_c); // Snap: (0 0) Coordinate snp_a(0, 0); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); // Snap with tolerance of 1 // (both first and second point could be snapped) LineStringSnapper snapper(srcCoords, 1); // Allow source-snapping, expect: (0 0, 5 0, 0 0, 10 0) snapper.setAllowSnappingToSourceVertices(true); CoordsVectAptr ret(snapper.snapTo(snpCoords)); ensure_equals(ret->size(), 4u); ensure_equals(ret->operator[](0), src_a); ensure_equals(ret->operator[](1), src_b); ensure_equals(ret->operator[](2), snp_a); ensure_equals(ret->operator[](3), src_c); // Do not allow source-snapping, expect: (0 0, 5 0, 10 0) snapper.setAllowSnappingToSourceVertices(false); ret = snapper.snapTo(snpCoords); ensure_equals(ret->size(), 3u); ensure_equals(ret->operator[](0), src_a); ensure_equals(ret->operator[](1), src_b); ensure_equals(ret->operator[](2), src_c); } // Test two candidate vertices snaps /* The following one fails, I bet in JTS too.. but haven't tested template<> template<> void object::test<8>() { using geos::geom::Coordinate; using geos::operation::overlay::snap::LineStringSnapper; typedef std::auto_ptr CoordsVectAptr; // Source: (0 0, 1 0, 1 1) Coordinate src_a(0, 0); Coordinate src_b(1, 0); Coordinate src_c(1, 1); Coordinate::Vect srcCoords; srcCoords.push_back(src_a); srcCoords.push_back(src_b); srcCoords.push_back(src_c); // Snap: (0.5, 0) Coordinate snp_a(0.5, 0); Coordinate::ConstVect snpCoords; snpCoords.push_back( &snp_a ); // Snap with tolerance of 1 // (both first and second point could be snapped) LineStringSnapper snapper(srcCoords, 1); // Expect: (0.5 0, 1 0, 1 1) CoordsVectAptr ret(snapper.snapTo(snpCoords)); ensure_equals(ret->size(), 3u); ensure_equals(ret->operator[](0), snp_a); ensure_equals(ret->operator[](1), src_b); ensure_equals(ret->operator[](2), src_c); } */ } // namespace tut geos-3.4.2/tests/unit/operation/overlay/validate/0000755000175000017500000000000012206417243021671 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/overlay/validate/FuzzyPointLocatorTest.cpp0000644000175000017500000001310712206417146026726 0ustar frankiefrankie// // Test Suite for geos::operation::overlay::validate::FuzzyPointLocator class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used by tests struct test_fuzzypointlocator_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKBReader wkbreader; typedef geos::geom::Geometry::AutoPtr GeomPtr; GeomPtr g; test_fuzzypointlocator_data() : gf(), wktreader(&gf), wkbreader(gf) { std::string wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); g.reset(wktreader.read(wkt)); } }; typedef test_group group; typedef group::object object; group test_fuzzypointlocator_group("geos::operation::overlay::validate::FuzzyPointLocator"); // // Test Cases // template<> template<> void object::test<1>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; using geos::geom::Coordinate; FuzzyPointLocator locator(*g, 10); ensure_equals(locator.getLocation(Coordinate(10, 0)), Location::BOUNDARY); // 8 units away from boundary ensure_equals(locator.getLocation(Coordinate(18, 5)), Location::BOUNDARY); } template<> template<> void object::test<2>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; using geos::geom::Coordinate; FuzzyPointLocator locator(*g, 10); // // These are corner cases. I think they should // return Location::BOUNDARY, but need to discuss // this with Martin Davis // // 10 units away from boundary ensure_equals(locator.getLocation(Coordinate(20, 2)), Location::EXTERIOR); // 10 units away from boundary ensure_equals(locator.getLocation(Coordinate(-10, 5)), Location::EXTERIOR); } template<> template<> void object::test<3>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; using geos::geom::Coordinate; FuzzyPointLocator locator(*g, 8); // 5 units away from boundary ensure_equals(locator.getLocation(Coordinate(5, 5)), Location::BOUNDARY); // 2 units away from boundary ensure_equals(locator.getLocation(Coordinate(2, 8)), Location::BOUNDARY); } template<> template<> void object::test<4>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; using geos::geom::Coordinate; FuzzyPointLocator locator(*g, 2); // 5 units away from boundary ensure_equals(locator.getLocation(Coordinate(5, 5)), Location::INTERIOR); // 3 units away from boundary ensure_equals(locator.getLocation(Coordinate(3, 7)), Location::INTERIOR); } template<> template<> void object::test<5>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; geos::geom::Coordinate pt(160.000000125, 119.500004998); std::string wkt0("POLYGON((20 40,20 200,180 200,180 120,140 120,180 119,180 40,20 40),(140 160,80 120,140 80,140 160))"); GeomPtr g0(wktreader.read(wkt0)); FuzzyPointLocator locator(*g0, 0.00001); // On the boundary ? ensure_equals(locator.getLocation(pt), Location::BOUNDARY); } template<> template<> void object::test<6>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; // this would return the expected result //geos::geom::Coordinate pt(160, 120); geos::geom::Coordinate pt(160, 120.000005); std::stringstream wkb0("0103000000020000000800000000000000000034400000000000004440000000000000344000000000000069400000000000806640000000000000694000000000008066400000000000005E4000000000008061400000000000005E4000000000008066400000000000C05D400000000000806640000000000000444000000000000034400000000000004440040000000000000000806140000000000000644000000000000054400000000000005E400000000000806140000000000000544000000000008061400000000000006440"); GeomPtr g0(wkbreader.readHEX(wkb0)); FuzzyPointLocator locator(*g0, 0.000001); // On the boundary ? ensure_equals(locator.getLocation(pt), Location::INTERIOR); } template<> template<> void object::test<7>() { using geos::operation::overlay::validate::FuzzyPointLocator; using geos::geom::Location; // this would return the expected result //geos::geom::Coordinate pt(160, 120); geos::geom::Coordinate pt(160, 120.000005); std::stringstream wkb0("0106000000020000000103000000020000000A000000000000000000344000000000000044400000000000003440000000000000694000000000008066400000000000006940000000000080664000000000000064400000000000C0624000000000000064400000000000C062400000000000005E400000000000C0624000000000000054400000000000806640000000000000544000000000008066400000000000004440000000000000344000000000000044400500000000000000000054400000000000005E400000000000806140000000000000544000000000008061400000000000005E400000000000806140000000000000644000000000000054400000000000005E40010300000001000000080000000000000000C062400000000000005E4000000000008066400000000000005E400000000000806640000000000000644000000000000069400000000000006440000000000000694000000000000054400000000000806640000000000000544000000000008066400000000000C05D400000000000C062400000000000005E40"); GeomPtr g0(wkbreader.readHEX(wkb0)); FuzzyPointLocator locator(*g0, 0.000001); // On the boundary ? ensure_equals(locator.getLocation(pt), Location::EXTERIOR); } } // namespace tut geos-3.4.2/tests/unit/operation/overlay/validate/OffsetPointGeneratorTest.cpp0000644000175000017500000001026312206417146027350 0ustar frankiefrankie// // Test Suite for geos::operation::overlay::validate::OffsetPointGenerator class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include namespace tut { using namespace std; using namespace geos::geom; // // Test Group // // Common data used by tests struct test_offsetpointgenerator_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::algorithm::PointLocator locator; typedef geos::geom::Geometry::AutoPtr GeomPtr; GeomPtr g; test_offsetpointgenerator_data() : gf(), wktreader(&gf) { } bool pointsWithinDistance(vector& coords, double dist) { // we expect some numerical instability here // OffsetPointGenerator could produce points // at *slightly* farther locations then // requested // dist *= 1.0000001; for (size_t i=0, n=coords.size(); i pg(gf.createPoint(c)); double rdist = g->distance(pg.get()); if ( rdist > dist ) { return false; } } return true; } }; typedef test_group group; typedef group::object object; group test_offsetpointgenerator_group("geos::operation::overlay::validate::OffsetPointGenerator"); // // Test Cases // template<> template<> void object::test<1>() { using geos::operation::overlay::validate::OffsetPointGenerator; using geos::geom::Coordinate; using geos::algorithm::PointLocator; using std::auto_ptr; using std::vector; std::string wkt("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); g.reset(wktreader.read(wkt)); double dist = 10; OffsetPointGenerator gen(*g, dist); auto_ptr< vector > coords(gen.getPoints()); ensure_equals(coords->size(), (g->getNumPoints()-1)*2); ensure(pointsWithinDistance(*coords, dist)); } template<> template<> void object::test<2>() { using geos::operation::overlay::validate::OffsetPointGenerator; using geos::geom::Location; using geos::geom::Coordinate; using std::auto_ptr; using std::vector; std::string wkt("POLYGON((0 0, 10 0, 10 5, 10 10, 0 10, 0 0))"); g.reset(wktreader.read(wkt)); double dist = 0.0003; OffsetPointGenerator gen(*g, dist); auto_ptr< vector > coords(gen.getPoints()); ensure_equals(coords->size(), 10u); ensure(pointsWithinDistance(*coords, dist)); } template<> template<> void object::test<3>() { using geos::operation::overlay::validate::OffsetPointGenerator; using geos::geom::Location; using geos::geom::Coordinate; using std::auto_ptr; using std::vector; std::string wkt("POINT(10 -10)"); g.reset(wktreader.read(wkt)); double dist = 0.0003; OffsetPointGenerator gen(*g, dist); auto_ptr< vector > coords(gen.getPoints()); ensure_equals(coords->size(), 0u); //ensure(pointsWithinDistance(*coords, dist)); } template<> template<> void object::test<4>() { using geos::operation::overlay::validate::OffsetPointGenerator; using geos::geom::Location; using geos::geom::Coordinate; using std::auto_ptr; using std::vector; std::string wkt("LINESTRING(10 -10, 5 600)"); g.reset(wktreader.read(wkt)); double dist = 0.03; OffsetPointGenerator gen(*g, dist); auto_ptr< vector > coords(gen.getPoints()); ensure_equals(coords->size(), 2u); ensure(pointsWithinDistance(*coords, dist)); } template<> template<> void object::test<5>() { using geos::operation::overlay::validate::OffsetPointGenerator; using geos::geom::Location; using geos::geom::Coordinate; using std::auto_ptr; using std::vector; std::string wkt("MULTILINESTRING((10 -10, 5 600), (1045 -12, 0 0, -435 34))"); g.reset(wktreader.read(wkt)); double dist = 0.2; OffsetPointGenerator gen(*g, dist); auto_ptr< vector > coords(gen.getPoints()); ensure_equals(coords->size(), 6u); ensure(pointsWithinDistance(*coords, dist)); } } // namespace tut geos-3.4.2/tests/unit/operation/overlay/validate/OverlayResultValidatorTest.cpp0000644000175000017500000001110712206417146027725 0ustar frankiefrankie// // Test Suite for geos::operation::overlay::validate::OverlayResultValidator class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include namespace tut { using namespace geos::operation::overlay; using namespace geos::operation::overlay::validate; // // Test Group // // Common data used by tests struct test_overlayresultvalidator_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::algorithm::PointLocator locator; typedef geos::geom::Geometry::AutoPtr GeomPtr; GeomPtr g0, g1, gres; test_overlayresultvalidator_data() : gf(), wktreader(&gf) { } }; typedef test_group group; typedef group::object object; group test_overlayresultvalidator_group("geos::operation::overlay::validate::OverlayResultValidator"); // // Test Cases // template<> template<> void object::test<1>() { std::string wkt0("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g1(wktreader.read(wkt1)); std::string wktres("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr gres(wktreader.read(wkt1)); OverlayResultValidator validator(*g0, *g1, *gres); ensure( validator.isValid(OverlayOp::opUNION) ); } template<> template<> void object::test<2>() { std::string wkt0("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g1(wktreader.read(wkt1)); std::string wktres("POLYGON((0 0, 10.001 0, 10 10, 0 10, 0 0))"); GeomPtr gres(wktreader.read(wktres)); OverlayResultValidator validator(*g0, *g1, *gres); ensure (! validator.isValid(OverlayOp::opUNION) ); } template<> template<> void object::test<3>() { std::string wkt0("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g1(wktreader.read(wkt1)); std::string wktres("POLYGON((0 0, 9.999 0, 10 10, 0 10, 0 0))"); GeomPtr gres(wktreader.read(wktres)); OverlayResultValidator validator(*g0, *g1, *gres); ensure (! validator.isValid(OverlayOp::opUNION) ); } // Result of union has an hole not in input template<> template<> void object::test<4>() { std::string wkt0("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g1(wktreader.read(wkt1)); std::string wktres("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 5 5))"); GeomPtr gres(wktreader.read(wktres)); OverlayResultValidator validator(*g0, *g1, *gres); ensure (! validator.isValid(OverlayOp::opUNION) ); } template<> template<> void object::test<5>() { std::string wkt0("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON((5 0, 1500 0, 1500 10, 5 10, 5 0))"); GeomPtr g1(wktreader.read(wkt1)); // small shift std::string wktres("POLYGON((0 0, 750 0.0001, 150 0, 150 10, 0 10, 0 0))"); GeomPtr gres(wktreader.read(wktres)); OverlayResultValidator validator(*g0, *g1, *gres); ensure (! validator.isValid(OverlayOp::opUNION) ); } template<> template<> void object::test<6>() { std::string wkt0("POLYGON ((20.0 40.0, 20.0 200.0, 180.0 200.0, 180.0 120.0, 140.0 120.0, 180.0 119.0, 180.0 40.0, 20.0 40.0), (140.0 160.0, 80.0 120.0, 140.0 80.0, 140.0 160.0))"); GeomPtr g0(wktreader.read(wkt0)); std::string wkt1("POLYGON ((200.0 160.0, 150.0 160.0, 150.0 80.0, 200.0 80.0, 200.0 160.0))"); GeomPtr g1(wktreader.read(wkt1)); std::string wktres("MULTIPOLYGON (((20.0 40.0, 20.0 200.0, 180.0 200.0, 180.0 160.0, 150.0 160.0, 150.0 120.0, 150.0 80.0, 180.0 80.0, 180.0 40.0, 20.0 40.0), (80.0 120.0, 140.0 80.0, 140.0 120.0, 140.0 160.0, 80.0 120.0)), ((150.0 120.0, 180.0 120.0, 180.0 160.0, 200.0 160.0, 200.0 80.0, 180.0 80.0, 180.0 119.0, 150.0 120.0)))"); GeomPtr gres(wktreader.read(wktres)); OverlayResultValidator validator(*g0, *g1, *gres); ensure ( ! validator.isValid(OverlayOp::opSYMDIFFERENCE) ); } // // TODO: add tests for other operations // and other geometry types (IFF we drop the limit of the // class to only work with areal geoms) } // namespace tut geos-3.4.2/tests/unit/operation/polygonize/0000755000175000017500000000000012206417243020616 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/polygonize/PolygonizeTest.cpp0000644000175000017500000001123212206417146024322 0ustar frankiefrankie// // Test Suite for geos::operation::polygonize::Polygonizer class. // // Port of junit/operation/polygonize/PolygonizeTest.java // // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_polygonizetest_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; typedef geos::geom::Geometry Geom; typedef geos::geom::Polygon Poly; typedef geos::operation::polygonize::Polygonizer Polygonizer; test_polygonizetest_data() : gf(), wktreader(&gf) { wktwriter.setTrim(true); } template void delAll(T& cnt) { for (typename T::iterator i=cnt.begin(), e=cnt.end(); i!=e; ++i) { delete *i; } } template void printAll(std::ostream& os, T& cnt) { for (typename T::iterator i=cnt.begin(), e=cnt.end(); i!=e; ++i) { os << **i; } } GeomPtr readWKT(const std::string& inputWKT) { return GeomPtr(wktreader.read(inputWKT)); } void readWKT(const char* const* inputWKT, std::vector& geoms) { for (const char* const* ptr=inputWKT; *ptr; ++ptr) { geoms.push_back(readWKT(*ptr).release()); } } template bool contains( T& cnt, const Geom* g) { for (typename T::iterator i=cnt.begin(), e=cnt.end(); i!=e; ++i) { const Geom* element = *i; if (element->equalsExact(g)) { return true; } } return false; } template bool compare( T& ex, S& ob) { using std::cout; using std::endl; if ( ex.size() != ob.size() ) { cout << "Expected " << ex.size() << " polygons, obtained " << ob.size() << endl; return false; } for (typename T::iterator i=ex.begin(), e=ex.end(); i!=e; ++i) { if ( ! contains(ob, *i) ) { cout << "Expected " << wktwriter.write(*i) << " not found" << endl; return false; } } return true; } bool doTest(const char* const* inputWKT, const char* const* expectWKT) { using std::cout; using std::endl; std::vector inputGeoms, expectGeoms; readWKT(inputWKT, inputGeoms); readWKT(expectWKT, expectGeoms); Polygonizer polygonizer; polygonizer.add(&inputGeoms); std::auto_ptr< std::vector > retGeoms; retGeoms.reset( polygonizer.getPolygons() ); delAll(inputGeoms); bool ok = compare(expectGeoms, *retGeoms); if ( ! ok ) { cout << "OBTAINED(" << retGeoms->size() << "): "; printAll(cout, *retGeoms); cout << endl; ensure( "not all expected geometries in the obtained set", 0 ); } delAll(expectGeoms); delAll(*retGeoms); return ok; } }; typedef test_group group; typedef group::object object; group test_polygonizetest_group("geos::operation::polygonize::Polygonizer"); // test1() in JTS template<> template<> void object::test<1>() { static char const* const inp[] = { "LINESTRING EMPTY", "LINESTRING EMPTY", NULL }; static char const* const exp[] = { NULL }; doTest(inp, exp); } // test2() in JTS template<> template<> void object::test<2>() { static char const* const inp[] = { "LINESTRING (100 180, 20 20, 160 20, 100 180)", "LINESTRING (100 180, 80 60, 120 60, 100 180)", NULL }; static char const* const exp[] = { "POLYGON ((100 180, 120 60, 80 60, 100 180))", "POLYGON ((100 180, 160 20, 20 20, 100 180), (100 180, 80 60, 120 60, 100 180))", NULL }; doTest(inp, exp); } } // namespace tut geos-3.4.2/tests/unit/operation/sharedpaths/0000755000175000017500000000000012206417243020725 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/sharedpaths/SharedPathsOpTest.cpp0000644000175000017500000003015712206417146025006 0ustar frankiefrankie// // Test Suite for geos::operation::sharedpaths::SharedPathsOp class. // tut #include // geos #include #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_shpathop_data { typedef geos::operation::sharedpaths::SharedPathsOp SharedPathsOp; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; SharedPathsOp::PathList forwDir; SharedPathsOp::PathList backDir; test_shpathop_data() : gf(), wktreader(&gf), wktwriter() { wktwriter.setTrim(true); } private: // noncopyable test_shpathop_data(test_shpathop_data const& other); test_shpathop_data& operator=(test_shpathop_data const& rhs); }; typedef test_group group; typedef group::object object; group test_shpathop_group("geos::operation::sharedpaths::SharedPathsOp"); // // Test Cases // // Point (illegal arg) template<> template<> void object::test<1>() { GeomPtr g0(wktreader.read("POINT(0 0)")); GeomPtr g1(wktreader.read("POINT(1 1)")); bool threw = false; try { SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); } catch (const geos::util::IllegalArgumentException& /*ex*/) { threw = true; } ensure(threw); } // Poly (illegal arg) template<> template<> void object::test<2>() { GeomPtr g0(wktreader.read("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))")); GeomPtr g1(wktreader.read("LINESTRING(0 0, 10 0)")); bool threw = false; try { SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); } catch (const geos::util::IllegalArgumentException& /*ex*/) { threw = true; } ensure(threw); } // Line-Line (disjoint) template<> template<> void object::test<3>() { GeomPtr g0(wktreader.read("LINESTRING(0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING(20 0, 20 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(forwDir.empty()); ensure(backDir.empty()); } // Line-Line (crossing) template<> template<> void object::test<4>() { GeomPtr g0(wktreader.read("LINESTRING(0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING(-10 5, 10 5)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(forwDir.empty()); ensure(backDir.empty()); } // Line-Line (overlapping, forward) template<> template<> void object::test<5>() { GeomPtr g0(wktreader.read("LINESTRING(0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING(5 0, 15 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(backDir.empty()); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (5 0, 10 0)"); SharedPathsOp::clearEdges(forwDir); } // Line-Line (overlapping, backward) template<> template<> void object::test<6>() { GeomPtr g0(wktreader.read("LINESTRING(0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING(15 0, 5 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(forwDir.empty()); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (5 0, 10 0)"); SharedPathsOp::clearEdges(backDir); } // Line-Line (overlapping, backward, swapped) template<> template<> void object::test<7>() { GeomPtr g0(wktreader.read("LINESTRING(15 0, 5 0)")); GeomPtr g1(wktreader.read("LINESTRING(0 0, 10 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(forwDir.empty()); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (10 0, 5 0)"); SharedPathsOp::clearEdges(backDir); } // Line-Line (contained, forward) template<> template<> void object::test<8>() { GeomPtr g0(wktreader.read("LINESTRING(-15 0, 15 0)")); GeomPtr g1(wktreader.read("LINESTRING(-10 0, 10 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(backDir.empty()); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-10 0, 10 0)"); SharedPathsOp::clearEdges(forwDir); } // Line-Line (contained, backward) template<> template<> void object::test<9>() { GeomPtr g0(wktreader.read("LINESTRING(-15 0, 15 0)")); GeomPtr g1(wktreader.read("LINESTRING(10 0, -10 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure(forwDir.empty()); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (-10 0, 10 0)"); SharedPathsOp::clearEdges(backDir); } // Line-Line (back and forw) template<> template<> void object::test<10>() { GeomPtr g0(wktreader.read("LINESTRING(-15 0, 15 0)")); GeomPtr g1(wktreader.read("LINESTRING(-10 0, -5 0, 0 5, 10 0, 5 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-10 0, -5 0)"); SharedPathsOp::clearEdges(forwDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (5 0, 10 0)"); SharedPathsOp::clearEdges(backDir); } // Line-Line (back and forw, swapped) template<> template<> void object::test<11>() { GeomPtr g0(wktreader.read("LINESTRING(-10 0, -5 0, 0 5, 10 0, 5 0)")); GeomPtr g1(wktreader.read("LINESTRING(-15 0, 15 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-10 0, -5 0)"); SharedPathsOp::clearEdges(forwDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (10 0, 5 0)"); SharedPathsOp::clearEdges(backDir); } // MultiLine-Line (back and forth) template<> template<> void object::test<12>() { GeomPtr g0(wktreader.read("MULTILINESTRING((-10 0, -5 0),(10 0, 5 0))")); GeomPtr g1(wktreader.read("LINESTRING(-15 0, 15 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-10 0, -5 0)"); SharedPathsOp::clearEdges(forwDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (10 0, 5 0)"); SharedPathsOp::clearEdges(backDir); } // MultiLine-MultiLine (back and forth) template<> template<> void object::test<13>() { GeomPtr g0(wktreader.read("MULTILINESTRING((-10 0, -5 0),(10 0, 5 0))")); GeomPtr g1(wktreader.read("MULTILINESTRING((-8 0, -2 0),(6 0, 12 0))")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-8 0, -5 0)"); SharedPathsOp::clearEdges(forwDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (10 0, 6 0)"); SharedPathsOp::clearEdges(backDir); } // MultiLine-MultiLine (forth and forth) template<> template<> void object::test<14>() { GeomPtr g0(wktreader.read("MULTILINESTRING((-10 0, -5 0),(10 0, 5 0))")); GeomPtr g1(wktreader.read("MULTILINESTRING((-8 0, -2 0),(12 0, 6 0))")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 2u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (-8 0, -5 0)"); ensure_equals(wktwriter.write(forwDir[1]), "LINESTRING (10 0, 6 0)"); SharedPathsOp::clearEdges(forwDir); ensure(backDir.empty()); } // MultiLine-MultiLine (back and back) template<> template<> void object::test<15>() { GeomPtr g0(wktreader.read("MULTILINESTRING((-10 0, -5 0),(10 0, 5 0))")); GeomPtr g1(wktreader.read("MULTILINESTRING((6 0, 12 0),(-2 0, -8 0))")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(backDir.size(), 2u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (-8 0, -5 0)"); ensure_equals(wktwriter.write(backDir[1]), "LINESTRING (10 0, 6 0)"); SharedPathsOp::clearEdges(backDir); ensure(forwDir.empty()); } // line-line (equals, forward) template<> template<> void object::test<16>() { GeomPtr g0(wktreader.read("LINESTRING(0 0, 5 10, 10 10)")); GeomPtr g1(wktreader.read("LINESTRING(0 0, 5 10, 10 10)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 2u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (0 0, 5 10)"); ensure_equals(wktwriter.write(forwDir[1]), "LINESTRING (5 10, 10 10)"); SharedPathsOp::clearEdges(forwDir); ensure(backDir.empty()); } // line-line (equals, backward) template<> template<> void object::test<17>() { GeomPtr g0(wktreader.read("LINESTRING( 0 0, 5 10, 10 10)")); GeomPtr g1(wktreader.read("LINESTRING(10 10, 5 10, 0 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(backDir.size(), 2u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (0 0, 5 10)"); ensure_equals(wktwriter.write(backDir[1]), "LINESTRING (5 10, 10 10)"); SharedPathsOp::clearEdges(backDir); ensure(forwDir.empty()); } // line - line_closed_no_rhr template<> template<> void object::test<18>() { GeomPtr g0(wktreader.read("LINESTRING( 0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING( 0 0, 10 0, 10 10, 0 10, 0 0 )")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (0 0, 10 0)"); SharedPathsOp::clearEdges(forwDir); ensure(backDir.empty()); } // line_closed_no_rhr - line template<> template<> void object::test<19>() { GeomPtr g0(wktreader.read("LINESTRING( 0 0, 10 0, 10 10, 0 10, 0 0 )")); GeomPtr g1(wktreader.read("LINESTRING( 0 0, 10 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(forwDir.size(), 1u); ensure_equals(wktwriter.write(forwDir[0]), "LINESTRING (0 0, 10 0)"); SharedPathsOp::clearEdges(forwDir); ensure(backDir.empty()); } // line - line_closed_rhr (see ticket #391) template<> template<> void object::test<20>() { GeomPtr g0(wktreader.read("LINESTRING( 0 0, 10 0)")); GeomPtr g1(wktreader.read("LINESTRING( 0 0, 0 10, 10 10, 10 0, 0 0 )")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (0 0, 10 0)"); SharedPathsOp::clearEdges(backDir); ensure(forwDir.empty()); } // line_closed_rhr - line template<> template<> void object::test<21>() { GeomPtr g0(wktreader.read("LINESTRING( 0 0, 0 10, 10 10, 10 0, 0 0 )")); GeomPtr g1(wktreader.read("LINESTRING( 0 0, 10 0)")); forwDir.clear(); backDir.clear(); SharedPathsOp::sharedPathsOp(*g0, *g1, forwDir, backDir); ensure_equals(backDir.size(), 1u); ensure_equals(wktwriter.write(backDir[0]), "LINESTRING (10 0, 0 0)"); SharedPathsOp::clearEdges(backDir); ensure(forwDir.empty()); } } // namespace tut geos-3.4.2/tests/unit/operation/union/0000755000175000017500000000000012206417243017547 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/union/CascadedPolygonUnionTest.cpp0000644000175000017500000001121612206417146025166 0ustar frankiefrankie// // Test Suite for geos::operation::geounion::CascadedPolygonUnion class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_cascadedpolygonuniontest_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; test_cascadedpolygonuniontest_data() : gf(), wktreader(&gf) {} }; typedef test_group group; typedef group::object object; group test_cascadedpolygonuniontest_group("geos::operation::geounion::CascadedPolygonUnion"); // test runner geos::geom::Geometry* unionIterated( std::vector* geoms) { typedef std::vector::iterator iterator; std::auto_ptr unionAll; iterator end = geoms->end(); for (iterator i = geoms->begin(); i != end; ++i) { if (!unionAll.get()) { unionAll.reset((*i)->clone()); } else { unionAll.reset(unionAll->Union(*i)); } } return unionAll.release(); } geos::geom::Geometry* unionCascaded( std::vector* geoms) { using geos::operation::geounion::CascadedPolygonUnion; return CascadedPolygonUnion::Union(geoms); } void test_runner(test_cascadedpolygonuniontest_data& t, std::vector* geoms) { std::auto_ptr union1(unionIterated(geoms)); std::auto_ptr union2(unionCascaded(geoms)); // For now we compare the WKT representations of the two generated // geometries which works well for simple geometries only. // More complex geometries require to use special similarity measure // criteria instead. std::string iterated(t.wktwriter.writeFormatted(union1.get())); std::string cascaded(t.wktwriter.writeFormatted(union2.get())); ensure_equals(iterated, cascaded); } void delete_geometry(geos::geom::Geometry* g) { delete g; } // // Test Cases // template<> template<> void object::test<1>() { static char const* const polygons[] = { "POLYGON ((80 260, 200 260, 200 30, 80 30, 80 260))", "POLYGON ((30 180, 300 180, 300 110, 30 110, 30 180))", "POLYGON ((30 280, 30 150, 140 150, 140 280, 30 280))", NULL }; std::vector g; for (char const* const* p = polygons; *p != NULL; ++p) { std::string wkt(*p); geos::geom::Polygon* geom = dynamic_cast(wktreader.read(wkt)); g.push_back(geom); } test_runner(*this, &g); for_each(g.begin(), g.end(), delete_geometry); } void create_discs(geos::geom::GeometryFactory& gf, int num, double radius, std::vector* g) { for (int i = 0; i < num; ++i) { for (int j = 0; j < num; ++j) { std::auto_ptr pt( gf.createPoint(geos::geom::Coordinate(i, j))); g->push_back(dynamic_cast(pt->buffer(radius))); } } } // these tests currently fail because the geometries generated by the different // union algoritms are slightly different. In order to make those tests pass // we need to port the similarity measure classes from JTS, allowing to // approximately compare the two results // template<> // template<> // void object::test<2>() // { // std::vector g; // create_discs(gf, 5, 0.7, &g); // // test_runner(*this, &g); // // std::for_each(g.begin(), g.end(), delete_geometry); // } // template<> // template<> // void object::test<3>() // { // std::vector g; // create_discs(gf, 5, 0.55, &g); // // test_runner(*this, &g); // // std::for_each(g.begin(), g.end(), delete_geometry); // } } // namespace tut geos-3.4.2/tests/unit/operation/union/UnaryUnionOpTest.cpp0000644000175000017500000001171012206417146023523 0ustar frankiefrankie// // Test Suite for geos::operation::geounion::UnaryUnionOp class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_unaryuniontest_data { geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; typedef geos::geom::Geometry Geom; typedef geos::operation::geounion::UnaryUnionOp UnaryUnionOp; test_unaryuniontest_data() : gf(), wktreader(&gf) { wktwriter.setTrim(true); } void delAll(std::vector& geoms) { for (size_t i=0; i& geoms) { for (const char* const* ptr=inputWKT; *ptr; ++ptr) { geoms.push_back(readWKT(*ptr).release()); } } static GeomPtr normalize(const Geom& g) { GeomPtr g2 ( g.clone() ); g2->normalize(); return g2; } bool isEqual(const Geom& a, const Geom& b) { using std::cout; using std::endl; GeomPtr a2 = normalize(a); GeomPtr b2 = normalize(b); bool eq = a2->equalsExact(b2.get()); if ( ! eq ) { cout << "OBTAINED: " << wktwriter.write(b2.get()) << endl; } return eq; } void doTest(const char* const* inputWKT, const std::string& expectedWKT) { std::vector geoms; readWKT(inputWKT, geoms); GeomPtr result; if ( geoms.empty() ) result = UnaryUnionOp::Union(geoms, gf); else result = UnaryUnionOp::Union(geoms); bool ok = isEqual(*readWKT(expectedWKT), *result); delAll(geoms); ensure(ok); } }; typedef test_group group; typedef group::object object; group test_unaryuniontest_group("geos::operation::geounion::UnaryUnionOp"); template<> template<> void object::test<1>() { static char const* const geoms[] = { NULL }; doTest(geoms, "GEOMETRYCOLLECTION EMPTY"); } template<> template<> void object::test<2>() { static char const* const geoms[] = { "POINT (1 1)", "POINT (2 2)", NULL }; doTest(geoms, "MULTIPOINT ((1 1), (2 2))"); } template<> template<> void object::test<3>() { static char const* const geoms[] = { "GEOMETRYCOLLECTION (POLYGON ((0 0, 0 90, 90 90, 90 0, 0 0)), POLYGON ((120 0, 120 90, 210 90, 210 0, 120 0)), LINESTRING (40 50, 40 140), LINESTRING (160 50, 160 140), POINT (60 50), POINT (60 140), POINT (40 140))", NULL }; doTest(geoms, "GEOMETRYCOLLECTION (POINT (60 140), LINESTRING (40 90, 40 140), LINESTRING (160 90, 160 140), POLYGON ((0 0, 0 90, 40 90, 90 90, 90 0, 0 0)), POLYGON ((120 0, 120 90, 160 90, 210 90, 210 0, 120 0)))"); } template<> template<> void object::test<4>() { static char const* const geoms[] = { "POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))", "MULTIPOLYGON (((20 0, 20 10, 40 10, 40 0, 20 0)),((5 5, 5 8, 8 8, 8 5, 5 5)))", "POINT (5 5)", "POINT (-5 5)", "LINESTRING (-10 -10, -10 0, -10 20)", "LINESTRING (-10 2, 10 2)", NULL }; doTest(geoms, "GEOMETRYCOLLECTION (POLYGON ((0 0, 0 2, 0 10, 10 10, 10 2, 10 0, 0 0)), POLYGON ((20 0, 20 10, 40 10, 40 0, 20 0)), LINESTRING (-10 -10, -10 0, -10 2), LINESTRING (-10 2, 0 2), LINESTRING (-10 2, -10 20), POINT (-5 5))"); } template<> template<> void object::test<5>() { static char const* const geoms[] = { "LINESTRING (40 60, 120 110)", "POINT (120 110)", "POINT (40 60)", "POINT (100 70)", "POINT (80 50)", NULL }; doTest(geoms, "GEOMETRYCOLLECTION (POINT (80 50), POINT (100 70), LINESTRING (40 60, 120 110))"); } template<> template<> void object::test<6>() { static char const* const geoms[] = { "LINESTRING (0 0, 10 0, 5 -5, 5 5)", NULL }; doTest(geoms, "MULTILINESTRING ((0 0, 5 0), (5 0, 10 0, 5 -5, 5 0), (5 0, 5 5))"); } } // namespace tut geos-3.4.2/tests/unit/operation/valid/0000755000175000017500000000000012206417243017516 5ustar frankiefrankiegeos-3.4.2/tests/unit/operation/valid/IsValidTest.cpp0000644000175000017500000000357512206417146022431 0ustar frankiefrankie// // Test Suite for geos::operation::valid::IsValidOp class // Ported from JTS junit/operation/valid/IsValidTest.java rev. 1.1 #include // geos #include #include #include #include #include #include #include #include #include #include #include // for ISNAN // std #include #include #include using namespace geos::geom; //using namespace geos::operation; using namespace geos::operation::valid; namespace tut { // // Test Group // struct test_isvalidop_data { typedef std::auto_ptr GeomPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; test_isvalidop_data() : pm_(1), factory_(&pm_, 0) {} }; typedef test_group group; typedef group::object object; group test_isvalidop_group("geos::operation::valid::IsValidOp"); // // Test Cases // // 1 - testInvalidCoordinate template<> template<> void object::test<1>() { CoordinateSequence* cs = new CoordinateArraySequence(); cs->add(Coordinate(0.0, 0.0)); cs->add(Coordinate(1.0, DoubleNotANumber)); GeomPtr line ( factory_.createLineString(cs) ); IsValidOp isValidOp(line.get()); bool valid = isValidOp.isValid(); TopologyValidationError* err = isValidOp.getValidationError(); ensure(0 != err); const Coordinate& errCoord = err->getCoordinate(); ensure_equals( err->getErrorType(), TopologyValidationError::eInvalidCoordinate ); ensure(0 != ISNAN(errCoord.y)); ensure_equals(valid, false); } } // namespace tut geos-3.4.2/tests/unit/operation/valid/ValidClosedRingTest.cpp0000644000175000017500000000750312206417146024102 0ustar frankiefrankie// // Test Suite for geos::operation::valid::IsValidOp class // Ported from JTS junit/operation/valid/ValidClosedRingTest.java rev. 1.1 #include // geos #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for ISNAN // std #include #include #include using namespace geos::geom; //using namespace geos::operation; using namespace geos::operation::valid; using namespace geos::util; using namespace std; namespace tut { // // Test Group // struct test_validclosedring_data { typedef std::auto_ptr GeomPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader rdr; test_validclosedring_data() : pm_(1), factory_(&pm_, 0), rdr(&factory_) {} GeomPtr fromWKT(const std::string& wkt) { GeomPtr geom; try { geom.reset( rdr.read(wkt) ); } catch (const GEOSException& ex) { cerr << ex.what() << endl; } return geom; } void updateNonClosedRing(LinearRing& ring) { CoordinateSequence& pts = *(const_cast( ring.getCoordinatesRO() )); Coordinate c = pts[0]; c.x += 0.0001; pts.setAt(c, 0); } void checkIsValid(Geometry& geom, bool expected) { IsValidOp validator(&geom); bool isValid = validator.isValid(); ensure_equals(isValid, expected); } }; typedef test_group group; typedef group::object object; group test_validclosedring_group("geos::operation::valid::ValidClosedRing"); // // Test Cases // // 1 - testBadLinearRing template<> template<> void object::test<1>() { GeomPtr geom = fromWKT("LINEARRING (0 0, 0 10, 10 10, 10 0, 0 0)"); LinearRing* ring_chk = dynamic_cast(geom.get()); ensure(0 != ring_chk); LinearRing& ring = *ring_chk; //cout << ring.toString() << endl; updateNonClosedRing(ring); //cout << ring.toString() << endl; checkIsValid(*geom, false); } // 2 - testGoodLinearRing template<> template<> void object::test<2>() { GeomPtr geom = fromWKT("LINEARRING (0 0, 0 10, 10 10, 10 0, 0 0)"); checkIsValid(*geom, true); } // 3 - testBadPolygonShell template<> template<> void object::test<3>() { GeomPtr geom = fromWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1) ))"); Polygon* poly = dynamic_cast(geom.get()); ensure(0 != poly); const LineString* ring = poly->getExteriorRing(); const LinearRing* lr = dynamic_cast(ring); ensure(0 != lr); LinearRing* nclr = const_cast(lr); updateNonClosedRing(*nclr); checkIsValid(*geom, false); } // 4 - testBadPolygonHole template<> template<> void object::test<4>() { GeomPtr geom = fromWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1) ))"); Polygon* poly = dynamic_cast(geom.get()); ensure(0 != poly); const LineString* ring = poly->getInteriorRingN(0); const LinearRing* lr = dynamic_cast(ring); ensure(0 != lr); LinearRing* nclr = const_cast(lr); updateNonClosedRing(*nclr); checkIsValid(*geom, false); } // 5 - testGoodPolygon template<> template<> void object::test<5>() { GeomPtr geom = fromWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))"); checkIsValid(*geom, true); } } // namespace tut geos-3.4.2/tests/unit/operation/valid/ValidSelfTouchingRingFormingHoleTest.cpp0000644000175000017500000001176712206417146027424 0ustar frankiefrankie// // Test Suite for geos::operation::valid::IsValidOp class // Ported from JTS junit/operation/valid/ValidSelfTouchingRingFormingHoleTest.java rev. 1.4 #include // geos #include #include #include #include #include #include #include #include #include #include #include #include #include #include // for ISNAN // std #include #include #include using namespace geos::geom; //using namespace geos::operation; using namespace geos::operation::valid; using namespace geos::util; using namespace std; namespace tut { // // Test Group // struct test_ValidSelfTouchingRingFormingHole_data { typedef std::auto_ptr GeomPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader rdr; test_ValidSelfTouchingRingFormingHole_data() : pm_(1), factory_(&pm_, 0), rdr(&factory_) {} GeomPtr fromWKT(const std::string& wkt) { GeomPtr geom; try { geom.reset( rdr.read(wkt) ); } catch (const GEOSException& ex) { cerr << ex.what() << endl; } return geom; } void checkIsValidDefault(const std::string& wkt, bool expected) { GeomPtr geom = fromWKT(wkt); IsValidOp validator(geom.get()); bool isValid = validator.isValid(); ensure(isValid == expected); } void checkIsValidSTR(const std::string& wkt, bool expected) { GeomPtr geom = fromWKT(wkt); IsValidOp validator(geom.get()); validator.setSelfTouchingRingFormingHoleValid(true); bool isValid = validator.isValid(); ensure(isValid == expected); } }; typedef test_group group; typedef group::object object; group test_ValidSelfTouchingRingFormingHole_group("geos::operation::valid::ValidSelfTouchingRingFormingHole"); // // Test Cases // // 1 - testShellAndHoleSelfTouch // // Tests a geometry with both a shell self-touch and a hole self=touch. // This is valid if STR is allowed, but invalid in OGC // template<> template<> void object::test<1>() { string wkt = "POLYGON ((0 0, 0 340, 320 340, 320 0, 120 0, 180 100, 60 100, 120 0, 0 0), (80 300, 80 180, 200 180, 200 240, 280 200, 280 280, 200 240, 200 300, 80 300))"; checkIsValidSTR(wkt, true); checkIsValidDefault(wkt, false); } /* * 2 - testShellHoleAndHoleHoleTouch * * Tests a geometry representing the same area as in * {@link #testShellAndHoleSelfTouch} * but using a shell-hole touch and a hole-hole touch. * This is valid in OGC. */ template<> template<> void object::test<2>() { string wkt = "POLYGON ((0 0, 0 340, 320 340, 320 0, 120 0, 0 0), (120 0, 180 100, 60 100, 120 0), (80 300, 80 180, 200 180, 200 240, 200 300, 80 300), (200 240, 280 200, 280 280, 200 240))"; checkIsValidSTR(wkt, true); checkIsValidDefault(wkt, true); } /* * 3 - testShellSelfTouchHoleOverlappingHole * * Tests an overlapping hole condition, where one of the holes is * created by a shell self-touch. * This is never valid. */ template<> template<> void object::test<3>() { string wkt = "POLYGON ((0 0, 220 0, 220 200, 120 200, 140 100, 80 100, 120 200, 0 200, 0 0), (200 80, 20 80, 120 200, 200 80))"; checkIsValidSTR(wkt, false); checkIsValidDefault(wkt, false); } /* * 4 - testDisconnectedInteriorShellSelfTouchAtNonVertex * * Ensure that the Disconnected Interior condition is not validated */ template<> template<> void object::test<4>() { string wkt = "POLYGON ((40 180, 40 60, 240 60, 240 180, 140 60, 40 180))"; checkIsValidSTR(wkt, false); checkIsValidDefault(wkt, false); } /* * 5 - testDisconnectedInteriorShellSelfTouchAtVertex * * Ensure that the Disconnected Interior condition is not validated */ template<> template<> void object::test<5>() { string wkt = "POLYGON ((20 20, 20 100, 140 100, 140 180, 260 180, 260 100, 140 100, 140 20, 20 20))"; checkIsValidSTR(wkt, false); checkIsValidDefault(wkt, false); } /// 6 - testShellCross() template<> template<> void object::test<6>() { string wkt = "POLYGON ((20 20, 120 20, 120 220, 240 220, 240 120, 20 120, 20 20))"; checkIsValidSTR(wkt, false); checkIsValidDefault(wkt, false); } /// 7 - testShellCrossAndSTR template<> template<> void object::test<7>() { string wkt = "POLYGON ((20 20, 120 20, 120 220, 180 220, 140 160, 200 160, 180 220, 240 220, 240 120, 20 120, 20 20))"; checkIsValidSTR(wkt, false); checkIsValidDefault(wkt, false); } } // namespace tut geos-3.4.2/tests/unit/precision/0000755000175000017500000000000012206417243016412 5ustar frankiefrankiegeos-3.4.2/tests/unit/precision/GeometryPrecisionReducerTest.cpp0000644000175000017500000001254412206417146024747 0ustar frankiefrankie// $Id$ // // Test Suite for geos::precision::GeometryPrecisionReducer class. // tut #include // geos #include #include #include #include #include // std #include #include #include namespace tut { // // Test Group // // Common data used by tests struct test_gpr_data { typedef std::auto_ptr GeometryPtr; geos::geom::PrecisionModel pm_float_; geos::geom::PrecisionModel pm_fixed_; geos::geom::GeometryFactory factory_; geos::geom::GeometryFactory factory_fixed_; geos::io::WKTReader reader_; geos::precision::GeometryPrecisionReducer reducer_; geos::precision::GeometryPrecisionReducer reducerKeepCollapse_; // keep collapse geos::precision::GeometryPrecisionReducer reducerChangePM_; // change precision model test_gpr_data() : pm_float_(), pm_fixed_(1), factory_(&pm_float_, 0), factory_fixed_(&pm_fixed_, 0), reader_(&factory_), reducer_(pm_fixed_), reducerKeepCollapse_(pm_fixed_), reducerChangePM_(factory_fixed_) { reducerKeepCollapse_.setRemoveCollapsedComponents(false); } }; typedef test_group group; typedef group::object object; group test_gpr_group("geos::precision::GeometryPrecisionReducer"); // // Test Cases // // Test square template<> template<> void object::test<1>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, 1.4 1.4, 1.4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0 ))")); GeometryPtr result(reducer_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test tiny square collapse template<> template<> void object::test<2>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 .4, .4 .4, .4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON EMPTY")); GeometryPtr result(reducer_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test square collapse template<> template<> void object::test<3>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON EMPTY")); GeometryPtr result(reducer_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test square keep collapse template<> template<> void object::test<4>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))")); /** * For polygonal geometries, collapses are always removed, in order * to produce correct topology */ GeometryPtr g2(reader_.read("POLYGON EMPTY")); GeometryPtr result(reducerKeepCollapse_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test line template<> template<> void object::test<5>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 1.4 )")); GeometryPtr g2(reader_.read("LINESTRING (0 0, 0 1)")); GeometryPtr result(reducer_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test line remove collapse template<> template<> void object::test<6>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )")); GeometryPtr g2(reader_.read("LINESTRING EMPTY")); GeometryPtr result(reducer_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test line keep collapse template<> template<> void object::test<7>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )")); GeometryPtr g2(reader_.read("LINESTRING ( 0 0, 0 0 )")); GeometryPtr result(reducerKeepCollapse_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == g2->getFactory() ); } // Test square with changed PM template<> template<> void object::test<8>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, 1.4 1.4, 1.4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0 ))")); GeometryPtr result(reducerChangePM_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == &factory_fixed_ ); } // Test points with changed PM template<> template<> void object::test<9>() { GeometryPtr g1(reader_.read("MULTIPOINT ((0 0), (0 1.4), (1.4 1.4), (1.4 0), (0.9 0) ))")); GeometryPtr g2(reader_.read("MULTIPOINT ((0 0), (0 1), (1 1), (1 0), (1 0) ))")); GeometryPtr result(reducerChangePM_.reduce(*g1)); ensure( result->equalsExact(g2.get()) ); ensure( result->getFactory() == &factory_fixed_ ); } } // namespace tut geos-3.4.2/tests/unit/precision/SimpleGeometryPrecisionReducerTest.cpp0000644000175000017500000000731712206417146026123 0ustar frankiefrankie// // Test Suite for geos::precision::SimpleGeometryPrecisionReducer class. // tut #include // geos #include #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used by tests struct test_sgpr_data { typedef std::auto_ptr GeometryPtr; geos::geom::PrecisionModel pm_float_; geos::geom::PrecisionModel pm_fixed_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; geos::precision::SimpleGeometryPrecisionReducer reducer_; geos::precision::SimpleGeometryPrecisionReducer reducer2_; // keep collapse test_sgpr_data() : pm_float_(), pm_fixed_(1), factory_(&pm_float_, 0), reader_(&factory_), reducer_(&pm_fixed_), reducer2_(&pm_fixed_) { reducer2_.setRemoveCollapsedComponents(false); } }; typedef test_group group; typedef group::object object; group test_sgpr_group("geos::precision::SimpleGeometryPrecisionReducer"); // // Test Cases // // Test square template<> template<> void object::test<1>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, 1.4 1.4, 1.4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 1 1, 1 0, 0 0 ))")); GeometryPtr result(reducer_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test tiny square collapse template<> template<> void object::test<2>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 .4, .4 .4, .4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON EMPTY")); GeometryPtr result(reducer_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test square collapse template<> template<> void object::test<3>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON EMPTY")); GeometryPtr result(reducer_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test square keep collapse template<> template<> void object::test<4>() { GeometryPtr g1(reader_.read("POLYGON (( 0 0, 0 1.4, .4 .4, .4 0, 0 0 ))")); GeometryPtr g2(reader_.read("POLYGON (( 0 0, 0 1, 0 0, 0 0, 0 0 ))")); GeometryPtr result(reducer2_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test line template<> template<> void object::test<5>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 1.4 )")); GeometryPtr g2(reader_.read("LINESTRING (0 0, 0 1)")); GeometryPtr result(reducer_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test line remove collapse template<> template<> void object::test<6>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )")); GeometryPtr g2(reader_.read("LINESTRING EMPTY")); GeometryPtr result(reducer_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } // Test line keep collapse template<> template<> void object::test<7>() { GeometryPtr g1(reader_.read("LINESTRING ( 0 0, 0 .4 )")); GeometryPtr g2(reader_.read("LINESTRING ( 0 0, 0 0 )")); GeometryPtr result(reducer2_.reduce(g1.get())); ensure( result->equalsExact(g2.get()) ); } } // namespace tut geos-3.4.2/tests/unit/simplify/0000755000175000017500000000000012206417243016253 5ustar frankiefrankiegeos-3.4.2/tests/unit/simplify/DouglasPeuckerSimplifierTest.cpp0000644000175000017500000002222112206417146024561 0ustar frankiefrankie// // Test Suite for geos::simplify::DouglasPeuckerSimplifierTest #include // geos #include #include #include #include #include #include #include #include #include // std #include #include namespace tut { using namespace geos::simplify; // // Test Group // // Common data used by tests struct test_dpsimp_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; test_dpsimp_data() : pm(geos::geom::PrecisionModel::FLOATING), gf(&pm), wktreader(&gf) {} }; typedef test_group group; typedef group::object object; group test_dpsimp_group("geos::simplify::DouglasPeuckerSimplifier"); // // Test Cases // // 1 - PolygonNoReduction template<> template<> void object::test<1>() { std::string wkt("POLYGON((20 220, 40 220, 60 220, 80 220, 100 220, \ 120 220, 140 220, 140 180, 100 180, 60 180, 20 180, 20 220))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); // topology is unchanged ensure( simplified->equals(g.get()) ); } // 2 - PolygonReductionWithSplit template<> template<> void object::test<2>() { std::string wkt_in("POLYGON ((40 240, 160 241, 280 240, 280 160, \ 160 240, 40 140, 40 240))"); std::string wkt_ex("MULTIPOLYGON (((40.0 240.0, 160.0 240.0, 40.0 140.0, 40.0 240.0)), \ ((160.0 240.0, 280.0 240.0, 280.0 160.0, 160.0 240.0)))"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); // TODO: This test blows because if instability of geos.index.strtree::yComparator() predicate GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 3 - PolygonReduction template<> template<> void object::test<3>() { std::string wkt_in("POLYGON ((120 120, 121 121, 122 122, 220 120, \ 180 199, 160 200, 140 199, 120 120))"); std::string wkt_ex("POLYGON ((120 120, 140 199, 160 200, 180 199, 220 120, 120 120))"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 4 - PolygonWithTouchingHole template<> template<> void object::test<4>() { std::string wkt_in("POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \ (120 120, 220 120, 180 199, 160 200, 140 199, 120 120))"); std::string wkt_ex("POLYGON ((80 200, 160 200, 240 200, 240 60, 80 60, 80 200), \ (160 200, 140 199, 120 120, 220 120, 180 199, 160 200)))"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 5 - FlattishPolygon template<> template<> void object::test<5>() { std::string wkt_in("POLYGON ((0 0, 50 0, 53 0, 55 0, 100 0, 70 1, 60 1, 50 1, 40 1, 0 0))"); std::string wkt_ex("POLYGON EMPTY"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); //ensure_equals( *simplified, *expected ); } // 6 - TinySquare template<> template<> void object::test<6>() { std::string wkt_in("POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))"); std::string wkt_ex("POLYGON EMPTY"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 7 - TinyLineString template<> template<> void object::test<7>() { std::string wkt_in("LINESTRING (0 5, 1 5, 2 5, 5 5)"); std::string wkt_ex("LINESTRING (0 5, 5 5)"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 8 - MultiPoint template<> template<> void object::test<8>() { std::string wkt_in("MULTIPOINT(80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120)"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); // MultiPoint is *not* simplified ensure( simplified->equalsExact(g.get()) ); } // 9 - MultiLineString template<> template<> void object::test<9>() { std::string wkt_in("MULTILINESTRING( (0 0, 50 0, 70 0, 80 0, 100 0), \ (0 0, 50 1, 60 1, 100 0) )"); std::string wkt_ex("MULTILINESTRING( (0 0, 100 0), (0 0, 100 0) )"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); ensure( simplified->equalsExact(expected.get()) ); } // 10 - GeometryCollection template<> template<> void object::test<10>() { std::string wkt_in("GEOMETRYCOLLECTION ( \ MULTIPOINT (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120), \ POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200)), \ LINESTRING (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120) )"); std::string wkt_ex("MULTILINESTRING( (0 0, 100 0), (0 0, 100 0) )"); GeomPtr g(wktreader.read(wkt_in)); GeomPtr expected(wktreader.read(wkt_ex)); GeomPtr simplified = DouglasPeuckerSimplifier::simplify( g.get(), 10.0); ensure( simplified->isValid() ); // Non simplification occurs ensure( simplified->equalsExact(g.get()) ); } // 11 - A kind of reversed simplification template<> template<> void object::test<11>() { using namespace geos::geom; std::string wkt("MULTIPOLYGON(((0.561648 1,1 1,1 0,0.468083 0,0.52758 0.00800554,0.599683 0.0280924, 0.601611 0.265374, \ 0.622693 0.316765,0.69507 0.357497,0.695623 0.429711,0.655111 0.502298, 0.696467 0.543147,0.840712 0.593546, \ 0.882583 0.66546,0.852357 0.748213,0.84264 0.789567,0 .832667 0.841202,0.832667 0.841202,0.740538 0.873004, \ 0.617349 0.905045,0.566576 0.977697,0.561648 1)),((0 0.801979,0.0308575 0.786234,0.0705513 0.631135, \ 0.141616 0.527248,0.233985 0.505872,0.264777 0.526263,0.336631 0.505009,0.356603 0.422321,0.355803 0.350038, \ 0.375252 0.205364,0.415206 0.0709182,0.45479 0,0 0,0 0,0 0.801979)))"); GeomPtr g(wktreader.read(wkt)); std::size_t const gN = g->getNumPoints(); ensure_equals(gN, std::size_t(37)); // 1) Simplify with 1/2048 double const d1 = 1/2048.0; GeomPtr simplified1 = DouglasPeuckerSimplifier::simplify(g.get(), d1); ensure(simplified1->isValid()); ensure(simplified1->equals(g.get())); std::size_t const simplifiedN1 = simplified1->getNumPoints(); ensure_equals(simplifiedN1, std::size_t(36)); //std::string const simplifiedWkd = wktwriter.write(simplified1.get()); // 2) Multiply points by 2047 struct Multiplier : public CoordinateSequenceFilter { double f; Multiplier(double f) : f(f) {} void filter_rw(CoordinateSequence& seq, std::size_t i) { seq.setOrdinate(i, CoordinateSequence::X, seq[i].x * f); seq.setOrdinate(i, CoordinateSequence::Y, seq[i].y * f); } void filter_ro(const CoordinateSequence& seq, std::size_t i) { ::geos::ignore_unused_variable_warning(seq); ::geos::ignore_unused_variable_warning(i); } bool isDone() const { return false; } bool isGeometryChanged() const { return true; } }; Multiplier m(2047); g->apply_rw(m); std::size_t const multipliedN = g->getNumPoints(); ensure_equals(multipliedN, std::size_t(37)); //std::string const multipliedWkt = wktwriter.write(g.get()); // 3) Simplify with 1.0 double const d2 = 1.0; GeomPtr simplified2 = DouglasPeuckerSimplifier::simplify(g.get(), d2); ensure(simplified2->isValid()); ensure(simplified2->equals(g.get())); std::size_t const simplifiedN2 = simplified2->getNumPoints(); ensure_equals(simplifiedN2, std::size_t(36)); //std::string const simplifiedWkt2 = wktwriter.write(simplified2.get()); } } // namespace tut geos-3.4.2/tests/unit/simplify/TopologyPreservingSimplifierTest.cpp0000644000175000017500000004471412206417146025540 0ustar frankiefrankie// Test Suite for geos::simplify::TopologyPreservingSimplifier // // Last port: junit/simplify/TopologyPreservingSimplifierTest.java r536 #include #include // geos #include #include #include #include #include #include #include // std #include #include namespace tut { using namespace geos::simplify; // // Test Group // // Common data used by tests struct test_tpsimp_data { geos::geom::PrecisionModel pm; geos::geom::GeometryFactory gf; geos::io::WKTReader wktreader; geos::io::WKTWriter wktwriter; typedef geos::geom::Geometry::AutoPtr GeomPtr; test_tpsimp_data() : pm(1.0), gf(&pm), wktreader(&gf), wktwriter() { //wktwriter.setTrim(1); } }; typedef test_group group; typedef group::object object; group test_tpsimp_group("geos::simplify::TopologyPreservingSimplifier"); // // Test Cases // // EmptyPolygon template<> template<> void object::test<1>() { std::string wkt("POLYGON EMPTY"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // Point template<> template<> void object::test<2>() { std::string wkt("POINT (10 10)"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } #if 0 // Fails with JTS too ! // MultiPolygonWithSmallComponents // Test is from http://postgis.refractions.net/pipermail/postgis-users/2008-April/019327.html template<> template<> void object::test<3>() { std::string wkt( "MULTIPOLYGON(((13.73095 51.024734,13.7309323 51.0247668,13.7306959 51.0247959,13.7292724 51.0249742,13.7280216 51.0251252,13.7266598 51.0252998,13.7259617 51.0254072,13.7258854 51.0254201,13.7253253 51.0255144,13.725276 51.025492,13.724538 51.025631,13.7230288 51.0259021,13.7223529 51.0260273,13.7223299 51.0260863,13.7222292 51.026391,13.7220002 51.0273366,13.7217875 51.0282094,13.721746 51.028243,13.7217693 51.0282803,13.7215512 51.0291967,13.721513 51.029222,13.7215203 51.0292567,13.7212713 51.0295967,13.7222258 51.0299532,13.722234 51.03,13.7222931 51.0299823,13.7232514 51.0303187,13.7242514 51.0306715,13.724263 51.030714,13.7243024 51.0306951,13.7249934 51.0309315,13.7265097 51.0314552,13.7266116 51.0313952,13.7267988 51.0313334,13.7269952 51.0313243,13.72703 51.0314107,13.7271637 51.0313254,13.7272524 51.0313839,13.72739 51.031449,13.7276768 51.0313074,13.7283793 51.0309944,13.7296654 51.0304157,13.7297572 51.0303637,13.729845 51.0303139,13.7299557 51.0301763,13.7300964 51.0300176,13.730252 51.0298919,13.7304615 51.0297932,13.730668 51.0297363,13.730743 51.029783,13.7307859 51.0298398,13.7307094 51.0301388,13.730624 51.030263,13.7306955 51.0303267,13.7301182 51.0325594,13.7300528 51.0325663,13.7301114 51.0327342,13.7301645 51.0329094,13.7300035 51.0327693,13.7299669 51.0327351,13.7299445 51.0327211,13.7298934 51.032814,13.7298539 51.0328585,13.7297737 51.0328321,13.7288526 51.0325639,13.7288201 51.0324367,13.7284426 51.0324383,13.7276461 51.032179,13.7274569 51.0321976,13.7272787 51.0322421,13.7271265 51.0322903,13.7267034 51.0322495,13.7265364 51.0322161,13.7259018 51.0324269,13.7258649 51.03242,13.725733 51.0326646,13.7251933 51.0328876,13.7247918 51.0331374,13.7244439 51.0331106,13.7242967 51.0334273,13.7239131 51.0337529,13.7237035 51.0338511,13.7235429 51.033967,13.7233375 51.0339148,13.7232064 51.0339347,13.7231786 51.0339863,13.7228848 51.0340776,13.7224481 51.0341888,13.7220471 51.0342483,13.7217493 51.0343198,13.721552 51.0343861,13.7214718 51.0344095,13.7215108 51.034534,13.7205032 51.0349932,13.7197657 51.0352983,13.7195764 51.0352291,13.7195934 51.0352797,13.7182451 51.0359157,13.7181108 51.0359003,13.7181657 51.0359571,13.717622 51.0361956,13.7159749 51.0369683,13.7159057 51.0369284,13.7158604 51.0370288,13.7157161 51.0370124,13.7157523 51.0370733,13.7153708 51.0372801,13.7150274 51.0374899,13.7144074 51.0379192,13.7138287 51.0383899,13.7137514 51.0383857,13.7137492 51.0384566,13.7134249 51.0387269,13.7130179 51.0390385,13.7125791 51.0393343,13.7120736 51.039611,13.7115839 51.0398558,13.7112945 51.0399894,13.7114637 51.0402313,13.7123153 51.041449,13.7126333 51.0417033,13.713371 51.0421453,13.7138861 51.0424061,13.7142518 51.0425683,13.7164587 51.0435668,13.7167995 51.0437957,13.7170883 51.0439897,13.7190694 51.0451663,13.7196131 51.0458277,13.7197562 51.0461521,13.7198262 51.0464192,13.7198377 51.0467389,13.7205681 51.0455573,13.7210009 51.0450379,13.7214987 51.0445401,13.7220306 51.0442859,13.7227215 51.0439558,13.7237962 51.0434514,13.723979 51.0435278,13.7241448 51.0435041,13.7241052 51.0436042,13.7247987 51.0438896,13.7250186 51.0439093,13.7250579 51.0440386,13.7257225 51.0443545,13.7259312 51.0443456,13.725955 51.0443813,13.7260235 51.0443873,13.7260682 51.0445303,13.7282191 51.0455848,13.7290532 51.045927,13.7292643 51.0458591,13.7292228 51.0459969,13.729706 51.0461854,13.7303185 51.046393,13.7309107 51.0465601,13.731546 51.0466841,13.7321939 51.0467752,13.7332896 51.0468999,13.7333733 51.0469094,13.7334778 51.0468127,13.7335706 51.0469078,13.733651 51.0470684,13.7338458 51.0471508,13.7346109 51.0472333,13.7346367 51.0471474,13.7346922 51.0470697,13.7346666 51.0470056,13.7346564 51.0468714,13.7345552 51.0467095,13.7336001 51.0465496,13.733427 51.046454,13.7335317 51.0464255,13.7347225 51.0465948,13.7348421 51.0466562,13.7349123 51.0466203,13.736811 51.0468537,13.7382043 51.0469796,13.7383487 51.0469803,13.7394909 51.0469005,13.7400899 51.0467949,13.7405051 51.0464739,13.7408331 51.0462204,13.7412027 51.0463256,13.741053 51.0466451,13.7407291 51.0469007,13.7405095 51.0469726,13.7400888 51.0470337,13.7393051 51.0471049,13.7393014 51.0472015,13.7393088 51.0473019,13.7395556 51.0473056,13.7404944 51.0472245,13.740932 51.0470192,13.7414421 51.0465652,13.7414893 51.0465576,13.7416494 51.0464916,13.7416003 51.0466074,13.7416246 51.04663,13.741668 51.0466443,13.7417272 51.0467159,13.7417503 51.0466716,13.7423587 51.0468732,13.7426958 51.0470246,13.7429143 51.0471813,13.74318 51.04726,13.7430363 51.0472995,13.7433021 51.047588,13.7434678 51.0475916,13.7433805 51.0477019,13.7436362 51.0479981,13.7446308 51.0491622,13.7447961 51.0491827,13.744722 51.0492509,13.7448536 51.0494078,13.745056 51.0494766,13.7450313 51.0496901,13.7453573 51.0500052,13.7465317 51.0512807,13.7466999 51.0513722,13.746638 51.0514149,13.7468683 51.0516781,13.7470071 51.051777,13.7469985 51.0518746,13.7470732 51.0519866,13.7471316 51.0520528,13.7472989 51.0523089,13.7472368 51.0523858,13.7473063 51.0524932,13.7473468 51.0527412,13.7473392 51.0531614,13.7472987 51.0533157,13.7473919 51.0534224,13.7472684 51.0534549,13.7472134 51.0536926,13.7472913 51.0537784,13.7473216 51.053725,13.7474649 51.0537575,13.7474492 51.053833,13.7475625 51.0537839,13.7497379 51.0544435,13.7515333 51.0551019,13.7527693 51.0555438,13.7549766 51.0564993,13.7550622 51.0565364,13.755105 51.0566612,13.7552745 51.0566237,13.7558661 51.0560648,13.7559318 51.0560101,13.755908 51.055897,13.7559252 51.0558292,13.7559566 51.0557055,13.7564494 51.0551377,13.7564124 51.0550457,13.7573213 51.0539813,13.7575007 51.0539933,13.757856 51.0540047,13.7580394 51.054028,13.7580896 51.053984,13.7580949 51.0539463,13.7579963 51.0538534,13.7581294 51.0537147,13.7582346 51.0535957,13.758354 51.053433,13.758363 51.053392,13.7583656 51.0533457,13.758359 51.0532095,13.7583338 51.0530937,13.7582902 51.0529647,13.7580365 51.0522637,13.7577683 51.051463,13.7573182 51.0501993,13.7571595 51.0497164,13.7567579 51.0490095,13.7563383 51.0482979,13.7557757 51.0473383,13.7557095 51.0472522,13.7555771 51.0471199,13.7554448 51.0470471,13.7548596 51.0462612,13.7547097 51.046054,13.7549127 51.0460086,13.7548633 51.0459174,13.7548127 51.0458413,13.7547176 51.0457237,13.7538293 51.0449222,13.7530218 51.0441346,13.7526711 51.0437838,13.752446 51.0435522,13.7522297 51.0433547,13.751704 51.042833,13.7513058 51.0424448,13.7505766 51.0417281,13.7499967 51.0411283,13.7497695 51.0408943,13.7493849 51.0405205,13.7486222 51.0397896,13.7478209 51.0390261,13.7477474 51.0389532,13.7477041 51.0389189,13.7476277 51.0388729,13.7475781 51.0388513,13.7472699 51.038726,13.747131 51.0386506,13.7469329 51.0385052,13.7468562 51.0384284,13.7466683 51.0383483,13.7467998 51.038236,13.7473841 51.0380129,13.747838 51.0378277,13.7481801 51.0376558,13.7489728 51.0370285,13.7491313 51.0368016,13.7492665 51.0363477,13.7493166 51.0359389,13.7492966 51.0358087,13.7493888 51.0356942,13.7492867 51.0357016,13.7492855 51.0354359,13.7492829 51.034867,13.7492723 51.0348311,13.7492455 51.0347398,13.7493034 51.0346612,13.7491987 51.0346142,13.748866 51.034723,13.748791 51.034201,13.748335 51.034159,13.748294 51.034034,13.748205 51.033764,13.7488691 51.0333037,13.748962 51.033245,13.7486777 51.0332252,13.7483008 51.032683,13.7484397 51.0324582,13.7469913 51.0327817,13.7466998 51.0326205,13.7459997 51.0314852,13.7460996 51.0313569,13.745967 51.0314864,13.7449355 51.0317377,13.7447301 51.0316513,13.7446705 51.0318463,13.7420262 51.0323659,13.7419131 51.0322884,13.7418636 51.0322552,13.7416501 51.0321425,13.7415567 51.0317708,13.7414972 51.0314666,13.741484 51.0311492,13.741923 51.031003,13.7418649 51.030884,13.74209 51.0304134,13.7422077 51.0300143,13.7421975 51.0299222,13.742286 51.029835,13.7421463 51.0297533,13.7420951 51.0296254,13.7415933 51.0288452,13.7414906 51.0286855,13.7414437 51.0286127,13.7413482 51.0284642,13.7410545 51.0280777,13.7407158 51.0277229,13.7401513 51.0273842,13.7392803 51.0270293,13.7382744 51.0267844,13.737321 51.0267454,13.7365929 51.0267541,13.736556 51.026812,13.7364715 51.026754,13.7357088 51.0268017,13.7353967 51.02678,13.73534 51.02685,13.7352667 51.0267757,13.734907 51.0267324,13.734824 51.02679,13.7347684 51.0267064,13.7342093 51.0266674,13.73409 51.026725,13.7340359 51.0266283,13.7335072 51.0265633,13.733407 51.02663,13.7333208 51.0265373,13.7317087 51.0263813,13.7317173 51.0263119,13.73167 51.026241,13.7317563 51.0261602,13.7318473 51.0258395,13.7318647 51.0254971,13.73183 51.0253281,13.7317736 51.0252414,13.731663 51.025181,13.7316826 51.0251114,13.7310803 51.0247604,13.73095 51.024734)),((13.7368533 51.0470386,13.7368426 51.0471226,13.7368067 51.0472669,13.7368255 51.0473828,13.7369099 51.0474154,13.7376695 51.0474677,13.7382756 51.0474245,13.738513 51.0474297,13.7386105 51.0474065,13.738705 51.0473737,13.7385856 51.0473757,13.7385618 51.0473751,13.7385263 51.0473743,13.7384706 51.0473744,13.7383071 51.0473734,13.7383822 51.0473564,13.7390821 51.047287,13.7390933 51.047209,13.7390933 51.0471421,13.7368533 51.0470386)),((13.7367293 51.0470057,13.7346615 51.0466892,13.7347551 51.0468411,13.7347754 51.0470359,13.7347106 51.0471899,13.7356421 51.0472919,13.7366963 51.0474074,13.736705 51.047249,13.7367293 51.0470057)))" ); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 0.0057); ensure( "Simplified geometry is invalid!", simplified->isValid() ); } #endif // fails with JTS too // PolygonWithSpike template<> template<> void object::test<4>() { std::string wkt("POLYGON ((3312459.605 6646878.353, \ 3312460.524 6646875.969, 3312459.427 6646878.421, \ 3312460.014 6646886.391, 3312465.889 6646887.398, \ 3312470.827 6646884.839, 3312475.4 6646878.027, \ 3312477.289 6646871.694, 3312472.748 6646869.547, \ 3312468.253 6646874.01, 3312463.52 6646875.779, \ 3312459.605 6646878.353))"); std::string wkt_expected("POLYGON (( \ 3312459.605 6646878.353, \ 3312460.524 6646875.969, \ 3312459.427 6646878.421, \ 3312460.014 6646886.391, \ 3312465.889 6646887.398, \ 3312470.827 6646884.839, \ 3312477.289 6646871.694, \ 3312472.748 6646869.547, \ 3312459.605 6646878.353))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 2.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); GeomPtr g_expected(wktreader.read(wkt_expected)); ensure( g_expected->equalsExact(simplified.get()) ); } // PolygonNoReduction template<> template<> void object::test<5>() { std::string wkt("POLYGON((20 220, 40 220, 60 220, 80 220, \ 100 220, 120 220, 140 220, 140 180, 100 180, \ 60 180, 20 180, 20 220))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure( "Simplified and original geometry inequal", simplified->equals(g.get()) ); ensure_equals_geometry( g.get(), simplified.get() ); } // PolygonNoReductionWithConflicts template<> template<> void object::test<6>() { std::string wkt("POLYGON ((40 240, 160 241, 280 240, 280 160, \ 160 240, 40 140, 40 240))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure( "Topology has been changed by simplification!", simplified->equals(g.get()) ); ensure_equals_geometry( g.get(), simplified.get() ); } // PolygonWithTouchingHole template<> template<> void object::test<7>() { std::string wkt("POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \ (120 120, 220 120, 180 199, 160 200, 140 199, 120 120))"); std::string wkt_expected("POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200), \ (120 120, 220 120, 180 199, 160 200, 140 199, 120 120))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry( g.get(), simplified.get() ); GeomPtr g_expected(wktreader.read(wkt_expected)); ensure( g_expected->equalsExact(simplified.get()) ); } // FlattishPolygon template<> template<> void object::test<8>() { std::string wkt("POLYGON ((0 0, 50 0, 53 0, 55 0, 100 0, \ 70 1, 60 1, 50 1, 40 1, 0 0))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry( g.get(), simplified.get() ); } // PolygonWithFlattishHole template<> template<> void object::test<9>() { std::string wkt("POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), \ (140 40, 90 95, 40 160, 95 100, 140 40))"); GeomPtr g(wktreader.read(wkt)); GeomPtr g_expected(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry( g.get(), simplified.get() ); ensure( g_expected->equalsExact(simplified.get()) ); } // TinySquare template<> template<> void object::test<10>() { std::string wkt("POLYGON ((0 5, 5 5, 5 0, 0 0, 0 1, 0 5))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry( g.get(), simplified.get() ); } // TinyLineString template<> template<> void object::test<11>() { std::string wkt("LINESTRING (0 5, 1 5, 2 5, 5 5)"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // TinyClosedLineString template<> template<> void object::test<12>() { std::string wkt("LINESTRING (0 0, 5 0, 5 5, 0 0)"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // MultiPoint template<> template<> void object::test<13>() { std::string wkt("MULTIPOINT(80 200, 240 200, 240 60, \ 80 60, 80 200, 140 199, 120 120)"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // MultiLineString template<> template<> void object::test<14>() { std::string wkt("MULTILINESTRING((0 0, 50 0, 70 0, 80 0, 100 0), \ (0 0, 50 1, 60 1, 100 0))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // GeometryCollection template<> template<> void object::test<15>() { std::string wkt("GEOMETRYCOLLECTION ( \ MULTIPOINT (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120), \ POLYGON ((80 200, 240 200, 240 60, 80 60, 80 200)), \ LINESTRING (80 200, 240 200, 240 60, 80 60, 80 200, 140 199, 120 120))"); GeomPtr g(wktreader.read(wkt)); GeomPtr simplified = TopologyPreservingSimplifier::simplify(g.get(), 10.0); ensure( "Simplified geometry is invalid!", simplified->isValid() ); ensure_equals_geometry(g.get(), simplified.get() ); } // GeometryCollection with empty elements // See http://trac.osgeo.org/geos/ticket/519 template<> template<> void object::test<16>() { std::string wkt("GEOMETRYCOLLECTION ( \ LINESTRING (0 0, 10 0), POLYGON EMPTY)"); GeomPtr g(wktreader.read(wkt)); GeomPtr simp= TopologyPreservingSimplifier::simplify(g.get(), 1); ensure( "Simplified geometry is invalid!", simp->isValid() ); ensure_equals(wktwriter.write(simp.get()), "GEOMETRYCOLLECTION (LINESTRING (0 0, 10 0))"); } } // namespace tut geos-3.4.2/tests/unit/triangulate/0000755000175000017500000000000012206417243016736 5ustar frankiefrankiegeos-3.4.2/tests/unit/triangulate/DelaunayTest.cpp0000644000175000017500000002324212206417146022051 0ustar frankiefrankie // // Test Suite for geos::triangulate::quadedge::QuadEdge // // tut #include // geos #include #include #include #include //#include #include #include #include #include //#include using namespace geos::triangulate; using namespace geos::triangulate::quadedge; using namespace geos::geom; using namespace geos::io; namespace tut { // // Test Group // // dummy data, not used struct test_incdelaunaytri_data { test_incdelaunaytri_data() { } }; typedef test_group group; typedef group::object object; group test_incdelaunaytri_group("geos::triangulate::Delaunay"); //helper function for funning triangulation void runDelaunay(const char *sitesWkt, bool computeTriangles, const char *expectedWkt, double tolerance=0.0) { WKTReader reader; std::auto_ptr results; Geometry *sites = reader.read(sitesWkt); Geometry *expected = reader.read(expectedWkt); DelaunayTriangulationBuilder builder; builder.setTolerance(tolerance); GeometryFactory geomFact; builder.setSites(*sites); if(computeTriangles) results=builder.getTriangles(geomFact); else results=builder.getEdges(geomFact); results->normalize(); expected->normalize(); ensure(results->toString(), results->equalsExact(expected, 1e-7)); ensure_equals(results->getCoordinateDimension(), expected->getCoordinateDimension()); delete sites; delete expected; } // // Test Cases // // 1 - Basic function test template<> template<> void object::test<1>() { //Create a subdivision centered at (0,0) QuadEdgeSubdivision sub(Envelope(-100, 100, -100, 100), .00001); //make a triagulaor to work on sub IncrementalDelaunayTriangulator triangulator(&sub); triangulator.insertSite(Vertex(0, 0)); //extract the triangles from the subdivision GeometryFactory geomFact; std::auto_ptr tris = sub.getTriangles(geomFact); } // 2 - Test Triangle template<> template<> void object::test<2>() { const char * wkt = "MULTIPOINT ((10 10), (10 20), (20 20))"; const char* expectedEdges = "MULTILINESTRING ((10 20, 20 20), (10 10, 10 20), (10 10, 20 20))"; const char * expectedTri = "GEOMETRYCOLLECTION (POLYGON ((10 20, 10 10, 20 20, 10 20)))"; runDelaunay(wkt, true, expectedTri); runDelaunay(wkt, false, expectedEdges); } // 3 - Test Random template<> template<> void object::test<3>() { const char* wkt = "MULTIPOINT ((50 40), (140 70), (80 100), (130 140), (30 150), (70 180), (190 110), (120 20))"; const char* expectedEdges = "MULTILINESTRING ((70 180, 190 110), (30 150, 70 180), (30 150, 50 40), (50 40, 120 20), (190 110, 120 20), (120 20, 140 70), (190 110, 140 70), (130 140, 140 70), (130 140, 190 110), (70 180, 130 140), (80 100, 130 140), (70 180, 80 100), (30 150, 80 100), (50 40, 80 100), (80 100, 120 20), (80 100, 140 70))"; const char* expectedTri = "GEOMETRYCOLLECTION (POLYGON ((30 150, 50 40, 80 100, 30 150)), POLYGON ((30 150, 80 100, 70 180, 30 150)), POLYGON ((70 180, 80 100, 130 140, 70 180)), POLYGON ((70 180, 130 140, 190 110, 70 180)), POLYGON ((190 110, 130 140, 140 70, 190 110)), POLYGON ((190 110, 140 70, 120 20, 190 110)), POLYGON ((120 20, 140 70, 80 100, 120 20)), POLYGON ((120 20, 80 100, 50 40, 120 20)), POLYGON ((80 100, 140 70, 130 140, 80 100)))"; runDelaunay(wkt, false, expectedEdges); runDelaunay(wkt, true, expectedTri); } // 4 - Test grid template<> template<> void object::test<4>() { const char * wkt = "MULTIPOINT ((10 10), (10 20), (20 20), (20 10), (20 0), (10 0), (0 0), (0 10), (0 20))"; const char* expectedEdges = "MULTILINESTRING ((10 20, 20 20), (0 20, 10 20), (0 10, 0 20), (0 0, 0 10), (0 0, 10 0), (10 0, 20 0), (20 0, 20 10), (20 10, 20 20), (10 20, 20 10), (10 10, 20 10), (10 10, 10 20), (10 10, 0 20), (10 10, 0 10), (10 0, 10 10), (0 10, 10 0), (10 10, 20 0))"; const char * expectedTri = "GEOMETRYCOLLECTION (POLYGON ((0 20, 0 10, 10 10, 0 20)), POLYGON ((0 20, 10 10, 10 20, 0 20)), POLYGON ((10 20, 10 10, 20 10, 10 20)), POLYGON ((10 20, 20 10, 20 20, 10 20)), POLYGON ((10 0, 20 0, 10 10, 10 0)), POLYGON ((10 0, 10 10, 0 10, 10 0)), POLYGON ((10 0, 0 10, 0 0, 10 0)), POLYGON ((10 10, 20 0, 20 10, 10 10)))"; runDelaunay(wkt, false, expectedEdges); runDelaunay(wkt, true, expectedTri); } // 5 - Test Circle template<> template<> void object::test<5>() { const char * wkt = "POLYGON ((42 30, 41.96 29.61, 41.85 29.23, 41.66 28.89, 41.41 28.59, 41.11 28.34, 40.77 28.15, 40.39 28.04, 40 28, 39.61 28.04, 39.23 28.15, 38.89 28.34, 38.59 28.59, 38.34 28.89, 38.15 29.23, 38.04 29.61, 38 30, 38.04 30.39, 38.15 30.77, 38.34 31.11, 38.59 31.41, 38.89 31.66, 39.23 31.85, 39.61 31.96, 40 32, 40.39 31.96, 40.77 31.85, 41.11 31.66, 41.41 31.41, 41.66 31.11, 41.85 30.77, 41.96 30.39, 42 30))"; const char* expectedEdges = "MULTILINESTRING ((41.66 31.11, 41.85 30.77), (41.41 31.41, 41.66 31.11), (41.11 31.66, 41.41 31.41), (40.77 31.85, 41.11 31.66), (40.39 31.96, 40.77 31.85), (40 32, 40.39 31.96), (39.61 31.96, 40 32), (39.23 31.85, 39.61 31.96), (38.89 31.66, 39.23 31.85), (38.59 31.41, 38.89 31.66), (38.34 31.11, 38.59 31.41), (38.15 30.77, 38.34 31.11), (38.04 30.39, 38.15 30.77), (38 30, 38.04 30.39), (38 30, 38.04 29.61), (38.04 29.61, 38.15 29.23), (38.15 29.23, 38.34 28.89), (38.34 28.89, 38.59 28.59), (38.59 28.59, 38.89 28.34), (38.89 28.34, 39.23 28.15), (39.23 28.15, 39.61 28.04), (39.61 28.04, 40 28), (40 28, 40.39 28.04), (40.39 28.04, 40.77 28.15), (40.77 28.15, 41.11 28.34), (41.11 28.34, 41.41 28.59), (41.41 28.59, 41.66 28.89), (41.66 28.89, 41.85 29.23), (41.85 29.23, 41.96 29.61), (41.96 29.61, 42 30), (41.96 30.39, 42 30), (41.85 30.77, 41.96 30.39), (41.66 31.11, 41.96 30.39), (41.41 31.41, 41.96 30.39), (41.41 28.59, 41.96 30.39), (41.41 28.59, 41.41 31.41), (38.59 28.59, 41.41 28.59), (38.59 28.59, 41.41 31.41), (38.59 28.59, 38.59 31.41), (38.59 31.41, 41.41 31.41), (38.59 31.41, 39.61 31.96), (39.61 31.96, 41.41 31.41), (39.61 31.96, 40.39 31.96), (40.39 31.96, 41.41 31.41), (40.39 31.96, 41.11 31.66), (38.04 30.39, 38.59 28.59), (38.04 30.39, 38.59 31.41), (38.04 30.39, 38.34 31.11), (38.04 29.61, 38.59 28.59), (38.04 29.61, 38.04 30.39), (39.61 28.04, 41.41 28.59), (38.59 28.59, 39.61 28.04), (38.89 28.34, 39.61 28.04), (40.39 28.04, 41.41 28.59), (39.61 28.04, 40.39 28.04), (41.96 29.61, 41.96 30.39), (41.41 28.59, 41.96 29.61), (41.66 28.89, 41.96 29.61), (40.39 28.04, 41.11 28.34), (38.04 29.61, 38.34 28.89), (38.89 31.66, 39.61 31.96))"; runDelaunay(wkt, false, expectedEdges); } // 6 - Test Polygon With Chevron Holes template<> template<> void object::test<6>() { const char * wkt = "POLYGON ((0 0, 0 200, 180 200, 180 0, 0 0), (20 180, 160 180, 160 20, 152.625 146.75, 20 180), (30 160, 150 30, 70 90, 30 160))"; const char* expectedEdges = "MULTILINESTRING ((0 200, 180 200), (0 0, 0 200), (0 0, 180 0), (180 200, 180 0), (152.625 146.75, 180 0), (152.625 146.75, 180 200), (152.625 146.75, 160 180), (160 180, 180 200), (0 200, 160 180), (20 180, 160 180), (0 200, 20 180), (20 180, 30 160), (30 160, 0 200), (0 0, 30 160), (30 160, 70 90), (0 0, 70 90), (70 90, 150 30), (150 30, 0 0), (150 30, 160 20), (0 0, 160 20), (160 20, 180 0), (152.625 146.75, 160 20), (150 30, 152.625 146.75), (70 90, 152.625 146.75), (30 160, 152.625 146.75), (30 160, 160 180))"; runDelaunay(wkt, false, expectedEdges); } // 7 - Test grid (2.5d) template<> template<> void object::test<7>() { const char * wkt = "MULTIPOINT ((10 10 1), (10 20 2), (20 20 3), (20 10 1.5), (20 0 2.5), (10 0 3.5), (0 0 0), (0 10 .5), (0 20 .25))"; const char* expectedEdges = "MULTILINESTRING ((10 20 2, 20 20 3), (0 20 .25, 10 20 2), (0 10 .5, 0 20 .25), (0 0 0, 0 10 .5), (0 0 0, 10 0 3.5), (10 0 3.5, 20 0 2.5), (20 0 2.5, 20 10 1.5), (20 10 1.5, 20 20 3), (10 20 2, 20 10 1.5), (10 10 1, 20 10 1.6), (10 10 1, 10 20 2), (10 10 1, 0 20 .25), (10 10 1, 0 10 .5), (10 0 3.5, 10 10 1), (0 10 .5, 10 0 3.5), (10 10 1, 20 0 2.5))"; const char * expectedTri = "GEOMETRYCOLLECTION (POLYGON ((0 20 .25, 0 10 .5, 10 10 1, 0 20 .25)), POLYGON ((0 20 .25, 10 10 1, 10 20 2, 0 20 .25)), POLYGON ((10 20 2, 10 10 1, 20 10 1.5, 10 20 2)), POLYGON ((10 20 2, 20 10 1.5, 20 20 3, 10 20 2)), POLYGON ((10 0 3.5, 20 0 2.5, 10 10 1, 10 0 3.5)), POLYGON ((10 0 3.5, 10 10 1, 0 10 .5, 10 0 3.5)), POLYGON ((10 0 3.5, 0 10 .5, 0 0 0, 10 0 3.5)), POLYGON ((10 10 1, 20 0 2.5, 20 10 1.5, 10 10 1)))"; runDelaunay(wkt, false, expectedEdges); runDelaunay(wkt, true, expectedTri); } // 8 - Tolerance robustness - http://trac.osgeo.org/geos/ticket/604 template<> template<> void object::test<8>() { const char * wkt = "MULTIPOINT(-118.3964065 56.0557,-118.396406 56.0475,-118.396407 56.04,-118.3968 56)"; const char* expectedEdges = "MULTILINESTRING ((-118.3964065 56.0557, -118.396406 56.0475), (-118.396407 56.04, -118.396406 56.0475), (-118.3968 56, -118.396407 56.04))"; runDelaunay(wkt, false, expectedEdges, 0.001); } // 9 - Test for DelaunayTriangulationBuilder::envelope template<> template<> void object::test<9>() { std::vector* v = new std::vector(); v->push_back( Coordinate (150,200) ); v->push_back( Coordinate (180,270) ); v->push_back( Coordinate (275,163) ); geos::geom::CoordinateArraySequence *seq = new CoordinateArraySequence(v); Envelope env = DelaunayTriangulationBuilder::envelope(*seq); ensure_equals(env.getWidth() , 125); ensure_equals(env.getHeight() , 107); } } // namespace tut geos-3.4.2/tests/unit/triangulate/quadedge/0000755000175000017500000000000012206417243020515 5ustar frankiefrankiegeos-3.4.2/tests/unit/triangulate/quadedge/QuadEdgeSubdivisionTest.cpp0000644000175000017500000000307212206417146025763 0ustar frankiefrankie // // Test Suite for geos::triangulate::quadedge::QuadEdge // // tut #include // geos #include #include #include #include #include //#include #include #include // std #include using namespace geos::triangulate::quadedge; using namespace geos::geom; using namespace geos::io; namespace tut { // // Test Group // // dummy data, not used struct test_quadedgesub_data { test_quadedgesub_data() { } }; typedef test_group group; typedef group::object object; group test_quadedgesub_group("geos::triangulate::quadedge::QuadEdgeSubdivision"); // // Test Cases // // 1 - Basic function test template<> template<> void object::test<1>() { //create subdivision centered around (0,0) QuadEdgeSubdivision sub(Envelope(-100, 100, -100, 100), .00001); //stick a point in the middle QuadEdge& e = sub.insertSite(Vertex(0, 0)); ensure(sub.isFrameEdge(e)); ensure(sub.isOnEdge(e, e.orig().getCoordinate())); ensure(sub.isVertexOfEdge(e, e.orig())); ensure(!sub.isOnEdge(e, Coordinate(10, 10))); ensure(!sub.isVertexOfEdge(e, Vertex(10, 10))); GeometryFactory geomFact; std::auto_ptr tris = sub.getTriangles(geomFact); tris.reset(); //WKTWriter wkt; //printf("%s\n", wkt.writeFormatted(tris).c_str()); } } // namespace tut geos-3.4.2/tests/unit/triangulate/quadedge/QuadEdgeTest.cpp0000644000175000017500000001120312206417146023537 0ustar frankiefrankie// // Test Suite for geos::triangulate::quadedge::QuadEdge // // tut #include // geos #include #include // std #include using namespace geos::triangulate::quadedge; namespace tut { // // Test Group // // dummy data, not used struct test_quadedge_data { test_quadedge_data() { } }; typedef test_group group; typedef group::object object; group test_quadedge_group("geos::triangulate::quadedge::QuadEdge"); // // Test Cases // // 1 - QuadEdge::connect() template<> template<> void object::test<1>() { Vertex v1(0, 0); Vertex v2(0, 1); Vertex v3(1, 0); Vertex v4(1, 1); std::auto_ptr q0; std::auto_ptr r0; std::auto_ptr s0; q0 = QuadEdge::makeEdge(v1, v2); r0 = QuadEdge::makeEdge(v3, v4); s0 = QuadEdge::connect(*q0, *r0); //verify properties ensured by connect() //the new edge connects q0->orig() and r0->dest() ensure(s0->orig().equals(q0->dest())); ensure(s0->dest().equals(r0->orig())); //q0, r0, and s0 should have the same left face ensure(&q0->lNext() == s0.get()); ensure(&s0->lNext() == r0.get()); q0->free(); r0->free(); s0->free(); } // 2 - QuadEdge::connect(), causing a loop template<> template<> void object::test<2>() { Vertex v1(0, 0); Vertex v2(0, 1); Vertex v3(1, 0); Vertex v4(1, 1); std::auto_ptr q0; std::auto_ptr r0; std::auto_ptr s0; q0 = QuadEdge::makeEdge(v1, v2); r0 = QuadEdge::makeEdge(v2, v3); s0 = QuadEdge::connect(*q0, *r0); //verify properties ensured by connect() //the new edge connects q0->orig() and r0->dest() ensure(s0->orig().equals(q0->dest())); ensure(s0->dest().equals(r0->orig())); //q0, r0, and s0 should have the same left face ensure(&q0->lNext() == s0.get()); ensure(&s0->lNext() == r0.get()); q0->free(); r0->free(); s0->free(); } // 3 - QuadEdge::swap() template<> template<> void object::test<3>() { Vertex v1(0, 0); Vertex v2(0, 1); Vertex v3(1, 0); Vertex v4(1, 1); std::auto_ptr q0; std::auto_ptr r0; std::auto_ptr s0; std::auto_ptr t0; std::auto_ptr u0; //make a quadilateral q0 = QuadEdge::makeEdge(v1, v2); r0 = QuadEdge::makeEdge(v4, v3); s0 = QuadEdge::connect(*q0, *r0); t0 = QuadEdge::connect(*r0, *q0); //printf("\n=====================\n"); //printf("r0->orig(): %f %f\n", r0->orig().getX(), r0->orig().getY()); //printf("r0->dest(): %f %f\n", r0->dest().getX(), r0->dest().getY()); //printf("s0->orig(): %f %f\n", s0->orig().getX(), s0->orig().getY()); //printf("s0->dest(): %f %f\n", s0->dest().getX(), s0->dest().getY()); //add an interior edge to make 2 triangles u0 = QuadEdge::connect(*t0, *r0); //printf("\n=====================\n"); //printf("q0->orig(): %f %f\n", q0->orig().getX(), q0->orig().getY()); //printf("q0->dest(): %f %f\n", q0->dest().getX(), q0->dest().getY()); //printf("r0->orig(): %f %f\n", r0->orig().getX(), r0->orig().getY()); //printf("r0->dest(): %f %f\n", r0->dest().getX(), r0->dest().getY()); //printf("s0->orig(): %f %f\n", s0->orig().getX(), s0->orig().getY()); //printf("s0->dest(): %f %f\n", s0->dest().getX(), s0->dest().getY()); //printf("t0->orig(): %f %f\n", t0->orig().getX(), t0->orig().getY()); //printf("t0->dest(): %f %f\n", t0->dest().getX(), t0->dest().getY()); //printf("u0->orig(): %f %f\n", u0->orig().getX(), u0->orig().getY()); //printf("u0->dest(): %f %f\n", u0->dest().getX(), u0->dest().getY()); ensure(t0->dest().equals(u0->orig())); ensure(u0->dest().equals(r0->orig())); //now swap the interior edge QuadEdge::swap(*u0); //printf("\n=====================\n"); //printf("q0->orig(): %f %f\n", q0->orig().getX(), q0->orig().getY()); //printf("q0->dest(): %f %f\n", q0->dest().getX(), q0->dest().getY()); //printf("r0->orig(): %f %f\n", r0->orig().getX(), r0->orig().getY()); //printf("r0->dest(): %f %f\n", r0->dest().getX(), r0->dest().getY()); //printf("s0->orig(): %f %f\n", s0->orig().getX(), s0->orig().getY()); //printf("s0->dest(): %f %f\n", s0->dest().getX(), s0->dest().getY()); //printf("t0->orig(): %f %f\n", t0->orig().getX(), t0->orig().getY()); //printf("t0->dest(): %f %f\n", t0->dest().getX(), t0->dest().getY()); //printf("u0->orig(): %f %f\n", u0->orig().getX(), u0->orig().getY()); //printf("u0->dest(): %f %f\n", u0->dest().getX(), u0->dest().getY()); ensure(r0->dest().equals(u0->dest())); ensure(u0->orig().equals(q0->dest())); q0->free(); r0->free(); s0->free(); t0->free(); u0->free(); } } // namespace tut geos-3.4.2/tests/unit/tut/0000755000175000017500000000000012206417243015233 5ustar frankiefrankiegeos-3.4.2/tests/unit/tut/tut.hpp0000644000175000017500000002762312206417146016574 0ustar frankiefrankie#ifndef TUT_H_GUARD #define TUT_H_GUARD #include #include #include #include #include #include #include #include #include #if defined(linux) #define TUT_USE_POSIX #endif #include "tut_exception.hpp" #include "tut_result.hpp" #include "tut_posix.hpp" #include "tut_assert.hpp" #include "tut_runner.hpp" #if defined(TUT_USE_SEH) #include #include #endif /** * Template Unit Tests Framework for C++. * http://tut.dozen.ru * * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com */ namespace tut { /** * Test object. Contains data test run upon and default test method * implementation. Inherited from Data to allow tests to * access test data as members. */ template class test_object : public Data, public test_object_posix { public: /** * Default constructor */ test_object() { } void set_test_name(const std::string& current_test_name) { current_test_name_ = current_test_name; } const std::string& get_test_name() const { return current_test_name_; } void set_test_id(int current_test_id) { current_test_id_ = current_test_id; } int get_test_id() const { return current_test_id_; } /** * Default do-nothing test. */ template void test() { called_method_was_a_dummy_test_ = true; } /** * The flag is set to true by default (dummy) test. * Used to detect usused test numbers and avoid unnecessary * test object creation which may be time-consuming depending * on operations described in Data::Data() and Data::~Data(). * TODO: replace with throwing special exception from default test. */ bool called_method_was_a_dummy_test_; private: int current_test_id_; std::string current_test_name_; }; /** * Walks through test tree and stores address of each * test method in group. Instantiation stops at 0. */ template struct tests_registerer { static void reg(Group& group) { group.reg(n, &Test::template test); tests_registerer::reg(group); } }; template struct tests_registerer { static void reg(Group&) { } }; /** * Test group; used to recreate test object instance for * each new test since we have to have reinitialized * Data base class. */ template class test_group : public group_base, public test_group_posix { const char* name_; typedef void (test_object::*testmethod)(); typedef std::map tests; typedef typename tests::iterator tests_iterator; typedef typename tests::const_iterator tests_const_iterator; typedef typename tests::const_reverse_iterator tests_const_reverse_iterator; typedef typename tests::size_type size_type; tests tests_; tests_iterator current_test_; enum seh_result { SEH_OK, SEH_CTOR, SEH_TEST, SEH_DUMMY }; /** * Exception-in-destructor-safe smart-pointer class. */ template class safe_holder { T* p_; bool permit_throw_in_dtor; safe_holder(const safe_holder&); safe_holder& operator=(const safe_holder&); public: safe_holder() : p_(0), permit_throw_in_dtor(false) { } ~safe_holder() { release(); } T* operator->() const { return p_; } T* get() const { return p_; } /** * Tell ptr it can throw from destructor. Right way is to * use std::uncaught_exception(), but some compilers lack * correct implementation of the function. */ void permit_throw() { permit_throw_in_dtor = true; } /** * Specially treats exceptions in test object destructor; * if test itself failed, exceptions in destructor * are ignored; if test was successful and destructor failed, * warning exception throwed. */ void release() { try { if (delete_obj() == false) { throw warning("destructor of test object raised" " an SEH exception"); } } catch (const std::exception& ex) { if (permit_throw_in_dtor) { std::string msg = "destructor of test object raised" " exception: "; msg += ex.what(); throw warning(msg); } } catch( ... ) { if (permit_throw_in_dtor) { throw warning("destructor of test object raised an" " exception"); } } } /** * Re-init holder to get brand new object. */ void reset() { release(); permit_throw_in_dtor = false; p_ = new T(); } bool delete_obj() { #if defined(TUT_USE_SEH) __try { #endif T* p = p_; p_ = 0; delete p; #if defined(TUT_USE_SEH) } __except(handle_seh_(::GetExceptionCode())) { if (permit_throw_in_dtor) { return false; } } #endif return true; } }; public: typedef test_object object; /** * Creates and registers test group with specified name. */ test_group(const char* name) : name_(name) { // register itself runner.get().register_group(name_,this); // register all tests tests_registerer::reg(*this); } /** * This constructor is used in self-test run only. */ test_group(const char* name, test_runner& another_runner) : name_(name) { // register itself another_runner.register_group(name_, this); // register all tests tests_registerer, test_group, MaxTestsInGroup>::reg(*this); }; /** * Registers test method under given number. */ void reg(int n, testmethod tm) { tests_[n] = tm; } /** * Reset test position before first test. */ void rewind() { current_test_ = tests_.begin(); } /** * Runs next test. */ bool run_next(test_result &tr) { if (current_test_ == tests_.end()) { return false; } // find next user-specialized test safe_holder obj; while (current_test_ != tests_.end()) { tests_iterator current_test = current_test_++; if(run_test_(current_test, obj, tr) && tr.result != test_result::dummy) { return true; } } return false; } /** * Runs one test by position. */ bool run_test(int n, test_result &tr) { if (tests_.rbegin() == tests_.rend() || tests_.rbegin()->first < n) { return false; } // withing scope; check if given test exists tests_iterator ti = tests_.find(n); if (ti == tests_.end()) { return false; } safe_holder obj; return run_test_(ti, obj, tr); } /** * VC allows only one exception handling type per function, * so I have to split the method. */ bool run_test_(const tests_iterator& ti, safe_holder& obj, test_result &tr) { std::string current_test_name; tr = test_result(name_, ti->first, current_test_name, test_result::ok); try { switch (run_test_seh_(ti->second, obj, current_test_name, ti->first)) { case SEH_CTOR: throw bad_ctor("seh"); break; case SEH_TEST: throw seh("seh"); break; case SEH_DUMMY: tr.result = test_result::dummy; break; case SEH_OK: // ok break; } } catch (const rethrown& ex) { tr = ex.tr; tr.result = test_result::rethrown; } catch (const tut_error& ex) { tr.result = ex.result(); tr.exception_typeid = typeid(ex).name(); tr.message = ex.what(); } catch (const std::exception& ex) { tr.result = test_result::ex; tr.exception_typeid = typeid(ex).name(); tr.message = ex.what(); } catch (...) { // test failed with unknown exception tr.result = test_result::ex; } if (obj.get()) { tr.name = obj->get_test_name(); // try to report to parent, if exists send_result_(obj.get(), tr); } else { tr.name = current_test_name; } return true; } /** * Runs one under SEH if platform supports it. */ seh_result run_test_seh_(testmethod tm, safe_holder& obj, std::string& current_test_name, int current_test_id) { #if defined(TUT_USE_SEH) __try { #endif if (obj.get() == 0) { reset_holder_(obj); } obj->called_method_was_a_dummy_test_ = false; #if defined(TUT_USE_SEH) __try { #endif obj.get()->set_test_id(current_test_id); (obj.get()->*tm)(); #if defined(TUT_USE_SEH) } __except(handle_seh_(::GetExceptionCode())) { current_test_name = obj->get_test_name(); return SEH_TEST; } #endif if (obj->called_method_was_a_dummy_test_) { // do not call obj.release(); reuse object return SEH_DUMMY; } current_test_name = obj->get_test_name(); obj.permit_throw(); obj.release(); #if defined(TUT_USE_SEH) } __except(handle_seh_(::GetExceptionCode())) { return SEH_CTOR; } #endif return SEH_OK; } void reset_holder_(safe_holder& obj) { try { obj.reset(); } catch (const std::exception& ex) { throw bad_ctor(ex.what()); } catch (...) { throw bad_ctor("test constructor has generated an exception;" " group execution is terminated"); } } }; #if defined(TUT_USE_SEH) /** * Decides should we execute handler or ignore SE. */ inline int handle_seh_(DWORD excode) { switch(excode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_BREAKPOINT: case EXCEPTION_SINGLE_STEP: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_FLT_DENORMAL_OPERAND: case EXCEPTION_FLT_DIVIDE_BY_ZERO: case EXCEPTION_FLT_INEXACT_RESULT: case EXCEPTION_FLT_INVALID_OPERATION: case EXCEPTION_FLT_OVERFLOW: case EXCEPTION_FLT_STACK_CHECK: case EXCEPTION_FLT_UNDERFLOW: case EXCEPTION_INT_DIVIDE_BY_ZERO: case EXCEPTION_INT_OVERFLOW: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_NONCONTINUABLE_EXCEPTION: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_INVALID_DISPOSITION: case EXCEPTION_GUARD_PAGE: case EXCEPTION_INVALID_HANDLE: return EXCEPTION_EXECUTE_HANDLER; }; return EXCEPTION_CONTINUE_SEARCH; } #endif } #endif geos-3.4.2/tests/unit/tut/tut_assert.hpp0000644000175000017500000000777112206417146020157 0ustar frankiefrankie#ifndef TUT_ASSERT_H_GUARD #define TUT_ASSERT_H_GUARD #include "tut_exception.hpp" #include #include #if defined(TUT_USE_POSIX) #include #include #endif namespace tut { namespace detail { template std::ostream &msg_prefix(std::ostream &str, const M &msg) { std::stringstream ss; ss << msg; if(!ss.str().empty()) { str << ss.rdbuf() << ": "; } return str; } } namespace { /** * Tests provided condition. * Throws if false. */ static inline void ensure(bool cond) { if (!cond) { // TODO: default ctor? throw failure(""); } } /** * Tests provided condition. * Throws if true. */ static inline void ensure_not(bool cond) { ensure(!cond); } /** * Tests provided condition. * Throws if false. */ template void ensure(const M& msg, bool cond) { if (!cond) { throw failure(msg); } } /** * Tests provided condition. * Throws if true. */ template void ensure_not(const M& msg, bool cond) { ensure(msg, !cond); } /** * Tests two objects for being equal. * Throws if false. * * NB: both T and Q must have operator << defined somewhere, or * client code will not compile at all! */ template void ensure_equals(const M& msg, const LHS& actual, const RHS& expected) { if (expected != actual) { std::stringstream ss; detail::msg_prefix(ss,msg) << "expected '" << expected << "' actual '" << actual << '\''; throw failure(ss.str()); } } template void ensure_equals(const LHS& actual, const RHS& expected) { ensure_equals("Values are not equal", actual, expected); } template void ensure_equals(const M& msg, const double& actual, const double& expected, const double& epsilon = std::numeric_limits::epsilon()) { const double diff = actual - expected; if ( !((diff <= epsilon) && (diff >= -epsilon )) ) { std::stringstream ss; detail::msg_prefix(ss,msg) << std::scientific << std::showpoint << std::setprecision(16) << "expected " << expected << " actual " << actual << " with precision " << epsilon; throw failure(ss.str()); } } /** * Tests two objects for being at most in given distance one from another. * Borders are excluded. * Throws if false. * * NB: T must have operator << defined somewhere, or * client code will not compile at all! Also, T shall have * operators + and -, and be comparable. * * TODO: domains are wrong, T - T might not yield T, but Q */ template void ensure_distance(const M& msg, const T& actual, const T& expected, const T& distance) { if (expected-distance >= actual || expected+distance <= actual) { std::stringstream ss; detail::msg_prefix(ss,msg) << " expected (" << expected-distance << " - " << expected+distance << ") actual '" << actual << '\''; throw failure(ss.str()); } } template void ensure_distance(const T& actual, const T& expected, const T& distance) { ensure_distance<>("Distance is wrong", actual, expected, distance); } template void ensure_errno(const M& msg, bool cond) { if(!cond) { #if defined(TUT_USE_POSIX) char e[512]; std::stringstream ss; detail::msg_prefix(ss,msg) << strerror_r(errno, e, sizeof(e)); throw failure(ss.str()); #else throw failure(msg); #endif } } /** * Unconditionally fails with message. */ static inline void fail(const char* msg = "") { throw failure(msg); } template void fail(const M& msg) { throw failure(msg); } } // end of namespace } #endif geos-3.4.2/tests/unit/tut/tut_console_reporter.hpp0000644000175000017500000001350512206417146022232 0ustar frankiefrankie#ifndef TUT_CONSOLE_REPORTER #define TUT_CONSOLE_REPORTER #include #include /** * Template Unit Tests Framework for C++. * http://tut.dozen.ru * * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com */ namespace { std::ostream& operator<<(std::ostream& os, const tut::test_result& tr) { switch(tr.result) { case tut::test_result::ok: os << '.'; break; case tut::test_result::fail: os << '[' << tr.test << "=F]"; break; case tut::test_result::ex_ctor: os << '[' << tr.test << "=C]"; break; case tut::test_result::ex: os << '[' << tr.test << "=X]"; break; case tut::test_result::warn: os << '[' << tr.test << "=W]"; break; case tut::test_result::term: os << '[' << tr.test << "=T]"; break; case tut::test_result::rethrown: os << '[' << tr.test << "=P]"; break; case tut::test_result::dummy: assert(!"Should never be called"); } return os; } } // end of namespace namespace tut { /** * Default TUT callback handler. */ class console_reporter : public tut::callback { std::string current_group; typedef std::vector not_passed_list; not_passed_list not_passed; std::ostream& os; public: int ok_count; int exceptions_count; int failures_count; int terminations_count; int warnings_count; console_reporter() : os(std::cout) { init(); } console_reporter(std::ostream& out) : os(out) { init(); } void run_started() { init(); } void test_completed(const tut::test_result& tr) { if (tr.group != current_group) { os << std::endl << tr.group << ": " << std::flush; current_group = tr.group; } os << tr << std::flush; // update global statistics switch (tr.result) { case test_result::ok: ok_count++; break; case test_result::fail: case test_result::rethrown: failures_count++; break; case test_result::ex: case test_result::ex_ctor: exceptions_count++; break; case test_result::warn: warnings_count++; break; case test_result::term: terminations_count++; break; case tut::test_result::dummy: assert(!"Should never be called"); } // switch if (tr.result != tut::test_result::ok) { not_passed.push_back(tr); } } void run_completed() { os << std::endl; if (not_passed.size() > 0) { not_passed_list::const_iterator i = not_passed.begin(); while (i != not_passed.end()) { tut::test_result tr = *i; os << std::endl; os << "---> " << "group: " << tr.group << ", test: test<" << tr.test << ">" << (!tr.name.empty() ? (std::string(" : ") + tr.name) : std::string()) << std::endl; #if defined(TUT_USE_POSIX) if(tr.pid != getpid()) { os << " child pid: " << tr.pid << std::endl; } #endif os << " problem: "; switch(tr.result) { case test_result::rethrown: os << "assertion failed in child" << std::endl; break; case test_result::fail: os << "assertion failed" << std::endl; break; case test_result::ex: case test_result::ex_ctor: os << "unexpected exception" << std::endl; if( tr.exception_typeid != "" ) { os << " exception typeid: " << tr.exception_typeid << std::endl; } break; case test_result::term: os << "would be terminated" << std::endl; break; case test_result::warn: os << "test passed, but cleanup code (destructor) raised" " an exception" << std::endl; break; default: break; } if (!tr.message.empty()) { if (tr.result == test_result::fail) { os << " failed assertion: \"" << tr.message << "\"" << std::endl; } else { os << " message: \"" << tr.message << "\"" << std::endl; } } ++i; } } os << std::endl; os << "tests summary:"; if (terminations_count > 0) { os << " terminations:" << terminations_count; } if (exceptions_count > 0) { os << " exceptions:" << exceptions_count; } if (failures_count > 0) { os << " failures:" << failures_count; } if (warnings_count > 0) { os << " warnings:" << warnings_count; } os << " ok:" << ok_count; os << std::endl; } bool all_ok() const { return not_passed.empty(); } private: void init() { ok_count = 0; exceptions_count = 0; failures_count = 0; terminations_count = 0; warnings_count = 0; not_passed.clear(); } }; } #endif geos-3.4.2/tests/unit/tut/tut_exception.hpp0000644000175000017500000000460312206417146020643 0ustar frankiefrankie#ifndef TUT_EXCEPTION_H_GUARD #define TUT_EXCEPTION_H_GUARD #include #include "tut_result.hpp" namespace tut { /** * The base for all TUT exceptions. */ struct tut_error : public std::exception { tut_error(const std::string& msg) : err_msg(msg) { } virtual test_result::result_type result() const { return test_result::ex; } const char* what() const throw() { return err_msg.c_str(); } ~tut_error() throw() { } private: tut_error& operator=(const tut_error&); std::string err_msg; }; /** * Group not found exception. */ struct no_such_group : public tut_error { no_such_group(const std::string& grp) : tut_error(grp) { } ~no_such_group() throw() { } }; /** * Internal exception to be throwed when * test constructor has failed. */ struct bad_ctor : public tut_error { bad_ctor(const std::string& msg) : tut_error(msg) { } test_result::result_type result() const { return test_result::ex_ctor; } ~bad_ctor() throw() { } }; /** * Exception to be throwed when ensure() fails or fail() called. */ struct failure : public tut_error { failure(const std::string& msg) : tut_error(msg) { } test_result::result_type result() const { return test_result::fail; } ~failure() throw() { } }; /** * Exception to be throwed when test desctructor throwed an exception. */ struct warning : public tut_error { warning(const std::string& msg) : tut_error(msg) { } test_result::result_type result() const { return test_result::warn; } ~warning() throw() { } }; /** * Exception to be throwed when test issued SEH (Win32) */ struct seh : public tut_error { seh(const std::string& msg) : tut_error(msg) { } virtual test_result::result_type result() const { return test_result::term; } ~seh() throw() { } }; /** * Exception to be throwed when child processes fail. */ struct rethrown : public failure { explicit rethrown(const test_result &result) : failure(result.message), tr(result) { } virtual test_result::result_type result() const { return test_result::rethrown; } ~rethrown() throw() { } const test_result tr; }; } #endif geos-3.4.2/tests/unit/tut/tut_posix.hpp0000644000175000017500000002601312206417146020006 0ustar frankiefrankie#ifndef TUT_FORK_H_GUARD #define TUT_FORK_H_GUARD #if defined(TUT_USE_POSIX) #include #include #include #include #include #include #include #include #include #include #include #include "tut_result.hpp" #include "tut_assert.hpp" #include "tut_runner.hpp" namespace tut { template class test_group; template class test_object; class test_group_posix { private: template friend class test_group; template void send_result_(const T *obj, const test_result &tr) { if(obj->get_pipe_() == -1) { return; } if(tr.result != test_result::ok) { std::stringstream ss; ss << int(tr.result) << "\n" << tr.group << "\n" << tr.test << "\n" << tr.name << "\n" << tr.exception_typeid << "\n"; std::copy( tr.message.begin(), tr.message.end(), std::ostreambuf_iterator(ss.rdbuf()) ); int size = ss.str().length(); int w = write(obj->get_pipe_(), ss.str().c_str(), size); ensure_errno("write() failed", w == size); } } }; template struct tut_posix { pid_t fork() { test_object *self = dynamic_cast< tut::test_object* >(this); ensure("trying to call 'tut_fork' in ctor of test object", self != NULL); return self->fork_(); } pid_t waitpid(pid_t pid, int *status, int flags = 0) { test_object *self = dynamic_cast< tut::test_object* >(this); ensure("trying to call 'tut_waitpid' in ctor of test object", self != NULL); return self->waitpid_(pid, status, flags); } void ensure_child_exit(pid_t pid, int exit_status = 0) { test_object *self = dynamic_cast< tut::test_object* >(this); ensure("trying to call 'ensure_child_exit' in ctor of test object", self != NULL); int status; self->waitpid_(pid, &status); self->ensure_child_exit_(status, exit_status); } void ensure_child_signal(pid_t pid, int signal = SIGTERM) { test_object *self = dynamic_cast< tut::test_object* >(this); ensure("trying to call 'ensure_child_signal' in ctor of test object", self != NULL); int status; self->waitpid_(pid, &status); self->ensure_child_signal_(status, signal); } std::set get_pids() const { using namespace std; const test_object *self = dynamic_cast< const tut::test_object* >(this); ensure("trying to call 'get_pids' in ctor of test object", self != NULL); return self->get_pids_(); } virtual ~tut_posix() { } }; class test_object_posix { public: typedef std::map pid_map; /** * Default constructor */ test_object_posix() : pipe_(-1) { } virtual ~test_object_posix() { // we have forked if(pipe_ != -1) { // in child, force exit std::exit(0); } if(!pids_.empty()) { std::stringstream ss; // in parent, reap children for(std::map::iterator i = pids_.begin(); i != pids_.end(); ++i) { try { kill_child_(i->first); } catch(const rethrown &ex) { ss << std::endl << "child " << ex.tr.pid << " has thrown an exception: " << ex.what(); } catch(const failure &ex) { ss << std::endl << ex.what(); } } if(!ss.str().empty()) { fail(ss.str().c_str()); } } } private: template friend class tut_posix; friend class test_group_posix; int get_pipe_() const { return pipe_; } pid_t fork_() { // create pipe int fds[2]; ensure_errno("pipe() failed", ::pipe(fds) == 0); pid_t pid = ::fork(); ensure_errno("fork() failed", pid >= 0); if(pid != 0) { // in parent, register pid ensure("duplicated child", pids_.insert( std::make_pair(pid, fds[0]) ).second); // close writing side close(fds[1]); } else { // in child, shutdown reporter tut::runner.get().clear_callbacks(); // close reading side close(fds[0]); pipe_ = fds[1]; } return pid; } void kill_child_(pid_t pid) { int status; if(waitpid_(pid, &status, WNOHANG) == pid) { ensure_child_exit_(status, 0); return; } if(::kill(pid, SIGTERM) != 0) { if(errno == ESRCH) { // no such process return; } else { // cannot kill, we are in trouble std::stringstream ss; char e[1024]; ss << "child " << pid << " could not be killed with SIGTERM, " << strerror_r(errno, e, sizeof(e)) << std::endl; fail(ss.str()); } } if(waitpid_(pid, &status, WNOHANG) == pid) { // child killed, check signal ensure_child_signal_(status, SIGTERM); ensure_equals("child process exists after SIGTERM", ::kill(pid, 0), -1); return; } // child seems to be still exiting, give it some time sleep(2); if(waitpid_(pid, &status, WNOHANG) != pid) { // child is still running, kill it if(::kill(pid, SIGKILL) != 0) { if(errno == ESRCH) { // no such process return; } else { std::stringstream ss; char e[1024]; ss << "child " << pid << " could not be killed with SIGKILL, " << strerror_r(errno, e, sizeof(e)) << std::endl; fail(ss.str()); } } ensure_equals("wait after SIGKILL", waitpid_(pid, &status), pid); ensure_child_signal_(status, SIGKILL); ensure_equals("child process exists after SIGKILL", ::kill(pid, 0), -1); std::stringstream ss; ss << "child " << pid << " had to be killed with SIGKILL"; fail(ss.str()); } } test_result receive_result_(std::istream &ss, pid_t pid) { test_result tr; int type; ss >> type; tr.result = test_result::result_type(type); ss.ignore(1024, '\n'); std::getline(ss, tr.group); ss >> tr.test; ss.ignore(1024, '\n'); std::getline(ss, tr.name); std::getline(ss, tr.exception_typeid); std::copy( std::istreambuf_iterator(ss.rdbuf()), std::istreambuf_iterator(), std::back_inserter(tr.message) ); tr.pid = pid; return tr; } struct fdclose { fdclose(int fd): fd_(fd) { } ~fdclose() { close(fd_); } private: int fd_; }; pid_t waitpid_(pid_t pid, int *status, int flags = 0) { ensure("trying to wait for unknown pid", pids_.count(pid) > 0); pid_t p = ::waitpid(pid, status, flags); if( (flags & WNOHANG) && (p != pid) ) { return p; } // read child result from pipe fd_set fdset; timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fdset); int pipe = pids_[pid]; fdclose guard(pipe); FD_SET(pipe, &fdset); int result = select(pipe+1, &fdset, NULL, NULL, &tv); ensure_errno("sanity check on select() failed", result >= 0); if(result > 0) { ensure("sanity check on FD_ISSET() failed", FD_ISSET(pipe, &fdset) ); std::stringstream ss; //TODO: max failure length char buffer[1024]; int r = read(pipe, buffer, sizeof(buffer)); ensure_errno("sanity check on read() failed", r >= 0); if(r > 0) { ss.write(buffer, r); throw rethrown( receive_result_(ss, pid) ); } } return pid; } void ensure_child_exit_(int status, int exit_status) { if(WIFSIGNALED(status)) { std::stringstream ss; ss << "child killed by signal " << WTERMSIG(status) << ": expected exit with code " << exit_status; throw failure(ss.str().c_str()); } if(WIFEXITED(status)) { if(WEXITSTATUS(status) != exit_status) { std::stringstream ss; ss << "child exited, expected '" << exit_status << "' actual '" << WEXITSTATUS(status) << '\''; throw failure(ss.str().c_str()); } } if(WIFSTOPPED(status)) { std::stringstream ss; ss << "child stopped by signal " << WTERMSIG(status) << ": expected exit with code " << exit_status; throw failure(ss.str().c_str()); } } void ensure_child_signal_(int status, int signal) { if(WIFSIGNALED(status)) { if(WTERMSIG(status) != signal) { std::stringstream ss; ss << "child killed by signal, expected '" << signal << "' actual '" << WTERMSIG(status) << '\''; throw failure(ss.str().c_str()); } } if(WIFEXITED(status)) { std::stringstream ss; ss << "child exited with code " << WEXITSTATUS(status) << ": expected signal " << signal; throw failure(ss.str().c_str()); } if(WIFSTOPPED(status)) { std::stringstream ss; ss << "child stopped by signal " << WTERMSIG(status) << ": expected kill by signal " << signal; throw failure(ss.str().c_str()); } } std::set get_pids_() const { using namespace std; set pids; for(pid_map::const_iterator i = pids_.begin(); i != pids_.end(); ++i) { pids.insert( i->first ); } return pids; } pid_map pids_; int pipe_; }; } // namespace tut #else namespace tut { struct test_object_posix { }; struct test_group_posix { template void send_result_(const T*, const test_result &) { } }; } // namespace tut #endif #endif geos-3.4.2/tests/unit/tut/tut_reporter.hpp0000644000175000017500000000022112206417146020477 0ustar frankiefrankie#ifndef TUT_REPORTER #define TUT_REPORTER #include namespace tut { typedef console_reporter reporter; } #endif geos-3.4.2/tests/unit/tut/tut_restartable.hpp0000644000175000017500000002146412206417146021161 0ustar frankiefrankie#ifndef TUT_RESTARTABLE_H_GUARD #define TUT_RESTARTABLE_H_GUARD #include #include #include #include #include /** * Optional restartable wrapper for test_runner. * * Allows to restart test runs finished due to abnormal * test application termination (such as segmentation * fault or math error). * * @author Vladimir Dyuzhev, Vladimir.Dyuzhev@gmail.com */ namespace tut { namespace util { /** * Escapes non-alphabetical characters in string. */ std::string escape(const std::string& orig) { std::string rc; std::string::const_iterator i,e; i = orig.begin(); e = orig.end(); while (i != e) { if ((*i >= 'a' && *i <= 'z') || (*i >= 'A' && *i <= 'Z') || (*i >= '0' && *i <= '9') ) { rc += *i; } else { rc += '\\'; rc += ('a'+(((unsigned int)*i) >> 4)); rc += ('a'+(((unsigned int)*i) & 0xF)); } ++i; } return rc; } /** * Un-escapes string. */ std::string unescape(const std::string& orig) { std::string rc; std::string::const_iterator i,e; i = orig.begin(); e = orig.end(); while (i != e) { if (*i != '\\') { rc += *i; } else { ++i; if (i == e) { throw std::invalid_argument("unexpected end of string"); } unsigned int c1 = *i; ++i; if (i == e) { throw std::invalid_argument("unexpected end of string"); } unsigned int c2 = *i; rc += (((c1 - 'a') << 4) + (c2 - 'a')); } ++i; } return rc; } /** * Serialize test_result avoiding interfering with operator <<. */ void serialize(std::ostream& os, const tut::test_result& tr) { os << escape(tr.group) << std::endl; os << tr.test << ' '; switch(tr.result) { case test_result::ok: os << 0; break; case test_result::fail: os << 1; break; case test_result::ex: os << 2; break; case test_result::warn: os << 3; break; case test_result::term: os << 4; break; case test_result::rethrown: os << 5; break; case test_result::ex_ctor: os << 6; break; case test_result::dummy: assert(!"Should never be called"); default: throw std::logic_error("operator << : bad result_type"); } os << ' ' << escape(tr.message) << std::endl; } /** * deserialization for test_result */ bool deserialize(std::istream& is, tut::test_result& tr) { std::getline(is,tr.group); if (is.eof()) { return false; } tr.group = unescape(tr.group); tr.test = -1; is >> tr.test; if (tr.test < 0) { throw std::logic_error("operator >> : bad test number"); } int n = -1; is >> n; switch(n) { case 0: tr.result = test_result::ok; break; case 1: tr.result = test_result::fail; break; case 2: tr.result = test_result::ex; break; case 3: tr.result = test_result::warn; break; case 4: tr.result = test_result::term; break; case 5: tr.result = test_result::rethrown; break; case 6: tr.result = test_result::ex_ctor; break; default: throw std::logic_error("operator >> : bad result_type"); } is.ignore(1); // space std::getline(is,tr.message); tr.message = unescape(tr.message); if (!is.good()) { throw std::logic_error("malformed test result"); } return true; } }; /** * Restartable test runner wrapper. */ class restartable_wrapper { test_runner& runner_; callbacks callbacks_; std::string dir_; std::string log_; // log file: last test being executed std::string jrn_; // journal file: results of all executed tests public: /** * Default constructor. * @param dir Directory where to search/put log and journal files */ restartable_wrapper(const std::string& dir = ".") : runner_(runner.get()), dir_(dir) { // dozen: it works, but it would be better to use system path separator jrn_ = dir_ + '/' + "journal.tut"; log_ = dir_ + '/' + "log.tut"; } /** * Stores another group for getting by name. */ void register_group(const std::string& name, group_base* gr) { runner_.register_group(name,gr); } /** * Stores callback object. */ void set_callback(callback* cb) { callbacks_.clear(); callbacks_.insert(cb); } void insert_callback(callback* cb) { callbacks_.insert(cb); } void erase_callback(callback* cb) { callbacks_.erase(cb); } void set_callbacks(const callbacks& cb) { callbacks_ = cb; } const callbacks& get_callbacks() const { return runner_.get_callbacks(); } /** * Returns list of known test groups. */ groupnames list_groups() const { return runner_.list_groups(); } /** * Runs all tests in all groups. */ void run_tests() const { // where last run was failed std::string fail_group; int fail_test; read_log_(fail_group,fail_test); bool fail_group_reached = (fail_group == ""); // iterate over groups tut::groupnames gn = list_groups(); tut::groupnames::const_iterator gni,gne; gni = gn.begin(); gne = gn.end(); while (gni != gne) { // skip all groups before one that failed if (!fail_group_reached) { if (*gni != fail_group) { ++gni; continue; } fail_group_reached = true; } // first or restarted run int test = (*gni == fail_group && fail_test >= 0) ? fail_test + 1 : 1; while(true) { // last executed test pos register_execution_(*gni,test); tut::test_result tr; if( !runner_.run_test(*gni,test, tr) || tr.result == test_result::dummy ) { break; } register_test_(tr); ++test; } ++gni; } // show final results to user invoke_callback_(); // truncate files as mark of successful finish truncate_(); } private: /** * Shows results from journal file. */ void invoke_callback_() const { runner_.set_callbacks(callbacks_); runner_.cb_run_started_(); std::string current_group; std::ifstream ijournal(jrn_.c_str()); while (ijournal.good()) { tut::test_result tr; if( !util::deserialize(ijournal,tr) ) { break; } runner_.cb_test_completed_(tr); } runner_.cb_run_completed_(); } /** * Register test into journal. */ void register_test_(const test_result& tr) const { std::ofstream ojournal(jrn_.c_str(), std::ios::app); util::serialize(ojournal, tr); ojournal << std::flush; if (!ojournal.good()) { throw std::runtime_error("unable to register test result in file " + jrn_); } } /** * Mark the fact test going to be executed */ void register_execution_(const std::string& grp, int test) const { // last executed test pos std::ofstream olog(log_.c_str()); olog << util::escape(grp) << std::endl << test << std::endl << std::flush; if (!olog.good()) { throw std::runtime_error("unable to register execution in file " + log_); } } /** * Truncate tests. */ void truncate_() const { std::ofstream olog(log_.c_str()); std::ofstream ojournal(jrn_.c_str()); } /** * Read log file */ void read_log_(std::string& fail_group, int& fail_test) const { // read failure point, if any std::ifstream ilog(log_.c_str()); std::getline(ilog,fail_group); fail_group = util::unescape(fail_group); ilog >> fail_test; if (!ilog.good()) { fail_group = ""; fail_test = -1; truncate_(); } else { // test was terminated... tut::test_result tr(fail_group, fail_test, "", tut::test_result::term); register_test_(tr); } } }; } #endif geos-3.4.2/tests/unit/tut/tut_result.hpp0000644000175000017500000000454312206417146020166 0ustar frankiefrankie#ifndef TUT_RESULT_H_GUARD #define TUT_RESULT_H_GUARD #include namespace tut { #if defined(TUT_USE_POSIX) struct test_result_posix { test_result_posix() : pid(getpid()) { } pid_t pid; }; #else struct test_result_posix { }; #endif /** * Return type of runned test/test group. * * For test: contains result of test and, possible, message * for failure or exception. */ struct test_result : public test_result_posix { /** * Test group name. */ std::string group; /** * Test number in group. */ int test; /** * Test name (optional) */ std::string name; /** * ok - test finished successfully * fail - test failed with ensure() or fail() methods * ex - test throwed an exceptions * warn - test finished successfully, but test destructor throwed * term - test forced test application to terminate abnormally */ enum result_type { ok, fail, ex, warn, term, ex_ctor, rethrown, dummy }; result_type result; /** * Exception message for failed test. */ std::string message; std::string exception_typeid; /** * Default constructor. */ test_result() : test(0), result(ok) { } /** * Constructor. */ test_result(const std::string& grp, int pos, const std::string& test_name, result_type res) : group(grp), test(pos), name(test_name), result(res) { } /** * Constructor with exception. */ test_result(const std::string& grp,int pos, const std::string& test_name, result_type res, const std::exception& ex) : group(grp), test(pos), name(test_name), result(res), message(ex.what()), exception_typeid(typeid(ex).name()) { } /** Constructor with typeid. */ test_result(const std::string& grp,int pos, const std::string& test_name, result_type res, const std::string& ex_typeid, const std::string& msg) : group(grp), test(pos), name(test_name), result(res), message(msg), exception_typeid(ex_typeid) { } }; } #endif geos-3.4.2/tests/unit/tut/tut_runner.hpp0000644000175000017500000001607612206417146020165 0ustar frankiefrankie#ifndef TUT_RUNNER_H_GUARD #define TUT_RUNNER_H_GUARD #include #include #include #include "tut_exception.hpp" namespace tut { /** * Interface. * Test group operations. */ struct group_base { virtual ~group_base() { } // execute tests iteratively virtual void rewind() = 0; virtual bool run_next(test_result &) = 0; // execute one test virtual bool run_test(int n, test_result &tr) = 0; }; /** * Test runner callback interface. * Can be implemented by caller to update * tests results in real-time. User can implement * any of callback methods, and leave unused * in default implementation. */ struct callback { /** * Default constructor. */ callback() { } /** * Virtual destructor is a must for subclassed types. */ virtual ~callback() { } /** * Called when new test run started. */ virtual void run_started() { } /** * Called when a group started * @param name Name of the group */ virtual void group_started(const std::string& /*name*/) { } /** * Called when a test finished. * @param tr Test results. */ virtual void test_completed(const test_result& /*tr*/) { } /** * Called when a group is completed * @param name Name of the group */ virtual void group_completed(const std::string& /*name*/) { } /** * Called when all tests in run completed. */ virtual void run_completed() { } private: callback(const callback &); void operator=(const callback&); }; /** * Typedef for runner::list_groups() */ typedef std::vector groupnames; typedef std::set callbacks; /** * Test runner. */ class test_runner { public: /** * Constructor */ test_runner() { } /** * Stores another group for getting by name. */ void register_group(const std::string& name, group_base* gr) { if (gr == 0) { throw tut_error("group shall be non-null"); } if (groups_.find(name) != groups_.end()) { std::string msg("attempt to add already existent group " + name); // this exception terminates application so we use cerr also // TODO: should this message appear in stream? std::cerr << msg << std::endl; throw tut_error(msg); } groups_.insert( std::make_pair(name, gr) ); } void set_callback(callback *cb) { clear_callbacks(); insert_callback(cb); } /** * Stores callback object. */ void insert_callback(callback* cb) { if(cb != NULL) { callbacks_.insert(cb); } } void erase_callback(callback* cb) { callbacks_.erase(cb); } void clear_callbacks() { callbacks_.clear(); } /** * Returns callback list. */ const callbacks &get_callbacks() const { return callbacks_; } void set_callbacks(const callbacks &cb) { callbacks_ = cb; } /** * Returns list of known test groups. */ const groupnames list_groups() const { groupnames ret; const_iterator i = groups_.begin(); const_iterator e = groups_.end(); while (i != e) { ret.push_back(i->first); ++i; } return ret; } /** * Runs all tests in all groups. * @param callback Callback object if exists; null otherwise */ void run_tests() const { cb_run_started_(); const_iterator i = groups_.begin(); const_iterator e = groups_.end(); while (i != e) { cb_group_started_(i->first); run_all_tests_in_group_(i); cb_group_completed_(i->first); ++i; } cb_run_completed_(); } /** * Runs all tests in specified group. */ void run_tests(const std::string& group_name) const { cb_run_started_(); const_iterator i = groups_.find(group_name); if (i == groups_.end()) { cb_run_completed_(); throw no_such_group(group_name); } cb_group_started_(group_name); run_all_tests_in_group_(i); cb_group_completed_(group_name); cb_run_completed_(); } /** * Runs one test in specified group. */ bool run_test(const std::string& group_name, int n, test_result &tr) const { cb_run_started_(); const_iterator i = groups_.find(group_name); if (i == groups_.end()) { cb_run_completed_(); throw no_such_group(group_name); } cb_group_started_(group_name); bool t = i->second->run_test(n, tr); if(t && tr.result != test_result::dummy) { cb_test_completed_(tr); } cb_group_completed_(group_name); cb_run_completed_(); return t; } protected: typedef std::map groups; typedef groups::iterator iterator; typedef groups::const_iterator const_iterator; groups groups_; callbacks callbacks_; private: friend class restartable_wrapper; void cb_run_started_() const { for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) { (*i)->run_started(); } } void cb_run_completed_() const { for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) { (*i)->run_completed(); } } void cb_group_started_(const std::string &group_name) const { for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) { (*i)->group_started(group_name); } } void cb_group_completed_(const std::string &group_name) const { for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) { (*i)->group_completed(group_name); } } void cb_test_completed_(const test_result &tr) const { for(callbacks::const_iterator i = callbacks_.begin(); i != callbacks_.end(); ++i) { (*i)->test_completed(tr); } } void run_all_tests_in_group_(const_iterator i) const { i->second->rewind(); test_result tr; while(i->second->run_next(tr)) { if(tr.result != test_result::dummy) { cb_test_completed_(tr); } if (tr.result == test_result::ex_ctor) { // test object ctor failed, skip whole group break; } } } }; /** * Singleton for test_runner implementation. * Instance with name runner_singleton shall be implemented * by user. */ class test_runner_singleton { public: static test_runner& get() { static test_runner tr; return tr; } }; extern test_runner_singleton runner; } #endif geos-3.4.2/tests/unit/util/0000755000175000017500000000000012206417243015374 5ustar frankiefrankiegeos-3.4.2/tests/unit/util/UniqueCoordinateArrayFilterTest.cpp0000644000175000017500000000446412206417146024375 0ustar frankiefrankie// // Test Suite for geos::util::UniqueCoordinateArrayFilter class. // tut #include // geos #include #include #include #include #include #include #include // std #include #include namespace tut { // // Test Group // // Common data used in test cases. struct test_uniquecoordinatearrayfilter_data { typedef std::auto_ptr GeometryPtr; geos::geom::PrecisionModel pm_; geos::geom::GeometryFactory factory_; geos::io::WKTReader reader_; test_uniquecoordinatearrayfilter_data() : pm_(1), factory_(&pm_, 0), reader_(&factory_) {} }; typedef test_group group; typedef group::object object; group test_uniquecoordinatearrayfilter_group("geos::util::UniqueCoordinateArrayFilter"); // // Test Cases // // Test of apply_ro() on MULTIPOINT template<> template<> void object::test<1>() { using geos::geom::Coordinate; // Create geometry from WKT const Coordinate::ConstVect::size_type size5 = 5; const std::string wkt("MULTIPOINT(10 10, 20 20, 30 30, 20 20, 10 10)"); GeometryPtr geo(reader_.read(wkt)); ensure_equals( geo->getGeometryTypeId(), geos::geom::GEOS_MULTIPOINT ); std::auto_ptr cs; cs.reset(geo->getCoordinates()); ensure_equals(cs->getSize(), size5 ); // Create collection buffer for filtered coordinates const Coordinate::ConstVect::size_type size0 = 0; Coordinate::ConstVect coords; // Create filtering object geos::util::UniqueCoordinateArrayFilter filter(coords); ensure_equals( coords.size(), size0 ); // Apply filter const Coordinate::ConstVect::size_type size3 = 3; geo->apply_ro(&filter); cs.reset(geo->getCoordinates()); ensure_equals( cs->getSize(), size5 ); ensure_equals( coords.size(), size3 ); ensure_equals( coords.at(0)->x, 10 ); ensure_equals( coords.at(0)->y, 10 ); ensure_equals( coords.at(1)->x, 20 ); ensure_equals( coords.at(1)->y, 20 ); ensure_equals( coords.at(2)->x, 30 ); ensure_equals( coords.at(2)->y, 30 ); } } // namespace tut geos-3.4.2/tests/unit/utility.h0000644000175000017500000001600412206417146016276 0ustar frankiefrankie// // GEOS Unit Test utilities, extension of TUT Framework namespace // #ifndef GEOS_TUT_UTILITY_H_INCLUDED #define GEOS_TUT_UTILITY_H_INCLUDED // tut #include // geos #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // std #include #include #include #include #include namespace tut { // // Helper typedefs // typedef geos::geom::Coordinate* CoordinatePtr; typedef geos::geom::Coordinate const* CoordinateCPtr; typedef geos::geom::CoordinateSequence* CoordSeqPtr; typedef geos::geom::CoordinateSequence const* CoordSeqCPtr; typedef geos::geom::CoordinateArraySequence* CoordArrayPtr; typedef geos::geom::CoordinateArraySequence const* CoordArrayCPtr; typedef geos::geom::Geometry* GeometryPtr; typedef geos::geom::Geometry const* GeometryCPtr; typedef geos::geom::Point* PointPtr; typedef geos::geom::Point const* PointCPtr; typedef geos::geom::LinearRing* LinearRingPtr; typedef geos::geom::LinearRing const* LinearRingCPtr; typedef geos::geom::LineString* LineStringPtr; typedef geos::geom::LineString const* LineStringCPtr; typedef geos::geom::Polygon* PolygonPtr; typedef geos::geom::Polygon const* PolygonCPtr; typedef geos::geom::GeometryCollection* GeometryColPtr; typedef geos::geom::GeometryCollection const* GeometryColCPtr; typedef geos::geom::MultiPoint* MultiPointPtr; typedef geos::geom::MultiPoint const* MultiPointCPtr; typedef geos::geom::MultiLineString* MultiLineStringPtr; typedef geos::geom::MultiLineString const* MultiLineStringCPtr; typedef geos::geom::MultiPolygon* MultiPolygonPtr; typedef geos::geom::MultiPolygon const* MultiPolygonCPtr; // prepared geometries always returend as const typedef geos::geom::prep::PreparedGeometry const* PreparedGeometryPtr; // // Type cast helper utilities // template inline bool isInstanceOf(InstanceType const* instance) { assert(0 != instance); return (0 != dynamic_cast(instance) ); } template inline Type const* instanceOf(InstanceType const* instance) { assert(0 != instance); return dynamic_cast(instance); } template std::auto_ptr dynamic_cast_auto_ptr(std::auto_ptr& ptr) { Dst* res = dynamic_cast(ptr.get()); if (0 != res) { ptr.release(); } return std::auto_ptr(res); } template std::auto_ptr static_cast_auto_ptr(std::auto_ptr& ptr) { return std::auto_ptr(static_cast(ptr.release())); } // // Geometries structure comparators // template inline void ensure_equals_geometry(T1 const* lhs, T2 const* rhs) { assert(0 != lhs); assert(0 != rhs); assert(!"DIFFERENT TYPES ARE NOT OF THE SAME STRUCTURE"); } template inline void ensure_equals_geometry(T const* lhs, T const* rhs) { assert(0 != lhs); assert(0 != rhs); using geos::geom::Polygon; using geos::geom::GeometryCollection; ensure_equals("is-valid do not match", lhs->isValid(), rhs->isValid()); ensure_equals("is-empty do not match", lhs->isEmpty(), rhs->isEmpty()); if (!isInstanceOf(lhs) && !isInstanceOf(rhs)) { ensure_equals("is-simple do not match", lhs->isSimple(), rhs->isSimple()); } ensure_equals("type do not match", lhs->getGeometryType(), rhs->getGeometryType()); ensure_equals("type id do not match", lhs->getGeometryTypeId(), rhs->getGeometryTypeId()); ensure_equals("dimension do not match", lhs->getDimension(), rhs->getDimension()); ensure_equals("boundary dimension do not match", lhs->getBoundaryDimension(), rhs->getBoundaryDimension()); // NOTE - mloskot: Intentionally disabled, so simplified geometry // can be compared to its original //ensure_equals("number of points do not match", // lhs->getNumPoints(), rhs->getNumPoints()); // Dispatch to run more specific testes if (isInstanceOf(lhs) && isInstanceOf(rhs)) { ensure_equals_geometry(instanceOf(lhs), instanceOf(rhs)); } else if (isInstanceOf(lhs) && isInstanceOf(rhs)) { ensure_equals_geometry(instanceOf(lhs), instanceOf(rhs)); } } template <> inline void ensure_equals_geometry(geos::geom::Polygon const* lhs, geos::geom::Polygon const* rhs) { assert(0 != lhs); assert(0 != rhs); ensure_equals("number of interior ring do not match", lhs->getNumInteriorRing(), rhs->getNumInteriorRing()); } template <> inline void ensure_equals_geometry(geos::geom::GeometryCollection const* lhs, geos::geom::GeometryCollection const* rhs) { assert(0 != lhs); assert(0 != rhs); using geos::geom::Geometry; ensure_equals("number of geometries do not match", lhs->getNumGeometries(), rhs->getNumGeometries()); for (std::size_t i = 0, n = lhs->getNumGeometries(); i < n; ++i) { Geometry const* g1 = lhs->getGeometryN(i); Geometry const* g2 = rhs->getGeometryN(i); ensure_equals_geometry(g1, g2); // breaks on failure } } template <> inline void ensure_equals_geometry(geos::geom::Geometry const* lhs, geos::geom::prep::PreparedGeometry const* rhs) { assert(0 != lhs); assert(0 != rhs); geos::geom::Geometry const& pg = rhs->getGeometry(); ensure_equals_geometry(lhs, &pg); } // // Utility functions // // Decodes hex-encoded WKB/EWKB to raw binary. struct wkb_hex_decoder { typedef std::vector binary_type; // bytes [out] - buffer for binary output static void decode(std::string const& hexstr, binary_type& bytes) { bytes.clear(); for(std::string::size_type i = 0; i < hexstr.size() / 2; ++i) { std::istringstream iss(hexstr.substr(i * 2, 2)); unsigned int n; iss >> std::hex >> n; bytes.push_back(static_cast(n)); } } }; } // namespace tut #endif // #ifndef GEOS_TUT_UTILITY_H_INCLUDED geos-3.4.2/tests/xmltester/0000755000175000017500000000000012206417242015466 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/BufferResultMatcher.cpp0000644000175000017500000000744412206417146022122 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: jtstest/testrunner/BufferResultMatcher.java rev rev 1.6 (JTS-1.11) * **********************************************************************/ #include "BufferResultMatcher.h" #include #include #include #include #include namespace geos { namespace xmltester { double BufferResultMatcher::MAX_RELATIVE_AREA_DIFFERENCE = 1.0E-3; double BufferResultMatcher::MIN_DISTANCE_TOLERANCE = 1.0e-8; double BufferResultMatcher::MAX_HAUSDORFF_DISTANCE_FACTOR = 100; bool BufferResultMatcher::isBufferResultMatch(const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance) { if (actualBuffer.isEmpty() && expectedBuffer.isEmpty()) return true; /** * MD - need some more checks here - symDiffArea won't catch * very small holes ("tears") * near the edge of computed buffers (which can happen * in current version of JTS (1.8)). * This can probably be handled by testing * that every point of the actual buffer is at least a certain * distance away from the geometry boundary. */ if (! isSymDiffAreaInTolerance(actualBuffer, expectedBuffer)) { std::cerr << "isSymDiffAreaInTolerance failed" << std::endl; return false; } if (! isBoundaryHausdorffDistanceInTolerance(actualBuffer, expectedBuffer, distance)) { std::cerr << "isBoundaryHasudorffDistanceInTolerance failed" << std::endl; return false; } return true; } bool BufferResultMatcher::isSymDiffAreaInTolerance( const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer) { typedef std::auto_ptr GeomPtr; using namespace operation::overlay; using geos::geom::BinaryOp; double area = expectedBuffer.getArea(); GeomPtr diff = BinaryOp(&actualBuffer, &expectedBuffer, overlayOp(OverlayOp::opSYMDIFFERENCE)); double areaDiff = diff->getArea(); // can't get closer than difference area = 0 ! // This also handles case when symDiff is empty if (areaDiff <= 0.0) return true; if (area <= 0) return false; double frac = areaDiff / area; bool ret = frac < MAX_RELATIVE_AREA_DIFFERENCE; if ( ! ret ) { std::cerr << "symDiffArea frac: " << frac << " tolerated " << MAX_RELATIVE_AREA_DIFFERENCE << std::endl; } return ret; } bool BufferResultMatcher::isBoundaryHausdorffDistanceInTolerance( const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance) { typedef std::auto_ptr GeomPtr; using geos::algorithm::distance::DiscreteHausdorffDistance; GeomPtr actualBdy ( actualBuffer.getBoundary() ); GeomPtr expectedBdy ( expectedBuffer.getBoundary() ); DiscreteHausdorffDistance haus(*actualBdy, *expectedBdy); haus.setDensifyFraction(0.25); double maxDistanceFound = haus.orientedDistance(); double expectedDistanceTol = fabs(distance) / MAX_HAUSDORFF_DISTANCE_FACTOR; if (expectedDistanceTol < MIN_DISTANCE_TOLERANCE) { expectedDistanceTol = MIN_DISTANCE_TOLERANCE; } if (maxDistanceFound > expectedDistanceTol) { std::cerr << "maxDistanceFound: " << maxDistanceFound << " tolerated " << expectedDistanceTol << std::endl; return false; } return true; } } // namespace geos::xmltester } // namespace geos geos-3.4.2/tests/xmltester/BufferResultMatcher.h0000644000175000017500000000341412206417147021561 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: jtstest/testrunner/BufferResultMatcher.java rev rev 1.6 (JTS-1.11) * **********************************************************************/ #ifndef XMLTESTER_BUFFERRESULTMATCHER_H #define XMLTESTER_BUFFERRESULTMATCHER_H // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace xmltester { class BufferResultMatcher { public: bool isBufferResultMatch(const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance); private: static double MAX_RELATIVE_AREA_DIFFERENCE; static double MAX_HAUSDORFF_DISTANCE_FACTOR; /* * The minimum distance tolerance which will be used. * This is required because densified vertices do no lie * precisely on their parent segment. */ static double MIN_DISTANCE_TOLERANCE; bool isSymDiffAreaInTolerance(const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer); bool isBoundaryHausdorffDistanceInTolerance( const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance); }; } // namespace geos::xmltester } // namespace geos #endif // XMLTESTER_BUFFERRESULTMATCHER_H geos-3.4.2/tests/xmltester/CMakeLists.txt0000644000175000017500000001002012206417147020223 0ustar frankiefrankie################################################################################# # # GEOS XML tests runner build configuration for CMake build system # # Copyright (C) 2009 Mateusz Loskot # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# set(STATUS_MESSAGE "Enable GEOS XML Tester build") set(STATUS_RESULT "OFF") if(GEOS_ENABLE_TESTS) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/tinyxml) set(simplewkttester_SOURCES SimpleWKTTester.cpp) set(xmltester_SOURCES XMLTester.cpp tinyxml/tinyxml.cpp tinyxml/tinystr.cpp tinyxml/tinyxmlerror.cpp tinyxml/tinyxmlparser.cpp BufferResultMatcher.cpp SingleSidedBufferResultMatcher.cpp) add_executable(simplewkttester ${simplewkttester_SOURCES}) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) target_link_libraries(simplewkttester GEOS) else() target_link_libraries(simplewkttester geos) endif() add_executable(xmltester ${xmltester_SOURCES}) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) target_link_libraries(xmltester GEOS) else() target_link_libraries(xmltester geos) endif() set(XMLTESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) set(SAVE_XMLTESTS ${XMLTESTS_DIR}/testLeaksBig.xml ${XMLTESTS_DIR}/split.xml ${XMLTESTS_DIR}/hexwkb.xml ${XMLTESTS_DIR}/test.xml ${XMLTESTS_DIR}/linemerge.xml ${XMLTESTS_DIR}/TestIsValid.xml ${XMLTESTS_DIR}/robustness.xml ${XMLTESTS_DIR}/buffer.xml ${XMLTESTS_DIR}/test.xml ${XMLTESTS_DIR}/singlesidedbuffer.xml ${XMLTESTS_DIR}/bug176.xml ${XMLTESTS_DIR}/bug188.xml ${XMLTESTS_DIR}/bug244.xml ${XMLTESTS_DIR}/bug275.xml ${XMLTESTS_DIR}/general/TestBoundary.xml ${XMLTESTS_DIR}/general/TestBuffer.xml ${XMLTESTS_DIR}/general/TestBufferMitredJoin.xml ${XMLTESTS_DIR}/general/TestCentroid.xml ${XMLTESTS_DIR}/general/TestConvexHull.xml ${XMLTESTS_DIR}/general/TestConvexHull-big.xml ${XMLTESTS_DIR}/general/TestFunctionAAPrec.xml ${XMLTESTS_DIR}/general/TestFunctionAA.xml ${XMLTESTS_DIR}/general/TestFunctionLAPrec.xml ${XMLTESTS_DIR}/general/TestFunctionLA.xml ${XMLTESTS_DIR}/general/TestFunctionLLPrec.xml ${XMLTESTS_DIR}/general/TestFunctionLL.xml ${XMLTESTS_DIR}/general/TestFunctionPA.xml ${XMLTESTS_DIR}/general/TestFunctionPLPrec.xml ${XMLTESTS_DIR}/general/TestFunctionPL.xml ${XMLTESTS_DIR}/general/TestFunctionPP.xml ${XMLTESTS_DIR}/general/TestInteriorPoint.xml ${XMLTESTS_DIR}/general/TestRectanglePredicate.xml ${XMLTESTS_DIR}/general/TestRelateAA.xml ${XMLTESTS_DIR}/general/TestRelateLA.xml ${XMLTESTS_DIR}/general/TestRelateLL.xml ${XMLTESTS_DIR}/general/TestRelatePL.xml ${XMLTESTS_DIR}/general/TestRelateAC.xml ${XMLTESTS_DIR}/general/TestRelateLC.xml ${XMLTESTS_DIR}/general/TestRelatePA.xml ${XMLTESTS_DIR}/general/TestRelatePP.xml ${XMLTESTS_DIR}/general/TestSimple.xml ${XMLTESTS_DIR}/general/TestValid.xml ${XMLTESTS_DIR}/general/TestValid2.xml ${XMLTESTS_DIR}/general/TestValid2-big.xml ${XMLTESTS_DIR}/general/TestWithinDistance.xml ${XMLTESTS_DIR}/stmlf/stmlf-cases-20061020.xml ${XMLTESTS_DIR}/stmlf/stmlf-cases-20070119.xml ${XMLTESTS_DIR}/robust/TestRobustOverlayFixed.xml ${XMLTESTS_DIR}/robust/TestRobustRelate.xml ${XMLTESTS_DIR}/fme.xml ${XMLTESTS_DIR}/TestBufferExternal.xml ${XMLTESTS_DIR}/TestBufferExternal2.xml ${XMLTESTS_DIR}/heisenbugs.xml ${XMLTESTS_DIR}/badguy3.xml ${XMLTESTS_DIR}/hole_from_shell.xml ${XMLTESTS_DIR}/hole_red.xml ${XMLTESTS_DIR}/safe/16595.xml ${XMLTESTS_DIR}/safe/16596.xml) add_test(xmltester ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/xmltester ${SAVE_XMLTESTS}) set(STATUS_RESULT "ON") endif() message(STATUS "${STATUS_MESSAGE} - ${STATUS_RESULT}") geos-3.4.2/tests/xmltester/Makefile.am0000644000175000017500000001121412206417147017525 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #prefix=@prefix@ #top_srcdir=@top_srcdir@ #top_builddir=@top_builddir@ TESTS = testrunner CLEANFILES = testrunner EXTRA_DIST = testrunner.sh CMakeLists.txt SAFE_XMLTESTS=$(srcdir)/tests/testLeaksBig.xml \ $(srcdir)/tests/split.xml \ $(srcdir)/tests/hexwkb.xml \ $(srcdir)/tests/test.xml \ $(srcdir)/tests/linemerge.xml \ $(srcdir)/tests/TestIsValid.xml \ $(srcdir)/tests/robustness.xml \ $(srcdir)/tests/buffer.xml \ $(srcdir)/tests/singlesidedbuffer.xml \ $(srcdir)/tests/ticket/bug176.xml \ $(srcdir)/tests/ticket/bug188.xml \ $(srcdir)/tests/ticket/bug244.xml \ $(srcdir)/tests/ticket/bug275.xml \ $(srcdir)/tests/ticket/bug350.xml \ $(srcdir)/tests/ticket/bug356.xml \ $(srcdir)/tests/ticket/bug358.xml \ $(srcdir)/tests/ticket/bug360.xml \ $(srcdir)/tests/ticket/bug366.xml \ $(srcdir)/tests/ticket/bug392.xml \ $(srcdir)/tests/ticket/bug398.xml \ $(srcdir)/tests/ticket/bug434.xml \ $(srcdir)/tests/ticket/bug459.xml \ $(srcdir)/tests/ticket/bug527.xml \ $(srcdir)/tests/ticket/bug582.xml \ $(srcdir)/tests/ticket/bug586.xml \ $(srcdir)/tests/ticket/bug599.xml \ $(srcdir)/tests/ticket/bug605.xml \ $(srcdir)/tests/ticket/bug615.xml \ $(srcdir)/tests/general/TestBoundary.xml \ $(srcdir)/tests/general/TestBuffer.xml \ $(srcdir)/tests/general/TestBufferMitredJoin.xml \ $(srcdir)/tests/general/TestCentroid.xml \ $(srcdir)/tests/general/TestConvexHull.xml \ $(srcdir)/tests/general/TestConvexHull-big.xml \ $(srcdir)/tests/general/TestDistance.xml \ $(srcdir)/tests/general/TestFunctionAAPrec.xml \ $(srcdir)/tests/general/TestFunctionAA.xml \ $(srcdir)/tests/general/TestFunctionLAPrec.xml \ $(srcdir)/tests/general/TestFunctionLA.xml \ $(srcdir)/tests/general/TestFunctionLLPrec.xml \ $(srcdir)/tests/general/TestFunctionLL.xml \ $(srcdir)/tests/general/TestFunctionPA.xml \ $(srcdir)/tests/general/TestFunctionPLPrec.xml \ $(srcdir)/tests/general/TestFunctionPL.xml \ $(srcdir)/tests/general/TestFunctionPP.xml \ $(srcdir)/tests/general/TestInteriorPoint.xml \ $(srcdir)/tests/general/TestRectanglePredicate.xml \ $(srcdir)/tests/general/TestRelateAA.xml \ $(srcdir)/tests/general/TestRelateLA.xml \ $(srcdir)/tests/general/TestRelateLL.xml \ $(srcdir)/tests/general/TestRelatePL.xml \ $(srcdir)/tests/general/TestRelateAC.xml \ $(srcdir)/tests/general/TestRelateLC.xml \ $(srcdir)/tests/general/TestRelatePA.xml \ $(srcdir)/tests/general/TestRelatePP.xml \ $(srcdir)/tests/general/TestSimple.xml \ $(srcdir)/tests/general/TestUnaryUnion.xml \ $(srcdir)/tests/general/TestUnaryUnionFloating.xml \ $(srcdir)/tests/general/TestValid.xml \ $(srcdir)/tests/general/TestValid2.xml \ $(srcdir)/tests/general/TestValid2-big.xml \ $(srcdir)/tests/general/TestWithinDistance.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20061020.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20061020-invalid-output.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20070119.xml \ $(srcdir)/tests/robust/TestRobustOverlayFixed.xml \ $(srcdir)/tests/robust/TestRobustRelate.xml \ $(srcdir)/tests/fme.xml \ $(srcdir)/tests/TestBufferExternal.xml \ $(srcdir)/tests/TestBufferExternal2.xml \ $(srcdir)/tests/heisenbugs.xml \ $(srcdir)/tests/badguy3.xml \ $(srcdir)/tests/hole_from_shell.xml \ $(srcdir)/tests/hole_red.xml \ $(srcdir)/tests/safe/16595.xml \ $(srcdir)/tests/safe/16596.xml \ $(srcdir)/tests/safe/TestBufferJagged.xml INVALID_OUTPUT_XMLTESTS = FAILING_XMLTESTS = \ $(srcdir)/tests/failure/TestOverlay.xml \ $(srcdir)/tests/ticket/bug488.xml XMLTESTS=$(SAFE_XMLTESTS) $(INVALID_OUTPUT_XMLTESTS) $(FAILING_XMLTESTS) EXTRA_DIST += $(XMLTESTS) noinst_PROGRAMS = SimpleWKTTester XMLTester #bin_PROGRAMS = XMLTester # CTS LIBS = $(top_builddir)/src/libgeos.la # -lmpatrol -lbfd -lintl -liberty -limagehlp # CTS_SOURCES = CTS.cpp # CTS_LDADD = $(LIBS) SimpleWKTTester_SOURCES = SimpleWKTTester.cpp SimpleWKTTester_LDADD = $(LIBS) XMLTester_SOURCES = \ XMLTester.cpp \ XMLTester.h \ tinyxml/tinyxml.h \ tinyxml/tinyxml.cpp \ tinyxml/tinystr.h \ tinyxml/tinystr.cpp \ tinyxml/tinyxmlerror.cpp \ tinyxml/tinyxmlparser.cpp \ BufferResultMatcher.h \ BufferResultMatcher.cpp \ SingleSidedBufferResultMatcher.h \ SingleSidedBufferResultMatcher.cpp XMLTester_LDADD = $(LIBS) # Intentionally drop -ansi -pedantic # See http://trac.osgeo.org/geos/ticket/319 XMLTester_CXXFLAGS = $(INLINE_FLAGS) INCLUDES = -I$(top_srcdir)/include INCLUDES += -I$(top_srcdir)/src/io/tinyxml -DTIXML_USE_STL static: $(CXX) $(CXXFLAGS) -I../include -o staticXMLTester XMLTester.cpp MarkupSTL.o ../../src/geom/.libs/libgeos.a testrunner: testrunner.sh Makefile @sh $(srcdir)/testrunner.sh $@ --test-valid-output $(SAFE_XMLTESTS) geos-3.4.2/tests/xmltester/Makefile.in0000644000175000017500000011576412206417166017556 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) # #prefix=@prefix@ #top_srcdir=@top_srcdir@ #top_builddir=@top_builddir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = SimpleWKTTester$(EXEEXT) XMLTester$(EXEEXT) subdir = tests/xmltester DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_SimpleWKTTester_OBJECTS = SimpleWKTTester.$(OBJEXT) SimpleWKTTester_OBJECTS = $(am_SimpleWKTTester_OBJECTS) SimpleWKTTester_DEPENDENCIES = $(LIBS) am_XMLTester_OBJECTS = XMLTester-XMLTester.$(OBJEXT) \ XMLTester-tinyxml.$(OBJEXT) XMLTester-tinystr.$(OBJEXT) \ XMLTester-tinyxmlerror.$(OBJEXT) \ XMLTester-tinyxmlparser.$(OBJEXT) \ XMLTester-BufferResultMatcher.$(OBJEXT) \ XMLTester-SingleSidedBufferResultMatcher.$(OBJEXT) XMLTester_OBJECTS = $(am_XMLTester_OBJECTS) XMLTester_DEPENDENCIES = $(LIBS) XMLTester_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(XMLTester_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include -I$(top_builddir)/include/geos depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(SimpleWKTTester_SOURCES) $(XMLTester_SOURCES) DIST_SOURCES = $(SimpleWKTTester_SOURCES) $(XMLTester_SOURCES) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ #bin_PROGRAMS = XMLTester # CTS LIBS = $(top_builddir)/src/libgeos.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = testrunner CLEANFILES = testrunner EXTRA_DIST = testrunner.sh CMakeLists.txt $(XMLTESTS) SAFE_XMLTESTS = $(srcdir)/tests/testLeaksBig.xml \ $(srcdir)/tests/split.xml \ $(srcdir)/tests/hexwkb.xml \ $(srcdir)/tests/test.xml \ $(srcdir)/tests/linemerge.xml \ $(srcdir)/tests/TestIsValid.xml \ $(srcdir)/tests/robustness.xml \ $(srcdir)/tests/buffer.xml \ $(srcdir)/tests/singlesidedbuffer.xml \ $(srcdir)/tests/ticket/bug176.xml \ $(srcdir)/tests/ticket/bug188.xml \ $(srcdir)/tests/ticket/bug244.xml \ $(srcdir)/tests/ticket/bug275.xml \ $(srcdir)/tests/ticket/bug350.xml \ $(srcdir)/tests/ticket/bug356.xml \ $(srcdir)/tests/ticket/bug358.xml \ $(srcdir)/tests/ticket/bug360.xml \ $(srcdir)/tests/ticket/bug366.xml \ $(srcdir)/tests/ticket/bug392.xml \ $(srcdir)/tests/ticket/bug398.xml \ $(srcdir)/tests/ticket/bug434.xml \ $(srcdir)/tests/ticket/bug459.xml \ $(srcdir)/tests/ticket/bug527.xml \ $(srcdir)/tests/ticket/bug582.xml \ $(srcdir)/tests/ticket/bug586.xml \ $(srcdir)/tests/ticket/bug599.xml \ $(srcdir)/tests/ticket/bug605.xml \ $(srcdir)/tests/ticket/bug615.xml \ $(srcdir)/tests/general/TestBoundary.xml \ $(srcdir)/tests/general/TestBuffer.xml \ $(srcdir)/tests/general/TestBufferMitredJoin.xml \ $(srcdir)/tests/general/TestCentroid.xml \ $(srcdir)/tests/general/TestConvexHull.xml \ $(srcdir)/tests/general/TestConvexHull-big.xml \ $(srcdir)/tests/general/TestDistance.xml \ $(srcdir)/tests/general/TestFunctionAAPrec.xml \ $(srcdir)/tests/general/TestFunctionAA.xml \ $(srcdir)/tests/general/TestFunctionLAPrec.xml \ $(srcdir)/tests/general/TestFunctionLA.xml \ $(srcdir)/tests/general/TestFunctionLLPrec.xml \ $(srcdir)/tests/general/TestFunctionLL.xml \ $(srcdir)/tests/general/TestFunctionPA.xml \ $(srcdir)/tests/general/TestFunctionPLPrec.xml \ $(srcdir)/tests/general/TestFunctionPL.xml \ $(srcdir)/tests/general/TestFunctionPP.xml \ $(srcdir)/tests/general/TestInteriorPoint.xml \ $(srcdir)/tests/general/TestRectanglePredicate.xml \ $(srcdir)/tests/general/TestRelateAA.xml \ $(srcdir)/tests/general/TestRelateLA.xml \ $(srcdir)/tests/general/TestRelateLL.xml \ $(srcdir)/tests/general/TestRelatePL.xml \ $(srcdir)/tests/general/TestRelateAC.xml \ $(srcdir)/tests/general/TestRelateLC.xml \ $(srcdir)/tests/general/TestRelatePA.xml \ $(srcdir)/tests/general/TestRelatePP.xml \ $(srcdir)/tests/general/TestSimple.xml \ $(srcdir)/tests/general/TestUnaryUnion.xml \ $(srcdir)/tests/general/TestUnaryUnionFloating.xml \ $(srcdir)/tests/general/TestValid.xml \ $(srcdir)/tests/general/TestValid2.xml \ $(srcdir)/tests/general/TestValid2-big.xml \ $(srcdir)/tests/general/TestWithinDistance.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20061020.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20061020-invalid-output.xml \ $(srcdir)/tests/stmlf/stmlf-cases-20070119.xml \ $(srcdir)/tests/robust/TestRobustOverlayFixed.xml \ $(srcdir)/tests/robust/TestRobustRelate.xml \ $(srcdir)/tests/fme.xml \ $(srcdir)/tests/TestBufferExternal.xml \ $(srcdir)/tests/TestBufferExternal2.xml \ $(srcdir)/tests/heisenbugs.xml \ $(srcdir)/tests/badguy3.xml \ $(srcdir)/tests/hole_from_shell.xml \ $(srcdir)/tests/hole_red.xml \ $(srcdir)/tests/safe/16595.xml \ $(srcdir)/tests/safe/16596.xml \ $(srcdir)/tests/safe/TestBufferJagged.xml INVALID_OUTPUT_XMLTESTS = FAILING_XMLTESTS = \ $(srcdir)/tests/failure/TestOverlay.xml \ $(srcdir)/tests/ticket/bug488.xml XMLTESTS = $(SAFE_XMLTESTS) $(INVALID_OUTPUT_XMLTESTS) $(FAILING_XMLTESTS) # -lmpatrol -lbfd -lintl -liberty -limagehlp # CTS_SOURCES = CTS.cpp # CTS_LDADD = $(LIBS) SimpleWKTTester_SOURCES = SimpleWKTTester.cpp SimpleWKTTester_LDADD = $(LIBS) XMLTester_SOURCES = \ XMLTester.cpp \ XMLTester.h \ tinyxml/tinyxml.h \ tinyxml/tinyxml.cpp \ tinyxml/tinystr.h \ tinyxml/tinystr.cpp \ tinyxml/tinyxmlerror.cpp \ tinyxml/tinyxmlparser.cpp \ BufferResultMatcher.h \ BufferResultMatcher.cpp \ SingleSidedBufferResultMatcher.h \ SingleSidedBufferResultMatcher.cpp XMLTester_LDADD = $(LIBS) # Intentionally drop -ansi -pedantic # See http://trac.osgeo.org/geos/ticket/319 XMLTester_CXXFLAGS = $(INLINE_FLAGS) INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/io/tinyxml \ -DTIXML_USE_STL all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/xmltester/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/xmltester/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list SimpleWKTTester$(EXEEXT): $(SimpleWKTTester_OBJECTS) $(SimpleWKTTester_DEPENDENCIES) @rm -f SimpleWKTTester$(EXEEXT) $(CXXLINK) $(SimpleWKTTester_OBJECTS) $(SimpleWKTTester_LDADD) $(LIBS) XMLTester$(EXEEXT): $(XMLTester_OBJECTS) $(XMLTester_DEPENDENCIES) @rm -f XMLTester$(EXEEXT) $(XMLTester_LINK) $(XMLTester_OBJECTS) $(XMLTester_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleWKTTester.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-BufferResultMatcher.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-XMLTester.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-tinystr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-tinyxml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-tinyxmlerror.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XMLTester-tinyxmlparser.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< XMLTester-XMLTester.o: XMLTester.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-XMLTester.o -MD -MP -MF $(DEPDIR)/XMLTester-XMLTester.Tpo -c -o XMLTester-XMLTester.o `test -f 'XMLTester.cpp' || echo '$(srcdir)/'`XMLTester.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-XMLTester.Tpo $(DEPDIR)/XMLTester-XMLTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='XMLTester.cpp' object='XMLTester-XMLTester.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-XMLTester.o `test -f 'XMLTester.cpp' || echo '$(srcdir)/'`XMLTester.cpp XMLTester-XMLTester.obj: XMLTester.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-XMLTester.obj -MD -MP -MF $(DEPDIR)/XMLTester-XMLTester.Tpo -c -o XMLTester-XMLTester.obj `if test -f 'XMLTester.cpp'; then $(CYGPATH_W) 'XMLTester.cpp'; else $(CYGPATH_W) '$(srcdir)/XMLTester.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-XMLTester.Tpo $(DEPDIR)/XMLTester-XMLTester.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='XMLTester.cpp' object='XMLTester-XMLTester.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-XMLTester.obj `if test -f 'XMLTester.cpp'; then $(CYGPATH_W) 'XMLTester.cpp'; else $(CYGPATH_W) '$(srcdir)/XMLTester.cpp'; fi` XMLTester-tinyxml.o: tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxml.o -MD -MP -MF $(DEPDIR)/XMLTester-tinyxml.Tpo -c -o XMLTester-tinyxml.o `test -f 'tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxml.Tpo $(DEPDIR)/XMLTester-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxml.cpp' object='XMLTester-tinyxml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxml.o `test -f 'tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`tinyxml/tinyxml.cpp XMLTester-tinyxml.obj: tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxml.obj -MD -MP -MF $(DEPDIR)/XMLTester-tinyxml.Tpo -c -o XMLTester-tinyxml.obj `if test -f 'tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxml.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxml.Tpo $(DEPDIR)/XMLTester-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxml.cpp' object='XMLTester-tinyxml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxml.obj `if test -f 'tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxml.cpp'; fi` XMLTester-tinystr.o: tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinystr.o -MD -MP -MF $(DEPDIR)/XMLTester-tinystr.Tpo -c -o XMLTester-tinystr.o `test -f 'tinyxml/tinystr.cpp' || echo '$(srcdir)/'`tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinystr.Tpo $(DEPDIR)/XMLTester-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinystr.cpp' object='XMLTester-tinystr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinystr.o `test -f 'tinyxml/tinystr.cpp' || echo '$(srcdir)/'`tinyxml/tinystr.cpp XMLTester-tinystr.obj: tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinystr.obj -MD -MP -MF $(DEPDIR)/XMLTester-tinystr.Tpo -c -o XMLTester-tinystr.obj `if test -f 'tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinystr.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinystr.Tpo $(DEPDIR)/XMLTester-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinystr.cpp' object='XMLTester-tinystr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinystr.obj `if test -f 'tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinystr.cpp'; fi` XMLTester-tinyxmlerror.o: tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxmlerror.o -MD -MP -MF $(DEPDIR)/XMLTester-tinyxmlerror.Tpo -c -o XMLTester-tinyxmlerror.o `test -f 'tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxmlerror.Tpo $(DEPDIR)/XMLTester-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxmlerror.cpp' object='XMLTester-tinyxmlerror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxmlerror.o `test -f 'tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`tinyxml/tinyxmlerror.cpp XMLTester-tinyxmlerror.obj: tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxmlerror.obj -MD -MP -MF $(DEPDIR)/XMLTester-tinyxmlerror.Tpo -c -o XMLTester-tinyxmlerror.obj `if test -f 'tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxmlerror.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxmlerror.Tpo $(DEPDIR)/XMLTester-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxmlerror.cpp' object='XMLTester-tinyxmlerror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxmlerror.obj `if test -f 'tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxmlerror.cpp'; fi` XMLTester-tinyxmlparser.o: tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxmlparser.o -MD -MP -MF $(DEPDIR)/XMLTester-tinyxmlparser.Tpo -c -o XMLTester-tinyxmlparser.o `test -f 'tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxmlparser.Tpo $(DEPDIR)/XMLTester-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxmlparser.cpp' object='XMLTester-tinyxmlparser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxmlparser.o `test -f 'tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`tinyxml/tinyxmlparser.cpp XMLTester-tinyxmlparser.obj: tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-tinyxmlparser.obj -MD -MP -MF $(DEPDIR)/XMLTester-tinyxmlparser.Tpo -c -o XMLTester-tinyxmlparser.obj `if test -f 'tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxmlparser.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-tinyxmlparser.Tpo $(DEPDIR)/XMLTester-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tinyxml/tinyxmlparser.cpp' object='XMLTester-tinyxmlparser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-tinyxmlparser.obj `if test -f 'tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/tinyxml/tinyxmlparser.cpp'; fi` XMLTester-BufferResultMatcher.o: BufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-BufferResultMatcher.o -MD -MP -MF $(DEPDIR)/XMLTester-BufferResultMatcher.Tpo -c -o XMLTester-BufferResultMatcher.o `test -f 'BufferResultMatcher.cpp' || echo '$(srcdir)/'`BufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-BufferResultMatcher.Tpo $(DEPDIR)/XMLTester-BufferResultMatcher.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BufferResultMatcher.cpp' object='XMLTester-BufferResultMatcher.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-BufferResultMatcher.o `test -f 'BufferResultMatcher.cpp' || echo '$(srcdir)/'`BufferResultMatcher.cpp XMLTester-BufferResultMatcher.obj: BufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-BufferResultMatcher.obj -MD -MP -MF $(DEPDIR)/XMLTester-BufferResultMatcher.Tpo -c -o XMLTester-BufferResultMatcher.obj `if test -f 'BufferResultMatcher.cpp'; then $(CYGPATH_W) 'BufferResultMatcher.cpp'; else $(CYGPATH_W) '$(srcdir)/BufferResultMatcher.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-BufferResultMatcher.Tpo $(DEPDIR)/XMLTester-BufferResultMatcher.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='BufferResultMatcher.cpp' object='XMLTester-BufferResultMatcher.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-BufferResultMatcher.obj `if test -f 'BufferResultMatcher.cpp'; then $(CYGPATH_W) 'BufferResultMatcher.cpp'; else $(CYGPATH_W) '$(srcdir)/BufferResultMatcher.cpp'; fi` XMLTester-SingleSidedBufferResultMatcher.o: SingleSidedBufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-SingleSidedBufferResultMatcher.o -MD -MP -MF $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Tpo -c -o XMLTester-SingleSidedBufferResultMatcher.o `test -f 'SingleSidedBufferResultMatcher.cpp' || echo '$(srcdir)/'`SingleSidedBufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Tpo $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SingleSidedBufferResultMatcher.cpp' object='XMLTester-SingleSidedBufferResultMatcher.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-SingleSidedBufferResultMatcher.o `test -f 'SingleSidedBufferResultMatcher.cpp' || echo '$(srcdir)/'`SingleSidedBufferResultMatcher.cpp XMLTester-SingleSidedBufferResultMatcher.obj: SingleSidedBufferResultMatcher.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -MT XMLTester-SingleSidedBufferResultMatcher.obj -MD -MP -MF $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Tpo -c -o XMLTester-SingleSidedBufferResultMatcher.obj `if test -f 'SingleSidedBufferResultMatcher.cpp'; then $(CYGPATH_W) 'SingleSidedBufferResultMatcher.cpp'; else $(CYGPATH_W) '$(srcdir)/SingleSidedBufferResultMatcher.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Tpo $(DEPDIR)/XMLTester-SingleSidedBufferResultMatcher.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='SingleSidedBufferResultMatcher.cpp' object='XMLTester-SingleSidedBufferResultMatcher.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(XMLTester_CXXFLAGS) $(CXXFLAGS) -c -o XMLTester-SingleSidedBufferResultMatcher.obj `if test -f 'SingleSidedBufferResultMatcher.cpp'; then $(CYGPATH_W) 'SingleSidedBufferResultMatcher.cpp'; else $(CYGPATH_W) '$(srcdir)/SingleSidedBufferResultMatcher.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am static: $(CXX) $(CXXFLAGS) -I../include -o staticXMLTester XMLTester.cpp MarkupSTL.o ../../src/geom/.libs/libgeos.a testrunner: testrunner.sh Makefile @sh $(srcdir)/testrunner.sh $@ --test-valid-output $(SAFE_XMLTESTS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tests/xmltester/SimpleWKTTester.cpp0000644000175000017500000000312112206417147021201 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ // CTS.cpp : Testing class // #include #include #include #include #include #include #include #include using namespace std; using namespace geos::io; using namespace geos::geom; using namespace geos::util; int main(int /*argc*/, char** /*argv*/) { try { ofstream out("WKTOut"); ifstream in("WKTIn"); string instr; string outstr; WKTReader *r = new WKTReader(new GeometryFactory(new PrecisionModel(),10)); WKTWriter *w = new WKTWriter(); Geometry *g; cout << "Start Testing:" << endl; while(!in.eof()) { getline(in,instr); if (instr!="") { g=r->read(instr); outstr=w->write(g); out << "----------" << endl; out << instr << endl; out << outstr << endl; out << "----------" << endl << endl; } } out.flush(); out.close(); cout << "End of Testing" << endl; } catch (const GEOSException& ge) { cout << ge.what() << endl; } return 0; } geos-3.4.2/tests/xmltester/SingleSidedBufferResultMatcher.cpp0000644000175000017500000000570312206417147024232 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: original work * **********************************************************************/ #include "SingleSidedBufferResultMatcher.h" #include #include #include #include #include namespace geos { namespace xmltester { double SingleSidedBufferResultMatcher::MIN_DISTANCE_TOLERANCE = 1.0e-8; double SingleSidedBufferResultMatcher::MAX_HAUSDORFF_DISTANCE_FACTOR = 100; bool SingleSidedBufferResultMatcher::isBufferResultMatch(const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance) { bool aEmpty = actualBuffer.isEmpty(); bool eEmpty = expectedBuffer.isEmpty(); // Both empty succeeds if (aEmpty && eEmpty) return true; // One empty and not the other is a failure if (aEmpty || eEmpty) { std::cerr << "isBufferResultMatch failed (one empty and one not)" << std::endl; return false; } // NOTE: we need to test hausdorff distance in both directions if (! isBoundaryHausdorffDistanceInTolerance(actualBuffer, expectedBuffer, distance)) { std::cerr << "isBoundaryHasudorffDistanceInTolerance failed (actual,expected)" << std::endl; return false; } if (! isBoundaryHausdorffDistanceInTolerance(expectedBuffer, actualBuffer, distance)) { std::cerr << "isBoundaryHasudorffDistanceInTolerance failed (expected,actual)" << std::endl; return false; } return true; } bool SingleSidedBufferResultMatcher::isBoundaryHausdorffDistanceInTolerance( const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance) { typedef std::auto_ptr GeomPtr; using geos::algorithm::distance::DiscreteHausdorffDistance; GeomPtr actualBdy ( actualBuffer.clone() ); GeomPtr expectedBdy ( expectedBuffer.clone() ); DiscreteHausdorffDistance haus(*actualBdy, *expectedBdy); haus.setDensifyFraction(0.25); double maxDistanceFound = haus.orientedDistance(); double expectedDistanceTol = fabs(distance) / MAX_HAUSDORFF_DISTANCE_FACTOR; if (expectedDistanceTol < MIN_DISTANCE_TOLERANCE) { expectedDistanceTol = MIN_DISTANCE_TOLERANCE; } if (maxDistanceFound > expectedDistanceTol) { std::cerr << "maxDistanceFound: " << maxDistanceFound << " tolerated " << expectedDistanceTol << std::endl; return false; } return true; } } // namespace geos::xmltester } // namespace geos geos-3.4.2/tests/xmltester/SingleSidedBufferResultMatcher.h0000644000175000017500000000311312206417147023670 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2009 Sandro Santilli * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * ********************************************************************** * * Last port: original work * **********************************************************************/ #ifndef XMLTESTER_SINGLESIDEDBUFFERRESULTMATCHER_H #define XMLTESTER_SINGLESIDEDBUFFERRESULTMATCHER_H // Forward declarations namespace geos { namespace geom { class Geometry; } } namespace geos { namespace xmltester { class SingleSidedBufferResultMatcher { public: bool isBufferResultMatch(const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance); private: static double MAX_HAUSDORFF_DISTANCE_FACTOR; /* * The minimum distance tolerance which will be used. * This is required because densified vertices do no lie * precisely on their parent segment. */ static double MIN_DISTANCE_TOLERANCE; bool isBoundaryHausdorffDistanceInTolerance( const geom::Geometry& actualBuffer, const geom::Geometry& expectedBuffer, double distance); }; } // namespace geos::xmltester } // namespace geos #endif // XMLTESTER_SINGLESIDEDBUFFERRESULTMATCHER_H geos-3.4.2/tests/xmltester/XMLTester.cpp0000644000175000017500000010644112206417147020033 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifdef _MSC_VER # if defined(GEOS_DEBUG_MSVC_USE_VLD) && !defined(GEOS_TEST_USE_STACKWALKER) # include # else //#define _CRTDBG_MAP_ALLOC //#include # include # endif #pragma warning(disable : 4127) #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 #include "XMLTester.h" #include "BufferResultMatcher.h" #include "SingleSidedBufferResultMatcher.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(_MSC_VER) && defined(GEOS_TEST_USE_STACKWALKER) #include #include "Stackwalker.h" #endif // Geometry methods do use BinaryOp internally #undef USE_BINARYOP using namespace geos; using namespace geos::operation::polygonize; using namespace geos::operation::linemerge; using std::runtime_error; namespace { // a utility function defining a very simple method to indent a line of text const char * getIndent( unsigned int numIndents ) { static const char * pINDENT = " + "; static const unsigned int LENGTH = strlen( pINDENT ); if ( numIndents > LENGTH ) numIndents = LENGTH; return &pINDENT[ LENGTH-numIndents ]; } void dump_to_stdout( const TiXmlNode * pParent, unsigned int indent = 0 ) { if ( !pParent ) return; const TiXmlText *pText; int t = pParent->Type(); printf( "%s", getIndent( indent)); switch ( t ) { case TiXmlNode::DOCUMENT: printf( "Document" ); break; case TiXmlNode::ELEMENT: printf( "Element \"%s\"", pParent->Value() ); break; case TiXmlNode::COMMENT: printf( "Comment: \"%s\"", pParent->Value()); break; case TiXmlNode::UNKNOWN: printf( "Unknown" ); break; case TiXmlNode::TEXT: pText = pParent->ToText(); printf( "Text: [%s]", pText->Value() ); break; case TiXmlNode::DECLARATION: printf( "Declaration" ); break; default: break; } printf( "\n" ); const TiXmlNode * pChild; for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) { dump_to_stdout( pChild, indent+2 ); } } } void tolower(std::string& str) { std::transform(str.begin(), str.end(), str.begin(), (int(*)(int))std::tolower); } std::string normalize_filename(const std::string& str) { std::string newstring; std::string::size_type last_slash = str.find_last_of('/', str.size()); if ( last_slash == std::string::npos ) newstring = str; else newstring = str.substr(last_slash+1); for (std::string::iterator i=newstring.begin(), e=newstring.end(); i!=e; ++i) { if ( *i == '.' ) *i = '_'; } tolower(newstring); return newstring; } /* Could be an XMLTester class private but oh well.. */ static int checkBufferSuccess(geom::Geometry const& gRes, geom::Geometry const& gRealRes, double dist) { int success = 1; do { if ( gRes.getGeometryTypeId() != gRealRes.getGeometryTypeId() ) { std::cerr << "Expected result is of type " << gRes.getGeometryType() << "; obtained result is of type " << gRealRes.getGeometryType() << std::endl; success=0; break; } // Is a buffer always an area ? if ( gRes.getDimension() != 2 ) { std::cerr << "Don't know how to validate " << "result of buffer operation " << "when expected result is not an " << "areal type." << std::endl; } geos::xmltester::BufferResultMatcher matcher; if ( ! matcher.isBufferResultMatch(gRealRes, gRes, dist) ) { std::cerr << "BufferResultMatcher FAILED" << std::endl; success=0; break; } } while (0); return success; } static int checkSingleSidedBufferSuccess(geom::Geometry& gRes, geom::Geometry& gRealRes, double dist) { int success = 1; do { if ( gRes.getGeometryTypeId() != gRealRes.getGeometryTypeId() ) { std::cerr << "Expected result is of type " << gRes.getGeometryType() << "; obtained result is of type " << gRealRes.getGeometryType() << std::endl; success=0; break; } geos::xmltester::SingleSidedBufferResultMatcher matcher; if ( ! matcher.isBufferResultMatch(gRealRes, gRes, dist) ) { std::cerr << "SingleSidedBufferResultMatcher FAILED" << std::endl; success=0; break; } } while (0); return success; } XMLTester::XMLTester() : gA(0), gB(0), gT(0), pm(0), factory(0), wktreader(0), wktwriter(0), wkbreader(0), wkbwriter(0), test_predicates(0), failed(0), succeeded(0), caseCount(0), testCount(0), testFileCount(0), totalTestCount(0), curr_file(NULL), testValidOutput(false), testValidInput(false), sqlOutput(false), HEXWKB_output(false) { setVerbosityLevel(0); } int XMLTester::setVerbosityLevel(int value) { int old_value=verbose; verbose=value; return old_value; } /*private*/ void XMLTester::printTest(bool success, const std::string& expected_result, const std::string& actual_result) { if ( sqlOutput ) { std::cout << "INSERT INTO \"" << normalize_filename(*curr_file) << "\" VALUES (" << caseCount << ", " << testCount << ", " << "'" << opSignature << "', " << "'" << curr_case_desc << "', "; std::string geomOut; if ( gA ) { std::cout << "'" << printGeom(gA) << "', "; } else { std::cout << "NULL, "; } if ( gB ) { std::cout << "'" << printGeom(gB) << "', "; } else { std::cout << "NULL, "; } std::cout << "'" << expected_result << "', " << "'" << actual_result << "', "; if ( success ) std::cout << "'t'"; else std::cout << "'f'"; std::cout << ");" << std::endl; } else { std::cout << *curr_file <<":"; std::cout << " case" << caseCount << ":"; std::cout << " test" << testCount << ": " << opSignature; std::cout << ": " << (success?"ok.":"failed.")<FirstChildElement("precisionModel"); if ( el ) parsePrecisionModel(el); else pm.reset(new PrecisionModel()); if (verbose > 1) { std::cerr << *curr_file <<": run: Precision Model: " << pm->toString() <FirstChild("case"); casenode; casenode = casenode->NextSibling("case") ) { try { parseCase(casenode); } catch (const std::exception& exc) { std::cerr<Attribute("type"); if ( typeStr ) type = typeStr; const char* scaleStr = el->Attribute("scale"); if ( ! scaleStr ) { if ( type == "FLOATING_SINGLE" ) { pm.reset(new PrecisionModel(PrecisionModel::FLOATING_SINGLE)); } else { pm.reset(new PrecisionModel()); } } else { char* stopstring; double scale = std::strtod(scaleStr, &stopstring); double offsetX = 0; double offsetY = 2; if ( ! el->QueryDoubleAttribute("offsetx", &offsetX) ) {} // std::cerr << "No offsetx" << std::endl; if ( ! el->QueryDoubleAttribute("offsety", &offsetY) ) {} // std::cerr << "No offsety" << std::endl; // NOTE: PrecisionModel discards offsets anyway... pm.reset(new PrecisionModel(scale, offsetX, offsetY)); } } bool XMLTester::testValid(const geom::Geometry* g, const std::string& label) { operation::valid::IsValidOp ivo(g); bool valid = ivo.isValid(); if ( ! valid ) { operation::valid::TopologyValidationError *err = ivo.getValidationError(); std::cerr << *curr_file << ":" << " case" << caseCount << ":" << " test" << testCount << ": " << opSignature << ": " << " invalid geometry (" << label << "): " << err->toString() << std::endl; } return valid; } /** * Parse WKT or HEXWKB */ geom::Geometry * XMLTester::parseGeometry(const std::string &in, const char* label) { if ( ( ! wkbreader.get() ) || ( ! wktreader.get() ) ) throw(runtime_error("No precision model specified")); std::stringstream is(in, std::ios_base::in); char first_char; // Remove leading spaces while (is.get(first_char) && std::isspace(first_char)); is.unget(); geom::Geometry* ret; switch (first_char) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': ret = wkbreader->readHEX(is); break; default: ret = wktreader->read(in); break; } if ( testValidInput ) testValid(ret, std::string(label)); //ret->normalize(); return ret; } std::string XMLTester::trimBlanks(const std::string &in) { std::string out; std::string::size_type pos = in.find_first_not_of(" \t\n\r"); if (pos!=std::string::npos) out=in.substr(pos); pos = out.find_last_not_of(" \t\n\r"); if (pos!=std::string::npos) out=out.substr(0, pos+1); return out; } void XMLTester::parseCase(const TiXmlNode* node) { assert(node); std::string geomAin; std::string geomBin; std::string thrownException; gA=NULL; gB=NULL; //dump_to_stdout(node); curr_case_desc.clear(); const TiXmlNode* txt = node->FirstChild("desc"); if ( txt ) { txt = txt->FirstChild(); if ( txt ) curr_case_desc = trimBlanks(txt->Value()); } //std::cerr << "Desc: " << curr_case_desc << std::endl; try { const TiXmlNode *el = node->FirstChild("a"); geomAin = el->FirstChild()->Value(); geomAin = trimBlanks(geomAin); gA = parseGeometry(geomAin, "Geometry A"); if ( 0 != (el = node->FirstChild("b")) ) { geomBin = el->FirstChild()->Value(); geomBin = trimBlanks(geomBin); gB = parseGeometry(geomBin, "Geometry B"); } } catch (const std::exception &e) { thrownException = e.what(); } catch (...) { thrownException = "Unknown exception"; } //std::cerr << "A: " << geomAin << std::endl; //std::cerr << "B: " << geomBin << std::endl; if ( thrownException != "" ) { std::cout << *curr_file <<":"; std::cout << " case" << caseCount << ":"; std::cout << " skipped ("<FirstChild("test"); testnode; testnode = testnode->NextSibling("test") ) { parseTest(testnode); } totalTestCount+=testCount; delete gA; delete gB; } /*private*/ void XMLTester::printGeom(std::ostream& os, const geom::Geometry *g) { os << printGeom(g); } std::string XMLTester::printGeom(const geom::Geometry *g) { if ( HEXWKB_output ) { std::stringstream s(std::ios_base::binary|std::ios_base::in|std::ios_base::out); wkbwriter->write(*g, s); std::stringstream s2; wkbreader->printHEX(s, s2); return s2.str(); } else { return wktwriter->write(g); } } void XMLTester::parseTest(const TiXmlNode* node) { using namespace operation::overlay; typedef std::auto_ptr< geom::Geometry > GeomAutoPtr; int success=0; // no success by default std::string opName; std::string opArg1; std::string opArg2; std::string opArg3; std::string opArg4; std::string opRes; ++testCount; const TiXmlNode* opnode = node->FirstChild("op"); if ( ! opnode ) throw(runtime_error("case has no op")); //dump_to_stdout(opnode); const TiXmlElement* opel = opnode->ToElement(); const char* tmp = opel->Attribute("name"); if ( tmp ) opName = tmp; tmp = opel->Attribute("arg1"); if ( tmp ) opArg1 = tmp; tmp = opel->Attribute("arg2"); if ( tmp ) opArg2 = tmp; tmp = opel->Attribute("arg3"); if ( tmp ) opArg3 = tmp; tmp = opel->Attribute("arg4"); if ( tmp ) opArg4 = tmp; const TiXmlNode* resnode = opnode->FirstChild(); if ( ! resnode ) { std::stringstream tmp; tmp << "op of test " << testCount << " of case " << caseCount << " has no expected result child"; throw(runtime_error(tmp.str())); } opRes = resnode->Value(); // trim blanks opRes=trimBlanks(opRes); opName=trimBlanks(opName); tolower(opName); std::string opSig=""; if ( opArg1 != "" ) opSig=opArg1; if ( opArg2 != "" ) { if ( opSig != "" ) opSig += ", "; opSig += opArg2; } if ( opArg3 != "" ) { if ( opSig != "" ) opSig += ", "; opSig += opArg3; } if ( opArg4 != "" ) { if ( opSig != "" ) opSig += ", "; opSig += opArg4; } opSignature = opName + "(" + opSig + ")"; std::string actual_result="NONE"; // expected_result will be modified by specific tests // if needed (geometry normalization, for example) std::string expected_result=opRes; try { util::Profile profile("op"); if (opName=="relate") { std::auto_ptr im(gA->relate(gB)); assert(im.get()); if (im->matches(opArg3)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="isvalid") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) { gT=gB; } if (gT->isValid()) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="intersection") { GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); #ifndef USE_BINARYOP GeomAutoPtr gRealRes(gA->intersection(gB)); #else GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opINTERSECTION)); #endif gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="union") { GeomAutoPtr gRes(parseGeometry(opRes, "expected")); GeomAutoPtr gRealRes; if ( gB ) { #ifndef USE_BINARYOP gRealRes.reset(gA->Union(gB)); #else gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opUNION)); #endif } else { gRealRes = gA->Union(); } if (gRes->equals(gRealRes.get())) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="difference") { GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); #ifndef USE_BINARYOP GeomAutoPtr gRealRes(gA->difference(gB)); #else GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opDIFFERENCE)); #endif gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="symdifference") { GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); #ifndef USE_BINARYOP GeomAutoPtr gRealRes(gA->symDifference(gB)); #else GeomAutoPtr gRealRes = BinaryOp(gA, gB, overlayOp(OverlayOp::opSYMDIFFERENCE)); #endif gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="intersects") { geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; if (g1->intersects(g2)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="contains") { geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; if (g1->contains(g2)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="within") { geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; if (g1->within(g2)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="covers") { geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; if (g1->covers(g2)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="coveredby") { geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; if (g1->coveredBy(g2)) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="getboundary") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); GeomAutoPtr gRealRes(gT->getBoundary()); gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="getcentroid") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); GeomAutoPtr gRealRes(gT->getCentroid()); if ( gRealRes.get() ) gRealRes->normalize(); else gRealRes.reset(factory->createPoint()); gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="issimple") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; if (gT->isSimple()) actual_result="true"; else actual_result="false"; if (actual_result==opRes) success=1; } else if (opName=="convexhull") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); GeomAutoPtr gRealRes(gT->convexHull()); gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="buffer") { using namespace operation::buffer; geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); profile.start(); GeomAutoPtr gRealRes; double dist = std::atof(opArg2.c_str()); BufferParameters params; if ( opArg3 != "" ) { params.setQuadrantSegments(std::atoi(opArg3.c_str())); } BufferOp op(gT, params); gRealRes.reset(op.getResultGeometry(dist)); profile.stop(); gRealRes->normalize(); // Validate the buffer operation success = checkBufferSuccess(*gRes, *gRealRes, dist); actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="buffersinglesided") { using namespace operation::buffer; geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); profile.start(); GeomAutoPtr gRealRes; double dist = std::atof(opArg2.c_str()); BufferParameters params ; params.setJoinStyle( BufferParameters::JOIN_ROUND ) ; if ( opArg3 != "" ) { params.setQuadrantSegments( std::atoi(opArg3.c_str())); } bool leftSide = true ; if ( opArg4 == "right" ) { leftSide = false ; } BufferBuilder bufBuilder( params ) ; gRealRes.reset( bufBuilder.bufferLineSingleSided( gT, dist, leftSide ) ) ; profile.stop(); gRealRes->normalize(); // Validate the single sided buffer operation success = checkSingleSidedBufferSuccess(*gRes, *gRealRes, dist); actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="buffermitredjoin") { using namespace operation::buffer; geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); profile.start(); GeomAutoPtr gRealRes; double dist = std::atof(opArg2.c_str()); BufferParameters params; params.setJoinStyle(BufferParameters::JOIN_MITRE); if ( opArg3 != "" ) { params.setQuadrantSegments(std::atoi(opArg3.c_str())); } BufferOp op(gT, params); gRealRes.reset(op.getResultGeometry(dist)); profile.stop(); gRealRes->normalize(); // Validate the buffer operation success = checkBufferSuccess(*gRes, *gRealRes, dist); actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="getinteriorpoint") { geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; GeomAutoPtr gRes(parseGeometry(opRes, "expected")); gRes->normalize(); GeomAutoPtr gRealRes(gT->getInteriorPoint()); if ( gRealRes.get() ) gRealRes->normalize(); else gRealRes.reset(factory->createPoint()); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="iswithindistance") { double dist=std::atof(opArg3.c_str()); if (gA->isWithinDistance(gB, dist)) { actual_result="true"; } else { actual_result="false"; } if (actual_result==opRes) success=1; } else if (opName=="polygonize") { GeomAutoPtr gRes(wktreader->read(opRes)); gRes->normalize(); Polygonizer plgnzr; plgnzr.add(gA); std::vector*polys = plgnzr.getPolygons(); std::vector*newgeoms = new std::vector; for (unsigned int i=0; isize(); i++) newgeoms->push_back((*polys)[i]); delete polys; GeomAutoPtr gRealRes(factory->createGeometryCollection(newgeoms)); gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="linemerge") { GeomAutoPtr gRes(wktreader->read(opRes)); gRes->normalize(); geom::Geometry *gT=gA; if ( ( opArg1 == "B" || opArg1 == "b" ) && gB ) gT=gB; LineMerger merger; merger.add(gT); std::auto_ptr< std::vector > lines ( merger.getMergedLineStrings() ); std::vector*newgeoms = new std::vector(lines->begin(), lines->end()); GeomAutoPtr gRealRes(factory->createGeometryCollection(newgeoms)); gRealRes->normalize(); if (gRes->compareTo(gRealRes.get())==0) success=1; actual_result=printGeom(gRealRes.get()); expected_result=printGeom(gRes.get()); if ( testValidOutput ) success &= testValid(gRealRes.get(), "result"); } else if (opName=="areatest") { char* rest; double toleratedDiff = std::strtod(opRes.c_str(), &rest); int validOut = 1; if ( rest == opRes.c_str() ) { throw std::runtime_error("malformed testcase: missing tolerated area difference in 'areatest' op"); } if ( verbose > 1 ) { std::cerr << "Running intersection for areatest" << std::endl; } #ifndef USE_BINARYOP GeomAutoPtr gI(gA->intersection(gB)); #else GeomAutoPtr gI = BinaryOp(gA, gB, overlayOp(OverlayOp::opINTERSECTION)); #endif if ( testValidOutput ) { validOut &= testValid(gI.get(), "areatest intersection"); } if ( verbose > 1 ) { std::cerr << "Running difference(A,B) for areatest" << std::endl; } #ifndef USE_BINARYOP GeomAutoPtr gDab(gA->difference(gB)); #else GeomAutoPtr gDab = BinaryOp(gA, gB, overlayOp(OverlayOp::opDIFFERENCE)); #endif if ( testValidOutput ) { validOut &= testValid(gI.get(), "areatest difference(a,b)"); } if ( verbose > 1 ) { std::cerr << "Running difference(B,A) for areatest" << std::endl; } #ifndef USE_BINARYOP GeomAutoPtr gDba(gB->difference(gA)); #else GeomAutoPtr gDba = BinaryOp(gB, gA, overlayOp(OverlayOp::opDIFFERENCE)); #endif if ( testValidOutput ) { validOut &= testValid(gI.get(), "areatest difference(b,a)"); } if ( verbose > 1 ) { std::cerr << "Running symdifference for areatest" << std::endl; } #ifndef USE_BINARYOP GeomAutoPtr gSD(gA->symDifference(gB)); #else GeomAutoPtr gSD = BinaryOp(gA, gB, overlayOp(OverlayOp::opSYMDIFFERENCE)); #endif if ( testValidOutput ) { validOut &= testValid(gI.get(), "areatest symdifference"); } if ( verbose > 1 ) { std::cerr << "Running union for areatest" << std::endl; } #ifndef USE_BINARYOP GeomAutoPtr gU(gA->Union(gB)); #else GeomAutoPtr gU = BinaryOp(gA, gB, overlayOp(OverlayOp::opUNION)); #endif double areaA = gA->getArea(); double areaB = gB->getArea(); double areaI = gI->getArea(); double areaDab = gDab->getArea(); double areaDba = gDba->getArea(); double areaSD = gSD->getArea(); double areaU = gU->getArea(); double maxdiff = 0; std::string maxdiffop; // @ : symdifference // - : difference // + : union // ^ : intersection // A == ( A ^ B ) + ( A - B ) double diff = std::fabs ( areaA - areaI - areaDab ); if ( diff > maxdiff ) { maxdiffop = "A == ( A ^ B ) + ( A - B )"; maxdiff = diff; } // B == ( A ^ B ) + ( B - A ) diff = std::fabs ( areaB - areaI - areaDba ); if ( diff > maxdiff ) { maxdiffop = "B == ( A ^ B ) + ( B - A )"; maxdiff = diff; } // ( A @ B ) == ( A - B ) + ( B - A ) diff = std::fabs ( areaDab + areaDba - areaSD ); if ( diff > maxdiff ) { maxdiffop = "( A @ B ) == ( A - B ) + ( B - A )"; maxdiff = diff; } // ( A u B ) == ( A ^ B ) + ( A @ B ) diff = std::fabs ( areaI + areaSD - areaU ); if ( diff > maxdiff ) { maxdiffop = "( A u B ) == ( A ^ B ) + ( A @ B )"; maxdiff = diff; } if ( maxdiff <= toleratedDiff ) { success = 1 && validOut; } std::stringstream tmp; tmp << maxdiffop << ": " << maxdiff; actual_result=tmp.str(); expected_result=opRes; } else if (opName=="distance") { char* rest; double distE = std::strtod(opRes.c_str(), &rest); if ( rest == opRes.c_str() ) { throw std::runtime_error("malformed testcase: missing expected result in 'distance' op"); } geom::Geometry *g1 = opArg1 == "B" ? gB : gA; geom::Geometry *g2 = opArg2 == "B" ? gB : gA; double distO = g1->distance(g2); std::stringstream ss; ss << distO; actual_result = ss.str(); // TODO: Use a tolerance ? success = ( distO == distE ) ? 1 : 0; } else { std::cerr << *curr_file << ":"; std::cerr << " case" << caseCount << ":"; std::cerr << " test" << testCount << ": " << opName << "(" << opSig << ")"; std::cerr << ": skipped (unrecognized)." << std::endl; return; } } catch (const std::exception &e) { std::cerr<<"EXCEPTION on case "< 1) { printTest(!!success, expected_result, actual_result); } if (test_predicates && gB && gA) { runPredicates(gA, gB); } } void XMLTester::runPredicates(const geom::Geometry *gA, const geom::Geometry *gB) { std::cout << "\t Equals:\tAB=" << (gA->equals(gB)?"T":"F") << ", BA=" << (gB->equals(gA)?"T":"F") << std::endl; std::cout << "\t Disjoint:\tAB=" << (gA->disjoint(gB)?"T":"F") << ", BA=" << (gB->disjoint(gA)?"T":"F") << std::endl; std::cout << "\tIntersects:\tAB=" << (gA->intersects(gB)?"T":"F") << ", BA=" << (gB->intersects(gA)?"T":"F") << std::endl; std::cout << "\t Touches:\tAB=" << (gA->touches(gB)?"T":"F") << ", BA=" << (gB->touches(gA)?"T":"F") << std::endl; std::cout << "\t Crosses:\tAB=" << (gA->crosses(gB)?"T":"F") << ", BA=" << (gB->crosses(gA)?"T":"F") << std::endl; std::cout << "\t Within:\tAB=" << (gA->within(gB)?"T":"F") << ", BA=" << (gB->within(gA)?"T":"F") << std::endl; std::cout << "\t Contains:\tAB=" << (gA->contains(gB)?"T":"F") << ", BA=" << (gB->contains(gA)?"T":"F") << std::endl; std::cout << "\t Overlaps:\tAB=" << (gA->overlaps(gB)?"T":"F") << ", BA=" << (gB->overlaps(gA)?"T":"F") << std::endl; } XMLTester::~XMLTester() { } static void usage(char *me, int exitcode, std::ostream &os) { os << "Usage: " << me << " [options] [ ...]" << std::endl; os << "Options: " << std::endl; os << " -v Verbose mode " << "(multiple -v increment verbosity)" << std::endl << "--test-valid-output Test output validity" << std::endl << "--test-valid-input Test input validity" << std::endl << "--sql-output Produce SQL output" << std::endl << "--wkb-output Print Geometries as HEXWKB" << std::endl; std::exit(exitcode); } int main(int argC, char* argV[]) { int verbose=0; bool sql_output=false; #if defined(_MSC_VER) && defined(GEOS_TEST_USE_STACKWALKER) InitAllocCheck(); { #endif if ( argC < 2 ) usage(argV[0], 1, std::cerr); XMLTester tester; tester.setVerbosityLevel(verbose); for (int i=1; i tag before returning * * Revision 1.36 2006/06/14 19:19:10 strk * Added support for "AreaTest" operations. * * Revision 1.35 2006/06/12 10:39:29 strk * don't print test file precision model if verbosity level < 2. * * Revision 1.34 2006/06/05 15:36:34 strk * Given OverlayOp funx code enum a name and renamed values to have a lowercase prefix. Drop all of noding headers from installed header set. * * Revision 1.33 2006/05/19 16:38:22 strk * * tests/xmltester/XMLTester.cpp: report * error on load of requested tests. * * Revision 1.32 2006/04/14 14:57:15 strk * XMLTester binary ops invoked using the new BinaryOp template function. * * Revision 1.31 2006/04/07 13:26:38 strk * Use of auto_ptr<> to prevent confusing leaks in tester * * Revision 1.30 2006/03/22 16:01:33 strk * indexBintree.h header split, classes renamed to match JTS * * Revision 1.29 2006/03/17 14:56:39 strk * Fixed filename normalizer for sql output **********************************************************************/ geos-3.4.2/tests/xmltester/XMLTester.h0000644000175000017500000000532512206417147017477 0ustar frankiefrankie/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2005 Refractions Research Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #ifndef GEOS_XMLTESTER_H #define GEOS_XMLTESTER_H #include #include #include "tinyxml/tinyxml.h" using namespace geos; class XMLTester { private: enum { SHOW_RUN_INFO=1, SHOW_CASE, SHOW_TEST, SHOW_RESULT, SHOW_GEOMS, SHOW_GEOMS_FULL, PRED }; void parsePrecisionModel(const TiXmlElement* el); void parseRun(const TiXmlNode* node); void parseCase(const TiXmlNode* node); void parseTest(const TiXmlNode* node); void runPredicates(const geom::Geometry *a, const geom::Geometry *b); geom::Geometry *parseGeometry(const std::string &in, const char* label="parsed"); static std::string trimBlanks(const std::string &in); void printGeom(std::ostream& os, const geom::Geometry *g); std::string printGeom(const geom::Geometry *g); void printTest(bool success, const std::string& expected_result, const std::string& actual_result); geom::Geometry *gA; geom::Geometry *gB; geom::Geometry *gT; std::auto_ptr pm; std::auto_ptr factory; std::auto_ptr wktreader; std::auto_ptr wktwriter; std::auto_ptr wkbreader; std::auto_ptr wkbwriter; TiXmlDocument xml; int verbose; int test_predicates; int failed; int succeeded; int caseCount; int testCount; std::string opSignature; int testFileCount; int totalTestCount; const std::string *curr_file; std::string curr_case_desc; bool testValidOutput; bool testValidInput; bool sqlOutput; bool HEXWKB_output; bool testValid(const geom::Geometry* g, const std::string& label); public: XMLTester(); ~XMLTester(); void run(const std::string &testFile); void resultSummary(std::ostream &os) const; void resetCounters(); /* * Values: * 0: Show case description, run tests, show result * 1: Show parsed geometry values * 2: Run predicates * * Return previously set verbosity level */ int setVerbosityLevel(int val); int getFailuresCount() { return failed; } void testOutputValidity(bool val) { testValidOutput=val; } void testInputValidity(bool val) { testValidInput=val; } void setSQLOutput(bool val) { sqlOutput=val; } void setHEXWKBOutput(bool val) { HEXWKB_output=val; } }; #endif // GEOS_XMLTESTER_H geos-3.4.2/tests/xmltester/testrunner.sh0000644000175000017500000000022412206417147020235 0ustar frankiefrankie#!/bin/sh runner=$1 shift echo "#!/bin/sh" > ${runner} echo "./XMLTester -v $@" >> ${runner} chmod +x ${runner} echo "Runner: ${runner} created" geos-3.4.2/tests/xmltester/tests/0000755000175000017500000000000012206417242016630 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/TestBufferExternal.xml0000644000175000017500000000734012206417147023136 0ustar frankiefrankie Various cases which have been reported or identified as causing buffer failures in previous versions of JTS. The cases in this file should all pass in the current version of JTS. com.vividsolutions.jtstest.testrunner.BufferResultMatcher JTS List reported error - Jan 4, 2007 Causes return of tiny polygon in Ver 1.8 and earlier POLYGON ((-2598.774169921875 61.087974548339844, -2599.804443359375 57.09324264526367, -2599.35595703125 42.387855529785156, -2595.31298828125 24.86284828186035, -2586.894287109375 7.970212459564209, -2572.63818359375 -9.27978801727295, -2560.283935546875 -18.67239761352539, -2551.49951171875 -22.76344108581543, -2539.59619140625 -22.507848739624023, -2531.886474609375 -17.93946647644043, -2531.310546875 -17.19328498840332, -2518.694580078125 -27.471830368041992, -2564.515869140625 -44.53504943847656, -2570.234619140625 -46.65970230102539, -2673.622314453125 27.439390182495117, -2682.3828125 31.62391471862793, -2698.79052734375 39.21870803833008, -2598.774169921875 61.087974548339844)) POLYGON ((-2598.9877800006584 62.06489354920029, -2597.8058559463916 60.838238598016815, -2598.80056722021 56.981393691373356, -2598.359422519401 42.51673068489857, -2594.36518642589 25.202964287692787, -2586.050417509141 8.518874855177339, -2571.9409713392497 -8.553669047985187, -2559.764298593386 -17.811272817091698, -2551.2883050682995 -21.758675476666994, -2539.8801180014552 -21.51371480841184, -2532.561054468898 -17.176813608772246, -2532.1021741477675 -16.582280683172275, -2530.6789157044022 -16.41801596133651, -2518.0629489075272 -26.696561340975183, -2518.345604985255 -28.40896236757903, -2564.166894047755 -45.4721814380136, -2564.1676040045695 -45.47244551005364, -2569.8863540045695 -47.59709837260247, -2570.8171618573137 -47.47250238913616, -2674.1330478688596 26.575123582663668, -2682.808365109433 30.71896080032791, -2699.2105884679977 38.31121222462303, -2699.784579453414 39.327613516943224, -2699.0041374225334 40.195627039190526, -2598.9877800006584 62.06489354920029)) JTS List reported error - Jan 4, 2007 Causes return of tiny polygon in Ver 1.8 and earlier POLYGON ((-2985.708251953125 16.51972770690918, -2982.37744140625 13.961258888244629, -2972.9091796875 11.138115882873535, -2956.294921875 11.763388633728027, -2941.1298828125 14.348956108093262, -2922.595458984375 19.414688110351562, -2914.568359375 -10.223998069763184, -2931.0537109375 -16.33589744567871, -2946.358642578125 -24.970754623413086, -2959.0654296875 -34.12342834472656, -2969.88330078125 -44.616554260253906, -2978.60400390625 -55.14395523071289, -2980.379638671875 -57.39796829223633, -2985.708251953125 16.51972770690918)) POLYGON ((-2986.70566366335 16.44782582720175, -2985.0990937741126 17.312776452537154, -2981.914734351797 14.8667999628029, -2972.781730022179 12.143620348943537, -2956.3982051078096 12.76020953441973, -2941.346258567696 15.3264952683113, -2922.8591038389686 20.379307926987252, -2921.6302322462557 19.676102233954516, -2913.6031326368807 -9.962583946160228, -2914.2207342589513 -11.161631675545383, -2930.6315593382983 -17.24590055998214, -2945.8190749722658 -25.814513047986875, -2958.4216504283336 -34.892123320729795, -2969.147953587571 -45.296430109246224, -2977.8260723815997 -55.7724244074717, -2979.594103917119 -58.016785833253174, -2980.672899897084 -58.35400064199699, -2981.3770503821 -57.469870171943754, -2986.70566366335 16.44782582720175)) geos-3.4.2/tests/xmltester/tests/TestBufferExternal2.xml0000644000175000017500000162646512206417147023240 0ustar frankiefrankie Basic buffer test cases. com.vividsolutions.jtstest.testrunner.BufferResultMatcher #1 Polygon - gid: 2501 POLYGON((152663.569985 545814.381985,152650.846985 545793.256985,152627.901985 545778.769985,152678.109985 545771.821985,152727.534985 545773.861985,152781.614985 545740.377985,152811.447985 545734.737985,152805.889985 545712.243985,152779.265985 545710.106985,152757.181985 545678.531985,152728.757985 545672.422985,152667.835985 545695.186985,152611.069985 545717.462985,152570.710985 545744.322985,152523.739985 545745.457985,152517.151985 545743.782985,152484.214985 545735.408985,152436.306985 545736.893985,152438.217985 545750.268985,152430.574985 545761.733985,152394.269985 545761.733985,152371.340985 545769.376985,152363.697985 545788.483985,152367.457985 545791.825985,152370.144985 545794.213985,152380.894985 545803.770985,152403.823985 545794.216985,152436.384985 545810.298985,152453.895985 545794.486985,152489.732985 545814.599985,152492.430985 545838.063985,152521.966985 545844.735985,152539.616985 545818.847985,152582.766985 545797.723985,152629.325985 545840.687985,152634.972885 545846.287385,152649.676985 545837.847985,152663.569985 545814.381985)) POLYGON( EMPTY) #2 Polygon - gid: 2502 POLYGON((142903.674985 525488.153985,142887.424985 525486.421985,142876.299985 525510.439985,142859.487985 525524.993985,142857.580985 525565.813985,142858.104985 525616.072985,142881.339985 525658.486985,142907.528985 525716.283985,142929.703985 525786.082985,142957.279985 525858.237985,142960.930985 525890.791985,142975.490985 525922.709985,142984.234985 525947.127985,142986.419985 525953.232985,142993.173985 525984.254985,143000.571985 526013.485985,143007.015985 526020.469985,143016.093985 526003.985985,143035.005985 525986.830985,143053.948985 525965.933985,143071.269985 525941.972985,143091.351985 525917.505985,143099.479985 525910.991985,143095.500985 525903.225985,143092.658985 525881.416985,143085.816985 525850.459985,143076.886985 525815.718985,143061.518985 525786.881985,143044.455985 525757.313985,143032.301985 525728.902985,143013.483985 525713.680985,143000.030985 525684.275985,143000.320985 525648.294985,143005.159985 525613.976985,143003.725985 525572.864985,143004.494985 525550.515985,143001.962985 525548.017985,142985.622985 525535.307985,142974.204985 525515.602985,142968.977985 525509.074985,142939.044985 525498.260985,142903.674985 525488.153985)) POLYGON( EMPTY) #3 Polygon - gid: 2503 POLYGON((146220.994985 549967.552985,146213.166985 549966.121985,146208.007985 549968.568985,146206.036985 549974.608985,146205.864985 549983.214985,146206.109985 549988.066985,146208.381985 549999.999985,146322.285985 549999.999985,146316.339985 549994.911985,146312.438985 549992.675985,146308.350985 549990.750985,146302.286985 549988.489985,146293.636985 549985.962985,146269.463985 549981.745985,146257.525985 549979.090985,146240.391985 549974.375985,146234.981985 549972.660985,146220.994985 549967.552985)) POLYGON( EMPTY) #4 Polygon - gid: 2504 POLYGON((144896.566985 524882.672985,144899.299985 524881.825985,144903.913985 524879.874985,144908.281985 524877.329985,144911.797985 524874.348985,144913.851985 524871.090985,144914.168985 524869.389985,144913.622985 524865.233985,144911.859985 524860.681985,144909.399985 524856.197985,144906.748985 524852.222985,144903.927985 524848.842985,144900.666985 524845.737985,144897.109985 524842.856985,144889.669985 524837.573985,144883.779985 524833.850985,144879.800985 524831.683985,144875.716985 524829.743985,144871.552985 524828.061985,144867.693985 524826.762985,144863.373985 524825.537985,144816.049985 524814.269985,144768.463985 524802.145985,144743.475985 524796.359985,144724.202985 524791.404985,144714.293985 524789.489985,144705.353985 524788.164985,144700.870985 524787.764985,144696.389985 524787.619985,144689.024985 524787.828985,144680.046985 524788.515985,144662.118985 524790.538985,144653.609985 524791.745985,144640.283985 524793.947985,144634.330985 524794.724985,144629.764985 524794.975985,144620.521985 524795.100985,144615.989985 524795.370985,144611.611985 524796.041985,144606.579985 524797.679985,144602.565985 524799.585985,144598.598985 524801.833985,144594.733985 524804.380985,144591.026985 524807.186985,144587.534985 524810.208985,144584.313985 524813.405985,144581.419985 524816.734985,144581.806985 524818.560985,144583.642985 524822.862985,144586.460985 524826.772985,144589.858985 524829.672985,144591.561985 524830.552985,144595.734985 524831.793985,144604.956985 524833.056985,144609.445985 524833.994985,144619.190985 524837.204985,144627.621985 524840.384985,144636.348985 524843.925985,144652.801985 524851.249985,144701.221985 524871.437985,144720.997985 524878.409985,144729.636985 524881.012985,144733.994985 524882.035985,144740.905985 524883.100985,144745.358985 524883.385985,144749.845985 524883.427985,144772.449985 524882.398985,144799.041985 524881.859985,144816.235985 524881.915985,144834.523985 524882.327985,144857.002985 524883.450985,144883.361985 524884.143985,144887.877985 524883.994985,144892.292985 524883.537985,144896.566985 524882.672985)) POLYGON( EMPTY) #5 Polygon - gid: 2505 POLYGON((144446.439985 524841.154985,144441.934985 524841.141985,144435.845985 524841.674985,144425.648985 524843.342985,144420.748985 524844.729985,144417.119985 524846.780985,144415.753985 524848.861985,144415.428985 524852.340985,144416.080985 524856.335985,144417.458985 524860.698985,144419.313985 524865.282985,144423.459985 524874.528985,144425.249985 524878.896985,144427.325985 524883.109985,144429.289985 524885.370985,144439.587985 524894.381985,144443.173985 524897.220985,144446.878985 524899.799985,144450.724985 524902.010985,144453.174985 524903.142985,144457.321985 524904.547985,144461.659985 524905.496985,144466.133985 524906.119985,144479.827985 524907.342985,144483.155985 524907.782985,144517.007985 524913.042985,144521.480985 524913.453985,144530.608985 524913.781985,144550.777985 524913.633985,144559.793985 524913.451985,144568.795985 524913.012985,144574.880985 524912.364985,144579.291985 524911.566985,144594.257985 524907.594985,144607.560985 524904.598985,144611.775985 524903.277985,144615.327985 524899.282985,144614.465985 524894.617985,144613.841985 524893.603985,144607.933985 524886.826985,144601.507985 524880.434985,144594.663985 524874.523985,144591.115985 524871.777985,144586.969985 524868.873985,144583.162985 524866.495985,144575.256985 524862.134985,144558.682985 524853.946985,144554.551985 524852.069985,144550.343985 524850.422985,144546.048985 524849.133985,144540.520985 524848.023985,144536.086985 524847.329985,144522.628985 524845.891985,144507.564985 524844.759985,144480.579985 524843.741985,144461.960985 524842.043985,144446.439985 524841.154985)) POLYGON( EMPTY) #6 Polygon - gid: 2506 POLYGON((144455.196985 524980.805985,144461.047985 524980.714985,144465.526985 524981.158985,144474.517985 524982.448985,144479.009985 524982.843985,144490.646985 524982.725985,144495.270985 524982.522985,144499.829985 524982.093985,144504.251985 524981.331985,144508.466985 524980.130985,144509.918985 524979.570985,144513.913985 524977.623985,144517.852985 524975.167985,144521.610985 524972.300985,144525.060985 524969.118985,144528.074985 524965.720985,144530.334985 524962.519985,144532.084985 524958.448985,144532.948985 524953.701985,144532.919985 524948.863985,144531.990985 524944.516985,144529.776985 524940.368985,144526.744985 524936.825985,144523.097985 524933.699985,144519.179985 524931.193985,144517.924985 524930.555985,144513.860985 524929.018985,144509.523985 524927.994985,144493.342985 524925.809985,144437.476985 524916.661985,144433.088985 524915.698985,144428.782985 524914.494985,144423.543985 524912.609985,144419.404985 524910.860985,144411.280985 524906.906985,144400.576985 524901.079985,144396.728985 524898.765985,144393.000985 524896.236985,144385.751985 524890.870985,144381.960985 524887.848985,144375.108985 524881.988985,144371.554985 524879.239985,144363.304985 524873.572985,144355.718985 524868.636985,144347.909985 524864.180985,144344.379985 524862.452985,144340.237985 524860.702985,144335.937985 524859.212985,144331.535985 524858.026985,144327.084985 524857.185985,144323.250985 524856.770985,144318.804985 524856.633985,144309.840985 524857.119985,144296.319985 524858.530985,144291.864985 524858.855985,144278.326985 524858.971985,144273.869985 524859.393985,144269.275985 524860.279985,144251.862985 524864.968985,144247.472985 524865.953985,144238.178985 524867.630985,144229.241985 524868.924985,144219.237985 524869.738985,144214.767985 524869.549985,144205.816985 524868.188985,144200.865985 524867.789985,144191.538985 524867.752985,144186.945985 524868.099985,144182.709985 524869.007985,144181.284985 524869.531985,144177.852985 524872.620985,144176.025985 524877.123985,144175.996985 524878.261985,144176.451985 524882.564985,144177.369985 524887.022985,144178.706985 524891.527985,144180.417985 524895.971985,144182.460985 524900.245985,144184.791985 524904.243985,144188.570985 524909.302985,144191.772985 524912.018985,144195.672985 524914.042985,144208.945985 524918.742985,144213.022985 524920.777985,144217.149985 524923.817985,144220.469985 524926.853985,144226.873985 524933.289985,144230.199985 524936.340985,144232.588985 524938.226985,144239.984985 524943.454985,144247.712985 524948.238985,144251.712985 524950.295985,144255.808985 524952.038985,144260.553985 524953.530985,144264.923985 524954.479985,144269.384985 524955.181985,144282.909985 524956.875985,144311.048985 524961.124985,144317.314985 524962.407985,144321.673985 524963.513985,144325.997985 524964.818985,144330.259985 524966.323985,144337.091985 524969.241985,144349.052985 524975.446985,144371.128985 524988.101985,144374.990985 524990.509985,144382.600985 524995.675985,144386.503985 524997.875985,144390.576985 524999.444985,144395.149985 525000.415985,144399.750985 525000.903985,144404.419985 525000.929985,144408.992985 525000.459985,144413.301985 524999.458985,144417.441985 524997.544985,144421.099985 524994.911985,144428.244985 524988.981985,144432.035985 524986.535985,144437.425985 524984.344985,144441.760985 524983.043985,144446.208985 524982.029985,144450.707985 524981.288985,144455.196985 524980.805985)) POLYGON( EMPTY) #7 Polygon - gid: 2507 POLYGON((144180.284985 525120.032985,144183.832985 525116.794985,144186.310985 525113.187985,144186.773985 525112.080985,144187.835985 525108.131985,144188.392985 525103.916985,144188.543985 525099.491985,144188.385985 525094.909985,144188.017985 525090.227985,144186.627985 525076.124985,144185.841985 525059.007985,144185.204985 525050.018985,144184.199985 525041.093985,144182.718985 525031.683985,144181.494985 525027.301985,144179.611985 525023.346985,144176.818985 525019.465985,144173.767985 525015.993985,144170.357985 525012.802985,144166.672985 525010.048985,144162.791985 525007.884985,144158.428985 525006.304985,144154.095985 525005.337985,144140.459985 525003.668985,144135.956985 525002.943985,144132.489985 525002.111985,144128.279985 525000.587985,144116.048985 524994.706985,144112.117985 524993.299985,144098.939985 524989.717985,144094.477985 524988.770985,144090.015985 524988.064985,144085.573985 524987.673985,144082.099985 524987.632985,144077.708985 524988.016985,144073.317985 524988.862985,144068.938985 524990.056985,144060.269985 524993.031985,144056.006985 524994.585985,144051.298985 524996.571985,144039.237985 525003.001985,144035.090985 525004.553985,144033.429985 525004.964985,144029.061985 525005.651985,144024.594985 525005.978985,144020.064985 525006.023985,144015.503985 525005.866985,144005.304985 525005.175985,144000.845985 525004.540985,143991.981985 525002.425985,143987.562985 525001.659985,143984.325985 525001.504985,143979.862985 525001.775985,143975.358985 525002.379985,143970.879985 525003.298985,143966.493985 525004.512985,143962.267985 525006.001985,143957.854985 525007.995985,143953.888985 525010.251985,143950.109985 525012.839985,143946.599985 525015.694985,143944.902985 525017.266985,143941.891985 525020.593985,143939.241985 525024.341985,143937.049985 525028.360985,143935.728985 525031.561985,143947.089985 525038.847985,143958.611985 525045.903985,143978.120985 525057.118985,143986.179985 525061.258985,144002.539985 525068.796985,144015.419985 525074.941985,144023.406985 525079.086985,144032.735985 525085.069985,144047.490985 525095.410985,144052.695985 525098.806985,144056.554985 525101.113985,144071.198985 525108.843985,144087.471985 525116.537985,144095.654985 525120.979985,144099.734985 525122.957985,144103.931985 525124.188985,144108.802985 525124.422985,144113.258985 525123.960985,144122.292985 525122.295985,144135.544985 525120.385985,144140.040985 525119.859985,144144.496985 525119.751985,144146.224985 525119.877985,144150.651985 525120.958985,144159.475985 525124.711985,144163.736985 525125.992985,144167.459985 525126.023985,144171.674985 525124.798985,144176.090985 525122.751985,144180.284985 525120.032985)) POLYGON( EMPTY) #8 Polygon - gid: 2508 POLYGON((145511.322985 525055.058985,145421.842985 525011.893985,145360.382985 525010.401985,145268.686985 525018.327985,145146.589985 524998.812985,145037.826985 525008.605985,144973.835985 525025.487985,145025.537985 525040.060985,145053.665985 525046.467985,145095.857985 525056.078985,145116.953985 525060.883985,145237.680985 525091.930985,145337.492985 525112.002985,145422.613985 525124.136985,145582.586985 525143.477985,145594.862985 525133.291985,145599.488985 525122.480985,145601.426985 525108.224985,145582.118985 525096.831985,145543.502985 525074.046985,145511.322985 525055.058985)) POLYGON( EMPTY) #9 Polygon - gid: 2509 POLYGON((144327.439985 525055.359985,144323.575985 525054.083985,144319.137985 525053.820985,144309.540985 525054.540985,144304.876985 525054.629985,144288.008985 525053.381985,144279.029985 525053.080985,144271.827985 525053.508985,144258.386985 525054.981985,144243.660985 525055.827985,144230.778985 525056.779985,144226.202985 525057.165985,144221.779985 525057.904985,144216.743985 525059.629985,144212.867985 525061.883985,144209.230985 525064.754985,144205.958985 525068.049985,144203.179985 525071.576985,144199.872985 525077.084985,144197.994985 525081.332985,144196.679985 525085.738985,144196.099985 525090.172985,144195.983985 525096.039985,144196.147985 525105.052985,144196.712985 525114.141985,144198.291985 525127.709985,144199.820985 525136.570985,144200.724985 525140.909985,144204.646985 525148.438985,144214.701985 525150.449985,144224.757985 525146.427985,144239.841985 525143.410985,144256.935985 525142.405985,144273.025985 525137.377985,144284.086985 525131.343985,144293.136985 525124.304985,144300.175985 525117.265985,144311.054985 525104.626985,144312.513985 525103.587985,144316.441985 525102.209985,144321.398985 525100.876985,144326.356985 525099.200985,144330.789985 525096.313985,144333.887985 525092.901985,144336.779985 525088.924985,144339.157985 525084.646985,144340.713985 525080.335985,144341.139985 525076.255985,144340.875985 525074.291985,144339.526985 525070.035985,144337.293985 525065.704985,144334.418985 525061.624985,144331.142985 525058.119985,144327.439985 525055.359985)) POLYGON( EMPTY) #10 Polygon - gid: 2510 POLYGON((144510.896985 525506.174985,144491.815985 525502.887985,144452.960985 525504.373985,144356.543985 525498.078985,144342.420985 525498.616985,144329.347985 525503.644985,144327.336985 525503.644985,144316.275985 525508.672985,144310.241985 525515.711985,144314.264985 525527.778985,144324.779985 525538.713985,144356.897985 525552.292985,144379.210985 525556.506985,144460.334985 525561.721985,144473.144985 525559.956985,144485.211985 525553.922985,144497.278985 525540.850985,144512.361985 525525.766985,144520.406985 525516.716985,144517.389985 525510.683985,144510.896985 525506.174985)) POLYGON( EMPTY) #11 Polygon - gid: 2511 POLYGON((145442.154985 525572.074985,145501.507985 525553.758985,145522.070985 525554.647985,145516.394985 525541.746985,145505.936985 525519.454985,145532.899985 525496.685985,145547.030985 525513.347985,145591.958985 525554.366985,145632.751985 525552.852985,145668.799985 525544.771985,145702.316985 525529.254985,145724.534985 525515.925985,145745.168985 525499.920985,145723.440985 525498.117985,145705.446985 525491.319985,145691.799985 525487.926985,145650.858985 525477.747985,145578.241985 525453.820985,145543.290985 525453.401985,145502.225985 525452.909985,145398.531985 525436.386985,145380.777985 525443.215985,145344.364985 525481.970985,145328.089985 525529.882985,145370.877985 525553.686985,145442.154985 525572.074985)) POLYGON( EMPTY) #12 Polygon - gid: 2512 POLYGON((144625.991985 525513.700985,144598.841985 525508.672985,144583.757985 525509.677985,144566.662985 525514.705985,144552.584985 525519.733985,144542.529985 525530.794985,144526.439985 525542.861985,144519.400985 525555.934985,144519.400985 525571.017985,144522.417985 525577.051985,144538.506985 525584.090985,144554.595985 525589.117985,144566.662985 525595.151985,144585.768985 525597.162985,144602.863985 525597.162985,144612.919985 525594.145985,144623.980985 525590.123985,144647.108985 525580.067985,144660.180985 525574.034985,144674.259985 525562.973985,144689.342985 525551.911985,144692.359985 525544.872985,144691.353985 525537.833985,144678.281985 525530.794985,144658.169985 525524.761985,144625.991985 525513.700985)) POLYGON( EMPTY) #13 Polygon - gid: 2513 POLYGON((146081.670985 525417.759985,146034.312985 525383.398985,146018.183985 525405.148985,145997.047985 525436.541985,145975.994985 525451.787985,145927.068985 525472.385985,145872.869985 525488.849985,145830.388985 525510.994985,145793.352985 525537.222985,145768.063985 525549.233985,145754.442985 525585.944985,145741.111985 525601.945985,145729.163985 525609.328985,145747.791985 525621.222985,145785.820985 525616.608985,145835.405985 525606.033985,145888.006985 525585.051985,145922.153985 525572.522985,145965.920985 525551.110985,145987.088985 525544.372985,146029.350985 525531.069985,146071.462985 525518.113985,146123.223985 525504.811985,146160.742985 525500.837985,146164.508985 525498.816985,146132.472985 525456.997985,146081.670985 525417.759985)) POLYGON( EMPTY) #14 Polygon - gid: 2514 POLYGON((147625.665985 525733.355985,147685.615985 525723.612985,147746.451985 525726.828985,147807.643985 525705.752985,147778.828985 525680.379985,147736.635985 525673.137985,147681.802985 525656.781985,147634.046985 525660.702985,147593.909985 525649.092985,147543.925985 525630.287985,147525.748985 525647.754985,147521.204985 525652.120985,147486.998985 525649.400985,147473.315985 525648.312985,147433.858985 525642.752985,147433.938985 525662.319985,147457.769985 525676.556985,147464.271985 525685.355985,147463.991985 525695.137985,147478.318985 525707.779985,147479.694885 525707.945085,147513.227985 525711.970985,147572.805985 525729.496985,147625.665985 525733.355985)) POLYGON( EMPTY) #15 Polygon - gid: 2515 POLYGON((149067.995985 525965.488985,149025.297985 525963.470985,148994.143985 525964.208985,148997.616985 525989.339985,149029.151985 526015.805985,149120.123985 526059.526985,149131.062985 526066.577985,149148.502985 526077.820985,149183.975985 526087.501985,149232.395985 526086.935985,149294.555985 526084.930985,149312.038985 526079.485985,149314.993985 526078.565985,149316.243985 526056.762985,149244.224985 526035.142985,149176.959985 526005.418985,149113.972985 525980.563985,149067.995985 525965.488985)) POLYGON( EMPTY) #16 Polygon - gid: 2516 POLYGON((150716.409985 526216.711985,150707.088985 526192.800985,150622.180985 526127.431985,150583.008985 526115.338985,150539.865985 526092.923985,150506.113985 526087.030985,150457.230985 526063.119985,150414.652985 526045.317985,150412.516485 526044.107285,150403.373985 526054.606985,150398.109985 526096.678985,150386.500985 526126.603985,150356.405985 526157.275985,150349.132985 526185.598985,150364.836985 526203.184985,150392.348985 526202.980985,150449.647985 526187.409985,150479.794985 526174.863985,150494.337985 526175.134985,150530.693985 526175.812985,150537.911985 526177.023985,150588.433985 526185.497985,150654.506985 526212.614985,150706.931985 526211.847985,150716.409985 526216.711985)) POLYGON( EMPTY) #17 Polygon - gid: 2517 POLYGON((142576.939985 544993.306985,142591.447985 544982.626985,142598.216985 544976.869985,142601.519985 544973.710985,142604.578985 544970.396985,142606.691985 544967.715985,142607.297985 544962.618985,142603.363985 544961.993985,142598.959985 544961.672985,142594.273985 544961.623985,142589.490985 544961.812985,142582.524985 544962.474985,142578.110985 544963.214985,142573.719985 544964.260985,142569.373985 544965.557985,142561.217985 544968.551985,142557.131985 544970.386985,142553.145985 544972.465985,142545.288985 544976.918985,142529.062985 544985.730985,142525.008985 544987.637985,142521.706985 544988.893985,142517.221985 544989.644985,142511.940985 544988.902985,142507.623985 544990.118985,142503.346985 544991.624985,142499.158985 544993.401985,142495.106985 544995.428985,142491.643985 544997.434985,142488.002985 545000.007985,142484.572985 545002.922985,142477.897985 545009.067985,142474.427985 545011.944985,142468.738985 545015.692985,142464.809985 545017.875985,142452.730985 545023.989985,142433.515985 545034.313985,142415.405985 545044.738985,142396.233985 545056.516985,142390.894985 545059.567985,142382.948985 545063.811985,142374.326985 545067.766985,142365.958985 545071.089985,142353.644985 545075.660985,142323.390985 545086.250985,142304.370985 545093.446985,142300.236985 545095.217985,142296.256985 545097.143985,142292.326985 545099.358985,142288.519985 545101.843985,142284.895985 545104.541985,142282.462985 545106.558985,142280.138985 545111.115985,142283.834985 545112.105985,142288.493985 545112.673985,142293.452985 545112.769985,142297.356985 545112.450985,142301.654985 545111.424985,142305.872985 545109.806985,142313.771985 545106.396985,142329.263985 545100.265985,142342.005985 545095.779985,142350.590985 545093.089985,142360.163985 545090.637985,142374.837985 545087.416985,142388.124985 545084.842985,142392.515985 545083.872985,142396.843985 545082.667985,142401.034985 545081.083985,142413.291985 545075.346985,142419.186985 545073.209985,142427.794985 545070.561985,142434.889985 545068.590985,142452.450985 545064.549985,142456.788985 545063.385985,142462.902985 545061.340985,142471.265985 545058.003985,142481.625985 545053.473985,142500.169985 545044.593985,142516.816985 545037.701985,142520.898985 545035.827985,142526.185985 545033.097985,142534.018985 545028.599985,142537.797985 545026.147985,142541.355985 545023.602985,142544.809985 545020.751985,142554.510985 545011.319985,142561.212985 545005.502985,142576.939985 544993.306985)) POLYGON( EMPTY) #18 Polygon - gid: 2518 POLYGON((142142.650985 544835.425985,142145.030985 544834.924985,142149.928985 544836.666985,142147.868985 544839.863985,142145.054985 544843.328985,142141.764985 544846.863985,142135.589985 544852.711985,142131.385985 544855.469985,142121.934985 544860.323985,142119.418985 544862.762985,142120.643985 544866.423985,142123.832985 544869.166985,142142.007985 544880.482985,142146.185985 544882.686985,142150.034985 544885.110985,142152.992985 544888.177985,142154.918985 544892.177985,142156.098985 544896.476985,142157.758985 544905.619985,142158.869985 544910.072985,142159.515985 544911.889985,142161.471985 544915.923985,142166.292985 544923.628985,142168.551985 544927.529985,142170.143985 544931.144985,142171.234985 544935.498985,142172.207985 544944.679985,142172.887985 544949.148985,142174.226985 544953.296985,142176.709985 544957.283985,142179.723985 544960.618985,142201.533985 544980.806985,142208.081985 544987.628985,142214.086985 544994.480985,142216.762985 544998.084985,142218.813985 545001.396985,142220.731985 545005.664985,142221.760985 545010.296985,142221.410985 545013.929985,142219.731985 545017.878985,142217.358985 545021.757985,142214.506985 545025.474985,142211.394985 545028.938985,142209.403985 545030.945985,142205.982985 545033.801985,142202.150985 545036.254985,142198.084985 545038.353985,142194.906985 545039.761985,142190.673985 545041.191985,142181.848985 545043.208985,142175.903985 545044.966985,142167.646985 545048.537985,142159.620985 545052.668985,142151.626985 545057.376985,142144.153985 545062.424985,142140.530985 545065.106985,142133.753985 545070.520985,142130.329985 545073.481985,142127.047985 545076.586985,142123.979985 545079.866985,142120.258985 545084.585985,142117.704985 545088.320985,142115.321985 545092.177985,142111.638985 545098.836985,142110.590985 545104.805985,142114.324985 545106.169985,142118.865985 545107.103985,142123.727985 545107.542985,142128.424985 545107.422985,142133.319985 545106.555985,142137.609985 545105.268985,142146.150985 545102.097985,142152.816985 545099.968985,142161.600985 545098.020985,142170.475985 545096.461985,142179.596985 545095.135985,142193.021985 545093.676985,142203.872985 545092.852985,142217.391985 545092.380985,142223.658985 545091.743985,142228.073985 545090.957985,142236.822985 545088.833985,142260.302985 545082.618985,142275.993985 545078.035985,142284.552985 545075.245985,142292.377985 545072.316985,142304.771985 545066.945985,142315.772985 545061.600985,142326.339985 545055.888985,142334.073985 545051.287985,142344.223985 545044.758985,142358.879985 545034.305985,142372.971985 545025.050985,142382.274985 545019.649985,142386.325985 545017.721985,142394.717985 545014.429985,142415.323985 545006.078985,142427.651985 545000.555985,142435.089985 544996.886985,142439.032985 544994.722985,142446.714985 544990.017985,142457.124985 544983.221985,142464.485985 544977.997985,142467.866985 544975.111985,142470.779985 544971.360985,142476.685985 544960.284985,142479.910985 544956.180985,142483.304985 544953.234985,142493.778985 544944.676985,142496.933985 544941.723985,142499.886985 544938.302985,142505.255985 544930.884985,142508.155985 544927.477985,142510.754985 544925.197985,142514.462985 544922.808985,142518.456985 544920.774985,142522.642985 544918.997985,142537.322985 544913.615985,142545.912985 544910.920985,142554.584985 544908.470985,142570.055985 544904.514985,142609.687985 544895.396985,142618.402985 544893.149985,142625.191985 544891.116985,142633.745985 544888.300985,142642.213985 544885.246985,142647.284985 544883.222985,142659.650985 544877.784985,142663.825985 544876.113985,142672.611985 544873.031985,142681.231985 544870.419985,142688.566985 544868.542985,142701.784985 544865.776985,142712.430985 544863.748985,142735.115985 544859.827985,142748.404985 544857.440985,142759.820985 544854.793985,142772.902985 544851.448985,142791.990985 544847.041985,142836.872985 544838.059985,142856.026985 544833.591985,142866.014985 544830.834985,142870.276985 544829.394985,142882.911985 544824.582985,142891.044985 544822.276985,142899.893985 544820.435985,142907.005985 544819.604985,142911.480985 544819.457985,142915.973985 544819.549985,142931.392985 544820.445985,142949.396985 544820.976985,142953.877985 544821.305985,142963.412985 544822.566985,142997.291985 544828.686985,143001.762985 544829.190985,143015.237985 544830.244985,143021.078985 544830.979985,143029.925985 544832.658985,143034.317985 544833.689985,143042.431985 544835.985985,143046.664985 544837.487985,143059.123985 544842.750985,143063.328985 544844.341985,143069.061985 544846.084985,143073.419985 544847.201985,143091.561985 544851.204985,143104.799985 544853.865985,143117.818985 544855.976985,143131.660985 544857.736985,143149.611985 544859.148985,143158.523985 544860.304985,143171.796985 544862.806985,143187.420985 544865.182985,143195.694985 544866.198985,143218.129985 544867.941985,143229.421985 544869.235985,143238.331985 544870.546985,143242.752985 544871.361985,143248.974985 544872.787985,143245.893985 544864.243985,143243.278985 544855.627985,143239.596985 544845.254985,143238.703985 544840.809985,143239.565985 544838.343985,143242.559985 544836.757985,143246.782985 544835.973985,143251.747985 544835.772985,143256.966985 544835.932985,143263.459985 544836.324985,143267.887985 544836.914985,143281.079985 544840.308985,143285.493985 544841.010985,143291.165985 544841.147985,143295.708985 544840.906985,143300.240985 544840.360985,143304.693985 544839.501985,143308.795985 544838.387985,143312.930985 544836.782985,143316.929985 544834.744985,143328.699985 544827.895985,143340.615985 544821.459985,143349.622985 544816.936985,143353.765985 544815.199985,143379.048985 544806.047985,143383.197985 544804.295985,143387.085985 544802.178985,143391.866985 544798.607985,143395.237985 544795.519985,143398.377985 544792.144985,143401.217985 544788.550985,143403.683985 544784.802985,143406.240985 544779.636985,143407.710985 544775.344985,143408.807985 544770.880985,143409.578985 544766.357985,143410.053985 544762.114985,143410.135985 544757.674985,143409.747985 544753.192985,143409.089985 544748.693985,143407.345985 544737.228985,143405.081985 544723.917985,143403.266985 544711.498985,143400.336985 544688.230985,143398.896985 544674.807985,143397.734985 544659.841985,143397.090985 544646.826985,143396.850985 544637.820985,143396.972985 544632.012985,143396.751985 544622.050985,143396.978985 544617.243985,143398.170985 544613.367985,143399.194985 544612.065985,143402.692985 544610.512985,143407.447985 544610.199985,143412.699985 544610.353985,143417.686985 544610.201985,143421.647985 544608.970985,143424.221985 544605.463985,143425.185985 544600.971985,143426.503985 544586.295985,143426.695985 544576.790985,143427.602985 544572.592985,143428.607985 544570.612985,143431.663985 544567.852985,143435.852985 544565.881985,143440.409985 544564.122985,143444.574985 544561.998985,143446.602985 544560.270985,143449.266985 544556.772985,143451.512985 544552.774985,143453.316985 544548.468985,143454.651985 544544.046985,143455.302985 544540.930985,143455.737985 544536.554985,143455.685985 544532.081985,143455.310985 544527.548985,143454.248985 544518.460985,143453.293985 544507.420985,143452.183985 544498.480985,143451.387985 544494.277985,143450.256985 544489.941985,143444.947985 544474.661985,143441.252985 544461.587985,143439.691985 544457.395985,143436.586985 544451.416985,143434.254985 544447.469985,143431.718985 544443.640985,143428.959985 544440.027985,143425.961985 544436.729985,143424.373985 544435.233985,143420.802985 544432.682985,143416.748985 544430.681985,143412.436985 544429.034985,143402.691985 544425.747985,143398.354985 544424.509985,143389.557985 544422.502985,143382.443985 544421.349985,143377.969985 544420.862985,143361.255985 544419.733985,143322.639985 544418.450985,143317.223985 544418.508985,143307.965985 544419.035985,143303.487985 544418.885985,143299.248985 544418.062985,143294.848985 544416.073985,143291.138985 544413.485985,143287.645985 544410.410985,143284.360985 544407.112985,143282.416985 544405.061985,143279.570985 544401.609985,143272.098985 544390.222985,143269.351985 544386.691985,143264.746985 544382.250985,143261.177985 544379.420985,143257.402985 544376.844985,143253.487985 544374.564985,143250.331985 544372.994985,143246.011985 544371.209985,143241.373985 544369.908985,143236.897985 544369.654985,143234.944985 544370.069985,143230.996985 544371.823985,143227.070985 544374.360985,143223.425985 544377.476985,143220.320985 544380.965985,143218.559985 544383.604985,143216.857985 544387.535985,143215.805985 544391.869985,143215.175985 544396.447985,143213.672985 544410.851985,143212.338985 544428.813985,143211.334985 544435.596985,143204.880985 544467.076985,143202.713985 544478.328985,143195.991985 544515.066985,143188.876985 544557.021985,143187.823985 544561.374985,143184.665985 544571.935985,143182.777985 544576.196985,143180.223985 544579.484985,143175.783985 544581.612985,143171.287985 544582.118985,143155.656985 544581.868985,143136.206985 544580.819985,143122.601985 544580.581985,143118.118985 544580.285985,143113.728985 544579.627985,143108.946985 544578.417985,143104.513985 544576.714985,143100.732985 544574.296985,143099.409985 544572.940985,143097.056985 544569.351985,143095.214985 544565.213985,143093.790985 544560.757985,143092.692985 544556.218985,143091.497985 544549.010985,143091.198985 544544.529985,143091.120985 544540.004985,143091.190985 544525.360985,143091.987985 544506.978985,143093.802985 544482.938985,143096.515985 544453.401985,143097.660985 544445.625985,143100.216985 544432.363985,143102.727985 544417.272985,143103.883985 544408.352985,143104.696985 544397.702985,143104.824985 544393.173985,143104.700985 544388.683985,143104.380985 544385.282985,143103.655985 544380.423985,143102.277985 544375.659985,143099.755985 544372.531985,143095.802985 544371.270985,143091.229985 544370.919985,143086.346985 544371.240985,143081.583985 544372.059985,143079.325985 544372.617985,143075.204985 544374.152985,143071.230985 544376.260985,143063.417985 544381.056985,143059.424985 544383.176985,143057.485985 544383.999985,143052.909985 544385.539985,143048.244985 544386.078985,143045.943985 544385.387985,143042.625985 544382.880985,143039.587985 544379.631985,143030.944985 544368.616985,143018.916985 544355.157985,143006.538985 544342.290985,143003.228985 544339.249985,143000.059985 544336.689985,142996.399985 544334.047985,142992.577985 544331.547985,142988.612985 544329.303985,142984.520985 544327.429985,142981.796985 544326.464985,142977.495985 544325.372985,142973.057985 544324.651985,142963.981985 544323.950985,142953.878985 544323.685985,142949.368985 544323.805985,142940.377985 544324.559985,142928.660985 544326.438985,142919.876985 544328.519985,142915.586985 544329.838985,142910.935985 544331.578985,142906.815985 544333.396985,142898.760985 544337.492985,142891.323985 544341.669985,142883.714985 544346.485985,142873.049985 544353.650985,142865.638985 544358.793985,142862.071985 544361.528985,142852.868985 544369.200985,142849.644985 544372.462985,142847.241985 544376.065985,142846.832985 544377.001985,142845.639985 544381.155985,142845.045985 544385.649985,142844.939985 544390.314985,142845.205985 544394.983985,142845.730985 544399.487985,142847.359985 544404.070985,142849.883985 544408.193985,142851.902985 544412.235985,142852.270985 544414.588985,142851.234985 544418.764985,142848.804985 544422.901985,142845.666985 544426.437985,142841.451985 544429.726985,142837.382985 544432.073985,142833.070985 544433.782985,142829.180985 544434.554985,142824.843985 544434.518985,142820.388985 544433.803985,142815.908985 544432.626985,142808.656985 544430.234985,142804.514985 544428.545985,142792.485985 544422.309985,142789.356985 544420.953985,142780.856985 544417.736985,142776.523985 544416.379985,142772.150985 544415.400985,142769.493985 544415.056985,142765.048985 544415.082985,142751.517985 544417.132985,142747.071985 544417.221985,142741.891985 544416.537985,142737.389985 544415.594985,142732.957985 544414.305985,142728.713985 544412.646985,142724.776985 544410.591985,142720.722985 544407.567985,142717.590985 544404.379985,142708.851985 544393.768985,142695.798985 544379.805985,142685.746985 544368.505985,142681.717985 544363.733985,142676.115985 544356.691985,142646.529985 544317.476985,142637.252985 544305.929985,142629.738985 544297.399985,142626.583985 544294.195985,142619.961985 544288.074985,142606.708985 544277.250985,142603.032985 544274.509985,142599.218985 544272.148985,142595.218985 544270.380985,142590.945985 544269.249985,142586.455985 544268.616985,142581.850985 544268.406985,142577.242985 544268.544985,142572.745985 544268.960985,142568.202985 544269.774985,142563.879985 544270.976985,142559.588985 544272.441985,142512.041985 544289.931985,142499.063985 544293.973985,142494.844985 544295.512985,142490.821985 544297.411985,142486.858985 544299.660985,142482.929985 544302.124985,142479.179985 544304.838985,142475.776985 544307.826985,142472.884985 544311.110985,142470.374985 544315.361985,142468.770985 544319.648985,142467.680985 544324.191985,142466.879985 544330.867985,142466.891985 544335.290985,142467.346985 544339.759985,142468.106985 544344.244985,142469.978985 544353.154985,142472.266985 544362.401985,142476.753985 544376.733985,142479.688985 544385.253985,142482.130985 544391.383985,142485.988985 544399.514985,142490.328985 544407.410985,142493.108985 544412.007985,142500.694985 544423.185985,142503.886985 544427.401985,142512.460985 544437.928985,142515.999985 544443.400985,142518.088985 544447.422985,142520.010985 544451.634985,142521.614985 544455.961985,142522.756985 544460.330985,142523.276985 544464.467985,142523.056985 544468.822985,142522.131985 544473.237985,142520.735985 544477.644985,142519.105985 544481.978985,142516.222985 544488.854985,142507.660985 544504.729985,142498.246985 544525.424985,142495.238985 544531.607985,142491.152985 544539.627985,142482.068985 544556.762985,142476.213985 544566.860985,142471.338985 544575.732985,142468.701985 544579.756985,142465.777985 544582.273985,142464.715985 544582.617985,142461.172985 544582.107985,142457.227985 544579.900985,142453.175985 544576.750985,142447.704985 544572.038985,142444.441985 544568.990985,142435.526985 544558.787985,142427.051985 544549.664985,142423.735985 544546.556985,142420.069985 544544.196985,142415.422985 544542.528985,142411.043985 544541.542985,142406.504985 544540.908985,142401.901985 544540.531985,142395.232985 544540.246985,142390.735985 544540.243985,142386.201985 544540.518985,142381.689985 544541.072985,142377.257985 544541.902985,142370.099985 544543.816985,142365.592985 544545.677985,142362.366985 544548.445985,142360.671985 544552.905985,142359.988985 544557.315985,142359.794985 544562.023985,142360.111985 544571.441985,142360.600985 544576.236985,142361.477985 544580.650985,142363.537985 544589.470985,142366.377985 544604.633985,142366.965985 544609.086985,142367.335985 544617.125985,142367.289985 544621.772985,142366.887985 544626.340985,142365.944985 544630.666985,142365.333985 544632.397985,142363.153985 544636.188985,142360.091985 544639.631985,142356.569985 544642.705985,142354.358985 544644.404985,142350.648985 544646.900985,142346.683985 544649.103985,142342.551985 544651.012985,142338.337985 544652.626985,142329.120985 544655.754985,142324.613985 544656.911985,142320.187985 544657.470985,142316.566985 544657.265985,142312.451985 544656.082985,142308.414985 544654.079985,142304.498985 544651.523985,142300.747985 544648.684985,142297.537985 544646.100985,142294.429985 544642.836985,142289.020985 544635.306985,142285.887985 544632.242985,142284.879985 544631.587985,142280.948985 544629.665985,142276.699985 544628.156985,142272.248985 544626.990985,142267.710985 544626.098985,142261.157985 544625.144985,142256.637985 544625.059985,142252.097985 544625.862985,142250.010985 544626.622985,142241.865985 544627.069985,142232.842985 544626.961985,142228.189985 544626.652985,142219.256985 544625.578985,142210.379985 544623.978985,142201.928985 544621.981985,142189.033985 544617.937985,142173.175985 544613.480985,142168.754985 544612.685985,142164.493985 544612.651985,142159.712985 544614.117985,142155.595985 544616.806985,142152.724985 544620.553985,142151.801985 544624.611985,142151.792985 544629.186985,142152.818985 544644.306985,142153.735985 544653.425985,142153.819985 544657.896985,142153.318985 544662.241985,142152.623985 544664.931985,142151.012985 544669.139985,142148.905985 544673.227985,142146.451985 544677.131985,142143.800985 544680.784985,142141.760985 544683.177985,142138.544985 544686.291985,142127.599985 544695.435985,142117.560985 544704.466985,142109.963985 544710.975985,142099.369985 544719.346985,142082.249985 544732.007985,142078.514985 544734.516985,142074.669985 544736.825985,142070.918985 544738.762985,142040.406985 544751.752985,142036.369985 544753.717985,142032.516985 544755.964985,142027.531985 544759.240985,142023.678985 544761.987985,142020.080985 544764.951985,142016.968985 544768.159985,142014.575985 544771.637985,142013.343985 544775.609985,142013.207985 544780.181985,142013.704985 544784.959985,142014.681985 544791.876985,142015.536985 544796.277985,142019.864985 544813.795985,142022.666985 544828.695985,142025.800985 544848.146985,142027.072985 544858.744985,142027.856985 544867.714985,142028.179985 544873.963985,142028.369985 544882.972985,142028.035985 544892.629985,142027.589985 544897.101985,142025.218985 544914.955985,142024.641985 544922.434985,142023.963985 544936.376985,142023.670985 544943.302985,142023.091985 544947.790985,142020.706985 544959.048985,142019.522985 544963.574985,142017.933985 544967.794985,142015.721985 544971.446985,142013.338985 544973.773985,142009.459985 544976.166985,142005.088985 544977.998985,142000.003985 544979.579985,141995.653985 544980.532985,141991.200985 544981.173985,141977.392985 544982.301985,141968.411985 544982.825985,141939.455985 544983.523985,141916.541985 544984.122985,141907.570985 544984.733985,141899.202985 544985.735985,141890.317985 544987.263985,141885.942985 544988.266985,141877.874985 544990.674985,141873.665985 544992.331985,141869.642985 544994.298985,141866.567985 544996.096985,141862.799985 544998.647985,141859.259985 545001.498985,141855.939985 545004.762985,141853.094985 545008.215985,141850.524985 545011.948985,141848.222985 545015.872985,141843.299985 545026.123985,141841.513985 545030.329985,141839.937985 545034.597985,141838.672985 545038.912985,141837.817985 545043.263985,141837.564985 545045.479985,141837.372985 545049.948985,141837.531985 545054.478985,141837.971985 545059.024985,141839.581985 545068.905985,141840.655985 545073.249985,141842.000985 545077.543985,141849.605985 545098.429985,141852.868985 545106.820985,141856.108985 545114.396985,141863.822985 545130.663985,141870.756985 545147.135985,141873.752985 545155.384985,141879.091985 545172.579985,141883.341985 545185.112985,141884.625985 545189.420985,141885.627985 545193.781985,141886.145985 545197.442985,141886.449985 545201.927985,141886.736985 545210.964985,141887.107985 545215.451985,141888.688985 545225.889985,141890.837985 545235.495985,141892.625985 545240.137985,141895.222985 545246.128985,141896.344985 545249.128985,141899.344985 545249.585985,141901.987985 545249.987985,141910.946985 545254.647985,141922.303985 545260.209985,141934.615985 545265.751985,141949.278985 545271.886985,141952.650985 545273.232985,141953.085985 545270.082985,141953.697985 545260.435985,141955.736985 545245.635985,141956.724985 545241.274985,141957.339985 545239.311985,141959.039985 545235.186985,141961.133985 545231.187985,141963.487985 545227.299985,141969.128985 545218.902985,141971.839985 545215.291985,141974.698985 545211.797985,141977.702985 545208.448985,141981.598985 545204.640985,142003.749985 545186.021985,142007.106985 545183.020985,142010.279985 545179.861985,142011.503985 545178.509985,142014.209985 545174.939985,142021.256985 545163.293985,142023.970985 545159.756985,142027.727985 545156.132985,142031.253985 545153.355985,142042.379985 545145.535985,142054.026985 545136.633985,142060.975985 545130.928985,142064.714985 545127.423985,142070.881985 545120.853985,142082.306985 545108.149985,142087.613985 545102.034985,142096.113985 545091.529985,142099.094985 545088.167985,142102.615985 545084.656985,142116.917985 545071.592985,142126.193985 545061.774985,142132.719985 545055.619985,142139.502985 545049.705985,142152.899985 545038.492985,142163.689985 545030.315985,142167.166985 545027.473985,142169.362985 545025.434985,142175.735985 545018.911985,142178.744985 545015.461985,142181.470985 545011.872985,142183.788985 545008.130985,142185.713985 545003.380985,142186.467985 544998.647985,142185.842985 544994.279985,142183.834985 544990.319985,142181.236985 544986.676985,142178.209985 544983.168985,142171.763985 544976.505985,142168.169985 544973.241985,142160.932985 544967.826985,142150.992985 544959.115985,142147.610985 544955.911985,142144.697985 544952.514985,142142.553985 544948.835985,142141.448985 544944.453985,142141.366985 544939.973985,142142.555985 544927.576985,142143.282985 544922.932985,142144.283985 544918.248985,142144.317985 544913.913985,142143.855985 544912.514985,142141.673985 544908.912985,142138.777985 544905.543985,142135.430985 544902.337985,142124.215985 544892.360985,142113.700985 544883.804985,142110.516985 544880.674985,142107.108985 544876.724985,142104.234985 544873.018985,142101.700985 544869.152985,142099.737985 544865.197985,142099.013985 544863.104985,142098.927985 544858.542985,142100.632985 544853.979985,142102.038985 544852.214985,142105.407985 544849.594985,142109.303985 544847.361985,142113.516985 544845.413985,142125.369985 544840.695985,142129.650985 544839.159985,142138.320985 544836.494985,142142.650985 544835.425985)) MULTIPOLYGON(((141915.20707389 545059.387655348,141919.801422452 545072.005349505,141922.317819047 545078.476414118,141924.497039105 545083.5720225,141931.58949003 545098.528322628,141932.948007704 545101.565338362,141939.882007704 545118.037338362,141941.251466939 545121.532703646,141944.247466939 545129.781703646,141945.379704287 545133.145086525,141946.3559021 545136.289068806,141953.641588396 545130.165092772,141957.089854983 545124.466424874,141961.755195593 545117.637254309,141964.469195593 545114.100254309,141971.902043368 545105.777124706,141975.659043368 545102.153124706,141981.323503868 545097.212495093,141984.849503868 545094.435495093,141988.126685407 545091.996095579,141998.026564897 545085.037884397,142007.445824641 545077.838584126,142011.481024278 545074.525760133,142011.672439934 545074.346323954,142015.650983665 545070.107791068,142026.098161322 545058.491078161,142030.123193498 545053.85322782,142036.276326015 545046.248679928,142034.080027084 545047.169206041,142027.356134783 545049.617237147,142022.271134783 545051.198237147,142016.054354808 545052.84242851,142011.704354808 545053.79542851,142006.339933412 545054.767818512,142001.886933412 545055.408818512,141997.307525709 545055.92497269,141983.499525709 545057.05297269,141981.761460455 545057.174653059,141972.780460455 545057.698653059,141970.219375418 545057.804204103,141941.339643255 545058.500365626,141920.0716525 545059.05633693,141915.20707389 545059.387655348)),((142293.528899252 544988.140168692,142294.601996184 544987.501777305,142302.137667721 544982.654447309,142315.330088769 544973.24530585,142317.708599738 544971.616934636,142331.800599738 544962.361934636,142335.315689827 544960.189567857,142344.618689827 544954.788567857,142350.044243235 544951.928649475,142354.095243235 544950.000649475,142358.937068202 544947.901878751,142366.937744911 544944.76338641,142385.89759784 544937.079520943,142395.719750516 544932.679151927,142400.441873082 544930.349833872,142401.383459124 544929.833071966,142406.6210572 544926.62519655,142411.537774632 544923.415397158,142417.71510139 544913.944561111,142420.94010139 544909.840561111,142430.748006338 544899.541762468,142434.142006338 544896.595762468,142435.850811608 544895.156577415,142442.412433986 544889.795267093,142444.49999699 544886.911016326,142448.144051661 544882.271951045,142451.044051661 544878.864951045,142458.695997856 544871.097938249,142461.294997856 544868.817938249,142470.134593455 544862.150512483,142473.842593455 544859.761512483,142480.427575735 544855.976426197,142484.421575735 544853.942426197,142489.150076298 544851.738001417,142493.336076298 544849.961001417,142496.826705207 544848.581227778,142511.506705207 544843.199227778,142514.871735859 544842.055231706,142523.461735859 544839.360231706,142525.522241398 544838.746075403,142534.194241398 544836.296075403,142536.004975022 544835.808868122,142551.475975022 544831.852868122,142553.240283912 544831.424409705,142591.914597139 544822.526741457,142598.275411491 544820.886724263,142602.704241198 544819.56048906,142609.292780478 544817.391524059,142615.583028111 544815.122934514,142618.279611019 544814.046641119,142629.45972981 544809.13013732,142631.782307416 544808.154985648,142635.957307416 544806.483985648,142639.000194615 544805.341955696,142647.786194615 544802.259955696,142650.862354779 544801.254874545,142659.482354779 544798.642874545,142662.638869661 544797.761220477,142669.973869661 544795.884220477,142673.205218145 544795.133066603,142686.423218145 544792.367066603,142687.75030488 544792.101834821,142698.39630488 544790.073834821,142699.656984019 544789.844824773,142722.099112074 544785.965804094,142733.29544748 544783.954693204,142742.05873277 544781.922771676,142754.323614283 544778.786704663,142756.030972713 544778.371387876,142775.118972713 544773.964387876,142777.273451963 544773.500199454,142820.991420451 544764.751150994,142837.522686446 544760.894948819,142844.015926493 544759.102611734,142844.917722818 544758.79792222,142856.218794477 544754.493944632,142862.453241526 544752.427321221,142870.586241526 544750.121321221,142875.768629606 544748.849245243,142884.617629605 544747.008245243,142891.189843383 544745.942777802,142898.301843383 544745.111777802,142904.543626015 544744.64541731,142909.018626015 544744.49841731,142913.016385389 544744.473703009,142917.509385389 544744.565703009,142920.324904418 544744.676294693,142934.674637347 544745.510159451,142951.608031998 544746.00958361,142954.88878603 544746.178321099,142959.36978603 544746.507321098,142963.711087962 544746.953378548,142973.246087962 544748.214378548,142976.745416005 544748.761522577,143008.170847153 544754.438302843,143008.88998273 544754.51936845,143021.086540262 544755.473370056,143024.601737995 544755.83181325,143030.442737995 544756.56681325,143035.06301864 544757.295205003,143043.91001864 544758.974205003,143047.065941417 544759.643768134,143051.457941418 544760.674768134,143054.738751825 544761.523564261,143062.852751825 544763.819564261,143067.512244981 544765.303734333,143071.745244981 544766.805734333,143075.849809935 544768.399302906,143086.996807532 544773.108079562,143087.534249256 544773.311425527,143089.290648579 544773.84542239,143090.815558434 544774.236272392,143107.033443497 544777.814719857,143118.197003623 544780.058732056,143128.554297917 544781.738142783,143139.336028988 544783.109031866,143155.49321177 544784.379932768,143159.259616953 544784.772085376,143168.171616953 544785.928085376,143172.417029432 544786.602995092,143183.484514979 544788.689249054,143192.757948937 544779.743577493,143204.458134003 544772.068508402,143207.452134003 544770.482508402,143217.877333406 544765.935907155,143228.870152028 544763.017979079,143233.093152028 544762.233979079,143243.749216234 544761.035368472,143248.714216234 544760.834368472,143254.046196302 544760.808205104,143259.265196302 544760.968205104,143261.486708783 544761.06929489,143267.979708783 544761.46129489,143273.365665557 544761.982012954,143277.793665557 544762.572012954,143286.575211331 544764.280368101,143288.189141126 544764.695595339,143290.978852032 544763.072253793,143293.057985348 544761.906229274,143304.973985348 544755.470229274,143306.958931092 544754.43608835,143315.965931092 544749.91308835,143320.623980386 544747.770101801,143324.766980386 544746.033101801,143328.238303539 544744.678091384,143332.286621343 544743.212671752,143331.143833831 544736.493747471,143330.870339244 544734.763796825,143329.055339244 544722.344796825,143328.854637586 544720.869286613,143325.924637586 544697.601286613,143325.764871004 544696.23097339,143324.324871004 544682.80797339,143324.122032336 544680.613710979,143322.960032336 544665.647710979,143322.826631958 544663.548552757,143322.182631958 544650.533552757,143322.117601971 544648.824943242,143321.877601971 544639.818943242,143321.867525705 544636.245919223,143321.955512321 544632.05717934,143321.77043356 544623.714398257,143321.835470129 544618.513217395,143322.062470129 544613.706217395,143325.292360964 544595.19794376,143326.484360964 544591.32194376,143331.729639817 544578.575059709,143339.219112454 544567.003378636,143340.243112454 544565.701378636,143353.146702893 544552.866696871,143356.357813689 544550.944227443,143360.724831274 544538.647255457,143361.729831274 544536.667255457,143369.036727648 544525.046930776,143378.339104196 544514.952948864,143378.62159647 544514.697818407,143378.155226847 544510.94165225,143374.102410185 544499.277113056,143373.007822462 544495.79929448,143372.379651765 544495.697483851,143371.381974607 544495.588885555,143357.48234826 544494.649991326,143321.795908582 544493.464324709,143319.758089386 544493.486147736,143312.228365485 544493.914767793,143305.455111006 544493.993943295,143300.977111006 544493.843943295,143289.193680868 544492.511203977,143284.954680868 544491.688203977,143277.00659789 544489.158340983,143276.426513723 544492.170388535,143269.854826429 544528.086878837,143262.821219905 544569.56192616,143261.774448627 544574.656037193,143260.721448627 544579.009037193,143259.680215806 544582.861773835,143256.522215806 544593.422773835,143253.23631489 544602.318708031,143251.34831489 544606.579708031,143242.008489251 544622.205107828,143239.454489251 544625.493107828,143227.30524964 544637.866099411,143212.639192566 544647.118218831,143208.199192566 544649.246218831,143196.474866603 544653.702425409,143184.171866906 544656.142465323,143179.675866906 544656.648465323,143170.088599017 544657.109394209,143154.457599017 544656.859394209,143151.617868051 544656.760142918,143133.53063217 544655.784641096,143121.290168068 544655.570511698,143117.660703231 544655.419032874,143113.177703231 544655.123032874,143107.001712981 544654.457450287,143102.611712981 544653.799450287,143095.331388678 544652.336502036,143090.549388678 544651.126502036,143082.051072215 544648.429483166,143077.618072215 544646.726483166,143064.106773636 544639.899296896,143060.325773636 544637.481296896,143047.050786815 544626.672758007,143045.727786815 544625.316758007,143036.688110558 544614.062347654,143034.335110558 544610.473347654,143028.538883685 544599.852309461,143026.696883685 544595.714309461,143023.774244043 544588.04423974,143022.350244043 544583.58823974,143020.893544138 544578.392131302,143019.795544138 544573.853131302,143018.702925331 544568.485649998,143017.507925331 544561.277649998,143016.664393871 544554.004344462,143016.365393871 544549.523344462,143016.210125035 544545.822610653,143016.132125035 544541.297610653,143016.121841841 544539.646480492,143016.191841841 544525.002480492,143016.261381424 544522.112214787,143017.058381424 544503.730214787,143017.200830162 544501.332617029,143019.015830162 544477.292617029,143019.117369181 544476.079044054,143020.974562841 544455.859387166,143012.017779016 544452.276044828,143000.730737927 544445.227455997,142997.412737927 544442.720455997,142987.84396231 544434.105295537,142984.80596231 544430.856295537,142980.583823832 544425.930029936,142973.422760994 544416.803672518,142963.91211261 544406.161519492,142956.819698158 544398.788915133,142953.893144036 544398.712152108,142953.503590826 544398.72251716,142949.462514144 544399.061408476,142943.263353163 544400.055538669,142939.663325572 544400.908414059,142939.238212841 544401.067454297,142938.976680873 544401.182858452,142934.137324015 544403.643690941,142929.769658667 544406.096795439,142926.652207278 544408.069938545,142927.198338169 544417.889249693,142925.064366118 544432.647879358,142924.028366118 544436.823879358,142915.90414904 544456.750498323,142913.47414904 544460.887498323,142904.900927942 544472.683961512,142901.762927942 544476.219961512,142891.805707433 544485.566812929,142887.590707433 544488.855812929,142878.925179228 544494.69435923,142874.856179228 544497.04135923,142865.016904724 544501.797485204,142860.704904724 544503.506485204,142847.670574801 544507.348275577,142843.780574801 544508.120275577,142828.558456297 544509.552401342,142824.221456297 544509.516401342,142812.959042535 544508.571318809,142808.504042535 544507.856318809,142801.33147797 544506.342329521,142796.85147797 544505.165329521,142792.415950273 544503.852523393,142785.163950273 544501.460523393,142780.337883578 544499.683012291,142776.195883578 544497.994012292,142769.99669122 544495.130423081,142762.606498738 544491.299245068,142753.019033808 544492.117962512,142748.573033808 544492.206962512,142737.253736829 544491.576554482,142732.073736829 544490.892554482,142726.515986909 544489.944923928,142722.013986909 544489.001923928,142716.444900051 544487.610979171,142712.012900051 544486.321979171,142705.652238558 544484.158660047,142701.408238558 544482.499660047,142694.009414955 544479.134523818,142690.072414955 544477.079523818,142679.933733744 544470.709227259,142675.879733744 544467.685227259,142667.222163891 544460.129017531,142664.090163891 544456.941017531,142659.697634783 544452.059750107,142652.455628131 544443.266417622,142641.010698615 544431.023595985,142639.761894936 544429.654199985,142629.709894936 544418.354199985,142628.440663554 544416.889717001,142624.411663554 544412.117717001,142623.024567126 544410.425340713,142617.422567126 544403.383340713,142616.24429217 544401.862555039,142587.346543277 544363.559802966,142579.850312854 544354.229311137,142574.837307005 544348.538475379,142574.380798773 544348.074877161,142573.482496771 544347.244537906,142549.020471652 544356.242809497,142550.021077146 544359.147463265,142550.918398887 544361.399953959,142552.790926445 544365.346434407,142555.308399385 544369.926610982,142556.270059459 544371.516809313,142561.662565615 544379.462687748,142562.879228922 544381.069659085,142570.613225941 544390.565318825,142575.437699753 544397.198978876,142578.976699753 544402.670978876,142582.557765089 544408.83131752,142584.646765089 544412.85331752,142586.320905962 544416.287716222,142588.242905962 544420.499716222,142590.33468939 544425.566294951,142591.93868939 544429.893294952,142594.177100548 544436.995188031,142595.319100548 544441.364188031,142597.171443512 544450.977463505,142597.691443512 544455.114463505,142598.181470333 544468.251908484,142597.961470333 544472.606908484,142596.463179074 544484.202538685,142595.538179074 544488.617538685,142593.630550396 544495.886498114,142592.234550396 544500.293498114,142590.935346415 544504.046682994,142589.305346415 544508.380682994,142588.272299374 544510.979346306,142585.389299374 544517.855346306,142582.234135189 544524.457345184,142574.877841918 544538.096816766,142566.515543165 544556.479839147,142565.689384712 544558.235390683,142562.681384712 544564.418390683,142562.065802624 544565.6546654,142557.979802624 544573.6746654,142557.417031773 544574.757404369,142548.333031773 544591.892404369,142546.951454584 544594.382994845,142541.529148564 544603.734736294,142537.069563867 544611.85072305,142534.069380318 544616.841347935,142531.432380318 544620.865347935,142517.631297233 544636.598188404,142514.707297233 544639.115188404,142502.521690675 544647.656705143,142488.889548013 544653.624217341,142487.827548013 544653.968217341,142471.094086772 544657.34629167,142454.030188709 544656.852840409,142450.487188709 544656.342840409,142437.358589199 544653.203168585,142436.668505703 544655.630630956,142436.057505703 544657.361630956,142430.350660746 544669.785574852,142428.170660746 544673.576574852,142419.197109221 544686.030415834,142416.135109221 544689.473415834,142409.409371599 544696.136811157,142405.887371599 544699.210811157,142402.268389353 544702.175774301,142400.057389353 544703.874774301,142396.224336385 544706.632730849,142392.514336385 544709.128730849,142387.07501259 544712.461220768,142383.11001259 544714.664220768,142378.13946881 544717.188877144,142374.00746881 544719.097877144,142369.377380348 544721.051532704,142365.163380348 544722.665532704,142362.440763496 544723.64850335,142353.223763496 544726.77650335,142347.769688407 544728.399502076,142343.262688407 544729.556502076,142334.011762954 544731.32086733,142329.585762954 544731.87986733,142315.948708737 544732.351079396,142312.327708737 544732.146079396,142295.844939335 544729.346473507,142291.729939335 544728.163473507,142279.117488381 544723.267889072,142275.080488381 544721.264889072,142267.421421377 544716.88546041,142263.505421377 544714.32946041,142259.236675046 544711.326353663,142255.485675046 544708.487353663,142253.718508244 544707.107825706,142250.508508244 544704.523825706,142247.621056086 544701.867004341,142245.975822652 544701.957295237,142240.968343436 544702.064613072,142231.945343436 544701.956613072,142227.873273827 544701.797150336,142223.220273827 544701.488150336,142219.237330033 544701.116734362,142218.770797848 544701.060643959,142217.679033889 544703.500397184,142215.572033889 544707.588397184,142212.403307436 544713.141517084,142209.949307436 544717.045517084,142207.152428394 544721.18259421,142204.501428394 544724.835594209,142200.876344685 544729.440953974,142198.836344685 544731.833953974,142193.932660441 544737.058559252,142190.716660441 544740.172559252,142186.630675434 544743.848621242,142176.739173701 544752.112476139,142167.720757309 544760.225367705,142166.358606458 544761.421283697,142164.679487397 544762.859928684,142170.162971622 544764.26110987,142175.060971622 544766.00310987,142188.609375456 544772.411032792,142200.613171778 544781.384861211,142210.593018116 544792.566247069,142218.150393529 544805.50868886,142222.983512571 544819.695361583,142224.899376364 544834.559754896,142223.821479538 544849.508295329,142221.544108779 544857.668809516,142222.493621098 544859.640797719,142227.243951322 544872.326051932,142228.423951322 544876.625051932,142229.892583503 544883.079044115,142230.100737768 544884.225522696,142231.196159123 544886.044706521,142233.455159123 544889.945706521,142237.190809781 544897.302319979,142238.782809781 544900.917319979,142242.894833084 544912.915500558,142243.985833084 544917.269500558,142244.120402998 544918.028161309,142252.480830463 544925.766827503,142255.642471805 544928.871720914,142262.190471805 544935.693720914,142264.486464574 544938.196863015,142270.491464574 544945.048863015,142274.302826793 544949.770221228,142276.978826793 544953.374221228,142280.526715791 544958.598447604,142282.577715791 544961.910447604,142287.223684419 544970.654294399,142289.141684419 544974.922294399,142293.528899252 544988.140168692))) #19 Polygon - gid: 2519 POLYGON((142639.054985 546593.084985,142638.983985 546578.467985,142637.899985 546522.015985,142637.938985 546492.896985,142637.097985 546450.097985,142637.323985 546438.583985,142638.161985 546425.106985,142640.378985 546405.030985,142641.014985 546394.820985,142641.331985 546384.084985,142641.148985 546370.582985,142641.244985 546363.069985,142641.584985 546354.071985,142642.254985 546344.252985,142643.286985 546335.313985,142644.522985 546326.394985,142648.737985 546299.023985,142650.292985 546287.844985,142651.629985 546274.394985,142652.493985 546269.090985,142653.436985 546264.685985,142655.832985 546255.985985,142657.324985 546251.745985,142659.948985 546245.601985,142667.821985 546229.388985,142674.155985 546214.865985,142677.911985 546205.201985,142679.361985 546200.940985,142681.914985 546192.299985,142684.417985 546181.838985,142686.974985 546168.576985,142689.654985 546153.350985,142694.878985 546120.270985,142697.142985 546106.960985,142699.359985 546095.284985,142703.219985 546077.702985,142704.624985 546066.572985,142705.358985 546062.133985,142706.612985 546057.889985,142708.252985 546054.334985,142710.527985 546050.471985,142713.073985 546046.712985,142719.613985 546037.284985,142728.418985 546025.982985,142730.690985 546022.264985,142732.054985 546018.591985,142731.686985 546016.665985,142724.660985 546009.840985,142717.691985 546000.791985,142714.941985 545996.960985,142712.738985 545993.180985,142711.360985 545988.681985,142714.052985 545984.850985,142718.418985 545982.397985,142721.651985 545982.033985,142726.312985 545982.683985,142730.716985 545984.217985,142731.895985 545984.775985,142735.810985 545986.892985,142743.367985 545991.857985,142750.724985 545997.160985,142754.125985 545999.891985,142761.223985 546006.385985,142764.713985 546009.110985,142768.178985 546010.905985,142772.098985 546007.143985,142774.143985 546005.180985,142774.113985 545999.566985,142773.537985 545995.098985,142768.381985 545968.404985,142767.068985 545958.959985,142766.199985 545949.980985,142765.940985 545945.485985,142765.750985 545931.805985,142766.233985 545927.222985,142767.634985 545923.521985,142769.098985 545922.223985,142773.757985 545921.006985,142778.814985 545921.309985,142783.002985 545922.544985,142787.137985 545924.271985,142795.346985 545928.342985,142811.462985 545935.870985,142815.626985 545937.556985,142820.576985 545938.996985,142825.031985 545939.950985,142829.609985 545940.709985,142834.206985 545941.141985,142838.717985 545941.118985,142843.041985 545940.509985,142847.204985 545939.284985,142851.513985 545937.443985,142855.628985 545935.100985,142859.326985 545932.341985,142862.380985 545929.253985,142863.263985 545928.078985,142865.435985 545924.062985,142866.966985 545919.494985,142867.782985 545914.817985,142867.736985 545909.942985,142866.022985 545905.989985,142862.937985 545902.315985,142859.441985 545899.133985,142854.047985 545895.067985,142850.262985 545892.621985,142837.767985 545885.201985,142825.932985 545878.689985,142819.751985 545874.844985,142805.176985 545864.270985,142794.436985 545857.191985,142790.895985 545854.458985,142787.923985 545851.332985,142786.743985 545846.536985,142788.245985 545842.303985,142791.773985 545840.313985,142796.261985 545838.819985,142801.083985 545837.998985,142802.463985 545837.997985,142805.463985 545837.994985,142805.357985 545834.997985,142805.262985 545828.997985,142805.520985 545820.191985,142805.877985 545815.707985,142807.383985 545802.278985,142807.642985 545798.275985,142807.624985 545793.783985,142807.104985 545784.785985,142806.722985 545767.919985,142806.979985 545763.439985,142807.737985 545759.086985,142809.044985 545754.836985,142810.745985 545750.671985,142812.747985 545746.584985,142814.955985 545742.585985,142818.189985 545737.179985,142820.793985 545733.508985,142829.696985 545723.146985,142832.161985 545719.462985,142832.897985 545718.055985,142834.513985 545713.945985,142835.658985 545709.600985,142836.487985 545705.114985,142837.768985 545696.409985,142838.248985 545691.931985,142838.646985 545682.880985,142839.065985 545678.409985,142839.638985 545675.304985,142841.047985 545671.041985,142844.967985 545662.753985,142846.660985 545658.581985,142847.581985 545654.707985,142847.927985 545650.295985,142847.867985 545645.793985,142847.478985 545641.250985,142846.840985 545636.716985,142845.620985 545630.188985,142844.442985 545625.866985,142839.491985 545613.185985,142838.170985 545608.906985,142836.982985 545602.039985,142836.453985 545597.426985,142836.195985 545592.787985,142836.317985 545588.225985,142836.932985 545583.845985,142837.506985 545581.601985,142839.204985 545577.594985,142841.653985 545573.762985,142844.599985 545570.136985,142850.556985 545564.008985,142855.814985 545562.041985,142856.880985 545561.642985,142856.292985 545557.919985,142855.390985 545553.820985,142854.135985 545549.506985,142852.244985 545544.563985,142850.361985 545540.478985,142844.125985 545527.977985,142834.606985 545507.539985,142826.544985 545491.433985,142821.485985 545479.737985,142819.843985 545475.499985,142818.480985 545471.212985,142817.540985 545466.871985,142817.213985 545464.155985,142817.030985 545459.662985,142817.207985 545455.117985,142817.660985 545450.581985,142818.485985 545445.117985,142819.662985 545440.740985,142822.757985 545432.078985,142823.990985 545427.764985,142824.559985 545422.879985,142823.987985 545418.543985,142822.645985 545414.208985,142819.284985 545405.255985,142813.283985 545388.284985,142808.968985 545375.562985,142806.315985 545366.954985,142804.586985 545358.943985,142803.925985 545354.485985,142803.102985 545345.493985,142802.904985 545340.751985,142802.834985 545331.720985,142803.009985 545327.199985,142803.393985 545322.710985,142804.037985 545318.278985,142805.452985 545311.744985,142806.650985 545307.380985,142809.573985 545298.818985,142811.266985 545294.665985,142813.004985 545291.210985,142815.400985 545287.398985,142820.519985 545279.931985,142826.842985 545268.466985,142829.338985 545264.782985,142832.164985 545262.098985,142833.230985 545261.695985,142835.992985 545262.345985,142846.160985 545258.387985,142854.318985 545254.575985,142858.403985 545252.356985,142869.987985 545245.401985,142875.644985 545242.347985,142912.309985 545224.049985,142926.307985 545216.705985,142951.656985 545202.846985,142972.226985 545191.088985,142985.020985 545184.003985,142989.016985 545181.876985,142993.087985 545179.977985,142997.011985 545178.519985,143001.320985 545177.379985,143005.734985 545176.563985,143019.196985 545174.781985,143029.936985 545172.947985,143038.782985 545171.290985,143053.861985 545168.157985,143058.239985 545167.099985,143064.886985 545165.078985,143073.421985 545161.808985,143077.597985 545159.899985,143081.563985 545157.748985,143085.208985 545155.311985,143088.708985 545151.406985,143090.492985 545147.010985,143090.813985 545144.727985,143089.978985 545140.305985,143088.118985 545135.725985,143086.667985 545131.314985,143086.751985 545128.175985,143088.720985 545124.505985,143091.965985 545121.090985,143095.880985 545118.148985,143099.492985 545116.076985,143103.605985 545114.680985,143108.081985 545114.016985,143112.694985 545113.606985,143117.223985 545112.973985,143130.923985 545110.673985,143135.304985 545109.618985,143139.420985 545108.092985,143140.758985 545107.421985,143144.429985 545105.021985,143147.844985 545102.071985,143151.027985 545098.743985,143154.002985 545095.206985,143156.794985 545091.631985,143159.329985 545087.702985,143165.032985 545075.706985,143169.544985 545068.380985,143174.812985 545061.053985,143177.619985 545057.534985,143179.712985 545055.221985,143186.158985 545048.939985,143193.007985 545043.061985,143196.559985 545040.305985,143204.126985 545034.852985,143207.925985 545032.379985,143211.823985 545030.116985,143215.833985 545028.136985,143220.506985 545026.334985,143224.814985 545025.059985,143229.211985 545023.991985,143247.739985 545020.064985,143271.248985 545015.903985,143300.088985 545011.067985,143319.233985 545008.037985,143322.181985 545007.660985,143320.621985 545004.756985,143318.426985 545000.669985,143317.771985 544996.915985,143316.818985 544987.902985,143316.483985 544978.913985,143318.127985 544975.428985,143320.969985 544971.163985,143325.529985 544961.287985,143327.718985 544957.410985,143330.469985 544955.005985,143333.411985 544952.432985,143330.469985 544950.953985,143324.550985 544948.182985,143312.064985 544943.041985,143303.953985 544939.926985,143290.772985 544935.169985,143255.834985 544921.723985,143240.383985 544916.255985,143231.802985 544913.548985,143223.892985 544911.297985,143215.153985 544909.116985,143210.750985 544908.213985,143206.364985 544907.516985,143192.930985 544906.053985,143187.453985 544905.270985,143183.055985 544904.302985,143178.713985 544903.106985,143172.673985 544900.844985,143164.258985 544899.268985,143136.152985 544894.663985,143127.654985 544893.030985,143118.870985 544891.059985,143108.925985 544888.514985,143090.565985 544883.345985,143073.319985 544878.131985,143068.474985 544876.994985,143064.055985 544876.187985,143059.601985 544875.538985,143050.639985 544874.541985,143041.819985 544873.776985,143028.327985 544873.125985,143023.847985 544872.745985,143018.942985 544872.112985,143000.433985 544869.180985,142987.018985 544867.640985,142978.053985 544866.860985,142970.405985 544866.438985,142944.598985 544865.635985,142935.601985 544865.579985,142927.194985 544865.844985,142918.206985 544866.397985,142911.314985 544867.017985,142902.373985 544868.047985,142889.004985 544869.952985,142864.821985 544874.363985,142848.911985 544876.576985,142844.480985 544877.334985,142838.073985 544878.661985,142829.326985 544880.811985,142819.324985 544883.870985,142800.796985 544890.606985,142773.388985 544901.131985,142760.875985 544906.196985,142750.977985 544910.668985,142742.913985 544914.664985,142737.069985 544917.874985,142724.981985 544924.919985,142713.020985 544931.285985,142709.136985 544933.547985,142705.137985 544936.250985,142701.645985 544939.051985,142695.074985 544945.218985,142680.742985 544959.330985,142671.103985 544969.088985,142662.768985 544973.041985,142652.842985 544978.358985,142641.271985 544985.338985,142634.830985 544989.779985,142627.829985 544995.416985,142602.075985 545017.695985,142591.628985 545026.268985,142584.723985 545031.405985,142577.151985 545036.249985,142563.479985 545044.293985,142523.221985 545068.752985,142513.631985 545074.114985,142504.669985 545078.768985,142449.282985 545105.186985,142429.396985 545115.264985,142420.658985 545120.011985,142411.075985 545125.488985,142395.834985 545135.064985,142387.294985 545140.246985,142363.037985 545154.362985,142356.402985 545157.748985,142344.050985 545163.201985,142339.898985 545164.937985,142325.684985 545170.528985,142317.212985 545173.561985,142303.543985 545177.834985,142294.845985 545180.144985,142285.745985 545182.081985,142259.033985 545187.070985,142250.228985 545188.919985,142245.783985 545190.007985,142229.466985 545194.445985,142212.023985 545198.894985,142204.533985 545201.039985,142191.663985 545205.131985,142180.193985 545209.385985,142171.855985 545212.806985,142165.722985 545215.687985,142161.756985 545217.791985,142154.012985 545222.384985,142140.577985 545231.018985,142133.147985 545236.100985,142115.719985 545248.557985,142102.333985 545258.662985,142094.400985 545265.020985,142087.591985 545270.906985,142078.153985 545279.664985,142065.304985 545292.272985,142061.463985 545295.538985,142058.168985 545298.695985,142057.175985 545300.454985,142056.463985 545305.537985,142057.721985 545310.009985,142062.115985 545310.976985,142066.520985 545310.561985,142076.187985 545308.856985,142080.192985 545308.520985,142089.203985 545308.646985,142098.195985 545309.362985,142102.054985 545309.894985,142106.458985 545310.741985,142110.825985 545311.824985,142130.830985 545317.813985,142152.372985 545324.883985,142164.840985 545328.945985,142177.742985 545332.933985,142189.838985 545336.203985,142198.607985 545338.303985,142203.018985 545339.200985,142207.448985 545339.939985,142216.683985 545340.889985,142225.692985 545341.292985,142234.270985 545341.415985,142251.656985 545340.922985,142291.579985 545340.124985,142300.184985 545339.602985,142309.174985 545338.801985,142313.628985 545338.177985,142321.257985 545336.558985,142325.609985 545335.368985,142334.166985 545332.488985,142341.767985 545329.286985,142345.811985 545327.301985,142349.793985 545325.177985,142357.421985 545320.738985,142361.221985 545318.337985,142368.622985 545313.204985,142382.291985 545302.859985,142389.289985 545297.184985,142392.681985 545294.234985,142397.402985 545289.625985,142406.329985 545279.577985,142412.737985 545273.259985,142419.291985 545267.086985,142429.992985 545257.467985,142440.308985 545248.759985,142441.612985 545247.714985,142446.109985 545245.262985,142446.338985 545248.994985,142446.199985 545253.571985,142445.640985 545258.488985,142444.609985 545263.241985,142443.857985 545265.512985,142442.012985 545269.516985,142439.699985 545273.376985,142437.056985 545277.103985,142431.323985 545284.203985,142427.990985 545287.884985,142424.744985 545290.998985,142418.000985 545297.012985,142412.625985 545302.081985,142402.843985 545311.388985,142393.281985 545319.861985,142386.339985 545325.596985,142383.071985 545328.078985,142375.719985 545333.293985,142368.108985 545338.125985,142364.187985 545340.316985,142359.849985 545342.473985,142355.742985 545344.307985,142347.378985 545347.681985,142328.337985 545354.886985,142316.107985 545358.925985,142307.469985 545361.469985,142299.454985 545363.561985,142286.275985 545366.538985,142276.143985 545368.318985,142267.208985 545369.345985,142248.532985 545370.511985,142219.161985 545371.185985,142203.715985 545371.164985,142199.205985 545371.018985,142194.733985 545370.628985,142188.003985 545369.399985,142183.639985 545368.295985,142179.306985 545367.017985,142170.748985 545364.137985,142165.665985 545362.193985,142149.185985 545354.923985,142140.126985 545351.437985,142131.579985 545348.557985,142127.240985 545347.464985,142122.210985 545346.513985,142117.678985 545345.875985,142113.128985 545345.532985,142108.629985 545345.592985,142105.518985 545345.933985,142101.168985 545346.844985,142096.841985 545348.164985,142092.578985 545349.812985,142088.422985 545351.707985,142084.414985 545353.767985,142080.190985 545356.407985,142076.653985 545359.241985,142073.333985 545362.356985,142067.997985 545368.049985,142062.268985 545375.019985,142056.981985 545382.321985,142054.076985 545386.833985,142049.685985 545394.701985,142044.122985 545405.734985,142038.521985 545418.021985,142023.289985 545452.443985,142017.545985 545464.659985,142014.837985 545469.791985,142005.253985 545486.555985,141988.171985 545519.134985,141977.076985 545541.374985,141973.492985 545549.619985,141971.566985 545555.125985,141970.306985 545559.444985,141965.979985 545576.568985,141962.918985 545589.719985,141960.635985 545598.142985,141955.825985 545613.701985,141951.434985 545626.601985,141950.141985 545630.915985,141948.934985 545636.962985,141948.704985 545641.499985,141949.123985 545646.141985,141950.244985 545650.549985,141951.056985 545652.499985,141953.342985 545656.425985,141956.355985 545660.122985,141959.910985 545663.037985,141962.039985 545664.112985,141966.156985 545665.317985,141970.561985 545665.989985,141975.146985 545666.276985,141979.804985 545666.327985,141986.719985 545666.292985,141991.278985 545665.940985,142000.535985 545664.247985,142005.024985 545663.753985,142009.282985 545664.058985,142010.548985 545664.383985,142014.485985 545666.064985,142018.279985 545668.475985,142021.898985 545671.414985,142025.310985 545674.677985,142028.480985 545678.062985,142030.032985 545679.813985,142032.714985 545683.400985,142034.950985 545687.417985,142036.704985 545691.669985,142037.858985 545695.616985,142038.718985 545700.121985,142039.089985 545704.851985,142038.672985 545709.406985,142037.721985 545712.350985,142035.592985 545716.121985,142032.841985 545719.745985,142029.638985 545723.145985,142026.149985 545726.245985,142022.543985 545728.968985,142018.629985 545731.298985,142014.527985 545733.136985,142010.234985 545734.681985,142001.549985 545737.362985,141997.219985 545738.546985,141983.982985 545741.310985,141979.609985 545742.365985,141969.681985 545745.217985,141965.394985 545746.710985,141961.337985 545748.534985,141959.777985 545749.404985,141955.834985 545752.283985,141952.703985 545755.965985,141951.963985 545758.506985,141952.751985 545762.553985,141954.762985 545766.861985,141957.561985 545770.888985,141959.982985 545773.460985,141963.411985 545776.158985,141967.224985 545778.496985,141971.289985 545780.580985,141985.212985 545786.896985,142000.150985 545792.668985,142008.343985 545796.429985,142016.334985 545800.578985,142022.250985 545804.295985,142046.437985 545822.371985,142052.748985 545826.682985,142056.617985 545828.963985,142064.603985 545833.129985,142070.922985 545836.248985,142083.286985 545841.758985,142087.295985 545843.769985,142092.594985 545847.153985,142096.154985 545849.929985,142099.578985 545852.884985,142104.802985 545857.704985,142111.182985 545864.060985,142117.370985 545870.603985,142120.682985 545874.288985,142142.202985 545899.659985,142165.737985 545927.016985,142172.879985 545934.881985,142182.253985 545944.598985,142186.214985 545948.917985,142202.883985 545967.751985,142211.384985 545977.403985,142225.593985 545992.922985,142238.418985 546008.296985,142250.230985 546021.879985,142259.725985 546033.693985,142269.350985 546046.564985,142278.361985 546059.624985,142298.361985 546090.836985,142309.584985 546107.625985,142341.472985 546156.462985,142356.456985 546178.710985,142366.251985 546193.812985,142376.758985 546209.595985,142385.270985 546221.615985,142387.634985 546225.427985,142392.256985 546234.208985,142394.167985 546238.328985,142395.821985 546242.520985,142397.123985 546246.785985,142398.005985 546251.510985,142398.388985 546255.983985,142399.224985 546283.243985,142399.697985 546292.227985,142400.941985 546305.891985,142401.545985 546310.351985,142403.237985 546319.045985,142405.506985 546327.777985,142408.303985 546336.338985,142410.310985 546341.331985,142418.668985 546358.807985,142424.819985 546375.738985,142426.239985 546379.047985,142430.073985 546387.302985,142432.170985 546391.346985,142434.510985 546395.185985,142437.187985 546398.706985,142440.399985 546401.785985,142444.036985 546404.428985,142451.744985 546409.342985,142464.608985 546418.886985,142474.778985 546427.251985,142481.544985 546433.292985,142484.647985 546436.537985,142486.778985 546439.146985,142489.315985 546442.826985,142491.601985 546446.723985,142493.656985 546450.776985,142496.820985 546458.222985,142498.276985 546462.456985,142499.496985 546466.785985,142503.472985 546484.744985,142506.642985 546502.467985,142509.386985 546520.985985,142510.336985 546525.363985,142510.840985 546527.218985,142512.350985 546531.439985,142518.183985 546543.729985,142519.807985 546547.903985,142520.462985 546550.160985,142521.369985 546554.533985,142521.977985 546559.000985,142522.344985 546563.520985,142522.608985 546574.349985,142522.280985 546578.872985,142521.351985 546583.333985,142520.542985 546585.903985,142517.219985 546589.425985,142514.512985 546586.565985,142511.824985 546583.070985,142509.171985 546579.181985,142498.742985 546562.904985,142494.176985 546555.142985,142490.162985 546547.838985,142484.052985 546535.786985,142480.174985 546526.738985,142475.650985 546514.011985,142472.138985 546503.403985,142468.153985 546490.503985,142463.423985 546476.206985,142461.831985 546471.994985,142459.996985 546467.916985,142456.960985 546462.582985,142454.434985 546458.849985,142451.705985 546455.233985,142445.862985 546448.329985,142442.104985 546444.394985,142428.626985 546432.421985,142418.075985 546422.798985,142411.737985 546416.428985,142408.499985 546412.663985,142405.701985 546409.137985,142400.377985 546401.856985,142392.425985 546390.103985,142387.707985 546382.429985,142380.885985 546369.973985,142378.896985 546365.914985,142377.106985 546361.786985,142375.751985 546358.075985,142374.507985 546353.777985,142373.513985 546349.392985,142370.442985 546330.776985,142368.191985 546312.914985,142365.265985 546293.674985,142363.190985 546283.190985,142361.213985 546274.351985,142359.975985 546270.025985,142358.455985 546265.821985,142356.394985 546261.322985,142354.263985 546257.363985,142351.945985 546253.483985,142345.725985 546243.935985,142343.151985 546240.252985,142316.274985 546206.202985,142310.966985 546198.936985,142307.937985 546194.352985,142294.814985 546172.627985,142290.329985 546164.823985,142287.005985 546158.186985,142275.101985 546130.634985,142271.989985 546124.071985,142267.678985 546116.171985,142261.093985 546105.453985,142258.578985 546101.726985,142253.279985 546094.447985,142243.571985 546081.658985,142236.439985 546072.727985,142230.606985 546065.874985,142222.765985 546057.102985,142213.581985 546047.200985,142208.292985 546041.857985,142201.735985 546035.693985,142192.537985 546027.675985,142181.948985 546019.303985,142169.155985 546009.780985,142160.153985 546003.473985,142152.572985 545998.626985,142143.089985 545992.867985,142131.365985 545986.142985,142125.570985 545982.482985,142118.447985 545976.998985,142096.890985 545958.860985,142084.848985 545949.882985,142068.162985 545938.270985,142059.174985 545932.384985,142042.151985 545921.873985,142030.906985 545914.386985,142023.584985 545909.156985,142018.526985 545905.193985,142015.089985 545902.283985,142007.356985 545895.188985,141997.952985 545885.504985,141978.411985 545863.813985,141970.581985 545855.994985,141963.934985 545849.915985,141957.167985 545844.315985,141949.939985 545838.921985,141943.509985 545834.697985,141935.696985 545830.192985,141927.585985 545826.245985,141920.060985 545823.365985,141915.730985 545822.001985,141911.337985 545820.882985,141906.909985 545820.080985,141900.193985 545819.531985,141895.681985 545819.481985,141891.151985 545819.648985,141882.152985 545820.550985,141875.954985 545821.657985,141871.598985 545822.759985,141835.260985 545833.483985,141828.631985 545835.167985,141819.750985 545837.019985,141815.382985 545838.106985,141811.145985 545839.501985,141805.788985 545841.924985,141801.806985 545844.098985,141797.952985 545846.526985,141794.270985 545849.180985,141790.809985 545852.035985,141787.313985 545855.407985,141784.315985 545858.759985,141778.763985 545865.928985,141772.511985 545874.919985,141762.709985 545891.608985,141755.482985 545903.062985,141753.252985 545906.957985,141749.978985 545913.877985,141748.666985 545918.387985,141748.768985 545921.000985,141751.304985 545924.740985,141755.513985 545927.302985,141756.711985 545927.533985,141760.888985 545927.181985,141765.244985 545925.936985,141769.700985 545924.397985,141774.175985 545923.166985,141780.031985 545922.354985,141784.630985 545921.853985,141789.209985 545921.625985,141793.664985 545921.852985,141796.571985 545922.361985,141800.821985 545923.878985,141804.901985 545926.294985,141808.334985 545929.381985,141809.624985 545931.053985,141811.674985 545934.859985,141813.219985 545939.084985,141814.397985 545943.557985,141815.347985 545948.104985,141816.698985 545956.095985,141817.630985 545969.607985,141818.087985 545974.081985,141819.103985 545980.957985,141820.067985 545985.702985,141821.975985 545989.546985,141822.773985 545990.339985,141826.310985 545992.454985,141830.547985 545993.897985,141842.968985 545996.468985,141847.509985 545997.140985,141856.800985 545997.868985,141861.005985 545998.965985,141862.625985 545999.768985,141866.109985 546002.355985,141869.292985 546005.647985,141872.113985 546009.408985,141874.515985 546013.402985,141875.853985 546016.074985,141877.440985 546020.184985,141878.605985 546024.508985,141879.480985 546028.971985,141881.195985 546039.871985,141881.790985 546044.335985,141882.519985 546053.351985,141883.053985 546057.813985,141883.746985 546061.327985,141884.939985 546065.652985,141886.382985 546069.934985,141888.045985 546074.147985,141889.902985 546078.266985,141893.383985 546084.869985,141898.220985 546092.482985,141903.490985 546099.802985,141906.468985 546103.551985,141909.433985 546106.937985,141929.822985 546129.167985,141938.792985 546139.272985,141943.052985 546143.689985,141949.747985 546149.692985,141964.954985 546162.315985,141973.916985 546169.572985,141988.206985 546180.523985,141994.103985 546185.427985,142000.869985 546191.374985,142006.985985 546197.194985,142010.101985 546200.434985,142022.076985 546213.883985,142031.699985 546223.931985,142040.717985 546233.530985,142049.725985 546243.589985,142058.221985 546253.642985,142066.572985 546264.239985,142071.784985 546271.572985,142087.501985 546294.715985,142092.258985 546301.453985,142100.397985 546312.229985,142108.079985 546321.503985,142125.060985 546340.016985,142133.543985 546348.938985,142143.242985 546358.327985,142163.998985 546377.305985,142173.789985 546386.599985,142191.111985 546403.493985,142204.870985 546417.738985,142212.229985 546425.909985,142226.183985 546442.081985,142233.915985 546451.275985,142245.281985 546465.234985,142249.865985 546470.532985,142260.724985 546482.422985,142276.240985 546498.862985,142283.837985 546507.332985,142289.597985 546514.245985,142305.035985 546533.383985,142311.432985 546541.561985,142319.545985 546552.352985,142325.631985 546560.748985,142331.597985 546569.324985,142352.206985 546601.281985,142358.484985 546610.374985,142363.806985 546617.636985,142370.309985 546626.052985,142375.995985 546633.031985,142381.874985 546639.851985,142388.050985 546646.513985,142394.445985 546652.851985,142406.112985 546663.869985,142412.850985 546669.837985,142418.240985 546674.127985,142443.384985 546692.509985,142450.371985 546698.165985,142457.310985 546704.523985,142460.526985 546707.694985,142466.605985 546714.329985,142470.300985 546719.095985,142475.145985 546726.700985,142483.032985 546740.420985,142501.498985 546775.196985,142510.156985 546792.354985,142514.053985 546800.467985,142518.478985 546810.391985,142522.272985 546820.003985,142525.007985 546828.570985,142528.781985 546841.541985,142532.004985 546851.396985,142534.853985 546859.935985,142539.055985 546873.966985,142541.391985 546882.669985,142542.843985 546889.440985,142543.557985 546893.873985,142544.550985 546902.823985,142545.871985 546922.835985,142546.360985 546938.371985,142546.544985 546956.386985,142546.739985 546960.876985,142547.362985 546967.620985,142548.653985 546976.536985,142550.299985 546985.393985,142551.436985 546990.406985,142554.966985 547003.451985,142555.834985 547007.422985,142557.197985 547016.310985,142558.683985 547029.428985,142559.219985 547035.983985,142568.219985 547036.121985,142572.728985 547036.024985,142581.714985 547035.501985,142591.573985 547035.199985,142595.869985 547034.180985,142597.816985 547032.770985,142600.066985 547029.423985,142601.774985 547025.338985,142603.042985 547020.781985,142603.973985 547016.020985,142604.933985 547009.293985,142605.238985 547004.860985,142605.137985 547000.377985,142603.950985 546984.754985,142603.663985 546971.251985,142603.742985 546962.255985,142604.252985 546952.983985,142607.153985 546916.365985,142607.517985 546898.350985,142607.740985 546893.863985,142608.381985 546887.057985,142608.975985 546882.544985,142609.858985 546878.111985,142611.177985 546873.849985,142613.093985 546869.621985,142615.298985 546865.709985,142622.403985 546854.127985,142624.843985 546849.369985,142627.944985 546842.588985,142629.542985 546838.792985,142626.214985 546838.483985,142622.666985 546837.753985,142618.842985 546836.097985,142616.469985 546834.131985,142613.916985 546830.574985,142611.830985 546826.313985,142607.626985 546815.755985,142606.081985 546811.513985,142604.771985 546807.169985,142603.734985 546802.764985,142603.006985 546798.336985,142602.576985 546792.392985,142602.860985 546774.337985,142602.460985 546761.163985,142602.555985 546756.672985,142603.363985 546746.339985,142604.441985 546737.393985,142606.371985 546725.978985,142608.360985 546717.192985,142611.192985 546706.280985,142617.884985 546683.219985,142621.661985 546670.257985,142624.159985 546661.045985,142628.692985 546643.625985,142629.847985 546640.178985,142633.051985 546631.746985,142634.346985 546627.450985,142636.677985 546616.584985,142638.067985 546607.674985,142638.672985 546602.065985,142639.054985 546593.084985)) MULTIPOLYGON(((141877.641440651 545899.174621292,141877.705860312 545899.294221892,141882.11313423 545909.102129247,141883.65813423 545913.327129247,141885.747003497 545919.984419878,141886.925003497 545924.457419878,141887.812773449 545928.219509296,141888.066269442 545929.432821165,141894.314514948 545931.768203543,141895.934514948 545932.571203543,141907.337873997 545939.553978711,141910.821873997 545942.140978711,141920.028110834 545950.223119104,141923.211110834 545953.515119104,141929.291070623 545960.64543261,141932.112070623 545964.40643261,141936.386163135 545970.755561895,141938.788163135 545974.749561895,141941.577933878 545979.821814492,141942.915933878 545982.493814492,141945.819306375 545989.059178425,141947.406306375 545993.169178425,141949.858608213 546000.673761355,141951.023608213 546004.997761355,141952.204821483 546010.079457345,141953.079821483 546014.542457345,141953.569534375 546017.314933424,141955.284534375 546028.214933424,141955.538513823 546029.962978582,141956.133513823 546034.426978582,141956.547015579 546038.291492288,141957.068194351 546044.737236885,141957.152341479 546044.950412983,141957.325820875 546045.335206539,141958.314278321 546047.210180545,141960.358181963 546050.427099798,141963.321167297 546054.54266956,141964.077791321 546055.495182476,141965.289877034 546056.879372097,141985.095300574 546078.473102308,141985.912357827 546079.378606053,141993.853063383 546088.324072012,141995.14764048 546089.666360049,141998.751538347 546092.897756449,142012.507137526 546104.315980189,142020.334324491 546110.654062739,142033.82710591 546120.994122174,142036.162117405 546122.858525009,142042.059117405 546127.762525009,142043.617847653 546129.095246693,142050.383847653 546135.042246693,142052.571936283 546137.04351867,142058.687936283 546142.86351867,142061.043334899 546145.20649664,142064.159334899 546148.44649664,142066.115612895 546150.560407407,142077.185044474 546162.992372778,142085.866152691 546172.056882324,142086.361437562 546172.579033734,142095.379437562 546182.178033734,142096.589433311 546183.497183789,142105.597433311 546193.556183789,142107.009124291 546195.178809091,142115.505124291 546205.23180909,142117.128865006 546207.221228377,142125.479865006 546217.818228377,142127.704781975 546220.789974659,142132.916781975 546228.122974659,142133.82969278 546229.436845684,142149.16407951 546252.016454521,142152.833135573 546257.213448373,142159.230621321 546265.683691205,142164.630419358 546272.202530961,142179.877347538 546288.825013818,142186.825973671 546296.133235243,142194.640460695 546303.69795518,142214.608251982 546321.955265984,142215.633435038 546322.910364135,142225.424435038 546332.204364135,142226.155519359 546332.907799244,142243.477519359 546349.801799244,142245.057240492 546351.389192419,142258.816240492 546365.634192419,142260.60074664 546367.547415314,142267.95974664 546375.718415314,142269.0138111 546376.914096464,142282.9678111 546393.086096464,142283.584044577 546393.80949635,142291.316044577 546403.00349635,142292.07492763 546403.920548225,142302.732765765 546417.009828757,142305.924370984 546420.698555731,142315.690325376 546431.391731689,142330.784633982 546447.384927968,142332.07318498 546448.785390755,142339.67018498 546457.255390755,142341.457996817 546459.323254338,142347.217996817 546466.236254338,142347.972808202 546467.156920281,142363.410808202 546486.294920281,142364.109985813 546487.175085122,142370.506985813 546495.353085122,142371.380279621 546496.491796764,142379.493279621 546507.282796764,142380.270548754 546508.335632093,142386.356548754 546516.731632093,142387.199582483 546517.918727702,142393.165582483 546526.494727702,142394.627797238 546528.67719577,142409.419852589 546551.614248168,142404.98285813 546539.132013755,142404.451559945 546537.584042013,142400.939559945 546526.976042013,142400.480225918 546525.54043112,142396.715362473 546513.353043807,142392.913672221 546501.861972869,142390.068674641 546498.500366966,142389.992878233 546498.421000584,142378.817000124 546488.493059598,142378.086926955 546487.835905028,142367.535926955 546478.212905028,142364.909602613 546475.69828352,142358.571602613 546469.32828352,142354.874841929 546465.33279835,142351.636841929 546461.56779835,142349.749969065 546459.284105417,142346.951969065 546455.758105417,142345.160602985 546453.406947759,142339.836602985 546446.125947759,142338.260264246 546443.885413098,142330.308264246 546432.132413098,142328.535037117 546429.384346234,142323.817037117 546421.710346234,142321.927671973 546418.457063955,142315.105671973 546406.001063955,142313.537302447 546402.97633277,142311.548302447 546398.91733277,142310.087612695 546395.75238239,142308.297612695 546391.62438239,142306.656350972 546387.510673792,142305.301350972 546383.799673792,142303.708958315 546378.927898727,142302.464958315 546374.629898727,142301.363692554 546370.358469992,142300.369692554 546365.973469992,142299.514129585 546361.6004171,142296.443129585 546342.9844171,142296.031539165 546340.154443547,142293.900397619 546323.243537151,142291.369310869 546306.600300969,142289.797647252 546298.659423202,142288.737110427 546293.917852643,142288.308553476 546293.200509688,142283.551347786 546285.897969508,142282.92865993 546285.0069985,142257.404927525 546252.671429486,142255.713626811 546250.444615783,142250.405626811 546243.178615783,142248.3936298 546240.283994795,142245.3646298 546235.699994795,142243.741022598 546233.13120077,142230.618022598 546211.40620077,142229.788732319 546209.998915712,142225.303732319 546202.194915712,142223.270189057 546198.409454597,142219.946189057 546191.772454597,142218.157262755 546187.933471266,142206.773016008 546161.584448555,142205.134661009 546158.129267366,142202.766978579 546153.79043851,142198.029228403 546146.079093577,142197.157513648 546144.787292029,142193.087439501 546139.196412672,142184.390821916 546127.739774611,142178.566384699 546120.446161489,142174.083672624 546115.179570395,142167.308082543 546107.599481607,142159.422241281 546099.097129671,142155.940166917 546095.579503782,142151.391959633 546091.303897605,142144.611559904 546085.39334694,142136.289796977 546078.813896639,142125.237365832 546070.586561238,142118.417472551 546065.808393395,142112.902198665 546062.282139269,142104.960071982 546057.458907426,142094.048646282 546051.200007919,142091.316510646 546049.554652727,142085.521510646 546045.894652727,142079.817683837 546041.910549586,142072.694683837 546036.426549586,142070.161582194 546034.387340126,142050.293055847 546017.670017174,142041.002535456 546010.743402652,142026.189911721 546000.435109064,142018.921797166 545995.675415887,142002.7487187 545985.68920736,142000.586631141 545984.302515005,141989.341631141 545976.815515005,141987.314120471 545975.41699534,141979.992120471 545970.186995341,141977.328827015 545968.19398906,141972.270827015 545964.23098906,141970.064148329 545962.43342474,141966.627148329 545959.52342474,141964.385724723 545957.547698138,141956.652724723 545950.452698138,141953.551828905 545947.438436458,141944.147828905 545937.754436458,141942.230328359 545935.704442536,141924.014894557 545915.484854254,141918.751360697 545910.228714887,141914.688959696 545906.513454516,141910.802596742 545903.297312571,141906.884006543 545900.37300771,141904.155584242 545898.580650665,141900.513236871 545896.480461889,141897.716337661 545895.119426113,141896.158027917 545894.523023181,141892.501650467 545894.889514175,141891.765476277 545895.020999304,141891.418106088 545895.108878539,141877.641440651 545899.174621292)),((142522.12691348 546663.927344692,142525.878983767 546668.376621498,142529.573983767 546673.142621498,142533.555039396 546678.79803713,142538.400039396 546686.40303713,142538.732285602 546686.951715847,142539.164401741 546685.379234028,142545.856401741 546662.318234028,142545.879636654 546662.23833088,142547.048457102 546658.227144582,142546.952449096 546658.28076391,142532.429577358 546662.867582888,142522.12691348 546663.927344692)),((142563.173159694 546422.597768887,142563.306554182 546420.452473534,142563.615151908 546416.874751041,142565.635474263 546398.579761601,142566.083844628 546391.381866262,142566.316980211 546383.486145069,142566.155872751 546371.599407718,142566.155107006 546369.624724347,142566.251107006 546362.111724347,142566.298470045 546360.238042892,142566.638470045 546351.240042892,142566.758978497 546348.966228369,142567.428978497 546339.147228369,142567.749862505 546335.651431536,142568.781862505 546326.712431536,142568.996946745 546325.018830018,142570.232946745 546316.099830018,142570.396767822 546314.979910454,142574.528541313 546288.149359514,142575.805994456 546278.965662607,142576.99781354 546266.976158737,142577.605675477 546262.336726435,142578.469675477 546257.032726435,142579.155638085 546253.391084627,142580.098638085 546248.986084627,142581.12902275 546244.772205971,142583.52502275 546236.072205971,142585.085329672 546231.090819493,142586.577329672 546226.850819493,142588.352000116 546222.288772705,142590.976000116 546216.144772706,142592.48278958 546212.840536993,142599.687446415 546198.003867201,142604.801459699 546186.278130712,142607.426212139 546179.524774062,142607.868379264 546178.225412599,142609.43144457 546172.934990623,142611.089485303 546166.005400484,142613.216029802 546154.975978058,142615.676026847 546140.99989037,142620.79705315 546108.57195199,142620.94099002 546107.694304261,142623.20499002 546094.384304261,142623.459485201 546092.970207417,142625.676485201 546081.294207417,142626.104627492 546079.202304987,142629.236043552 546064.93894821,142630.215513188 546057.179875575,142630.629732904 546054.337680869,142631.363732904 546049.898680869,142633.433075569 546040.881607426,142634.687075569 546036.637607426,142638.510425367 546026.472770429,142640.150425367 546022.917770429,142642.480430748 546018.466523724,142641.027357955 546015.14555981,142639.649357955 546010.64655981,142636.858689639 545997.307991374,142636.527659805 545983.684641682,142638.667197159 545970.226275604,142643.206666449 545957.377211197,142649.996200436 545945.561650871,142652.688200436 545941.730650871,142663.754572282 545929.217634588,142677.316104529 545919.464429706,142681.682104529 545917.011429706,142693.426179898 545911.879893636,142696.091415905 545900.670772273,142697.492415905 545896.969772273,142705.889871009 545880.948038762,142715.414212808 545870.187671046,142715.095917569 545869.251483659,142713.915917569 545864.45548366,142711.827420359 545850.073698504,142712.551757998 545835.559123076,142716.061734334 545821.456725019,142717.563734334 545817.223725019,142723.160850488 545805.035697335,142730.839253034 545794.039431495,142732.423638146 545792.465251846,142732.229913007 545789.113061844,142732.124214445 545786.484233213,142731.742214445 545769.618233213,142731.846088725 545763.62459162,142732.103088725 545759.14459162,142733.091845837 545750.573637772,142733.849845837 545746.220637772,142736.051277823 545737.041214111,142737.358277823 545732.791214111,142739.612245794 545726.480420921,142741.313245794 545722.315420921,142743.392610534 545717.679213852,142745.394610534 545713.592213852,142747.091156317 545710.33335266,142749.299156317 545706.33435266,142750.593646243 545704.082876687,142753.827646243 545698.676876687,142757.017309888 545693.78754534,142759.621309888 545690.11654534,142763.473053418 545685.188206237,142763.719391077 545679.586190791,142763.97417557 545675.88301874,142764.39317557 545671.41201874,142765.311343032 545664.799224985,142765.884343032 545661.694224985,142768.427830273 545651.768387062,142769.836830273 545647.505387062,142771.122607947 545644.29092145,142769.627987702 545640.4627495,142767.829230953 545635.309494721,142766.508230953 545631.030494721,142764.268758247 545621.692167086,142763.080758247 545614.825167086,142762.471320045 545610.584678423,142761.942320045 545605.971678423,142761.569706987 545601.591706649,142761.311706987 545596.952706649,142761.222789487 545590.783002569,142761.344789487 545586.221002568,142762.046551039 545577.797461739,142762.661551039 545573.417461739,142764.272420575 545565.259904795,142764.846420575 545563.015904795,142768.451340483 545552.339073997,142770.149340483 545548.332073997,142770.531903099 545547.60567335,142767.066219406 545540.164593055,142759.477943146 545525.004982854,142757.708431209 545521.208619544,142752.649431209 545509.512619544,142751.551624273 545506.833836891,142749.909624273 545502.595836891,142748.369517131 545498.224430932,142747.006517131 545493.937430932,142745.17982804 545487.085615164,142744.23982804 545482.744615164,142743.078730528 545475.837064976,142742.751730528 545473.121064976,142742.276117764 545467.208206167,142742.093117764 545462.715206167,142742.087793899 545456.744405281,142742.264793899 545452.199405281,142742.579218995 545447.664979929,142743.032218995 545443.128979929,142743.501544877 545439.384778174,142744.326544877 545433.920778174,142746.058895095 545425.641931808,142746.440700134 545424.222084185,142742.574413931 545413.288115987,142742.258216828 545412.375237292,142737.943216828 545399.653237293,142737.295828758 545397.652771653,142734.642828758 545389.044771653,142733.004052335 545382.777770118,142731.275052335 545374.766770118,142730.39806615 545369.944181358,142729.73706615 545365.486181358,142729.2381615 545361.321847849,142728.4151615 545352.329847849,142728.168278677 545348.622848739,142727.970278677 545343.880848739,142727.90723787 545341.333298509,142727.83723787 545332.302298509,142727.891109263 545328.820038693,142728.066109263 545324.299038693,142728.282894716 545320.807647582,142728.666894716 545316.318647582,142729.173441485 545311.926230933,142729.817441485 545307.494230933,142730.73712472 545302.404984802,142732.15212472 545295.870984802,142733.128689816 545291.890606991,142734.326689816 545287.526606991,142735.673200147 545283.149723014,142738.596200148 545274.587723014,142740.12311926 545270.506845414,142741.81611926 545266.353845414,142744.266591111 545260.962168915,142746.004591111 545257.507168915,142749.506386092 545251.299483692,142751.902386092 545247.487483692,142753.541574429 545244.99128141,142756.602947282 545240.525707843,142761.168560631 545232.247239227,142764.752112802 545226.398902209,142767.248112802 545222.714902209,142777.68985613 545210.401301622,142780.51585613 545207.717301622,142792.291920722 545198.576243048,142805.643305572 545191.944865233,142806.709305572 545191.541865233,142819.295518248 545188.157532351,142820.513152317 545187.588566786,142821.183881269 545187.224222223,142831.382030154 545181.101283212,142834.358861949 545179.405276062,142840.015861949 545176.351276062,142842.154490622 545175.240706808,142878.139161168 545157.282231378,142890.894082364 545150.59040817,142915.054824443 545137.381061669,142935.007701726 545125.975814653,142935.893060169 545125.477660471,142948.687060169 545118.392660471,142949.781054504 545117.798643081,142953.777054504 545115.671643081,142957.311543596 545113.908131947,142961.382543596 545112.009131947,142966.965898379 545109.67409755,142970.889898379 545108.21609755,142977.829755463 545106.014522654,142982.138755463 545104.874522654,142987.687026808 545103.629627821,142992.101026808 545102.813627821,142995.892894258 545102.212567732,143007.959724981 545100.615249922,143016.719596759 545099.11938355,143018.248987647 545098.832903706,143020.662952108 545092.718408498,143022.631952108 545089.048408498,143034.351990238 545072.843499495,143037.596990238 545069.428499495,143046.909646142 545061.133280502,143050.824646142 545058.191280502,143058.561995631 545053.092908939,143062.173995631 545051.020908939,143075.387740364 545045.056303639,143079.500740364 545043.660303638,143092.60041902 545040.492862518,143097.07641902 545039.828862518,143099.449103684 545039.54767643,143101.172981562 545036.376335872,143105.684981562 545029.050335872,143108.650602588 545024.598863184,143113.918602588 545017.271863184,143116.181237624 545014.285211233,143118.988237624 545010.766211233,143122.008219297 545007.212708468,143124.101219297 545004.899708468,143127.367650635 545001.510105772,143133.813650635 544995.228105772,143137.31405608 544992.026252749,143144.16305608 544986.148252749,143147.031765936 544983.806712825,143150.583765936 544981.050712825,143152.71192648 544979.459064256,143158.471531126 544975.308525848,143152.488954432 544973.36863557,143151.290852891 544973.14424959,143124.026374215 544968.677127825,143121.99971731 544968.316446016,143113.50171731 544966.683446016,143111.234393337 544966.211338712,143102.450393337 544964.240338712,143100.277112445 544963.71855575,143090.332112445 544961.17355575,143088.600937133 544960.708422577,143070.240937133 544955.539422577,143068.861417602 544955.136734781,143053.880810284 544950.60763316,143053.161057972 544950.438725341,143051.908121465 544950.209913447,143050.045946936 544949.938572794,143043.252308486 544949.182797573,143036.770444719 544948.620595103,143024.713379063 544948.038831855,143021.989139953 544947.857631867,143017.509139953 544947.477631867,143014.248691155 544947.129138722,143009.343691155 544946.496138722,143007.208594828 544946.189324592,142990.285346989 544943.508522675,142979.490357485 544942.269291678,142972.736217625 544941.681647607,142967.173223031 544941.374693669,142943.1990916 544940.628724454,142936.550379826 544940.587340897,142930.68011804 544940.772379481,142923.870913325 544941.191325877,142918.967690534 544941.632416726,142911.957397573 544942.439999966,142901.028620542 544943.997283252,142878.280006558 544948.146650008,142875.154627162 544948.64881862,142860.404282733 544950.700516434,142858.413860331 544951.041012977,142854.636083924 544951.823455507,142849.26098959 544953.144645952,142843.121410858 544955.022367542,142827.055332059 544960.863316742,142800.904758162 544970.905450071,142790.397929902 544975.15839382,142783.07867129 544978.465296681,142777.633670208 544981.163489181,142774.012250742 544983.152667224,142762.746978398 544989.718173814,142760.219205152 544991.126769516,142749.907137747 544996.615158539,142747.05567702 544999.291304986,142733.734838985 545012.407664625,142724.461345351 545021.795645835,142714.509975712 545030.252045505,142703.242610105 545036.854084988,142696.565524036 545040.020794194,142689.943985687 545043.567713336,142681.965999583 545048.380291592,142679.697345719 545049.944503952,142675.897007748 545053.004424698,142651.14402007 545074.417479465,142649.653387682 545075.673487137,142639.206387682 545084.246487137,142636.395792489 545086.443173381,142629.490792489 545091.580173381,142625.140699585 545094.584218452,142617.568699585 545099.428218452,142615.184279799 545100.891647667,142601.969416944 545108.666688393,142562.164704472 545132.850290716,142559.823579005 545134.215365924,142550.233579005 545139.577365924,142548.196955126 545140.675204652,142539.234955126 545145.329204653,142536.958074485 545146.462997124,142482.383727063 545172.493385305,142474.761779489 545176.356102174,142482.406079363 545179.630725143,142494.771377493 545188.192249236,142505.179836294 545199.048780818,142513.212896402 545211.763742002,142518.547521275 545225.825821154,142520.969187589 545240.669534466,142521.198187589 545244.401534466,142521.304423008 545251.27162819,142521.165423008 545255.84862819,142520.719953948 545262.043952184,142520.160953948 545266.960952184,142518.93644197 545274.387915388,142517.90544197 545279.140915388,142515.808118995 545286.817941304,142515.056118995 545289.088941304,142511.974344504 545296.900268538,142510.129344504 545300.904268538,142506.347002978 545308.067395254,142504.034002978 545311.927395254,142500.87826191 545316.761526421,142498.23526191 545320.488526421,142495.409062494 545324.221232926,142489.676062494 545331.321232926,142486.919842444 545334.543836362,142483.586842444 545338.224836361,142479.912126979 545342.007023169,142476.666126979 545345.121023169,142474.661850396 545346.974931165,142468.697811973 545352.293396033,142464.203470399 545356.531873697,142454.541347208 545365.724817935,142452.584128009 545367.522024945,142443.022128009 545375.995024945,142441.04960024 545377.682871661,142434.107600241 545383.417871661,142431.701765061 545385.323937958,142428.433765061 545387.805937958,142426.46390746 545389.252026981,142419.11190746 545394.467026981,142415.918336539 545396.61138019,142408.307336539 545401.44338019,142404.693715607 545403.597791806,142400.772715607 545405.788791806,142397.580305623 545407.473168062,142393.242305623 545409.630168062,142390.430997905 545410.956111498,142386.323997905 545412.790111498,142383.800762344 545413.862000919,142375.436762344 545417.236000919,142373.921850366 545417.828091793,142354.880850366 545425.033091793,142351.857572356 545426.103759784,142339.627572356 545430.142759784,142337.296611591 545430.870700603,142328.658611591 545433.414700603,142326.411210068 545434.038779898,142318.396210068 545436.130779898,142315.980343142 545436.718751866,142302.801343142 545439.695751866,142299.253317627 545440.407712063,142289.121317627 545442.187712063,142284.708190846 545442.828409761,142275.773190846 545443.855409761,142271.882365889 545444.20024013,142253.206365889 545445.36624013,142250.25361744 545445.492245229,142220.88261744 545446.166245229,142219.060016947 545446.185915684,142203.614016947 545446.164915683,142201.2893183 545446.125716645,142196.7793183 545445.979716645,142192.690018858 545445.735396753,142188.218018858 545445.345396753,142181.260662092 545444.40885739,142174.530662092 545443.17985739,142169.610029942 545442.109423296,142165.246029942 545441.005423296,142162.422688099 545440.232250626,142158.089688099 545438.954250626,142155.385672467 545438.100829672,142146.827672467 545435.220829672,142143.957663255 545434.189573698,142138.874663255 545432.245573698,142135.395019772 545430.81372461,142120.566269665 545424.27215827,142119.500301508 545423.861962333,142118.932465517 545424.64621397,142118.416616784 545425.447422053,142115.945297515 545429.875647972,142111.755470398 545438.185258358,142106.938614375 545448.752069634,142091.875059809 545482.79340861,142091.161457398 545484.35735578,142085.417457398 545496.57335578,142083.87780535 545499.661265107,142081.16980535 545504.793265107,142079.948570884 545507.01578929,142071.042744047 545522.593552343,142054.94650702 545553.292493106,142045.071599927 545573.0868089,142043.375666967 545576.98830646,142043.012707197 545578.025926654,142042.687487035 545579.140709098,142038.867375782 545594.258708892,142038.702371777 545594.967616983,142039.999868991 545595.408297746,142043.936868991 545597.089297746,142054.71169485 545602.764967093,142058.50569485 545605.175967093,142065.560500836 545610.256118784,142069.179500836 545613.195118784,142073.735272826 545617.211670854,142077.147272826 545620.474670854,142080.054005554 545623.411995294,142083.224005554 545626.796995294,142084.607367054 545628.315329402,142086.159367054 545630.066329402,142090.099232188 545634.902450304,142092.781232188 545638.489450304,142098.246747572 545646.923757937,142100.482747572 545650.940757937,142104.283592674 545658.817469041,142106.037592674 545663.069469041,142108.691283741 545670.623066138,142109.845283741 545674.570066138,142111.528646058 545681.553520292,142112.388646058 545686.058520292,142113.489339174 545694.257333541,142113.860339174 545698.987333541,142113.777659688 545711.68947355,142113.360659688 545716.24447355,142110.041757597 545732.461231854,142109.090757597 545735.405231854,142103.032253541 545749.223316403,142100.903253541 545752.994316403,142095.330868988 545761.46936879,142093.646225074 545763.688616171,142098.550316565 545766.24689881,142102.797775984 545768.343405524,142113.816242033 545773.253770126,142116.914930893 545774.720479237,142120.923930893 545776.731479237,142127.662708786 545780.559799026,142132.961708786 545783.943799026,142138.714106076 545788.009867193,142142.274106076 545790.785867193,142145.156612386 545793.151111169,142148.580612386 545796.106111169,142150.437720568 545797.763401057,142155.661720568 545802.583401057,142157.735963031 545804.572134176,142164.115963031 545810.928134176,142165.673621997 545812.526816921,142171.861621997 545819.069816921,142173.151904 545820.469275711,142176.463904 545824.154275711,142177.878853344 545825.774733029,142199.229459399 545850.946026069,142221.937738805 545877.342049,142227.64281376 545883.624660946,142236.231104288 545892.527201918,142237.528325489 545893.90631015,142241.489325489 545898.22531015,142242.377659016 545899.211304892,142259.046659016 545918.045304892,142259.16655617 545918.181104611,142267.189603148 545927.29043874,142280.910275395 545942.276089567,142283.18600906 545944.879684065,142295.517998649 545959.662686634,142306.82496395 545972.664930935,142308.690271817 545974.895819744,142318.185271817 545986.709819744,142319.789204154 545988.778400791,142329.414204154 546001.649400791,142331.082877465 546003.971869915,142340.093877465 546017.031869915,142341.509990276 546019.161057488,142361.117748757 546049.760925374,142371.936714522 546065.945512046,142372.383540469 546066.621821419,142403.978907861 546115.010649734,142418.663908489 546136.81470032,142419.380778098 546137.899267784,142428.93169517 546152.624939006,142438.590926089 546167.134469946,142446.478024591 546178.272031506,142449.009493112 546182.088746497,142451.373493112 546185.900746497,142454.002540033 546190.494510525,142458.624540033 546199.275510525,142460.294366874 546202.650869281,142462.205366874 546206.770869281,142463.933813868 546210.802105003,142465.587813868 546214.994105003,142467.553964639 546220.622969176,142468.855964639 546224.887969176,142470.850503657 546233.023701517,142471.732503657 546237.748701517,142472.732551988 546245.112533143,142473.115551988 546249.585533143,142473.353740942 546253.684992485,142474.164517048 546280.122500448,142474.518945557 546286.854394166,142475.484082272 546297.455381361,142475.577554892 546298.145593092,142476.412377262 546302.435159099,142477.515627436 546306.680897539,142478.821771293 546310.678715758,142479.005469818 546311.135719612,142486.329182661 546326.449096693,142489.161147018 546333.19831702,142494.444598775 546347.741337944,142496.432724976 546349.110054672,142509.296724976 546358.654054672,142512.252083793 546360.963456642,142522.422083793 546369.328456642,142524.729839064 546371.306366957,142531.495839064 546377.347366957,142535.750742092 546381.459251793,142538.853742092 546384.704251793,142542.734440379 546389.093662879,142544.865440379 546391.702662879,142548.527244314 546396.577600794,142551.064244314 546400.257600794,142554.007091707 546404.878853121,142556.293091707 546408.775853121,142558.494817299 546412.807189941,142560.549817299 546416.860189941,142562.683639161 546421.445755647,142563.173159694 546422.597768887)),((142330.52667867 545247.979227065,142325.921467736 545249.418839789,142322.795018404 545250.322209481,142314.097018404 545252.632209481,142310.460457631 545253.50156783,142301.360457631 545255.43856783,142299.515629523 545255.807129216,142273.62732534 545260.642287556,142266.855884877 545262.064251601,142264.544640488 545262.629973512,142252.558719513 545265.889979474,142288.558655642 545265.17039555,142294.585171074 545264.804812626,142300.630922759 545264.266142203,142303.567647948 545263.642920539,142303.739033976 545263.596057171,142307.610458301 545262.293065229,142310.660293699 545261.008290469,142311.629833117 545260.532391423,142313.271351219 545259.656805173,142318.51700937 545256.60417322,142319.800897554 545255.792958607,142324.602377781 545252.462868348,142330.52667867 545247.979227065))) #20 Polygon - gid: 2520 POLYGON((158481.432985 510583.562985,158489.304985 510568.137985,158489.742985 510554.602985,158495.366985 510539.211985,158506.487985 510532.681985,158525.237985 510536.074985,158524.509985 510524.803985,158520.526985 510499.704985,158521.742985 510487.947985,158532.814985 510476.516985,158555.418985 510459.975985,158566.707985 510455.588985,158567.920985 510448.494985,158577.510985 510431.915985,158588.800985 510429.989985,158644.968985 510413.253985,158646.535985 510388.879985,158639.226985 510363.317985,158625.047985 510378.536985,158614.302985 510385.658985,158587.607985 510397.181985,158536.683985 510422.499985,158517.905985 510433.457985,158502.462985 510442.913985,158484.671985 510442.967985,158476.273985 510428.753985,158462.699985 510418.836985,158461.863985 510434.462985,158450.400985 510443.041985,158440.544985 510461.406985,158426.745985 510479.269985,158426.784985 510498.045985,158425.669985 510520.088985,158428.047985 510546.655985,158419.106985 510571.356985,158413.970985 510573.103985,158389.245985 510566.742985,158363.334985 510557.918985,158334.185985 510548.758985,158315.090985 510548.140985,158310.171985 510556.985985,158307.972985 510575.658985,158306.700985 510582.332985,158301.611985 510609.026985,158300.440985 510636.711985,158311.307985 510641.956985,158342.899985 510660.167985,158356.271985 510670.241985,158374.033985 510686.769985,158399.760985 510698.276985,158425.077985 510713.270985,158449.656985 510724.790985,158472.445985 510734.800985,158484.168985 510734.772985,158490.402985 510728.308985,158497.468985 510716.696985,158500.802985 510700.146985,158495.940985 510683.642985,158479.917985 510651.629985,158470.433985 510635.228985,158468.860985 510617.597985,158470.049985 510610.615985,158481.432985 510583.562985)) POLYGON( EMPTY) #21 Polygon - gid: 2521 POLYGON((157869.315985 520433.637985,157856.178985 520399.216985,157834.269985 520383.765985,157837.129985 520350.383985,157849.976985 520324.750985,157884.267985 520315.565985,157928.572985 520281.754985,157969.435985 520288.428985,157995.223985 520278.692985,158043.757985 520253.692985,158088.001985 520238.144985,158131.710985 520233.176985,158161.789985 520246.081985,158177.706985 520240.052985,158184.062985 520208.456985,158173.722985 520194.194985,158141.933985 520199.529985,158117.247985 520208.894985,158058.927985 520207.808985,158035.018985 520213.752985,158019.448985 520203.796985,158016.808985 520180.093985,158007.024985 520150.917985,157971.159985 520128.594985,157943.413985 520100.672985,157936.868985 520070.503985,157895.009985 520063.382985,157866.038985 520063.004985,157831.988985 520058.373985,157815.198985 520060.788985,157814.667985 520062.114985,157805.376985 520079.736985,157805.131985 520111.664985,157793.919985 520111.222985,157780.766985 520105.771985,157761.185985 520162.929985,157768.122985 520191.771985,157788.795985 520203.076985,157809.040985 520190.281985,157822.093985 520173.832985,157849.686985 520173.862985,157865.312985 520195.645985,157879.132985 520236.462985,157885.168985 520252.260985,157867.794985 520266.033985,157813.882985 520286.000985,157795.021985 520258.542985,157778.258985 520254.263985,157744.848985 520244.603985,157712.168985 520249.566985,157684.754985 520260.299985,157665.400985 520256.359985,157651.387985 520249.849985,157648.472985 520254.899985,157628.126985 520277.906985,157632.442985 520323.400985,157637.148985 520356.136985,157613.676985 520373.009985,157611.837985 520410.654985,157615.005985 520437.710985,157641.030985 520432.938985,157674.459985 520440.319985,157700.786985 520441.225985,157736.859985 520437.355985,157780.029985 520431.763985,157800.420985 520439.994985,157800.694985 520446.629985,157801.243985 520459.900985,157790.056985 520479.632985,157799.422985 520483.141985,157816.313985 520487.074985,157838.367985 520462.690985,157869.315985 520433.637985)) POLYGON((157709.297185021 520330.935932945,157711.385825117 520345.464985685,157712.092131453 520359.056710976,157711.360558615 520364.661253674,157728.04149239 520362.871682146,157761.152813139 520358.582627117,157762.403736042 520343.98182,157762.978712539 520340.826547721,157761.146281582 520339.328652421,157752.062634395 520328.465608525,157748.887917416 520323.843829254,157739.832907843 520321.225709156,157731.711564547 520322.459069829,157712.097710963 520330.138193288,157709.297185021 520330.935932945)) #22 Polygon - gid: 2522 POLYGON((153150.576985 520940.908985,153155.070985 520940.770985,153160.755985 520940.781985,153164.005985 520941.150985,153168.185985 520942.767985,153171.314985 520944.415985,153176.455985 520947.720985,153181.606985 520950.538985,153187.215985 520951.893985,153191.791985 520952.155985,153194.139985 520957.187985,153198.008985 520954.124985,153208.046985 520950.059985,153211.950985 520947.552985,153213.758985 520945.586985,153214.902985 520941.306985,153215.775985 520929.532985,153215.470985 520922.256985,153214.866985 520917.795985,153213.474985 520912.584985,153211.409985 520906.797985,153210.203985 520901.480985,153209.430985 520896.154985,153208.215985 520891.322985,153205.244985 520887.996985,153199.275985 520882.262985,153186.430985 520871.760985,153179.902985 520862.984985,153170.213985 520851.001985,153166.668985 520848.128985,153161.060985 520844.857985,153155.362985 520842.770985,153143.662985 520841.207985,153139.192985 520839.449985,153135.769985 520836.517985,153129.812985 520836.242985,153123.860985 520836.882985,153110.129985 520839.130985,153102.570985 520841.192985,153093.632985 520838.265985,153088.575985 520835.220985,153089.898985 520839.123985,153088.596985 520843.497985,153087.569985 520848.617985,153085.579985 520853.123985,153082.305985 520856.232985,153076.601985 520860.218985,153069.971985 520867.620985,153066.452985 520870.596985,153062.482985 520874.551985,153057.274985 520878.033985,153053.286985 520880.057985,153052.184985 520880.379985,153040.541985 520881.305985,153032.802985 520886.739985,153029.682985 520891.650985,153029.254985 520893.428985,153029.218985 520898.552985,153030.785985 520902.794985,153034.873985 520909.239985,153042.145985 520918.628985,153045.594985 520922.358985,153049.039985 520925.290985,153052.880985 520927.634985,153059.322985 520930.915985,153063.631985 520932.293985,153066.569985 520934.161985,153070.047985 520937.030985,153074.235985 520943.145985,153077.665985 520949.675985,153079.284985 520953.852985,153079.434985 520955.143985,153079.208985 520960.521985,153080.289985 520975.063985,153079.732985 520983.766985,153078.599985 520992.696985,153083.367985 520992.610985,153087.736985 520990.589985,153091.101985 520987.618985,153094.791985 520983.665985,153100.121985 520976.287985,153104.957985 520972.316985,153117.724985 520959.010985,153121.262985 520956.153985,153125.222985 520953.503985,153129.591985 520951.482985,153136.603985 520946.987985,153144.695985 520943.045985,153149.109985 520941.277985,153150.576985 520940.908985)) POLYGON( EMPTY) #23 Polygon - gid: 2523 POLYGON((157261.821985 521212.042985,157255.517985 521158.904985,157227.447985 521110.819985,157193.480985 521080.159985,157154.275985 521056.383985,157110.994985 521055.200985,157075.666985 521042.824985,157053.089985 521016.601985,157057.673985 520992.362985,157039.358985 520960.816985,157034.486985 520926.714985,157029.615985 520902.356985,156995.512985 520877.997985,156966.282985 520873.125985,156937.052985 520873.125985,156907.821985 520863.382985,156873.719985 520843.895985,156855.757985 520822.219985,156849.459985 520818.621985,156836.865985 520811.424985,156793.392985 520777.048985,156766.039985 520737.460985,156728.760985 520722.977985,156710.216985 520732.313985,156697.880985 520740.090985,156693.336985 520756.434985,156668.342985 520768.289985,156629.440985 520764.303985,156604.591985 520776.688985,156602.502985 520800.105985,156616.097985 520861.121985,156609.482985 520899.994985,156586.751985 520928.161985,156566.844985 520935.459985,156563.162985 520961.757985,156557.828985 520985.666985,156555.414985 521022.078985,156562.430985 521063.373985,156560.713985 521082.827985,156553.817985 521111.533985,156555.075985 521118.090985,156559.312985 521117.477985,156590.563985 521112.953985,156645.119985 521099.542985,156681.977985 521069.587985,156745.810985 521043.788985,156797.577985 521042.609985,156839.811985 521059.742985,156900.802985 521071.653985,156963.644985 521085.826985,156980.767985 521096.550985,157015.014985 521117.998985,157045.450985 521159.433985,157060.450985 521187.893985,157099.503985 521191.189985,157138.274985 521174.733985,157191.026985 521169.054985,157232.239985 521201.560985,157257.694985 521216.582985,157261.821985 521212.042985)) POLYGON((156631.095656882 521014.295354275,156634.676048003 521011.38552151,156643.851709985 521005.00170818,156653.874255463 521000.052523643,156717.707255463 520974.253523643,156730.658675837 520970.335547184,156744.103293312 520968.808428927,156795.870293312 520967.629428927,156811.101565777 520968.83930815,156825.771566439 520973.110906117,156861.294856822 520987.521583157,156915.178256666 520998.044532044,156917.303575206 520998.491627719,156978.458943209 521012.284235063,156979.041998034 521006.300667263,156974.497999612 520998.474023844,156968.502649166 520985.401119564,156965.112860065 520971.424196327,156961.82603665 520948.41778169,156960.075376293 520948.125985,156937.052985 520948.125985,156925.040076572 520947.157667617,156913.337363025 520944.277719163,156884.106363025 520934.534719163,156870.611358984 520928.501103151,156836.509358984 520909.014103151,156825.461831265 520901.308096946,156815.970836196 520891.750303639,156806.709938491 520880.574531528,156799.653894166 520876.542266084,156790.346650885 520870.254837571,156746.873650885 520835.878837571,156738.67880068 520828.345749364,156732.07152263 520820.156651212,156725.478303553 520824.198807514,156700.484303553 520836.053807514,156688.345254244 520840.513209791,156689.302884797 520844.811171234,156691.07391221 520859.221895786,156690.035101518 520873.703829102,156683.420101518 520912.576829102,156680.22196136 520924.914800881,156674.980833687 520936.533072215,156667.848085666 520947.096099894,156645.117085666 520975.263099894,156635.733933358 520984.95783639,156634.659225174 520985.727668446,156632.28366467 520996.375826696,156631.095656882 521014.295354275)) #24 Polygon - gid: 2524 POLYGON((157198.781985 521343.128985,157167.375985 521333.418985,157161.598985 521339.797985,157164.714985 521379.602985,157160.482985 521417.461985,157147.909985 521451.287985,157146.214985 521493.149985,157153.755985 521521.467985,157172.019985 521558.894985,157193.474985 521583.667985,157202.389985 521607.497985,157215.882985 521640.795985,157219.352985 521646.857985,157226.292985 521658.980985,157246.124985 521668.670985,157251.301985 521666.452985,157261.655985 521662.017985,157262.134985 521635.987985,157274.849985 521612.355985,157297.013985 521594.829985,157301.610985 521571.282985,157288.486985 521545.637985,157285.205985 521539.225985,157270.572985 521505.724985,157269.548985 521478.705985,157307.010985 521424.848985,157283.533985 521402.041985,157242.954985 521367.245985,157198.781985 521343.128985)) POLYGON( EMPTY) #25 Polygon - gid: 2525 POLYGON((153125.509985 521860.224985,153129.708985 521849.726985,153136.136985 521836.144985,153138.731985 521832.043985,153142.336985 521823.841985,153148.967985 521810.226985,153150.370985 521805.542985,153153.006985 521792.564985,153154.402985 521777.197985,153153.618985 521769.895985,153152.742985 521765.487985,153148.961985 521758.774985,153144.279985 521752.074985,153143.056985 521750.968985,153139.230985 521748.538985,153134.217985 521746.356985,153114.663985 521739.427985,153109.650985 521737.245985,153103.330985 521736.862985,153086.671985 521737.137985,153084.952985 521736.685985,153066.181985 521728.868985,153061.034985 521727.319985,153055.740985 521726.155985,153040.417985 521725.642985,153034.931985 521727.163985,153030.266985 521728.048985,153025.756985 521727.483985,153021.504985 521725.925985,153021.401985 521740.811985,153025.620985 521762.422985,153028.396985 521782.239985,153029.073985 521790.804985,153029.015985 521795.534985,153024.560985 521796.077985,153020.647985 521795.895985,153016.211985 521796.659985,153013.478985 521797.356985,153008.572985 521799.235985,152992.029985 521803.995985,152987.552985 521804.245985,152977.157985 521803.766985,152967.736985 521805.261985,152960.981985 521805.362985,152944.483985 521808.310985,152939.425985 521807.940985,152933.133985 521808.486985,152926.828985 521808.580985,152920.548985 521809.576985,152911.549985 521809.710985,152907.098985 521810.416985,152899.442985 521812.148985,152887.438985 521818.195985,152882.959985 521819.165985,152878.228985 521818.958985,152873.052985 521819.313985,152871.421985 521823.741985,152865.942985 521823.030985,152861.490985 521823.806985,152857.111985 521826.478985,152855.683985 521831.547985,152854.440985 521846.644985,152854.133985 521857.957985,152854.309985 521860.213985,152855.839985 521866.961985,152865.036985 521874.045985,152874.713985 521882.075985,152878.858985 521884.969985,152882.944985 521886.866985,152892.209985 521888.583985,152896.537985 521889.822985,152903.363985 521892.428985,152907.024985 521893.185985,152911.504985 521893.661985,152917.130985 521892.998985,152921.564985 521892.074985,152925.843985 521890.738985,152929.677985 521888.711985,152935.486985 521884.287985,152943.654985 521875.835985,152946.532985 521872.376985,152949.115985 521867.824985,152953.949985 521863.238985,152957.006985 521859.582985,152964.207985 521853.973985,152968.477985 521851.612985,152980.671985 521851.556985,152998.660985 521850.384985,153009.055985 521850.742985,153026.285985 521852.273985,153035.705985 521854.344985,153040.268985 521856.533985,153046.370985 521860.369985,153050.401985 521863.561985,153053.601985 521866.714985,153054.745985 521870.862985,153054.699985 521875.367985,153050.734985 521877.589985,153036.784985 521883.448985,153031.563985 521884.752985,153019.770985 521884.870985,153013.815985 521886.226985,153007.358985 521888.514985,153003.322985 521890.484985,152999.693985 521893.183985,152996.722985 521896.450985,152996.967985 521901.236985,153000.089985 521904.523985,153001.564985 521905.515985,153009.179985 521909.352985,153018.336985 521912.795985,153031.944985 521916.685985,153035.712985 521918.129985,153039.695985 521920.180985,153040.907985 521921.185985,153047.115985 521928.193985,153060.087985 521944.758985,153063.400985 521947.809985,153066.383985 521949.961985,153070.274985 521952.220985,153072.724985 521953.203985,153077.118985 521954.381985,153081.603985 521954.758985,153084.286985 521954.026985,153088.286985 521951.951985,153089.550985 521950.525985,153093.585985 521943.221985,153095.608985 521939.204985,153100.205985 521925.595985,153104.279985 521909.286985,153106.388985 521903.838985,153108.425985 521895.684985,153111.363985 521887.516985,153114.763985 521879.792985,153125.509985 521860.224985)) POLYGON( EMPTY) #26 Polygon - gid: 2526 POLYGON((157932.417985 522155.088985,157944.275985 522122.344985,157937.133985 522096.277985,157945.879985 522082.105985,157967.232985 522064.316985,157982.322985 522039.440985,158000.496985 522030.869985,158009.669985 522049.652985,158032.912985 522049.223985,158031.812985 522022.937985,158031.808985 521996.628985,158045.642985 521975.762985,158053.730985 521989.459985,158063.586985 522015.397985,158083.101985 522030.407985,158106.174985 522054.201985,158119.395985 522059.194985,158140.518985 522030.272985,158150.745985 522010.370985,158145.639985 521985.458985,158099.206985 521948.659985,158056.817985 521923.022985,158031.872985 521941.121985,157999.283985 521920.250985,157975.074985 521885.098985,157938.659985 521874.332985,157900.267985 521882.868985,157865.445985 521868.290985,157831.202985 521856.440985,157809.952985 521830.208985,157790.517985 521806.917985,157761.250985 521788.022985,157741.055985 521775.447985,157745.715985 521787.101985,157755.892985 521825.646985,157771.649985 521862.272985,157803.680985 521930.634985,157790.216985 521978.321985,157761.706985 521986.509985,157746.491985 522006.246985,157772.072985 522027.363985,157800.108985 522054.487985,157816.264985 522079.960985,157836.791985 522101.384985,157844.809985 522124.051985,157862.795985 522126.713985,157889.746985 522125.611985,157916.287985 522156.041985,157921.886985 522165.446985,157932.417985 522155.088985)) POLYGON ((157858.57914185867 522008.3453885631, 157863.44444038192 522014.31809463963, 157875.59429040362 522033.47463893297, 157883.09502664296 522041.3031464203, 157889.22642461277 522032.95952942636, 157897.8743840681 522024.48253249004, 157909.60455873946 522014.7102252157, 157918.19873357913 522000.54265110625, 157926.94878182272 521988.85741432256, 157937.7967307582 521979.0885808789, 157946.77683321957 521973.72816572373, 157937.51531493766 521962.7907475608, 157930.72356280676 521952.92897421593, 157916.54584579886 521956.0812192769, 157901.29505984765 521957.86195211863, 157886.00122668233 521956.4995466379, 157875.2308944553 521953.23936733446, 157862.3952427896 521998.70087364636, 157858.57914185867 522008.3453885631)) #27 Polygon - gid: 2527 POLYGON((149946.529985 522862.341985,149966.481985 522827.471985,149971.102985 522795.593985,149955.120985 522773.194985,149939.535985 522777.700985,149919.295985 522795.320985,149896.669985 522804.718985,149890.945985 522795.728985,149898.974985 522765.579985,149920.144985 522727.754985,149913.346985 522702.453985,149883.812985 522706.570985,149875.847985 522712.141985,149848.867985 522733.237985,149847.635985 522734.278985,149844.408985 522737.640985,149838.341985 522744.662985,149834.815985 522747.431985,149824.076985 522739.434985,149816.408985 522734.720985,149812.125985 522731.061985,149802.392985 522719.891985,149798.360985 522714.476985,149788.169985 522702.133985,149784.674985 522696.954985,149783.454985 522694.846985,149781.555985 522690.771985,149780.739985 522687.972985,149780.149985 522683.502985,149780.341985 522679.629985,149782.374985 522664.239985,149783.390985 522660.945985,149785.909985 522654.333985,149795.392985 522633.032985,149790.732985 522630.377985,149788.450985 522629.815985,149783.947985 522629.324985,149779.954985 522629.236985,149763.488985 522630.011985,149759.275985 522628.393985,149754.474985 522624.634985,149751.188985 522621.536985,149746.287985 522615.463985,149744.142985 522613.104985,149740.146985 522609.133985,149736.579985 522606.158985,149729.751985 522601.390985,149726.308985 522598.550985,149724.513985 522596.066985,149722.709985 522591.906985,149718.527985 522593.569985,149708.661985 522598.397985,149706.262985 522599.786985,149703.001985 522602.886985,149699.606985 522606.922985,149697.587985 522611.774985,149695.862985 522616.877985,149695.505985 522618.594985,149695.224985 522623.072985,149695.263985 522627.591985,149695.661985 522632.426985,149694.473985 522637.230985,149693.005985 522640.325985,149689.515985 522643.252985,149684.312985 522644.206985,149680.293985 522644.052985,149676.063985 522642.545985,149670.784985 522639.861985,149661.685985 522633.920985,149656.545985 522630.804985,149652.902985 522628.165985,149645.682985 522622.646985,149640.918985 522618.527985,149634.442985 522612.273985,149630.501985 522609.470985,149628.581985 522608.498985,149624.066985 522606.761985,149622.208985 522606.930985,149618.814985 522609.527985,149615.790985 522613.190985,149614.293985 522615.264985,149612.288985 522619.274985,149611.210985 522622.320985,149608.321985 522633.178985,149608.059985 522634.774985,149607.991985 522646.548985,149608.575985 522654.849985,149610.186985 522665.048985,149611.456985 522683.114985,149612.528985 522687.482985,149614.559985 522694.254985,149615.501985 522696.106985,149618.647985 522699.565985,149620.744985 522700.686985,149625.134985 522700.457985,149632.636985 522698.591985,149637.449985 522697.223985,149639.247985 522696.603985,149643.376985 522694.800985,149645.312985 522693.777985,149650.006985 522690.545985,149656.345985 522685.250985,149661.382985 522680.526985,149666.521985 522677.267985,149670.359985 522674.578985,149674.725985 522673.240985,149679.179985 522672.528985,149684.103985 522674.538985,149686.519985 522678.573985,149687.938985 522682.812985,149688.390985 522687.254985,149688.214985 522693.094985,149687.852985 522697.577985,149687.255985 522702.043985,149686.243985 522707.382985,149684.070985 522716.888985,149682.707985 522721.337985,149682.734985 522723.346985,149684.410985 522727.516985,149689.127985 522735.746985,149690.970985 522739.883985,149691.645985 522744.652985,149686.699985 522813.572985,149681.925985 522845.160985,149688.863985 522854.293985,149701.543985 522856.177985,149715.246985 522845.580985,149731.486985 522843.349985,149755.832985 522836.089985,149821.720985 522854.503985,149835.820985 522867.489985,149866.684985 522900.071985,149876.926985 522910.894985,149904.293985 522940.758985,149925.071985 522967.911985,149942.329985 522987.487985,149953.714985 522987.343985,149958.169985 522985.691985,149957.918985 522959.085985,149944.105985 522944.060985,149933.546985 522923.664985,149934.447985 522897.200985,149946.529985 522862.341985)) POLYGON( EMPTY) #28 Polygon - gid: 2528 POLYGON((149018.973985 523298.843985,149027.116985 523297.053985,149050.059985 523306.128985,149076.982985 523309.933985,149115.614985 523303.010985,149138.271985 523304.959985,149139.167985 523304.141985,149158.847985 523286.186985,149166.967985 523275.518985,149179.148985 523259.517985,149173.818985 523231.813985,149167.615985 523190.279985,149174.951985 523171.330985,149185.861985 523154.667985,149195.141985 523139.933985,149191.733985 523114.168985,149179.721985 523100.162985,149165.431985 523093.446985,149150.425985 523084.926985,149129.423985 523071.851985,149098.282985 523060.898985,149029.121985 523053.160985,148976.031985 523045.466985,148942.291985 523052.693985,148917.595985 523075.582985,148901.824985 523080.306985,148893.055985 523076.432985,148886.454985 523062.972985,148880.164985 523039.382985,148859.571985 523028.839985,148828.760985 523030.525985,148815.572985 523023.883985,148808.978985 523020.562985,148786.739985 522996.944985,148759.561985 522965.858985,148738.872985 522945.856985,148717.476985 522944.896985,148697.866985 522970.021985,148695.903985 522969.977985,148704.000985 522984.059985,148700.995985 523005.520985,148692.918985 523043.111985,148700.707985 523095.498985,148713.148985 523150.650985,148718.970985 523185.296985,148758.818985 523237.659985,148789.883985 523278.936985,148800.434985 523312.142985,148803.769985 523339.866985,148811.075985 523356.087985,148827.548985 523364.911985,148845.611985 523373.323985,148865.454985 523377.353985,148887.737985 523385.980985,148924.789985 523406.226985,148965.668985 523381.699985,148987.450985 523364.512985,148997.741985 523354.362985,149008.032985 523344.212985,149012.970985 523325.510985,149013.840985 523319.029985,149015.580985 523306.067985,149018.973985 523298.843985)) POLYGON((148775.869980556 523087.862959271,148786.310671602 523134.147421339,148787.111961451 523138.222062501,148789.865944358 523154.610673249,148818.502518906 523192.24109267,148818.744164544 523192.560396791,148849.809164544 523233.837396791,148856.532562419 523244.542695822,148861.362459323 523256.225144291,148871.913459323 523289.431144291,148874.797171531 523302.720185688,148880.382311599 523303.854495746,148892.533152951 523307.412775256,148914.816152951 523316.039775256,148922.993522609 523319.837088612,148937.737582778 523308.203346892,148939.909113975 523306.06156848,148941.247736763 523296.089598028,148943.633232915 523284.889671328,148947.695961634 523274.183449523,148951.088961634 523266.959449523,148958.027601821 523255.134279242,148967.002982154 523244.769824229,148977.715158376 523236.212449607,148989.806145024 523229.748130485,149002.871878778 523225.592895075,149011.014878778 523223.802895075,149025.71461237 523222.06709714,149040.468968727 523223.252057311,149054.703261967 523227.311621095,149069.369014283 523233.112593168,149075.580815666 523233.990500691,149097.719711958 523230.023127037,149093.438673537 523201.358182694,149092.638110024 523188.458374701,149094.064168772 523175.612663174,149097.674500032 523163.202527946,149104.777682602 523144.854898924,149096.773874623 523139.87205018,149081.455489755 523134.484224822,149020.782728186 523127.695921746,149018.365082411 523127.38557019,148978.587395614 523121.620840068,148978.156201803 523121.713200402,148968.57836411 523130.590230162,148954.812334417 523140.697832278,148939.116564598 523147.429102875,148923.345564598 523152.153102875,148910.37689581 523154.81782194,148897.141731088 523155.160623073,148884.05250663 523153.170823854,148871.517110822 523148.910430707,148862.748110822 523145.036430707,148851.284582351 523138.723834414,148841.092845365 523130.514702052,148832.483202211 523120.658972668,148825.717786074 523109.456718366,148823.588688058 523105.115306566,148819.851506172 523104.994912661,148807.1123677 523102.333626439,148795.025066567 523097.510220515,148781.837066567 523090.868220515,148775.869980556 523087.862959271)) #29 Polygon - gid: 2529 POLYGON((166489.986985 524726.636985,166376.609985 524695.830985,166378.076985 524731.146985,166372.372985 524775.920985,166374.920985 524808.597985,166378.349985 524862.041985,166381.024985 524891.550985,166405.372985 524894.150985,166442.538985 524856.230985,166488.936985 524799.975985,166481.518985 524768.759985,166489.986985 524726.636985)) POLYGON( EMPTY) #30 Polygon - gid: 2530 POLYGON((165889.593985 526270.470985,165805.380985 526135.686985,165716.140985 526213.946985,165715.046985 526215.272985,165666.137985 526274.538985,165628.837985 526322.818985,165601.443985 526328.382985,165602.962985 526339.012985,165604.480985 526357.234985,165631.029985 526379.970985,165679.641985 526437.375985,165710.443985 526485.694985,165719.290985 526538.574985,165726.370985 526574.918985,165757.470985 526592.793985,165821.282985 526618.710985,165829.798985 526578.755985,165848.131985 526528.820985,165848.301985 526502.670985,165846.277985 526476.475985,165868.778985 526437.395985,165879.115985 526419.443985,165895.576985 526384.512985,165905.738985 526349.287985,165898.707985 526305.446985,165893.362985 526284.934985,165889.593985 526270.470985)) POLYGON((165703.241357534 526349.188222767,165736.877004846 526388.907928476,165742.884833191 526397.060452601,165773.686833191 526445.379452601,165776.198479916 526450.359932548,165781.281584047 526439.053159569,165803.782584047 526399.973159569,165803.783866343 526399.970932552,165812.584332105 526384.687391741,165825.177332734 526357.964464521,165829.030216992 526344.609037639,165825.224121391 526320.876561857,165820.786544579 526303.846893836,165820.786523568 526303.846813204,165819.910071494 526300.483320819,165788.513879131 526250.233307264,165770.138988224 526266.347370043,165724.751493689 526321.346148409,165703.241357534 526349.188222767)) #31 Polygon - gid: 2531 POLYGON((167187.935985 527215.129985,167246.663985 527205.580985,167280.107985 527210.602985,167314.083985 527213.149985,167354.196985 527218.563985,167363.609985 527204.834985,167358.459985 527177.204985,167344.405985 527172.240985,167323.325985 527164.793985,167304.557985 527167.748985,167285.789985 527170.703985,167260.854985 527176.007985,167211.198985 527149.591985,167165.408985 527140.439985,167141.660985 527146.308985,167119.062985 527137.503985,167119.967985 527139.010985,167078.296985 527188.560985,167105.238985 527267.140985,167090.957985 527316.213985,167094.770985 527321.819985,167082.593985 527377.599985,167065.952985 527417.668985,167056.312985 527449.383985,167043.546985 527485.510985,167019.927985 527525.916985,166982.769985 527539.710985,166961.717985 527606.388985,166933.263985 527657.009985,166899.206985 527710.191985,166916.325985 527722.287985,166973.067985 527744.810985,166978.160985 527695.099985,167043.308985 527684.770985,167080.550985 527644.941985,167101.716985 527610.077985,167109.672985 527576.692985,167099.068985 527561.394985,167097.537985 527527.027985,167105.044985 527510.384985,167137.888985 527502.771985,167160.386985 527500.228985,167174.041985 527468.108985,167205.365985 527466.936985,167200.090985 527446.692985,167182.286985 527416.893985,167214.905985 527399.163985,167245.980985 527379.346985,167258.755985 527325.736985,167261.469985 527296.920985,167237.119985 527273.314985,167201.524985 527264.407985,167192.491985 527252.494985,167172.090985 527216.630985,167187.935985 527215.129985)) POLYGON((167167.684716539 527339.467819639,167176.568351121 527334.639135708,167168.740671452 527331.710602359,167168.045301243 527337.816065116,167167.684716539 527339.467819639)) #32 Polygon - gid: 2532 POLYGON((142944.641985 528279.290985,142921.268985 528196.701985,142908.679985 528170.159985,142909.618985 528164.288985,142912.434985 528146.676985,142911.663985 528129.837985,142892.611985 528111.135985,142875.445985 528095.294985,142871.223985 528075.213985,142854.274985 528025.284985,142841.880985 528009.836985,142829.662985 527984.586985,142829.518985 527971.020985,142821.625985 527942.611985,142810.393985 527922.096985,142789.127985 527903.516985,142784.945985 527870.354985,142783.608985 527857.660985,142778.632985 527857.959985,142770.042985 527846.295985,142767.281985 527824.398985,142767.032985 527762.941985,142754.713985 527740.629985,142749.027985 527714.461985,142756.918985 527695.423985,142775.315985 527696.868985,142782.056985 527690.556985,142783.976985 527671.253985,142777.663985 527661.951985,142758.085985 527654.506985,142741.418985 527651.378985,142749.028985 527626.803985,142752.867985 527606.969985,142752.399985 527587.588985,142752.387985 527556.136985,142751.802985 527550.469985,142750.634985 527539.133985,142751.546185 527536.749185,142733.070985 527540.946985,142718.408985 527549.965985,142690.566985 527548.196985,142650.139985 527549.089985,142626.239985 527552.656985,142624.198985 527552.960985,142624.067985 527566.105985,142630.327985 527597.955985,142624.594985 527613.792985,142600.863985 527617.535985,142581.009985 527622.064985,142574.816985 527639.138985,142579.145985 527659.088985,142596.746985 527682.702985,142605.791985 527694.419985,142613.689985 527704.650985,142638.048985 527728.309985,142660.964985 527755.984985,142669.209985 527774.633985,142695.332985 527818.005985,142686.660985 527842.858985,142682.940985 527858.629985,142701.685985 527880.643985,142711.497985 527934.757985,142716.267985 527963.420985,142735.213985 528000.631985,142745.226985 528012.751985,142773.134985 528057.404985,142816.514985 528078.155985,142825.383985 528108.455985,142801.994985 528142.618985,142779.507985 528173.811985,142780.961985 528203.725985,142794.349985 528212.859985,142840.494985 528200.237985,142842.379985 528210.587985,142861.982985 528212.674985,142888.962985 528201.345985,142905.705985 528247.638985,142932.216985 528293.509985,142941.837985 528289.539985,142944.641985 528279.290985)) POLYGON( EMPTY) #33 Polygon - gid: 2533 POLYGON((157248.267985 510397.734985,157245.305985 510363.097985,157245.806985 510339.634985,157249.376985 510312.049985,157264.999985 510313.014985,157298.816985 510310.020985,157313.463985 510303.902985,157331.569985 510277.161985,157335.597985 510263.931985,157342.919985 510246.050985,157356.304985 510238.818985,157373.099985 510233.719985,157379.080985 510235.892985,157395.913985 510233.044985,157408.176985 510225.851985,157412.515985 510212.622985,157409.981985 510194.654985,157398.325985 510184.101985,157382.360985 510173.357985,157354.165985 510179.672985,157341.808985 510184.636985,157327.343985 510198.734985,157317.441985 510214.933985,157308.672985 510231.087985,157299.867985 510244.974985,157293.245985 510254.256985,157288.312985 510254.760985,157282.069985 510246.244985,157282.741985 510240.644985,157284.759985 510223.843985,157287.182985 510197.241985,157275.293985 510195.644985,157261.763985 510193.043985,157245.218985 510187.050985,157227.608985 510177.984985,157227.523985 510173.393985,157241.396985 510142.853985,157246.112985 510129.441985,157230.683985 510109.990985,157224.665985 510099.018985,157249.180985 510051.905985,157212.257985 510031.046985,157194.338985 510064.208985,157211.972985 510077.542985,157204.306985 510095.641985,157222.207985 510119.716985,157199.619985 510159.627985,157215.047985 510174.354985,157196.172985 510227.723985,157155.328985 510207.689985,157139.189985 510197.898985,157127.587985 510195.991985,157123.056985 510200.777985,157088.217985 510252.205985,157106.896985 510285.860985,157126.853985 510245.967985,157133.861985 510250.332985,157165.215985 510274.869985,157156.396985 510293.534985,157144.581985 510312.557985,157138.589985 510331.438985,157137.075985 510351.638985,157138.046985 510372.580985,157139.419985 510383.981985,157146.858985 510390.097985,157156.021985 510361.922985,157163.523985 510331.258985,157181.372985 510302.572985,157207.566985 510320.651985,157199.540985 510385.307985,157193.303985 510383.664985,157180.758985 510375.835985,157168.702985 510402.140985,157158.766985 510420.761985,157135.709985 510449.280985,157153.437985 510466.189985,157170.048985 510460.713985,157195.357985 510432.173985,157213.684985 510416.564985,157235.371985 510403.145985,157248.267985 510397.734985)) POLYGON( EMPTY) #34 Polygon - gid: 2534 POLYGON((148568.584985 517215.314985,148572.193985 517207.069985,148579.062985 517190.138985,148582.935985 517182.009985,148585.298985 517176.571985,148590.114985 517163.127985,148593.549985 517154.807985,148597.590985 517143.996985,148600.469985 517135.577985,148608.361985 517111.099985,148609.844985 517106.851985,148612.196985 517100.884985,148622.119985 517079.608985,148627.202985 517066.037985,148629.036985 517061.925985,148631.715985 517056.590985,148633.922985 517052.667985,148636.222985 517048.798985,148640.302985 517042.471985,148642.585985 517038.589985,148645.384985 517033.290985,148649.309985 517023.332985,148650.753985 517019.073985,148653.515985 517009.328985,148656.822985 516996.237985,148657.633985 516992.786985,148659.628985 516988.121985,148661.362985 516983.557985,148665.486985 516963.310985,148660.494985 516962.211985,148654.487985 516960.588985,148645.936985 516957.776985,148635.343985 516953.477985,148633.216985 516952.851985,148628.798985 516951.955985,148618.420985 516950.600985,148610.940985 516948.509985,148606.474985 516948.012985,148596.479985 516947.539985,148583.884985 516947.227985,148578.576985 516948.520985,148573.335985 516949.453985,148568.101985 516949.901985,148563.600985 516949.922985,148557.829985 516950.415985,148551.628985 516950.385985,148538.365985 516949.276985,148531.699985 516950.682985,148527.384985 516949.334985,148523.285985 516949.346985,148518.771985 516949.590985,148497.282985 516949.746985,148489.616985 516950.081985,148471.013985 516949.990985,148458.481985 516951.381985,148447.844985 516952.931985,148445.775985 516960.073985,148444.006985 516964.211985,148439.749985 516975.102985,148439.138985 516980.117985,148438.535985 516987.396985,148438.974985 516992.234985,148440.426985 516998.642985,148438.052985 516999.297985,148434.382985 517002.110985,148433.464985 517004.416985,148433.080985 517009.095985,148433.160985 517012.537985,148433.810985 517017.196985,148435.364985 517021.423985,148438.897985 517029.838985,148440.124985 517034.169985,148440.387985 517035.613985,148440.767985 517040.101985,148439.957985 517047.071985,148439.243985 517059.119985,148437.869985 517063.408985,148436.038985 517067.531985,148435.453985 517068.518985,148432.633985 517072.210985,148428.173985 517080.220985,148425.223985 517084.065985,148420.701985 517084.881985,148419.037985 517084.605985,148414.693985 517083.070985,148410.519985 517081.244985,148406.277985 517079.881985,148401.927985 517079.498985,148397.300985 517079.560985,148392.976985 517080.302985,148391.493985 517081.154985,148388.218985 517085.555985,148385.939985 517089.438985,148383.889985 517093.599985,148382.148985 517097.753985,148380.707985 517102.019985,148384.575985 517104.329985,148387.963985 517107.541985,148388.744985 517108.571985,148388.577985 517113.061985,148386.761985 517129.667985,148386.096985 517138.880985,148383.851985 517150.211985,148381.844985 517157.153985,148381.255985 517161.619985,148379.568985 517166.273985,148378.896985 517171.011985,148375.602985 517182.746985,148375.188985 517183.854985,148372.920985 517187.744985,148371.004985 517192.626985,148369.776985 517197.309985,148368.879985 517199.356985,148366.322985 517203.048985,148363.430985 517206.559985,148360.265985 517209.805985,148362.396985 517211.296985,148366.277985 517213.583985,148368.574985 517214.675985,148372.756985 517216.354985,148379.858985 517218.946985,148383.740985 517221.386985,148387.723985 517223.321985,148391.527985 517223.539985,148398.523985 517222.910985,148402.982985 517222.342985,148413.732985 517218.530985,148420.566985 517215.834985,148422.017985 517215.401985,148426.452985 517214.656985,148427.536985 517214.761985,148431.947985 517215.979985,148436.367985 517216.822985,148437.734985 517217.291985,148441.849985 517219.129985,148444.098985 517220.426985,148447.861985 517222.907985,148462.423985 517233.358985,148486.641985 517247.438985,148491.717985 517250.701985,148501.712985 517257.844985,148508.651985 517262.200985,148516.517985 517266.864985,148528.978985 517274.823985,148533.037985 517276.758985,148535.665985 517277.495985,148540.045985 517278.576985,148548.901985 517280.224985,148550.178985 517272.247985,148551.544985 517265.555985,148552.858985 517261.250985,148555.563985 517251.244985,148562.513985 517233.664985,148568.584985 517215.314985)) POLYGON ((148465.04603866642 517147.5219424748, 148468.32193007902 517148.81250785006, 148472.43693007904 517150.65050785005, 148479.31833130663 517154.15981472895, 148481.5673313066 517155.45681472897, 148485.38224162365 517157.8115498219, 148489.14524162366 517160.2925498219, 148491.5920858998 517161.976234038, 148503.2307818219 517170.32920829166, 148505.60300960566 517171.7083877117, 148509.5648041141 517161.94319003774, 148511.35506775207 517157.8800646531, 148514.66822819778 517150.926106155, 148515.52675331026 517148.95037210436, 148519.50861371885 517137.8348963292, 148520.79090495792 517134.5068053192, 148523.74161982184 517127.35980454256, 148526.96791581967 517118.7284048809, 148529.29095782075 517111.9351813287, 148536.9803214243 517088.0856828127, 148537.55288063685 517086.3801399501, 148539.03588063686 517082.1321399501, 148540.0697946662 517079.348843109, 148542.42179466618 517073.381843109, 148544.22615053327 517069.18379161716, 148552.9117266564 517050.5609640856, 148556.9678805225 517039.7315200335, 148558.7070182858 517035.4879842818, 148560.5410182858 517031.37598428177, 148562.0128355156 517028.2694345842, 148563.56937478343 517025.16971939424, 148557.4671445434 517025.4151073069, 148551.2661445434 517025.3851073069, 148545.3795881285 517025.1251650781, 148541.3465654276 517024.7879395503, 148534.52321633883 517025.62982859474, 148521.78631390657 517025.0248919264, 148519.75491128486 517024.57557388005, 148519.31643526338 517024.58900880005, 148514.50006083903 517024.6239734057, 148515.12058260432 517029.2863586431, 148515.50058260432 517033.7743586431, 148515.26660871692 517048.7596442845, 148514.70125120823 517053.6245107481, 148514.11262726612 517063.5569214688, 148510.66844475336 517082.0011245901, 148509.29444475335 517086.2901245901, 148506.41476057115 517093.8493158441, 148504.58376057114 517097.97231584415, 148500.5576643297 517105.7725396188, 148499.97266432972 517106.75953961874, 148495.78269539468 517112.9680895764, 148493.70102171606 517116.7067008243, 148487.67826782848 517125.8744659743, 148484.72826782847 517129.71946597425, 148475.34539209885 517139.8588568604, 148465.04603866642 517147.5219424748)) #35 Polygon - gid: 2535 POLYGON((163066.126985 517974.868985,163091.240985 517970.440985,163098.588985 517969.145985,163130.376985 517949.819985,163160.357985 517938.404985,163155.338985 517935.096985,163137.491985 517928.756985,163088.458985 517930.116985,163058.237985 517933.448985,163033.542985 517933.704985,162996.678985 517946.546985,162965.765985 517963.550985,162954.719985 517971.409985,162940.542985 517971.623985,162929.808985 517967.346985,162916.631985 517960.832985,162906.856985 517973.017985,162901.910985 517996.119985,162896.149985 518019.757985,162889.466985 518026.940985,162862.081985 518041.778985,162841.243985 518051.554985,162822.497985 518056.625985,162814.259985 518061.351985,162810.905985 518070.579985,162808.826985 518099.445985,162806.167985 518118.106985,162793.741985 518127.807985,162755.145985 518154.644985,162735.806985 518166.902985,162720.621985 518167.404985,162718.765985 518184.458985,162717.545985 518210.367985,162713.617985 518236.309985,162706.542985 518271.841985,162701.859985 518290.587985,162705.218985 518294.761985,162726.625985 518278.475985,162753.229985 518258.870985,162782.068985 518236.877985,162816.208985 518212.657985,162824.470985 518182.138985,162845.014985 518153.858985,162882.445985 518140.582985,162920.703985 518125.470985,162943.696985 518115.392985,162965.820985 518065.592985,162984.425985 518034.931985,163005.550985 518008.892985,163025.235985 517978.313985,163066.126985 517974.868985)) POLYGON( EMPTY) #36 Polygon - gid: 2536 POLYGON((151640.372985 520078.439985,151631.962985 520059.790985,151629.274985 520055.812985,151626.569985 520052.200985,151615.221985 520034.782985,151606.240985 520019.252985,151596.253985 520003.198985,151594.521985 519999.999985,151585.007985 519979.511985,151579.071985 519969.479985,151573.199985 519957.304985,151572.035985 519955.222985,151567.491985 519949.971985,151564.650985 519946.439985,151563.903985 519945.128985,151561.474985 519937.032985,151559.718985 519932.885985,151558.187985 519929.892985,151554.220985 519932.057985,151549.028985 519934.369985,151543.618985 519935.855985,151538.622985 519936.867985,151534.164985 519937.482985,151528.132985 519939.763985,151523.603985 519940.766985,151518.324985 519941.678985,151514.201985 519943.500985,151511.453985 519945.404985,151507.599985 519948.857985,151505.118985 519952.626985,151501.093985 519964.334985,151499.289985 519968.439985,151498.111985 519970.475985,151495.027985 519973.673985,151492.288985 519974.096985,151486.380985 519973.413985,151480.685985 519972.343985,151476.198985 519971.871985,151471.575985 519971.639985,151467.126985 519972.326985,151465.579985 519972.930985,151461.230985 519976.087985,151459.824985 519980.451985,151459.120985 519986.854985,151457.196985 519995.647985,151457.505985 519999.999985,151457.755985 520002.163985,151458.895985 520006.518985,151459.809985 520012.864985,151461.700985 520019.709985,151462.600985 520024.748985,151466.236985 520038.107985,151470.320985 520048.063985,151476.146985 520063.414985,151477.708985 520067.993985,151480.097985 520076.675985,151484.051985 520078.930985,151488.522985 520079.897985,151492.694985 520078.104985,151494.938985 520076.848985,151506.520985 520073.368985,151510.381985 520072.425985,151515.922985 520072.149985,151520.376985 520071.501985,151525.461985 520071.155985,151533.320985 520071.044985,151541.199985 520071.316985,151545.772985 520072.216985,151550.689985 520074.159985,151556.344985 520076.869985,151559.924985 520080.906985,151561.475985 520085.626985,151562.598985 520089.906985,151564.866985 520095.728985,151566.733985 520099.823985,151570.978985 520111.588985,151575.985985 520119.712985,151580.454985 520125.992985,151585.750985 520135.315985,151588.951985 520138.478985,151591.959985 520142.387985,151595.794985 520145.608985,151596.717985 520146.180985,151600.930985 520147.761985,151610.593985 520152.335985,151615.876985 520148.420985,151619.366985 520145.538985,151620.268985 520145.005985,151624.502985 520143.522985,151627.066985 520142.840985,151640.810985 520139.486985,151645.648985 520138.596985,151646.664985 520138.210985,151650.623985 520136.078985,151654.429985 520133.610985,151656.825985 520131.812985,151657.034985 520127.310985,151655.434985 520118.142985,151654.368985 520103.131985,151653.199985 520098.779985,151649.007985 520092.899985,151646.566985 520089.118985,151642.541985 520082.381985,151640.372985 520078.439985)) POLYGON( EMPTY) #37 Polygon - gid: 2537 POLYGON((149074.863985 521147.685985,149079.195985 521146.453985,149084.481985 521146.550985,149083.352985 521142.190985,149082.307985 521139.131985,149078.212985 521129.952985,149074.534985 521119.799985,149072.006985 521114.769985,149062.256985 521087.740985,149058.326985 521077.315985,149057.272985 521073.684985,149056.706985 521069.234985,149056.032985 521058.372985,149055.989985 521055.324985,149056.653985 521049.602985,149056.828985 521045.104985,149057.483985 521039.922985,149057.955985 521027.280985,149059.078985 521021.526985,149059.679985 521014.389985,149061.083985 521010.116985,149063.420985 521004.372985,149065.076985 521001.246985,149068.057985 520997.888985,149069.914985 520996.183985,149073.453985 520993.403985,149077.695985 520990.619985,149083.699985 520985.301985,149087.481985 520982.855985,149091.155985 520979.558985,149091.687985 520978.602985,149092.102085 520973.780785,149091.433985 520972.943985,149085.922985 520963.780985,149080.736985 520952.972985,149079.151985 520948.023985,149078.605985 520943.551985,149078.175985 520937.077985,149077.300985 520934.467985,149076.557985 520932.161985,149075.476985 520927.756985,149074.024985 520923.526985,149072.892985 520921.352985,149070.466985 520917.501985,149067.489985 520913.906985,149063.902985 520911.245985,149060.015985 520908.880985,149057.583985 520907.012985,149053.836985 520904.575985,149046.407985 520903.194985,149043.748985 520900.710985,149040.669985 520896.363985,149030.471985 520876.382985,149027.005985 520870.944985,149023.474985 520864.091985,149020.424985 520857.679985,149016.414985 520850.386985,149015.312985 520847.716985,149011.691985 520837.466985,149011.094985 520836.292985,149008.704985 520832.469985,149005.259985 520827.502985,149004.610985 520825.876985,149003.577985 520821.217985,149003.854985 520816.719985,149002.972985 520816.201985,148998.602985 520814.693985,148988.265985 520815.477985,148983.673985 520817.423985,148979.484985 520821.816985,148976.129985 520824.776985,148973.845985 520825.367985,148966.379985 520826.025985,148961.056985 520826.999985,148956.409985 520829.091985,148951.949985 520829.751985,148946.441985 520830.130985,148931.710985 520830.198985,148924.824985 520830.672985,148921.727985 520830.400985,148917.057985 520829.109985,148913.971985 520825.698985,148910.100985 520821.942985,148901.275985 520808.640985,148896.799985 520799.352985,148894.695985 520795.375985,148891.228985 520789.937985,148887.698985 520783.085985,148884.606985 520775.729985,148881.994985 520768.813985,148880.715985 520766.573985,148878.047985 520762.936985,148875.219985 520759.448985,148871.608985 520756.679985,148867.217985 520756.296985,148862.582985 520756.904985,148861.392985 520757.168985,148857.137985 520758.698985,148853.364985 520759.509985,148848.917985 520760.210985,148844.572985 520761.389985,148836.362985 520765.784985,148831.786985 520766.128985,148822.120985 520765.033985,148817.121985 520763.908985,148812.548985 520762.503985,148807.295985 520761.442985,148803.827985 520760.947985,148794.718985 520760.628985,148790.131985 520761.085985,148779.499985 520762.621985,148777.012985 520764.595985,148773.926985 520768.885985,148773.466985 520774.629985,148773.332985 520779.128985,148772.635985 520787.462985,148772.583985 520792.333985,148774.114985 520796.576985,148778.330985 520798.178985,148785.801985 520800.503985,148791.415985 520802.481985,148797.424985 520804.176985,148801.266985 520806.534985,148808.780985 520809.801985,148816.731985 520814.761985,148820.614985 520817.028985,148822.486985 520817.871985,148828.485985 520820.053985,148840.253985 520823.719985,148844.481985 520824.577985,148848.642985 520825.980985,148849.614985 520826.820985,148851.668985 520831.391985,148850.423985 520836.473985,148851.647985 520862.196985,148851.608985 520865.784985,148852.006985 520870.213985,148852.588985 520871.618985,148855.610985 520875.318985,148859.688985 520877.253985,148865.606985 520879.625985,148869.560985 520881.777985,148874.694985 520884.932985,148878.973985 520886.333985,148879.781985 520887.091985,148882.398985 520890.827985,148893.628985 520903.399985,148896.470985 520906.888985,148900.771985 520910.377985,148903.113985 520912.783985,148907.271985 520917.520985,148910.265985 520921.543985,148913.153985 520928.363985,148914.659985 520932.599985,148915.336985 520935.164985,148915.886985 520939.775985,148914.248985 520943.980985,148917.390985 520947.207985,148919.572985 520949.764985,148923.999985 520956.081985,148928.384985 520961.456985,148931.471985 520964.733985,148935.306985 520967.792985,148938.422985 520971.552985,148942.810985 520975.127985,148945.672985 520978.715985,148945.467985 520983.562985,148943.924985 520989.715985,148941.045985 520998.242985,148938.175985 521005.247985,148932.651985 521015.561985,148930.709985 521019.641985,148929.317985 521023.359985,148928.157985 521027.888985,148928.257985 521030.527985,148930.431985 521034.393985,148933.165985 521037.285985,148936.637985 521040.110985,148942.203985 521043.759985,148949.976985 521048.302985,148956.663985 521051.603985,148960.826985 521053.323985,148970.378985 521056.011985,148974.655985 521057.444985,148977.871985 521058.807985,148985.582985 521063.452985,148996.173985 521068.099985,149000.446985 521070.923985,149004.131985 521074.654985,149005.361985 521076.309985,149007.752985 521080.130985,149009.883985 521084.114985,149010.875985 521086.337985,149012.155985 521090.634985,149013.087985 521095.060985,149013.828985 521099.645985,149014.305985 521101.238985,149016.320985 521105.262985,149018.796985 521108.970985,149021.783985 521112.417985,149024.099985 521114.282985,149028.473985 521115.337985,149036.160985 521116.290985,149040.418985 521117.807985,149041.315985 521118.300985,149044.645985 521121.332985,149046.237985 521125.627985,149045.253985 521130.390985,149045.181985 521135.783985,149045.437985 521138.357985,149046.177985 521142.841985,149046.609985 521143.953985,149049.230985 521147.622985,149050.514985 521148.887985,149054.171985 521151.491985,149060.050985 521155.216985,149064.906985 521154.540985,149066.395985 521153.944985,149070.858985 521150.799985,149074.863985 521147.685985)) POLYGON( EMPTY) #38 Polygon - gid: 2538 POLYGON((150340.263985 521736.242985,150319.707985 521734.229985,150320.397985 521743.203985,150320.776985 521753.617985,150321.365985 521762.839985,150321.838985 521767.321985,150322.439985 521771.069985,150323.456985 521775.456985,150325.665985 521782.261985,150327.698985 521786.281985,150328.983985 521788.230985,150331.756985 521791.771985,150334.245985 521794.557985,150337.451985 521797.714985,150345.035985 521804.348985,150348.315985 521807.525985,150350.157985 521808.786985,150354.399985 521810.150985,150370.210985 521813.514985,150374.540985 521814.689985,150378.907985 521817.179985,150387.202985 521823.648985,150391.093985 521825.901985,150398.280985 521829.395985,150414.053985 521839.397985,150417.301985 521841.772985,150425.706985 521851.706985,150429.010985 521854.761985,150432.472985 521857.645985,150437.069985 521860.954985,150439.941985 521862.714985,150449.894985 521867.787985,150455.159985 521869.676985,150457.271985 521870.216985,150461.740985 521869.363985,150463.846985 521868.400985,150466.973985 521865.126985,150468.871985 521858.611985,150470.712985 521854.484985,150471.314985 521852.772985,150472.425985 521842.584985,150472.585985 521837.769985,150471.114985 521817.439985,150467.720985 521797.270985,150467.236985 521792.050985,150467.787985 521786.877985,150468.844985 521782.176985,150469.472985 521777.288985,150470.980985 521770.720985,150464.397985 521768.068985,150460.133985 521766.625985,150453.794985 521764.881985,150449.391985 521763.947985,150441.118985 521762.424985,150435.455985 521761.036985,150424.480985 521757.289985,150408.178985 521751.226985,150399.551985 521747.851985,150390.966985 521745.146985,150382.787985 521742.940985,150374.289985 521739.977985,150369.950985 521738.975985,150358.848985 521736.928985,150354.376985 521736.424985,150340.263985 521736.242985)) POLYGON( EMPTY) #39 Polygon - gid: 2539 POLYGON((151414.655985 521903.498985,151419.118985 521902.909985,151421.110985 521903.031985,151425.514985 521903.903985,151432.945985 521906.160985,151435.281985 521907.106985,151439.154985 521909.607985,151440.214985 521905.223985,151439.494985 521900.455985,151436.942985 521890.300985,151435.309985 521886.095985,151435.222985 521881.294985,151435.805985 521873.232985,151435.489985 521868.742985,151435.595985 521863.657985,151437.865985 521855.470985,151438.586985 521850.956985,151447.004985 521843.098985,151449.266985 521833.184985,151450.435985 521826.542985,151446.671985 521824.075985,151441.776985 521820.429985,151435.135985 521814.354985,151430.862985 521811.043985,151429.653985 521809.812985,151427.434985 521805.925985,151424.123985 521798.914985,151422.976985 521796.117985,151421.981985 521791.729985,151420.446985 521786.732985,151420.164985 521785.502985,151419.969985 521781.007985,151419.525985 521775.880985,151419.146985 521773.395985,151417.498985 521767.866985,151415.384985 521762.360985,151413.246985 521758.395985,151410.199985 521754.143985,151407.420985 521751.067985,151403.914985 521748.258985,151398.761985 521744.954985,151394.600985 521743.247985,151389.313985 521741.332985,151386.449985 521740.426985,151382.047985 521739.436985,151380.811985 521739.305985,151374.773985 521739.607985,151370.237985 521739.382985,151365.883985 521738.649985,151359.674985 521735.218985,151349.485985 521730.180985,151343.877985 521725.720985,151340.551985 521722.689985,151334.626985 521716.831985,151329.218985 521710.554985,151325.247985 521705.141985,151319.417985 521699.821985,151315.446985 521694.409985,151305.560985 521681.809985,151300.596985 521675.043985,151296.688985 521671.030985,151293.246985 521668.105985,151289.929985 521665.757985,151285.914985 521663.658985,151282.327985 521662.396985,151277.836985 521662.113985,151271.818985 521662.894985,151268.877985 521663.536985,151263.367985 521665.215985,151261.932985 521669.477985,151258.678985 521677.877985,151256.217985 521682.629985,151251.459985 521683.882985,151247.452985 521683.781985,151241.286985 521681.283985,151234.212985 521679.299985,151230.126985 521677.337985,151227.560985 521676.358985,151223.087985 521675.729985,151219.620985 521675.820985,151215.249985 521676.783985,151210.898985 521678.040985,151205.964985 521678.817985,151196.349985 521681.136985,151192.448985 521682.323985,151188.367985 521684.271985,151187.444985 521684.912985,151184.336985 521688.179985,151181.542985 521692.671985,151179.378985 521696.641985,151177.884985 521699.887985,151173.838985 521718.013985,151172.909985 521723.517985,151173.083985 521728.013985,151173.884985 521734.691985,151175.904985 521738.784985,151180.466985 521741.060985,151183.536985 521742.158985,151187.621985 521744.146985,151191.251985 521748.103985,151194.752985 521753.288985,151196.865985 521758.794985,151198.738985 521762.886985,151200.502985 521767.587985,151203.883985 521779.954985,151208.659985 521792.808985,151211.765985 521799.668985,151213.414985 521805.197985,151215.020985 521809.793985,151218.548985 521815.695985,151221.215985 521819.333985,151222.013985 521820.198985,151227.821985 521825.052985,151230.947985 521828.290985,151234.125985 521832.083985,151238.592985 521842.773985,151240.775985 521849.351985,151242.232985 521855.194985,151242.763985 521866.859985,151242.540985 521871.354985,151242.852985 521879.013985,151243.124985 521888.008985,151243.896985 521899.613985,151243.956985 521904.112985,151243.781985 521911.524985,151243.249985 521917.736985,151244.213985 521932.376985,151246.639985 521941.861985,151247.152985 521948.509985,151248.543985 521959.890985,151248.626985 521963.699985,151248.136985 521968.176985,151246.966985 521973.552985,151251.430985 521972.917985,151254.743985 521972.063985,151260.584985 521969.324985,151264.784985 521967.712985,151273.249985 521964.701985,151285.945985 521960.539985,151294.351985 521957.321985,151299.279985 521955.774985,151324.985985 521948.448985,151340.816985 521942.669985,151349.401985 521939.968985,151363.226985 521935.306985,151367.526985 521933.980985,151372.861985 521932.688985,151382.530985 521930.905985,151385.598985 521927.434985,151395.219985 521921.249985,151396.763985 521920.086985,151401.989985 521915.074985,151408.377985 521907.711985,151412.054985 521904.855985,151414.655985 521903.498985)) POLYGON((151279.645830086 521767.755326376,151280.089101957 521768.734349246,151281.60849228 521772.801761659,151281.779965797 521772.961370432,151284.905965797 521776.199370432,151288.436416127 521780.123773262,151291.614416127 521783.916773262,151298.197909309 521793.099519948,151303.3272236 521803.167059572,151307.7942236 521813.857059572,151309.775551863 521819.151068694,151311.958551863 521825.729068694,151313.547648501 521831.205773513,151315.004648501 521837.048773513,151317.155400222 521851.784457569,151317.686400222 521863.449457569,151317.671859293 521870.576215471,151317.633144616 521871.356585304,151318.308321815 521871.127269916,151326.162616192 521868.656163438,151339.261758571 521864.238933653,151341.126044189 521863.637267439,151345.426044189 521862.311267439,151349.429937 521861.210224374,151351.72695172 521858.562616456,151362.371481661 521848.480222824,151362.64012267 521848.271563938,151363.173322839 521844.636869635,151362.301287147 521843.109333478,151359.617270262 521837.953435221,151356.306270262 521830.942435221,151354.732095129 521827.371366009,151353.585095129 521824.574366009,151349.833842604 521812.703542585,151349.58867297 521811.62233218,151341.169193044 521809.460853224,151329.609871097 521804.294395733,151324.898612404 521801.69102505,151316.24354186 521797.411483839,151302.802545748 521788.880699647,151297.194545748 521784.420699647,151293.360366598 521781.1553627,151290.034366598 521778.1243627,151287.821382925 521776.02368546,151281.896382925 521770.16568546,151279.645830086 521767.755326376)) #40 Polygon - gid: 2540 POLYGON((148804.969985 522529.061985,148825.777985 522528.289985,148844.208985 522531.065985,148856.496985 522532.916985,148882.440985 522530.570985,148894.474985 522523.984985,148904.794985 522513.633985,148902.807985 522495.733985,148896.519985 522475.100985,148873.973985 522465.040985,148844.137985 522468.478985,148809.638985 522482.020985,148787.006985 522487.163985,148762.897985 522493.321985,148738.759985 522488.933985,148716.846985 522484.385985,148694.991985 522485.158985,148688.417985 522484.461985,148687.828985 522493.001985,148665.144985 522531.758985,148646.934985 522583.394985,148650.294985 522613.315985,148667.775985 522637.046985,148692.509985 522655.222985,148702.550985 522673.036985,148703.442985 522695.940985,148697.442985 522721.471985,148703.390985 522728.395985,148743.857985 522739.557985,148760.692985 522732.650985,148771.972985 522702.999985,148787.125985 522672.393985,148803.225985 522652.100985,148801.228985 522634.074985,148780.811985 522619.038985,148757.441985 522607.968985,148749.196985 522601.119985,148766.539985 522585.682985,148782.051985 522574.165985,148778.702985 522559.073985,148779.149985 522545.714985,148791.097985 522529.576985,148804.969985 522529.061985)) POLYGON( EMPTY) #41 Polygon - gid: 2541 POLYGON((148410.699985 522834.902985,148442.757985 522825.725985,148460.309985 522827.514985,148487.864985 522844.888985,148500.821985 522849.224985,148522.555985 522842.060985,148549.245985 522836.360985,148568.572985 522826.852985,148584.252985 522812.743985,148609.816985 522787.145985,148614.009985 522767.881985,148612.795985 522752.758985,148612.563985 522743.189985,148618.720985 522735.053985,148625.781585 522726.296485,148618.662985 522724.739985,148612.278985 522723.775985,148605.112985 522714.525985,148611.687985 522677.987985,148611.797985 522647.963985,148594.739985 522625.727985,148584.565985 522622.805985,148562.730985 522628.324985,148543.283985 522615.292985,148536.597985 522557.684985,148536.223985 522555.223985,148534.274985 522546.378985,148533.665985 522541.970985,148533.794985 522540.094985,148535.172985 522535.741985,148538.094985 522529.403985,148538.611985 522526.777985,148539.936985 522513.990985,148540.169985 522509.496985,148540.192985 522500.589985,148540.851985 522495.877985,148540.474985 522491.607985,148539.391985 522489.734985,148536.121985 522486.259985,148532.239985 522483.953985,148529.487985 522487.690985,148527.557985 522489.161985,148523.269985 522490.157985,148512.547985 522491.130985,148508.089985 522491.855985,148503.708985 522492.860985,148499.171985 522494.926985,148493.577985 522498.401985,148488.746985 522500.495985,148483.626985 522501.803985,148480.736985 522503.655985,148464.117985 522534.086985,148427.843985 522552.590985,148408.790985 522571.476985,148398.223985 522596.340985,148407.833985 522615.400985,148416.753985 522662.875985,148420.236985 522689.856985,148421.081985 522713.013985,148415.508985 522722.819985,148391.177985 522725.213985,148358.228985 522724.834985,148355.953985 522741.826985,148341.696985 522767.846985,148328.778985 522795.425985,148312.269985 522806.114985,148322.213985 522836.436985,148339.137985 522884.626985,148351.181985 522896.189985,148376.682985 522893.652985,148389.158985 522851.634985,148410.699985 522834.902985)) POLYGON((148482.813746868 522756.183508667,148484.759834217 522756.612200335,148500.311458172 522764.073026139,148507.47578582 522768.590283572,148524.485305735 522764.957677221,148526.135900505 522764.145660091,148532.598883594 522758.330211851,148537.783159503 522753.13904088,148537.640235854 522747.24405639,148537.573978828 522747.137066634,148532.272275747 522732.393023801,148530.149598324 522716.869200329,148531.298587695 522701.24311067,148532.147803475 522696.523924938,148520.979243698 522690.629014551,148501.532243698 522677.597014551,148493.394526839 522670.763509214,148494.619771809 522680.254848443,148495.187102679 522687.122051743,148496.032102679 522710.279051743,148495.262613882 522724.069947131,148491.977169924 522737.485861809,148486.287201914 522750.071773483,148482.813746868 522756.183508667)) #42 Polygon - gid: 2542 POLYGON((150213.068985 524020.273985,150226.206985 524020.218985,150245.019985 524022.421985,150248.570985 524017.633985,150243.628985 523991.402985,150233.942985 523969.968985,150203.852985 523929.546985,150189.509985 523905.746985,150179.578985 523905.795985,150163.996985 523891.573985,150150.529985 523872.591985,150158.960985 523848.710985,150150.727985 523827.265985,150129.075985 523796.394985,150110.126985 523782.119985,150064.853985 523787.149985,150051.774985 523791.993985,150035.273985 523796.784985,150034.124985 523803.948985,150047.317985 523842.088985,150048.538985 523846.850985,150048.758985 523856.362985,150044.002985 523858.774985,150033.285985 523861.216985,150022.584985 523866.044985,150013.239985 523875.626985,150010.897985 523882.801985,150007.322985 523904.295985,150015.725985 523913.798985,150028.883985 523920.894985,150036.292985 523937.604985,150033.171985 523964.012985,150028.264985 524013.973985,150020.417985 524042.804985,150014.532985 524064.428985,150004.476985 524083.491985,149987.717985 524115.262985,149981.881985 524139.242985,149991.382985 524146.196985,150012.547985 524165.288985,150017.553385 524169.126585,150024.575985 524166.982985,150037.645985 524157.385985,150054.301985 524147.777985,150067.231985 524142.754985,150080.313985 524135.548985,150096.808985 524132.911985,150108.662985 524120.938985,150113.586985 524111.551985,150113.285985 524097.054985,150114.403985 524085.116985,150121.501985 524075.543985,150134.308985 524061.036985,150143.802985 524053.844985,150159.042985 524051.270985,150177.151985 524046.558985,150188.764985 524039.234985,150195.842985 524027.285985,150213.068985 524020.273985)) POLYGON((150106.011000335 523989.689500602,150114.057919676 523984.995648846,150131.312562914 523979.892369386,150139.180475973 523978.563497456,150141.030635187 523976.094127171,150143.466198894 523973.995184804,150140.693804819 523969.864680568,150140.146542734 523969.593183191,150129.018561804 523961.19132421,150113.436561804 523946.96932421,150110.842199358 523944.035224328,150110.774630149 523946.407515086,150107.74049457 523972.080521291,150106.011000335 523989.689500602)) #43 Polygon - gid: 2543 POLYGON((144922.318985 524491.962985,144916.174985 524471.916985,144914.549985 524467.677985,144912.593985 524463.720985,144910.192985 524460.155985,144908.311985 524458.069985,144904.928985 524455.185985,144901.087985 524452.661985,144896.952985 524450.467985,144892.685985 524448.577985,144888.450985 524446.961985,144885.347985 524445.991985,144881.001985 524445.002985,144876.555985 524444.286985,144863.031985 524442.562985,144857.685985 524441.514985,144849.003985 524439.122985,144839.775985 524435.911985,144819.128985 524426.964985,144802.963985 524420.784985,144798.693985 524419.372985,144786.193985 524415.740985,144781.645985 524414.507985,144777.135985 524413.576985,144772.740985 524413.149985,144768.538985 524413.428985,144766.698985 524413.878985,144762.631985 524415.739985,144758.763985 524418.497985,144755.294985 524421.804985,144752.424985 524425.313985,144750.466985 524428.343985,144748.348985 524432.485985,144746.691985 524436.901985,144745.642985 524441.399985,144745.357985 524445.949985,144746.099985 524450.217985,144747.674985 524454.490985,144751.644985 524463.042985,144753.198985 524467.313985,144753.903985 524471.578985,144753.795985 524474.709985,144752.079885 524484.578885,144754.670985 524482.704985,144758.730985 524480.197985,144763.800985 524478.457985,144768.027985 524478.293985,144772.474985 524478.930985,144781.635985 524481.187985,144786.155985 524482.100985,144808.055985 524485.287985,144816.937985 524486.725985,144833.164985 524489.675985,144841.977985 524491.504985,144850.254985 524493.511985,144867.643985 524498.751985,144876.325985 524501.135985,144885.821985 524503.463985,144894.632985 524505.384985,144899.063985 524506.183985,144907.993985 524507.149985,144917.005985 524507.531985,144926.006985 524507.397985,144924.626985 524500.677985,144922.318985 524491.962985)) POLYGON( EMPTY) #44 Polygon - gid: 2544 POLYGON((152738.586985 525524.931985,152740.326985 525497.058985,152695.275985 525498.501985,152656.986985 525505.098985,152622.061985 525523.010985,152648.325985 525540.128985,152652.935985 525590.321985,152647.410985 525629.067985,152666.698985 525650.755985,152708.041985 525659.923985,152735.752985 525671.255985,152760.563985 525666.811985,152771.160985 525648.828985,152770.241985 525625.353985,152756.879985 525597.961985,152746.550985 525573.880985,152738.586985 525524.931985)) POLYGON( EMPTY) #45 Polygon - gid: 2545 POLYGON((149453.122985 526139.892985,149396.797985 526127.534985,149353.639985 526128.716985,149378.053985 526143.048985,149404.918985 526161.498985,149438.396985 526192.728985,149474.027985 526233.837985,149507.380985 526288.575985,149516.204985 526264.755985,149536.833985 526225.717985,149553.115985 526196.776985,149518.161985 526170.998985,149453.122985 526139.892985)) POLYGON( EMPTY) #46 Polygon - gid: 2546 POLYGON((143371.698985 526340.324985,143367.501985 526296.992985,143367.318985 526278.597985,143349.180985 526262.013985,143334.789985 526251.329985,143319.597985 526245.894985,143315.281985 526251.019985,143278.726985 526298.107985,143265.495985 526287.517985,143253.409985 526293.227985,143236.509985 526310.988985,143223.254985 526345.656985,143210.652985 526371.956985,143208.644985 526376.798985,143242.636985 526387.900985,143277.186985 526389.196985,143320.427985 526393.579985,143367.418985 526393.302985,143375.058985 526381.563985,143371.698985 526340.324985)) POLYGON( EMPTY) #47 Polygon - gid: 2547 POLYGON((158778.588985 529695.437985,158715.314985 529674.844985,158709.040985 529734.142985,158680.951985 529777.857985,158654.349985 529824.912985,158644.110985 529853.468985,158638.251985 529907.850985,158646.861985 529965.652985,158652.583985 529994.969985,158651.137985 529999.999985,158636.793985 530049.891985,158653.691985 530103.927985,158665.644985 530140.105985,158674.780985 530159.977985,158719.076985 530181.397985,158712.966985 530164.850985,158699.313985 530129.290985,158686.188985 530067.699985,158690.286985 530025.745985,158687.319985 529999.999985,158684.767985 529977.857985,158708.706985 529901.824985,158719.982985 529824.505985,158735.250985 529780.284985,158743.835985 529751.756985,158759.095985 529710.610985,158778.588985 529695.437985)) POLYGON( EMPTY) #48 Polygon - gid: 2548 POLYGON((161952.205985 531803.507985,161950.166985 531785.171985,161948.777985 531776.277985,161947.155985 531767.422985,161941.486985 531770.695985,161937.729985 531773.172985,161932.269985 531777.472985,161926.725985 531782.098985,161924.613985 531783.667985,161920.829985 531786.099985,161918.605985 531787.218985,161914.388985 531788.805985,161912.462985 531789.286985,161907.980985 531789.764985,161906.546985 531789.681985,161902.168985 531788.569985,161900.603985 531787.696985,161897.146985 531784.749985,161895.220985 531782.338985,161888.204985 531771.801985,161886.264985 531769.242985,161883.356985 531765.807985,161881.285985 531763.666985,161877.947985 531760.643985,161875.477985 531758.658985,161871.750985 531756.139985,161869.201985 531754.809985,161868.431985 531755.733985,161866.239985 531759.658985,161864.319985 531763.806985,161862.714985 531768.076985,161861.469985 531772.366985,161861.207985 531774.035985,161861.449985 531778.536985,161862.001985 531783.085985,161863.613985 531807.082985,161864.280985 531822.215985,161864.630985 531826.696985,161866.742985 531841.487985,161867.721985 531846.033985,161869.164985 531850.249985,161871.272985 531853.934985,161872.321985 531855.188985,161875.579985 531857.980985,161879.435985 531860.329985,161887.847985 531864.517985,161891.856985 531866.765985,161905.113985 531875.495985,161909.626985 531878.077985,161917.664985 531882.167985,161925.928985 531885.781985,161936.320985 531889.414985,161940.808985 531890.825985,161945.292985 531891.980985,161949.678985 531892.708985,161953.873985 531892.835985,161955.851985 531892.353985,161959.869985 531889.472985,161962.230985 531885.504985,161962.474985 531884.239985,161962.567985 531879.959985,161961.965985 531875.401985,161960.428985 531866.167985,161959.158985 531853.444985,161957.935985 531843.738985,161952.205985 531803.507985)) POLYGON( EMPTY) #49 Polygon - gid: 2549 POLYGON((144515.492985 534697.249985,144520.510985 534691.952985,144527.310985 534683.949985,144535.496985 534673.356985,144546.006985 534658.516985,144553.414985 534648.475985,144571.337985 534625.843985,144588.734985 534602.871985,144591.563985 534598.255985,144593.687985 534594.272985,144595.170985 534590.539985,144595.782985 534587.574985,144596.004985 534583.199985,144595.414985 534578.711985,144594.709985 534576.051985,144592.684985 534571.167985,144584.642985 534570.602985,144578.354985 534570.640985,144565.341985 534571.789985,144550.736985 534573.859985,144535.843985 534577.740985,144530.135985 534579.076985,144502.804985 534584.561985,144492.056985 534586.945985,144456.640985 534596.072985,144421.529985 534606.221985,144416.729985 534607.810985,144413.648985 534609.062985,144409.481985 534611.224985,144405.573985 534613.952985,144401.917985 534617.122985,144394.939985 534623.644985,144392.859085 534625.096885,144391.528985 534626.710985,144388.152985 534629.686985,144383.914985 534633.745985,144381.967985 534636.004985,144380.598985 534637.904985,144379.020985 534640.527985,144378.413985 534641.899985,144377.712985 534644.700985,144377.358985 534647.693985,144377.278985 534650.747985,144377.449985 534653.772985,144377.702985 534655.737985,144378.069985 534657.174985,144379.935985 534661.330985,144381.203985 534663.625985,144382.840985 534666.139985,144386.549985 534671.102985,144395.619985 534681.742985,144397.803985 534684.814985,144400.044985 534688.738985,144401.674985 534692.606985,144402.653985 534692.013985,144409.805985 534694.346985,144417.124985 534696.033985,144420.474985 534696.361985,144428.018985 534696.322985,144429.277985 534696.473985,144430.696985 534696.874985,144451.529985 534707.358985,144457.662985 534710.086985,144461.881985 534711.659985,144465.832985 534712.829985,144468.756985 534713.530985,144473.000985 534714.248985,144475.995985 534714.553985,144480.201985 534714.653985,144484.693985 534714.285985,144488.789985 534713.532985,144493.108985 534712.257985,144496.962985 534710.702985,144499.635985 534709.353985,144504.686985 534706.313985,144509.614985 534702.550985,144515.492985 534697.249985)) POLYGON( EMPTY) #50 Polygon - gid: 2550 POLYGON((139580.306985 536284.245985,139581.537985 536275.353985,139582.391985 536270.934985,139584.727985 536262.895985,139588.416985 536252.326985,139591.066985 536246.306985,139593.754985 536241.295985,139596.494985 536237.619985,139599.804985 536234.137985,139603.593985 536230.963985,139607.726985 536228.169985,139622.104985 536219.993985,139630.326985 536215.966985,139647.195985 536208.674985,139656.268985 536204.452985,139664.079985 536200.252985,139671.632985 536195.480985,139678.904985 536190.269985,139684.418985 536185.885985,139690.667985 536180.238985,139699.139985 536171.792985,139704.019985 536167.257985,139707.535985 536164.362985,139719.234985 536155.582985,139724.584985 536151.291985,139728.111985 536147.960985,139730.160985 536145.764985,139731.363985 536144.185985,139731.781985 536143.091985,139730.140985 536138.628985,139728.244985 536134.603985,139725.033985 536129.308985,139723.167985 536126.742985,139720.321985 536123.255985,139715.151985 536117.777985,139709.530985 536112.704985,139702.374985 536107.119985,139693.638985 536101.087985,139672.813985 536087.921985,139664.262985 536082.684985,139655.423985 536077.697985,139647.610985 536073.673985,139639.545985 536070.005985,139626.896985 536064.817985,139618.344985 536061.630985,139595.270985 536053.548985,139589.311985 536051.161985,139582.993985 536048.148985,139578.633985 536045.693985,139573.206985 536042.191985,139559.712985 536032.655985,139544.953985 536022.737985,139538.344985 536017.628985,139533.269985 536012.957985,139527.127985 536006.378985,139522.507985 536000.966985,139517.569985 535994.673985,139514.710985 535990.549985,139512.017985 535986.156985,139509.458985 535981.492985,139503.627985 535970.144985,139500.680985 535965.036985,139498.267985 535961.301985,139493.873985 535955.337985,139482.644985 535941.539985,139476.252985 535933.272985,139471.574985 535926.605985,139468.229985 535920.871985,139466.243985 535916.364985,139465.202985 535913.222985,139464.494985 535910.303985,139463.964985 535907.107985,139463.809985 535904.115985,139464.450985 535898.265985,139465.320985 535895.316985,139466.778985 535892.646985,139467.714985 535891.405985,139469.884985 535889.355985,139472.222985 535888.202985,139473.703985 535887.781985,139478.694985 535887.027985,139527.523985 535887.045985,139534.405985 535886.815985,139539.706985 535886.209985,139543.334985 535885.541985,139549.575985 535883.796985,139555.393985 535881.390985,139561.941985 535877.533985,139566.488985 535874.094985,139570.786985 535869.895985,139574.370985 535865.516985,139577.146985 535860.922985,139578.381985 535858.167985,139579.597985 535854.520985,139580.483985 535850.089985,139580.752985 535847.100985,139580.748985 535844.297985,139580.113985 535838.063985,139579.392985 535835.150985,139578.222985 535831.671985,139577.100985 535828.887985,139575.349985 535825.206985,139573.169985 535821.251985,139570.621985 535817.165985,139565.947985 535810.671985,139563.686985 535807.948985,139560.612985 535804.659985,139558.108985 535802.262985,139554.445985 535799.139985,139549.466985 535795.479985,139544.282985 535792.276985,139538.972985 535789.483985,139532.216985 535786.483985,139528.012985 535784.877985,139522.443985 535783.012985,139498.844985 535775.793985,139481.569985 535769.907985,139475.702985 535767.695985,139470.596985 535765.137985,139468.001985 535763.386985,139466.883985 535762.396985,139464.852985 535760.143985,139462.813985 535757.076985,139461.575985 535754.350985,139459.684985 535748.568985,139458.819985 535743.777985,139458.353985 535740.212985,139457.651985 535731.980985,139457.160985 535721.682985,139457.087985 535713.035985,139457.389985 535710.492985,139458.081985 535707.539985,139459.525985 535704.076985,139461.210985 535701.557985,139463.801985 535698.894985,139466.281985 535697.157985,139469.421985 535695.731985,139473.755985 535694.584985,139480.230985 535693.382985,139487.658985 535692.342985,139497.732985 535690.655985,139507.707985 535688.863985,139515.608985 535688.004985,139536.445985 535687.421985,139560.876985 535685.892985,139568.980985 535685.624985,139575.288985 535685.903985,139579.849985 535686.480985,139588.121985 535688.083985,139596.121985 535690.179985,139601.973985 535691.519985,139606.159985 535692.152985,139612.312985 535692.703985,139618.514985 535692.777985,139621.601985 535692.529985,139627.534985 535691.492985,139631.225985 535690.396985,139635.337985 535688.505985,139638.406985 535686.551985,139639.584985 535685.626985,139642.840985 535682.480985,139645.451985 535679.212985,139648.795985 535673.937985,139651.978985 535668.218985,139668.201985 535637.219985,139672.423985 535629.667985,139677.545985 535622.037985,139680.573985 535618.604985,139682.864985 535616.615985,139685.943985 535614.660985,139688.770985 535613.559985,139692.249985 535612.928985,139695.280985 535613.008985,139698.224985 535613.644985,139700.766985 535614.733985,139702.087985 535615.482985,139705.439985 535617.839985,139707.680985 535619.832985,139712.062985 535624.286985,139715.241985 535628.088985,139718.403985 535632.235985,139721.539985 535636.765985,139724.665985 535641.644985,139731.570985 535653.529985,139737.212985 535664.169985,139739.633985 535669.254985,139741.716985 535674.194985,139743.466985 535678.998985,139744.879985 535683.722985,139745.639985 535686.957985,139746.437985 535691.658985,139746.900985 535696.335985,139746.980985 535699.429985,139746.262985 535708.502985,139744.114985 535718.330985,139740.327985 535733.143985,139738.458985 535739.114985,139735.962985 535745.484985,139733.105985 535751.646985,139724.889985 535768.299985,139722.678985 535773.301985,139720.685985 535778.355985,139718.976985 535783.420985,139717.642985 535788.432985,139716.487985 535794.996985,139716.255985 535798.802985,139716.424985 535806.302985,139716.897985 535814.641985,139720.252985 535833.369985,139721.254985 535840.218985,139722.032985 535848.318985,139722.636985 535860.654985,139723.041985 535865.500985,139723.595985 535869.969985,139724.425985 535873.622985,139725.907985 535877.893985,139727.294985 535880.672985,139728.946985 535883.210985,139731.655985 535886.283985,139734.007985 535888.197985,139736.641985 535889.770985,139739.492985 535890.878985,139740.985985 535891.198985,139742.449985 535891.287985,139744.945985 535890.794985,139746.374985 535890.179985,139748.401985 535888.804985,139750.468985 535886.617985,139753.620985 535882.153985,139757.971985 535874.263985,139766.546985 535856.319985,139770.020985 535849.785985,139775.406985 535840.970985,139787.949985 535822.120985,139792.813985 535813.795985,139795.325985 535808.760985,139797.476985 535803.700985,139799.223985 535798.645985,139800.003985 535795.747985,139800.796985 535792.077985,139801.378985 535788.309985,139801.878985 535781.357985,139801.971985 535757.446985,139801.772985 535751.399985,139801.317985 535745.229985,139799.979985 535735.531985,139797.665985 535724.587985,139795.239985 535715.729985,139790.553985 535700.992985,139787.074985 535690.615985,139784.300985 535683.246985,139781.903985 535677.405985,139774.772985 535661.279985,139771.370985 535653.166985,139767.425985 535643.120985,139764.622985 535635.052985,139762.357985 535626.853985,139760.604985 535617.923985,139759.689985 535609.708985,139759.670985 535602.051985,139760.175985 535597.480985,139761.074985 535592.961985,139762.333985 535588.513985,139764.487985 535582.705985,139767.018985 535577.178985,139769.898985 535571.857985,139773.045985 535567.308985,139774.918985 535564.960985,139776.980985 535562.899985,139779.363985 535561.024985,139782.591985 535559.191985,139785.460985 535558.179985,139786.945985 535557.864985,139788.990985 535557.684985,139790.500985 535557.739985,139793.505985 535558.303985,139795.110985 535558.903985,139796.414985 535559.597985,139798.880985 535561.344985,139802.353985 535564.379985,139805.549985 535568.247985,139808.696985 535572.568985,139814.126985 535580.708985,139823.426985 535595.492985,139828.793985 535604.633985,139833.129985 535612.775985,139838.706985 535624.155985,139843.536985 535634.544985,139847.396985 535643.335985,139852.464985 535655.668985,139857.816985 535669.898985,139867.280985 535697.844985,139870.030985 535705.535985,139874.258985 535716.398985,139878.906985 535727.026985,139883.055985 535735.583985,139886.787985 535742.582985,139890.766985 535749.443985,139897.980985 535760.815985,139901.071985 535765.981985,139903.940985 535771.255985,139912.046985 535787.324985,139914.373985 535791.455985,139918.063985 535797.258985,139921.357985 535801.454985,139923.505985 535803.573985,139924.970985 535804.706985,139926.243985 535805.496985,139928.986985 535806.781985,139932.583985 535807.856985,139935.570985 535808.318985,139938.005985 535808.411985,139941.020985 535808.199985,139943.963985 535807.605985,139946.733985 535806.629985,139949.456985 535805.316985,139952.528985 535803.450985,139954.949985 535801.662985,139958.129985 535798.972985,139963.401985 535793.632985,139968.154985 535787.926985,139971.450985 535782.908985,139972.879985 535780.264985,139974.014985 535777.692985,139974.980985 535774.850985,139976.502985 535769.142985,139979.454985 535754.014985,139980.658985 535746.509985,139981.662985 535736.074985,139982.932985 535711.663985,139983.270985 535696.456985,139983.238985 535689.010985,139982.549985 535678.406985,139980.323985 535658.404985,139979.190985 535646.066985,139978.378985 535634.706985,139977.762985 535622.123985,139976.315985 535580.869985,139975.971985 535561.243985,139976.099985 535549.548985,139977.004985 535534.281985,139979.934985 535490.984985,139981.030985 535482.383985,139982.469985 535475.733985,139984.430985 535469.066985,139986.517985 535463.165985,139987.679985 535460.401985,139990.234985 535455.396985,139991.909985 535452.941985,139993.957985 535450.827985,139996.385985 535448.994985,139999.024985 535447.621985,140001.905985 535446.712985,140006.993985 535445.807985,140011.507985 535445.571985,140015.764985 535445.938985,140021.851985 535447.221985,140024.694985 535448.179985,140030.425985 535450.706985,140036.028985 535453.823985,140040.617985 535457.090985,140045.514985 535461.247985,140049.628985 535465.627985,140052.229985 535469.119985,140053.784985 535471.700985,140055.287985 535475.350985,140056.580985 535480.715985,140057.299985 535485.168985,140057.913985 535487.470985,140058.937985 535490.320985,140059.568985 535491.686985,140060.850985 535493.785985,140061.778985 535494.965985,140065.399985 535498.531985,140067.800985 535500.346985,140070.706985 535502.078985,140073.444985 535503.331985,140077.253985 535504.488985,140080.220985 535504.966985,140084.207985 535505.256985,140088.710985 535505.234985,140093.405985 535504.976985,140098.169985 535504.301985,140102.967985 535503.305985,140107.692985 535501.965985,140112.290985 535500.232985,140115.396985 535498.769985,140119.794985 535496.227985,140124.107985 535493.220985,140127.651985 535490.446985,140132.374985 535486.472985,140136.271985 535482.899985,140139.926985 535479.270985,140143.308985 535475.520985,140148.197985 535469.094985,140157.833985 535454.685985,140162.452985 535448.684985,140165.258985 535445.833985,140168.592985 535442.802985,140172.883985 535439.551985,140176.709985 535437.178985,140180.297985 535435.354985,140184.482985 535433.693985,140188.370985 535432.634985,140192.812985 535431.857985,140197.194985 535431.510985,140203.273985 535431.345985,140218.438985 535431.784985,140223.355985 535431.715985,140226.351985 535431.429985,140228.064985 535431.012985,140229.448985 535430.482985,140232.118985 535429.063985,140235.867985 535426.512985,140238.434985 535423.996985,140242.173985 535419.828985,140246.735985 535413.958985,140251.061985 535407.683985,140254.278985 535402.487985,140257.229985 535397.194985,140259.817985 535391.773985,140261.404985 535387.658985,140263.054985 535382.041985,140264.205985 535376.314985,140264.964985 535370.504985,140265.716985 535361.336985,140266.322985 535350.243985,140266.837985 535333.228985,140267.009985 535310.682985,140266.988985 535300.110985,140266.512985 535282.732985,140266.469985 535273.905985,140266.663985 535269.411985,140267.088985 535264.675985,140267.757985 535259.825985,140268.568985 535255.397985,140270.540985 535247.578985,140272.980985 535240.592985,140276.555985 535232.562985,140281.174985 535223.841985,140284.880985 535217.943985,140288.095985 535213.604985,140291.593985 535209.455985,140300.508985 535199.762985,140303.734985 535195.825985,140306.452985 535191.609985,140307.757985 535188.901985,140308.504985 535186.947985,140309.798985 535181.881985,140310.622985 535175.071985,140311.020985 535164.614985,140311.111985 535143.903985,140311.541985 535136.992985,140312.125985 535133.284985,140312.934985 535130.353985,140313.482985 535128.949985,140314.663985 535126.829985,140316.736985 535124.574985,140318.681985 535123.326985,140320.096985 535122.827985,140321.594985 535122.491985,140325.004985 535122.068985,140329.517985 535122.050985,140333.688985 535122.249985,140338.046985 535122.680985,140342.500985 535123.340985,140346.868985 535124.218985,140352.700985 535125.724985,140357.000985 535127.058985,140361.769985 535128.868985,140365.893985 535130.673985,140370.855985 535133.092985,140376.893985 535136.308985,140381.311985 535138.990985,140386.114985 535142.595985,140390.161985 535146.262985,140396.094985 535152.500985,140402.651985 535160.317985,140406.637985 535166.186985,140408.086985 535168.819985,140409.150985 535171.253985,140410.478985 535175.562985,140411.454985 535179.981985,140411.791985 535184.591985,140411.749985 535187.599985,140411.076985 535193.566985,140410.362985 535197.454985,140408.200985 535205.090985,140406.393985 535210.820985,140405.547985 535214.829985,140405.220985 535217.828985,140405.477985 535221.410985,140406.248985 535224.350985,140407.091985 535226.325985,140407.834985 535227.629985,140409.638985 535230.070985,140412.571985 535232.946985,140415.007985 535234.735985,140418.789985 535236.858985,140422.981985 535238.528985,140426.187985 535239.435985,140431.511985 535240.551985,140444.577985 535242.758985,140451.616985 535244.179985,140456.451985 535245.428985,140462.114985 535247.443985,140464.307985 535248.483985,140466.910985 535250.001985,140469.343985 535251.758985,140471.538985 535253.752985,140472.546985 535254.879985,140473.907985 535256.799985,140474.620985 535258.138985,140475.485985 535260.538985,140477.086985 535260.852985,140479.858985 535262.010985,140485.998985 535265.048985,140497.212985 535272.587985,140502.401985 535275.601985,140506.981985 535277.963985,140515.753985 535282.120985,140520.316985 535284.063985,140524.534985 535285.638985,140530.215985 535287.306985,140533.160985 535287.824985,140537.199985 535287.933985,140540.948985 535287.423985,140543.882985 535286.586985,140545.275985 535285.996985,140546.977985 535284.982985,140548.154985 535284.034985,140550.199985 535281.745985,140551.314985 535279.744985,140552.235985 535276.904985,140553.238985 535271.991985,140553.703985 535266.730985,140553.976985 535261.326985,140554.223985 535250.450985,140554.140985 535235.153985,140553.689985 535228.522985,140552.718985 535221.486985,140551.431985 535214.670985,140548.875985 535202.927985,140548.084985 535198.157985,140547.564985 535191.826985,140547.545985 535186.972985,140547.729985 535182.096985,140548.541985 535172.313985,140550.093985 535162.251985,140551.974985 535154.083985,140556.616985 535137.953985,140558.129985 535131.991985,140558.777985 535128.123985,140559.194985 535122.126985,140558.828985 535116.905985,140557.672985 535111.402985,140555.608985 535105.762985,140553.963985 535100.689985,140550.879985 535094.895985,140550.582985 535093.633985,140547.674985 535086.614985,140544.826985 535081.157985,140540.731985 535075.516985,140536.634985 535070.725985,140532.837985 535067.360985,140528.420985 535064.135985,140524.987985 535060.547985,140522.647985 535058.438985,140515.451985 535050.544985,140510.767985 535045.123985,140507.746985 535042.235985,140498.425985 535035.674985,140497.011985 535035.121985,140495.522985 535034.908985,140494.213985 535035.000985,140483.052985 535036.945985,140481.288985 535037.516985,140470.264985 535043.040985,140459.888985 535049.152985,140451.570985 535053.489985,140448.087985 535054.901985,140443.674985 535055.846985,140439.213985 535056.280985,140437.365985 535055.718985,140436.189985 535054.770985,140434.891985 535053.225985,140433.170985 535050.768985,140431.587985 535048.207985,140429.521985 535044.372985,140428.541985 535041.540985,140428.349985 535040.066985,140428.414985 535037.029985,140429.080985 535033.642985,140431.959985 535025.978985,140437.970985 535012.180985,140441.433985 535004.957985,140442.520985 535002.161985,140444.779985 534995.680985,140446.918985 534988.089985,140447.830985 534983.115985,140448.041985 534980.115985,140448.067985 534976.101985,140447.958985 534974.597985,140447.484985 534972.392985,140445.934985 534969.613985,140442.502985 534965.963985,140440.878985 534964.878985,140434.970985 534964.190985,140432.581985 534964.231985,140429.211985 534964.880985,140419.422985 534963.985985,140412.037985 534963.573985,140406.589985 534962.345985,140404.198985 534961.905985,140398.724985 534961.259985,140392.228985 534959.924985,140388.840985 534958.945985,140386.096985 534957.699985,140384.810985 534956.932985,140382.742985 534955.224985,140381.314985 534953.714985,140379.548985 534951.284985,140377.433985 534947.807985,140376.736985 534946.372985,140375.493985 534942.046985,140374.387985 534939.275985,140369.021985 534927.245985,140367.341985 534923.070985,140366.161985 534920.648985,140362.125985 534913.096985,140348.646985 534890.235985,140346.185985 534886.399985,140340.156985 534878.582985,140338.021985 534876.008985,140332.861985 534870.325985,140325.793985 534864.759985,140322.300985 534862.358985,140320.999985 534861.615985,140316.091985 534859.481985,140313.404985 534858.117985,140289.152985 534843.579985,140283.129985 534840.332985,140280.196985 534839.230985,140270.767985 534836.812985,140268.395985 534836.550985,140264.431985 534837.035985,140261.915985 534837.946985,140258.399985 534839.743985,140255.958985 534841.489985,140255.068985 534842.413985,140252.241985 534846.335985,140250.636985 534848.868985,140249.317985 534851.316985,140248.088985 534854.054985,140246.920985 534858.179985,140246.664985 534861.168985,140247.428985 534872.649985,140247.973985 534878.666985,140248.255985 534880.138985,140249.969985 534885.156985,140252.936985 534892.820985,140254.655985 534896.813985,140266.365985 534919.755985,140267.822985 534922.376985,140271.482985 534927.812985,140275.051985 534934.410985,140279.541985 534940.825985,140281.945985 534944.629985,140285.361985 534950.376985,140287.187985 534953.884985,140288.441985 534956.616985,140289.360985 534959.482985,140290.166985 534965.964985,140290.128985 534967.672985,140289.844985 534969.134985,140288.872985 534972.725985,140287.580985 534978.738985,140286.713985 534981.607985,140283.568985 534990.459985,140281.708985 534999.392985,140280.605985 535003.757985,140278.935985 535013.332985,140276.071985 535028.122985,140273.766985 535037.947985,140272.565985 535045.351985,140270.781985 535053.996985,140267.939985 535070.338985,140267.049985 535074.638985,140264.681985 535083.629985,140262.124985 535094.986985,140259.633985 535105.080985,140257.324985 535112.628985,140254.862985 535119.003985,140254.045985 535120.295985,140252.515985 535121.828985,140251.200985 535122.602985,140248.949985 535123.338985,140247.425985 535123.533985,140245.402985 535123.264985,140242.580985 535122.286985,140238.106985 535120.252985,140234.151985 535118.094985,140231.083985 535115.983985,140224.514985 535110.280985,140219.876985 535107.707985,140217.334985 535106.077985,140215.997985 535105.431985,140213.564985 535104.791985,140202.236985 535102.879985,140203.060985 535106.831985,140203.249985 535112.368985,140202.870985 535114.529985,140202.232985 535116.056985,140201.439985 535119.281985,140199.089985 535125.794985,140197.089985 535128.776985,140196.021985 535129.930985,140193.315985 535131.267985,140191.140985 535131.820985,140188.152985 535132.081985,140182.311985 535132.222985,140178.272985 535131.905985,140171.238985 535130.223985,140166.918985 535128.959985,140161.858985 535127.208985,140157.472985 535126.136985,140155.339985 535125.322985,140151.491985 535122.966985,140143.886985 535119.310985,140140.533985 535117.044985,140134.495985 535112.594985,140132.690985 535111.964985,140132.591985 535116.758985,140133.193985 535124.798985,140132.877985 535132.797985,140133.264985 535137.308985,140133.141985 535141.806985,140134.180985 535154.799985,140134.230985 535161.325985,140135.180985 535167.325985,140134.694985 535173.307985,140134.768985 535180.436985,140134.511985 535184.933985,140134.020985 535189.622985,140132.969985 535193.999985,140130.296985 535211.773985,140130.152985 535216.772985,140130.483985 535223.319985,140130.987985 535226.790985,140130.998985 535228.298985,140129.698985 535229.685985,140128.371985 535229.879985,140121.819985 535229.406985,140114.812985 535229.358985,140110.320985 535229.666985,140106.544985 535230.140985,140096.959985 535232.159985,140092.659985 535232.188985,140089.160985 535231.737985,140087.234985 535231.118985,140084.488985 535229.880985,140081.339985 535227.816985,140075.055985 535222.764985,140069.553985 535217.390985,140058.896985 535209.433985,140055.811985 535207.661985,140052.908985 535206.682985,140051.409985 535206.419985,140049.938985 535206.351985,140048.540985 535206.542985,140047.094985 535206.993985,140043.881985 535208.465985,140042.590985 535209.230985,140039.517985 535211.655985,140036.378985 535214.890985,140034.416985 535216.648985,140032.004985 535218.446985,140028.812985 535220.321985,140023.891985 535222.473985,140020.987985 535223.247985,140017.304985 535223.940985,140012.839985 535224.522985,140008.579985 535224.869985,140004.271985 535224.983985,140000.726985 535224.755985,139991.620985 535222.385985,139980.642985 535218.147985,139976.590985 535216.220985,139970.813985 535212.595985,139963.060985 535208.257985,139960.458985 535206.495985,139958.259985 535204.477985,139954.212985 535200.011985,139950.851985 535195.994985,139944.482985 535189.621985,139941.329985 535186.243985,139936.998985 535180.118985,139931.563985 535173.032985,139929.868985 535170.570985,139927.461985 535165.212985,139925.360985 535163.349985,139922.568985 535160.114985,139908.953985 535143.622985,139905.486985 535139.190985,139901.433985 535133.560985,139895.564985 535124.415985,139888.179985 535114.063985,139882.622985 535104.655985,139876.825985 535095.889985,139873.897985 535092.106985,139870.957985 535088.698985,139862.467985 535079.806985,139860.188985 535077.835985,139858.445985 535076.757985,139857.026985 535076.297985,139852.667985 535075.738985,139849.657985 535075.687985,139845.757985 535076.064985,139844.290985 535076.553985,139841.735985 535078.096985,139838.563985 535080.460985,139837.273985 535081.847985,139835.644985 535084.379985,139834.712985 535086.347985,139822.859985 535120.960985,139821.772985 535124.628985,139817.808985 535144.003985,139815.981985 535157.572985,139813.602985 535180.207985,139810.843985 535213.080985,139808.202985 535231.937985,139807.272985 535235.411985,139805.576985 535239.595985,139803.498985 535245.955985,139802.607985 535247.923985,139800.882985 535250.388985,139798.520985 535253.177985,139794.469985 535257.125985,139790.983985 535259.661985,139789.648985 535260.326985,139786.940985 535261.222985,139785.460985 535261.547985,139783.467985 535261.730985,139781.992985 535261.435985,139777.419985 535259.850985,139767.456985 535255.351985,139757.514985 535251.322985,139749.332985 535247.573985,139743.283985 535245.221985,139739.177985 535243.346985,139737.320985 535242.730985,139731.388985 535241.792985,139725.950985 535240.505985,139724.191985 535240.234985,139715.787985 535240.185985,139714.330985 535240.482985,139713.014985 535241.140985,139710.528985 535242.883985,139707.610985 535245.432985,139702.496985 535251.004985,139699.773985 535254.580985,139695.755985 535262.914985,139694.924985 535265.663985,139694.254985 535268.599985,139693.910985 535271.629985,139693.843985 535274.629985,139694.395985 535288.182985,139694.935985 535293.205985,139698.184985 535312.557985,139698.401985 535318.113985,139698.331985 535324.742985,139697.885985 535330.729985,139696.769985 535337.460985,139695.373985 535342.903985,139692.205985 535352.885985,139690.615985 535356.610985,139688.348985 535360.684985,139686.555985 535363.086985,139682.976985 535367.067985,139670.956985 535378.401985,139667.649985 535380.806985,139665.862985 535382.309985,139662.748985 535385.564985,139659.886985 535388.248985,139657.574985 535390.172985,139654.486985 535392.070985,139645.811985 535395.942985,139640.779985 535397.682985,139637.638985 535398.419985,139627.571985 535400.047985,139626.086985 535400.245985,139622.765985 535400.265985,139619.772985 535399.924985,139615.927985 535399.162985,139608.762985 535396.929985,139604.126985 535397.211985,139598.119985 535397.050985,139593.613985 535396.546985,139587.709985 535395.435985,139582.905985 535394.251985,139574.205985 535391.195985,139562.531985 535388.361985,139559.299985 535387.180985,139555.330985 535384.999985,139554.167985 535385.182985,139554.356985 535389.318985,139555.044985 535392.524985,139555.398985 535396.109985,139557.087985 535403.488985,139557.241985 535404.991985,139556.820985 535407.038985,139553.825985 535415.329985,139552.035985 535421.066985,139551.328985 535425.310985,139551.184985 535429.773985,139551.681985 535434.246985,139552.627985 535438.656985,139554.313985 535444.464985,139556.074985 535448.477985,139558.544985 535452.208985,139561.411985 535455.719985,139565.435985 535460.273985,139568.557985 535462.977985,139571.141985 535464.460985,139584.237985 535470.517985,139586.503985 535471.376985,139593.668985 535473.612985,139598.687985 535475.707985,139602.933985 535477.933985,139604.020985 535478.940985,139604.533985 535480.482985,139604.866985 535483.813985,139606.271985 535492.704985,139606.804985 535498.248985,139606.777985 535499.741985,139606.314985 535503.020985,139604.821985 535509.007985,139603.021985 535514.733985,139601.600985 535520.071985,139601.043985 535521.446985,139598.935985 535524.578985,139595.269985 535529.391985,139591.348985 535534.002985,139588.301985 535537.258985,139586.464985 535538.377985,139579.904985 535538.899985,139575.514985 535538.902985,139574.105985 535538.705985,139571.152985 535537.945985,139569.775985 535537.346985,139567.971985 535535.995985,139558.235985 535525.528985,139554.190985 535520.960985,139553.092985 535519.974985,139551.210985 535518.832985,139548.269985 535517.989985,139545.546985 535517.716985,139540.672985 535518.378985,139537.739985 535519.077985,139536.353985 535519.563985,139535.014985 535520.213985,139531.146985 535522.544985,139524.426985 535525.648985,139520.505985 535527.857985,139514.722985 535530.645985,139512.707985 535531.967985,139506.205985 535537.460985,139504.142985 535539.613985,139500.756985 535544.674985,139490.017985 535562.863985,139483.034985 535575.309985,139481.369985 535577.781985,139479.936985 535579.366985,139477.659985 535581.322985,139468.886985 535587.682985,139467.595985 535588.447985,139465.277985 535589.398985,139463.794985 535589.646985,139462.170985 535589.641985,139460.563985 535589.370985,139459.135985 535588.819985,139457.345985 535587.287985,139455.504985 535584.838985,139454.027985 535582.019985,139453.087985 535579.127985,139452.866985 535577.169985,139453.221985 535574.213985,139454.052985 535571.208985,139455.938985 535565.568985,139457.701985 535561.409985,139459.377985 535558.048985,139460.959985 535555.511985,139468.242985 535545.227985,139470.055985 535542.130985,139471.381985 535539.436985,139472.228985 535537.299985,139473.089985 535534.404985,139473.345985 535532.931985,139473.544985 535529.790985,139473.052985 535511.213985,139472.672985 535506.749985,139472.245985 535504.385985,139471.092985 535501.582985,139468.019985 535496.222985,139466.240985 535493.791985,139465.240985 535492.732985,139463.860985 535491.761985,139462.409985 535491.206985,139460.885985 535490.885985,139458.629985 535490.789985,139457.113985 535490.968985,139454.295985 535491.715985,139452.943985 535492.368985,139451.714985 535493.290985,139450.985985 535494.052985,139449.229985 535496.453985,139445.203985 535503.081985,139440.597985 535511.241985,139439.176985 535513.361985,139438.183985 535514.476985,139435.886985 535516.435985,139432.947985 535518.499985,139429.292985 535520.347985,139426.442985 535521.320985,139423.421985 535522.038985,139418.953985 535522.644985,139415.086985 535522.753985,139405.229985 535522.513985,139398.935985 535523.454985,139397.055985 535523.531985,139392.550985 535523.406985,139385.713985 535523.826985,139382.359985 535523.869985,139377.014985 535523.663985,139372.533985 535523.228985,139368.639985 535523.038985,139365.764985 535523.028985,139358.901985 535523.395985,139352.037985 535523.311985,139350.543985 535523.443985,139348.721985 535524.098985,139344.531985 535526.261985,139343.144985 535526.680985,139341.956985 535526.738985,139344.312985 535541.041985,139344.781985 535545.978985,139344.872985 535552.866985,139344.745985 535555.864985,139344.378985 535558.230985,139343.620985 535561.141985,139341.916985 535566.051985,139340.141985 535570.191985,139334.077985 535581.003985,139330.716985 535587.709985,139327.445985 535594.730985,139321.842985 535607.611985,139311.911985 535631.802985,139307.926985 535640.247985,139305.909985 535646.602985,139304.759985 535651.531985,139304.319985 535654.520985,139304.320985 535655.940985,139304.672985 535658.901985,139306.569985 535667.331985,139309.298985 535675.337985,139311.277985 535680.026985,139313.291985 535684.055985,139314.594985 535686.249985,139324.683985 535701.010985,139328.374985 535706.014985,139330.247985 535709.049985,139333.267985 535715.439985,139336.405985 535723.879985,139337.956985 535729.191985,139339.254985 535735.057985,139339.965985 535739.703985,139340.333985 535744.195985,139340.488985 535748.689985,139340.347985 535753.192985,139339.698985 535757.116985,139338.541985 535761.181985,139333.834985 535774.093985,139330.743985 535781.597985,139328.768985 535785.647985,139326.442985 535789.755985,139324.780985 535792.267985,139322.984985 535794.593985,139320.784985 535796.638985,139317.034985 535798.995985,139309.875985 535802.400985,139304.190985 535804.395985,139301.761985 535805.793985,139298.141985 535808.463985,139286.886985 535817.737985,139283.524985 535820.727985,139280.744985 535823.457985,139275.774985 535829.099985,139273.210985 535832.538985,139271.575985 535835.043985,139267.939985 535841.620985,139266.006985 535845.485985,139264.273985 535849.641985,139257.668985 535867.878985,139254.447985 535874.600985,139248.687985 535885.134985,139239.109985 535899.576985,139236.806985 535903.449985,139235.467985 535906.129985,139222.758985 535935.269985,139218.757985 535944.996985,139214.967985 535954.740985,139212.922985 535960.311985,139212.544985 535962.399985,139213.872985 535966.725985,139214.457985 535969.337985,139215.059985 535973.798985,139215.361985 535979.096985,139215.233985 535982.446985,139214.623985 535986.910985,139213.582985 535991.775985,139212.443985 535996.131985,139211.037985 536000.887985,139209.570985 536004.718985,139208.867985 536006.032985,139205.748985 536010.832985,139202.012985 536019.020985,139196.508985 536028.023985,139193.752985 536033.960985,139191.136985 536041.551985,139185.845985 536060.914985,139184.695985 536064.146985,139182.251985 536069.591985,139180.979985 536072.081985,139179.312985 536074.584985,139177.948985 536075.898985,139176.737985 536076.803985,139174.690985 536077.732985,139165.450985 536080.395985,139164.104985 536080.741985,139162.607985 536080.840985,139155.248985 536082.210985,139153.937985 536082.710985,139153.402985 536084.303985,139153.711985 536085.826985,139156.356985 536093.057985,139158.557985 536098.139985,139159.347985 536099.447985,139159.781985 536101.659985,139159.839985 536103.160985,139159.666985 536109.541985,139159.192985 536118.407985,139158.693985 536121.775985,139156.142985 536130.712985,139154.566985 536135.078985,139153.366985 536140.956985,139151.410985 536148.587985,139151.034985 536151.564985,139150.105985 536156.119985,139149.442985 536160.574985,139148.108985 536165.856985,139147.217985 536168.724985,139146.011985 536171.763985,139143.883985 536175.739985,139142.534985 536178.735985,139138.221985 536190.634985,139135.120985 536198.181985,139132.997985 536201.772985,139129.278985 536206.605985,139128.223985 536207.663985,139127.030985 536208.570985,139124.729985 536210.052985,139121.139985 536212.776985,139119.376985 536213.599985,139116.517985 536214.580985,139114.620985 536216.016985,139113.566985 536217.101985,139111.812985 536217.600985,139109.701985 536217.540985,139107.064985 536217.186985,139104.274985 536222.606985,139106.650985 536223.998985,139108.467985 536225.621985,139110.372985 536227.758985,139113.634985 536232.128985,139115.101985 536234.750985,139116.269985 536237.632985,139119.094985 536248.394985,139119.441985 536258.707985,139119.084985 536262.309985,139119.038985 536264.577985,139119.158985 536268.730985,139119.361985 536270.400985,139120.184985 536274.028985,139121.742985 536279.104985,139122.687985 536281.195985,139125.576985 536286.680985,139126.289985 536287.509985,139127.625985 536288.091985,139129.180985 536288.317985,139130.867985 536288.281985,139136.723985 536286.994985,139138.343985 536285.291985,139139.628985 536284.393985,139140.966985 536283.755985,139141.986985 536283.598985,139145.652985 536283.996985,139150.149985 536284.130985,139152.737985 536284.686985,139170.372985 536289.333985,139177.323985 536290.759985,139180.190985 536291.636985,139182.875985 536292.951985,139184.562985 536294.429985,139186.322985 536298.559985,139187.023985 536300.802985,139187.542985 536303.788985,139187.992985 536305.195985,139189.250985 536307.428985,139191.192985 536309.734985,139192.620985 536309.942985,139196.984985 536311.296985,139207.398985 536313.624985,139211.158985 536314.025985,139214.750985 536313.860985,139226.458985 536310.802985,139227.958985 536310.711985,139231.027985 536309.928985,139234.113985 536310.030985,139235.572985 536310.361985,139237.446985 536311.468985,139239.651985 536313.662985,139240.737985 536315.338985,139241.907985 536312.463985,139243.362985 536309.812985,139244.852985 536307.492985,139246.692985 536305.118985,139249.714985 536301.688985,139252.882985 536298.487985,139261.604985 536290.682985,139264.851985 536287.558985,139267.358985 536284.624985,139269.958985 536280.927985,139271.167985 536278.583985,139272.642985 536274.325985,139273.863985 536269.860985,139275.682985 536261.698985,139277.976985 536254.114985,139281.137985 536247.564985,139283.562985 536243.806985,139286.536985 536240.387985,139288.028985 536239.104985,139290.590985 536237.405985,139291.970985 536236.766985,139293.946985 536236.266985,139296.987985 536236.296985,139298.506985 536236.584985,139300.735985 536237.364985,139303.320985 536238.858985,139307.150985 536241.609985,139313.057985 536246.684985,139329.186985 536261.910985,139337.424985 536269.251985,139339.812985 536271.063985,139343.434985 536273.282985,139347.491985 536275.193985,139351.619985 536276.124985,139357.829985 536276.737985,139419.726985 536276.633985,139424.622985 536276.791985,139429.727985 536277.342985,139433.511985 536278.012985,139437.399985 536278.909985,139445.643985 536281.428985,139458.811985 536286.331985,139474.140985 536292.642985,139478.189985 536294.606985,139481.873985 536296.640985,139485.725985 536299.011985,139489.666985 536301.691985,139493.379985 536304.574985,139499.949985 536310.724985,139508.143985 536318.870985,139512.767985 536324.433985,139517.950985 536331.394985,139520.965985 536336.046985,139523.329985 536340.050985,139532.860985 536331.971985,139544.945985 536324.366985,139558.648985 536313.804985,139563.238985 536309.939985,139568.581985 536305.092985,139571.546985 536301.976985,139574.386985 536298.469985,139577.138985 536294.067985,139578.415985 536291.338985,139579.359985 536288.658985,139580.306985 536284.245985)) MULTIPOLYGON(((139209.864361365 536222.972189994,139210.431297005 536221.517745343,139213.592297005 536214.967745343,139218.119433008 536206.899740567,139220.544433008 536203.141740567,139226.975410525 536194.584567191,139229.949410525 536191.165567191,139237.636669051 536183.52183426,139239.128669051 536182.23883426,139246.578605338 536176.600056987,139249.140605338 536174.901056987,139259.077204942 536169.348056245,139260.457204942 536168.709056245,139273.573099412 536164.058541158,139275.549099412 536163.558541158,139294.686837194 536161.270634297,139297.727837194 536161.300634297,139310.958972088 536162.609730201,139312.477972088 536162.897730201,139323.27902284 536165.79412301,139325.50802284 536166.57412301,139338.265174743 536172.42994117,139340.850174743 536173.92394117,139347.074678732 536177.944173297,139350.904678732 536180.695173297,139356.026133182 536184.722201688,139361.933133182 536189.797201688,139364.542337504 536192.147278345,139374.67174683 536201.709581426,139419.600969378 536201.634090866,139422.146068807 536201.673008262,139427.042068807 536201.831008262,139432.671246054 536202.225065431,139437.776246054 536202.776065431,139442.804190975 536203.491696336,139446.588190975 536204.161696336,139450.37232967 536204.932695061,139454.26032967 536205.829695061,139459.31637517 536207.183617171,139467.56037517 536209.702617171,139471.814386673 536211.143068372,139484.982386673 536216.046068372,139487.364579531 536216.979628547,139502.693579531 536223.290628547,139506.872946853 536225.162479124,139510.921946853 536227.126479124,139514.440572203 536228.949579268,139516.703269686 536230.198853611,139517.606430487 536227.611294244,139519.773402566 536222.110125623,139522.423402566 536216.090125623,139524.975408584 536210.854149756,139527.663408584 536205.843149756,139533.621765 536196.474161606,139536.361765 536192.798161606,139542.136400548 536185.946546017,139545.446400548 536182.464546017,139551.643555573 536176.644709606,139555.432555573 536173.470709606,139561.589895469 536168.829803886,139565.722895469 536166.035803886,139570.653377554 536162.973760946,139585.031377554 536154.797760946,139589.115600527 536152.638951691,139597.337600527 536148.611951691,139600.567941215 536147.123689662,139614.605788305 536141.055518402,139609.780279514 536138.860854268,139599.564476841 536134.670832585,139592.850953429 536132.168961781,139570.478033169 536124.332525032,139567.382442866 536123.171030486,139561.423442866 536120.784030486,139557.028291501 536118.858093707,139550.710291501 536115.845093707,139546.19592971 536113.501132072,139541.83592971 536111.046132072,139537.968651123 536108.712479275,139532.541651123 536105.210479275,139529.922961463 536103.441420152,139517.149119949 536094.414344958,139503.122045358 536084.988196452,139499.083924571 536082.075473624,139492.474924571 536076.966473624,139487.553968081 536072.812973623,139482.478968081 536068.141973623,139478.447490872 536064.13897891,139472.305490872 536057.55997891,139470.085647335 536055.073663495,139465.465647335 536049.661663495,139463.50451461 536047.265910279,139458.56651461 536040.972910279,139455.933024069 536037.404361165,139453.074024069 536033.280361165,139450.769238377 536029.747600218,139448.076238377 536025.354600218,139446.264916956 536022.233764829,139443.705916956 536017.569764829,139442.750176555 536015.770308056,139437.752885533 536006.04483069,139436.660390725 536004.151222451,139436.520633654 536003.934897271,139434.563198932 536001.278060521,139424.473850796 535988.88044492,139423.312028848 535987.415908034,139416.920028848 535979.148908034,139414.858650413 535976.351235667,139410.180650413 535969.684235667,139406.79238699 535964.397716835,139403.44738699 535958.663716836,139399.597759121 535951.114629906,139397.611759121 535946.607629906,139395.049803009 535939.952872795,139394.008803009 535936.810872795,139392.316306585 535930.901562704,139391.608306585 535927.982562704,139390.505453999 535922.573838389,139389.975453999 535919.377838389,139389.065423082 535910.988142787,139388.910423082 535907.996142787,139389.256202186 535895.946929482,139389.897202186 535890.096929482,139392.516075974 535877.044089153,139393.386075974 535874.095089153,139399.495783559 535859.37198736,139400.953783559 535856.70198736,139406.900793906 535847.485029425,139407.836793906 535846.244029425,139416.210843149 535836.886966555,139418.380843149 535834.836966555,139427.069812462 535827.77789636,139428.282449354 535827.062723795,139426.051808198 535825.55757826,139418.280774941 535819.536795955,139417.162774941 535818.546795955,139411.177513878 535812.614403045,139409.146513878 535810.361403045,139403.176776753 535802.672230565,139400.091205427 535810.16305141,139398.155617167 535814.471558711,139396.180617167 535818.521558711,139394.033365481 535822.60147794,139391.707365481 535826.70947794,139388.991944659 535831.139890635,139387.329944659 535833.651890635,139384.144194408 535838.104753743,139382.348194408 535840.430753743,139374.047542467 535849.526809658,139371.847542467 535851.571809658,139360.69611695 535860.137816064,139356.94611695 535862.494816064,139349.248784927 535866.725381087,139342.089784927 535870.130381087,139340.396090461 535870.828023817,139335.672157912 535874.720493871,139335.049995174 535875.273815283,139335.005800216 535875.323985896,139334.326249791 535876.553194682,139334.238154548 535876.729339594,139334.183755187 535876.859797612,139328.186511935 535893.418726482,139325.305023776 535900.288339493,139322.084023776 535907.010339493,139320.252874876 535910.583153757,139314.492874876 535921.117153757,139311.191451761 535926.587568066,139302.946140159 535939.020099926,139291.820459021 535964.529766174,139289.905363157 535969.185636576,139289.938432344 535969.530715635,139290.240432344 535974.828715635,139290.307297712 535981.960567098,139290.179297712 535985.310567098,139289.543408393 535992.601274487,139288.933408393 535997.065274487,139287.96379567 536002.604046235,139286.92279567 536007.469046235,139286.143478057 536010.74898812,139285.004478057 536015.10498812,139284.366950036 536017.394324958,139282.960950036 536022.150324958,139281.078410585 536027.708476865,139279.611410585 536031.539476865,139275.701425462 536040.099273923,139274.998425462 536041.413273923,139271.757242369 536046.897900362,139271.671203889 536047.030309693,139270.245880296 536050.154118467,139266.002269543 536058.140947471,139263.129272395 536062.840364862,139262.840581028 536063.678077464,139258.193605811 536080.684197504,139256.506257371 536086.057099241,139255.356257371 536089.289099241,139253.119457724 536094.859008386,139250.675457724 536100.304008386,139249.041831343 536103.711135421,139247.769831343 536106.201135421,139243.402934482 536113.655719233,139241.735934482 536116.158719233,139233.753605977 536125.716781793,139233.383126401 536129.39993291,139232.884126401 536132.76793291,139230.813455626 536142.361950041,139228.262455626 536151.298950041,139227.011345979 536155.174874632,139226.851289519 536155.958884527,139226.018301756 536159.579180725,139225.047552546 536163.366393004,139224.522159551 536166.552819283,139223.993843355 536169.143217853,139223.625986791 536171.615014223,139222.15973211 536178.94002488,139220.82573211 536184.22202488,139219.732210239 536188.108133427,139218.841210239 536190.976133427,139216.929413838 536196.389342743,139215.723413838 536199.428342743,139212.136823127 536207.154743435,139211.740680059 536207.894905485,139208.732925569 536216.192904714,139207.594144186 536219.139432547,139206.556147112 536221.665638259,139209.864361365 536222.972189994)),((139393.648507081 535668.974736443,139397.187012699 535662.377434254,139398.872012699 535659.858434254,139407.456267504 535649.256643269,139410.047267504 535646.593643269,139410.699960735 535646.038230011,139410.368589237 535645.800166734,139408.578589237 535644.268166734,139397.3959599 535632.354541231,139395.5549599 535629.905541231,139394.594734167 535628.386189625,139390.928598216 535636.814441846,139383.694768091 535654.435384807,139385.84169416 535657.576506395,139388.732034058 535661.495027351,139392.199486509 535666.626750626,139393.648507081 535668.974736443)),((139548.724566362 535611.506800266,139554.628778365 535611.137288574,139552.459746567 535610.579054857,139549.764858782 535609.652657427,139548.724566362 535611.506800266)),((139593.98450066 535612.829328195,139594.118510319 535612.850765761,139596.104127044 535613.235551013,139596.587685007 535612.311565728,139593.98450066 535612.829328195)),((139673.793292709 535540.214143275,139675.386311294 535539.763978944,139678.865311294 535539.132978944,139694.228840552 535537.95509534,139697.259840552 535538.03509534,139702.578710636 535538.674149893,139703.940626818 535536.15791517,139708.219930733 535529.188390852,139711.366930733 535524.639390852,139714.415105893 535520.539122747,139716.288105893 535518.191122747,139721.898840694 535511.915115248,139723.960840694 535509.854115248,139730.603961741 535503.95788024,139732.986961741 535502.08288024,139742.32994248 535495.806278369,139745.55794248 535493.973278369,139757.643371885 535488.463159874,139760.512371885 535487.451159874,139769.898169371 535484.812425618,139771.383169371 535484.497425618,139780.369942617 535483.153836792,139782.414942617 535482.973836792,139791.720962751 535482.734686659,139793.230962751 535482.789686659,139804.33595446 535484.027071477,139807.34095446 535484.591071477,139819.768277813 535488.052351736,139821.373277813 535488.652351737,139830.347113557 535492.696619516,139831.651113557 535493.390619516,139839.770416859 535498.399075464,139842.236416859 535500.146075465,139848.23313285 535504.870517295,139851.70613285 535507.905517294,139860.17101037 535516.607696199,139863.36701037 535520.475696199,139866.175448217 535524.094239862,139869.322448217 535528.415239862,139871.088962473 535530.948783811,139876.518962473 535539.088783811,139877.61079229 535540.773960122,139886.91079229 535555.557960122,139888.103132131 535557.519362678,139893.470132131 535566.660362678,139894.992049347 535569.380385515,139899.328049347 535577.522385515,139900.477386794 535579.771023682,139901.31516658 535581.480533089,139900.983503197 535562.558365808,139900.97647671 535560.423170544,139901.10447671 535548.728170544,139901.231410096 535545.110912013,139902.136410096 535529.843912013,139902.176129275 535529.218157315,139905.106129275 535485.921157315,139905.536580389 535481.504616269,139906.632580389 535472.903616269,139907.727569766 535466.521787328,139909.166569766 535459.871787328,139910.517916095 535454.570342114,139912.478916095 535447.903342114,139913.722873363 535444.05972708,139915.809873363 535438.15872708,139917.379333372 535434.099735655,139918.541333372 535431.335735655,139920.880565071 535426.301581819,139923.435565071 535421.296581819,139928.281284908 535413.127148888,139929.956284908 535410.672148888,139938.042764184 535400.756522259,139940.090764184 535398.642522259,139948.768873328 535390.970285527,139951.196873328 535389.137285526,139961.770241772 535382.461156606,139964.409241772 535381.088156606,139976.45795545 535376.097659227,139979.338955449 535375.188659227,139988.77191981 535372.871964344,139993.85991981 535371.966964344,140003.078198775 535370.910277303,140007.592198775 535370.674277303,140017.949911065 535370.849153224,140022.206911065 535371.216153224,140031.233391578 535372.551462914,140037.320391578 535373.834462914,140045.801435499 535376.14861572,140048.644435499 535377.10661572,140054.954143977 535379.555038384,140060.685143977 535382.082038384,140066.886939636 535385.166167283,140072.489939636 535388.283167283,140079.526078487 535392.725680129,140084.115078487 535395.992680129,140089.15466377 535399.91414691,140094.05166377 535404.07114691,140098.726512732 535408.516819305,140103.01981089 535402.9389708,140108.999803458 535396.075505027,140111.805803459 535393.224505026,140114.807696967 535390.339232673,140118.141696967 535387.308232673,140123.301512613 535383.022699546,140127.592512613 535379.771699546,140133.352921212 535375.815849286,140137.178921212 535373.442849286,140142.722507012 535370.322038166,140146.310507012 535368.498038166,140152.630459311 535365.644813416,140156.815459311 535363.983813416,140164.772803628 535361.330259624,140168.660803628 535360.271259624,140175.448108298 535358.756711754,140179.890108298 535357.979711754,140186.892449945 535357.092035099,140190.838930916 535356.779522799,140190.884425591 535356.224874951,140191.384904544 535347.063467311,140191.846641347 535331.808221288,140192.00941674 535310.471395717,140191.991024918 535301.212427353,140191.541104092 535284.786536347,140191.513874886 535283.098336958,140191.470874886 535274.271336958,140191.512545689 535272.093904653,140185.720426649 535279.58800745,140184.420426649 535280.97500745,140171.647989504 535291.857369263,140156.775783199 535299.627725036,140140.548240181 535303.897127438,140139.221240181 535304.091127438,140122.971661697 535304.685309063,140118.859796961 535304.388466569,140117.960082912 535304.382303265,140112.418874501 535305.549512423,140097.46578745 535307.158279406,140093.16578745 535307.187279406,140083.072252838 535306.573629867,140079.573252838 535306.122629867,140066.212696596 535303.140898521,140064.286696596 535302.521898521,140056.410017786 535299.491650564,140053.664017786 535298.253650564,140045.91041656 535293.998970293,140043.207364236 535294.944090043,140040.303364236 535295.718090043,140034.856746414 535296.954548187,140031.173746414 535297.647548187,140026.999015077 535298.311851479,140022.534015077 535298.893851479,140018.928973161 535299.275404514,140014.668973161 535299.622404514,140010.563970137 535299.843739094,140006.255970137 535299.957739094,139999.458235513 535299.829344348,139995.913235513 535299.601344348,139981.836229486 535297.337934244,139972.730229486 535294.967934244,139964.610449657 535292.353341535,139953.632449657 535288.115341535,139948.432359296 535285.878890735,139944.380359296 535283.951890735,139936.727452829 535279.749709235,139932.54725805 535277.126685853,139926.439384794 535273.709175962,139921.007929164 535270.359035674,139918.405929164 535268.597035674,139909.748922084 535261.754373676,139907.549922084 535259.736373676,139902.684028655 535254.839806614,139898.637028655 535250.373806614,139896.691574038 535248.139807316,139895.458387161 535246.665927017,139891.433330773 535242.638342725,139889.65545913 535240.797588631,139886.50245913 535237.419588631,139883.656864185 535233.923766068,139882.478064239 535242.340513731,139880.651880309 535251.332766992,139879.721880309 535254.806766992,139876.779680676 535263.586783247,139876.060577869 535265.360796302,139874.79020805 535269.248934921,139871.822763689 535276.889159193,139870.931763689 535278.857159193,139864.05623411 535290.925295228,139862.33123411 535293.390295228,139858.115934725 535298.859485986,139855.753934725 535301.648485986,139850.866768772 535306.889426252,139846.815768772 535310.837426252,139838.591137687 535317.775172015,139835.105137687 535320.311172015,139824.424394308 535326.794235263,139823.089394308 535327.459235263,139813.208246239 535331.530645088,139810.500246239 535332.426645088,139803.02729072 535334.477546416,139801.54729072 535334.802546416,139792.31873936 535336.233801626,139790.32573936 535336.416801626,139772.739552331 535335.485350733,139772.678742189 535336.301651896,139771.875901206 535342.997515306,139770.759901206 535349.728515306,139769.418622067 535356.093631949,139768.022622067 535361.536631949,139766.860140665 535365.591636888,139763.692140665 535375.573636888,139761.184890728 535382.329329996,139759.594890728 535386.054329996,139756.15272478 535393.079269016,139753.88572478 535397.153269016,139748.450918814 535405.548751581,139746.657918814 535407.950751581,139742.330206559 535413.229145,139738.751206559 535417.210145,139734.43001005 535421.6352482,139722.41001005 535432.9692482,139716.367341855 535437.98096576,139714.053470745 535440.271929189,139711.191470745 535442.955929189,139707.861562168 535445.898268999,139705.549562168 535447.822268999,139696.847652128 535454.068662605,139693.759652128 535455.966662605,139685.055743243 535460.55858256,139677.244733764 535464.044948981,139679.161996055 535473.022424303,139679.281976452 535474.222588568,139680.352720534 535480.998379059,139680.927760864 535485.527580863,139681.460760864 535491.071580863,139681.792723809 535499.605092802,139681.765723809 535501.098092802,139681.041311863 535510.228084524,139680.578311863 535513.507084524,139679.086384778 535521.168254061,139677.593384778 535527.155254061,139676.370083997 535531.49952852,139675.069518067 535535.63677325,139674.076936689 535539.365414627,139673.793292709 535540.214143275)),((140348.349868583 535048.405807409,140349.040549268 535048.491083095,140353.494549268 535049.151083095,140353.949912521 535049.230533165,140353.367156934 535038.462150023,140353.432156934 535035.425150023,140354.487097864 535025.675012826,140353.046982524 535024.921582566,140352.820628165 535026.219392737,140352.568155198 535027.591439053,140349.704155198 535042.381439053,140349.089465707 535045.253294723,140348.349868583 535048.405807409)),((140470.06810426 535126.311451101,140472.345219058 535130.026794286,140473.794219058 535132.659794286,140476.807853807 535138.779309401,140477.871853807 535141.213309401,140477.93607927 535141.386279119,140478.88796169 535137.252852428,140479.90027765 535133.341840454,140482.491412105 535124.338178506,140481.861863133 535122.666316784,140481.426968742 535122.285601366,140481.294236525 535122.340592859,140481.273605186 535122.290795276,140479.748404943 535122.995617904,140476.265404943 535124.407617904,140470.06810426 535126.311451101))) #51 Polygon - gid: 2551 POLYGON((167603.370985 536610.679985,167627.312985 536610.283985,167671.695985 536624.130985,167685.005985 536588.552985,167710.046985 536546.816985,167709.176985 536506.215985,167690.358985 536469.760985,167672.327985 536431.817985,167630.130985 536412.716985,167595.078985 536402.756985,167542.703985 536389.811985,167506.924985 536432.458985,167469.539985 536465.608985,167446.234985 536432.913985,167420.629985 536414.438985,167396.383985 536428.615985,167396.997985 536430.166985,167397.062985 536435.715985,167395.979985 536476.018985,167395.650985 536485.335985,167393.612985 536527.161985,167393.405985 536534.767985,167393.625985 536539.256985,167394.056985 536541.856985,167395.254985 536546.202985,167396.337985 536548.977985,167398.387985 536552.990985,167400.219985 536555.799985,167403.048985 536559.308985,167405.697985 536561.920985,167409.163985 536564.807985,167412.098985 536566.934985,167418.852985 536571.198985,167422.776985 536573.403985,167443.578985 536583.279985,167447.746985 536585.454985,167451.828985 536587.817985,167455.912985 536590.371985,167464.088985 536595.878985,167471.759985 536601.610985,167474.551985 536604.070985,167511.324985 536596.279985,167534.715985 536616.533985,167548.609985 536632.724985,167575.399985 536624.196985,167603.370985 536610.679985)) POLYGON((167518.99487489 536521.948060763,167523.287951439 536522.240215727,167536.666844921 536525.691103894,167549.185676584 536531.537664739,167560.419577491 536539.581475424,167566.761745414 536545.073086262,167570.737869345 536543.151622347,167586.028245886 536537.712667658,167602.130656777 536535.690241795,167626.072656777 536535.294241795,167629.371484375 536535.503008799,167634.600578813 536526.787642581,167634.56625147 536525.185660445,167623.714310522 536504.162836168,167622.618760385 536501.952008114,167616.376875282 536488.817082348,167604.275130745 536483.339076272,167575.825658869 536475.255179779,167570.105583803 536473.841406572,167564.382352842 536480.663247059,167556.684223921 536488.575098034,167519.299223921 536521.725098034,167518.99487489 536521.948060763)) #52 Polygon - gid: 2552 POLYGON((139328.097985 537673.993985,139333.694985 537673.778985,139339.685985 537674.116985,139343.484985 537674.560985,139347.201985 537675.198985,139349.266985 537662.315985,139350.795985 537650.307985,139350.815985 537648.813985,139350.170985 537642.977985,139349.497985 537639.338985,139348.573985 537636.478985,139347.401985 537633.734985,139336.285985 537613.547985,139333.452985 537607.471985,139331.129985 537601.716985,139328.904985 537595.513985,139326.508985 537587.806985,139319.008985 537559.965985,139317.097985 537554.004985,139314.973985 537548.226985,139312.575985 537542.468985,139306.136985 537528.279985,139299.926985 537514.031985,139288.894985 537489.864985,139279.105985 537467.759985,139274.759985 537456.114985,139264.851985 537426.033985,139261.266985 537416.840985,139258.190985 537410.222985,139246.959985 537387.429985,139229.076985 537347.488985,139217.864985 537323.218985,139213.134985 537312.367985,139200.100985 537278.784985,139189.030985 537249.549985,139177.539985 537217.909985,139166.856985 537192.155985,139162.415985 537180.965985,139158.622985 537170.454985,139150.636985 537146.582985,139135.766985 537108.920985,139128.573985 537089.138985,139126.052985 537082.845985,139123.397985 537077.227985,139120.597985 537072.327985,139117.710985 537068.104985,139114.766985 537064.522985,139112.716985 537062.323985,139107.519985 537058.085985,139104.012985 537055.863985,139101.294985 537054.558985,139100.275085 537053.707685,139098.476985 537053.526985,139095.233985 537052.734985,139092.248985 537052.457985,139089.268985 537052.711985,139087.784985 537053.032985,139084.678985 537054.199985,139080.094985 537057.047985,139075.290985 537060.908985,139069.415985 537066.744985,139061.822985 537075.205985,139058.488985 537078.691985,139054.032985 537082.720985,139050.724985 537085.113985,139048.133985 537086.645985,139045.410985 537087.957985,139042.557985 537088.968985,139040.380985 537089.363985,139037.334985 537089.294985,139035.878985 537088.972985,139033.462985 537087.869985,139030.014985 537085.492985,139025.487985 537081.543985,139018.084985 537074.336985,139013.673985 537069.604985,139009.409985 537064.385985,139006.208985 537059.858985,139002.414985 537053.912985,138998.748985 537047.430985,138995.999985 537041.968985,138993.942985 537037.449985,138990.339985 537028.148985,138987.242985 537017.910985,138981.534985 536995.496985,138978.988985 536986.537985,138977.585985 536982.260985,138976.022985 536978.202985,138973.066985 536972.030985,138970.402985 536968.255985,138968.487985 536965.910985,138966.359985 536963.834985,138963.995985 536962.186985,138961.235985 536960.885985,138958.980985 536960.276985,138955.951985 536960.106985,138952.749985 536960.533985,138949.931985 536961.489985,138935.372985 536968.382985,138907.537985 536979.752985,138901.926985 536982.393985,138896.463985 536985.384985,138891.293985 536988.728985,138886.976985 536992.219985,138884.882985 536994.338985,138883.500985 536996.130985,138882.011985 536998.803985,138881.564985 537000.190985,138881.413985 537001.324985,138881.475985 537002.858985,138881.775985 537004.391985,138882.629985 537006.611985,138883.396985 537007.887985,138887.677985 537013.078985,138890.845985 537016.283985,138895.056985 537020.219985,138905.804985 537029.443985,138913.316985 537036.186985,138920.975985 537043.717985,138932.473985 537056.309985,138954.679985 537081.634985,138960.113985 537088.091985,138965.986985 537095.578985,138977.422985 537111.070985,138982.004985 537117.556985,138986.599985 537124.630985,138993.679985 537137.096985,139005.600985 537160.149985,139020.608985 537187.869985,139033.486985 537210.770985,139044.059985 537228.558985,139053.006985 537244.088985,139060.092985 537255.519985,139080.707985 537286.417985,139090.120985 537300.972985,139103.078985 537322.123985,139116.233985 537344.359985,139119.222985 537349.562985,139122.383985 537355.881985,139125.129985 537362.380985,139130.126985 537375.644985,139131.858985 537379.337985,139134.566985 537383.961985,139137.705985 537388.053985,139140.085985 537390.525985,139142.627985 537392.724985,139146.633985 537395.533985,139157.818985 537402.034985,139160.679985 537403.920985,139163.066985 537405.758985,139166.396985 537408.850985,139168.416985 537411.072985,139169.280985 537412.268985,139170.702985 537414.781985,139171.293985 537416.228985,139171.679985 537417.695985,139171.789985 537419.141985,139171.407985 537421.760985,139170.997985 537423.212985,139169.908985 537426.097985,139168.082985 537430.080985,139164.605985 537435.318985,139160.534985 537442.262985,139157.693985 537447.550985,139155.404985 537452.605985,139153.763985 537456.816985,139152.517985 537461.396985,139151.670985 537466.320985,139151.198985 537471.522985,139151.025985 537479.913985,139151.322985 537488.108985,139151.969985 537496.769985,139153.000985 537505.180985,139154.541985 537513.906985,139156.515985 537522.716985,139158.932985 537531.649985,139161.825985 537540.914985,139164.822985 537549.648985,139168.521985 537559.663985,139171.990985 537568.494985,139174.560985 537574.436985,139178.737985 537582.989985,139191.871985 537607.370985,139200.694985 537624.740985,139204.472985 537633.189985,139210.692985 537649.126985,139214.176985 537657.443985,139221.014985 537672.431985,139229.336985 537691.644985,139232.848985 537698.786985,139235.354985 537703.365985,139240.767985 537712.073985,139247.162985 537721.413985,139250.052985 537724.904985,139254.219985 537729.231985,139256.988985 537731.610985,139259.413985 537733.383985,139264.102985 537736.538985,139269.901985 537740.072985,139273.000985 537741.589985,139275.922985 537742.341985,139277.410985 537742.524985,139279.635985 537727.507985,139281.333985 537721.724985,139283.443985 537716.470985,139285.539985 537712.482985,139287.579985 537709.020985,139295.083985 537697.805985,139298.702985 537692.885985,139303.840985 537687.353985,139308.168985 537683.551985,139313.904985 537679.507985,139316.481985 537677.948985,139319.149985 537676.579985,139323.819985 537674.867985,139328.097985 537673.993985)) POLYGON( EMPTY) #53 Polygon - gid: 2553 POLYGON((159078.115985 538635.625985,159073.785985 538635.186985,159069.280985 538635.348985,159064.698985 538635.981985,159060.140985 538636.953985,159053.718985 538638.713985,159049.352985 538640.261985,159045.098985 538642.416985,159041.557985 538645.223985,159040.211985 538646.934985,159038.272985 538650.769985,159036.869985 538655.096985,159035.937985 538659.695985,159035.410985 538664.343985,159035.238985 538667.833985,159035.436985 538672.256985,159036.130985 538676.707985,159037.159985 538681.153985,159040.569985 538692.905985,159043.786985 538701.322985,159048.117985 538711.817985,159054.692985 538726.630985,159055.753985 538730.994985,159058.420985 538739.629985,159061.765985 538747.994985,159063.932985 538752.384985,159068.550985 538760.122985,159075.501985 538770.881985,159083.125985 538782.032985,159087.563985 538789.479985,159095.628985 538805.198985,159112.434985 538839.730985,159114.544985 538843.709985,159116.844985 538847.550985,159120.775985 538852.888985,159123.785985 538856.247985,159126.988985 538859.454985,159136.194985 538868.100985,159140.257985 538871.235985,159142.189985 538871.273985,159143.808985 538868.428985,159144.961985 538864.099985,159145.681985 538858.985985,159146.004985 538853.787985,159146.011985 538850.486985,159145.553985 538846.088985,159144.577985 538841.705985,159142.124985 538832.929985,159141.174985 538828.511985,159140.509985 538823.611985,159139.715985 538814.637985,159139.301985 538806.178985,159139.157985 538797.168985,159139.285985 538792.663985,159139.602985 538788.179985,159140.747985 538778.977985,159143.071985 538765.663985,159144.541985 538759.111985,159147.121985 538750.372985,159148.229985 538746.003985,159148.933985 538741.616985,159149.054985 538739.850985,159148.987985 538735.412985,159148.521985 538730.945985,159146.822985 538722.006985,159144.223985 538711.122985,159142.868985 538706.798985,159141.212985 538702.601985,159140.035985 538700.141985,159137.864985 538696.224985,159135.480985 538692.403985,159132.936985 538688.667985,159128.117985 538682.115985,159125.304985 538678.613985,159114.153985 538665.988985,159111.392985 538662.402985,159106.122985 538654.963985,159103.346985 538651.417985,159099.169985 538647.188985,159095.641985 538644.364985,159091.850985 538641.679985,159087.859985 538639.280985,159083.733985 538637.315985,159079.537985 538635.934985,159078.115985 538635.625985)) POLYGON( EMPTY) #54 Polygon - gid: 2554 POLYGON((159293.559985 538980.522985,159275.390985 538925.668985,159258.421985 538914.962985,159239.576985 538917.108985,159216.488985 538918.359985,159211.120985 538917.908985,159109.160985 538909.360985,159070.236985 538904.177985,158994.276985 538919.645985,158907.657985 538925.081985,158879.874985 538905.635985,158856.684985 538889.787985,158848.906985 538928.927985,158849.561985 538935.309985,158856.845985 538954.454985,158919.290985 538985.661985,158941.977985 538986.370985,158963.373985 538974.307985,159015.169985 538975.497985,159047.536985 538978.284985,159103.429985 539036.779985,159124.581985 539056.686985,159201.858985 539071.122985,159248.370985 539062.766985,159298.256985 538995.795985,159293.559985 538980.522985)) POLYGON((159178.260710927 538990.41719613,159202.122936517 538994.874862559,159205.932369085 538994.190488235,159206.951084137 538992.82288278,159204.848542186 538992.646234788,159178.260710927 538990.41719613)) #55 Polygon - gid: 2555 POLYGON((157894.850985 539376.542985,157892.525985 539323.248985,157914.055985 539274.176985,157921.162985 539246.664985,157923.305985 539204.844985,157931.860985 539190.504985,157926.415985 539170.883985,157884.235985 539120.656985,157872.168985 539101.762985,157863.337985 539018.735985,157870.107985 538987.808985,157855.347985 538912.078985,157845.930985 538889.356985,157836.700985 538868.127985,157832.085985 538857.051985,157829.933985 538849.014985,157827.652985 538828.317985,157824.558985 538808.198985,157824.169985 538803.715985,157824.279985 538799.462985,157824.905985 538795.026985,157826.159985 538791.593985,157828.431985 538787.680985,157830.534985 538785.180985,157833.976985 538782.242985,157836.893985 538780.476985,157841.164985 538778.627985,157845.477985 538777.369985,157850.291985 538776.294985,157855.209985 538775.547985,157860.070985 538775.108985,157864.887985 538774.919985,157869.668985 538774.988985,157874.460985 538775.379985,157879.234985 538776.127985,157883.962985 538777.336985,157888.619985 538779.057985,157893.193985 538781.401985,157897.645985 538784.384985,157901.081985 538787.293985,157905.846985 538792.271985,157913.197985 538801.228985,157916.806985 538805.366985,157919.960985 538808.577985,157924.360985 538812.466985,157928.241985 538815.462985,157932.185985 538818.104985,157936.120985 538820.297985,157940.258985 538822.065985,157944.049985 538823.115985,157948.470985 538823.935985,157951.507985 538824.056985,157957.445985 538823.609985,157962.089985 538822.710985,157966.395985 538821.399985,157967.516985 538821.197985,157978.098985 538820.149985,157983.664985 538819.095985,157987.936985 538817.671985,157993.610985 538815.038985,158009.406985 538806.036985,158013.444985 538804.049985,158021.216985 538800.892985,158025.239985 538799.556985,158029.581985 538798.376985,158033.885985 538797.537985,158038.348985 538796.937985,158047.069985 538796.476985,158055.493985 538796.531985,158059.440985 538796.795985,158063.897985 538797.395985,158067.999985 538798.407985,158072.465985 538799.848985,158076.903985 538801.904985,158090.543985 538808.987985,158095.284985 538811.078985,158100.145985 538812.821985,158105.063985 538814.186985,158109.978985 538815.246985,158114.795985 538816.011985,158119.457985 538816.484985,158124.006985 538816.661985,158128.505985 538816.527985,158146.349985 538815.322985,158150.970985 538815.210985,158155.747985 538815.325985,158160.700985 538815.703985,158188.319985 538818.681985,158198.973985 538820.038985,158224.467985 538824.125985,158249.631985 538827.579985,158282.513985 538833.577985,158297.911985 538835.739985,158309.261985 538836.962985,158322.577985 538838.114985,158350.431985 538840.147985,158373.537985 538841.500985,158393.243985 538842.897985,158403.919985 538843.057985,158417.449985 538842.716985,158446.769985 538842.727985,158454.328985 538842.431985,158477.319985 538840.930985,158485.069985 538839.962985,158487.523985 538839.435985,158491.846985 538838.176985,158493.370985 538837.623985,158497.890985 538835.417985,158501.542985 538832.151985,158503.237985 538827.961985,158503.543985 538826.486985,158503.986985 538821.992985,158504.118985 538819.313985,158504.107985 538811.859985,158503.701985 538805.305985,158502.893985 538800.236985,158501.004985 538795.729985,158497.499985 538792.873985,158495.013985 538791.985985,158490.503985 538790.995985,158485.352985 538790.283985,158475.110985 538789.285985,158460.091985 538788.446985,158443.718985 538788.015985,158419.535985 538788.139985,158370.102985 538785.725985,158363.523985 538785.576985,158341.759985 538785.543985,158328.013985 538784.975985,158315.142985 538784.111985,158309.210985 538783.546985,158303.783985 538782.812985,158298.653985 538781.775985,158293.695985 538780.383985,158288.891985 538778.574985,158284.493985 538776.409985,158280.587985 538773.824985,158277.161985 538770.813985,158274.219985 538767.365985,158271.819985 538763.557985,158269.485985 538759.344985,158267.810985 538755.165985,158266.174985 538750.044985,158265.046985 538745.351985,158264.334985 538740.709985,158264.009985 538736.128985,158263.951985 538731.628985,158264.820985 538714.602985,158264.696985 538711.176985,158264.065985 538706.727985,158263.152985 538703.633985,158261.153985 538699.601985,158258.338985 538696.437985,158254.234985 538693.033985,158248.922985 538690.248985,158244.763985 538688.523985,158238.701985 538686.365985,158219.956985 538680.881985,158214.905985 538679.588985,158209.880985 538678.512985,158204.789985 538677.634985,158194.991985 538676.496985,158190.391985 538676.269985,158185.894985 538676.461985,158181.499985 538677.416985,158177.267985 538678.902985,158173.525985 538681.123985,158170.075985 538684.071985,158167.147985 538687.454985,158155.693985 538703.261985,158152.504985 538707.158985,158149.100985 538710.705985,158145.361985 538713.823985,158141.173985 538716.406985,158136.519985 538718.383985,158131.652985 538719.748985,158126.839985 538720.697985,158117.628985 538722.144985,158113.056985 538722.697985,158108.422985 538723.049985,158103.729985 538723.101985,158099.001985 538722.677985,158094.281985 538721.555985,158089.580985 538719.729985,158084.972985 538717.302985,158080.509985 538714.483985,158076.807985 538711.924985,158064.225985 538702.839985,158059.555985 538699.062985,158055.796985 538695.251985,158052.555985 538690.995985,158049.871985 538686.466985,158047.646985 538681.856985,158045.714985 538677.292985,158042.545985 538668.600985,158041.272985 538664.284985,158040.567985 538660.514985,158040.181985 538656.045985,158040.422985 538653.092985,158041.614985 538648.744985,158042.988985 538646.338985,158045.975985 538642.906985,158049.107985 538640.411985,158053.137985 538637.772985,158057.450985 538635.399985,158069.991985 538628.978985,158073.367985 538626.988985,158076.908985 538624.277985,158078.558985 538622.151985,158080.301985 538617.970985,158080.363985 538614.351985,158079.497985 538609.782985,158078.086985 538605.522985,158076.318985 538601.292985,158070.542985 538589.426985,158068.926985 538585.236985,158067.994985 538581.148985,158067.361985 538576.584985,158067.374985 538571.859985,158067.748985 538567.085985,158068.393985 538562.314985,158070.227985 538552.962985,158072.642985 538543.813985,158074.086985 538539.333985,158078.921985 538526.522985,158080.207985 538522.633985,158081.174985 538518.267985,158081.197985 538515.026985,158080.286985 538510.603985,158078.490985 538507.288985,158075.655985 538503.563985,158072.129985 538500.224985,158068.272985 538497.122985,158064.230985 538494.194985,158048.184985 538483.456985,158044.526985 538480.501985,158041.153985 538477.160985,158038.257985 538473.456985,158035.905985 538469.491985,158034.038985 538465.378985,158032.606985 538461.112985,158031.773985 538456.880985,158031.263985 538452.412985,158031.321985 538448.226985,158031.779985 538443.737985,158032.454985 538439.607985,158033.482985 538435.224985,158034.695985 538431.234985,158036.329985 538427.040985,158038.173985 538423.260985,158040.536985 538419.428985,158042.856985 538416.351985,158048.788985 538409.566985,158051.573985 538406.967985,158055.068985 538404.117985,158061.460985 538399.268985,158063.495985 538397.453985,158066.529985 538394.137985,158067.820985 538392.177985,158069.642985 538388.050985,158070.119985 538385.776985,158070.207985 538381.247985,158069.715985 538378.650985,158068.212985 538374.373985,158066.928985 538371.761985,158061.014985 538361.608985,158059.800985 538358.879985,158058.368985 538354.611985,158057.626985 538350.721985,158057.157985 538346.234985,158056.977985 538341.777985,158057.089985 538332.997985,158057.300985 538328.502985,158057.558985 538324.295985,158058.435985 538316.173985,158059.366985 538311.783985,158060.130985 538309.651985,158062.391985 538305.757985,158063.681985 538304.510985,158067.577985 538302.144985,158069.820985 538301.225985,158074.188985 538300.056985,158076.684985 538299.637985,158081.181985 538299.322985,158083.170985 538299.331985,158087.634985 538299.892985,158089.280985 538300.425985,158093.269985 538302.556985,158095.089985 538304.054985,158098.111985 538307.423985,158100.076985 538310.360985,158102.302985 538314.444985,158106.037985 538322.825985,158109.425985 538331.312985,158113.039985 538339.731985,158115.042985 538343.775985,158117.384985 538347.618985,158119.861985 538350.533985,158123.195985 538353.524985,158126.449985 538355.133985,158130.893985 538356.553985,158135.882985 538357.249985,158141.180985 538357.583985,158152.139985 538357.780985,158168.051985 538357.678985,158188.401985 538357.183985,158202.609985 538356.222985,158207.082985 538355.729985,158210.973985 538354.835985,158215.136985 538353.233985,158217.729985 538351.307985,158220.493985 538347.735985,158221.433985 538344.432985,158221.372985 538339.617985,158219.946985 538335.383985,158217.662985 538330.880985,158214.641985 538326.800985,158211.346985 538323.025985,158207.875985 538319.480985,158200.767985 538312.736985,158193.677985 538306.380985,158190.103985 538303.374985,158186.291985 538300.525985,158182.249985 538297.930985,158166.312985 538289.347985,158151.859985 538281.067985,158148.211985 538277.990985,158145.853985 538274.126985,158143.951985 538269.908985,158142.731985 538265.633985,158142.984985 538262.325985,158145.929985 538254.323985,158147.844985 538250.241985,158155.192985 538236.687985,158156.224985 538234.422985,158157.763985 538230.195985,158158.398985 538227.494985,158158.947985 538223.020985,158158.877985 538219.108985,158158.464985 538214.348985,158157.713985 538209.333985,158156.661985 538204.204985,158155.368985 538199.075985,158152.362985 538189.255985,158144.650985 538168.703985,158142.349985 538161.187985,158141.388985 538156.791985,158140.973985 538153.813985,158140.468985 538146.374985,158140.397985 538134.390985,158140.686985 538124.819985,158141.168985 538120.349985,158141.665985 538118.248985,158143.141985 538113.987985,158143.956985 538112.177985,158146.935985 538107.017985,158150.157985 538102.798985,158153.495985 538099.192985,158156.280985 538095.660985,158156.827985 538094.007985,158157.212985 538089.323985,158155.053985 538085.353985,158154.319985 538084.377985,158151.243985 538081.080985,158149.720985 538079.744985,158146.073985 538077.099985,158143.919985 538075.876985,158139.789985 538074.073985,158137.153985 538073.271985,158132.717985 538072.477985,158129.626985 538072.391985,158125.124985 538072.754985,158121.831985 538073.284985,158117.451985 538074.342985,158114.286985 538075.324985,158110.105985 538076.993985,158106.980985 538078.619985,158103.162985 538081.015985,158099.949985 538083.412985,158087.029985 538094.229985,158083.349985 538096.801985,158081.179985 538097.975985,158076.918985 538099.391985,158075.075985 538099.453985,158070.640985 538098.406985,158068.071985 538096.893985,158064.644985 538093.890985,158062.142985 538090.949985,158059.592985 538087.217985,158057.747985 538083.957985,158044.570985 538058.204985,158041.020985 538049.863985,158035.247985 538034.982985,158032.494985 538030.015985,158030.781985 538028.331985,158026.737985 538025.714985,158021.573985 538025.298985,158016.216985 538026.502985,158012.235985 538028.622985,158011.213985 538029.459985,158008.190985 538032.821985,158007.233985 538034.176985,158004.100985 538039.870985,157996.432985 538057.069985,157989.897985 538069.852985,157982.231985 538086.803985,157980.959985 538091.121985,157980.237285 538096.385085,157980.018985 538098.246985,157981.218985 538102.537985,157982.150985 538106.968985,157982.792985 538111.477985,157983.105985 538116.000985,157983.049985 538120.473985,157982.818985 538123.211985,157982.150985 538127.670985,157981.161985 538132.109985,157979.900985 538136.476985,157977.381985 538143.277985,157975.445985 538147.335985,157973.268985 538151.299985,157970.931985 538155.180985,157966.403985 538162.108985,157960.987985 538169.299985,157944.405985 538190.387985,157938.918985 538197.853985,157933.800985 538205.258985,157925.858985 538217.287985,157921.028985 538224.884985,157915.684985 538233.737985,157911.252985 538241.570985,157904.469985 538254.211985,157889.954985 538283.213985,157872.365985 538317.704985,157869.421985 538324.117985,157865.994985 538332.439985,157850.146985 538373.508985,157848.054985 538378.057985,157843.903985 538386.079985,157839.265985 538393.818985,157836.681985 538397.474985,157835.511985 538398.919985,157832.386985 538402.141985,157825.693985 538408.250985,157822.657985 538411.557985,157816.062985 538420.021985,157813.484985 538423.769985,157811.194985 538427.638985,157809.201985 538431.900985,157807.927985 538436.127985,157807.156985 538440.551985,157806.141985 538449.623985,157805.406985 538454.090985,157803.584985 538462.511985,157801.351985 538471.241985,157798.925985 538478.573985,157797.268985 538482.902985,157795.271985 538486.997985,157792.758985 538490.567985,157789.944985 538493.109985,157785.739985 538495.510985,157781.509985 538496.489985,157779.126985 538496.112985,157774.783985 538493.943985,157771.498985 538490.729985,157770.302985 538487.250985,157769.943985 538482.564985,157769.120985 538478.016985,157765.407985 538467.734985,157763.532985 538463.466985,157761.262985 538459.640985,157758.444985 538456.507985,157757.260985 538455.596985,157753.480985 538453.635985,157749.173985 538452.289985,157739.939985 538450.302985,157735.492985 538449.094985,157720.063985 538444.009985,157707.829985 538438.930985,157703.698985 538436.982985,157699.789985 538434.765985,157696.234985 538432.162985,157694.135985 538430.282985,157690.829985 538426.887985,157687.852985 538423.152985,157685.503985 538419.230985,157684.078985 538415.272985,157683.931985 538412.866985,157684.996985 538408.546985,157687.004985 538404.139985,157691.766985 538394.860985,157694.075985 538390.973985,157696.564985 538387.200985,157700.504985 538381.882985,157706.366985 538375.007985,157709.523985 538371.780985,157715.421985 538366.520985,157718.953985 538363.583985,157722.623985 538360.832985,157726.452985 538358.449985,157731.239985 538356.344985,157735.523985 538355.147985,157739.996985 538354.347985,157744.569985 538353.900985,157749.150985 538353.760985,157754.339985 538353.933985,157758.737985 538354.662985,157771.845985 538358.438985,157776.724985 538359.145985,157781.252985 538359.339985,157785.861985 538359.295985,157790.447985 538358.943985,157794.906985 538358.210985,157799.135985 538357.025985,157803.133985 538355.158985,157806.933985 538352.553985,157810.391985 538349.443985,157813.628985 538345.736985,157816.180985 538342.092985,157818.466985 538338.181985,157820.491985 538334.084985,157822.264985 538329.878985,157823.791985 538325.644985,157825.241985 538320.266985,157826.059985 538315.842985,157829.628985 538291.410985,157832.528985 538267.630985,157832.704985 538263.149985,157832.440985 538258.726985,157831.456985 538252.638985,157830.382985 538248.145985,157828.976985 538243.756985,157827.203985 538239.587985,157825.032985 538235.753985,157821.223985 538230.814985,157817.992985 538227.513985,157814.450985 538224.503985,157810.696985 538221.866985,157806.826985 538219.683985,157805.027985 538218.891985,157800.815985 538217.618985,157796.373985 538216.812985,157787.242985 538215.661985,157782.774985 538214.843985,157774.650985 538213.190985,157770.281985 538212.022985,157766.222985 538210.266985,157761.186985 538207.260985,157757.325985 538204.628985,157753.690985 538201.737985,157750.453985 538198.594985,157747.787985 538195.204985,157746.441985 538192.257985,157745.667985 538187.829985,157745.010985 538176.371985,157744.896985 538167.227985,157744.610985 538162.735985,157743.513985 538157.837985,157741.963985 538153.529985,157740.076985 538149.198985,157737.848985 538145.063985,157735.278985 538141.346985,157732.362985 538138.266985,157731.013985 538137.365985,157726.813985 538136.259985,157722.014985 538135.977985,157717.325985 538135.483985,157701.969985 538133.163985,157697.707985 538131.947985,157693.949985 538130.011985,157692.656985 538129.033985,157689.531985 538125.960985,157686.756985 538122.299985,157684.322985 538118.262985,157682.220985 538114.058985,157679.890985 538108.330985,157678.970985 538103.997985,157678.572985 538099.470985,157678.128985 538090.325985,157676.777985 538069.713985,157674.658985 538041.742985,157674.212985 538032.747985,157674.225985 538028.257985,157674.653985 538020.461985,157675.673985 538011.499985,157676.808985 538005.013985,157679.061985 537996.303985,157687.726985 537967.493985,157691.624985 537951.552985,157693.043985 537946.610985,157695.798985 537938.016985,157698.944985 537929.570985,157700.764985 537925.475985,157702.499985 537922.122985,157704.831985 537918.255985,157707.394985 537914.526985,157716.260985 537902.940985,157719.273985 537899.377985,157722.469985 537896.284985,157725.906985 537893.933985,157699.757985 537858.216985,157696.717985 537861.534985,157693.117985 537864.316985,157689.466985 537866.704985,157685.256985 537868.294985,157680.818985 537869.271985,157676.120985 537869.814985,157671.133985 537870.090985,157655.686985 537870.508985,157650.862985 537870.058985,157646.963985 537869.269985,157642.838985 537867.507985,157639.159985 537865.479985,157635.448985 537862.933985,157631.255985 537859.617985,157620.465985 537850.340985,157617.253985 537847.942985,157613.306985 537845.716985,157610.491985 537844.634985,157606.031985 537843.942985,157603.608985 537843.964985,157599.159985 537844.692985,157596.682985 537845.448985,157592.534985 537847.253985,157590.327985 537848.622985,157586.982985 537851.671985,157585.725985 537853.299985,157583.691985 537857.346985,157583.184985 537859.128985,157582.840985 537863.647985,157583.066985 537865.460985,157584.506985 537869.751985,157585.586985 537871.656985,157588.477985 537875.120985,157590.700985 537877.039985,157594.509985 537879.411985,157598.223985 537881.289985,157602.400985 537882.962985,157606.757985 537884.423985,157614.839985 537886.561985,157621.994985 537888.022985,157628.701985 537889.090985,157633.094985 537890.106985,157635.078985 537890.731985,157639.232985 537892.495985,157641.014985 537893.504985,157644.631985 537896.194985,157646.430985 537897.874985,157649.393985 537901.271985,157651.034985 537903.602985,157653.254985 537907.525985,157654.555985 537910.486985,157655.953985 537914.769985,157656.789985 537918.485985,157657.337985 537922.945985,157657.634985 537927.445985,157657.729985 537931.973985,157657.414985 537943.723985,157656.551985 537953.906985,157655.576985 537960.555985,157653.309985 537971.679985,157650.554985 537983.222985,157646.076985 537999.896985,157644.766985 538005.718985,157644.011985 538010.155985,157643.252985 538016.621985,157642.710985 538026.241985,157642.686985 538033.156985,157643.281985 538046.170985,157648.640985 538127.079985,157649.926985 538144.736985,157650.397985 538149.211985,157651.502985 538157.833985,157653.322985 538169.315985,157655.151985 538178.166985,157656.832985 538184.178985,157658.907985 538190.036985,157661.365985 538195.831985,157664.119985 538201.663985,157672.816985 538218.797985,157675.695985 538224.841985,157688.117985 538254.313985,157690.185985 538259.777985,157691.983985 538265.088985,157695.235985 538275.605985,157696.570985 538280.841985,157697.331985 538286.018985,157697.398985 538291.073985,157696.925985 538296.088985,157695.991985 538301.369985,157694.545985 538306.988985,157692.577985 538312.661985,157690.141985 538318.220985,157686.480985 538324.864985,157683.185985 538329.860985,157679.585985 538334.674985,157675.687985 538339.434985,157671.404985 538344.219985,157648.215985 538367.966985,157626.002985 538389.847985,157620.155985 538396.224985,157616.230985 538401.133985,157612.753985 538406.141985,157609.722985 538411.230985,157607.082985 538416.385985,157604.866985 538421.568985,157603.364985 538425.810985,157601.886985 538431.022985,157600.749985 538436.136985,157600.010985 538441.116985,157599.729985 538445.850985,157600.011985 538450.412985,157600.713985 538454.693985,157602.157985 538458.998985,157604.116985 538462.578985,157607.135985 538465.879985,157610.622985 538468.799985,157614.677985 538471.377985,157619.375985 538473.843985,157624.328985 538476.070985,157629.351985 538477.911985,157634.398985 538479.357985,157649.427985 538482.622985,157654.405985 538483.448985,157659.287985 538484.000985,157664.051985 538484.198985,157668.653985 538483.904985,157673.141985 538483.278985,157681.535985 538481.385985,157686.075985 538480.892985,157689.165985 538481.106985,157693.343985 538482.731985,157696.278985 538484.445985,157699.623985 538487.455985,157702.733985 538490.853985,157705.956985 538494.813985,157709.169985 538499.121985,157712.204985 538503.661985,157714.931985 538508.386985,157717.580985 538514.358985,157718.997985 538518.630985,157720.436985 538524.371985,157721.422985 538530.422985,157721.923985 538536.618985,157722.084985 538543.809985,157721.267985 538570.228985,157721.565985 538588.334985,157721.925985 538592.820985,157722.989985 538601.368985,157724.124985 538608.022985,157725.099985 538612.415985,157728.908985 538626.314985,157734.432985 538644.392985,157736.458985 538650.344985,157751.780985 538692.488985,157755.982985 538704.913985,157759.725985 538717.638985,157761.686985 538725.851985,157762.870985 538732.135985,157763.517985 538736.589985,157764.164985 538743.030985,157764.533985 538749.625985,157764.635985 538758.218985,157763.571985 538781.415985,157763.560985 538787.517985,157763.985985 538795.140985,157765.090985 538805.619985,157767.118985 538817.780985,157771.069985 538836.646985,157772.226985 538842.835985,157774.950985 538861.298985,157776.209985 538868.595985,157777.203985 538872.984985,157778.685985 538878.475985,157785.242985 538900.066985,157787.862985 538909.639985,157789.220985 538918.429985,157790.549985 538939.199985,157791.472985 538968.735985,157785.934985 539003.809985,157781.319985 539027.807985,157779.473985 539056.420985,157781.391985 539100.007985,157797.747985 539180.876985,157803.491985 539200.448985,157827.922985 539240.544985,157833.664985 539260.134985,157826.269985 539283.508985,157788.481985 539323.838985,157766.071985 539330.904985,157748.957985 539338.548985,157724.435985 539343.146985,157719.837985 539350.809985,157723.668985 539360.005985,157755.088985 539363.071985,157784.668985 539359.430985,157814.248985 539355.790985,157845.111985 539361.041985,157836.673985 539450.713985,157848.437985 539555.994985,157862.922985 539563.816985,157877.311985 539544.437985,157890.813985 539516.196985,157928.073985 539487.990985,157945.996985 539481.522985,157939.848985 539455.276985,157917.797985 539437.388985,157895.036985 539412.848985,157894.850985 539376.542985)) POLYGON((157796.315971774 538569.836655627,157796.287068268 538570.771296678,157796.51655414 538584.714488642,157796.554360558 538585.185598617,157797.206645716 538590.425949682,157797.745244705 538593.583515912,157797.919481214 538594.368563076,157800.953785266 538605.440705901,157805.813578304 538621.345003246,157807.209346082 538625.445501674,157822.267151913 538666.862821146,157822.828057742 538668.461636939,157827.030057742 538680.886636939,157827.934857368 538683.749673937,157831.677857368 538696.474673937,157832.675381246 538700.221017627,157833.391842316 538703.221677889,157833.946541803 538703.097809599,157839.029337825 538702.145455139,157843.947337825 538701.398455139,157848.464141048 538700.851977146,157853.325141048 538700.412977146,157857.130544557 538700.166648434,157861.947544557 538699.977648434,157865.97028183 538699.927794516,157870.75128183 538699.996794516,157875.768289503 538700.237406525,157880.560289503 538700.628406525,157886.070498612 538701.283971654,157890.844498612 538702.031971655,157897.815434141 538703.465980419,157902.543434141 538704.674980419,157909.960878759 538706.987077252,157914.617878759 538708.708077252,157922.824771831 538712.311954722,157927.398771831 538714.655954722,157934.941721853 538719.095272138,157939.393721853 538722.078272138,157946.107333833 538727.144285587,157949.543333833 538730.053285587,157955.261447511 538735.432767872,157960.026447511 538740.410767872,157963.822197432 538744.691792236,157964.38101881 538745.372701376,157972.27211218 538740.875637403,157976.293272272 538738.742988021,157980.331272272 538736.755988021,157985.219584274 538734.563822681,157990.250173409 538732.520388571,157988.035045636 538729.232726279,157985.351045636 538724.703726279,157982.327645477 538719.067018718,157980.102645477 538714.457018718,157978.580290662 538711.09380653,157976.648290662 538706.52980653,157975.252041945 538702.982937432,157972.083041945 538694.290937432,157970.609783042 538689.818497764,157969.336783042 538685.502497764,157967.550938196 538678.071203302,157966.845938196 538674.301203302,157965.846189067 538666.968915013,157965.460189067 538662.499915014,157965.430513151 538649.945373854,157965.671513151 538646.992373853,157968.091866643 538633.263478771,157969.283866643 538628.915478771,157976.48675695 538611.552056761,157977.86075695 538609.146056761,157986.415224019 538597.10069128,157989.402224019 538593.66869128,157993.472939651 538589.771346564,157993.073094374 538586.888417902,157992.362268865 538576.378636575,157992.375268865 538571.653636575,157992.604080307 538566.002356522,157992.978080307 538561.228356522,157993.425111595 538557.038007983,157994.070111595 538552.267007984,157994.795861715 538547.881820104,157996.629861715 538538.529820104,157996.70088911 538538.220715465,157991.747339704 538533.78715219,157988.374339704 538530.44615219,157982.069573379 538523.356572488,157979.173573379 538519.652572488,157973.753039013 538511.720700753,157971.401039013 538507.755700753,157967.612586264 538500.492173534,157965.745586264 538496.379173534,157962.93789653 538489.246017041,157961.50589653 538484.980017041,157959.018966831 538475.597583095,157958.185966831 538471.365583095,157957.257852642 538465.386631263,157956.747852642 538460.918631263,157956.271183239 538451.373906524,157956.329183239 538447.187906524,157956.709321548 538440.614465539,157957.167321548 538436.125465539,157957.762055759 538431.640623683,157958.437055759 538427.510623683,157959.436480734 538422.482038756,157960.464480734 538418.099038756,157961.725695513 538413.410049625,157962.938695513 538409.420049625,157964.812534203 538404.008099305,157966.446534203 538399.814099305,157968.923037128 538394.157807255,157970.767037128 538390.377807255,157974.335673585 538383.895136913,157976.698673585 538380.063136913,157980.651617094 538374.276546409,157982.971617094 538371.199546409,157984.778589215 538368.975203492,157984.697241855 538368.664538577,157983.955241855 538364.774538577,157983.033357126 538358.518822859,157982.564357126 538354.031822858,157982.219073597 538349.261461117,157982.039073597 538344.804461117,157981.984086341 538340.821343012,157982.096086341 538332.041343012,157982.172478513 538329.481278912,157982.383478513 538324.986278912,157982.441623023 538323.912132756,157982.699623023 538319.705132756,157982.992422962 538316.244412123,157983.869422962 538308.122412123,157985.067706085 538300.61456184,157985.998706085 538296.22456184,157988.763354436 538286.483246844,157989.527354436 538284.351246844,157995.271580689 538271.99222302,157997.532580689 538268.09822302,158010.265327737 538251.833856796,158011.555327737 538250.586856796,158024.751755253 538240.406092739,158028.647755253 538238.040092738,158039.143177393 538232.744252177,158041.386177393 538231.825252177,158050.431255267 538228.775737375,158054.799255267 538227.606737375,158061.772571758 538226.09190755,158064.268571758 538225.67290755,158071.444323691 538224.821305917,158075.941323691 538224.506305917,158077.197262624 538224.465217282,158078.030556455 538222.470137458,158079.945556455 538218.388137458,158081.751151683 538214.813369151,158081.327734832 538213.430151094,158074.431914697 538195.053219633,158072.936478878 538190.659157777,158070.635478878 538183.143157777,158069.080309692 538177.205309379,158068.266766762 538173.483837246,158057.843915446 538172.447517446,158053.408915446 538171.400517446,158047.613039717 538169.563495325,158045.073072605 538175.572205208,158043.137072605 538179.630205208,158041.184574479 538183.439140725,158039.007574479 538187.403140725,158037.519521703 538189.989370281,158035.182521703 538193.870370281,158033.712367603 538196.212967163,158029.184367603 538203.140967163,158026.31288683 538207.230193777,158020.89688683 538214.421193777,158019.944393919 538215.658822856,158004.117151368 538235.786967285,157999.997829803 538241.392007344,157995.951261752 538247.246801485,157988.803794101 538258.072398108,157984.787642157 538264.38931453,157980.440001128 538271.591722095,157976.942518167 538277.773081309,157971.061487748 538288.733144043,157957.024068947 538316.780902919,157956.768749663 538317.286273616,157939.881981569 538350.400237931,157938.204571002 538354.054189686,157935.664217882 538360.223089209,157920.118047022 538400.509919791,157918.286839608 538404.845229414,157916.194839608 538409.394229414,157914.665582115 538412.525772164,157910.514582115 538420.547772164,157908.235749676 538424.63415538,157903.597749676 538432.37315538,157900.512564652 538437.107048955,157897.928564652 538440.763048955,157894.970653103 538444.670653984,157893.800653103 538446.115653984,157889.349200165 538451.136402565,157886.224200165 538454.358402565,157882.948159266 538457.536638685,157880.416711585 538459.847204034,157880.146892975 538461.800749577,157879.411892975 538466.267749577,157878.710811231 538469.95128323,157876.888811231 538478.37228323,157876.245699025 538481.097480351,157874.012699024 538489.827480351,157872.555499637 538494.801685834,157870.129499637 538502.133685834,157868.970184323 538505.384619853,157867.313184323 538509.713619853,157864.680256862 538515.777297554,157862.683256862 538519.872297554,157856.601177321 538530.16892626,157854.088177321 538533.73892626,157843.033967768 538546.222509593,157840.219967768 538548.764509593,157827.133718922 538558.24060813,157822.928718922 538560.64160813,157802.651122881 538568.57953785,157798.421122881 538569.55853785,157796.315971774 538569.836655627)) #56 Polygon - gid: 2556 POLYGON((165866.082985 541862.721985,165851.682985 541848.138985,165804.193985 541863.105985,165801.945985 541874.734985,165814.893985 541890.902985,165824.346985 541905.179985,165834.300985 541928.120985,165826.139985 541936.876985,165823.907985 541948.444985,165827.893985 541968.536985,165846.896985 541979.346985,165875.377985 541971.704985,165921.822985 541960.759985,165900.301985 541937.964985,165886.338985 541910.918985,165892.219985 541895.974985,165878.605985 541877.133985,165866.082985 541862.721985)) POLYGON( EMPTY) #57 Polygon - gid: 2557 POLYGON((164054.834985 543306.880985,164069.572985 543304.004985,164103.605985 543312.388985,164098.333985 543300.131985,164075.912985 543252.912985,164094.128985 543217.655985,164100.007985 543181.949985,164113.692985 543153.753985,164056.104985 543132.795985,164041.707985 543117.852985,164019.452985 543100.919985,163992.041985 543102.519985,163994.001985 543156.339985,163998.122985 543200.290985,163968.364985 543209.075985,163940.187985 543232.044985,163942.884985 543247.017985,163977.816985 543288.031985,163999.532985 543335.043985,164021.073985 543335.717985,164039.006985 543320.999985,164054.834985 543306.880985)) POLYGON( EMPTY) #58 Polygon - gid: 2558 POLYGON((166001.678985 545096.446985,165986.188985 545050.627985,166031.006985 545078.395985,166053.356985 545047.590985,166042.301985 545030.529985,166001.118985 545004.006985,165970.376985 544983.927985,165949.330985 544958.286985,165946.693985 544938.892985,165963.120985 544919.755985,165995.255985 544914.667985,166022.427985 544917.764985,166062.571985 544932.058985,166097.433985 544907.541985,166121.008985 544885.492985,166149.252985 544896.697985,166161.300985 544855.607985,166120.499985 544852.803985,166098.819985 544833.284985,166055.523985 544765.349985,166034.012985 544756.903985,166001.675985 544764.667985,165941.932985 544777.760985,165896.886985 544801.133985,165869.851985 544814.425985,165811.901985 544827.664985,165792.911985 544829.897985,165725.363985 544817.517985,165706.523985 544809.004985,165670.402985 544807.309985,165679.523985 544816.702985,165708.514985 544857.040985,165719.255985 544868.100985,165743.555985 544882.196985,165762.492985 544890.766985,165804.664985 544895.609985,165839.702985 544901.606985,165850.419985 544915.467985,165839.532985 544931.763985,165828.625985 544950.808985,165805.144985 544992.480985,165777.668985 545014.324985,165794.091985 545037.066985,165845.431985 545028.795985,165878.092985 545037.633985,165894.460985 545035.084985,165902.747985 545013.031985,165924.190985 544999.320985,165937.750985 545007.789985,165924.471985 545029.942985,165905.294985 545049.089985,165910.679985 545063.023985,165933.681985 545062.029985,165942.031985 545072.420985,165942.314985 545083.029985,165940.263985 545106.979985,165926.679985 545138.892985,165924.557985 545160.165985,165927.736985 545178.652985,165939.544985 545184.712985,165957.986985 545197.293985,166012.773985 545218.448985,166021.131985 545230.145985,166042.780985 545212.268985,166042.259985 545193.319985,165989.913985 545147.241985,166007.501985 545109.760985,166001.678985 545096.446985)) POLYGON((166006.280209145 544840.438913134,166015.082113057 544841.442133229,166013.442395777 544838.869281385,166006.280209145 544840.438913134)) #59 Polygon - gid: 2559 POLYGON((165400.049985 545327.155985,165416.553985 545307.426985,165440.890985 545317.388985,165451.763985 545309.292985,165455.551985 545256.760985,165447.188985 545219.754985,165398.556985 545171.589985,165389.391985 545144.568985,165415.765985 545137.758985,165442.139985 545130.948985,165489.105985 545131.514985,165494.821985 545142.545985,165481.339985 545161.579985,165465.034985 545177.852985,165498.516985 545230.195985,165501.015485 545233.148485,165500.118985 545227.637985,165495.059985 545208.332985,165494.628985 545189.451985,165502.564985 545178.421985,165543.025985 545176.478985,165553.648985 545165.414985,165533.901985 545125.965985,165527.694985 545101.709985,165538.434985 545096.018985,165543.367985 545074.397985,165455.769985 545021.301985,165446.998985 544999.756985,165456.894985 544967.294985,165470.818985 544959.256985,165498.705985 544959.917985,165512.415985 544957.533985,165543.312985 544958.262985,165559.703985 544955.955985,165576.629985 544937.412985,165585.025985 544918.665985,165601.227985 544929.893985,165617.565985 544930.296985,165631.216985 544927.924985,165645.767985 544866.148985,165647.031985 544810.287985,165637.518985 544792.335985,165631.176985 544780.367985,165623.202985 544753.101985,165617.222985 544732.652985,165603.753985 544721.524985,165569.450985 544664.526985,165591.777985 544638.643985,165605.444985 544628.162985,165630.409985 544619.262985,165676.081985 544636.350985,165692.189985 544644.760985,165703.053985 544639.627985,165714.273985 544611.021985,165711.822985 544589.522985,165717.739985 544537.900985,165709.916985 544513.571985,165688.731985 544478.238985,165664.676985 544458.963985,165649.007985 544415.726985,165633.175985 544388.605985,165620.914985 544351.710985,165616.066985 544331.517985,165621.967985 544306.302985,165608.605985 544308.702985,165557.297985 544334.741985,165548.928985 544345.515985,165535.686985 544374.908985,165530.527985 544420.499985,165516.300985 544469.034985,165507.960985 544482.428985,165470.557985 544508.864985,165473.122985 544522.557985,165487.876985 544573.189985,165495.818985 544598.017985,165498.986985 544643.158985,165497.702985 544705.431985,165497.357985 544732.783985,165492.488985 544763.520985,165489.441985 544787.979985,165475.893985 544776.771985,165461.065985 544768.463985,165445.447985 544782.600985,165426.917985 544783.943985,165387.584985 544770.301985,165336.710985 544775.354985,165307.761985 544818.243985,165296.603985 544828.963985,165272.205985 544863.745985,165246.740985 544798.278985,165233.268985 544781.600985,165225.202985 544770.505985,165186.730985 544815.540985,165165.320985 544803.562985,165100.432985 544802.416985,165068.731985 544809.183985,165045.724985 544775.915985,165029.079985 544781.054985,165025.965985 544805.761985,164992.296985 544823.851985,164975.557985 544831.778985,164939.477985 544836.522985,164925.475985 544847.265985,164976.638985 544865.093985,164981.929985 544881.753985,164984.490985 544917.716985,164982.509985 544967.675985,164975.129985 545022.482985,165012.349985 545052.423985,165001.279985 545060.555985,164980.136985 545083.879985,165029.438985 545065.380985,165085.830985 545066.792985,165152.434985 545059.322985,165208.605985 545056.969985,165236.407985 545062.741985,165253.818985 545076.317985,165267.921985 545098.393985,165269.473985 545169.154985,165280.723985 545180.182985,165294.528985 545180.342985,165328.757985 545168.612985,165334.547985 545185.199985,165365.423985 545204.772985,165367.357985 545210.305985,165371.225985 545221.370985,165365.881985 545235.094985,165359.200985 545246.854985,165349.177985 545264.494985,165335.491985 545269.816985,165294.894985 545285.114985,165266.383985 545324.205985,165274.795985 545337.924985,165288.510985 545338.064985,165318.892985 545349.229985,165343.732985 545360.387985,165374.453985 545370.711985,165396.429985 545376.374985,165420.281985 545364.710985,165400.264985 545340.826985,165400.049985 545327.155985),(165342.461985 545093.777985,165322.031985 545055.610985,165307.902985 545033.527985,165304.183985 545003.597985,165314.784985 544970.879985,165305.688985 544951.716985,165327.686985 544941.061985,165380.740985 544947.170985,165397.607985 544966.537985,165396.440985 545017.969985,165394.198985 545050.695985,165377.954985 545069.612985,165386.777985 545105.268985,165378.710985 545118.851985,165345.544985 545115.710985,165342.702985 545110.200985,165342.461985 545093.777985)) MULTIPOLYGON(((165057.217205208 544883.120216485,165059.30153673 544912.389570074,165059.432092366 544920.688588389,165057.451092366 544970.647588389,165056.839151797 544977.684729339,165055.105079377 544990.562684236,165055.666345379 544991.014185186,165082.574837416 544991.687947258,165144.075738552 544984.790287485,165149.295992153 544984.388702299,165205.466992153 544982.035702299,165223.851710387 544983.535879454,165231.859198159 544985.198321703,165232.835721359 544980.480345081,165234.671869136 544974.813419038,165232.980105736 544970.113149715,165230.792111361 544955.6486919,165231.453631581 544941.034648987,165234.596064132 544928.226786517,165229.177458967 544925.175179585,165218.024334311 544915.604916041,165208.951612951 544904.043434258,165202.307658569 544890.934658417,165201.450878229 544888.731994426,165192.63043154 544890.308601857,165177.936402401 544890.023568984,165163.580078568 544886.878461346,165150.112731992 544880.994048692,165145.151531196 544878.218464239,165107.693212873 544877.556905356,165084.388987872 544882.531502075,165069.804209359 544884.176320174,165057.217205208 544883.120216485)),((165433.450985222 544894.243752377,165445.727600121 544888.578682779,165458.965228219 544885.199652816,165472.596195875 544884.27804448,165493.116772708 544884.764439621,165499.5672165 544883.642786958,165514.185081919 544882.554852596,165519.617671597 544882.683031962,165523.817930203 544875.323465139,165533.380754455 544864.280599446,165544.902815038 544855.300921817,165557.947005961 544848.72508928,165571.226811748 544845.023247916,165571.608985418 544828.133530063,165571.248634832 544827.453511802,165564.906634832 544815.485511802,165561.598307512 544807.342441787,165560.674592039 544811.451578352,165554.799933434 544824.767735359,165546.463962451 544836.698503939,165535.980603089 544846.794583753,165523.744647759 544854.675766933,165510.216889818 544860.045256316,165495.906770564 544862.700842514,165481.353194207 544862.542518913,165467.1042333 544859.576247815,165458.583903741 544855.97784482,165450.869543946 544857.404772996,165432.339543946 544858.747772996,165417.139633107 544858.30381175,165402.341694045 544854.803041746,165379.029034346 544846.717431606,165369.926358081 544860.203378698,165362.080227598 544869.526690428,165389.320308912 544872.663299482,165402.872948774 544875.510841409,165415.671006543 544880.801612583,165427.278136608 544888.355225886,165433.450985222 544894.243752377)),((165564.244956383 544565.763054216,165569.5976314 544562.284557272,165580.260093066 544557.517948244,165605.225093066 544548.617948244,165617.918405741 544545.31056484,165630.99381411 544544.265257411,165641.322078728 544545.252988251,165641.157714701 544544.741827264,165631.329809072 544528.350541467,165617.778879255 544517.492334349,165607.933959442 544508.007119591,165599.974337952 544496.892436919,165594.164474795 544484.51757388,165591.817078659 544478.040174765,165588.272635808 544490.131939281,165579.967528816 544508.678032292,165571.627528816 544522.072032292,165562.518379322 544533.89247424,165556.154902685 544539.416730683,165559.608905593 544551.269995916,165564.244956383 544565.763054216))) #60 Polygon - gid: 2560 POLYGON((165039.888985 545214.900985,165061.521985 545211.327985,165071.841985 545218.422985,165077.658585 545221.274385,165042.910985 545188.529985,165018.330985 545164.645985,165012.696985 545156.314985,165001.478985 545145.165985,164983.560985 545134.409985,164959.705985 545136.405985,164912.749985 545126.728985,164872.247985 545143.406985,164854.636985 545152.272985,164842.895985 545158.183985,164822.013985 545183.452985,164819.327985 545202.866985,164836.326985 545230.849985,164837.880985 545249.634985,164820.022985 545295.891985,164797.828985 545328.982985,164765.676985 545371.292985,164741.785985 545411.115985,164755.907985 545414.000985,164781.197985 545405.853985,164828.946985 545376.498985,164869.393985 545349.987985,164902.767985 545314.165985,164924.560985 545268.486985,164951.092985 545252.883985,164976.229985 545250.334985,164992.874985 545239.445985,165003.027985 545231.057985,165018.255985 545218.473985,165039.888985 545214.900985)) POLYGON( EMPTY) #61 Polygon - gid: 2561 POLYGON((165238.510985 545710.471985,165192.124985 545700.368985,165160.156985 545630.008985,165164.336985 545624.861985,165176.876985 545609.422985,165172.523985 545591.077985,165168.170985 545572.732985,165167.980985 545556.368985,165147.570985 545540.142985,165125.931985 545556.256985,165090.936985 545602.197985,165089.392985 545634.903985,165089.504985 545645.843985,165092.417985 545662.279985,165111.877985 545683.285985,165129.554985 545701.137985,165121.586985 545728.577985,165086.923985 545743.977985,165052.963985 545734.373985,165039.091985 545717.850985,165027.966985 545701.352985,165001.879985 545672.568985,164978.299985 545619.010985,164961.459985 545577.792985,164935.200985 545546.003985,164911.800985 545505.448985,164900.849985 545521.874985,164920.431985 545580.077985,164932.021985 545610.339985,164933.689985 545628.314985,164928.252985 545677.904985,164913.400985 545715.258985,164921.835985 545729.167985,164935.169985 545781.427985,164942.610985 545813.897985,164966.247985 545817.882985,164988.465985 545801.288985,165002.312985 545787.436985,165021.889985 545790.358985,165045.185985 545849.211985,165056.368985 545885.476985,165064.812985 545891.120985,165084.289985 545868.904985,165091.803985 545835.123985,165099.316985 545801.341985,165105.409985 545799.161985,165129.781985 545790.441985,165134.147985 545761.590985,165141.310985 545750.056985,165158.590985 545709.009985,165176.243985 545724.213985,165199.478985 545747.702985,165208.061985 545779.326985,165211.808985 545797.165985,165223.206985 545816.746985,165225.387985 545823.733985,165238.473985 545865.656985,165240.654985 545872.643985,165224.011985 545880.913985,165213.049985 545897.603985,165243.117985 545899.699985,165243.477985 545927.700985,165258.375985 545942.579985,165264.112985 545953.801985,165275.516985 545970.657985,165295.826985 545982.700985,165309.815985 545985.574985,165329.383985 545988.480985,165354.767985 546001.160985,165354.562985 545987.341985,165383.586985 545955.589985,165373.711985 545912.320985,165357.023985 545909.441985,165340.294985 545903.784985,165317.425985 545856.465985,165311.411985 545823.162985,165287.933985 545774.854985,165249.668985 545718.827985,165238.510985 545710.471985)) POLYGON( EMPTY) #62 Polygon - gid: 2562 POLYGON((167132.502985 546739.675985,167129.431985 546728.461985,167149.272985 546730.744985,167174.754985 546732.873985,167203.344985 546749.030985,167214.701985 546712.855985,167222.891985 546698.488985,167172.714985 546705.889985,167136.868985 546710.488985,167119.637985 546696.854985,167075.210985 546707.329985,167010.354985 546685.151985,166970.378985 546680.545985,166953.227985 546678.167985,166944.879985 546686.925985,166934.540985 546732.693985,166943.806985 546763.687985,166970.472985 546795.157985,166972.578985 546790.292985,166993.557985 546761.456985,166991.220985 546735.941985,166999.607985 546730.041985,167040.797985 546729.182985,167063.593985 546739.815985,167081.551985 546762.749985,167104.289985 546789.026985,167117.932985 546804.791985,167133.736985 546789.873985,167149.540985 546774.955985,167144.229985 546759.119985,167132.502985 546739.675985)) POLYGON( EMPTY) #63 Polygon - gid: 2563 POLYGON((142722.192985 546177.308985,142726.778985 546176.811985,142731.932985 546176.961985,142741.768985 546177.534985,142746.228985 546178.131985,142757.116985 546179.802985,142766.625985 546181.831985,142771.037985 546182.101985,142773.400985 546181.387985,142776.497985 546178.776985,142779.106985 546174.996985,142781.284985 546170.613985,142783.085985 546166.194985,142784.732985 546161.198985,142785.744985 546156.827985,142788.327985 546142.074985,142788.603985 546137.521985,142789.852985 546132.215985,142789.471985 546113.620985,142789.307985 546106.890985,142788.828985 546101.181985,142787.251985 546087.771985,142785.818985 546077.995985,142784.285985 546069.126985,142781.610985 546055.891985,142777.385985 546039.293985,142776.636985 546036.164985,142776.002985 546033.293985,142774.917985 546027.582985,142773.500985 546018.687985,142772.098985 546007.143985,142768.178985 546010.905985,142764.713985 546009.110985,142761.223985 546006.385985,142754.125985 545999.891985,142750.724985 545997.160985,142743.367985 545991.857985,142735.810985 545986.892985,142731.895985 545984.775985,142730.716985 545984.217985,142726.312985 545982.683985,142721.651985 545982.033985,142718.418985 545982.397985,142714.052985 545984.850985,142711.360985 545988.681985,142712.738985 545993.180985,142714.941985 545996.960985,142717.691985 546000.791985,142724.660985 546009.840985,142731.686985 546016.665985,142732.054985 546018.591985,142730.690985 546022.264985,142728.418985 546025.982985,142719.613985 546037.284985,142713.073985 546046.712985,142710.527985 546050.471985,142708.252985 546054.334985,142706.612985 546057.889985,142705.358985 546062.133985,142704.624985 546066.572985,142703.219985 546077.702985,142699.359985 546095.284985,142697.142985 546106.960985,142694.878985 546120.270985,142689.654985 546153.350985,142686.974985 546168.576985,142684.417985 546181.838985,142681.914985 546192.299985,142679.361985 546200.940985,142677.911985 546205.201985,142674.155985 546214.865985,142667.821985 546229.388985,142659.948985 546245.601985,142657.324985 546251.745985,142655.832985 546255.985985,142653.436985 546264.685985,142652.493985 546269.090985,142651.629985 546274.394985,142650.292985 546287.844985,142648.737985 546299.023985,142644.522985 546326.394985,142643.286985 546335.313985,142642.254985 546344.252985,142641.584985 546354.071985,142641.244985 546363.069985,142641.148985 546370.582985,142641.331985 546384.084985,142641.014985 546394.820985,142640.378985 546405.030985,142638.161985 546425.106985,142637.323985 546438.583985,142637.097985 546450.097985,142637.938985 546492.896985,142637.899985 546522.015985,142638.983985 546578.467985,142639.054985 546593.084985,142638.672985 546602.065985,142638.067985 546607.674985,142636.677985 546616.584985,142634.346985 546627.450985,142633.051985 546631.746985,142629.847985 546640.178985,142628.692985 546643.625985,142624.159985 546661.045985,142621.661985 546670.257985,142617.884985 546683.219985,142611.192985 546706.280985,142608.360985 546717.192985,142606.371985 546725.978985,142604.441985 546737.393985,142603.363985 546746.339985,142602.555985 546756.672985,142602.460985 546761.163985,142602.860985 546774.337985,142602.576985 546792.392985,142603.006985 546798.336985,142603.734985 546802.764985,142604.771985 546807.169985,142606.081985 546811.513985,142607.626985 546815.755985,142611.830985 546826.313985,142613.916985 546830.574985,142616.469985 546834.131985,142618.842985 546836.097985,142622.666985 546837.753985,142626.214985 546838.483985,142629.542985 546838.792985,142632.214985 546838.947985,142636.772985 546838.722985,142641.319985 546838.062985,142646.320985 546836.579985,142650.481985 546834.504985,142654.367985 546831.854985,142657.767985 546828.806985,142658.902985 546827.563985,142661.479985 546824.014985,142663.628985 546820.007985,142665.381985 546815.716985,142666.772985 546811.314985,142667.543985 546808.276985,142668.299985 546803.903985,142668.664985 546799.432985,142669.208985 546770.941985,142669.215985 546758.058985,142668.827985 546740.061985,142668.678985 546721.600985,142668.824985 546701.557985,142669.123985 546692.563985,142669.921985 546681.612985,142671.489985 546668.197985,142672.558985 546661.898985,142675.484985 546648.710985,142678.156985 546634.495985,142679.352985 546625.575985,142679.521985 546623.224985,142679.455985 546618.725985,142678.608985 546609.684985,142678.607985 546605.216985,142679.456985 546599.497985,142680.422985 546595.072985,142681.628985 546590.688985,142683.064985 546586.385985,142684.719985 546582.209985,142687.493985 546577.462985,142693.608985 546570.163985,142695.807985 546566.427985,142696.403985 546564.167985,142696.269985 546560.021985,142695.131985 546555.716985,142689.869985 546543.023985,142687.819985 546538.859985,142685.414985 546534.767985,142683.696985 546530.666985,142683.426985 546528.227985,142684.250985 546524.018985,142686.016985 546519.785985,142690.072985 546511.275985,142691.212985 546507.010985,142691.313985 546505.828985,142690.736985 546501.570985,142689.136985 546497.313985,142687.185985 546493.037985,142685.555985 546488.722985,142684.996985 546485.984985,142684.940985 546481.564985,142686.794985 546468.070985,142686.805985 546461.676985,142686.570985 546457.185985,142684.003985 546424.297985,142682.826985 546413.320985,142681.650985 546404.390985,142679.775985 546393.190985,142678.747985 546388.810985,142676.254985 546380.136985,142675.183985 546375.772985,142674.211985 546369.312985,142673.537985 546360.327985,142673.033985 546348.190985,142672.839985 546339.186985,142673.098985 546325.855985,142673.657985 546316.845985,142674.183985 546312.381985,142676.192985 546300.558985,142677.569985 546296.219985,142679.674985 546292.826985,142682.886985 546290.084985,142686.799985 546287.904985,142702.595985 546281.269985,142715.240985 546276.391985,142719.265985 546274.457985,142724.245985 546271.640985,142728.191985 546268.787985,142730.616985 546265.350985,142731.096985 546260.779985,142730.599985 546256.356985,142729.561985 546251.755985,142727.094985 546242.736985,142725.781985 546238.435985,142722.504985 546229.989985,142721.019985 546225.740985,142720.025985 546221.775985,142719.361985 546217.356985,142718.965985 546212.880985,142718.544985 546197.266985,142717.538985 546187.249985,142717.532985 546182.587985,142718.818985 546179.148985,142722.192985 546177.308985)) POLYGON( EMPTY) #64 Polygon - gid: 2564 POLYGON((164037.000985 546901.414985,164106.537985 546859.892985,164138.256985 546862.893985,164190.193985 546854.347985,164219.006985 546863.152985,164224.504985 546879.653985,164241.465985 546901.930985,164267.345985 546890.411985,164324.403985 546869.382985,164341.607985 546857.870985,164388.533985 546827.945985,164369.933985 546821.741985,164340.564985 546826.620985,164308.425985 546822.759985,164308.404985 546843.093985,164299.745985 546854.692985,164283.505985 546842.787985,164277.086985 546808.974985,164262.628985 546820.547985,164248.158985 546840.876985,164213.916985 546848.404985,164193.642985 546839.577985,164196.758985 546825.842985,164191.001985 546805.342985,164179.409985 546796.532985,164106.760985 546814.691985,164077.598985 546829.265985,164036.608985 546881.968985,164022.598985 546855.664985,164029.130985 546839.253985,163976.139985 546849.840985,163958.295985 546855.749985,163940.475985 546855.696985,163921.815985 546832.990985,163901.558985 546850.001985,163887.908985 546861.066985,163923.509985 546885.561985,163987.096985 546921.878985,164037.000985 546901.414985)) POLYGON( EMPTY) #65 Polygon - gid: 2565 POLYGON((165997.948985 547128.168985,166014.238985 547102.270985,166026.375985 547112.440985,166060.687985 547117.495985,166091.450985 547096.872985,166113.825985 547082.132985,166119.200985 547070.590985,166109.259985 547010.901985,166075.888985 547034.320985,166069.749985 547061.434985,166058.900985 547078.693985,166028.270985 547076.283985,166018.907985 547042.519985,165995.926985 547026.000985,165977.533985 546969.846985,165948.195985 546992.608985,165951.810985 547025.403985,165967.402985 547043.519985,165969.936985 547070.390985,165940.250985 547086.636985,165949.182985 547103.514985,165974.111985 547121.355985,165997.948985 547128.168985)) POLYGON( EMPTY) #66 Polygon - gid: 2566 POLYGON((165100.071985 522081.185985,165136.799985 522076.135985,165166.082985 522092.836985,165183.181985 522109.283985,165190.140985 522118.074985,165206.348985 522101.100985,165220.161985 522076.505985,165220.503985 522074.959985,165225.622985 522051.802985,165237.799985 522011.812985,165240.146985 521960.824985,165236.333985 521894.861985,165237.261985 521814.285985,165243.911985 521772.257985,165226.779985 521761.751985,165193.019985 521743.035985,165165.246985 521728.639985,165152.601985 521722.553985,165133.996985 521739.272985,165111.166985 521751.180985,165092.073985 521752.238985,165109.023985 521784.973985,165126.567985 521832.153985,165144.191985 521855.304985,165157.186985 521856.297985,165161.740985 521873.524985,165162.965985 521907.180985,165164.675985 521942.335985,165164.830985 521979.277985,165164.301985 521990.709985,165142.466985 521995.789985,165110.505985 522011.506985,165079.857985 522028.091985,165054.334985 522038.602985,165032.108985 522040.275985,165001.716985 522035.707985,164983.310985 522019.245985,164959.550985 521989.898985,164922.332985 521959.299985,164891.493985 521946.315985,164842.601985 521944.356985,164828.038985 521942.830985,164784.350985 521938.253985,164721.590985 521932.459985,164654.326985 521933.159985,164615.460985 521948.266985,164665.212985 521993.048985,164721.052985 522031.550985,164773.155985 522075.997985,164829.624985 522115.536985,164873.224985 522125.840985,164944.614985 522131.113985,164945.480985 522178.821985,164954.957985 522264.115985,164978.215985 522266.299985,165016.474985 522263.290985,165041.880985 522239.804985,165055.918985 522218.725985,165063.579985 522211.999985,165067.228985 522203.579985,165070.618985 522174.606985,165076.243985 522151.298985,165077.752985 522136.665985,165079.504985 522123.716985,165083.574985 522101.381985,165100.071985 522081.185985)) POLYGON((164820.266857 522017.427204655,164860.865764155 522045.854132527,164884.683758641 522051.483045719,164914.706877136 522053.700609857,164906.045863843 522043.003019071,164883.150492441 522024.179453335,164874.91441489 522020.711856107,164839.599301485 522019.296853506,164834.785821452 522018.948590341,164820.266857 522017.427204655)) #67 Polygon - gid: 2567 POLYGON((154374.974985 540624.728985,154320.493985 540619.008985,154292.141985 540622.113985,154300.537985 540553.371985,154315.955985 540540.285985,154376.940985 540530.412985,154405.631985 540496.147985,154445.668985 540435.041985,154454.521985 540417.090985,154451.884985 540403.553985,154445.292985 540369.710985,154445.579985 540362.563985,154447.014985 540326.827985,154437.326985 540254.795985,154511.563985 540278.324985,154528.041985 540293.316985,154555.203985 540318.597985,154568.395985 540311.500985,154566.744985 540300.457985,154553.075985 540281.217985,154539.316985 540265.833985,154513.536985 540265.913985,154479.903985 540247.544985,154439.739985 540232.015985,154403.476985 540219.274985,154352.216985 540193.238985,154334.278985 540175.092985,154332.774985 540144.333985,154350.235985 540125.468985,154371.989985 540117.381985,154383.699985 540112.299985,154407.119985 540102.135985,154415.975985 540097.389985,154420.402985 540095.016985,154432.473985 540079.628985,154446.542985 540043.686985,154432.038985 540027.748985,154407.872985 540019.283985,154375.098985 540051.097985,154358.677985 540070.534985,154354.465985 540108.800985,154334.695985 540111.082985,154308.823985 540096.567985,154262.980985 540157.924985,154255.293985 540164.418985,154215.750985 540176.802985,154206.665985 540194.763985,154166.906985 540153.065985,154162.757985 540169.964985,154166.319985 540198.641985,154180.928985 540222.157985,154211.961985 540249.040985,154209.983985 540262.387985,154208.994985 540269.061985,154197.947985 540292.833985,154192.961985 540297.380985,154158.065985 540329.211985,154140.829985 540316.837985,154117.762985 540294.223985,154092.528985 540254.239985,154073.822985 540242.348985,154048.200985 540266.020985,154064.357985 540290.020985,154062.051985 540304.767985,154040.168985 540346.540985,154041.641985 540357.709985,154049.520985 540373.836985,154104.527985 540418.794985,154090.465985 540443.160985,154069.529985 540448.440985,154046.019985 540476.715985,154023.556985 540493.431985,154012.295985 540517.485985,153979.630985 540532.522985,153949.623985 540550.285985,153937.859985 540571.634985,153958.642985 540598.024985,154012.244985 540548.784985,154030.269985 540532.534985,154070.531985 540499.593985,154087.180985 540483.491985,154132.461985 540455.676985,154148.344985 540445.370985,154180.755985 540450.271985,154197.244985 540479.738985,154193.874985 540497.126985,154183.840985 540529.466985,154188.908985 540557.187985,154202.879985 540575.534985,154249.118985 540618.863985,154258.226985 540629.278985,154262.780985 540634.485985,154280.201985 540662.114985,154287.169985 540673.165985,154298.532985 540705.614985,154310.100985 540727.104985,154343.491985 540740.559985,154373.404985 540748.738985,154410.171985 540758.451985,154418.213985 540774.691985,154432.851985 540756.015985,154427.625985 540739.482985,154393.172985 540712.859985,154367.238985 540699.027985,154362.824985 540688.093985,154374.974985 540624.728985)) POLYGON ((154211.34039180956 540382.1317209445, 154217.6503256708 540384.9741471609, 154228.8660526432 540392.7357234654, 154238.49064413007 540402.4001860456, 154246.20578777403 540413.6479038943, 154262.69478777403 540443.1149038943, 154268.08157501929 540455.0980127293, 154271.29462502326 540467.8372703156, 154272.15180599023 540479.7780934644, 154278.51581715897 540475.2995723275, 154290.83214622788 540469.6192125722, 154303.9701183911 540466.2499194533, 154337.37449228237 540460.8420095831, 154345.30698193613 540451.368420026, 154375.74125760913 540404.9184650026, 154371.67648756542 540384.050137885, 154370.35338301142 540366.7016572024, 154370.6403821483 540359.5546786959, 154371.8131743791 540330.3484744037, 154365.60057125118 540284.1566671671, 154318.252931651 540260.1078348488, 154307.99700814812 540253.816156007, 154298.8791629049 540245.9654179738, 154285.6658256004 540232.5988654748, 154284.9711923334 540232.8950064374, 154286.85393501408 540245.0165815549, 154286.15170738756 540260.035760671, 154284.17376698626 540273.3823585154, 154283.18482683104 540280.055954669, 154277.00972538022 540300.6688686018, 154265.96272538023 540324.4408686018, 154258.40762354335 540337.2145224822, 154248.48523614364 540348.2504649211, 154243.50247502665 540352.7945112105, 154211.34039180956 540382.1317209445)) #68 Polygon - gid: 2568 POLYGON((151090.928985 540950.574985,151117.445985 540939.721985,151149.481985 540941.866985,151212.221985 540950.239985,151224.726985 540959.131985,151249.097985 540961.645985,151268.213985 540941.565985,151298.490985 540913.861985,151331.140985 540899.607985,151337.670985 540896.756985,151348.111985 540887.739985,151353.647985 540867.974985,151359.183985 540848.209985,151369.021985 540811.954985,151379.284985 540781.097985,151400.204985 540762.390985,151448.885985 540728.437985,151463.818985 540705.351985,151467.765985 540683.006985,151476.666985 540635.436985,151502.123985 540589.717985,151524.591985 540550.077985,151549.839985 540521.107985,151566.568985 540511.980985,151568.176985 540482.157985,151563.945985 540460.707985,151540.525985 540413.008985,151531.631985 540402.717985,151516.708985 540476.937985,151515.687985 540483.808985,151509.564985 540525.034985,151508.544985 540531.905985,151482.998985 540568.953985,151467.271985 540597.511985,151456.715985 540625.756985,151448.935985 540653.713985,151423.440985 540680.452985,151380.551985 540719.880985,151350.280985 540763.588985,151319.225985 540796.248985,151296.298985 540802.965985,151285.001985 540839.802985,151267.089985 540869.796985,151235.102985 540900.984985,151195.281985 540918.277985,151141.469985 540910.674985,151100.987985 540911.757985,151081.554985 540915.883985,151051.966985 540895.325985,151048.320985 540889.129985,151026.445985 540851.954985,151007.887985 540827.846985,151044.137985 540791.294985,151075.221985 540763.652985,151091.194985 540751.370985,151090.038985 540734.632985,151083.686985 540723.848985,151064.053985 540703.043985,151053.089985 540686.671985,151050.667985 540661.563985,151063.916985 540610.385985,151108.013985 540532.246985,151121.916985 540503.720985,151119.042985 540462.231985,151138.133985 540416.520985,151140.118985 540378.023985,151158.122985 540338.727985,151164.124985 540325.628985,151178.649985 540301.860985,151189.543985 540284.034985,151224.790985 540245.614985,151236.485985 540217.614985,151242.398985 540178.166985,151252.590985 540145.914985,151264.740985 540108.947985,151277.958985 540082.053985,151275.701985 540049.776985,151262.771985 540058.740985,151247.206985 540085.158985,151233.574985 540106.623985,151183.995985 540125.600985,151183.849985 540187.672985,151167.715985 540232.645985,151145.098985 540276.657985,151124.279985 540320.641985,151108.773985 540335.412985,151085.813985 540350.102985,151070.872985 540391.428985,151052.396985 540415.220985,151020.243985 540439.842985,150982.357985 540466.123985,150936.027985 540486.159985,150893.723985 540505.026985,150878.560985 540522.467985,150839.929985 540557.935985,150820.111985 540562.409985,150778.385985 540607.088985,150766.205985 540627.265985,150708.205985 540687.434985,150691.026985 540725.163985,150659.099985 540758.887985,150603.544985 540779.848985,150572.506985 540787.861985,150565.131985 540805.432985,150578.367985 540817.865985,150622.790985 540865.068985,150638.099985 540848.467985,150624.889985 540826.636985,150650.151985 540813.062985,150687.839985 540773.076985,150744.405985 540759.742985,150794.881985 540710.287985,150801.830985 540687.127985,150805.950985 540664.161985,150796.514985 540650.612985,150798.383985 540636.310985,150816.631985 540612.414985,150843.735985 540593.600985,150877.839985 540583.571985,150887.979985 540551.552985,150921.691985 540521.649985,150965.257985 540501.931985,151002.649985 540474.224985,151015.114985 540468.395985,151040.044985 540456.737985,151051.554985 540457.180985,151063.064985 540457.624985,151084.186985 540492.617985,151070.647985 540537.901985,151049.601985 540575.147985,151021.902985 540596.656985,151007.014985 540622.638985,150965.907985 540664.320985,150940.152985 540688.413985,150936.950985 540716.690985,150931.070985 540753.445985,150916.065985 540779.631985,150873.511985 540808.008985,150882.496985 540821.066985,150907.599985 540814.139985,150933.307985 540820.832985,150937.628985 540842.986985,150925.954985 540877.445985,150903.298985 540910.400985,150878.953985 540924.700985,150854.609985 540939.000985,150848.572985 540949.540985,150839.517985 540965.350985,150833.587985 541002.358985,150828.749985 541024.918985,150841.377985 541046.423985,150859.617985 541023.612985,150895.948985 540986.867985,150908.718985 540964.327985,150920.310985 540934.969985,150933.505985 540917.905985,150946.847985 540895.692985,150973.058985 540868.670985,150994.634985 540855.997985,151011.929985 540871.185985,151031.681985 540896.146985,151051.614985 540918.938985,151063.916985 540934.921985,151046.624985 540959.176985,151017.447985 540963.574985,150995.564985 540966.871985,150975.912985 540968.450985,150943.158985 540971.082985,150926.615985 540975.000985,150961.104985 540994.376985,151021.350985 541033.454985,151067.459985 541065.693985,151094.333985 541073.195985,151089.675985 541035.539985,151088.718985 540990.623985,151085.166985 540969.224985,151090.928985 540950.574985)) POLYGON( EMPTY) #69 Polygon - gid: 2569 POLYGON((157856.121985 509999.999985,157796.029985 509999.999985,157791.006985 510004.813985,157791.813985 510018.198985,157800.933985 510029.066985,157811.325985 510037.421985,157822.700985 510041.583985,157836.355985 510047.726985,157846.509985 510047.168985,157860.168985 510044.667985,157865.721985 510035.395985,157865.310985 510029.671985,157864.898985 510023.947985,157864.938985 510012.985985,157856.897985 510002.060985,157856.121985 509999.999985)) POLYGON( EMPTY) #70 Polygon - gid: 2570 POLYGON((166912.823985 510008.038985,166922.037985 510006.063985,166931.908985 510006.063985,166939.147985 510009.354985,166945.070985 510014.619985,166951.361985 510005.018985,166956.501985 509999.999985,166817.427985 509999.999985,166829.662985 510020.674985,166846.946985 510042.171985,166864.977985 510054.010985,166876.718985 510056.295985,166886.332985 510051.098985,166888.756985 510038.698985,166892.223985 510028.810985,166906.901985 510012.644985,166912.823985 510008.038985)) POLYGON( EMPTY) #71 Polygon - gid: 2571 POLYGON((160978.349985 510216.528985,160976.017985 510196.815985,160972.315985 510179.827985,160967.100985 510160.634985,160968.288985 510153.324985,160933.313985 510163.101985,160874.570985 510167.697985,160863.688985 510172.638985,160844.319985 510175.223985,160810.435985 510182.778985,160768.056985 510200.089985,160716.009985 510219.903985,160738.406985 510250.985985,160748.943985 510253.617985,160780.763985 510240.957985,160797.438985 510248.395985,160805.905985 510245.900985,160816.794985 510243.385985,160819.530985 510230.970985,160825.180985 510216.642985,160843.337985 510214.067985,160859.081985 510213.938985,160867.450985 510238.436985,160922.763985 510238.573985,160931.321985 510255.515985,160938.802985 510279.789985,160937.700985 510301.677985,160953.256985 510301.882985,160978.462985 510235.998985,160978.349985 510216.528985)) POLYGON( EMPTY) #72 Polygon - gid: 2572 POLYGON((164410.173985 510269.608985,164385.850985 510262.988985,164380.056985 510272.454985,164384.086985 510288.828985,164411.898985 510335.704985,164423.329985 510359.345985,164423.798985 510376.111985,164433.397985 510390.825985,164433.551985 510400.397985,164424.317985 510428.944985,164425.629985 510436.100985,164434.162985 510445.550985,164452.393985 510464.357985,164473.162985 510490.376985,164484.334985 510507.267985,164489.125985 510507.205985,164520.300985 510472.028985,164486.035985 510438.688985,164469.919985 510416.977985,164461.182985 510395.537985,164460.812985 510357.662985,164462.293985 510314.057985,164459.977985 510300.216985,164455.056985 510293.082985,164433.141985 510278.881985,164410.173985 510269.608985)) POLYGON( EMPTY) #73 Polygon - gid: 2573 POLYGON((165811.803985 510461.433985,165827.476985 510461.338985,165854.112985 510465.702985,165860.990985 510489.889985,165940.128985 510487.374985,165967.267985 510478.917985,165996.204985 510476.027985,166010.928985 510478.380985,166019.470985 510482.908985,166045.518985 510470.094985,166044.175985 510465.335985,166021.852985 510442.020985,166001.663985 510418.254985,165994.615985 510423.284985,165980.675985 510431.298985,165958.830985 510417.903985,165925.719985 510435.804985,165903.141985 510416.529985,165886.871985 510433.864985,165815.334985 510412.070985,165802.365985 510419.692985,165789.470985 510429.714985,165779.722985 510425.222985,165778.145985 510413.260985,165776.187985 510391.342985,165769.739985 510377.140985,165758.796985 510372.686985,165747.033985 510380.266985,165729.008985 510378.757985,165718.359985 510383.904985,165721.532985 510409.525985,165740.376985 510475.641985,165741.587985 510513.924985,165761.560985 510539.628985,165782.635985 510526.535985,165800.213985 510512.079985,165787.945985 510464.582985,165790.350985 510462.507985,165811.803985 510461.433985)) POLYGON( EMPTY) #74 Polygon - gid: 2574 POLYGON((156787.353985 510717.616985,156798.209985 510707.476985,156835.337985 510722.081985,156846.303985 510701.194985,156809.056985 510660.576985,156747.023985 510612.786985,156725.321985 510631.224985,156706.853985 510627.359985,156670.055985 510617.736985,156669.633985 510645.101985,156641.531985 510673.194985,156607.232985 510646.565985,156586.956985 510678.596985,156610.864985 510701.168985,156633.590985 510723.694985,156644.244985 510734.684985,156664.910985 510709.964985,156667.638985 510693.338985,156677.663985 510681.579985,156691.318985 510674.355985,156706.414985 510680.618985,156733.650985 510698.475985,156758.149985 510713.483985,156755.055985 510727.250985,156776.436985 510742.942985,156787.353985 510717.616985)) POLYGON( EMPTY) #75 Polygon - gid: 2575 POLYGON((158008.700985 510611.812985,158026.072985 510610.072985,158045.611985 510612.296985,158069.846985 510619.338985,158090.368985 510618.785985,158109.698985 510613.651985,158128.025985 510597.619985,158093.668985 510549.634985,158057.574985 510514.193985,158039.492985 510494.646985,158015.478985 510474.555985,157995.775985 510460.308985,157942.439985 510496.109985,157921.521985 510507.754985,157902.162985 510523.671985,157865.738985 510559.611985,157883.243985 510610.932985,157890.286985 510634.366985,157893.710985 510647.347985,157892.650985 510661.155985,157898.540985 510682.313985,157906.960985 510705.486985,157913.131985 510731.023985,157917.901985 510747.795985,157920.336985 510757.682985,157923.967985 510759.058985,157940.909985 510743.266985,157936.142985 510728.843985,157938.154985 510709.160985,157948.143985 510678.120985,157961.674985 510650.062985,157989.091985 510622.655985,158008.700985 510611.812985)) POLYGON( EMPTY) #76 Polygon - gid: 2576 POLYGON((166305.250985 510805.834985,166318.509985 510802.975985,166330.838985 510809.846985,166344.515985 510802.850985,166343.020985 510793.191985,166337.462985 510785.456985,166339.794985 510768.209985,166353.422985 510755.048985,166364.727985 510750.532985,166376.738985 510747.721985,166389.828985 510743.756985,166403.788985 510746.369985,166415.423985 510749.148985,166427.334985 510741.479985,166440.525985 510736.196985,166441.389985 510724.034985,166448.601985 510697.764985,166461.649985 510665.331985,166471.117985 510635.466985,166472.253985 510610.734985,166471.971985 510578.827985,166450.104985 510554.829985,166436.845985 510555.257985,166419.250985 510572.731985,166370.997985 510552.013985,166344.073985 510538.399985,166314.873985 510529.684985,166260.933985 510516.455985,166239.242985 510517.141985,166214.020985 510520.366985,166199.574985 510535.799985,166179.736985 510555.676985,166167.104985 510575.319985,166158.002985 510592.441985,166148.310985 510604.147985,166128.052985 510621.052985,166117.555985 510630.988985,166109.528985 510643.243985,166108.834985 510660.055985,166116.902985 510679.485985,166129.322985 510693.478985,166155.820985 510708.809985,166202.941985 510748.637985,166216.897985 510760.809985,166224.033985 510771.474985,166226.512985 510787.120985,166225.393985 510816.346985,166224.544985 510828.097985,166226.469985 510838.410985,166239.357985 510850.789985,166263.214985 510837.894985,166280.875985 510820.358985,166305.250985 510805.834985)) POLYGON((166205.479485534 510652.581119516,166251.356748955 510691.357878233,166252.239160589 510692.115525049,166266.195160589 510704.287525049,166279.231532196 510719.102325104,166281.223092437 510722.078781098,166287.694391735 510714.260673777,166301.322391735 510701.099673777,166312.697826602 510692.069135259,166325.600553693 510685.400493874,166336.905553693 510680.884493874,166347.637140521 510677.506256777,166357.30243744 510675.244234494,166368.086801066 510671.977618621,166378.921550784 510670.069434357,166379.021705943 510669.772400869,166390.259992941 510641.837747114,166389.661020874 510641.648122609,166341.408020874 510620.930122609,166337.155021141 510618.944200876,166316.207348437 510608.352104004,166295.204881635 510602.083730778,166253.041853345 510591.743080032,166249.594867469 510591.852094477,166238.483846016 510602.984959354,166231.869257152 510613.27077071,166224.227146735 510627.646535877,166215.772193165 510640.272086276,166206.080193165 510651.978086276,166205.479485534 510652.581119516)) #77 Polygon - gid: 2577 POLYGON((144747.238985 510959.113985,144755.551985 510958.391985,144759.999985 510957.706985,144761.994985 510957.120985,144771.077985 510953.546985,144775.163985 510951.478985,144778.521985 510947.974985,144780.605985 510943.978985,144783.010985 510937.753985,144785.651985 510927.645985,144788.862985 510919.396985,144791.739985 510910.868985,144793.064985 510907.386985,144797.114985 510897.469985,144801.720985 510888.417985,144806.413985 510877.909985,144812.059985 510868.414985,144816.693985 510858.877985,144823.432985 510847.907985,144827.479985 510839.866985,144834.878985 510826.552985,144841.353985 510811.739985,144851.055985 510795.249985,144855.529985 510786.973985,144859.568985 510778.929985,144864.231985 510768.907985,144870.294985 510757.055985,144880.482985 510735.040985,144889.839985 510714.509985,144891.739985 510708.263985,144893.819985 510702.414985,144900.412985 510685.150985,144904.567985 510672.305985,144908.464985 510662.652985,144909.972985 510658.420985,144911.556985 510652.787985,144917.287985 510628.138985,144918.793985 510620.165985,144920.156985 510611.264985,144921.001985 510603.657985,144921.262985 510599.163985,144921.704985 510582.021985,144921.011985 510568.365985,144920.854985 510559.601985,144920.289985 510555.194985,144918.636985 510551.096985,144916.208985 510547.234985,144912.630985 510542.505985,144909.599985 510539.168985,144904.439985 510534.334985,144900.938985 510531.501985,144888.767985 510523.199985,144879.383985 510515.890985,144875.229985 510513.144985,144871.087985 510511.405985,144865.524985 510509.747985,144861.155985 510508.663985,144853.171985 510506.969985,144848.717985 510506.417985,144846.972985 510506.478985,144842.481985 510507.088985,144838.009985 510507.423985,144833.879985 510506.773985,144826.316985 510504.723985,144817.749985 510501.823985,144813.612985 510500.064985,144808.494985 510497.375985,144804.803985 510494.824985,144801.777985 510491.930985,144795.754985 510485.194985,144790.391985 510479.676985,144787.152985 510476.557985,144784.745985 510474.805985,144780.836985 510471.086985,144779.143985 510466.926985,144777.440985 510461.086985,144776.698985 510456.647985,144776.804985 510454.324985,144777.616985 510449.872985,144778.467985 510446.885985,144780.081985 510442.676985,144781.219985 510440.385985,144790.599985 510424.970985,144792.765985 510421.025985,144795.397985 510415.850985,144801.206985 510403.663985,144814.508985 510378.077985,144817.035985 510373.557985,144824.707985 510361.955985,144828.960985 510354.013985,144830.830985 510349.922985,144832.887985 510344.566985,144834.325985 510340.296985,144844.487985 510308.646985,144847.131985 510299.010985,144851.930985 510282.590985,144853.658985 510277.818985,144856.216985 510274.101985,144858.400985 510272.120985,144864.813985 510267.654985,144868.883985 510265.877985,144871.922985 510266.041985,144881.496985 510268.362985,144886.044985 510268.061985,144890.714985 510268.243985,144895.858985 510267.153985,144899.844985 510265.018985,144903.565985 510262.479985,144905.971985 510256.254985,144907.871985 510250.007985,144910.335985 510242.811985,144916.629985 510224.581985,144919.195985 510215.951985,144920.522985 510210.838985,144923.217985 510197.609985,144925.864985 510187.491985,144928.414985 510179.174985,144931.325985 510170.656985,144934.161985 510161.574985,144945.007985 510123.082985,144951.327985 510101.949985,144953.064985 510095.110985,144954.861985 510090.194985,144957.165985 510086.165985,144960.615985 510082.533985,144965.980985 510081.919985,144970.351985 510080.854985,144973.430985 510080.840985,144983.058985 510081.509985,144987.516985 510082.067985,144997.989985 510084.944985,145001.100985 510085.352985,145018.225985 510086.588985,145031.277985 510087.813985,145034.023985 510087.583985,145038.746985 510086.578985,145043.185985 510085.397985,145047.248985 510083.622985,145048.202985 510082.830985,145050.585985 510078.877985,145051.978985 510074.620985,145056.128985 510060.096985,145057.553985 510055.831985,145063.088985 510042.322985,145066.150985 510034.166985,145069.126985 510025.644985,145071.569985 510017.003985,145072.764985 510011.254985,145073.282985 510006.603985,145072.958985 510002.462985,145072.176985 510001.292985,145067.525985 509999.999985,144820.948985 509999.999985,144819.191985 510006.807985,144817.797985 510013.075985,144817.072985 510017.518985,144816.707985 510022.887985,144816.139985 510027.720985,144815.755985 510030.023985,144814.530985 510034.358985,144813.610985 510047.578985,144813.566985 510049.397985,144814.106985 510057.207985,144813.995985 510061.708985,144813.679985 510066.204985,144813.429985 510068.372985,144811.294985 510078.502985,144810.411985 510093.065985,144808.486985 510108.070985,144806.898985 510131.620985,144806.743985 510136.109985,144806.915985 510141.233985,144807.389985 510145.737985,144808.036985 510148.932985,144809.863985 510153.023985,144814.180985 510159.646985,144816.820985 510162.931985,144819.994985 510166.132985,144823.469985 510168.999985,144830.897985 510173.260985,144834.408985 510176.059985,144850.660985 510190.157985,144857.639985 510195.848985,144860.332985 510197.867985,144867.177985 510202.050985,144870.801985 510204.797985,144871.522985 510205.641985,144873.715985 510209.796985,144873.726985 510211.088985,144872.243985 510215.158985,144869.975985 510219.190985,144867.963985 510222.524985,144865.436985 510226.291985,144864.099985 510227.714985,144858.836985 510230.898985,144855.291985 510233.691985,144848.874985 510236.316985,144840.763985 510240.217985,144825.553985 510248.383985,144822.676985 510250.294985,144819.567985 510253.537985,144812.468985 510261.818985,144809.626985 510264.829985,144802.536985 510270.407985,144801.628985 510271.304985,144799.024985 510274.943985,144796.656985 510278.806985,144788.849985 510289.744985,144786.429985 510293.536985,144777.870985 510307.318985,144775.474985 510311.721985,144773.491985 510315.763985,144769.628985 510325.155985,144765.706985 510336.945985,144761.518985 510347.475985,144757.242985 510359.461985,144752.043985 510369.948985,144748.608985 510378.269985,144745.802985 510386.171985,144744.461985 510390.470985,144743.491985 510393.920985,144742.009985 510401.644985,144740.079985 510408.376985,144736.020985 510433.511985,144734.117985 510442.308985,144731.955985 510450.373985,144731.311985 510454.824985,144730.521985 510463.096985,144730.379985 510467.588985,144730.705985 510472.313985,144731.923985 510481.243985,144733.045985 510486.401985,144735.374985 510494.319985,144737.113985 510498.490985,144741.895985 510503.842985,144744.758985 510507.317985,144748.950985 510512.901985,144751.358985 510516.696985,144755.859985 510524.387985,144758.284985 510528.189985,144760.097985 510533.152985,144760.327985 510534.309985,144760.479985 510540.156985,144760.990985 510548.451985,144760.920985 510552.976985,144760.519985 510556.218985,144758.114985 510562.443985,144757.126985 510566.831985,144756.006985 510573.652985,144754.061985 510578.134985,144752.979985 510580.233985,144750.126985 510585.466985,144746.174985 510592.112985,144743.798985 510597.851985,144739.787985 510605.468985,144728.326985 510634.151985,144724.192985 510643.531985,144716.312985 510659.718985,144710.915985 510671.895985,144704.293985 510683.664985,144701.675985 510689.308985,144688.772985 510721.296985,144686.795985 510726.842985,144684.601985 510737.943985,144680.325985 510749.929985,144677.804985 510758.571985,144676.148985 510765.873985,144674.837985 510773.544985,144674.582985 510778.037985,144673.654985 510784.687985,144673.065985 510793.668985,144672.865985 510800.351985,144672.925985 510810.570985,144673.228985 510816.790985,144674.961985 510830.004985,144676.832985 510853.625985,144678.406985 510863.803985,144680.015985 510872.072985,144681.138985 510876.426985,144685.448985 510891.059985,144686.723985 510895.230985,144689.315985 510902.640985,144690.423985 510907.002985,144690.926985 510909.521985,144692.208985 510918.431985,144693.494985 510923.676985,144693.735985 510930.081985,144694.095985 510934.577985,144694.246985 510938.376985,144693.763985 510942.859985,144693.358985 510944.665985,144696.127985 510949.162985,144701.143985 510951.096985,144705.788985 510953.835985,144710.002985 510955.607985,144714.455985 510956.265985,144719.900985 510958.442985,144721.946985 510958.696985,144734.595985 510958.578985,144747.238985 510959.113985)) POLYGON((144749.805324897 510825.061482914,144752.789028351 510819.62041865,144757.866524274 510811.355078054,144760.486491976 510806.149454063,144761.923067335 510803.434986066,144767.587610419 510793.24202396,144772.632499225 510781.700720814,144776.712345391 510773.707651011,144785.72556147 510758.388342297,144789.013934301 510752.305514056,144792.041340364 510746.276186408,144796.232065554 510737.269227828,144797.461513493 510734.750933975,144802.851102428 510724.215323211,144812.32672505 510703.739682063,144819.532622703 510687.928601084,144819.986383875 510686.436920937,144821.075239258 510683.134446422,144823.155239258 510677.285446422,144823.755352034 510675.657795175,144829.653168763 510660.214156769,144833.20844985 510649.223161446,144835.021528296 510644.229475959,144838.337343242 510636.016090875,144838.465649457 510635.656016669,144838.893478571 510634.134576393,144843.881842558 510612.679649866,144844.855340723 510607.525798029,144845.786560233 510601.444517867,144846.242579414 510597.339265905,144846.319063859 510596.02232684,144846.597559236 510585.2214948,144846.505245047 510585.158526071,144842.681852769 510582.369811905,144842.420062933 510582.165909314,144830.869719025 510581.69593476,144830.480274411 510583.247819704,144830.403008562 510583.447811353,144830.015933856 510585.805165431,144824.807966602 510603.50972512,144822.862966602 510607.99172512,144820.726062732 510612.499221354,144819.644062732 510614.598221354,144818.829365104 510616.134669394,144815.976365104 510621.367669394,144814.590794636 510623.799963586,144813.402521291 510625.798259296,144813.0949506 510626.541166785,144810.160479719 510632.796970601,144807.977881994 510636.941784083,144797.972947012 510661.980746658,144796.957259087 510664.399058888,144792.823259087 510673.779058888,144791.627021635 510676.359575578,144784.335439559 510691.337854647,144779.483161999 510702.285822749,144776.279551757 510708.673751936,144771.096265127 510717.885787628,144770.516318056 510719.136063131,144759.249566685 510747.067617255,144758.178740747 510752.485684136,144755.241424314 510763.144572561,144751.706995828 510773.051883092,144750.442994832 510777.384884522,144749.737494578 510780.495731656,144749.478023586 510782.013963529,144749.462483862 510782.287767375,144748.863209928 510788.403706614,144748.314579795 510792.335161771,144747.992515989 510797.245951313,144747.872572957 510801.253847731,144747.915266496 510808.525268963,144747.990947665 510810.078855983,144749.325187901 510820.252341544,144749.727807841 510824.08284561,144749.805324897 510825.061482914)) #78 Polygon - gid: 2578 POLYGON((164261.154985 510650.157985,164222.546985 510625.817985,164154.918985 510621.315985,164140.780985 510624.098985,164100.762985 510630.061985,164079.139985 510626.535985,164059.912985 510617.594985,164015.891985 510599.380985,163982.805985 510602.715985,163983.143985 510614.572985,163970.818985 510623.941985,163962.940985 510638.400985,163944.888985 510642.579985,163933.276985 510650.021985,163930.136985 510664.321985,163942.960985 510666.830985,163941.293985 510678.107985,163929.785985 510687.883985,163929.852985 510705.547985,163938.943985 510721.193985,163934.579985 510733.094985,163953.814985 510756.399985,163950.048985 510774.682985,163998.911985 510843.113985,164035.797985 510852.162985,164061.288985 510859.960985,164064.966985 510901.893985,164073.003985 510919.767985,164104.848985 510938.739985,164122.787985 510951.327985,164144.387985 510967.544985,164162.825985 510996.374985,164172.641985 511008.200985,164185.573985 511018.018985,164202.763985 511022.535985,164212.601985 511010.055985,164213.482985 511003.929985,164225.152985 510978.161985,164230.919985 510950.063985,164230.938985 510918.038985,164233.340985 510891.355985,164227.100985 510877.482985,164217.221985 510859.031985,164207.163985 510838.163985,164213.661985 510828.524985,164218.967985 510814.960985,164226.671985 510801.335985,164224.750985 510783.190985,164225.316985 510765.035985,164230.416985 510743.577985,164239.929985 510713.941985,164248.933985 510702.513985,164260.336985 510694.005985,164268.258985 510684.930985,164271.205985 510666.516985,164261.154985 510650.157985)) MULTIPOLYGON(((164014.772946481 510692.038226625,164012.326520825 510702.178274868,164011.527687693 510703.983065768,164012.792704249 510710.315333713,164019.220139731 510719.696228589,164024.701026238 510731.901634901,164027.926009408 510744.88668568,164028.625355324 510755.663210165,164043.789058394 510776.899470009,164053.667376006 510779.322852758,164057.737747794 510780.44376297,164083.228747794 510788.24176297,164096.890697277 510793.949485374,164109.165116963 510802.229918941,164119.573627528 510812.760344693,164127.710570996 510825.130353169,164132.468221954 510836.901739132,164133.325767413 510825.014170419,164137.645626258 510810.01797644,164144.975438653 510796.240427145,164146.837342966 510793.478516453,164149.121889886 510787.638411963,164149.973044149 510785.847891558,164149.787406278 510780.853921626,164150.353406278 510762.698921626,164152.349592409 510747.69356249,164157.449592409 510726.23556249,164159.005822839 510720.655377845,164166.517509919 510697.254099772,164159.752582182 510696.803758128,164155.266414285 510697.686839558,164151.834541591 510698.279972367,164111.816541591 510704.242972367,164100.248309551 510705.06021904,164088.69238323 510704.084282809,164067.06938323 510700.558282809,164047.515386117 510694.54249017,164029.749639703 510686.281006908,164022.566743301 510683.309032735,164019.818736513 510687.28780718,164014.772946481 510692.038226625)),((164136.84918064 510863.064920405,164137.537585488 510870.913446915,164140.559339427 510872.713689205,164139.602082474 510870.727604686,164136.84918064 510863.064920405))) #79 Polygon - gid: 2579 POLYGON((161163.886985 511013.234985,161189.226985 511008.259985,161204.882985 511010.529985,161216.939985 511017.641985,161227.792985 511024.762985,161248.543985 511023.948985,161299.183985 511005.191985,161318.473985 510994.650985,161337.727985 510983.346985,161348.559985 510978.469985,161375.078985 510969.443985,161394.349985 510955.624985,161394.328985 510946.004985,161386.939985 510926.037985,161379.543985 510910.182985,161373.427985 510893.386985,161363.695985 510872.502985,161346.474985 510842.958985,161332.028985 510828.673985,161317.614985 510828.796985,161308.031985 510836.768985,161299.658985 510853.659985,161291.142985 510866.375985,161274.318985 510871.326985,161257.475985 510869.066985,161241.807985 510872.311985,161238.216985 510879.558985,161240.655985 510891.564985,161229.883985 510913.302985,161231.180985 510932.556985,161185.371985 510950.503985,161191.407985 510980.108985,161185.480985 510984.191985,161121.102985 510988.479985,161103.734985 510957.896985,161083.239985 510960.482985,161098.380985 511024.842985,161108.119985 511034.441985,161137.241985 511023.833985,161163.886985 511013.234985)) POLYGON( EMPTY) #80 Polygon - gid: 2580 POLYGON((153813.688985 511062.953985,153835.321985 511057.586985,153844.786985 511047.891985,153846.824985 511035.417985,153842.431985 511021.764985,153850.025985 511008.873985,153863.361985 510999.755985,153876.654985 510996.614985,153892.257985 510993.431985,153902.800985 510983.707985,153905.732985 510969.043985,153904.396985 510957.029985,153901.984985 510954.939985,153890.617985 510951.489985,153860.008985 510941.167985,153846.688985 510938.404985,153830.265985 510936.142985,153810.244985 510933.880985,153789.735985 510928.797985,153776.421985 510929.931985,153733.777985 510924.325985,153700.997985 510915.447985,153687.636985 510916.347985,153676.673985 510919.325985,153663.820985 510943.732985,153641.900985 510991.329985,153631.225985 511030.452985,153671.961985 511040.388985,153697.242985 511041.748985,153714.534985 511045.144985,153735.736985 511055.102985,153749.989985 511063.251985,153773.223985 511062.327985,153792.770985 511065.572985,153813.688985 511062.953985)) POLYGON( EMPTY) #81 Polygon - gid: 2581 POLYGON((144665.365985 511341.906985,144664.510985 511337.457985,144663.984985 511333.542985,144661.230985 511335.031985,144656.989985 511336.582985,144654.973985 511336.925985,144649.894985 511337.240985,144645.424985 511337.740985,144643.682985 511337.588985,144639.352985 511336.370985,144637.147985 511334.599985,144633.775985 511330.501985,144631.204985 511326.779985,144628.821985 511322.413985,144627.874985 511317.609985,144627.824985 511311.225985,144628.204985 511306.750985,144629.551985 511302.647985,144631.234985 511298.457985,144632.940985 511294.276985,144634.697985 511290.801985,144636.006985 511286.610985,144635.336985 511282.657985,144632.316985 511273.996985,144630.183985 511267.028985,144629.061985 511262.662985,144628.107985 511257.545985,144627.616985 511253.074985,144627.010985 511243.356985,144627.072985 511241.389985,144627.116985 511234.355985,144626.579985 511230.453985,144622.517985 511209.850985,144621.773985 511205.415985,144620.186985 511189.774985,144618.065985 511174.597985,144617.482985 511167.000985,144617.043985 511158.007985,144616.767985 511145.828985,144617.268985 511137.576985,144620.089985 511116.855985,144620.822985 511112.419985,144623.492985 511101.825985,144624.945985 511094.587985,144627.469985 511086.420985,144630.555985 511069.704985,144634.070985 511056.450985,144634.616985 511052.168985,144634.472985 511051.111985,144631.341985 511047.649985,144625.618985 511056.693985,144623.466985 511060.456985,144613.544985 511081.937985,144608.763985 511093.902985,144604.703985 511101.953985,144604.128985 511103.439985,144602.908985 511107.755985,144601.369985 511115.489985,144598.939985 511130.473985,144596.298985 511140.582985,144594.291985 511149.356985,144592.663985 511157.537985,144591.198985 511166.160985,144589.244985 511181.651985,144588.862985 511187.962985,144587.885985 511195.707985,144587.384985 511203.960985,144586.684985 511208.405985,144584.601985 511224.769985,144584.400985 511229.274985,144582.378985 511236.355985,144581.725985 511240.804985,144581.099985 511248.591985,144581.095985 511253.941985,144581.897985 511269.049985,144581.451985 511276.710985,144581.585985 511281.208985,144582.173985 511289.881985,144582.056985 511291.823985,144575.283985 511305.626985,144572.076985 511322.283985,144568.363985 511349.427985,144566.469985 511360.018985,144564.565985 511367.244985,144560.273985 511380.836985,144557.896985 511388.835985,144555.477985 511397.505985,144553.900985 511404.108985,144552.233985 511412.954985,144551.618985 511417.905985,144549.373985 511444.507985,144547.950985 511456.490985,144547.265985 511469.973985,144545.938985 511482.897985,144544.783985 511500.860985,144543.674985 511514.445985,144543.507985 511521.138985,144543.695985 511525.637985,144544.907985 511534.198985,144545.816985 511543.153985,144546.797985 511550.352985,144551.118985 511574.736985,144551.888985 511582.932985,144552.571985 511587.378985,144555.698985 511605.441985,144558.436985 511618.524985,144558.653985 511620.435985,144558.639985 511624.942985,144558.299985 511628.256985,144565.200985 511620.333985,144568.479985 511617.196985,144569.415985 511612.446985,144570.165985 511606.524985,144570.813985 511597.777985,144571.561985 511593.330985,144572.193985 511590.917985,144573.736985 511586.693985,144577.541985 511578.519985,144579.708985 511574.574985,144582.277985 511570.335985,144584.829985 511566.786985,144587.868985 511563.470985,144591.176985 511560.405985,144594.825985 511557.595985,144596.719985 511556.343985,144602.203985 511553.326985,144608.153985 511548.349985,144619.625985 511542.308985,144623.156985 511539.530985,144631.920985 511531.965985,144635.205985 511527.763985,144641.644985 511518.581985,144647.686985 511508.167985,144651.603985 511502.244985,144655.044985 511497.794985,144658.227985 511494.613985,144668.411985 511483.048985,144672.012985 511478.307985,144675.713985 511475.049985,144678.988985 511470.922985,144681.256985 511466.552985,144685.996985 511456.770985,144687.908985 511451.367985,144691.283985 511443.499985,144692.095985 511439.073985,144693.475985 511434.284985,144694.371985 511429.253985,144694.509985 511427.819985,144694.410985 511423.320985,144694.807985 511417.069985,144694.285985 511412.598985,144692.567985 511405.382985,144691.736985 511400.949985,144689.740985 511395.877985,144687.240985 511390.324985,144685.113985 511384.496985,144683.189985 511380.429985,144681.438985 511376.739985,144679.837985 511372.530985,144678.788985 511369.942985,144673.535985 511360.160985,144668.260985 511351.627985,144666.478985 511346.301985,144665.365985 511341.906985)) POLYGON( EMPTY) #82 Polygon - gid: 2582 POLYGON((150793.118985 511863.872985,150782.435985 511854.966985,150773.079985 511846.582985,150769.853985 511843.245985,150766.986985 511839.782985,150761.511985 511832.617985,150758.605985 511829.192985,150754.526985 511825.034985,150751.182985 511821.998985,150747.703985 511819.159985,150745.002985 511817.382985,150740.884985 511815.528985,150736.708985 511814.410985,150732.238985 511813.744985,150725.323985 511813.170985,150720.857985 511813.353985,150717.259985 511814.287985,150711.627985 511816.933985,150702.186985 511822.826985,150698.518985 511825.423985,150696.368985 511827.525985,150684.761985 511840.202985,150681.550985 511843.503985,150678.272985 511846.599985,150674.783985 511849.436985,150669.637985 511852.923985,150665.663985 511855.000985,150661.936985 511856.225985,150656.873985 511856.914985,150652.348985 511856.798985,150647.905985 511856.025985,150645.239985 511855.186985,150641.073985 511853.447985,150636.151985 511851.082985,150628.316985 511846.527985,150624.260985 511844.691985,150620.988985 511843.836985,150616.496985 511843.242985,150611.814985 511842.919985,150607.312985 511842.716985,150602.796985 511842.724985,150598.313985 511843.011985,150596.601985 511843.287985,150592.221985 511844.505985,150587.641985 511845.379985,150583.110985 511845.114985,150578.119985 511843.789985,150574.644985 511840.859985,150566.899985 511831.685985,150563.749985 511828.530985,150562.674985 511827.708985,150554.656985 511823.535985,150545.568985 511816.704985,150540.506985 511813.718985,150530.264985 511808.717985,150526.014985 511807.641985,150524.251985 511807.730985,150515.536985 511810.459985,150509.160985 511811.415985,150500.505985 511813.304985,150490.484985 511815.200985,150479.709985 511816.692985,150470.899985 511818.531985,150462.891985 511820.493985,150458.194985 511821.964985,150445.836985 511827.404985,150439.625985 511829.715985,150435.355985 511831.140985,150422.598985 511834.889985,150419.093985 511836.166985,150399.357985 511844.231985,150390.792985 511848.186985,150386.777985 511850.257985,150382.945985 511852.571985,150380.704985 511854.175985,150377.924985 511857.651985,150377.614985 511859.079985,150377.897985 511868.209985,150376.511985 511876.021985,150376.611985 511877.158985,150379.114985 511885.853985,150380.117985 511890.230985,150380.935985 511898.667985,150381.832985 511915.743985,150382.366985 511932.541985,150382.275985 511937.039985,150381.956985 511940.848985,150381.344985 511945.308985,150381.694985 511947.764985,150384.059985 511951.718985,150387.229985 511954.008985,150396.270985 511958.492985,150415.434985 511967.136985,150427.214985 511971.698985,150435.461985 511975.194985,150439.538985 511977.090985,150442.724985 511978.823985,150450.449985 511983.451985,150461.357985 511990.730985,150470.449985 511996.184985,150476.812985 512000.277985,150486.281985 512004.468985,150498.388985 512009.375985,150506.829985 512012.490985,150515.408985 512015.156985,150519.751985 512016.347985,150529.479985 512018.627985,150538.331985 512020.289985,150542.988985 512021.027985,150551.938985 512021.972985,150568.897985 512022.823985,150577.823985 512023.998985,150585.204985 512025.356985,150590.396985 512025.748985,150594.855985 512025.332985,150603.774985 512023.841985,150612.102985 512022.714985,150617.473985 512021.715985,150621.801985 512020.489985,150636.118985 512015.843985,150644.319985 512013.498985,150645.997985 512012.737985,150661.643985 512004.213985,150668.485985 511999.122985,150671.737985 511997.405985,150679.881985 511993.545985,150696.995985 511983.795985,150705.252985 511978.647985,150720.985985 511967.981985,150724.570985 511965.274985,150726.337985 511963.711985,150732.784985 511957.421985,150738.545985 511953.334985,150742.362985 511950.937985,150749.200985 511947.223985,150750.312985 511946.426985,150753.762985 511943.523985,150759.775985 511938.828985,150769.269985 511930.492985,150772.469985 511927.344985,150775.669985 511922.275985,150776.549985 511921.269985,150779.777985 511918.119985,150782.178985 511915.393985,150785.867985 511911.585985,150793.096985 511906.023985,150796.180985 511902.741985,150798.947985 511899.183985,150800.512985 511896.731985,150803.753985 511890.480985,150805.353985 511886.291985,150805.688985 511883.904985,150805.356985 511879.352985,150802.648985 511875.749985,150797.659985 511868.435985,150796.383985 511866.983985,150793.118985 511863.872985)) POLYGON((150457.10488879 511902.90912939,150464.733870064 511906.143144005,150467.087964112 511907.189121685,150471.164964112 511909.085121685,150475.376080646 511911.206976503,150478.562080646 511912.939976503,150481.269290797 511914.486309485,150488.994290797 511919.114309485,150492.08021185 511921.066696571,150501.486797912 511927.343790442,150509.030924817 511931.869270879,150511.024338606 511933.107874813,150512.491255491 511934.051469158,150515.55259617 511935.406425202,150525.464472069 511939.423735439,150530.957806829 511941.45095233,150536.461059094 511943.161136564,150538.233258087 511943.647134491,150544.964737503 511945.224824979,150551.123863489 511946.381226628,150552.802642224 511946.647264572,150557.760384086 511947.17073564,150572.656744079 511947.918232683,150578.686383311 511948.465480049,150587.612383311 511949.640480049,150590.267735925 511950.059246398,150591.408748513 511949.868501946,150593.717167366 511949.519442629,150600.209475453 511948.640860591,150600.252315061 511948.632892472,150612.969191529 511944.506147479,150615.49980374 511943.73400397,150616.316038105 511943.500609313,150621.116996024 511940.885029273,150623.714257734 511938.952457018,150633.468454743 511932.799741904,150636.720454743 511931.082741904,150638.019151806 511930.432505435,150635.050484011 511929.916012029,150625.391778503 511927.56695582,150622.725778503 511926.72795582,150616.34901009 511924.399061755,150612.18301009 511922.660061755,150608.591920771 511921.049135163,150603.669920771 511918.684135163,150603.656921969 511918.677247374,150601.700523332 511919.050586328,150583.263019067 511920.25204025,150578.732019067 511919.98704025,150563.866752358 511917.604015274,150558.875752358 511916.279015274,150543.486379129 511910.314516899,150529.774245546 511901.128361997,150526.299245546 511898.198361997,150517.336788462 511889.24149603,150515.759481157 511887.373165854,150514.988775912 511886.887589413,150514.448819526 511886.997571909,150504.427819526 511888.893571909,150500.771984776 511889.492152952,150492.530977352 511890.633274351,150487.491266548 511891.685263927,150484.051346716 511892.528061469,150476.053921669 511896.04853341,150471.991319844 511897.696881893,150465.780319844 511900.007881893,150463.368057644 511900.858897413,150459.098057644 511902.283897413,150457.10488879 511902.90912939)) #83 Polygon - gid: 2583 POLYGON((156449.341985 511947.023985,156464.014985 511945.970985,156481.530985 511959.981985,156488.552985 511957.898985,156502.465985 511951.515985,156519.696985 511967.276985,156532.436985 511968.984985,156546.765985 511960.382985,156557.920985 511953.685985,156617.345985 511926.606985,156650.552985 511912.686985,156629.697985 511893.765985,156618.726985 511870.069985,156571.803985 511869.954985,156520.017985 511866.320985,156489.605985 511875.922985,156479.281985 511900.711985,156450.551985 511915.185985,156420.762985 511933.429985,156402.252985 511952.078985,156397.242985 511979.578985,156395.515985 512016.444985,156378.536985 512022.679985,156378.119985 512031.838985,156381.340985 512046.684985,156381.973985 512059.782985,156387.971985 512068.254985,156389.726985 512093.748985,156394.837985 512106.687985,156406.149985 512102.202985,156420.544985 512083.467985,156439.940985 512083.059985,156434.834985 512074.138985,156430.875985 512065.561985,156431.200985 512050.264985,156442.042985 512026.074985,156436.831985 511998.762985,156428.771985 511968.333985,156449.341985 511947.023985)) POLYGON( EMPTY) #84 Polygon - gid: 2584 POLYGON((155602.027985 512384.736985,155651.324985 512362.529985,155690.321985 512347.470985,155728.819985 512327.098985,155734.742985 512356.836985,155759.349985 512351.936985,155787.291985 512340.198985,155805.031985 512324.680985,155807.589985 512298.852985,155807.126985 512268.633985,155818.253985 512240.316985,155826.566985 512208.914985,155827.900985 512153.049985,155845.759985 512111.821985,155872.507985 512069.193985,155889.837985 512044.252985,155912.490985 512003.645985,155927.073985 511997.027985,155950.234985 512000.369985,155966.659985 511999.703985,155977.448985 511982.546985,155986.844985 511959.429985,155997.767985 511948.403985,156006.318985 511939.771985,156026.620985 511926.970985,156045.097985 511907.642985,156056.068985 511885.544985,156051.584985 511870.282985,156034.120985 511859.853985,156026.020985 511861.511985,156014.495985 511863.870985,155993.202985 511891.082985,155979.638985 511907.819985,155960.158985 511915.091985,155951.804985 511911.642985,155944.020985 511895.340985,155936.829985 511869.525985,155922.587985 511855.727985,155888.814985 511836.983985,155840.846985 511835.381985,155800.677985 511839.829985,155775.670985 511860.233985,155774.333985 511899.906985,155795.411985 511943.754985,155816.206985 511963.053985,155845.433985 511975.560985,155878.744985 511980.178985,155881.067985 511998.835985,155876.445985 512018.197985,155856.169985 512033.153985,155847.373985 512031.370985,155820.826985 512018.441985,155810.139985 512012.400985,155794.109985 512003.338985,155772.511985 512000.769985,155747.437985 512018.467985,155743.449985 512037.075985,155734.345985 512063.507985,155719.020985 512086.564985,155704.834985 512109.490985,155702.872985 512125.983985,155716.012985 512136.488985,155732.291985 512135.876985,155741.646985 512132.513985,155752.134985 512114.732985,155766.085985 512102.084985,155788.547985 512103.687985,155796.852985 512111.554985,155796.473985 512128.617985,155787.305985 512152.726985,155777.070985 512175.994985,155766.262985 512204.174985,155762.622985 512221.408985,155755.035985 512230.476985,155736.132985 512235.898985,155721.747985 512236.656985,155705.074985 512229.699985,155686.855985 512217.112985,155670.731985 512211.063985,155654.433985 512228.409985,155640.417985 512242.145985,155618.476985 512253.328985,155601.188985 512251.812985,155596.704985 512241.110985,155597.324985 512234.943985,155608.428985 512222.055985,155617.613985 512215.614985,155621.498985 512204.875985,155620.091985 512189.821985,155601.632985 512166.310985,155571.728985 512189.472985,155512.046985 512240.386985,155484.043985 512264.760985,155478.016985 512282.219985,155490.242985 512305.307985,155510.088985 512325.660985,155531.257985 512342.424985,155545.862985 512369.388985,155548.396985 512380.288985,155551.240985 512378.547985,155571.923985 512396.101985,155602.027985 512384.736985)) POLYGON( EMPTY) #85 Polygon - gid: 2585 POLYGON((158639.754985 512372.943985,158642.449985 512349.639985,158651.455985 512332.998985,158654.537985 512321.227985,158662.359985 512307.021985,158667.084985 512302.182985,158674.148985 512294.948985,158682.389985 512285.305985,158690.575985 512270.902985,158694.679985 512247.278985,158692.208985 512240.181985,158683.712985 512228.424985,158668.883985 512217.032985,158646.555985 512214.750985,158627.649985 512229.323985,158617.422985 512243.507985,158608.087985 512260.305985,158586.772985 512272.531985,158565.598985 512272.645985,158544.191985 512277.739985,158539.545985 512287.325985,158537.795985 512315.696985,158533.147985 512325.284985,158525.175985 512334.748985,158523.574985 512355.881985,158524.640985 512365.547985,158529.449985 512367.856985,158536.445985 512375.035985,158563.901985 512374.626985,158573.392985 512369.724985,158581.691985 512364.839985,158593.207985 512355.298985,158604.326985 512359.738985,158609.225985 512369.189985,158611.793985 512383.436985,158613.851985 512401.113985,158626.612985 512394.997985,158634.009985 512385.227985,158638.305985 512373.378985,158639.754985 512372.943985)) POLYGON( EMPTY) #86 Polygon - gid: 2586 POLYGON((155727.202985 512684.126985,155741.919985 512679.921985,155754.534985 512679.921985,155769.250985 512673.614985,155781.865985 512667.307985,155798.163985 512654.965985,155820.165985 512662.878985,155835.705985 512670.729985,155850.180985 512672.093985,155857.418985 512672.776985,155870.184985 512655.342985,155879.069985 512649.526985,155883.511985 512646.618985,155904.577985 512658.609985,155930.402985 512657.713985,155952.915985 512644.276985,155976.753985 512624.405985,155979.221985 512607.413985,156006.945985 512594.025985,156026.550985 512576.591985,156049.621985 512550.417985,156054.729985 512531.129985,156054.755985 512505.514985,156044.897985 512478.134985,156019.611985 512455.590985,156003.719985 512436.978985,155985.013985 512416.265985,155959.225985 512408.307985,155929.903985 512411.681985,155923.048985 512441.509985,155927.659985 512492.523985,155928.478985 512511.588985,155908.647985 512524.923985,155882.165985 512527.804985,155865.679985 512509.153985,155855.593985 512479.621985,155854.702985 512472.706985,155852.030985 512451.962985,155847.595985 512433.051985,155825.610985 512418.598985,155813.750985 512399.623985,155799.230985 512404.242985,155778.543985 512443.422985,155785.678985 512477.221985,155802.478985 512510.914985,155793.319985 512534.784985,155772.281985 512535.697985,155760.161985 512563.378985,155745.307985 512608.348985,155729.305985 512650.488985,155722.998985 512656.795985,155712.486985 512652.590985,155693.564985 512646.283985,155625.087985 512605.101985,155576.978985 512579.241985,155565.134985 512573.289985,155585.397985 512555.877985,155608.591985 512548.877985,155605.820985 512529.964985,155602.102985 512511.257985,155573.935985 512503.813985,155483.898985 512506.544985,155470.203985 512506.897985,155425.981985 512510.850985,155377.120985 512514.465985,155322.665985 512512.452985,155316.148985 512512.497985,155316.519985 512514.568985,155310.172985 512526.065985,155306.522985 512576.960985,155296.149985 512617.554985,155292.347985 512627.995985,155313.655985 512633.929985,155348.186985 512651.970985,155370.507985 512655.437985,155395.810985 512650.471985,155419.682985 512637.003985,155449.809985 512621.252985,155479.012985 512613.969985,155504.153985 512617.337985,155528.206985 512637.756985,155555.101985 512657.978985,155582.666985 512663.452985,155608.860985 512671.327985,155653.082985 512686.633985,155695.712985 512698.015985,155710.383985 512700.946985,155718.793985 512694.638985,155727.202985 512684.126985)) POLYGON( EMPTY) #87 Polygon - gid: 2587 POLYGON((146166.976985 512563.940985,146169.594985 512563.533985,146174.055985 512564.781985,146177.356985 512561.339985,146181.129985 512554.989985,146185.373985 512548.630985,146189.013985 512541.920985,146194.870985 512530.011985,146198.574985 512521.811985,146202.486985 512510.766985,146206.272985 512502.588985,146208.002985 512498.444985,146209.826985 512492.155985,146212.021985 512482.022985,146213.069985 512474.579985,146213.899985 512465.609985,146214.122985 512461.084985,146213.982985 512452.080985,146213.290985 512444.415985,146211.750985 512435.542985,146210.899985 512432.081985,146209.279985 512427.626985,146202.014985 512417.721985,146193.565985 512405.040985,146190.827985 512399.745985,146189.280985 512395.443985,146188.608985 512391.002985,146188.735985 512383.754985,146189.509985 512374.731985,146190.957985 512365.827985,146193.621985 512354.666985,146196.283985 512346.008985,146199.521985 512337.449985,146202.058985 512333.521985,146205.570985 512330.766985,146209.847985 512330.235985,146220.199985 512330.990985,146232.889985 512334.095985,146236.718985 512336.497985,146243.325985 512339.763985,146249.933985 512343.512985,146258.162985 512349.266985,146262.031985 512352.246985,146265.456985 512355.165985,146272.146985 512361.243985,146278.196985 512367.051985,146281.562985 512370.018985,146283.636985 512371.307985,146288.761985 512373.835985,146292.889985 512375.617985,146295.481985 512376.220985,146299.968985 512376.458985,146303.856985 512375.344985,146308.377985 512373.216985,146316.009985 512368.440985,146319.433985 512366.733985,146324.146985 512364.674985,146334.262985 512360.634985,146338.382985 512358.815985,146343.177985 512356.459985,146352.192985 512351.076985,146356.303985 512348.809985,146360.631985 512347.534985,146365.076985 512346.785985,146369.540985 512346.711985,146374.638985 512347.185985,146383.481985 512348.875985,146386.523985 512348.970985,146391.031985 512348.741985,146396.693985 512348.157985,146398.836985 512347.264985,146402.911985 512345.190985,146406.601985 512342.664985,146407.369985 512341.866985,146413.207985 512329.834985,146414.615985 512325.605985,146415.160985 512322.986985,146415.639985 512318.282985,146415.082985 512313.996985,146413.604985 512312.108985,146409.418985 512309.747985,146407.116985 512308.829985,146402.755985 512307.423985,146394.786985 512303.239985,146391.945985 512301.969985,146387.707985 512300.465985,146384.157985 512299.758985,146373.077985 512298.308985,146371.668985 512297.962985,146366.140985 512295.894985,146362.222985 512293.667985,146360.086985 512292.216985,146355.784985 512288.717985,146352.559985 512285.575985,146348.870985 512281.607985,146346.171985 512278.002985,146344.075985 512274.769985,146341.569985 512269.924985,146339.050985 512260.216985,146339.079985 512246.711985,146338.564985 512238.156985,146338.130985 512233.677985,146335.336985 512214.430985,146334.344985 512210.061985,146332.244985 512204.923985,146330.093985 512200.952985,146327.794985 512197.206985,146324.899985 512193.795985,146321.434985 512191.598985,146317.091985 512189.432985,146309.323985 512184.888985,146303.936985 512181.457985,146300.355985 512178.763985,146298.733985 512177.197985,146295.789985 512172.900985,146294.087985 512168.735985,146292.744985 512164.191985,146290.697985 512155.428985,146288.537985 512143.477985,146287.578985 512134.336985,146287.272985 512129.846985,146287.102985 512123.380985,146287.228985 512114.373985,146287.112985 512109.880985,146286.374985 512101.930985,146284.902985 512090.429985,146283.740985 512081.485985,146282.851985 512077.088985,146280.837985 512070.639985,146275.584985 512056.262985,146273.874985 512052.114985,146273.243985 512050.980985,146254.611985 512024.878985,146248.543985 512017.815985,146245.732985 512014.270985,146243.655985 512010.600985,146243.852985 512008.166985,146246.012985 512003.791985,146252.863985 511979.961985,146254.225985 511974.758985,146255.146985 511970.352985,146257.351985 511957.390985,146257.964985 511952.925985,146258.260985 511948.133985,146257.735985 511943.629985,146256.366985 511939.322985,146254.473985 511936.211985,146251.644985 511932.639985,146247.278985 511926.685985,146233.230985 511908.799985,146222.941985 511895.214985,146212.626985 511883.086985,146203.013985 511872.601985,146198.631985 511866.609985,146192.859985 511859.687985,146189.793985 511856.402985,146187.793985 511854.542985,146180.824985 511848.828985,146174.327985 511842.730985,146170.156985 511839.261985,146166.346985 511836.872985,146162.414985 511834.655985,146155.353985 511830.943985,146151.558985 511828.564985,146150.071985 511827.399985,146146.718985 511824.409985,146131.468985 511809.734985,146128.133985 511806.716985,146124.322985 511803.666985,146120.556985 511801.187985,146116.544985 511799.068985,146112.378985 511797.359985,146112.171985 511800.770985,146111.199985 511805.322985,146109.552985 511809.493985,146107.855985 511811.576985,146103.683985 511814.013985,146095.647985 511813.349985,146091.150985 511813.203985,146082.184985 511813.362985,146080.884985 511813.180985,146076.120985 511811.909985,146071.102985 511810.343985,146066.266985 511808.030985,146061.890985 511806.956985,146060.071985 511806.842985,146055.518985 511805.799985,146053.676985 511801.503985,146053.392985 511796.956985,146052.060985 511798.081985,146048.202985 511800.432985,146046.939985 511800.933985,146041.831985 511802.104985,146033.783985 511803.032985,146021.534985 511804.853985,146010.430985 511805.941985,146001.961985 511808.986985,145999.868985 511809.336985,145993.249985 511809.685985,145988.748985 511809.704985,145972.952985 511808.649985,145968.456985 511808.614985,145962.536985 511809.137985,145955.586985 511810.173985,145946.751985 511811.900985,145931.180985 511815.560985,145923.630985 511815.211985,145921.449985 511815.416985,145916.390985 511816.456985,145912.040985 511817.607985,145899.094985 511821.446985,145898.671985 511827.626985,145897.959985 511833.437985,145896.272985 511842.280985,145894.388985 511851.014985,145893.746985 511866.238985,145892.513985 511880.048985,145892.097985 511882.450985,145891.100985 511886.840985,145886.859985 511899.482985,145880.730985 511914.091985,145878.241985 511922.288985,145876.483985 511926.259985,145871.473985 511927.983985,145867.052985 511928.834985,145851.133985 511929.639985,145846.673985 511930.725985,145844.102985 511934.297985,145839.483985 511943.835985,145835.917985 511952.104985,145834.022985 511955.925985,145833.089985 511959.888985,145834.858985 511961.248985,145839.696985 511961.704985,145847.667985 511964.562985,145851.967985 511965.836985,145857.630985 511965.736985,145861.503985 511967.145985,145867.018985 511969.482985,145871.317985 511970.809985,145879.898985 511972.132985,145888.307985 511975.341985,145891.449985 511976.221985,145897.298985 511977.362985,145906.240985 511978.406985,145912.375985 511979.747985,145920.173985 511980.489985,145927.160985 511981.356985,145931.603985 511982.135985,145935.971985 511983.195985,145941.276985 511984.958985,145949.658985 511988.269985,145953.697985 511989.930985,145957.682985 511991.993985,145960.523985 511994.105985,145965.656985 511999.048985,145971.858985 512005.613985,145974.677985 512009.092985,145976.774985 512012.567985,145978.664985 512017.548985,145978.930985 512022.067985,145978.934985 512030.767985,145980.033985 512039.324985,145980.355985 512043.792985,145979.736985 512049.515985,145974.978985 512077.720985,145970.939985 512094.710985,145970.097985 512099.899985,145969.429985 512104.353985,145968.212985 512110.362985,145963.403985 512127.711985,145959.777985 512138.566985,145958.219985 512142.787985,145954.919985 512150.579985,145954.316985 512152.865985,145950.023985 512173.319985,145949.268985 512177.747985,145948.670985 512184.400985,145948.801985 512188.872985,145949.475985 512191.375985,145951.382985 512196.412985,145955.761985 512214.480985,145957.308985 512218.688985,145958.951985 512221.666985,145965.956985 512232.465985,145968.169985 512236.379985,145971.396985 512243.185985,145972.893985 512247.412985,145974.089985 512252.919985,145975.258985 512261.871985,145975.389985 512263.170985,145975.261985 512267.671985,145974.422985 512270.700985,145972.905985 512274.963985,145970.962985 512281.855985,145968.886985 512288.012985,145966.777985 512291.988985,145962.060985 512296.906985,145960.735985 512298.727985,145958.760985 512302.764985,145957.946985 512308.248985,145956.867985 512324.439985,145956.311985 512329.454985,145954.998985 512333.765985,145953.531985 512341.807985,145952.899985 512346.276985,145952.677985 512352.128985,145953.306985 512356.903985,145955.010985 512360.832985,145956.774985 512361.674985,145962.064985 512362.327985,145966.355985 512363.971985,145970.113985 512366.364985,145972.275985 512368.577985,145975.177985 512372.065985,145977.783985 512375.818985,145980.028985 512379.722985,145980.947985 512381.625985,145982.588985 512385.838985,145983.846985 512390.212985,145984.753985 512394.622985,145985.225985 512398.653985,145985.264985 512403.214985,145984.759985 512407.672985,145984.234985 512409.635985,145980.270985 512418.610985,145977.746985 512427.267985,145976.275985 512431.506985,145974.447985 512435.293985,145972.231985 512439.224985,145969.560985 512444.528985,145966.183985 512453.477985,145964.959985 512457.841985,145964.811985 512462.320985,145964.972985 512483.908985,145966.055985 512493.902985,145966.394985 512498.383985,145966.345985 512501.348985,145965.651985 512510.442985,145966.007985 512515.207985,145967.991985 512519.177985,145970.988985 512523.506985,145981.550985 512539.664985,145983.874985 512543.507985,145985.060985 512545.952985,145986.235985 512550.291985,145983.358985 512554.463985,145979.245985 512556.198985,145974.914985 512557.683985,145968.780985 512560.209985,145965.765985 512560.497985,145959.080985 512560.161985,145954.623985 512559.494985,145947.257985 512557.988985,145942.825985 512557.286985,145938.688985 512556.844985,145934.331985 512557.437985,145932.222985 512558.727985,145928.878985 512561.837985,145925.633985 512565.565985,145922.904985 512569.126985,145914.850985 512580.807985,145912.164985 512584.415985,145905.868985 512591.644985,145894.297985 512609.011985,145889.770985 512616.314985,145882.367985 512628.854985,145879.953985 512632.675985,145877.267985 512636.269985,145874.109985 512639.263985,145869.573985 512643.201985,145859.814985 512652.529985,145850.545985 512661.964985,145845.579985 512667.687985,145842.865985 512671.301985,145840.476985 512675.106985,145838.542985 512678.871985,145836.761985 512683.029985,145835.290985 512687.282985,145834.663985 512692.058985,145833.664985 512697.458985,145832.411985 512701.812985,145831.523985 512706.199985,145831.460985 512712.157985,145832.017985 512721.523985,145832.476985 512725.999985,145833.300985 512728.179985,145836.406985 512734.549985,145838.616985 512738.457985,145840.467985 512740.636985,145843.809985 512743.682985,145846.311985 512745.633985,145849.977985 512748.254985,145854.914985 512751.492985,145860.112985 512754.126985,145878.402985 512762.178985,145898.977985 512770.121985,145903.383985 512771.155985,145907.855985 512770.825985,145912.244985 512769.534985,145914.149985 512768.607985,145917.905985 512766.050985,145929.966985 512758.667985,145933.945985 512756.582985,145937.171985 512755.312985,145941.494985 512754.031985,145945.543985 512753.171985,145953.081985 512751.955985,145960.672985 512750.985985,145965.480985 512750.093985,145973.107985 512745.253985,145975.481985 512743.387985,145978.768985 512740.319985,145981.568985 512736.896985,145986.785985 512729.543985,145992.444985 512719.776985,145996.313985 512714.047985,145999.352985 512710.106985,146008.645985 512699.953985,146032.532985 512667.829985,146036.110985 512662.656985,146041.021985 512655.112985,146046.773985 512645.487985,146061.241985 512626.123985,146063.657985 512622.326985,146074.236985 512610.353985,146077.335985 512607.099985,146083.940985 512601.665985,146089.128985 512596.256985,146090.859985 512595.001985,146096.079985 512592.079985,146100.081985 512589.961985,146104.225985 512588.255985,146107.119985 512587.579985,146111.607985 512586.972985,146116.021985 512586.112985,146118.617985 512585.203985,146127.304985 512581.405985,146134.333985 512579.170985,146138.669985 512577.976985,146146.690985 512576.867985,146149.532985 512576.265985,146153.768985 512574.808985,146154.806985 512574.093985,146158.013985 512570.866985,146163.266985 512566.206985,146166.976985 512563.940985)) POLYGON((145961.546571986 511912.662006029,145964.929660209 511913.786300946,145968.831148249 511915.203927207,145977.213148249 511918.514927207,145978.184122361 511918.906330695,145982.223122361 511920.567330695,145988.178345514 511923.326895495,145992.163345514 511925.389895495,146002.428346021 511931.803847377,146005.269346021 511933.915847377,146012.547718291 511940.082553283,146017.680718291 511945.025553283,146020.175831511 511947.544661152,146026.377831511 511954.109661152,146030.130500873 511958.397140147,146032.949500873 511961.876140147,146038.891918642 511970.342878856,146040.988918642 511973.817878856,146046.896740518 511985.960854318,146048.786740518 511990.941854318,146052.005918251 512001.861170943,146053.535391539 512013.141919689,146053.801391539 512017.660919689,146053.930977073 512022.033502245,146053.93277973 512025.954280873,146054.422971197 512029.770994603,146054.839972833 512033.933864122,146055.161972833 512038.401864122,146054.921099551 512051.857951959,146054.302099551 512057.580951959,146053.692078361 512061.991728103,146048.934078361 512090.196728103,146047.945483201 512095.067170181,146044.535831084 512109.409826645,146044.201732362 512111.468779462,146043.600455739 512115.477890356,146042.937560607 512119.241440403,146041.720560607 512125.250440403,146040.487739668 512130.396952099,146035.678739668 512147.745952099,146034.540145377 512151.474280488,146030.914145377 512162.329280488,146030.138053291 512164.537367942,146028.580053291 512168.758367942,146027.281759347 512172.036426395,146026.57950483 512173.694598273,146024.940649099 512181.502926976,146026.518236958 512188.012143106,146028.878434452 512191.650654561,146031.243915918 512195.552347259,146033.456915918 512199.466347259,146035.938356115 512204.248258055,146039.165356115 512211.054258055,146042.094355838 512218.148378153,146043.591355838 512222.375378153,146046.185453891 512231.495680334,146047.381453891 512237.002680334,146048.458578972 512243.208536569,146049.627578972 512252.160536569,146049.880491616 512254.346644456,146050.011491616 512255.645644456,146050.359676122 512265.302982437,146050.231676122 512269.803982437,146047.540509038 512287.692348707,146046.701509038 512290.721348707,146045.082457196 512295.845347966,146044.409241749 512297.737185443,146043.149165993 512302.206790234,146042.031853863 512305.818786975,146039.955853863 512311.975786975,146035.143089159 512323.157382301,146033.900092563 512325.500746201,146036.782654969 512329.289067883,146039.388654969 512333.042067883,146042.800518365 512338.43114755,146045.045518365 512342.33514755,146047.566044974 512347.107873011,146048.485044974 512349.010873011,146050.833693904 512354.404895916,146052.474693904 512358.617895916,146054.667103858 512365.108698415,146055.925103858 512369.482698415,146057.30935832 512375.104056972,146058.21635832 512379.514056972,146059.245062512 512385.900636058,146059.717062512 512389.931636058,146060.223243322 512398.012701713,146060.262243322 512402.573701713,146059.7883581 512411.656955259,146059.2833581 512416.114955259,146057.213496243 512427.050516025,146056.688496243 512429.013516025,146052.841276933 512439.937415777,146050.883339039 512444.370436111,146049.74912714 512448.260639125,146048.602040581 512451.855809194,146047.131040581 512456.094809194,146043.818802383 512464.110172266,146041.990802383 512467.897172266,146039.885701639 512471.925759398,146039.942773595 512479.578364232,146040.61946415 512485.822912165,146040.842276676 512488.245195917,146041.181276676 512492.726195917,146041.214881873 512493.865328219,146044.32877048 512498.629029421,146045.728476222 512500.854553149,146048.052476222 512504.697553149,146051.355132213 512510.775283735,146052.541132213 512513.220283735,146057.453576793 512526.349091164,146057.783246656 512527.566484813,146059.446185907 512526.635621117,146060.997538858 512525.79105702,146064.999538858 512523.67305702,146071.530800114 512520.609048209,146075.674800114 512518.903048209,146087.166213225 512515.221991634,146090.060213225 512514.545991634,146095.149883514 512513.609553683,146097.260587609 512512.686743259,146104.578561552 512509.932145889,146111.607561552 512507.697145889,146114.422443778 512506.86240649,146118.758443778 512505.66840649,146119.768804542 512505.460385872,146124.173587901 512502.201467244,146125.310248092 512501.507216032,146127.027052853 512498.01644808,146128.929097065 512493.805659059,146131.790404731 512485.727145977,146134.426614427 512479.258478887,146137.160638771 512473.35281299,146138.138723824 512468.83758026,146138.55356072 512465.891367461,146139.070326178 512460.306564851,146139.094263736 512459.820836383,146139.074009868 512458.518223309,146131.150856926 512446.62646068,146126.945590272 512439.489831226,146124.207590272 512434.194831226,146120.252440831 512425.124963807,146118.705440831 512420.822963807,146115.125150132 512406.665043552,146114.453150132 512402.224043552,146113.620495716 512389.689031063,146113.747495716 512382.441031063,146114.010409293 512377.344966647,146114.784409293 512368.321966647,146115.482478327 512362.693369809,146116.930478327 512353.789369809,146118.007278605 512348.415505667,146120.671278605 512337.254505667,146121.93390625 512332.625674578,146124.59590625 512323.967674578,146126.136049455 512319.470953069,146129.374049455 512310.911953069,146136.520249982 512296.758691278,146139.057249982 512292.830691278,146146.650527786 512282.975937982,146155.768390522 512274.511978536,146159.280390522 512271.756978536,146170.629720208 512264.403531091,146183.115063238 512259.207697847,146196.330495087 512256.338406173,146200.607495087 512255.807406173,146215.30345241 512255.434662316,146225.65545241 512256.189662316,146238.02521772 512258.140033884,146250.71521772 512261.245033884,146262.104322338 512265.019777129,146264.860929343 512266.455561697,146264.051157917 512260.055933909,146264.075141688 512248.886939879,146263.831185196 512244.834419908,146263.647011297 512244.717118879,146258.848664716 512241.391643106,146255.267664716 512238.697643106,146248.262583799 512232.720240905,146246.640583799 512231.154240905,146236.862440829 512219.587984079,146233.918440829 512215.290984079,146226.363081824 512201.271834749,146224.661081824 512197.106834749,146222.163612255 512189.993562596,146220.820612255 512185.449562596,146219.711138352 512181.252384873,146217.664138352 512172.489384873,146216.8937512 512168.768215609,146214.7337512 512156.817215609,146213.947353077 512151.303432546,146212.988353077 512142.162432546,146212.752553856 512139.436514606,146212.446553856 512134.946514606,146212.298892925 512131.818156614,146212.128892925 512125.352156614,146212.110322503 512122.331903677,146212.215442812 512114.817470142,146212.202599351 512114.320007444,146211.816466238 512110.160443428,146210.518873503 512100.022118668,146209.861513672 512094.9623714,146209.780118043 512094.701735643,146207.132247706 512087.454746906,146195.526825505 512071.19644236,146191.655494679 512066.690310254,146189.777206437 512064.414973587,146186.966206437 512060.869973587,146180.460987801 512051.211022651,146178.383987801 512047.541022651,146172.379144857 512033.937909804,146169.175992617 512019.417488541,146168.900437923 512004.550515496,146169.097437923 512002.116515496,146171.563840795 511988.185002364,146175.219078694 511978.594789147,146179.898286967 511962.318985156,146174.248642708 511955.125823338,146173.443425464 511954.081854714,146164.435871062 511942.188801302,146156.400986805 511932.741678058,146147.732020724 511923.286345762,146142.475204054 511916.874504711,146139.501988848 511912.808894142,146137.197065522 511910.044743195,146133.271902142 511906.826435899,146129.497770574 511903.514605224,146126.031658823 511900.261357655,146120.454780701 511897.329567315,146115.518307519 511894.490179218,146111.723307519 511892.111179218,146106.696454615 511888.580879625,146097.507919426 511888.75926053,146091.340424848 511888.249651719,146090.59870786 511888.22557107,146083.514800452 511888.351194679,146071.786396658 511887.638616,146070.486396658 511887.456616,146061.55176564 511885.646332782,146056.78776564 511884.375332782,146053.777983367 511883.504609645,146048.759983367 511881.938609645,146043.912861215 511880.034496976,146043.324811988 511879.949292499,146038.771811988 511878.906292499,146037.122148048 511878.360987132,146032.563666518 511879.038674687,146028.848664137 511879.496533841,146026.841995148 511879.693152705,146014.332026289 511882.9598319,146012.239026289 511883.3098319,146003.818024229 511884.232946768,145997.199024229 511884.581946768,145993.566578491 511884.685316788,145989.065578491 511884.704316787,145983.750940641 511884.538263377,145971.08566392 511883.692361443,145968.316353774 511884.105167963,145967.434787875 511884.277489899,145967.216830011 511886.718688686,145966.413880576 511892.847634692,145965.997880576 511895.249634692,145965.235566751 511899.061046277,145964.238566751 511903.451046277,145962.206542228 511910.694700251,145961.546571986 511912.662006029)) #88 Polygon - gid: 2588 POLYGON((167532.477985 512809.448985,167555.559985 512773.894985,167560.645985 512730.879985,167581.079985 512731.212985,167606.259985 512686.118985,167617.210985 512664.753985,167628.468985 512640.940985,167597.450985 512637.978985,167581.803985 512637.728985,167556.555985 512632.534985,167547.781985 512627.528985,167513.601985 512631.705985,167490.695985 512631.340985,167471.007985 512626.155985,167475.732985 512640.627985,167482.838985 512659.940985,167492.745985 512684.143985,167503.099985 512701.159985,167507.038985 512713.225985,167508.550985 512727.632985,167499.191985 512749.026985,167495.486985 512763.329985,167491.846985 512768.058985,167481.381985 512777.436985,167460.916985 512781.885985,167425.096985 512774.037985,167424.939985 512795.525985,167423.600985 512814.612985,167420.790985 512833.544985,167420.668985 512850.249985,167421.333985 512859.894985,167427.557985 512867.347985,167437.147985 512869.901985,167461.115985 512877.483985,167486.197985 512894.246985,167505.321985 512851.981985,167514.324985 512823.525985,167522.807985 512814.080985,167532.477985 512809.448985)) POLYGON( EMPTY) #89 Polygon - gid: 2589 POLYGON((164372.606985 512890.176985,164324.811985 512880.193985,164323.666985 512914.388985,164331.604985 512958.853985,164350.402985 512964.195985,164391.299985 512979.726985,164454.259985 513002.043985,164502.492985 513022.119985,164552.192985 513041.053985,164558.382985 513043.657985,164576.953985 513051.470985,164592.038985 513040.219985,164595.863985 513032.750985,164611.578985 513009.064985,164629.578985 512994.920985,164626.260985 512987.836985,164600.829985 512976.485985,164523.959985 512955.303985,164510.527985 512945.800985,164431.119985 512911.854985,164372.606985 512890.176985)) POLYGON( EMPTY) #90 Polygon - gid: 2590 POLYGON((155418.520985 513085.717985,155400.143985 513071.569985,155370.702985 513097.312985,155348.413985 513124.256985,155334.276985 513145.103985,155324.433985 513167.135985,155314.900985 513197.823985,155293.396985 513250.465985,155281.650985 513277.996985,155264.569985 513307.253985,155252.427985 513331.225985,155236.340985 513356.837985,155217.667985 513407.428985,155244.525985 513419.754985,155271.368985 513429.290985,155283.571985 513410.496985,155322.096985 513324.107985,155339.112985 513295.890985,155349.832985 513271.657985,155363.984985 513253.183985,155421.428985 513170.677985,155456.713985 513126.870985,155443.701985 513110.996985,155418.520985 513085.717985)) POLYGON( EMPTY) #91 Polygon - gid: 2591 POLYGON((166387.863985 513465.987985,166413.814985 513435.239985,166454.386985 513435.727985,166462.438985 513436.310985,166456.999985 513382.178985,166446.221985 513361.906985,166439.149985 513358.988985,166405.819985 513348.211985,166349.398985 513333.283985,166288.061985 513312.194985,166276.204985 513316.629985,166264.022985 513356.675985,166262.695985 513364.228985,166258.961985 513385.471985,166282.343985 513410.305985,166286.133985 513412.866985,166327.046985 513440.506985,166354.031985 513472.209985,166380.174985 513466.677985,166387.863985 513465.987985)) POLYGON( EMPTY) #92 Polygon - gid: 2592 POLYGON((153201.327985 513295.818985,153226.912985 513272.838985,153240.302985 513281.911985,153282.966985 513342.907985,153287.232985 513349.007985,153310.162985 513372.145985,153338.326985 513391.395985,153372.548985 513386.775985,153399.672985 513387.103985,153440.243985 513369.694985,153483.249985 513348.552985,153521.235985 513335.287985,153552.489985 513341.581985,153585.786985 513360.695985,153617.380985 513383.704985,153639.382985 513396.019985,153663.846985 513408.126985,153718.985985 513419.295985,153723.902985 513420.291985,153763.134985 513416.882985,153805.106985 513411.106985,153825.172985 513392.221985,153822.154985 513354.195985,153791.182985 513314.212985,153756.511985 513292.424985,153715.682985 513274.824985,153689.942985 513246.766985,153691.749985 513225.302985,153710.502985 513199.946985,153745.088985 513192.753985,153766.799985 513182.803985,153787.870985 513144.522985,153784.039985 513111.169985,153761.533985 513086.127985,153735.204985 513069.676985,153715.986985 513046.641985,153705.754985 513022.981985,153712.351985 512993.515985,153716.387985 512988.183985,153736.567985 512961.525985,153775.863985 512967.269985,153804.701985 512977.344985,153840.921985 512987.562985,153863.302985 513002.651985,153879.277985 513023.277985,153891.556985 513047.051985,153902.749985 513097.542985,153906.019985 513136.783985,153914.811985 513155.032985,153934.801985 513183.161985,153941.688985 513209.182985,153945.277985 513236.635985,153954.682985 513271.076985,153974.307985 513291.640985,153998.334985 513310.524985,154022.287985 513346.805985,154047.856985 513378.812985,154086.098985 513411.216985,154113.196985 513422.599985,154142.014985 513416.474985,154164.428985 513408.373985,154165.569985 513407.127985,154178.679985 513392.818985,154205.335985 513385.772985,154230.846985 513375.101985,154244.263985 513337.841985,154243.386985 513308.802985,154208.806985 513283.898985,154177.676985 513268.476985,154162.078985 513245.276985,154158.446985 513221.398985,154157.986985 513171.460985,154149.270985 513136.844985,154123.459985 513090.000985,154107.167985 513068.292985,154094.948985 513052.011985,154076.373985 513047.009985,154061.578985 513057.829985,154031.411985 513063.123985,153984.551985 513054.041985,153957.058985 513028.116985,153947.947985 513002.556985,153952.346985 512983.883985,153976.123985 512949.924985,153983.887985 512932.847985,153996.487985 512894.246985,154028.021985 512877.669985,154068.066985 512863.923985,154075.796985 512828.768985,154074.893985 512770.551985,154043.848985 512733.687985,154003.264985 512710.015985,153966.255985 512712.388985,153936.827985 512716.348985,153912.933985 512723.953985,153879.560985 512721.080985,153843.470985 512726.852985,153820.456985 512739.259985,153797.975985 512758.057985,153767.137985 512785.980985,153744.767985 512802.198985,153720.964985 512810.467985,153708.070985 512834.152985,153679.882985 512843.837985,153654.329985 512844.694985,153636.123985 512831.799985,153626.553985 512805.764985,153605.236985 512802.037985,153582.908985 512813.348985,153573.985985 512817.868985,153560.453985 512847.489985,153551.985985 512889.573985,153555.109985 512925.676985,153578.672985 512951.618985,153597.250985 512967.807985,153596.944985 512978.668985,153587.475985 512994.806985,153576.295985 513010.457985,153558.742985 513027.177985,153552.552985 513043.269985,153557.760985 513070.500985,153564.618985 513091.397985,153563.372985 513099.704985,153540.931985 513098.182985,153513.679985 513097.136985,153451.601985 513088.120985,153434.166985 513073.086985,153414.508985 513059.064985,153388.431985 513055.047985,153368.376985 513057.902985,153357.554985 513073.586985,153361.949985 513104.716985,153363.585985 513143.808985,153363.701985 513182.599985,153356.162985 513189.535985,153341.513985 513187.480985,153310.732985 513173.723985,153275.728985 513162.829985,153233.550985 513165.629985,153209.115985 513186.380985,153197.266985 513215.733985,153184.292985 513230.539985,153146.242985 513231.663985,153118.440985 513226.217985,153096.885985 513247.200985,153093.357985 513260.228985,153092.263985 513262.605985,153087.803985 513263.035985,153082.778985 513262.845985,153076.497985 513261.659985,153071.281985 513260.063985,153055.923985 513250.436985,153033.931985 513239.087985,153015.307985 513233.412985,153006.635985 513232.228985,152996.172985 513231.665985,152987.242985 513230.525985,152982.556985 513230.723985,152974.418985 513231.858985,152970.794985 513232.794985,152961.965985 513239.194985,152955.583985 513250.126985,152952.564985 513254.159985,152941.417985 513259.329985,152928.100985 513267.043985,152916.934985 513271.741985,152911.597985 513274.544985,152905.880985 513279.270985,152902.860985 513283.303985,152910.867985 513287.443985,152915.392985 513290.322985,152928.090985 513301.585985,152939.258985 513309.171985,152947.015985 513313.813985,152952.723985 513316.300985,152960.090985 513318.841985,152983.972985 513325.878985,152991.794985 513328.551985,152999.927985 513332.409985,153004.955985 513335.231985,153019.213985 513344.762985,153023.201985 513346.836985,153033.085985 513351.198985,153043.206985 513354.628985,153051.243985 513358.682985,153058.527985 513363.312985,153061.845985 513366.353985,153064.669985 513369.434985,153068.040985 513374.363985,153072.140985 513386.330985,153072.901985 513390.757985,153073.871985 513400.687985,153073.924985 513405.177985,153072.405985 513410.305985,153067.072985 513421.537985,153063.536985 513427.582985,153053.230985 513442.950985,153039.346985 513464.721985,153026.435985 513482.811985,153012.952985 513509.466985,153009.212985 513518.289985,153000.494985 513543.991985,152997.121985 513556.173985,152995.943985 513562.563985,152995.654985 513566.242985,152996.366985 513572.809985,152998.891985 513581.458985,153001.483985 513586.984985,153020.855985 513620.435985,153026.242985 513628.995985,153033.223985 513644.556985,153035.690985 513648.323985,153038.496985 513651.695985,153042.246985 513654.701985,153049.671985 513658.825985,153056.569985 513661.100985,153068.194985 513666.667985,153079.818985 513672.234985,153088.929985 513675.960985,153095.902985 513680.122985,153099.932985 513682.158985,153105.266985 513687.400985,153109.487985 513690.840985,153114.233985 513696.130985,153122.711985 513704.466985,153135.555985 513715.121985,153137.765985 513717.391985,153139.714985 513721.448985,153142.866985 513724.734985,153145.367985 513728.862985,153149.163985 513737.372985,153150.038985 513740.992985,153150.096985 513745.498985,153149.465985 513749.556985,153147.941985 513753.792985,153146.556985 513756.418985,153221.601985 513713.434985,153243.039985 513693.223985,153249.433985 513648.436985,153241.906985 513608.578985,153239.679985 513583.675985,153242.975985 513553.159985,153244.171985 513516.224985,153234.234985 513488.502985,153208.367985 513465.446985,153196.520985 513425.096985,153191.753985 513354.604985,153201.327985 513295.818985)) MULTIPOLYGON(((153314.366408853 513256.946373533,153344.425090418 513299.920762731,153344.428307148 513299.925362002,153345.019027492 513300.770039474,153357.292865102 513313.15521412,153362.514942791 513312.450229054,153373.455864573 513311.781468071,153384.696070673 513311.917391519,153408.891657558 513301.535074788,153450.161712931 513281.246475274,153458.523693422 513277.746131484,153496.509693422 513264.481131484,153509.454653284 513261.219096639,153522.772872664 513260.303733478,153536.04239993 513261.764042798,153567.29639993 513268.058042798,153578.904974802 513271.387624017,153589.828661247 513276.537206147,153623.125661247 513295.651206147,153629.939444942 513300.069585791,153651.402601521 513315.70058439,153634.676215225 513297.467913577,153625.451760944 513285.053823728,153618.969762242 513271.011606082,153615.505862725 513255.938398603,153615.207362908 513240.475181556,153617.014362908 513219.011181556,153619.43248915 513205.423855392,153624.299289231 513192.5096375,153631.44997307 513180.70580391,153650.20297307 513155.34980391,153659.283744334 513145.160222132,153670.060787432 513136.785060901,153682.177189719 513130.501687667,153688.930355783 513128.441002977,153685.92154806 513126.211424445,153677.615653278 513117.723513198,153658.397653278 513094.688513198,153647.148394857 513076.411911219,153637.42076158 513053.918185328,153637.324677965 513054.052693795,153632.951539397 513059.089474235,153635.879610916 513068.011595924,153639.353840605 513085.097083656,153638.789276955 513102.523082361,153637.543276955 513110.830082361,153634.201590111 513124.368899897,153628.411229936 513137.055041166,153620.372379684 513148.449923257,153610.362956986 513158.159604431,153598.729005737 513165.8484034,153585.872732732 513171.250504441,153572.238602643 513174.179147122,153558.297972073 513174.533082957,153536.95533708 513173.085576586,153510.803415323 513172.081800344,153502.900335114 513171.358270009,153440.822335114 513162.342270009,153438.640153453 513161.811056861,153438.701649662 513182.375707175,153437.138951167 513197.831925132,153432.425490879 513212.634627326,153424.763496524 513226.148714148,153414.481700623 513237.794373132,153406.942700623 513244.730373132,153393.622779106 513254.511086581,153378.484258408 513261.137386896,153362.262083874 513264.287580253,153345.743810109 513263.808730975,153331.094810109 513261.753730975,153314.366408853 513256.946373533)),((153663.604508215 512933.649641924,153674.652150649 512919.055585829,153656.843931777 512919.652840303,153654.048229341 512919.443407929,153657.699714222 512923.412589569,153663.604508215 512933.649641924)),((153758.883863202 512888.990949085,153786.711657314 512893.058611173,153800.600235846 512896.466610122,153827.272897789 512905.785115881,153861.285378758 512915.380354162,153872.465013832 512919.518607333,153882.847749304 512925.375926157,153895.692678836 512934.035822574,153910.714944618 512912.580587528,153913.88546164 512905.607001851,153925.190173663 512870.974209091,153930.971355511 512857.742584438,153939.180996602 512845.864042957,153949.51479589 512835.778878268,153961.58971764 512827.860910141,153993.12371764 512811.283910141,154000.467606639 512808.115371856,154000.317352548 512798.428392478,153994.845561675 512791.930982307,153985.236205669 512786.325998191,153973.665681018 512787.067894892,153953.32758408 512789.804705544,153935.680678951 512795.421375566,153921.251842618 512798.491312861,153906.501211173 512798.677605234,153882.307675006 512796.594842839,153867.870062007 512798.903900812,153862.737031022 512801.671151852,153847.220330287 512814.645794457,153817.478242466 512841.57647473,153811.160108057 512846.702090734,153788.790108057 512862.920090734,153773.268486522 512871.017112799,153766.206508123 512881.53716961,153758.883863202 512888.990949085)),((153990.108182012 513131.514460519,153995.936815762 513139.716243348,154002.712902558 513151.332638848,154007.305505499 513163.972417125,154014.192505499 513189.993417125,154016.056172848 513199.460774779,154018.980204051 513221.827291528,154022.036739822 513233.020289774,154024.865966578 513235.984886921,154044.680163522 513251.557837979,154053.512327266 513259.726747821,154060.924709775 513269.202759109,154083.006073029 513302.648838523,154101.904440147 513326.305611818,154122.168713438 513343.476353717,154123.380753089 513342.153464673,154133.958162066 513332.611356302,154136.654555011 513330.981247067,154133.313214698 513328.948927954,154123.567306259 513320.411007245,154115.43630788 513310.323109212,154099.83830788 513287.123109212,154092.193301943 513272.498140444,154087.931829395 513256.555252408,154084.299829395 513232.677252408,154083.450166684 513222.089812354,154083.072573594 513181.097978162,154078.906777441 513164.553324694,154062.016455659 513133.899330911,154044.375613461 513136.995118314,154030.747603531 513138.121042257,154017.141679456 513136.753859234,153990.108182012 513131.514460519)),((153129.558892559 513463.256147829,153128.274910414 513465.451190834,153125.827034416 513469.355580607,153116.002068797 513484.006276477,153102.582457504 513505.049085282,153100.393635915 513508.291543318,153090.790757281 513521.74643252,153081.018927562 513541.064694122,153079.347575667 513545.007565183,153073.620678631 513561.891335271,153085.066941185 513581.656404892,153089.719238659 513589.048954806,153093.155431415 513595.464797976,153100.588321987 513599.024273401,153100.590588832 513599.025358999,153110.237478323 513603.645475464,153117.319437878 513606.54168678,153127.369021378 513611.56036014,153132.077087556 513614.370480811,153133.752777555 513615.217057693,153143.648069656 513621.216459835,153152.502673599 513628.666669284,153155.350295181 513631.465175534,153156.868974625 513632.702857904,153165.313688058 513640.756148192,153168.491595461 513644.298316368,153173.036019042 513648.766624338,153173.195605074 513648.899012159,153168.20959292 513622.496398573,153167.205092577 513615.259349391,153164.978092577 513590.356349391,153165.113666398 513575.622157955,153168.106611313 513547.911991985,153168.669434958 513530.530811951,153158.464435212 513521.434802591,153148.98341495 513511.256076238,153141.545183943 513499.501547968,153136.405612332 513486.575565644,153129.558892559 513463.256147829))) #93 Polygon - gid: 2593 POLYGON((144142.989985 514088.951985,144136.449985 514054.961985,144132.731985 514033.263985,144127.866985 514013.332985,144126.033985 514004.523985,144123.194985 513984.498985,144121.950985 513977.743985,144119.474985 513965.987985,144116.997985 513955.498985,144114.004985 513944.396985,144111.364985 513935.792985,144104.055985 513915.874985,144099.268985 513901.813985,144095.552985 513888.833985,144092.293985 513878.724985,144090.002985 513870.475985,144088.955985 513866.101985,144087.123985 513855.157985,144085.447985 513846.294985,144084.879985 513841.845985,144084.800985 513839.927985,144085.669985 513820.505985,144086.874985 513812.816985,144087.854985 513808.424985,144085.355985 513807.847985,144081.847985 513810.575985,144081.061985 513814.139985,144080.321985 513815.397985,144076.741985 513819.927985,144070.813985 513826.699985,144068.515985 513829.942985,144066.267985 513833.838985,144065.506985 513835.614985,144064.259985 513839.956985,144063.081985 513846.147985,144062.077985 513852.889985,144060.916985 513861.814985,144059.234985 513868.846985,144058.119985 513877.778985,144056.474985 513887.398985,144055.675985 513904.802985,144055.567985 513911.744985,144055.264985 513916.555985,144053.261985 513926.195985,144051.759985 513939.993985,144051.299985 513947.409985,144050.945985 513963.879985,144051.901985 513981.625985,144052.777985 514006.209985,144052.802985 514010.705985,144052.525985 514016.993985,144051.223985 514036.894985,144051.208985 514041.388985,144051.664985 514047.744985,144052.166985 514052.223985,144053.651985 514062.584985,144054.499985 514067.055985,144055.829985 514071.244985,144056.995985 514072.928985,144061.349985 514075.995985,144065.576985 514077.579985,144071.276985 514083.651985,144073.625985 514085.443985,144077.782985 514087.370985,144083.025985 514085.365985,144087.943985 514084.820985,144092.174985 514086.440985,144096.761985 514089.493985,144100.786985 514096.214985,144106.124985 514105.807985,144109.287985 514110.877985,144111.976985 514114.527985,144115.094985 514118.007985,144119.064985 514120.147985,144120.248985 514120.616985,144124.620985 514121.695985,144137.912985 514121.582985,144151.392985 514120.745985,144147.230985 514106.336985,144142.989985 514088.951985)) POLYGON( EMPTY) #94 Polygon - gid: 2594 POLYGON((146479.081985 514136.773985,146478.714985 514132.400985,146477.568985 514128.020985,146476.252985 514124.982985,146473.696985 514121.266985,146471.885985 514119.791985,146467.951985 514117.478985,146464.896985 514115.364985,146459.731985 514111.590985,146449.118985 514103.426985,146445.431985 514100.853985,146438.988985 514097.422985,146420.476985 514084.864985,146410.008985 514078.144985,146406.594985 514075.475985,146403.293985 514072.424985,146402.417985 514071.373985,146399.916985 514067.612985,146396.063985 514062.810985,146394.253985 514060.275985,146390.917985 514055.377985,146385.928985 514047.887985,146381.971985 514040.637985,146371.896985 514023.770985,146363.206985 514010.769985,146359.366985 514005.398985,146356.174985 514000.205985,146350.242985 513986.956985,146348.661985 513982.759985,146348.018985 513980.004985,146345.920985 513967.273985,146343.206985 513954.080985,146342.126985 513949.607985,146340.683985 513945.344985,146336.388985 513938.017985,146333.562985 513933.769985,146325.253985 513924.184985,146323.627985 513922.704985,146316.621985 513917.038985,146310.551985 513911.712985,146307.028985 513908.936985,146303.951985 513907.084985,146299.856985 513905.177985,146294.015985 513903.097985,146288.626985 513900.881985,146284.619985 513897.582985,146282.346985 513893.679985,146280.440985 513888.656985,146279.676985 513884.231985,146279.152985 513879.731985,146278.585985 513876.871985,146278.129985 513872.432985,146278.560985 513870.690985,146280.450985 513866.529985,146282.958985 513858.900985,146284.615985 513854.733985,146286.254985 513851.405985,146288.509985 513847.461985,146291.167985 513843.864985,146292.806985 513842.160985,146296.325985 513839.297985,146300.136985 513836.851985,146302.653985 513835.598985,146311.462985 513832.015985,146315.327985 513829.714985,146320.784985 513825.997985,146328.041985 513820.671985,146334.570985 513816.117985,146337.956985 513813.151985,146340.303985 513810.793985,146346.430985 513804.195985,146350.723985 513799.305985,146354.581985 513794.164985,146356.967985 513790.337985,146359.098985 513786.371985,146356.925985 513784.344985,146353.343985 513781.608985,146351.160985 513780.340985,146347.127985 513778.317985,146341.387985 513775.017985,146334.128985 513769.411985,146330.367985 513766.944985,146326.816985 513765.066985,146321.737985 513762.782985,146317.469985 513761.348985,146307.868985 513759.381985,146298.937985 513757.947985,146293.990985 513756.697985,146290.285985 513754.090985,146283.117985 513750.818985,146281.983985 513750.147985,146274.500985 513745.136985,146267.323985 513740.889985,146260.479985 513737.509985,146252.565985 513731.306985,146244.686985 513726.625985,146240.634985 513724.637985,146236.699985 513722.476985,146231.698985 513718.659985,146224.714985 513712.958985,146211.868985 513703.630985,146205.062985 513697.739985,146194.890985 513691.020985,146191.411985 513688.135985,146188.225985 513684.826985,146185.687985 513681.124985,146181.993985 513674.493985,146178.581985 513666.935985,146177.129985 513662.679985,146176.213985 513658.394985,146175.616985 513653.926985,146175.504985 513652.576985,146175.600985 513647.593985,146176.461985 513643.173985,146178.964985 513636.048985,146180.631985 513631.864985,146183.762985 513624.568985,146186.478985 513619.197985,146188.785985 513615.318985,146192.164985 513610.645985,146195.164985 513607.272985,146198.434985 513604.177985,146213.147985 513593.658985,146218.529985 513590.075985,146226.316985 513585.557985,146231.500985 513581.909985,146235.294985 513579.520985,146244.772985 513575.912985,146248.280985 513573.656985,146252.907985 513570.075985,146259.880985 513564.383985,146265.073985 513560.374985,146266.003985 513559.291985,146268.532985 513555.045985,146270.217985 513550.871985,146271.596985 513546.578985,146272.254985 513544.163985,146272.984985 513538.959985,146272.872985 513534.455985,146272.384985 513529.970985,146271.633985 513526.049985,146270.401985 513521.714985,146268.823985 513517.605985,146264.736985 513508.248985,146262.619985 513504.303985,146260.103985 513501.227985,146255.643985 513496.995985,146252.055985 513494.269985,146242.001985 513487.640985,146234.786985 513483.442985,146230.921985 513480.977985,146227.280985 513478.321985,146223.757985 513475.497985,146220.334985 513472.346985,146217.293985 513469.037985,146214.461985 513465.521985,146211.480985 513461.477985,146209.011985 513457.691985,146206.944985 513453.700985,146206.040985 513450.812985,146204.852985 513446.079985,146201.554985 513437.705985,146199.723985 513430.002985,146198.858985 513423.346985,146198.729985 513418.833985,146198.981985 513413.944985,146199.585985 513409.495985,146202.341985 513393.330985,146204.018985 513381.604985,146204.289985 513377.137985,146203.940985 513373.739985,146202.588985 513368.770985,146201.014985 513364.562985,146193.633985 513347.926985,146188.343985 513337.470985,146179.395985 513322.231985,146177.406985 513317.723985,146176.277985 513313.368985,146175.554985 513308.909985,146174.522985 513300.450985,146173.700985 513291.481985,146173.067985 513279.144985,146173.153985 513274.609985,146173.776985 513270.271985,146175.536985 513266.566985,146178.912985 513263.457985,146160.329985 513252.483985,146153.075985 513248.510985,146144.955985 513244.623985,146137.312985 513241.362985,146125.568985 513235.881985,146114.189985 513230.108985,146101.309985 513223.226985,146097.454985 513220.539985,146094.341985 513217.256985,146091.850985 513213.488985,146083.684985 513205.357985,146082.597985 513212.274985,146081.647985 513216.686985,146080.306985 513221.732985,146078.908985 513226.013985,146077.270985 513230.221985,146075.406985 513234.316985,146075.851985 513239.281985,146074.445985 513243.892985,146070.610985 513252.849985,146068.317985 513256.754985,146065.673985 513260.377985,146063.670985 513262.207985,146060.010985 513264.884985,146055.763985 513268.385985,146048.871985 513273.568985,146045.377985 513276.403985,146037.835985 513283.388985,146032.176985 513288.382985,146030.188985 513290.728985,146026.831985 513295.149985,146023.917985 513299.329985,146022.121985 513303.449985,146018.110985 513313.677985,146016.770985 513317.973985,146015.995985 513322.317985,146015.430985 513326.785985,146015.139985 513330.588985,146015.036985 513335.089985,146019.408985 513334.005985,146022.631985 513333.471985,146027.107985 513333.051985,146041.611985 513332.575985,146049.738985 513332.923985,146054.240985 513332.921985,146063.738985 513332.380985,146070.654985 513331.525985,146075.071985 513330.688985,146087.871985 513327.862985,146093.290985 513327.494985,146095.749985 513331.216985,146097.615985 513335.493985,146099.166985 513339.883985,146099.857985 513344.684985,146099.817985 513346.552985,146099.080985 513351.001985,146097.127985 513355.574985,146093.783985 513361.802985,146091.249985 513365.509985,146084.546985 513374.375985,146081.780985 513377.936985,146080.165985 513379.645985,146076.645985 513382.432985,146072.783985 513384.802985,146066.921985 513387.233985,146054.515985 513394.555985,146051.789985 513396.322985,146039.520985 513406.330985,146029.153985 513416.300985,146025.727985 513419.223985,146023.019985 513421.304985,146019.116985 513423.591985,146017.345985 513424.834985,146012.642985 513430.297985,146007.454985 513434.794985,146004.348985 513438.307985,146002.742985 513439.282985,145998.366985 513439.664985,145993.737985 513439.140985,145988.546985 513437.396985,145980.808985 513433.869985,145976.757985 513431.823985,145974.597985 513431.066985,145970.142985 513430.351985,145965.622985 513430.248985,145960.693985 513431.184985,145956.534985 513432.407985,145952.110985 513433.378985,145950.366985 513433.996985,145946.424985 513436.225985,145944.222985 513438.024985,145941.424985 513441.523985,145937.088985 513448.257985,145934.927985 513452.199985,145933.224985 513456.550985,145931.146985 513462.688985,145928.360985 513469.576985,145926.520985 513475.958985,145924.971985 513480.182985,145920.025985 513492.681985,145911.406985 513513.274985,145907.967985 513524.157985,145905.191985 513532.021985,145901.510985 513544.159985,145897.336985 513555.604985,145896.428985 513560.011985,145897.275985 513564.439985,145899.152985 513569.022985,145905.340985 513581.631985,145908.586985 513587.097985,145910.309985 513591.256985,145912.982985 513600.599985,145913.783985 513605.107985,145915.301985 513610.334985,145916.864985 513614.554985,145918.881985 513618.827985,145920.821985 513621.986985,145923.849985 513625.397985,145925.144985 513626.290985,145929.423985 513627.576985,145936.173985 513629.294985,145938.023985 513629.934985,145941.998985 513632.053985,145945.757985 513635.203985,145947.126985 513636.582985,145950.141985 513639.958985,145951.459985 513641.863985,145953.146985 513646.046985,145953.414985 513647.191985,145953.874985 513651.661985,145954.096985 513658.513985,145954.043985 513662.795985,145953.626985 513671.814985,145953.228985 513676.297985,145952.779985 513679.412985,145951.502985 513683.703985,145949.833985 513687.915985,145947.235985 513696.116985,145944.953985 513705.922985,145943.415985 513710.166985,145941.636985 513714.326985,145939.837985 513717.738985,145937.228985 513721.588985,145934.193985 513724.196985,145929.917985 513725.238985,145925.266985 513725.352985,145917.072985 513724.542985,145912.531985 513724.375985,145908.987985 513724.705985,145904.524985 513726.029985,145901.883985 513727.777985,145899.550985 513731.507985,145897.946985 513735.873985,145896.436985 513740.961985,145895.477985 513745.374985,145894.359985 513752.883985,145894.105985 513759.166985,145894.366985 513763.684985,145894.953985 513768.180985,145895.652985 513771.335985,145898.043985 513775.170985,145904.293985 513779.456985,145907.725985 513782.450985,145911.235985 513785.240985,145916.251985 513786.864985,145928.643985 513788.724985,145938.188985 513791.948985,145949.160985 513795.142985,145953.342985 513796.792985,145961.102985 513800.269985,145971.617985 513805.424985,145979.736985 513808.676985,145983.834985 513810.547985,145990.251985 513813.832985,145996.957985 513818.576985,146007.477985 513824.220985,146011.119985 513826.855985,146019.141985 513833.212985,146024.607985 513838.295985,146044.502985 513858.336985,146047.324985 513861.479985,146050.061985 513865.094985,146051.186985 513867.257985,146052.620985 513871.495985,146055.812985 513883.744985,146056.619985 513887.643985,146056.676985 513893.498985,146055.930985 513897.935985,146054.457985 513909.647985,146051.861985 513924.853985,146051.872985 513940.661985,146052.072985 513947.397985,146052.482985 513950.679985,146054.529985 513959.445985,146057.420985 513969.123985,146060.476985 513967.705985,146064.865985 513966.275985,146069.275985 513965.468985,146070.291985 513965.510985,146074.526985 513967.314985,146081.217985 513970.595985,146082.397985 513970.826985,146086.929985 513970.967985,146092.645985 513971.828985,146113.599985 513974.332985,146133.112985 513975.402985,146136.737985 513974.998985,146147.199985 513973.338985,146151.996985 513972.512985,146156.382985 513971.516985,146157.539985 513971.824985,146161.637985 513973.850985,146174.892985 513977.638985,146178.820985 513979.847985,146184.075985 513982.181985,146186.092985 513984.501985,146188.418985 513988.437985,146193.920985 514000.829985,146196.035985 514004.799985,146200.597985 514012.678985,146209.606985 514027.052985,146214.200985 514032.039985,146221.768985 514039.326985,146230.115985 514046.868985,146233.730985 514049.498985,146235.757985 514050.548985,146252.830985 514056.920985,146259.961985 514059.868985,146264.241985 514061.286985,146268.851985 514062.519985,146273.342985 514062.849985,146274.575985 514062.465985,146282.815985 514058.754985,146286.427985 514057.728985,146290.885985 514057.127985,146293.866985 514057.134985,146298.432985 514057.472985,146303.313985 514058.553985,146307.456985 514062.565985,146313.362985 514069.361985,146320.712985 514078.294985,146323.474985 514081.845985,146325.878985 514085.271985,146329.490985 514090.982985,146339.561985 514107.851985,146346.200985 514119.450985,146349.975985 514124.212985,146355.077985 514130.172985,146358.228985 514133.359985,146360.327985 514134.759985,146364.444985 514136.649985,146368.646985 514138.201985,146373.966985 514138.806985,146382.511985 514135.796985,146385.640985 514135.815985,146392.037985 514137.070985,146401.238985 514140.001985,146405.401985 514141.678985,146408.384985 514143.356985,146418.276985 514149.793985,146422.151985 514152.075985,146427.537985 514154.576985,146432.140985 514156.430985,146436.476985 514157.642985,146444.150985 514161.340985,146449.150985 514162.902985,146456.343985 514163.308985,146460.788985 514163.007985,146462.874985 514161.871985,146466.456985 514158.988985,146471.437985 514155.719985,146473.998985 514152.004985,146475.591985 514148.803985,146477.255985 514144.618985,146478.341985 514141.194985,146479.081985 514136.773985)) MULTIPOLYGON(((146011.847522543 513740.890335071,146014.984307229 513742.322478592,146018.011201398 513743.787321187,146024.428201398 513747.072321187,146033.566291871 513752.604961839,146036.493665821 513754.675862826,146042.935029827 513758.13166686,146051.440930471 513763.45702014,146055.082930471 513766.09202014,146057.700853077 513768.074842368,146065.722853077 513774.431842368,146070.2158857 513778.290706576,146075.6818857 513783.373706576,146077.834518588 513785.457210202,146097.729518588 513805.498210202,146100.309160202 513808.23039053,146103.131160202 513811.37339053,146107.119921677 513816.207857286,146109.856921677 513819.822857286,146116.600222878 513830.48771842,146117.725222878 513832.65071842,146122.230218704 513843.219288178,146123.664218704 513847.457288178,146125.197185838 513852.583156763,146128.389185838 513864.832156763,146129.256356421 513868.543958907,146130.063356421 513872.442958907,146131.616431173 513886.913874422,146131.673431173 513892.768874422,146131.108825876 513899.953929188,146134.959352858 513899.34296811,146137.318948726 513898.93666705,146139.774375819 513898.379073483,146157.765635587 513896.529730901,146175.676491337 513899.041053732,146176.833491337 513899.349053732,146186.164377291 513902.857601769,146195.501380849 513905.525920854,146209.222567228 513911.251698752,146206.534467748 513901.417341877,146205.770467748 513896.992341877,146205.1803459 513892.906704753,146204.989884337 513891.271061556,146203.978602791 513884.536090945,146203.522602791 513880.097090945,146203.314130135 513867.180570234,146205.325260586 513854.419875801,146205.756260586 513852.677875802,146210.275071433 513839.674311931,146210.477032007 513839.229678096,146211.710284299 513835.478289843,146213.266858336 513831.188037104,146214.923858336 513827.021037104,146217.332991849 513821.597919563,146218.971991849 513818.269919563,146221.145894415 513814.179565307,146223.400894415 513810.235565307,146227.060181039 513804.624529814,146214.213235884 513796.538689257,146210.103192982 513793.317234099,146208.958646493 513792.637246522,146207.600077938 513791.970703016,146204.532771508 513790.377091938,146200.597771508 513788.216091938,146191.196115791 513782.095756264,146186.195115791 513778.278756264,146184.271868982 513776.760489871,146178.930882644 513772.400672701,146167.80106412 513764.318861461,146162.78504905 513760.338720202,146159.661996558 513757.635531511,146153.554337978 513753.601186446,146147.016034602 513748.753030905,146143.537034602 513745.868030905,146137.384343372 513740.155346205,146134.198343372 513736.846346205,146126.367313328 513727.23576639,146123.829313328 513723.53376639,146120.168646448 513717.62452302,146116.474646448 513710.99352302,146113.636813155 513705.353295708,146110.224813155 513697.795295708,146107.599279608 513691.152829039,146106.147279608 513686.896829039,146103.787047984 513678.358428479,146102.871047984 513674.073428479,146101.874656251 513668.327970511,146101.277656251 513663.859970511,146100.873767208 513660.127903811,146100.761767208 513658.777903811,146100.518899611 513651.132340369,146100.614899612 513646.149340369,146101.984689183 513633.253797059,146102.845689183 513628.833797059,146105.701299377 513618.315880282,146108.204299377 513611.190880282,146109.291399104 513608.289456394,146110.958399104 513604.105456394,146111.710285435 513602.287978238,146114.841285435 513594.991978238,146116.833661888 513590.724255606,146119.549661888 513585.353255606,146122.017937054 513580.860362517,146124.324937054 513576.981362517,146128.010088172 513571.37253617,146131.389088172 513566.69953617,146136.123955204 513560.802199235,146139.123955204 513557.429199235,146143.609554063 513552.802465075,146146.879554063 513549.707465075,146154.815451024 513543.167033067,146169.528451024 513532.648033067,146171.585632309 513531.2284569,146172.731747701 513530.46544474,146169.539682841 513527.527029206,146165.112892883 513523.096571621,146162.071892883 513519.787571621,146158.884736665 513516.084342021,146156.052736665 513512.568342021,146154.091428412 513510.023624266,146151.110428412 513505.979624266,146148.659199946 513502.446550055,146146.190199946 513498.660550055,146142.413986224 513492.184108145,146140.346986224 513488.193108145,146135.369578457 513476.105475136,146134.465578457 513473.217475136,146133.297507522 513469.071859128,146133.291225392 513469.04683108,146131.771944583 513465.189202972,146128.588019266 513455.05020339,146126.757019266 513447.34720339,146125.349413787 513439.66855052,146125.333509108 513439.54616724,146123.202128707 513441.233711893,146115.873841133 513446.356183474,146112.011841133 513448.726183474,146101.514293052 513454.08190964,146100.511940734 513454.497590036,146095.499821203 513457.455734419,146089.301229719 513462.512014765,146081.141827901 513470.358955647,146077.832919083 513473.356759262,146074.406919083 513476.279759262,146071.427632069 513478.69281934,146068.719632069 513480.77381934,146066.359203061 513482.363239454,146061.767349912 513486.970701292,146060.053668985 513488.456133661,146052.447934138 513495.853541664,146043.270261658 513502.418313523,146041.664261658 513503.393313523,146026.075330476 513510.561324309,146009.265256284 513513.998846618,146004.889256284 513514.380846618,145992.162649537 513514.217644662,145989.764384456 513520.278282601,145989.210645291 513521.638552137,145981.900192566 513539.105097324,145979.482413151 513546.756360302,145978.690931684 513549.123257126,145976.475479026 513555.399308892,145976.438362152 513555.521700801,145977.876266427 513558.392663553,145979.599266427 513562.551663553,145981.828103128 513568.939622633,145990.170574216 513574.569221868,145993.929574216 513577.719221868,145998.983628831 513582.364313931,146000.352628831 513583.743313931,146003.066429269 513586.625217087,146006.081429269 513590.001217087,146011.819217687 513597.286757872,146013.137217687 513599.191757872,146021.016327875 513613.811976769,146022.703327875 513617.994976769,146026.173297299 513628.954363433,146026.441297299 513630.099363433,146028.020982394 513639.514410324,146028.480982394 513643.984410324,146028.835651666 513649.233311912,146029.057651666 513656.085311912,146029.091240665 513659.44221843,146029.038240665 513663.72421843,146028.963947968 513666.259963774,146028.546947968 513675.278963774,146028.333151116 513678.447386096,146027.935151116 513682.930386096,146027.461793032 513686.99799489,146027.012793032 513690.11299489,146024.664272548 513700.805722171,146023.387272548 513705.096722171,146021.228562699 513711.332662394,146020.533592679 513713.086535207,146019.619527672 513715.971926707,146018.002063619 513722.922344107,146015.466585062 513731.476325928,146013.928585062 513735.720325927,146012.374991285 513739.656906197,146011.847522543 513740.890335071)),((146263.503396356 513971.644383436,146264.845146421 513973.961711091,146269.154816161 513980.837856373,146272.633703185 513984.187572248,146272.694587294 513984.174888747,146272.160337612 513980.932976116,146271.322748897 513976.861381452,146269.459899281 513975.354829079,146267.156598206 513973.414294395,146266.521108814 513972.856696948,146265.492769349 513972.462429559,146263.503396356 513971.644383436))) #95 Polygon - gid: 2595 POLYGON((152747.244985 514163.075985,152750.222985 514162.865985,152762.227985 514163.357985,152765.838985 514164.275985,152776.630985 514167.853985,152784.077985 514169.654985,152795.626985 514175.727985,152800.056985 514177.203985,152805.566985 514178.290985,152810.480985 514178.365985,152815.012985 514179.178985,152819.420985 514179.392985,152823.072985 514177.882985,152827.019985 514175.502985,152835.565985 514171.245985,152837.084985 514170.146985,152841.503985 514165.822985,152844.238985 514162.245985,152847.722985 514154.557985,152849.262985 514149.500985,152849.452985 514142.388985,152850.715985 514130.165985,152854.579985 514108.250985,152855.312985 514098.346985,152857.278985 514089.733985,152859.500985 514081.827985,152862.415985 514074.361985,152866.473985 514066.324985,152871.582985 514058.454985,152874.488985 514054.574985,152880.379985 514047.771985,152891.153985 514036.794985,152902.009985 514027.885985,152907.437985 514023.431985,152923.267985 514009.540985,152929.973985 514004.580985,152935.475985 514001.216985,152939.529985 513999.220985,152947.627985 513996.379985,152952.070985 513995.270985,152956.453985 513994.775985,152957.977985 513995.027985,152962.007985 513997.311985,152968.886985 514002.852985,152975.323985 514007.391985,152983.086985 514014.935985,152989.043985 514019.895985,152995.859985 514027.807985,153008.635985 514044.568985,153011.618985 514047.976985,153014.918985 514050.909985,153017.338985 514052.376985,153021.618985 514054.009985,153026.424985 514055.095985,153030.899985 514055.144985,153055.639985 514052.224985,153061.294985 514050.966985,153068.401985 514047.971985,153084.487985 514042.766985,153091.735985 514040.113985,153096.408985 514037.940985,153103.935985 514032.998985,153110.244985 514027.659985,153117.783985 514020.217985,153122.060985 514015.234985,153127.554985 514008.104985,153139.559985 513997.107985,153145.303985 513992.530985,153154.505985 513987.088985,153158.166985 513984.484985,153163.747985 513978.577985,153171.147985 513969.045985,153173.668985 513965.324985,153180.637985 513949.947985,153183.187985 513942.152985,153188.073985 513933.422985,153189.159985 513929.039985,153190.078985 513921.778985,153190.426985 513916.983985,153190.068985 513912.495985,153185.862985 513905.476985,153179.518985 513886.559985,153176.400985 513880.496985,153172.336985 513874.800985,153160.951985 513862.562985,153156.433985 513856.339985,153151.396985 513851.959985,153142.738985 513842.886985,153135.922985 513834.974985,153130.949985 513828.224985,153126.944985 513825.146985,153119.109985 513820.649985,153115.239985 513819.412985,153111.703985 513816.997985,153095.957985 513803.789985,153090.619985 513800.267985,153086.268985 513799.212985,153079.246985 513798.413985,153077.385985 513798.511985,153069.766985 513801.027985,153052.681985 513805.263985,153048.530985 513806.983985,153035.310985 513813.782985,153022.371985 513819.572985,153010.779985 513826.491985,152998.307985 513832.718985,152986.401985 513840.022985,152978.337985 513844.031985,152964.726985 513848.610985,152951.529985 513853.757985,152928.653985 513860.833985,152920.997985 513862.406985,152912.173985 513864.930985,152904.462985 513866.658985,152895.879985 513868.220985,152890.402985 513868.449985,152880.815985 513868.059985,152864.829985 513865.581985,152860.332985 513865.146985,152857.986985 513864.721985,152853.735985 513863.281985,152848.769985 513861.216985,152840.910985 513857.601985,152835.803985 513854.706985,152824.859985 513844.217985,152823.050985 513842.027985,152821.482985 513837.821985,152820.962985 513835.100985,152820.667985 513827.554985,152821.148985 513823.064985,152824.742985 513813.937985,152825.940985 513811.508985,152828.593985 513807.866985,152833.790985 513803.295985,152841.590985 513798.778985,152861.106985 513792.783985,152881.771985 513783.860985,152889.672985 513781.216985,152894.045985 513780.183985,152911.753985 513777.044985,152924.313985 513773.178985,152938.498985 513764.447985,152941.841985 513761.432985,152945.914985 513756.742985,152948.841985 513750.352985,152950.467985 513745.487985,152951.187985 513740.696985,152949.197985 513726.637985,152944.856985 513711.713985,152938.590985 513697.248985,152932.892985 513679.260985,152932.052985 513669.392985,152932.301985 513664.167985,152931.064985 513655.751985,152930.540985 513640.871985,152928.716985 513629.667985,152928.469985 513624.260985,152929.623985 513618.961985,152936.827985 513594.240985,152925.855985 513592.298985,152912.444985 513589.295985,152892.923985 513586.002985,152884.722985 513585.253985,152873.280985 513582.877985,152865.965985 513582.437985,152861.459985 513582.424985,152855.123985 513582.942985,152846.852985 513582.590985,152842.379985 513582.092985,152823.641985 513578.893985,152820.885985 513578.940985,152812.601985 513580.109985,152802.841985 513582.175985,152789.868985 513585.914985,152777.216985 513587.422985,152765.958985 513589.763985,152750.899985 513591.610985,152742.030985 513593.139985,152729.904985 513596.497985,152719.099985 513598.801985,152715.833985 513600.302985,152709.204985 513604.531985,152705.819985 513607.458985,152704.964985 513608.634985,152703.307985 513612.868985,152703.112985 513614.477985,152703.547985 513619.000985,152706.348985 513625.244985,152709.568985 513633.649985,152711.881985 513642.244985,152712.847985 513647.448985,152711.808985 513652.345985,152708.137985 513655.059985,152704.382985 513656.694985,152698.688985 513658.421985,152692.786985 513659.189985,152681.958985 513659.969985,152674.629985 513659.687985,152661.943985 513657.891985,152655.571985 513657.466985,152649.688985 513657.947985,152642.863985 513657.559985,152626.064985 513657.514985,152613.920985 513660.400985,152600.982985 513666.190985,152597.955985 513667.872985,152594.342985 513670.518985,152593.520985 513671.490985,152588.828985 513680.433985,152585.901985 513686.823985,152583.628985 513692.792985,152581.790985 513698.405985,152581.080985 513702.833985,152581.877985 513705.678985,152584.660985 513710.396985,152589.111985 513713.700985,152592.947985 513716.057985,152598.515985 513718.920985,152602.238985 513721.449985,152606.006985 513724.926985,152607.497985 513725.822985,152629.149985 513736.282985,152634.862985 513738.251985,152644.738985 513740.211985,152650.242985 513741.654985,152654.804985 513742.227985,152659.856985 513743.707985,152664.473985 513745.695985,152668.657985 513748.192985,152675.140985 513751.447985,152680.210985 513753.398985,152686.638985 513755.238985,152695.915985 513759.948985,152707.390985 513764.833985,152716.642985 513767.925985,152723.560985 513770.672985,152731.786985 513774.899985,152737.193985 513778.352985,152746.398985 513785.838985,152754.987985 513796.492985,152757.040985 513801.273985,152757.627985 513806.000985,152756.984985 513813.706985,152755.505985 513821.538985,152752.715985 513831.219985,152746.744985 513843.680985,152735.140985 513857.735985,152731.651985 513863.630985,152729.550985 513867.824985,152727.840985 513872.403985,152725.525985 513876.860985,152725.078985 513881.527985,152733.081985 513886.294985,152737.828985 513891.584985,152743.443985 513895.856985,152749.473985 513899.149985,152760.195985 513906.316985,152778.305985 513916.664985,152782.507985 513919.632985,152790.819985 513923.211985,152794.352985 513925.072985,152817.785985 513939.459985,152822.336985 513942.969985,152833.310985 513952.333985,152840.480985 513959.124985,152843.334985 513962.648985,152845.629985 513966.518985,152848.522985 513974.605985,152852.091985 513987.549985,152853.072985 513992.664985,152852.731985 513997.167985,152851.866985 514000.228985,152845.740985 514015.720985,152841.492985 514023.165985,152838.001985 514026.762985,152835.133985 514029.112985,152831.380985 514031.563985,152825.534985 514032.987985,152804.881985 514042.418985,152800.333985 514043.552985,152795.944985 514042.505985,152778.924985 514036.800985,152772.912985 514033.979985,152769.227985 514032.625985,152765.542985 514031.270985,152760.435985 514028.375985,152750.277985 514024.001985,152741.910985 514019.008985,152724.617985 514010.196985,152714.925985 514002.288985,152703.547985 513989.970985,152694.149985 513980.780985,152690.812985 513977.762985,152679.079985 513968.842985,152671.575985 513961.828985,152663.594985 513953.465985,152656.937985 513947.411985,152652.772985 513945.386985,152646.215985 513940.244985,152632.252985 513931.449985,152611.390985 513920.380985,152604.472985 513917.634985,152601.112985 513916.755985,152595.709985 513915.766985,152583.472985 513914.620985,152579.510985 513917.783985,152574.246985 513922.472985,152565.980985 513931.665985,152557.589985 513944.756985,152554.632985 513949.932985,152545.321985 513972.156985,152541.526985 513979.564985,152540.007985 513981.605985,152536.733985 513984.688985,152535.315985 513985.408985,152530.905985 513986.584985,152525.946985 513987.463985,152513.202985 513986.612985,152499.250985 513983.503985,152489.827985 513980.953985,152480.251985 513979.844985,152468.426985 513980.337985,152456.720985 513981.769985,152450.800985 513981.307985,152443.107985 513981.936985,152431.715985 513982.252985,152425.601985 513983.102985,152415.362985 513985.867985,152401.539985 513988.792985,152397.098985 513989.485985,152382.988985 513990.080985,152378.507985 513990.059985,152367.405985 513987.636985,152353.905985 513987.813985,152328.397985 513985.641985,152326.159985 513984.727985,152343.155985 514009.776985,152345.547985 514013.575985,152348.450985 514020.382985,152350.886985 514024.172985,152354.067985 514027.864985,152361.872985 514039.241985,152375.524985 514057.714985,152380.879985 514063.460985,152384.223985 514066.497985,152391.301985 514072.064985,152399.165985 514075.815985,152403.841985 514078.756985,152407.937985 514080.620985,152417.977985 514083.085985,152422.390985 514083.220985,152424.943985 514082.052985,152442.772985 514066.832985,152446.324985 514064.070985,152455.412985 514057.977985,152463.242985 514053.204985,152467.279985 514051.239985,152474.609985 514049.455985,152479.056985 514048.777985,152484.181985 514049.837985,152499.921985 514056.864985,152512.577985 514064.400985,152520.205985 514069.166985,152529.937985 514073.130985,152544.200985 514082.842985,152556.472985 514093.900985,152571.160985 514108.272985,152579.390985 514115.870985,152590.270985 514129.477985,152593.414985 514136.321985,152600.252985 514153.416985,152602.311985 514157.738985,152606.845985 514165.536985,152612.066985 514172.868985,152614.883985 514176.092985,152621.659985 514182.048985,152625.286985 514184.242985,152630.331985 514185.979985,152634.803985 514186.432985,152640.693985 514186.427985,152649.669985 514185.718985,152657.684985 514183.778985,152668.022985 514182.579985,152704.755985 514175.352985,152719.865985 514170.892985,152729.749985 514169.166985,152738.749985 514165.436985,152742.867985 514164.085985,152747.244985 514163.075985)) MULTIPOLYGON(((152597.239547324 514029.678575879,152606.678441824 514038.183733586,152608.926208731 514040.294461888,152622.835937061 514053.904934079,152630.265885999 514060.764320717,152637.967903619 514069.033557604,152648.847903619 514082.640557604,152658.423790211 514098.16991668,152661.567790211 514105.01391668,152662.517340891 514107.225410577,152686.862372445 514102.435669934,152698.633931665 514098.961073367,152706.964296294 514097.011008656,152708.68782781 514096.710035831,152710.035074062 514096.151677107,152715.370621248 514094.174053889,152719.488621248 514092.823053889,152720.136823795 514092.642335451,152711.844861917 514088.406138982,152705.628187309 514084.696343796,152690.566315703 514077.021260665,152677.203554368 514068.307842573,152667.511554368 514060.399842573,152659.83253405 514053.178194686,152649.748363042 514042.260914102,152642.836939028 514035.502456272,152633.689321872 514028.54799066,152627.866066085 514023.634722601,152620.362066085 514016.620722601,152617.318280618 514013.60833914,152611.557280295 514007.571596163,152611.474695349 514007.519958978,152608.277829548 514013.760375802,152601.692834863 514024.342998692,152600.173834863 514026.383998692,152597.239547324 514029.678575879)),((152979.39142877 513923.39395504,152982.971243821 513924.314923876,152994.958013 513929.778636121,152998.988013 513932.062636121,153009.055554761 513938.9037135,153014.067370819 513942.940706199,153018.544937842 513946.098027423,153027.592891475 513953.605728244,153033.290382452 513959.142488765,153037.034018889 513962.259567283,153045.866385123 513970.944837472,153049.565287583 513975.238516501,153060.015813883 513971.857005287,153062.890625998 513969.019181735,153063.860375556 513967.889356612,153068.145995532 513962.327567309,153076.89462411 513952.801026421,153088.89962411 513941.804026421,153092.821268542 513938.452274418,153098.565268542 513933.875274418,153107.126126376 513927.97518657,153108.665998205 513927.06451688,153110.631601416 513922.727441177,153111.575413015 513919.842338661,153111.447332744 513919.460419607,153106.039801021 513913.647738603,153100.619179573 513907.061733153,153097.137580943 513903.737558055,153088.479580943 513894.664558055,153085.916584877 513891.838132528,153079.738127788 513884.666191141,153072.940822268 513881.346665919,153070.786713562 513879.875463282,153069.612655922 513880.479277041,153065.94505217 513882.241395211,153057.027815264 513886.231719169,153049.219187626 513890.892510631,153044.282261894 513893.593381728,153034.737621442 513898.358814385,153025.62057717 513903.951867582,153019.789678547 513907.181468601,153011.725678547 513911.190468601,153002.252391439 513915.117153387,152990.324366736 513919.129968399,152979.39142877 513923.39395504)),((152801.412882746 513735.377900866,152804.005720959 513733.876381609,152819.567849259 513727.08532076,152835.151968897 513722.298130904,152852.040751769 513715.005674598,152857.971202143 513712.737692505,152864.167594032 513710.664124582,152861.394377541 513701.909365326,152858.163243385 513685.62225202,152857.323243385 513675.75425202,152857.195936799 513668.928851093,152856.862228842 513666.658449992,152856.111445543 513658.391477922,152856.09040641 513657.794030773,152851.934996434 513657.875156675,152843.663996434 513657.523156675,152838.554159662 513657.130434274,152834.081159662 513656.632434274,152829.758404822 513656.023328661,152822.218943343 513654.736172226,152821.016752643 513654.990652348,152810.639563306 513657.981503418,152798.745454116 513660.38785453,152789.312251617 513661.51220399,152786.312745304 513662.135924391,152786.214807049 513663.015276221,152785.175807049 513667.912276221,152781.167293184 513680.88411889,152774.88583807 513692.920738318,152766.537291284 513703.627682429,152763.113476725 513706.674866787,152766.065546159 513708.191812751,152772.153957948 513711.689958145,152777.560957948 513715.142958145,152784.514842389 513720.165903479,152793.719842389 513727.651903479,152801.412882746 513735.377900866))) #96 Polygon - gid: 2596 POLYGON((154470.187985 514355.480985,154486.830985 514323.594985,154500.001985 514288.890985,154498.444985 514263.472985,154497.741985 514239.518985,154493.223985 514222.771985,154489.801985 514204.219985,154488.879985 514182.090985,154478.186985 514157.249985,154474.040985 514134.114985,154467.747985 514111.146985,154466.497985 514095.633985,154470.929985 514076.999985,154488.837985 514040.402985,154492.458985 514010.825985,154489.681985 513972.417985,154476.127985 513929.415985,154462.300985 513907.359985,154442.174985 513901.882985,154433.051985 513885.013985,154426.097985 513857.073985,154434.970985 513823.089985,154437.859985 513804.326985,154431.686985 513785.260985,154412.115985 513791.727985,154392.134985 513804.951985,154371.213985 513800.320985,154338.806985 513824.583985,154337.552985 513838.841985,154340.231985 513863.853985,154341.818985 513883.430985,154325.354985 513942.782985,154308.149985 513990.662985,154286.061985 514032.755985,154276.691985 514036.801985,154273.287985 514053.119985,154278.102985 514068.611985,154281.466985 514088.671985,154268.460985 514110.359985,154256.186985 514135.862985,154255.695985 514155.176985,154260.846985 514174.967985,154273.610985 514186.731985,154296.316985 514203.897985,154304.090985 514222.423985,154304.305985 514232.504985,154274.433985 514236.105985,154245.243985 514243.659985,154199.558985 514250.286985,154168.633985 514270.372985,154143.684985 514291.596985,154128.476985 514317.331985,154126.062985 514342.110985,154129.235985 514339.245985,154157.746985 514338.714985,154195.964985 514348.920985,154238.413985 514354.748985,154265.909985 514362.594985,154277.321985 514360.996985,154291.054985 514356.469985,154316.729985 514343.357985,154339.936985 514337.091985,154355.837985 514336.573985,154383.710985 514341.477985,154410.238985 514348.604985,154426.380985 514358.909985,154440.500985 514366.676985,154453.903985 514366.741985,154470.187985 514355.480985)) POLYGON((154372.475003626 514263.349143873,154396.706937495 514267.612531514,154403.170413394 514269.046426639,154423.988413027 514274.639380627,154423.585300499 514268.058575085,154423.477262909 514265.673131474,154423.033047317 514250.536943284,154420.812790206 514242.307052659,154419.468203972 514236.376571173,154416.046203972 514217.824571173,154414.866998649 514207.342135003,154414.520949841 514199.036588282,154409.298243715 514186.90367489,154404.363076076 514170.479893208,154400.813488545 514150.672920818,154395.413932334 514130.965784784,154392.990283739 514117.170779661,154391.740283739 514101.657779661,154391.717630648 514089.898254615,154393.533403613 514078.279738746,154397.965403613 514059.645738746,154403.562880398 514044.035258131,154415.926643621 514018.768525795,154417.127981621 514008.955774066,154415.510664071 513986.587055149,154410.12603403 513969.503547621,154408.340036344 513968.817253125,154397.830595583 513962.092880346,154397.625941273 513962.830650185,154395.936468377 513968.14544159,154378.731468377 514016.02544159,154374.561855468 514025.512137945,154353.616308301 514065.427970836,154355.434134709 514076.267922606,154356.462902434 514089.454524599,154355.15919933 514102.616788591,154351.563572263 514115.345351006,154345.787849925 514127.244336955,154337.521882801 514141.02815173,154341.546834423 514144.071061954,154351.291906253 514152.880752292,154359.35032728 514163.255670093,154365.474862182 514174.877509063,154373.248862182 514193.403509063,154377.45396137 514206.839579392,154379.073933883 514220.824804957,154379.288933883 514230.905804957,154377.970664843 514246.594518123,154373.406257847 514261.662356151,154372.475003626 514263.349143873)) #97 Polygon - gid: 2597 POLYGON((144573.637985 514299.611985,144569.108985 514299.348985,144562.201985 514299.403985,144559.226985 514299.220985,144554.798985 514298.485985,144551.780985 514297.383985,144547.881985 514295.120985,144545.571985 514292.973985,144542.929985 514289.294985,144542.014985 514286.888985,144540.935985 514282.467985,144536.953985 514270.768985,144535.431985 514264.430985,144527.414985 514231.256985,144525.265985 514220.631985,144523.947985 514211.728985,144523.487985 514204.993985,144523.420985 514200.490985,144524.298985 514164.227985,144524.246985 514144.674985,144524.388985 514131.151985,144524.184985 514126.675985,144523.627985 514123.147985,144522.187985 514118.870985,144520.491985 514115.580985,144517.606985 514111.957985,144512.831985 514110.603985,144508.249985 514111.180985,144503.782985 514111.952985,144498.898985 514113.438985,144494.884985 514115.441985,144487.162985 514120.130985,144485.689985 514121.174985,144478.796985 514127.041985,144477.763985 514127.744985,144471.584985 514131.179985,144467.467985 514132.997985,144463.910985 514134.276985,144459.581985 514135.505985,144456.662985 514136.016985,144444.326985 514137.623985,144439.854985 514138.108985,144426.535985 514138.704985,144419.602985 514139.421985,144415.193985 514140.261985,144408.154985 514142.204985,144404.351985 514144.259985,144403.046985 514146.503985,144401.777985 514151.441985,144391.539985 514175.978985,144389.658985 514180.059985,144386.465985 514186.103985,144381.806985 514193.809985,144376.400985 514200.696985,144374.525985 514204.168985,144372.626985 514208.272985,144371.009985 514212.470985,144374.512985 514215.316985,144375.460985 514216.345985,144378.007985 514220.054985,144380.900985 514225.738985,144383.595985 514232.197985,144386.138985 514236.910985,144387.373985 514240.200985,144387.317985 514244.627985,144384.667985 514260.523985,144384.974985 514262.704985,144387.859985 514266.096985,144390.911985 514268.033985,144395.098985 514269.518985,144399.531985 514270.567985,144407.215985 514272.774985,144408.690985 514274.244985,144408.377985 514278.224985,144406.906985 514282.756985,144405.074985 514287.247985,144402.861985 514292.013985,144397.918985 514301.215985,144396.222985 514305.380985,144394.726985 514309.633985,144393.515985 514313.470985,144392.388985 514317.822985,144389.131985 514332.080985,144388.711985 514336.562985,144388.628985 514344.005985,144389.175985 514346.743985,144391.242985 514350.685985,144393.902985 514354.402985,144395.123985 514355.983985,144398.178985 514359.312985,144400.071985 514360.831985,144403.826985 514363.306985,144407.752985 514365.546985,144410.944985 514367.097985,144415.106985 514368.785985,144419.373985 514370.244985,144424.773985 514371.874985,144437.115985 514374.708985,144441.437985 514375.956985,144457.977985 514381.432985,144463.670985 514383.077985,144481.352985 514387.388985,144495.281985 514390.226985,144508.880985 514394.003985,144514.170985 514394.585985,144523.083985 514394.435985,144526.965985 514394.025985,144538.798985 514391.486985,144547.666985 514389.950985,144556.364985 514387.609985,144561.437985 514386.414985,144564.927985 514385.410985,144568.997985 514383.496985,144573.050985 514381.530985,144580.697985 514379.417985,144595.229985 514372.568985,144602.375985 514369.467985,144607.797985 514367.957985,144615.688985 514366.916985,144623.577985 514365.386985,144626.043985 514365.367285,144624.394985 514363.206985,144621.092985 514359.540985,144616.630985 514352.244985,144609.694985 514342.524985,144604.237985 514332.792985,144598.713985 514323.815985,144590.528985 514311.126985,144587.880985 514307.506985,144586.451985 514305.981985,144582.933985 514303.147985,144581.553985 514302.214985,144577.498985 514300.258985,144573.637985 514299.611985)) POLYGON( EMPTY) #98 Polygon - gid: 2598 POLYGON((146978.395985 514128.105985,146993.088985 514109.724985,146990.935985 514109.919985,146986.515985 514108.676985,146984.834985 514107.491985,146981.559985 514104.355985,146978.605985 514100.856985,146976.054985 514097.475985,146971.011985 514090.004985,146967.745985 514085.474985,146964.701985 514082.154985,146959.542985 514075.969985,146956.337985 514072.894985,146952.680985 514071.027985,146947.749985 514069.211985,146939.485985 514065.648985,146927.297985 514062.022985,146919.855985 514059.063985,146915.584985 514057.875985,146911.533985 514057.834985,146907.047985 514058.932985,146902.995985 514060.801985,146899.081985 514063.093985,146893.310985 514066.882985,146889.708985 514069.594985,146885.365985 514073.314985,146874.977985 514084.255985,146871.396985 514088.322985,146864.758985 514096.561985,146858.269985 514103.545985,146851.525985 514109.507985,146845.834985 514113.792985,146843.682985 514115.048985,146833.562985 514120.296985,146827.089985 514122.419985,146822.686985 514123.116985,146818.808985 514122.219985,146814.499985 514120.648985,146810.509985 514118.510985,146805.983985 514115.339985,146799.004985 514109.608985,146789.184985 514100.497985,146782.878985 514094.071985,146773.731985 514084.130985,146772.704985 514082.828985,146770.140985 514078.765985,146767.239985 514075.730985,146765.038985 514075.353985,146760.639985 514077.133985,146756.696985 514093.552985,146755.166985 514104.428985,146754.236985 514107.679985,146747.054985 514128.282985,146745.452985 514132.485985,146740.637985 514142.592985,146736.292985 514152.151985,146732.113985 514160.830985,146729.632985 514165.603985,146720.451985 514182.099985,146718.255985 514185.582985,146715.669985 514189.265985,146708.041985 514198.572985,146700.623985 514208.288985,146697.764985 514212.325985,146695.357985 514216.136985,146693.225985 514220.099985,146691.843985 514223.389985,146688.846985 514231.402985,146687.411985 514235.659985,146686.889985 514238.098985,146686.285985 514244.852985,146686.270985 514253.857985,146686.450985 514255.277985,146686.301985 514260.300985,146683.033985 514264.144985,146683.155985 514265.983985,146682.338985 514271.113985,146682.374985 514276.109985,146680.337985 514280.147985,146677.579985 514283.544985,146668.796985 514293.186985,146665.431985 514297.393985,146661.798985 514300.600985,146659.382985 514304.403985,146657.401985 514310.058985,146656.451985 514315.110985,146657.862985 514320.479985,146660.328985 514325.311985,146664.346985 514327.493985,146671.146985 514330.078985,146674.727985 514332.813985,146678.721985 514337.242985,146681.490985 514340.795985,146686.032985 514347.673985,146690.888985 514355.863985,146692.808985 514359.916985,146693.698985 514363.305985,146695.616985 514373.416985,146698.231985 514382.035985,146699.836985 514386.527985,146701.571985 514390.707985,146703.974985 514394.998985,146706.750985 514398.590985,146710.002985 514401.691985,146712.889985 514403.299985,146717.072985 514405.089985,146726.061985 514410.373985,146734.615985 514414.500985,146745.317985 514418.731985,146749.574985 514420.166985,146751.177985 514420.590985,146755.638985 514421.241985,146756.964985 514414.062985,146760.786985 514395.658985,146762.453985 514390.190985,146763.644985 514384.449985,146765.274985 514379.265985,146767.350985 514375.290985,146772.077985 514367.066985,146782.052985 514344.326985,146787.377985 514332.973985,146796.553985 514316.678985,146800.956985 514309.903985,146805.131985 514302.406985,146810.612985 514294.080985,146815.038985 514286.445985,146817.815985 514282.583985,146823.033985 514277.958985,146826.565985 514274.275985,146829.279985 514270.683985,146831.879985 514268.007985,146838.691985 514261.283985,146846.154985 514255.376985,146849.511985 514252.379985,146854.426985 514246.995985,146866.975985 514234.461985,146873.174985 514227.718985,146875.892985 514224.130985,146883.032985 514216.049985,146888.426985 514211.137985,146895.661985 514205.813985,146898.228985 514203.079985,146900.862985 514199.416985,146903.718985 514196.294985,146910.227985 514189.724985,146918.475985 514180.160985,146921.638985 514177.199985,146925.123985 514174.344985,146929.916985 514170.920985,146942.656985 514162.441985,146948.828985 514158.846985,146952.598985 514156.414985,146955.585985 514153.824985,146964.483985 514144.873985,146967.826985 514140.249985,146969.666985 514137.975985,146978.395985 514128.105985)) POLYGON((146797.091534784 514198.560801946,146799.036341277 514196.430417783,146800.519647422 514194.878956067,146799.137713142 514194.468888446,146798.660722856 514195.421904049,146796.985503573 514198.644726154,146797.091534784 514198.560801946)) #99 Polygon - gid: 2599 POLYGON((144130.790985 514542.589985,144136.106985 514541.268985,144140.618985 514541.819985,144146.580985 514542.271985,144155.308985 514545.689985,144159.779985 514546.073985,144165.774985 514546.027985,144170.614985 514545.336985,144174.457985 514542.248985,144180.591985 514535.602985,144185.031985 514531.945985,144188.930985 514529.699985,144202.240985 514526.170985,144204.522985 514525.434985,144208.647985 514523.675985,144209.506985 514523.064985,144212.582985 514519.733985,144214.710985 514516.736985,144217.305985 514512.269985,144225.821985 514492.742985,144230.222985 514479.998985,144238.048985 514458.756985,144239.749985 514453.779985,144242.237985 514445.130985,144246.840985 514428.052985,144247.696985 514425.401985,144249.538985 514420.578985,144253.385985 514411.927985,144260.058985 514394.218985,144264.745985 514384.187985,144266.213985 514379.927985,144267.402985 514375.585985,144266.909985 514372.870985,144264.565985 514368.375985,144255.527985 514363.949985,144249.852985 514362.074985,144245.934985 514359.844985,144246.620985 514355.223985,144248.164985 514351.697985,144250.544985 514347.859985,144251.479985 514346.801985,144258.417985 514340.953985,144264.816985 514336.013985,144266.807985 514330.309985,144266.470985 514325.834985,144264.754985 514315.479985,144263.754985 514311.093985,144261.914985 514304.532985,144260.268985 514300.367985,144258.258985 514296.998985,144255.314985 514293.564985,144253.224985 514291.582985,144249.714985 514288.669985,144245.918985 514286.308985,144244.887985 514285.843985,144240.548985 514284.624985,144234.199985 514283.756985,144225.189985 514283.542985,144216.921985 514283.099985,144200.074985 514283.128985,144195.587985 514283.291985,144186.779985 514284.886985,144177.834985 514285.878985,144169.973985 514286.948985,144165.504985 514287.444985,144158.597985 514287.500985,144150.714985 514288.363985,144146.268985 514289.065985,144138.749985 514290.519985,144129.998985 514292.618985,144122.836985 514294.931985,144118.663985 514296.619985,144116.254985 514315.702985,144113.154985 514338.329985,144110.932985 514350.449985,144109.642985 514359.358985,144103.633985 514384.235985,144100.698985 514392.568985,144099.732985 514399.419985,144098.307985 514417.516985,144097.345985 514425.834985,144096.877985 514434.147985,144095.446985 514450.289985,144095.470985 514467.498985,144095.977985 514472.854985,144095.698985 514478.235985,144090.849985 514512.499985,144086.867985 514532.967985,144086.837985 514540.297985,144083.986985 514558.486985,144082.564985 514573.165985,144082.617985 514579.549985,144083.019985 514582.853985,144084.070985 514587.218985,144088.382985 514601.055985,144090.700985 514599.014985,144094.407985 514596.448985,144099.296985 514594.867985,144103.775985 514594.417985,144104.772985 514593.932985,144108.205985 514590.960985,144109.332985 514588.480985,144110.651985 514584.097985,144115.058985 514573.308985,144115.953985 514570.340985,144117.115985 514565.480985,144117.981985 514561.064985,144120.043985 514555.351985,144121.899985 514551.257985,144123.475985 514548.300985,144126.738985 514544.570985,144130.790985 514542.589985)) POLYGON((144176.60740853 514401.555584319,144177.632982782 514398.643143597,144179.373625931 514394.085531269,144178.682298521 514392.965629534,144176.60740853 514401.555584319)) #100 Polygon - gid: 2600 POLYGON((153556.031985 514886.227985,153560.525985 514886.012985,153566.393985 514886.836985,153572.264985 514888.653985,153582.160985 514890.869985,153584.416985 514890.833985,153588.654985 514889.150985,153590.995985 514887.355985,153594.093985 514881.247985,153600.596985 514871.470985,153607.108985 514856.972985,153612.956985 514847.521985,153608.356985 514841.430985,153606.284985 514837.439985,153605.664985 514834.687985,153605.359985 514830.122985,153602.267985 514813.476985,153597.582985 514800.609985,153596.965985 514795.730985,153594.556985 514792.788985,153590.938985 514790.044985,153579.228985 514795.635985,153573.643985 514797.721985,153559.445985 514799.291985,153546.944985 514802.898985,153541.754985 514805.976985,153537.104985 514807.634985,153532.352985 514810.440985,153520.030985 514819.197985,153514.515985 514821.769985,153510.278985 514822.486985,153507.876985 514821.350985,153504.524985 514817.626985,153501.188985 514808.128985,153492.871985 514787.013985,153489.388985 514780.831985,153486.307985 514777.186985,153482.664985 514774.839985,153479.481985 514774.368985,153474.831985 514774.926985,153469.574985 514776.303985,153466.025985 514779.167985,153457.313985 514787.843985,153455.681985 514790.459985,153452.692985 514795.895985,153448.357985 514807.237985,153450.054985 514811.435985,153451.618985 514813.811985,153455.073985 514816.927985,153474.460985 514819.993985,153483.496985 514823.991985,153487.335985 514827.674985,153490.999985 514832.613985,153492.523985 514837.561985,153493.082985 514843.424985,153490.543985 514855.424985,153490.223985 514860.751985,153488.498985 514874.433985,153495.036985 514879.182985,153501.180985 514882.939985,153516.063985 514894.582985,153519.796985 514897.079985,153525.665985 514899.415985,153529.748985 514901.565985,153534.832985 514900.527985,153538.446985 514898.728985,153542.061985 514896.077985,153549.964985 514888.768985,153554.033985 514886.791985,153556.031985 514886.227985)) POLYGON( EMPTY) geos-3.4.2/tests/xmltester/tests/TestIsValid.xml0000644000175000017500000001256612206417147021563 0ustar frankiefrankie http://lists.refractions.net/pipermail/jts-devel/2006-March/001447.html (1) POLYGON((-84.738876 42.582151,-84.738888 42.596708,-84.724038 42.596646,-84.719287 42.596633,-84.719227 42.589677,-84.719189 42.582134,-84.72666 42.582141,-84.738876 42.582151),(-84.726654 42.587769,-84.726352 42.587513,-84.726232 42.587565,-84.726351 42.58774,-84.726654 42.587769),(-84.726654 42.587769,-84.727094 42.587452,-84.727147 42.58742,-84.727192 42.587315,-84.727168 42.587211,-84.727028 42.587189,-84.726797 42.587195,-84.726723 42.587239,-84.726654 42.587769)) true http://lists.refractions.net/pipermail/jts-devel/2006-March/001447.html (2) POLYGON((-82.509817 27.972398,-82.514117 27.972798,-82.514018 27.974298,-82.505617 27.973998,-82.505817 27.966898,-82.507967 27.96695,-82.509917 27.966998,-82.510617 27.966998,-82.511217 27.966898,-82.513917 27.966998,-82.514665 27.967018,-82.514633 27.967194,-82.514697 27.967306,-82.514761 27.967402,-82.514985 27.967386,-82.515257 27.967418,-82.515657 27.967498,-82.515881 27.967482,-82.516105 27.967354,-82.516105 27.967194,-82.516073 27.967018,-82.522762 27.96713,-82.522728 27.967269,-82.522698 27.967434,-82.522522 27.96745,-82.522346 27.967402,-82.522186 27.967434,-82.52201 27.967402,-82.521866 27.967466,-82.521866 27.967786,-82.520617 27.967798,-82.516017 27.968898,-82.509817 27.968798,-82.509817 27.972398),(-82.516169 27.967882,-82.516105 27.967722,-82.515945 27.967642,-82.515849 27.967642,-82.515801 27.967706,-82.515673 27.967754,-82.515657 27.967818,-82.515593 27.967946,-82.516169 27.967882),(-82.515593 27.967946,-82.515577 27.967786,-82.515433 27.967722,-82.515305 27.967722,-82.515129 27.967786,-82.515177 27.967946,-82.515593 27.967946)) true http://lists.refractions.net/pipermail/jts-devel/2006-March/001447.html (3) POLYGON((-71.931796 42.991371,-71.93256 42.991018,-71.93288 42.990854,-71.933182 42.990678,-71.933551 42.990446,-71.933835 42.99026,-71.93411 42.990064,-71.934374 42.98986,-71.934563 42.989701,-71.934805 42.98948,-71.935031 42.98925,-71.935299 42.988958,-71.935559 42.988664,-71.936008 42.988123,-71.936214 42.987883,-71.936407 42.987637,-71.936456 42.98757,-71.936383 42.991832,-71.936514 42.99218,-71.936843 42.992423,-71.937311 42.992499,-71.937807 42.992469,-71.942299 42.99218,-71.946553 42.991392,-71.947021 42.993047,-71.942798 42.99363,-71.942331 42.993745,-71.942443 42.994306,-71.937363 42.995159,-71.938871 42.997584,-71.939874 42.997559,-71.939932 42.999107,-71.938708 42.99946,-71.938807 43.000935,-71.938987 43.000993,-71.93738 43.002347,-71.937321 43.002418,-71.937093 43.002389,-71.936907 43.002351,-71.936541 43.002239,-71.936021 43.002065,-71.935846 43.002011,-71.935671 43.001975,-71.935472 43.001935,-71.935093 43.001869,-71.933985 43.00171,-71.933607 43.001674,-71.933126 43.001639,-71.932939 43.001615,-71.93285 43.001592,-71.932769 43.001558,-71.932627 43.001467,-71.931946 43.000986,-71.931801 43.000899,-71.931646 43.000819,-71.931466 43.000763,-71.93127 43.000744,-71.931078 43.000761,-71.930893 43.000798,-71.930528 43.000881,-71.929887 43.000996,-71.9297 43.00101,-71.929034 43.001018,-71.928727 43.001025,-71.928253 43.000345,-71.927829 42.999794,-71.927479 42.999373,-71.927353 42.999231,-71.927114 42.998965,-71.926971 42.998822,-71.926888 42.998722,-71.92683 42.99867,-71.92668 42.998502,-71.926461 42.998256,-71.926366 42.998132,-71.926283 42.998004,-71.92625 42.997947,-71.926207 42.997874,-71.926143 42.997741,-71.926086 42.997608,-71.926038 42.997471,-71.926002 42.997331,-71.925972 42.997122,-71.925968 42.996912,-71.926004 42.996632,-71.926095 42.996318,-71.926104 42.996288,-71.926203 42.996068,-71.926224 42.996021,-71.926372 42.995759,-71.926729 42.995183,-71.926877 42.994951,-71.926986 42.994781,-71.927784 42.994482,-71.927982 42.994385,-71.928404 42.994121,-71.928627 42.993843,-71.928705 42.993509,-71.928598 42.992996,-71.928837 42.992817,-71.928863 42.992798,-71.929156 42.992616,-71.929384 42.992486,-71.92978 42.992284,-71.930189 42.992093,-71.931796 42.991371),(-71.935914 43.001009,-71.935867 43.000784,-71.935867 43.000706,-71.935853 43.000638,-71.935832 43.000588,-71.935725 43.000595,-71.935689 43.000663,-71.9357 43.000852,-71.935732 43.000934,-71.935785 43.000977,-71.935914 43.001009),(-71.935914 43.001009,-71.936139 43.000984,-71.93621 43.000934,-71.936253 43.000874,-71.936257 43.000774,-71.936228 43.000552,-71.936209 43.000485,-71.936203 43.000463,-71.936121 43.000449,-71.93606 43.000456,-71.93601 43.000492,-71.936 43.000556,-71.936014 43.000638,-71.936032 43.000699,-71.936028 43.000806,-71.936003 43.000881,-71.935914 43.001009)) true geos-3.4.2/tests/xmltester/tests/badguy3.xml0000644000175000017500000000162512206417147020720 0ustar frankiefrankie Extreme simplification of the Big Bad Nasty buffer. If the first element is reordered backward, things are fine !! MULTIPOLYGON((( 3135840 10098400, 3135702 10098200, 3135830 10098461, 3135840 10098400 )) , (( 3129627 10098250, 3130490 10098813, 3130663 10098320, 3130263 10097448, 3129627 10098250 ),( 3130240 10098310, 3130210 10098340, 3130193 10098318, 3130240 10098310 ))) MULTIPOLYGON((( 3135840 10098400, 3135702 10098200, 3135830 10098461, 3135840 10098400 )) , (( 3129627 10098250, 3130490 10098813, 3130663 10098320, 3130263 10097448, 3129627 10098250 ),( 3130240 10098310, 3130210 10098340, 3130193 10098318, 3130240 10098310 ))) geos-3.4.2/tests/xmltester/tests/buffer.xml0000644000175000017500000030114212206417147020630 0ustar frankiefrankie Case #1 POINT (100 100) POLYGON ((70.0000000000000000 99.9999999999999005, 70.5764415879030622 105.8527096604837396, 72.2836140246613610 111.4805029709525854, 75.0559116309235748 116.6671069905879676, 78.7867965644034882 121.2132034355963413, 83.3328930094118192 124.9440883690762831, 88.5194970290471872 127.7163859753385537, 94.1472903395160330 129.4235584120968952, 99.9999999999998863 130.0000000000000000, 105.8527096604837396 129.4235584120969236, 111.4805029709525996 127.7163859753386390, 116.6671069905879961 124.9440883690764110, 121.2132034355963697 121.2132034355964834, 124.9440883690763116 116.6671069905881382, 127.7163859753385680 111.4805029709527560, 129.4235584120968952 105.8527096604839102, 130.0000000000000000 100.0000000000000000, 129.4235584120969236 94.1472903395161609, 127.7163859753386106 88.5194970290473151, 124.9440883690763684 83.3328930094119471, 121.2132034355964407 78.7867965644035877, 116.6671069905880955 75.0559116309236600, 111.4805029709527275 72.2836140246614036, 105.8527096604838817 70.5764415879030906, 100.0000000000000426 70.0000000000000000, 94.1472903395162035 70.5764415879030764, 88.5194970290473577 72.2836140246613752, 83.3328930094119897 75.0559116309236032, 78.7867965644036303 78.7867965644035309, 75.0559116309236884 83.3328930094118761, 72.2836140246614320 88.5194970290472298, 70.5764415879031048 94.1472903395160614, 70.0000000000000000 99.9999999999999005)) Case #2 LINESTRING (10 10, 100 100) POLYGON ((-10.0000000000000000 9.9999999999999805, -9.6157056080646157 13.9018064403225328, -8.4775906502257463 17.6536686473017674, -6.6293922460509283 21.1114046603920080, -4.1421356237309501 24.1421356237309510, 85.8578643762690490 114.1421356237309510, 85.8578643762690774 114.1421356237309794, 88.8885953396079884 116.6293922460509265, 92.3463313526982290 118.4775906502257499, 96.0981935596774548 119.6157056080646157, 100.0000000000000142 120.0000000000000000, 103.9018064403225736 119.6157056080646015, 107.6536686473017994 118.4775906502257357, 111.1114046603920542 116.6293922460508981, 114.1421356237309510 114.1421356237309510, 116.6293922460508981 111.1114046603920542, 118.4775906502257357 107.6536686473017994, 119.6157056080646015 103.9018064403225736, 120.0000000000000000 100.0000000000000142, 119.6157056080646157 96.0981935596774548, 118.4775906502257499 92.3463313526982290, 116.6293922460509265 88.8885953396079884, 114.1421356237309510 85.8578643762690490, 24.1421356237309510 -4.1421356237309501, 24.1421356237309297 -4.1421356237309723, 21.1114046603920222 -6.6293922460509194, 17.6536686473017745 -8.4775906502257428, 13.9018064403225488 -9.6157056080646122, 9.9999999999999876 -10.0000000000000000, 6.0981935596774273 -9.6157056080646068, 2.3463313526982019 -8.4775906502257339, -1.1114046603920393 -6.6293922460509078, -4.1421356237309492 -4.1421356237309519, -6.6293922460508963 -1.1114046603920573, -8.4775906502257303 2.3463313526981944, -9.6157056080646051 6.0981935596774104, -10.0000000000000000 9.9999999999999805)) Case #3 LINESTRING (100 100, 200 100, 200 200, 100 200, 100 100) POLYGON ((90.0000000000000000 100.0000000000000000, 90.0000000000000000 200.0000000000000000, 90.1921471959676921 201.9509032201612797, 90.7612046748871251 203.8268343236508997, 91.6853038769745439 205.5557023301960271, 92.9289321881345245 207.0710678118654755, 94.4442976698039729 208.3146961230254419, 96.1731656763491003 209.2387953251128749, 98.0490967798387203 209.8078528040323079, 100.0000000000000000 210.0000000000000000, 200.0000000000000000 210.0000000000000000, 201.9509032201612797 209.8078528040323079, 203.8268343236508997 209.2387953251128749, 205.5557023301960271 208.3146961230254419, 207.0710678118654755 207.0710678118654755, 208.3146961230254419 205.5557023301960271, 209.2387953251128749 203.8268343236508997, 209.8078528040323079 201.9509032201612797, 210.0000000000000000 200.0000000000000000, 210.0000000000000000 100.0000000000000000, 209.8078528040323079 98.0490967798387203, 209.2387953251128749 96.1731656763491003, 208.3146961230254419 94.4442976698039729, 207.0710678118654755 92.9289321881345245, 205.5557023301960271 91.6853038769745439, 203.8268343236508997 90.7612046748871251, 201.9509032201612797 90.1921471959676921, 200.0000000000000000 90.0000000000000000, 100.0000000000000000 90.0000000000000000, 98.0490967798387061 90.1921471959676921, 97.2322523941698904 90.4399342313836030, 96.1731656763491145 90.7612046748871251, 96.1731656763490861 90.7612046748871393, 94.4442976698039587 91.6853038769745581, 92.9289321881345245 92.9289321881345245, 91.6853038769745581 94.4442976698039587, 90.7612046748871393 96.1731656763490861, 90.7612046748871251 96.1731656763491145, 90.5373906437101397 96.9109816581012069, 90.1921471959676921 98.0490967798386919, 90.0000000000000000 100.0000000000000000), (110.0000000000000000 110.0000000000000000, 190.0000000000000000 110.0000000000000000, 190.0000000000000000 190.0000000000000000, 110.0000000000000000 190.0000000000000000, 110.0000000000000000 110.0000000000000000)) Case #4 LINESTRING (40 40, 160 40, 100 180, 40 80) POLYGON ((-10.0000000000000000 40.0000000000000071, -9.0392640201615233 49.7545161008064056, -6.1939766255643445 59.1341716182544701, -5.7089632597009334 60.0415678037439804, -8.5071250072665823 67.8732187481833051, -9.9408918612425712 77.5695020872925056, -9.4554582481658347 87.3591880981481808, -7.0694791095526091 96.8660646374722063, -2.8746462856272093 105.7247877713763273, 57.1253537143727925 205.7247877713763273, 63.0793179783294420 213.7174026142983507, 70.5002381509231526 220.3703362736521001, 79.0932615344621155 225.4192501780203202, 88.5169646845435523 228.6635376842249343, 98.3969190624655141 229.9742947074564938, 108.3405680669374220 229.2994414199672519, 117.9528243414483342 226.6657915197535260, 126.8517676352035579 222.1779868517338627, 134.6838195002822829 216.0143397117292352, 141.1377918943432235 208.4197480294549791, 145.9572515009028848 199.6959649289583751, 205.9572515009028848 59.6959649289583822, 205.9572515009028848 59.6959649289583894, 208.9292730958345885 50.2920471390894264, 209.9976214261368739 40.4877004497635937, 209.1207306555521086 30.6643789780913245, 206.3327176513530503 21.2042750860734870, 201.7420546119134031 12.4754495626896720, 195.5273487787097508 4.8175116179098252, 187.9303934299507546 -1.4715941681551830, 179.2467605182728221 -6.1471798656456880, 169.8143009612940659 -9.0273341784064609, 160.0000000000000000 -10.0000000000000000, 40.0000000000000000 -10.0000000000000000, 39.9999999999999005 -10.0000000000000000, 30.2454838991935233 -9.0392640201615091, 20.8658283817454411 -6.1939766255643089, 12.2214883490198183 -1.5734806151272143, 4.6446609406725869 4.6446609406726607, -1.5734806151272844 12.2214883490199231, -6.1939766255643489 20.8658283817455370, -9.0392640201615251 30.2454838991936050, -10.0000000000000000 40.0000000000000071)) Case #5 POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300)) POLYGON ((70.0000000000000000 80.0000000000000000, 70.0000000000000000 300.0000000000000000, 70.1921471959676921 301.9509032201613081, 70.7612046748871393 303.8268343236508713, 71.6853038769745439 305.5557023301960271, 72.9289321881345245 307.0710678118654755, 74.4442976698039871 308.3146961230254419, 76.1731656763491003 309.2387953251128465, 78.0490967798387203 309.8078528040322794, 80.0000000000000000 310.0000000000000000, 280.0000000000000000 310.0000000000000000, 281.9509032201613081 309.8078528040322794, 283.8268343236508713 309.2387953251128465, 285.5557023301960271 308.3146961230254419, 287.0710678118654755 307.0710678118654755, 288.3146961230254419 305.5557023301960271, 289.2387953251128465 303.8268343236508713, 289.8078528040322794 301.9509032201613081, 290.0000000000000000 300.0000000000000000, 290.0000000000000000 80.0000000000000000, 289.8078528040322794 78.0490967798387203, 289.2387953251128465 76.1731656763491003, 288.3146961230254419 74.4442976698039729, 287.0710678118654755 72.9289321881345245, 285.5557023301960271 71.6853038769745439, 283.8268343236508713 70.7612046748871393, 281.9509032201613081 70.1921471959676921, 280.0000000000000000 70.0000000000000000, 80.0000000000000000 70.0000000000000000, 79.9999999982041317 70.0000000000000000, 78.0490967782975389 70.1921471962742629, 76.1731656751047410 70.7612046754025670, 74.4442976688707176 71.6853038775981304, 72.9289321874995977 72.9289321887694655, 71.6853038766004005 74.4442976703639232, 70.7612046747153158 76.1731656767638867, 70.1921471959238943 78.0490967800588891, 70.0000000000000000 80.0000000000000000)) Case #6 POLYGON ((60 300, 60 160, 240 160, 240 300, 60 300)) POLYGON ((50.0000000000000000 159.9999999982041459, 50.0000000000000000 160.0000000000000000, 50.0000000000000000 300.0000000000000000, 50.1921471959676992 301.9509032201613081, 50.7612046748871322 303.8268343236508713, 51.6853038769745439 305.5557023301960271, 52.9289321881345245 307.0710678118654755, 54.4442976698039800 308.3146961230254419, 56.1731656763491003 309.2387953251128465, 58.0490967798387203 309.8078528040322794, 60.0000000000000000 310.0000000000000000, 240.0000000000000000 310.0000000000000000, 241.9509032201612797 309.8078528040322794, 243.8268343236508997 309.2387953251128465, 245.5557023301960271 308.3146961230254419, 247.0710678118654755 307.0710678118654755, 248.3146961230254419 305.5557023301960271, 249.2387953251128749 303.8268343236508713, 249.8078528040323079 301.9509032201613081, 250.0000000000000000 300.0000000000000000, 250.0000000000000000 160.0000000000000000, 249.8078528040323079 158.0490967798387203, 249.2387953251128749 156.1731656763491003, 248.3146961230254419 154.4442976698039729, 247.0710678118654755 152.9289321881345245, 245.5557023301960271 151.6853038769745581, 243.8268343236508997 150.7612046748871251, 241.9509032201612797 150.1921471959676921, 240.0000000000000000 150.0000000000000000, 60.0000000000000000 150.0000000000000000, 58.0490967800588891 150.1921471959238943, 56.1731656767638938 150.7612046747153158, 54.4442976703639303 151.6853038766004147, 52.9289321887694584 152.9289321874995835, 51.6853038775981304 154.4442976688707176, 50.7612046754025670 156.1731656751047410, 50.1921471962742558 158.0490967782975247, 50.0000000000000000 159.9999999982041459)) Case #7 POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280)) POLYGON ((70.0000000000000000 80.0000000000000000, 70.0000000000000000 300.0000000000000000, 70.1921471959676921 301.9509032201613081, 70.7612046748871393 303.8268343236508713, 71.6853038769745439 305.5557023301960271, 72.9289321881345245 307.0710678118654755, 74.4442976698039871 308.3146961230254419, 76.1731656763491003 309.2387953251128465, 78.0490967798387203 309.8078528040322794, 80.0000000000000000 310.0000000000000000, 280.0000000000000000 310.0000000000000000, 281.9509032201613081 309.8078528040322794, 283.8268343236508713 309.2387953251128465, 285.5557023301960271 308.3146961230254419, 287.0710678118654755 307.0710678118654755, 288.3146961230254419 305.5557023301960271, 289.2387953251128465 303.8268343236508713, 289.8078528040322794 301.9509032201613081, 290.0000000000000000 300.0000000000000000, 290.0000000000000000 80.0000000000000000, 289.8078528040322794 78.0490967798387203, 289.2387953251128465 76.1731656763491003, 288.3146961230254419 74.4442976698039729, 287.0710678118654755 72.9289321881345245, 285.5557023301960271 71.6853038769745439, 283.8268343236508713 70.7612046748871393, 281.9509032201613081 70.1921471959676921, 280.0000000000000000 70.0000000000000000, 80.0000000000000000 70.0000000000000000, 79.9999999982041317 70.0000000000000000, 78.0490967782975389 70.1921471962742629, 76.1731656751047410 70.7612046754025670, 74.4442976688707176 71.6853038775981304, 72.9289321874995977 72.9289321887694655, 71.6853038766004005 74.4442976703639232, 70.7612046747153158 76.1731656767638867, 70.1921471959238943 78.0490967800588891, 70.0000000000000000 80.0000000000000000), (110.0000000000000000 110.0000000000000000, 250.0000000000000000 110.0000000000000000, 250.0000000000000000 255.8578643762690490, 187.0710678118654755 192.9289321881345245, 185.5557023301960271 191.6853038769745581, 183.8268343236508997 190.7612046748871251, 181.9509032201612797 190.1921471959676921, 180.0000000000000000 190.0000000000000000, 178.0490967798387203 190.1921471959676921, 176.1731656763491003 190.7612046748871251, 174.4442976698039729 191.6853038769745581, 172.9289321881345245 192.9289321881345245, 110.0000000000000000 255.8578643762690490, 110.0000000000000000 110.0000000000000000)) Case #8 POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280)) POLYGON ((-120.0000000000000000 80.0000000000000000, -120.0000000000000000 300.0000000000000000, -116.1570560806460719 339.0180644032257078, -104.7759065022573424 376.5366864730179941, -86.2939224605090658 411.1140466039204284, -61.4213562373094888 441.4213562373095101, -31.1140466039203929 466.2939224605090658, 3.4633135269820596 484.7759065022573850, 40.9819355967743633 496.1570560806461003, 80.0000000000000000 500.0000000000000000, 280.0000000000000000 500.0000000000000000, 319.0180644032256509 496.1570560806461003, 356.5366864730179373 484.7759065022573282, 391.1140466039204284 466.2939224605090658, 421.4213562373095101 441.4213562373095101, 446.2939224605090658 411.1140466039204284, 464.7759065022573282 376.5366864730179373, 476.1570560806461003 339.0180644032256509, 480.0000000000000000 300.0000000000000000, 480.0000000000000000 80.0000000000000000, 476.1570560806461003 40.9819355967743491, 464.7759065022573282 3.4633135269820485, 446.2939224605090658 -31.1140466039204426, 421.4213562373095101 -61.4213562373095030, 391.1140466039204284 -86.2939224605090374, 356.5366864730179373 -104.7759065022573424, 319.0180644032256509 -116.1570560806460861, 280.0000000000000000 -120.0000000000000000, 80.0000000000000000 -120.0000000000000000, 79.9999999640827326 -120.0000000000000000, 40.9819355659506570 -116.1570560745148697, 3.4633135020947048 -104.7759064919486747, -31.1140466225855583 -86.2939224480374207, -61.4213562500081807 -61.4213562246108253, -86.2939224679919903 -31.1140465927214258, -104.7759065056935981 3.4633135352778681, -116.1570560815219864 40.9819356011778027, -120.0000000000000000 80.0000000000000000)) Case #9 POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300)) POLYGON ((90.0000000000000000 90.0000000000000000, 90.0000000000000000 290.0000000000000000, 270.0000000000000000 290.0000000000000000, 270.0000000000000000 90.0000000000000000, 90.0000000000000000 90.0000000000000000)) Case #10 POLYGON ((100 300, 300 300, 300 100, 100 100, 100 300), (220 220, 180 220, 180 180, 220 180, 220 220)) POLYGON ((90.0000000000000000 100.0000000000000000, 90.0000000000000000 300.0000000000000000, 90.1921471959676921 301.9509032201613081, 90.7612046748871393 303.8268343236508713, 91.6853038769745439 305.5557023301960271, 92.9289321881345245 307.0710678118654755, 94.4442976698039871 308.3146961230254419, 96.1731656763491003 309.2387953251128465, 98.0490967798387203 309.8078528040322794, 100.0000000000000000 310.0000000000000000, 300.0000000000000000 310.0000000000000000, 301.9509032201613081 309.8078528040322794, 303.8268343236508713 309.2387953251128465, 305.5557023301960271 308.3146961230254419, 307.0710678118654755 307.0710678118654755, 308.3146961230254419 305.5557023301960271, 309.2387953251128465 303.8268343236508713, 309.8078528040322794 301.9509032201613081, 310.0000000000000000 300.0000000000000000, 310.0000000000000000 100.0000000000000000, 309.8078528040322794 98.0490967798387203, 309.2387953251128465 96.1731656763491003, 308.3146961230254419 94.4442976698039729, 307.0710678118654755 92.9289321881345245, 305.5557023301960271 91.6853038769745439, 303.8268343236508713 90.7612046748871393, 301.9509032201613081 90.1921471959676921, 300.0000000000000000 90.0000000000000000, 100.0000000000000000 90.0000000000000000, 99.9999999982041317 90.0000000000000000, 98.0490967782975389 90.1921471962742629, 96.1731656751047410 90.7612046754025670, 94.4442976688707176 91.6853038775981304, 92.9289321874995977 92.9289321887694655, 91.6853038766004005 94.4442976703639232, 90.7612046747153158 96.1731656767638867, 90.1921471959238943 98.0490967800588891, 90.0000000000000000 100.0000000000000000), (190.0000000000000000 190.0000000000000000, 210.0000000000000000 190.0000000000000000, 210.0000000000000000 210.0000000000000000, 190.0000000000000000 210.0000000000000000, 190.0000000000000000 190.0000000000000000)) Case #11 GEOMETRYCOLLECTION (POINT (100 100), POLYGON ((400 260, 280 380, 240 220, 120 300, 120 100, 260 40, 200 160, 400 260)), LINESTRING (260 400, 220 280, 120 400, 20 280, 160 160, 60 40, 160 20, 360 140)) POLYGON ((0.0700425798558265 278.3276372309692306, 0.1228569041891950 282.2134096658008957, 0.9261335993623063 286.0156147259132808, 2.4495449200752391 289.5906999998719016, 4.6355744080524834 292.8036879932895999, 104.6355744080524772 412.8036879932895999, 107.4027140469530792 415.5341039850120524, 110.6457864955514481 417.6776324691173841, 114.2422665854686130 419.1532896894290161, 118.0562772015389754 419.9053244556008622, 121.9437227984610246 419.9053244556008622, 125.7577334145313870 419.1532896894290161, 129.3542135044485519 417.6776324691173841, 132.5972859530469066 415.5341039850120524, 135.3644255919475086 412.8036879932895999, 212.3798679762521431 320.3851571321240499, 241.0263340389897166 406.3245553203367422, 241.0263340389897451 406.3245553203367990, 242.6247672442066516 409.9046093654421838, 244.8909209000858880 413.1040348272026108, 247.7377079925056762 415.7998795793810132, 251.0557280900008550 417.8885438199983469, 254.7174715409918520 419.2897613536241010, 258.5822195981864411 419.9496841762528447, 262.5014521611223017 419.8429518239000231, 266.3245553203367422 418.9736659610102834, 269.9046093654421838 417.3752327557933768, 273.1040348272025540 415.1090790999141404, 275.7998795793809563 412.2622920074943522, 277.8885438199982900 408.9442719099992019, 279.2897613536240442 405.2825284590081765, 279.9496841762528447 401.4177804018136158, 279.9100410175586262 399.9620759689305487, 280.3536479122308833 399.9968730844143465, 284.1616087256720107 399.5622343512802672, 287.8167399063642620 398.4091981692916988, 291.1848115464001125 396.5801082828645576, 294.1421356237309510 394.1421356237309510, 414.1421356237309510 274.1421356237309510, 416.5501405931683507 271.2291071036998460, 418.3671308115406759 267.9150809062039116, 419.5282205447628598 264.3184027550822748, 419.9919466308888332 260.5675120330809023, 419.7417491527499465 256.7963551398606228, 418.7865628018326447 253.1396021913596144, 417.1604978154628043 249.7278378748436296, 414.9216218812061925 246.6828981968932624, 412.1498865073597813 244.1135196516573842, 408.9442719099991450 242.1114561800016816, 226.8328157299974634 151.0557280900008550, 252.8452122963902013 99.0309349572153366, 349.7100848914494691 157.1498585142508944, 353.2535741450111004 158.8277916438210298, 357.0563247607407220 159.7821832992663360, 360.9721991650829978 159.9763567444970249, 364.8507125007266723 159.4028500029066322, 368.5428156752783480 158.0837026169481874, 371.9066232342952958 156.0696086808776784, 374.8128659397295337 153.4379686951414214, 377.1498585142508659 150.2899151085505309, 378.8277916438210013 146.7464258549889280, 379.7821832992663076 142.9436752392593064, 379.9763567444970249 139.0278008349170591, 379.4028500029066322 135.1492874992733562, 378.0837026169481874 131.4571843247216805, 376.0696086808777068 128.0933767657047042, 373.4379686951414214 125.1871340602704805, 370.2899151085505309 122.8501414857491199, 270.7866027420680552 63.1481540658596430, 277.8885438199982900 48.9442719099991592, 279.3258977375772929 45.1487548627513107, 279.9674142813494768 41.1412129148242087, 279.7866759027806438 37.0866760018289554, 278.7911253793552078 33.1521093045119386, 277.0217593221912011 29.4995376493510548, 274.5514399421601865 26.2793733521494808, 271.4818945957121059 23.6242222629593108, 267.9395266686285595 21.6434230784131323, 264.0702103048396339 20.4185447917071947, 260.0332833325381898 20.0000276945247961, 255.9949857579331365 20.4051062539027406, 252.1216140284166443 21.6170993996388425, 222.6321098525542084 34.2554583321513206, 170.2899151085505309 2.8501414857491163, 170.2899151085505309 2.8501414857491159, 166.9699144252653014 1.2537925727767922, 163.4134465985324027 0.2934431642925626, 159.7411713289505428 0.0016748771542679, 156.0776772972363062 0.3883864861815968, 56.0776772972363204 20.3883864861815951, 56.0776772972361996 20.3883864861816200, 52.4812515061284230 21.4670989565609567, 49.1498221084192508 23.1989988476563624, 46.2008044925838703 25.5230457848307566, 43.7381360403424253 28.3573293202294003, 41.8486128798686963 31.6019558458453318, 40.5988307781546069 35.1425693185266184, 40.0328379900072235 38.8543817098608457, 40.1705827884231823 42.6065711287477029, 41.0072103927405820 46.2668926059394607, 42.5132340741584116 49.7063390346116378, 44.6355744080524843 52.8036879932895999, 80.4723709979361956 95.8078439011500365, 80.3842943919353985 96.0981935596773695, 80.0000000000000000 99.9999999999999289, 80.3842943919353843 103.9018064403225026, 81.5224093497742359 107.6536686473017284, 83.3706077539490451 111.1114046603919832, 85.8578643762689921 114.1421356237308942, 88.8885953396078889 116.6293922460508554, 92.3463313526981295 118.4775906502257072, 96.0981935596773553 119.6157056080645873, 99.9999999999999289 120.0000000000000000, 100.0000000000000000 120.0000000000000000, 100.0000000000000000 185.0870158363060227, 6.9841725308806293 264.8148679526940441, 6.9841725308805440 264.8148679526941578, 4.2932660917386549 267.6186224540613807, 2.1953680497354338 270.8898363837075749, 0.7696846333914061 274.5050049225884550, 0.0700425798558265 278.3276372309692306), (47.9915194493919586 282.3488246356437230, 100.0000000000000000 237.7701270208368101, 100.0000000000000000 300.0000000000000000, 100.3839234475633617 303.8999411135228002, 101.5209540688945395 307.6501543432858057, 103.3674385923808785 311.1066602100622163, 105.8524861476094685 314.1367553489624243, 108.8806899321040760 316.6241073027693460, 112.3357901021779242 318.4732207977419876, 116.0851372609338910 319.6131040310878006, 119.9847851796418183 319.9999942127302006, 123.8850172309783346 319.6190377214327327, 127.6360943613988326 318.4848603701465208, 131.0940039245045909 316.6410058867568864, 203.8537364874001696 268.1345175114931862, 120.0000000000000000 368.7590012963734125, 47.9915194493919586 282.3488246356437230), (215.0040775095006609 260.7009568300928208, 227.4803348551585884 252.3834519329875548, 230.0892518816914674 262.8191200391190705, 229.1695405949105009 262.2258748378918085, 225.5864699071360917 260.7960588946783673, 221.7955438638937835 260.0807625087496717, 217.9378111584315434 260.1065996576324437, 215.0040775095006609 260.7009568300928208), (96.8836262557126844 53.0193528032286068, 156.3403380937374152 41.1280104356236578, 177.2802617815351880 53.6919646483023243, 118.4536428779042296 78.9033727498584483, 96.8836262557126844 53.0193528032286068)) Case #12 GEOMETRYCOLLECTION (POINT (100 100), POLYGON ((400 260, 120 300, 120 100, 400 260)), LINESTRING (20 280, 160 160, 60 40)) POLYGON ((0.0589102899683682 278.4660700223052459, 0.1428178439019948 282.3858576695903366, 0.9898257720584154 286.2139581446373882, 2.5673840347661048 289.8032596930139562, 4.8148679526940592 293.0158274691193583, 7.6459079792798290 295.7282042949466359, 10.9517088339672366 297.8361550501977035, 14.6052304438251515 299.2586723695006867, 18.4660700223052352 299.9410897100316333, 22.3858576695902869 299.8571821560980197, 26.2139581446373811 299.0101742279416044, 29.8032596930139349 297.4326159652339356, 33.0158274691193370 295.1851320473059559, 33.0158274691193725 295.1851320473059559, 100.0000000000000000 237.7701270208368385, 100.0000000000000000 300.0000000000000000, 100.3610465527466715 303.7830553123919231, 101.4311507496616827 307.4295247168449805, 103.1716768476074293 310.8077536925416666, 105.5197837518210235 313.7957724468756737, 108.3906938719777600 316.2856995927674575, 111.6807539878648328 318.1876371689555185, 115.2711776131651931 319.4329163748977862, 119.0323337405973660 319.9765768341428611, 122.8284271247461845 319.7989898732233200, 402.8284271247462129 279.7989898732233200, 406.5320848573002763 278.9032237308092022, 409.9986364407343444 277.3212952554368371, 413.1022505800438012 275.1106263846917273, 415.7302701354329884 272.3514615113477362, 417.7873014293543292 269.1439547167125284, 419.1986769124150101 265.6045343082814156, 419.9131654979004225 261.8616766242365088, 419.9048321833120667 258.0512425101661620, 419.1739794570858635 254.3115457478108112, 417.7471363186568851 250.7783324454299532, 415.6760953104280247 247.5798536313625959, 413.0360325161242372 244.8322099092006283, 409.9227787671366627 242.6351371575108260, 129.9227787671366627 82.6351371575108118, 126.4648010002813976 81.0736599410567322, 122.7741579330332939 80.1933332495700171, 119.4045292180186522 80.0444363579957638, 75.3644255919475228 27.1963120067104036, 75.3644255919474944 27.1963120067103752, 72.5713268488278942 24.4448805449800837, 69.2951190649891373 22.2912236004947175, 65.6617050682456949 20.8181050018461171, 61.8107149208503515 20.0821358706459208, 57.8901400145073524 20.1115990878699122, 54.0506458441837196 20.9053623986033301, 50.4397820176318632 22.4329219239622866, 47.1963120067104001 24.6355744080524843, 44.4448805449801085 27.4286731511720845, 42.2912236004947317 30.7048809350108236, 40.8181050018461278 34.3382949317542696, 40.0821358706459208 38.1892850791496201, 40.1115990878699051 42.1098599854926121, 40.9053623986033230 45.9493541558162519, 42.4329219239622688 49.5602179823681013, 44.6355744080524701 52.8036879932895786, 44.6355744080524843 52.8036879932895999, 80.4723709979361956 95.8078439011500365, 80.3842943919353985 96.0981935596773695, 80.0000000000000000 99.9999999999999289, 80.3842943919353843 103.9018064403225026, 81.5224093497742359 107.6536686473017284, 83.3706077539490451 111.1114046603919832, 85.8578643762689921 114.1421356237308942, 88.8885953396078889 116.6293922460508554, 92.3463313526981295 118.4775906502257072, 96.0981935596773553 119.6157056080645873, 99.9999999999999289 120.0000000000000000, 100.0000000000000000 120.0000000000000000, 100.0000000000000000 185.0870158363060227, 6.9841725308806293 264.8148679526940441, 6.9841725308806115 264.8148679526941009, 4.2717957050533339 267.6459079792798548, 2.1638449498022680 270.9517088339672455, 0.7413276304993075 274.6052304438251781, 0.0589102899683682 278.4660700223052459)) Case #13 POLYGON ((260 400, 220 300, 80 300, 180 220, 40 200, 180 160, 60 20, 200 80, 280 20, 260 140, 440 20, 340 180, 520 160, 280 220, 460 340, 300 300, 260 400), (260 320, 240 260, 220 220, 160 180, 220 160, 200 100, 260 160, 300 140, 320 180, 260 200, 260 320)) POLYGON ((35.0116240372882501 200.3407422114144651, 35.1713912564989570 201.2978973773705036, 35.5130370199346430 202.2061648205705353, 36.0236926034150855 203.0313329556259703, 36.6841232130156953 203.7423202874070967, 37.4694524994158655 204.3123461534630394, 38.3500995719418896 204.7199394675666895, 39.2928932179245507 204.9497474681788560, 39.2928932188134539 204.9497474683058442, 167.8519380725216195 223.3153253045498730, 76.8765247622278736 296.0956559527848526, 76.1961497616868115 296.7548923955460509, 75.6523334151183633 297.5306285685009584, 75.2645987908988161 298.3950154552634899, 75.0468656059109946 299.3170214687909265, 75.0069505061331085 300.2635464888699062, 75.1462864481637354 301.2006101601772912, 75.4598712559176619 302.0945717908817301, 75.9364471993134771 302.9133380572862961, 76.5589051480572351 303.6275151577812608, 77.3048987913560381 304.2114640536476031, 78.1476468730040352 304.6442209134480663, 79.0568946415105529 304.9102497169480444, 79.9999999991020729 305.0000000000000000, 80.0000000000000000 305.0000000000000000, 216.6148351928655131 305.0000000000000000, 255.3576165455737055 401.8569533817704951, 255.8146424205861820 402.7354674065766744, 256.4358447295115297 403.5066789427960430, 257.1968559534740848 404.1403361523463786, 258.0678243757334371 404.6115829556661083, 259.0145850565194792 404.9019340457787735, 260.0000000000000000 405.0000000000000000, 260.9854149434805208 404.9019340457787735, 261.9321756242665629 404.6115829556661083, 262.8031440465259152 404.1403361523463786, 263.5641552704884703 403.5066789427960430, 264.1853575794138465 402.7354674065766744, 264.6423834544262945 401.8569533817704951, 303.0214654493869375 305.9092483943688308, 458.7873218748183604 344.8507125007266723, 459.7746718505221679 344.9949201420095619, 460.7709957975484372 344.9401989312336809, 461.7366138865052676 344.6887282080748491, 462.6330691866506868 344.2505231040791500, 463.4246592605662727 343.6430356777030966, 464.0798580577391022 342.8904598645719375, 464.5725714783865214 342.0227679241687611, 464.8831766031471489 341.0745167576526455, 464.9993032000341486 340.0834716366707084, 464.9163263841733738 339.0891021548600861, 464.6375508095448481 338.1310103026260094, 464.1740790570639206 337.2473532690553384, 463.5443694606101417 336.4733237848231511, 462.7735009811261193 335.8397485283107926, 292.1779645357767663 222.1093908980778906, 521.2126781251816965 164.8507125007266723, 521.2126781251816965 164.8507125007266438, 522.1543805669399489 164.5120554487718039, 523.0097792050349881 163.9926468835772653, 523.7446070407530669 163.3132941478750126, 524.3294271035638303 162.5012118972463213, 524.7408116868432444 161.5889318896323061, 524.9622808543857673 160.6129997734068411, 524.9849626214331693 159.6125110802694280, 524.8079483635763154 158.6275450706185381, 524.4383292159610619 157.6975591710650235, 523.8909120046585031 156.8598083224101458, 523.1876260898992541 156.1478525585079637, 522.3566448828429429 155.5902126019307730, 521.4312572276436413 155.2092273328493377, 520.4485338608891425 155.0201589005636151, 519.4478423696257323 155.0305813266319035, 349.7151310357609759 173.8897714748391081, 444.2399915200254554 22.6499947000158990, 444.2399915200254554 22.6499947000158883, 444.6715115921828101 21.7824083269838624, 444.9275854436395434 20.8478807083734132, 444.9985958041454523 19.8815095498393895, 444.8818757640429453 18.9195884930036193, 444.5818089343991346 17.9982440486761526, 444.1096648133582221 17.1520788069461005, 443.4831755417974932 16.4128718805953362, 442.7258699439179281 15.8083853887976744, 441.8661898639580272 15.3613218055506042, 440.9364219864447136 15.0884713313161907, 439.9714852572094514 15.0000813097167676, 439.0076194455472773 15.0994713718677183, 438.0810241007007448 15.3829087622282490, 437.2264990188738807 15.8397485283107695, 437.2264990188738807 15.8397485283107819, 266.8293246457370742 129.4378647770686541, 284.9319696191607250 20.8219949365267851, 284.9972548509964554 19.8343378311375389, 284.8667019190206133 18.8531728851298759, 284.5454270815070004 17.9169511175436220, 284.0460208258600119 17.0623622625131048, 283.3880544581302843 16.3228969298177553, 282.5973131201902788 15.7275341363929542, 281.7047852919733941 15.2996056433240497, 280.7454483793235909 15.0558816039900698, 279.7568979792339974 15.0059133560280014, 278.7778745404031611 15.1516591125411484, 277.8467451580276020 15.4874072213945020, 277.0000000000000000 16.0000000000000000, 199.3125897611296296 74.2655576791527636, 61.9695964928958389 15.4042748499097097, 61.0577229412326901 15.1131582612499038, 60.1070833258100023 15.0011468153852068, 59.1525190540580397 15.0723457866581878, 58.2290153739834082 15.3241456979057968, 57.3704191476974827 15.7473179590752430, 56.6081983473453221 16.3263530995686352, 55.9702887385167855 17.0400291979353362, 55.4800700207576227 17.8621896756854248, 55.1555089501321589 18.7627019487001512, 55.0085008488152880 19.7085618011956996, 55.0444336357096375 20.6651030063937284, 55.2619903565793607 21.5972678607087296, 55.6531974510677969 22.4708920657520679, 56.2037169875891536 23.2539568665980845, 56.2037169881735181 23.2539568672798431, 171.1297155297759502 157.3342884991493520, 38.6263943605131104 195.1923802617958756, 37.7236070748838870 195.5482548084508210, 36.9065643697948431 196.0718126315338168, 36.2060416809180552 196.7433329502282788, 35.6484255004332908 197.5375217006599371, 35.2547194806408726 198.4244642839367998, 35.0397532922671431 199.3707523552484702, 35.0116240372882501 200.3407422114144651), (171.2797148927206194 181.5105578027070976, 221.5811388300841998 164.7434164902525708, 222.4761523413605460 164.3438081889483442, 223.2760087068006385 163.7772697749785209, 223.9499698948452533 163.0655730018735881, 224.4721359549995725 162.2360679774997720, 224.8224403384060111 161.3206321147520441, 224.9874210440632112 160.3544451004533755, 224.9607379559749916 159.3746369597194246, 224.7434164902525708 158.4188611699158002, 211.4412280563536797 118.5122958682191552, 256.4644660940672907 163.5355339059327378, 256.4644660940672907 163.5355339059327662, 257.2715015137021624 164.1899040574063804, 258.1963542034216061 164.6633530683924107, 259.1990887849651699 164.9354372881874724, 260.2364069198474681 164.9944080498341634, 261.2635169428083373 164.8377189805977991, 262.2360679774997720 164.4721359549995725, 297.7639320225001711 146.7082039324993730, 312.9496560052372729 177.0796518979736049, 258.4188611699158287 195.2565835097474292, 258.4188611690639732 195.2565835100313620, 257.4726575011026739 195.6857747053187495, 256.6355851356503308 196.3012552642088053, 255.9437890738596764 197.0764485770453973, 255.4271412485323651 197.9778815961655880, 255.1079506463375708 198.9666302107517879, 255.0000000000000000 200.0000000000000000, 255.0000000000000000 289.1886116991581162, 244.7434164902525708 258.4188611699158287, 244.4721359549995725 257.7639320225002280, 224.4721359549995725 217.7639320225001995, 224.0203216174686531 217.0272884276953107, 223.4484154518346486 216.3794432925932369, 222.7735009811261477 215.8397485283107926, 171.2797148927206194 181.5105578027070976)) Case #14 POLYGON ((260 320, 240 260, 220 220, 160 180, 220 160, 260 160, 260 200, 260 320)) POLYGON ((198.3510306352500834 185.1358965292041319, 229.4299033358288966 205.8551449962566551, 231.7246125362377711 207.6901071948169886, 233.6690934993933979 209.8927806541640280, 235.2052622469985579 212.3973688765007068, 243.0000000000000000 227.9868443825035911, 243.0000000000000000 177.0000000000000000, 222.7587202228624506 177.0000000000000000, 198.3510306352500834 185.1358965292041319)) Case #15 POLYGON ((260 320, 240 260, 220 220, 260 160, 260 320)) POLYGON ((239.6172404168401044 221.2213252161837715, 243.0000000000000000 227.9868443825035627, 243.0000000000000000 216.1471858414438998, 239.6172404168401044 221.2213252161837715)) Case #16 POLYGON ((260 320, 240 260, 220 220, 260 160, 260 320)) POLYGON ((236.1553744609271348 221.0057972368572052, 246.0000000000000000 240.6950483150029356, 246.0000000000000000 206.2388589282479074, 236.1553744609271348 221.0057972368572052)) Case #17 LINESTRING (260 160, 260 200, 260 320, 240 260, 220 220) POLYGON ((194.0654105708713075 221.8431145223576380, 194.9233102402886857 226.8672869967105612, 196.7448930340021889 231.6275534829989056, 215.9185482506166807 269.9748639162278891, 235.3342342506866487 328.2219219164377932, 237.4777395232139554 332.9902957247247173, 240.5318638861003819 337.2334464414602166, 244.3731231112844569 340.7798151749462932, 248.8462075669875730 343.4860152933884478, 253.7702616902279829 345.2426298271744827, 258.9461963313527804 345.9786354111978994, 264.1647383181811506 345.6642738985748906, 269.2148917801190464 344.3122555407904315, 273.8924691243435632 341.9772450873434195, 278.0083467399866208 338.7536515828895176, 281.3961116360320602 334.7718112247094950, 283.9187898443843778 330.1927176150511514, 285.4743845455978999 325.2015124745599906, 286.0000000000000000 320.0000000000000000, 286.0000000000000000 160.0000000000000000, 286.0000000000000000 159.9999999999999716, 285.5004172904839947 154.9276516275806443, 284.0208678452934237 150.0502307585076380, 281.6182099198661604 145.5551739414903238, 278.3847763108502136 141.6152236891497580, 274.4448260585096477 138.3817900801338112, 269.9497692414923335 135.9791321547065479, 265.0723483724193557 134.4995827095160053, 260.0000000000000000 134.0000000000000000, 254.9276516275806728 134.4995827095160053, 250.0502307585076949 135.9791321547065479, 245.5551739414903807 138.3817900801338112, 241.6152236891497864 141.6152236891497580, 238.3817900801338396 145.5551739414902954, 235.9791321547065479 150.0502307585076380, 234.4995827095160053 154.9276516275806159, 234.0000000000000000 160.0000000000000000, 234.0000000000000000 198.2083323711141816, 232.8759921750747992 197.4121974174686045, 228.2219219164377648 195.3342342506866487, 223.2518878094589638 194.2041626289299927, 218.1568854776423336 194.0654105708713075, 213.1327130032893820 194.9233102402887141, 208.3724465170010944 196.7448930340021889, 204.0590203902573592 199.4601565468047113, 200.3581971701116515 202.9647547246366344, 197.4121974174686329 207.1240078249251440, 195.3342342506866487 211.7780780835621783, 194.2041626289299927 216.7481121905409793, 194.0654105708713075 221.8431145223576380)) Case #18 POLYGON ((260 400, 220 300, 80 300, 180 220, 40 200, 180 160, 60 20, 200 80, 280 20, 260 140, 440 20, 340 180, 520 160, 280 220, 460 340, 300 300, 260 400), (260 320, 240 260, 220 220, 160 180, 220 160, 200 100, 260 160, 300 140, 320 180, 260 200, 260 320)) POLYGON ((73.4860813026739379 197.7126580885165197, 180.9899494936611575 213.0703535443718408, 182.3056363280740300 213.3906096254900149, 183.5350455074643037 213.9581912261180889, 184.6321721438235670 214.7518592597011207, 185.5559614045681940 215.7419144124444017, 186.2718447976156142 216.8913085012144109, 186.7530337355075574 218.1570308285006945, 186.9815219729924536 219.4917176565886905, 186.9487594065303711 220.8454245739010844, 186.6559720219250664 222.1674954309872589, 186.1141160175398568 223.4084579099737482, 185.3434678198210861 224.5218747946550195, 184.3728653328809628 225.4660816661012177, 99.9554674155074849 293.0000000000000000, 220.0000000000000000 293.0000000000000000, 221.3795809208727405 293.1372923359097058, 222.7050458739731766 293.5437838620674711, 223.9244016651362870 294.2035293867151040, 224.9898173786838527 295.0906494800855171, 225.8595006111793566 296.1703456307926672, 226.4993368361968180 297.4002652655212842, 260.0000000000000000 381.1519231750292533, 293.5006631638032104 297.4002652655212842, 294.1661219403375753 296.1314257426036534, 295.0759831943759082 295.0246549367977309, 296.1921295120130253 294.1263195229296343, 297.4678014439602407 293.4740540553273149, 298.8495564298037834 293.0951843187675081, 300.2795077022184955 293.0055825514628509, 301.6977493752543182 293.2090024989826702, 422.4918692298074916 323.4075324626209635, 276.1170986264233989 225.8243520603649017, 275.0751191377321447 224.9744897720738948, 274.2148564119547700 223.9410802663354616, 273.5680521626788959 222.7622539741994387, 273.1585719772567700 221.4815068712711650, 273.0015247315887450 220.1460955763733693, 273.1027051073951384 218.8052936911329880, 273.4583797818045241 217.5085737175472218, 274.0554251783708537 216.3037816365840911, 274.8718116968233858 215.2353715016632805, 275.8774165545875121 214.3427651864527661, 277.0351352480957985 213.6588978085102610, 278.3022506235261062 213.2090024992875783, 278.3022506247456818 213.2090024989826702, 417.3387123436478987 178.4498870692571018, 340.7730206825239065 186.9571861427153294, 339.3500498878744907 186.9697607456603521, 337.9539393295281116 186.6942987483938907, 336.6423855272677770 186.1421840620824071, 335.4695905565998828 185.3362337163163147, 334.4840220605933041 184.3097549085741491, 333.7264102463850008 183.1051685305852743, 333.2280646437002360 181.7722560565836432, 333.0095801880563045 180.3661022436220946, 333.0799861018467709 178.9448186651734716, 333.4363727471683205 177.5671421566632660, 334.0640118712981348 176.2900074210437538, 334.0640118719643965 176.2900074199777407, 416.8351501132551675 43.8561862339125383, 263.8829013735766011 145.8243520603649017, 262.6893944488330703 146.4627515423839270, 261.3953364072212366 146.8595215803059375, 260.0491095087077724 146.9998277304626981, 258.7010465032032016 146.8784242245705798, 257.4015487890115423 146.4998500985878707, 256.1992020046532161 145.8782594871754270, 255.1389595083396387 145.0368924287141965, 254.2604616611944550 144.0072059664286428, 253.5965537528831817 142.8276980320192422, 253.1720579814688108 141.5424680844595855, 253.0028454007270966 140.1995683188137320, 253.0952425329683138 138.8492070901025102, 253.0952425331749964 138.8492070888624994, 270.2229832929357372 36.0827625302982113, 204.1999999999999886 85.5999999999999943, 202.9423960790961701 86.3515592820755131, 201.5559026611282718 86.8248931793174563, 200.1012540709528764 86.9992676483411742, 198.6421701206390367 86.8670443437271160, 197.2425649099458269 86.4340152101264039, 84.8909725436656686 38.2833327674349064, 185.3147962165570846 155.4444603858082132, 186.1142829007226851 156.5918414634981559, 186.6697395331827920 157.8752471768465000, 186.9589970202038671 159.2434549102705148, 186.9705106687025307 160.6418574744477041, 186.7038209519796794 162.0146425598100848, 186.1695718501092358 163.3070202881657167, 185.6570600448659434 164.0689987779851435, 211.1456225515285325 155.5728112757642805, 193.3592169136464065 102.2135943621178598, 193.3592169132488721 102.2135943609252706, 193.0594928825265981 100.9106925673908677, 193.0129397948266501 99.5745711701319181, 193.2212557809792770 98.2539682668711265, 193.6768420367806414 96.9970558826086204, 194.3630800068345650 95.8496827843342061, 195.2549375845420059 94.8537020419132375, 196.3198822157007442 94.0454443412052683, 197.5190675981640709 93.4543927388270106, 198.8087506899613288 93.1021071999245748, 200.1418873372542748 93.0014381489103812, 201.4698483179327297 93.1560577207087448, 202.7441932042174528 93.5603258111976857, 203.9184373385559468 94.1994958129649973, 204.9497474683058442 95.0502525316941700, 261.3821713435749530 151.4826764069632645, 296.8695048315003078 133.7390096630005871, 298.1511150393471326 133.2485835262315845, 299.5037768593652459 133.0176105383115157, 300.8755082563928340 133.0549668616349948, 302.2135943621178740 133.3592169136464065, 303.4666132779047416 133.9186685354723068, 304.5864121895208996 134.7118223150300480, 305.5299578527833546 135.7081977973769824, 306.2609903369993845 136.8695048315003078, 326.2609903369993845 176.8695048315003078, 326.7401067069822034 178.1103011937101428, 326.9758738477949578 179.4193244798940441, 326.9597794680934726 180.7493128555578323, 326.6924046499087808 182.0522475488787961, 326.1834028688805915 183.2810865519092260, 325.4511514588469936 184.3914630560566081, 324.5220881045417514 185.3432873004136354, 323.4297563181003738 186.1021939987557232, 322.2135943621178740 186.6407830863535935, 267.0000000000000000 205.0453145403928943, 267.0000000000000000 320.0000000000000000, 266.8584881468917160 321.4004072046892020, 266.4396741888727433 322.7441932040522374, 265.7604915943163064 323.9770260989602662, 264.8484010453810242 325.0490600415471931, 263.7402801488617001 325.9169506004386108, 262.4809324023397608 326.5456072609820239, 261.1212757010487735 326.9096122034624727, 259.7162836276718849 326.9942479953224961, 258.3227627627537117 326.7960926457777759, 256.9970558834197618 326.3231579636045581, 255.7927639145765966 325.5945656240240282, 254.7585787385654896 324.6397740419316165, 253.9363144870191604 323.4973873105028019, 253.3592169136464065 322.2135943621178740, 233.5165322213198635 262.6855402851382451, 214.5703578501880884 224.7931915428746947, 156.1170986264233989 185.8243520603649017, 156.1170986253774231 185.8243520596676035, 155.0231091408172404 184.9224544056581294, 154.1332973523846590 183.8186123192153332, 153.4841679225465896 182.5581110879766982, 153.1023514838049664 181.1926629645598155, 153.0035121129924391 179.7782856636201529, 153.1917047101640605 178.3730042266809903, 153.6592086457127948 177.0344705360768103, 154.3868445003602119 175.8175981378084032, 155.3447609037176562 174.7723094050580812, 156.3685660265952038 174.0319481673961661, 73.4860813026739379 197.7126580885165197)) Case #19 POLYGON ((32 136, 27 163, 30 236, 34 252, 49 291, 72 326, 83 339, 116 369, 155 391, 176 400, 219 414, 264 417, 279 416, 339 401, 353 395, 380 381, 394 372, 441 328, 458 303, 463 294, 480 251, 486 205, 486 183, 473 115, 469 105, 460 85, 454 74, 423 33, 382 2, 373 -3, 336 -19, 319 -24, 275 -31, 252 -32, 203 -27, 190 -24, 149 -10, 139 -5, 84 37, 76 46, 52 81, 36 121, 32 136)) POLYGON ((210.7267553108988238 176.9256915755600801, 211.8671630388668063 204.6756129561149464, 212.7392713423978705 206.9430945452957076, 217.1208592864501838 213.6107283732014253, 223.8552432300779174 219.7328955946811675, 236.2393055009007128 226.7187768756581363, 240.5016559451048010 228.5454984946027537, 253.9490540002205137 232.9237211171985678, 256.1814740341310426 233.0725491194592678, 278.4949667339785151 227.4941759444973854, 283.1893383949868621 225.0600573054560130, 299.5152762254757022 209.7762006130834607, 301.4726576684510633 204.8251769632046262, 302.4401896474719820 197.4074317907112288, 297.2128574239011982 170.0644632366487485, 292.3573443617199246 163.6426556382799902, 285.7526778147497453 158.6488833710586164, 276.1059779842289004 154.4773374984009706, 257.0088333017464493 151.4391553898242080, 236.3522756410080490 153.5469673960220121, 230.1160214134394835 155.6764200590941982, 214.5153345565076393 167.5896718407512651, 214.3853233124629014 167.7792715716498435, 210.7267553108988238 176.9256915755600801)) Case #20 POLYGON ((13841 1031, 13851 903, 13853 885, 13853 875, 13856 862, 13859 831, 13670 900, 13841 1031)) POLYGON ((13506.2449358346930239 891.0401473105671357, 13507.5974451398560632 922.8344076975459984, 13515.0648325523125095 953.7688933116278349, 13528.3659315359454922 982.6788404026061698, 13546.9999211581762211 1008.4757143553580363, 13570.2651832991996343 1030.1881958460821807, 13741.2651832991996343 1161.1881958460821807, 13741.2651832991996343 1161.1881958460819533, 13768.4021467823731655 1178.0562875506921046, 13798.2948576844864874 1189.3422584776781150, 13829.8086163241805480 1194.6177036002541172, 13861.7471895460166706 1193.6823718967168588, 13892.8982186255980196 1186.5717676941726495, 13922.0792392863841087 1173.5558029570918279, 13948.1825669508853025 1155.1285516785676464, 13970.2173434235901368 1131.9894952881238623, 13987.3471489523926721 1105.0169709830538523, 13998.9217519494322914 1075.2348308601026474, 14004.5017911812756211 1043.7735774360371579, 14014.2929847110062838 918.4463002554892910, 14015.9969324864741793 903.1107702762748204, 14015.9969324864741793 903.1107702762747067, 14016.4532573949691141 894.8716483052672857, 14019.2374022230687842 877.7971679570712240, 14022.2374022230687842 846.7971679570712240, 14022.0923450200498337 813.7695909549128146, 14015.3326253785835434 781.4408409853512012, 14002.2324024788667884 751.1221001770096564, 13983.3229921980455401 724.0430291616075920, 13959.3713181210496259 701.3018947762033122, 13931.3488068273163663 683.8210268052406491, 13900.3919889913086081 672.3094103377792408, 13867.7564042285048345 667.2339309106217797, 13834.7656792036668776 668.8004386703205455, 13802.7578442799749610 676.9453995494958463, 13802.7578442799749610 676.9453995494959599, 13613.7578442799749610 745.9453995494959599, 13613.7578442799731420 745.9453995494963010, 13585.0645211260962242 759.7075752990896262, 13559.5692394115667412 778.7521253140495219, 13538.2319627288889023 802.3619728091613297, 13521.8560949787515710 829.6481456885808257, 13511.0582301259437372 859.5832486547654980, 13506.2449358346930239 891.0401473105671357)) Case #21 POLYGON ((20 60, 20 20, 240 20, 40 21, 240 22, 40 22, 240 23, 240 60, 20 60)) POLYGON ((-140.0000000000000000 19.9999999712661989, -140.0000000000000000 20.0000000000000000, -140.0000000000000000 60.0000000000000000, -136.9256448645168689 91.2144515225805748, -127.8207252018058711 121.2293491784143811, -113.0351379684072555 148.8912372831363484, -93.1370849898475939 173.1370849898476081, -68.8912372831363200 193.0351379684072697, -41.2293491784143527 207.8207252018058853, -11.2144515225805126 216.9256448645168689, 20.0000000000000107 220.0000000000000000, 240.0000000000000000 220.0000000000000000, 271.2144515225805321 216.9256448645168689, 301.2293491784143953 207.8207252018058853, 328.8912372831363768 193.0351379684072413, 353.1370849898476081 173.1370849898476081, 373.0351379684072413 148.8912372831363484, 387.8207252018058853 121.2293491784143669, 396.9256448645168689 91.2144515225805179, 400.0000000000000000 60.0000000000000000, 400.0000000000000000 23.0000000000000000, 399.9699034646581026 22.6934426863818643, 399.9995000085935999 22.3999962500605676, 399.8653662226012102 21.0000000000001599, 399.9995000085935999 19.6000037499394679, 396.8569884248131530 -11.5576485546376748, 387.7056613593456973 -41.5064029382169224, 372.8960842304180119 -69.0989943614496838, 352.9955764620684135 -93.2784167439007064, 328.7664788360034436 -113.1184143349722859, 301.1369500424084436 -127.8589643528996618, 271.1654111438951986 -136.9353916369152557, 240.0000000000000000 -140.0000000000000000, 20.0000000000000000 -140.0000000000000000, -11.2144515190578034 -136.9256448652175777, -41.2293491717777130 -127.8207252045548756, -68.8912372741771435 -113.0351379743935922, -93.1370849796886660 -93.1370850000065360, -113.0351379584299423 -68.8912372980684324, -127.8207251935589142 -41.2293491983242930, -136.9256448596119071 -11.2144515472394666, -140.0000000000000000 19.9999999712661989)) Case #22 POLYGON ((635074.6769928858 6184832.427381967, 635075.6723193424 6184799.950949265, 634717.5983159657 6184655.107092909, 634701.0176852546 6184648.498845058, 634697.7188197445 6184647.20632975, 634694.416887708 6184645.922033237, 634691.1138635761 6184644.642692243, 634687.8077729489 6184643.371570057, 634684.498667351 6184642.107006015, 634681.1875340013 6184640.847368483, 634677.8742698929 6184639.595978798, 634674.5570551592 6184638.351118257, 634671.2386969016 6184637.112873929, 634667.9173237421 6184635.881187774, 634664.5938713895 6184634.656088823, 634661.2674041622 6184633.437548058, 634657.9388577675 6184632.2255945075, 634654.6082322216 6184631.02022817, 634651.2745403448 6184629.823080709, 634647.9388208436 6184628.630859804, 634644.6000865338 6184627.4451971175, 634641.2592216335 6184626.267782336, 634637.9163291481 6184625.095294129, 634634.5713061031 6184623.931053837, 634631.2232683088 6184622.773371783, 634636.1918816608 6184608.365992378, 634633.2495506873 6184607.353869728, 634630.3051410569 6184606.348333739, 634627.3587557608 6184605.346063082, 634624.4102918282 6184604.3503790945, 634621.4607364619 6184603.359650123, 634618.5091539674 6184602.37384716, 634615.5564800596 6184601.392999219, 634612.6017790422 6184600.417077295, 634609.6450509242 6184599.446081388, 634606.6862442375 6184598.481672177, 634603.7263976521 6184597.52055733, 634600.7654082242 6184596.566058185, 634597.80145603 6184595.61645607, 634594.8364124894 6184594.671808995, 634591.8702261405 6184593.733777636, 634588.9020642313 6184592.799011653, 634585.9318238292 6184591.870832384, 634582.960543591 6184590.945947501, 634579.9871848791 6184590.027649342, 634577.0127348808 6184589.11430624, 634574.0362578988 6184588.205889201, 634571.0586381858 6184587.304087893, 634568.0790429743 6184586.405551985, 634565.0983050519 6184585.513631817, 634562.115540186 6184584.626637723, 634559.1316840936 6184583.744598703, 634556.1458010782 6184582.867485766, 634553.1587753976 6184581.996988578, 634550.1697742692 6184581.12975681, 634547.1796305005 6184580.269140797, 634544.1874598458 6184579.41345088, 634541.194198027 6184578.562716054, 634538.1998450506 6184577.716936321, 634535.2034137691 6184576.877743362, 634532.2059428038 6184576.041844833, 634529.2063935531 6184575.212533085, 634526.2057531879 6184574.388176442, 634523.2040217179 6184573.568774906, 634520.2002119992 6184572.755960159, 634517.1953626422 6184571.946439856, 634514.1893707667 6184571.143535337, 634510.267712847 6184585.871039091, 634281.9449709259 6184525.076957544, 633860.4859191478 6184412.861324424, 633664.3557212166 6184360.639468017, 633645.5884675509 6184355.641948889, 633486.222 6184313.208, 633485.7474265156 6184328.852301474, 633485.2749953512 6184344.496113185, 633650.4562371405 6184388.478170839, 633669.5206846121 6184393.553017912, 633852.6461183216 6184442.312440121, 634280.9949861752 6184556.364455, 634502.4254528129 6184615.324425217, 634505.716566367 6184616.204307566, 634509.0065372197 6184617.090806118, 634512.2953653594 6184617.983920872, 634515.5812308139 6184618.88193318, 634518.8659020835 6184619.788222348, 634522.1484948951 6184620.7010987215, 634525.4299963829 6184621.61893061, 634528.7093679372 6184622.545010364, 634531.9867124417 6184623.476016638, 634535.2619784358 6184624.413610098, 634538.5360501477 6184625.3594804, 634541.807159074 6184626.310248219, 634545.0771251463 6184627.267632202, 634548.3459483465 6184628.231632348, 634551.611808724 6184629.200529998, 634554.8764747474 6184630.177704472, 634558.138126462 6184631.161437107, 634561.3986867118 6184632.150125222, 634564.6571168633 6184633.147061154, 634567.9135198268 6184634.14892356, 634571.1678441261 6184635.157373106, 634574.421025444 6184636.172438785, 634577.6711923747 6184637.194062597, 634580.9192805979 6184638.222273537, 634584.1662257991 6184639.257100599, 634587.410208043 6184640.296825108, 634590.6529957657 6184641.3448264, 634593.8928205046 6184642.397725132, 634597.131502168 6184643.457239971, 634600.3671178726 6184644.524973575, 634603.6016934284 6184645.596001944, 634605.6958877691 6184646.2958191885, 634606.946276627 6184646.713661825, 634608.6177147877 6184647.275847967, 634610.2887808911 6184647.8379089665, 634613.6292576884 6184648.967082693, 634616.9666683461 6184650.104475331, 634620.3029357173 6184651.248484221, 634623.6361369188 6184652.4007120095, 634626.9663749042 6184653.557837355, 634630.2954695637 6184654.721578941, 634633.6214980055 6184655.893539405, 634636.9454988878 6184657.070426424, 634640.2664335228 6184658.255532312, 634643.5852890809 6184659.44722541, 634646.9020655481 6184660.6455057105, 634650.2167629072 6184661.850373212, 634653.5284454564 6184663.061798892, 634656.8370616816 6184664.2814434115, 634660.1436502574 6184665.506014449, 634663.4481081718 6184666.7388333315, 634666.7496027217 6184667.976549702, 634670.0489665787 6184669.222513908, 634673.3453155413 6184670.475036258, 634676.6396367943 6184671.732485097, 634679.9308916207 6184672.9981527375, 634683.2200672035 6184674.270407524, 634686.5062278372 6184675.54922043, 634689.789322 6184676.8362521175, 634693.0703883899 6184678.128210268, 634696.3493754807 6184679.426755545, 634699.6253475712 6184680.731858918, 634702.8982531315 6184682.04518105, 634706.1681951834 6184683.363400595, 635074.6769928858 6184832.427381967)) POLYGON ((633485.1750409196829423 6184344.4930946370586753, 633485.1762941706692800 6184344.5121779590845108, 633485.1811573562445119 6184344.5306737218052149, 633485.1894526082323864 6184344.5479054534807801, 633485.2008765331702307 6184344.5632429160177708, 633485.2150113079696894 6184344.5761251496151090, 633485.2313399621052667 6184344.5860809953883290, 633485.2492652848595753 6184344.5927463248372078, 633650.4305070741102099 6184388.5748039791360497, 633669.4949609669856727 6184393.6496527614071965, 633852.6203885280992836 6184442.4090733332559466, 634280.9692566331941634 6184556.4610882792621851, 634502.3996737367706373 6184615.4210453070700169, 634505.6906436235876754 6184616.3008892470970750, 634508.9804253297625110 6184617.1873368322849274, 634512.2690805093152449 6184618.0804046178236604, 634515.5547503855777904 6184618.9783634738996625, 634518.8392070047557354 6184619.8845934178680182, 634522.1216303266119212 6184620.7974226567894220, 634525.4029398488346487 6184621.7152008526027203, 634528.6821164987049997 6184622.6412255661562085, 634531.9592889761552215 6184623.5721829719841480, 634535.2343404222046956 6184624.5097150141373277, 634538.5082174637354910 6184625.4555290760472417, 634541.7791545332875103 6184626.4062469452619553, 634545.0489324463997036 6184627.3635758385062218, 634548.3175845359219238 6184628.3275255225598812, 634551.5832501659169793 6184629.2963653961196542, 634554.8476990603376180 6184630.2734748786315322, 634558.1091800214489922 6184631.2571560135111213, 634561.3695489823585376 6184632.2457861248403788, 634564.6277857733657584 6184633.2426628973335028, 634567.8840174116194248 6184634.2444725930690765, 634571.1381510894279927 6184635.2528630699962378, 634574.3911394432652742 6184636.2678685393184423, 634577.6411091837799177 6184637.2894303686916828, 634580.8890075180679560 6184638.3175811972469091, 634584.1357820932753384 6184639.3523538792505860, 634587.3795713706640527 6184640.3920165412127972, 634590.6221661970485002 6184641.4399554934352636, 634593.8618204926606268 6184642.4927988341078162, 634597.1002870653755963 6184643.5522433063015342, 634600.3357321795774624 6184644.6199206169694662, 634603.5701296605402604 6184645.6908900216221809, 634605.6641935704974458 6184646.3906636806204915, 634606.9144892485346645 6184646.8084751795977354, 634608.5858348999172449 6184647.3706302056089044, 634610.2568298997357488 6184647.9326672898605466, 634613.5971169143449515 6184649.0617768643423915, 634616.9343211946543306 6184650.1990991681814194, 634620.2703821876784787 6184651.3430372914299369, 634623.6033904763171449 6184652.4951983932405710, 634626.9334648980293423 6184653.6522669075056911, 634630.2623536150204018 6184654.8159365020692348, 634633.5881937453523278 6184655.9878306137397885, 634636.9120060630375519 6184657.1646508695557714, 634640.2327314324211329 6184658.3496820786967874, 634643.5514026361051947 6184659.5413089804351330, 634646.8679948954377323 6184660.7395227318629622, 634650.1825049890903756 6184661.9443221632391214, 634653.4939745524898171 6184663.1556699322536588, 634656.8024032171815634 6184664.3752453122287989, 634660.1088086073286831 6184665.5997485080733895, 634663.4130791015923023 6184666.8324974682182074, 634666.7143862942466512 6184668.0701435990631580, 634670.0135425933403894 6184669.3160294229164720, 634673.3097255165921524 6184670.5684886835515499, 634676.6038596450816840 6184671.8258660966530442, 634679.8949075534474105 6184673.0914541659876704, 634683.1838965658098459 6184674.3636367861181498, 634686.4698460333747789 6184675.6423675166442990, 634689.7527541010640562 6184676.9293262520805001, 634693.0336594296386465 6184678.2212209822610021, 634696.3124607891077176 6184679.5196927059441805, 634699.5882220339262858 6184680.8247120818123221, 634702.8609382446156815 6184682.1379582323133945, 634706.1307511236518621 6184683.4561257045716047, 635074.6394940027967095 6184832.5200848998501897, 635074.6579174628714100 6184832.5255457498133183, 635074.6770452730124816 6184832.5273819537833333, 635074.6961711487965658 6184832.5255257096141577, 635074.7145888772793114 6184832.5200455598533154, 635074.7316183934453875 6184832.5111438557505608, 635074.7466308913426474 6184832.4991492871195078, 635074.7590720423031598 6184832.4845047481358051, 635074.7684824634343386 6184832.4677509795874357, 635074.7745146797969937 6184832.4495066069066525, 635074.7769459548871964 6184832.4304452938959002, 635075.7722724115010351 6184799.9540125913918018, 635075.7708403052529320 6184799.9338139239698648, 635075.7653684740653262 6184799.9143178695812821, 635075.7560812836745754 6184799.8963238382712007, 635075.7433595430338755 6184799.8805696517229080, 635075.7277248908067122 6184799.8677012901753187, 635075.7098184056812897 6184799.8582464046776295, 634717.6358150290325284 6184655.0143900485709310, 634717.6353390680160373 6184655.0141989374533296, 634701.0547083568526432 6184648.4059510864317417, 634701.0541656919522211 6184648.4057366382330656, 634697.7553001819178462 6184647.1132213305681944, 634697.7550695642130449 6184647.1131313024088740, 634694.4531375276856124 6184645.8288347898051143, 634694.4530055567156523 6184645.8287835670635104, 634691.1499814247945324 6184644.5494425725191832, 634691.1497503885766491 6184644.5493534151464701, 634687.8436597613617778 6184643.2782312296330929, 634687.8434698932105675 6184643.2781584514304996, 634684.5343642953084782 6184642.0135944094508886, 634684.5342238259036094 6184642.0135408500209451, 634681.2230904762400314 6184640.7539033181965351, 634681.2228669453179464 6184640.7538185874000192, 634677.9096028369385749 6184639.5024289023131132, 634677.9094046299578622 6184639.5023542810231447, 634674.5921898962697014 6184638.2574937399476767, 634674.5920154738705605 6184638.2574284691363573, 634671.2736572162248194 6184637.0191841404885054, 634671.2734667608747259 6184637.0191132929176092, 634667.9520936013432220 6184635.7874271385371685, 634667.9519109108950943 6184635.7873595925047994, 634664.6284585583489388 6184634.5622606417164207, 634664.6282678926363587 6184634.5621905773878098, 634661.3018006653292105 6184633.3436498120427132, 634661.3016176864039153 6184633.3435829859226942, 634657.9730712916934863 6184632.1316294353455305, 634657.9728881521150470 6184632.1315629547461867, 634654.6422626061830670 6184630.9261966170743108, 634654.6420296394499019 6184630.9261126313358545, 634651.3083377627190202 6184629.7289651706814766, 634651.3081963286967948 6184629.7289145011454821, 634647.9724768274463713 6184628.5366935962811112, 634647.9722856546286494 6184628.5366254877299070, 634644.6335513448575512 6184627.3509628009051085, 634644.6333255147328600 6184627.3508829073980451, 634641.2924606144661084 6184626.1734681259840727, 634641.2923189303837717 6184626.1734183123335242, 634637.9494264449458569 6184625.0009301053360105, 634637.9492002010811120 6184625.0008510565385222, 634634.6041771561140195 6184623.8366107642650604, 634634.6039855444105342 6184623.8365442920476198, 634631.3503801986807957 6184622.7115150215104222, 634636.2864178437739611 6184608.3985946811735630, 634636.2909630801295862 6184608.3795154085382819, 634636.2916968743083999 6184608.3599159354344010, 634636.2885909986216575 6184608.3405502084642649, 634636.2817649291828275 6184608.3221631860360503, 634636.2714812498306856 6184608.3054621759802103, 634636.2581355508882552 6184608.2910896278917789, 634636.2422412118175998 6184608.2795984223484993, 634636.2244096524082124 6184608.2714306013658643, 634633.2820786787196994 6184607.2593079507350922, 634633.2818687518592924 6184607.2592359986156225, 634630.3374591214815155 6184606.2537000095471740, 634630.3373457209672779 6184606.2536613587290049, 634627.3909604249056429 6184605.2513907020911574, 634627.3907502815127373 6184605.2513194773346186, 634624.4422863489016891 6184604.2556354897096753, 634624.4421327267773449 6184604.2555837510153651, 634621.4925773604772985 6184603.2648547794669867, 634621.4924154026666656 6184603.2648005327209830, 634618.5408329081255943 6184602.2789975693449378, 634618.5406790509587154 6184602.2789463214576244, 634615.5880051432177424 6184601.2980983806774020, 634615.5878430343000218 6184601.2980446834117174, 634612.6331420168280602 6184600.3221227591857314, 634612.6329798559891060 6184600.3220693515613675, 634609.6762517379829660 6184599.3510734448209405, 634609.6760408123955131 6184599.3510044356808066, 634606.7172341257100925 6184598.3865952249616385, 634606.7171285666991025 6184598.3865608833730221, 634603.7572819812921807 6184597.4254460362717509, 634603.7570787509903312 6184597.4253802839666605, 634600.7960893231211230 6184596.4708811389282346, 634600.7959189455723390 6184596.4708263846114278, 634597.8319667513715103 6184595.5212242696434259, 634597.8318121144548059 6184595.5211748648434877, 634594.8667685738764703 6184594.5765277901664376, 634594.8665648184251040 6184594.5764631144702435, 634591.9003784694941714 6184593.6384317548945546, 634591.9002648042514920 6184593.6383958831429482, 634588.9321028951089829 6184592.7036299007013440, 634588.9318911200389266 6184592.7035634648054838, 634585.9616507178870961 6184591.7753841951489449, 634585.9615447405958548 6184591.7753511425107718, 634582.9902645023539662 6184590.8504662597551942, 634582.9900525119155645 6184590.8504005307331681, 634580.0166938001057133 6184589.9321023719385266, 634580.0165384906576946 6184589.9320545438677073, 634577.0420884923078120 6184589.0187114421278238, 634577.0419255199376494 6184589.0186615511775017, 634574.0654485379345715 6184588.1102445116266608, 634574.0652436920208856 6184588.1101822322234511, 634571.0876239790813997 6184587.2083809245377779, 634571.0875102396821603 6184587.2083465512841940, 634568.1079150281148031 6184586.3098106430843472, 634568.1077099002432078 6184586.3097490239888430, 634565.1269719778792933 6184585.4178288560360670, 634565.1268087561475113 6184585.4177801664918661, 634562.1440438901772723 6184584.5307860728353262, 634562.1438879584893584 6184584.5307398410513997, 634559.1600318661658093 6184583.6487008212134242, 634559.1598685485078022 6184583.6486526951193810, 634556.1739855330670252 6184582.7715397579595447, 634556.1737797906389460 6184582.7714795600622892, 634553.1867541100364178 6184581.9009823715314269, 634553.1866403331514448 6184581.9009492872282863, 634550.1976392047945410 6184581.0337175196036696, 634550.1974332017125562 6184581.0336579885333776, 634547.2072894329903647 6184580.1730419751256704, 634547.2071259034564719 6184580.1729950597509742, 634544.2149552487535402 6184579.3173051429912448, 634544.2147987458156422 6184579.3172605242580175, 634541.2215369270415977 6184578.4665256980806589, 634541.2213803209597245 6184578.4664813252165914, 634538.2270273445174098 6184577.6207015924155712, 634538.2268137707142159 6184577.6206415230408311, 634535.2303824892733246 6184576.7814485644921660, 634535.2302756285062060 6184576.7814187007024884, 634532.2328046631300822 6184575.9455201709643006, 634532.2325909376377240 6184575.9454608252272010, 634529.2330416869372129 6184575.1161490771919489, 634529.2328847182216123 6184575.1161058163270354, 634526.2322443530429155 6184574.2917491737753153, 634526.2320872879354283 6184574.2917061606422067, 634523.2303558179410174 6184573.4723046245053411, 634523.2301417967537418 6184573.4722464568912983, 634520.2263320781057701 6184572.6594317099079490, 634520.2262249983614311 6184572.6594027988612652, 634517.2213756412966177 6184571.8498824955895543, 634517.2211681139888242 6184571.8498268257826567, 634514.2151762385619804 6184571.0469223074615002, 634514.1958225757116452 6184571.0437436839565635, 634514.1762207322753966 6184571.0444037253037095, 634514.1571247286628932 6184571.0488770408555865, 634514.1392691265791655 6184571.0569915585219860, 634514.1233407737454399 6184571.0684351371601224, 634514.1099523830926046 6184571.0827675797045231, 634514.0996189627330750 6184571.0994375636801124, 634514.0927380063803867 6184571.1178038464859128, 634510.1968111586757004 6184585.7486764127388597, 634281.9707008437253535 6184524.9803243651986122, 633860.5116482827579603 6184412.7646910361945629, 633664.3814508970826864 6184360.5428347745910287, 633645.6141997708473355 6184355.5453163227066398, 633486.2477301596663892 6184313.1113668847829103, 633486.2280114791356027 6184313.1081808526068926, 633486.2080529544036835 6184313.1089773764833808, 633486.1886508848983794 6184313.1137246768921614, 633486.1705793688306585 6184313.1222333470359445, 633486.1545594186754897 6184313.1341639105230570, 633486.1412301935488358 6184313.1490403665229678, 633486.1311234992463142 6184313.1662691766396165, 633486.1246425698045641 6184313.1851629503071308, 633486.1220459794858471 6184313.2049678713083267, 633485.6474724950967357 6184328.8492693454027176, 633485.1750409196829423 6184344.4930946370586753)) Case #23 MULTILINESTRING (( 80 285, 85.5939933259177 234.65406006674084 ), ( 85.5939933259177 234.65406006674084, 98 123, 294 92, 344.3694502052736 126.0884157954882 ), ( 344.3694502052736 126.0884157954882, 393 159 ), ( 51 235, 85.5939933259177 234.65406006674084 ), ( 85.5939933259177 234.65406006674084, 251 233, 344.3694502052736 126.0884157954882 ), ( 344.3694502052736 126.0884157954882, 382 83 )) POLYGON ((21.0014998875093717 235.2999850011248952, 21.6364368259640045 241.1466379203916972, 23.3997990299208922 246.7570789914520901, 26.2238214787868884 251.9157021103168574, 29.9999785735821156 256.4242642835171750, 34.5831547148468843 260.1095039951677563, 39.7972210137471762 262.8297995498561477, 45.4418038264983366 264.4806115149748962, 51.2999850011248952 264.9985001124906034, 52.0385924241797255 264.9911140382600365, 50.1834879597914352 281.6870542177546213, 50.1100802185175240 287.5676244773218286, 51.1853253319858510 293.3495223681659354, 53.3679022334902413 298.8105527968675688, 56.5739357167091015 303.7408514266327302, 60.6802197128466361 307.9509496460630089, 65.5289520307618574 311.2790557416359434, 70.9337986066776978 313.5972724625220280, 76.6870542177545929 314.8165120402085790, 82.5676244773217860 314.8899197814824902, 88.3495223681659070 313.8146746680141632, 93.8105527968674977 311.6320977665097871, 98.7408514266327018 308.4260642832909411, 102.9509496460629805 304.3197802871534350, 106.2790557416359150 299.4710479692382137, 108.5972724625220138 294.0662013933223307, 109.8165120402085648 288.3129457822453787, 112.4749782182002917 264.3867501803198365, 251.2999850011248952 262.9985001124906034, 257.5681863594468268 262.2721527726878321, 263.5457970774100431 260.2507426631358385, 268.9683548466559273 257.0237012990224912, 273.5959540907721248 252.7337999059409981, 349.5195865880894530 165.7983428479440420, 376.1856554292177179 183.8450763060813244, 381.3557722824174903 186.6480010283036961, 386.9733702766457668 188.3884285761859587, 392.8225682713696756 188.9994752951060093, 398.6785848679199944 188.4576590023347080, 404.3163766325831716 186.7838013941491511, 409.5192863895533719 184.0422278797218212, 414.0873692346955863 180.3382955917199411, 417.8450763060812960 175.8143445707823105, 420.6480010283036677 170.6442277175825950, 422.3884285761859587 165.0266297233542900, 422.9994752951059809 159.1774317286303813, 422.4576590023347080 153.3214151320800909, 420.7838013941491795 147.6836233674168568, 418.0422278797218496 142.4807136104466565, 414.3382955917199979 137.9126307653044705, 409.8143445707822821 134.1549236939186756, 389.2872504397274156 120.2628498880532533, 404.5959540907721248 102.7337999059410123, 408.0116525471484010 97.9463685143391842, 410.4277377836404526 92.5845565627513594, 411.7513609995662591 86.8544154775382395, 411.9316560970342493 80.9761513671044355, 410.9616944365592985 75.1756626246454260, 408.8787511007927264 69.6758587795823274, 405.7628724339999735 64.6880942093553983, 401.7337999059409981 60.4040459092278610, 396.9463685143392127 56.9883474528516558, 391.5845565627514020 54.5722622163595474, 385.8544154775382822 53.2486390004337267, 379.9761513671044781 53.0683439029657649, 374.1756626246454971 54.0383055634406944, 368.6758587795823701 56.1212488992072451, 363.6880942093554268 59.2371275659999696, 359.4040459092278752 63.2662000940589877, 339.2193138224577638 86.3784887430323778, 310.8143445707822821 67.1549236939186756, 305.8758593966222747 64.4506993992286823, 300.5190607344155183 62.7168675319561828, 294.9326356558352131 62.0145003254328842, 289.3133595589631568 62.3683378566703084, 93.3133595589631568 93.3683378566703084, 87.9092837190495118 94.7479656495791289, 82.8539812499324739 97.1040907473283994, 78.3221825506699076 100.3552765432906995, 74.4705237473907005 104.3891497432842925, 71.4321327555545196 109.0662844122064570, 69.3120278750040910 114.2250210623923437, 68.1834879597914352 119.6870542177546071, 58.7130084336350890 204.9213699531617863, 50.7000149988751048 205.0014998875093681, 44.8533620796082459 205.6364368259640116, 39.2429210085478530 207.3997990299209278, 34.0842978896831070 210.2238214787869026, 29.5757357164827823 213.9999785735821547, 25.8904960048322081 218.5831547148469269, 23.1702004501438559 223.7972210137472189, 21.5193884850250754 229.4418038264983863, 21.0014998875093717 235.2999850011248952), (119.1493942276556623 204.3170060952215863, 125.2894246846412329 149.0567319823514367, 286.9915584344174135 123.4813945015195031, 299.4516499708198012 131.9139817029231381, 237.2510968713003763 203.1359890687851077, 119.1493942276556623 204.3170060952215863)) Case #24 MULTILINESTRING (( 80 285, 85.5939933259177 234.65406006674084 ), ( 85.5939933259177 234.65406006674084, 98 123, 294 92, 344.3694502052736 126.0884157954882 ), ( 344.3694502052736 126.0884157954882, 393 159 ), ( 51 235, 85.5939933259177 234.65406006674084 ), ( 85.5939933259177 234.65406006674084, 251 233, 344.3694502052736 126.0884157954882 ), ( 344.3694502052736 126.0884157954882, 382 83 )) POLYGON ((21.0014998875093717 235.2999850011248952, 21.6364368259640045 241.1466379203916972, 23.3997990299208922 246.7570789914520901, 26.2238214787868884 251.9157021103168574, 29.9999785735821156 256.4242642835171750, 34.5831547148468843 260.1095039951677563, 39.7972210137471762 262.8297995498561477, 45.4418038264983366 264.4806115149748962, 51.2999850011248952 264.9985001124906034, 52.0385924241797255 264.9911140382600365, 50.1834879597914352 281.6870542177546213, 50.1100802185175240 287.5676244773218286, 51.1853253319858510 293.3495223681659354, 53.3679022334902413 298.8105527968675688, 56.5739357167091015 303.7408514266327302, 60.6802197128466361 307.9509496460630089, 65.5289520307618574 311.2790557416359434, 70.9337986066776978 313.5972724625220280, 76.6870542177545929 314.8165120402085790, 82.5676244773217860 314.8899197814824902, 88.3495223681659070 313.8146746680141632, 93.8105527968674977 311.6320977665097871, 98.7408514266327018 308.4260642832909411, 102.9509496460629805 304.3197802871534350, 106.2790557416359150 299.4710479692382137, 108.5972724625220138 294.0662013933223307, 109.8165120402085648 288.3129457822453787, 112.4749782182002917 264.3867501803198365, 251.2999850011248952 262.9985001124906034, 257.5681863594468268 262.2721527726878321, 263.5457970774100431 260.2507426631358385, 268.9683548466559273 257.0237012990224912, 273.5959540907721248 252.7337999059409981, 349.5195865880894530 165.7983428479440420, 376.1856554292177179 183.8450763060813244, 381.3557722824174903 186.6480010283036961, 386.9733702766457668 188.3884285761859587, 392.8225682713696756 188.9994752951060093, 398.6785848679199944 188.4576590023347080, 404.3163766325831716 186.7838013941491511, 409.5192863895533719 184.0422278797218212, 414.0873692346955863 180.3382955917199411, 417.8450763060812960 175.8143445707823105, 420.6480010283036677 170.6442277175825950, 422.3884285761859587 165.0266297233542900, 422.9994752951059809 159.1774317286303813, 422.4576590023347080 153.3214151320800909, 420.7838013941491795 147.6836233674168568, 418.0422278797218496 142.4807136104466565, 414.3382955917199979 137.9126307653044705, 409.8143445707822821 134.1549236939186756, 389.2872504397274156 120.2628498880532533, 404.5959540907721248 102.7337999059410123, 408.0116525471484010 97.9463685143391842, 410.4277377836404526 92.5845565627513594, 411.7513609995662591 86.8544154775382395, 411.9316560970342493 80.9761513671044355, 410.9616944365592985 75.1756626246454260, 408.8787511007927264 69.6758587795823274, 405.7628724339999735 64.6880942093553983, 401.7337999059409981 60.4040459092278610, 396.9463685143392127 56.9883474528516558, 391.5845565627514020 54.5722622163595474, 385.8544154775382822 53.2486390004337267, 379.9761513671044781 53.0683439029657649, 374.1756626246454971 54.0383055634406944, 368.6758587795823701 56.1212488992072451, 363.6880942093554268 59.2371275659999696, 359.4040459092278752 63.2662000940589877, 339.2193138224577638 86.3784887430323778, 310.8143445707822821 67.1549236939186756, 305.8758593966222747 64.4506993992286823, 300.5190607344155183 62.7168675319561828, 294.9326356558352131 62.0145003254328842, 289.3133595589631568 62.3683378566703084, 93.3133595589631568 93.3683378566703084, 87.9092837190495118 94.7479656495791289, 82.8539812499324739 97.1040907473283994, 78.3221825506699076 100.3552765432906995, 74.4705237473907005 104.3891497432842925, 71.4321327555545196 109.0662844122064570, 69.3120278750040910 114.2250210623923437, 68.1834879597914352 119.6870542177546071, 58.7130084336350890 204.9213699531617863, 50.7000149988751048 205.0014998875093681, 44.8533620796082459 205.6364368259640116, 39.2429210085478530 207.3997990299209278, 34.0842978896831070 210.2238214787869026, 29.5757357164827823 213.9999785735821547, 25.8904960048322081 218.5831547148469269, 23.1702004501438559 223.7972210137472189, 21.5193884850250754 229.4418038264983863, 21.0014998875093717 235.2999850011248952), (119.1493942276556623 204.3170060952215863, 125.2894246846412329 149.0567319823514367, 286.9915584344174135 123.4813945015195031, 299.4516499708198012 131.9139817029231381, 237.2510968713003763 203.1359890687851077, 119.1493942276556623 204.3170060952215863)) Case #25 - Invalid input! MULTIPOLYGON ((( 708258.754920656 2402197.91172757, 708257.029447455 2402206.56901508, 708652.961095455 2402312.65463437, 708657.068786251 2402304.6356364, 708258.754920656 2402197.91172757 )), (( 708653.498611049 2402311.54647056, 708708.895756966 2402203.47250014, 708280.326454234 2402089.6337791, 708247.896591321 2402252.48269854, 708367.379593851 2402324.00761653, 708248.882609455 2402253.07294874, 708249.523621829 2402244.3124463, 708261.854734465 2402182.39086576, 708262.818392579 2402183.35452387, 708653.498611049 2402311.54647056 ))) false POLYGON ((708247.8964913242962211 2402252.4826993490569293, 708247.8964935755357146 2402252.4827196551486850, 708247.8964999067829922 2402252.4827390797436237, 708247.8965100536588579 2402252.4827568121254444, 708247.8965235925279558 2402252.4827721123583615, 708247.8965399585431442 2402252.4827843415550888, 708367.3795424886047840 2402324.0077023315243423, 708367.3795424884883687 2402324.0077023315243423, 708367.3795602144673467 2402324.0077107031829655, 708367.3795792331220582 2402324.0077154561877251, 708367.3795988133642823 2402324.0077164070680737, 708367.3796182030346245 2402324.0077135199680924, 708367.3796366568421945 2402324.0077069052495062, 708367.3796534657012671 2402324.0076968176290393, 708367.3796679835068062 2402324.0076836450025439, 708367.3796796525130048 2402324.0076678926125169, 708367.3796880241716281 2402324.0076501667499542, 708367.3796927768271416 2402324.0076311482116580, 708367.3796937278239056 2402324.0076115676201880, 708367.3796908406075090 2402324.0075921779498458, 708367.3796842261217535 2402324.0075737242586911, 708367.3796741386177018 2402324.0075569157488644, 708367.3796609656419605 2402324.0075423978269100, 708367.3796452134847641 2402324.0075307288207114, 708248.8827136848121881 2402253.0728945857845247, 708249.5237211110070348 2402244.3124597654677927, 708257.0394274791469797 2402206.5717926472425461, 708652.9610695739975199 2402312.6547309630550444, 708652.9610886982409284 2402312.6547341416589916, 708652.9611080762697384 2402312.6547335702925920, 708652.9611269800225273 2402312.6547292708419263, 708652.9611446990165859 2402312.6547214044257998, 708652.9611605671234429 2402312.6547102672047913, 708652.9611739881802350 2402312.6546962773427367, 708652.9611844575265422 2402312.6546799610368907, 708657.0688752535497770 2402304.6356819909997284, 708657.0688824839890003 2402304.6356635885313153, 708657.0688859523506835 2402304.6356441229581833, 708657.0688855230109766 2402304.6356243551708758, 708657.0688812127336860 2402304.6356050586327910, 708657.0688731900881976 2402304.6355869872495532, 708657.0688617686973885 2402304.6355708478949964, 708657.0688473950140178 2402304.6355572710745037, 708657.0688306309748441 2402304.6355467871762812, 708657.0688121319981292 2402304.6355398069135845, 708657.0445044980151579 2402304.6290268381126225, 708708.8958459561690688 2402203.4725457550957799, 708708.8958531989483163 2402203.4725273284129798, 708708.8958566694054753 2402203.4725078358314931, 708708.8958562314510345 2402203.4724880419671535, 708708.8958519023144618 2402203.4724687216803432, 708708.8958438517292961 2402203.4724506335332990, 708708.8958323950646445 2402203.4724344857968390, 708708.8958179816836491 2402203.4724209117703140, 708708.8958011765498668 2402203.4724104437045753, 708708.8957826382247731 2402203.4724034913815558, 708280.3264799062162638 2402089.6336824516765773, 708280.3264597709057853 2402089.6336792535148561, 708280.3264394054422155 2402089.6336802057921886, 708280.3264196563977748 2402089.6336852684617043, 708280.3264013445004821 2402089.6336942315101624, 708280.3263852309901267 2402089.6337067219428718, 708280.3263719857204705 2402089.6337222210131586, 708280.3263621591031551 2402089.6337400842458010, 708280.3263561597559601 2402089.6337595693767071, 708258.7633657812839374 2402197.9138868227601051, 708258.7549465369665995 2402197.9116309769451618, 708258.7549263836117461 2402197.9116277340799570, 708258.7549059916054830 2402197.9116286509670317, 708258.7548862107796595 2402197.9116336894221604, 708258.7548678650055081 2402197.9116426398977637, 708258.7548517190152779 2402197.9116551289334893, 708258.7548384453402832 2402197.9116706363856792, 708258.7548285971861333 2402197.9116885163821280, 708258.7548225849168375 2402197.9117080233991146, 708257.0293493838980794 2402206.5689955335110426, 708257.0293474586214870 2402206.5690142284147441, 708257.0293490652693436 2402206.5690329535864294, 708257.0293541471473873 2402206.5690510477870703, 708257.0293625248596072 2402206.5690678711980581, 708257.0293739024782553 2402206.5690828296355903, 708257.0293878779048100 2402206.5690953955054283, 708257.0294039577711374 2402206.5691051245667040, 708257.0294215739704669 2402206.5691116731613874, 708257.0392338818637654 2402206.5717407753691077, 708247.8964932467788458 2402252.4826790094375610, 708247.8964913242962211 2402252.4826993490569293), (708258.7635593785671517 2402197.9139386950992048, 708261.8547960097203031 2402182.3910687258467078, 708262.8183218683116138 2402183.3545945808291435, 708262.8183402057038620 2402183.3546090582385659, 708262.8183614019071683 2402183.3546188860200346, 708522.7761432345723733 2402268.6532660527154803, 708258.7635593785671517 2402197.9139386950992048)) Case #26 - Invalid output GEOMETRYCOLLECTION (POLYGON ((0 10, 10 0, 10 10, 0 10), (4 8, 8 4, 8 8, 4 8)), LINESTRING (6 6, 20 20)) POLYGON((0 11,9.5857864376269 11,19.2928932188135 20.7071067811865,19.4444297669804 20.8314696123025,19.6173165676349 20.9238795325113,19.8049096779839 20.9807852804032,20 21,20.1950903220161 20.9807852804032,20.3826834323651 20.9238795325113,20.5555702330196 20.8314696123025,20.7071067811865 20.7071067811865,20.8314696123025 20.5555702330196,20.9238795325113 20.3826834323651,20.9807852804032 20.1950903220161,21 20,20.9807852804032 19.8049096779839,20.9238795325113 19.6173165676349,20.8314696123025 19.4444297669804,20.7071067811865 19.2928932188135,11 9.5857864376269,11 0,10.9807852804032 -0.195090322016128,10.9238795325113 -0.38268343236509,10.8314696123025 -0.555570233019602,10.7071067811865 -0.707106781186548,10.5555702330196 -0.831469612302545,10.3826834323651 -0.923879532511287,10.1950903220161 -0.98078528040323,10 -1,9.80490967798387 -0.98078528040323,9.61731656763491 -0.923879532511287,9.4444297669804 -0.831469612302545,9.29289321881345 -0.707106781186547,-0.707106781186547 9.29289321881345,-0.831469612302545 9.4444297669804,-0.923879532511286 9.61731656763491,-0.98078528040323 9.80490967798387,-1 10,-0.980785280403231 10.1950903220161,-0.923879532511288 10.3826834323651,-0.831469612302547 10.5555702330196,-0.707106781186551 10.7071067811865,-0.555570233019607 10.8314696123025,-0.382683432365094 10.9238795325113,-0.195090322016134 10.9807852804032,0 11)) Case #27 POLYGON ((-140 700, 880 1120, 1280 -120, 300 -600, -480 -480, -140 700), (0 360, 780 500, 240 -220, 0 360)) POLYGON ((-778.7369624023256165 -452.5004128279801421, -768.2720863281218726 -396.9385513969818362, -428.2720863281219295 783.0614486030182206, -428.2720863281218726 783.0614486030182206, -408.7534841560095060 833.3100324581969289, -380.5574411245926285 879.2543375195929229, -344.5943435555216752 919.4109263119892148, -302.0253583570249702 952.4832336003277078, -254.2249415762884723 977.4034295424147558, -254.2249415762884439 977.4034295424147558, 765.7750584237115845 1397.4034295424148695, 824.9820997649247829 1414.9119032079297540, 886.5194673034418429 1419.9291525445289608, 947.7806977050495334 1412.2426680322651009, 1006.1710236399521818 1392.1780167347219503, 1059.2172771825498785 1360.5850526513920613, 1104.6726427733435685 1318.8019204868039651, 1140.6118228493280640 1268.5983774849189558, 1165.5125853281651871 1212.1008339768277438, 1165.5125853281651871 1212.1008339768275164, 1565.5125853281651871 -27.8991660231724943, 1565.5125853281651871 -27.8991660231724730, 1578.2479052970841167 -87.6242840094385542, 1578.6248988264201216 -148.6909358667574566, 1566.6279446527257733 -208.5687379618446755, 1542.7541536469450421 -264.7765683433532899, 1507.9927703179562286 -314.9853755612036252, 1463.7841820583996650 -357.1146862282575398, 1411.9602346430190210 -389.4188123961639008, 431.9602346430190778 -869.4188123961638439, 431.9602346430191346 -869.4188123961638439, 375.0205313378135656 -890.4684490229396943, 315.0089731600441496 -899.6243159769932163, 254.3828447238176693 -896.5115092951851921, -525.6171552761823023 -776.5115092951851921, -525.6171552761842349 -776.5115092951848510, -580.4397169479343574 -762.6868643206097431, -631.6948450433227435 -738.8217030839614381, -677.5620519058279569 -705.7636721147999879, -716.4122189080046610 -664.6869317277042910, -746.8654597417037166 -617.0504520125676891, -767.8401314357936371 -564.5461929067481606, -778.5912523203892306 -509.0390088973724687, -778.7369624023256165 -452.5004128279801421)) Case #28 POLYGON ((-140 700, 880 1120, 1280 -120, 300 -600, -480 -480, -140 700), (0 360, 240 -220, 780 500, 0 360)) POLYGON ((-709.0316711751162302 -458.9169831681181222, -701.0085995182267879 -416.3195560710194059, -361.0085995182267879 763.6804439289805941, -346.0443378529406573 802.2043582179510395, -324.4273715288543940 837.4283254316878811, -296.8556633925666119 868.2150435058583753, -264.2194414070523862 893.5704790935845949, -227.5724552084877814 912.6759626491847257, 792.4275447915122186 1332.6759626491846120, 837.8196098197755646 1346.0991257927460083, 884.9982582659720265 1349.9456836174722412, 931.9652015738713544 1344.0527121580698804, 976.7311181239632560 1328.6698128299535711, 1017.3999125066216038 1304.4485403660671636, 1052.2490261262300919 1272.4148057065497142, 1079.8023975178182354 1233.9254227384378737, 1098.8929820849266434 1190.6106393822344671, 1498.8929820849266434 -49.3893606177655755, 1498.8929820849266434 -49.3893606177655542, 1508.6567273944313001 -95.1786177405695497, 1508.9457557669220478 -141.9963841645140405, 1499.7480909004232217 -187.9026991040809094, 1481.4448511293244337 -230.9953690632375469, 1454.7944572437663737 -269.4887879302561373, 1420.9012062447729932 -301.7879261083307938, 1381.1695132263146206 -326.5544228370590076, 401.1695132263146206 -806.5544228370589508, 357.5157406923237318 -822.6924775842537656, 311.5068794227005355 -829.7119755823614469, 265.0268476215935607 -827.3254904596419692, -514.9731523784064393 -707.3254904596419692, -514.9731523784079172 -707.3254904596417418, -557.0037829934162801 -696.7265959791341174, -596.2993811998808269 -678.4299723643704283, -631.4642397944680852 -653.0854819546800627, -661.2493678294702022 -621.5933143245732708, -684.5968524686394403 -585.0720132096352017, -700.6774341007751445 -544.8187478951736011, -708.9199601122983267 -502.2632401546522374, -709.0316711751162302 -458.9169831681181222)) Case #29 MULTIPOLYGON (((0 400, 440 400, 440 0, 0 0, 0 400),(380 360, 160 120, 260 80, 380 360)), ((360 320, 200 120, 240 100, 360 320))) POLYGON ((-30.0000000000000000 0.0000000000000000, -30.0000000000000000 400.0000000000000000, -29.4235584120969129 405.8527096604838675, -27.7163859753385999 411.4805029709526707, -24.9440883690763577 416.6671069905880813, -21.2132034355964230 421.2132034355964265, -16.6671069905880600 424.9440883690763826, -11.4805029709526902 427.7163859753385964, -5.8527096604838462 429.4235584120968952, 0.0000000000000000 430.0000000000000000, 440.0000000000000000 430.0000000000000000, 445.8527096604838675 429.4235584120968952, 451.4805029709526707 427.7163859753385964, 456.6671069905880813 424.9440883690763826, 461.2132034355964265 421.2132034355964265, 464.9440883690763826 416.6671069905880813, 467.7163859753385964 411.4805029709526707, 469.4235584120968952 405.8527096604838675, 470.0000000000000000 400.0000000000000000, 470.0000000000000000 0.0000000000000000, 469.4235584120968952 -5.8527096604838480, 467.7163859753385964 -11.4805029709526920, 464.9440883690763826 -16.6671069905880671, 461.2132034355964265 -21.2132034355964265, 456.6671069905880813 -24.9440883690763577, 451.4805029709526707 -27.7163859753386035, 445.8527096604838675 -29.4235584120969129, 440.0000000000000000 -30.0000000000000000, 0.0000000000000000 -30.0000000000000000, -0.0000000053875892 -30.0000000000000000, -5.8527096651074020 -29.4235584111772326, -11.4805029746857947 -27.7163859737923026, -16.6671069933878329 -24.9440883672056124, -21.2132034375012282 -21.2132034336916249, -24.9440883701987985 -16.6671069889082126, -27.7163859758540383 -11.4805029697083203, -29.4235584122282994 -5.8527096598233301, -30.0000000000000000 0.0000000000000000)) Case #30 POLYGON ((60 320, 260 240, 280 60, 60 60, 60 320), (140 240, 100 100, 80 240, 140 240)) POLYGON ((47.7999999999999972 60.0000000000000000, 47.7999999999999972 320.0000000000000000, 48.0315264859667153 322.3655108843300354, 48.7173183186694629 324.6412384206985280, 49.8313461582508239 326.7408070026280598, 51.3313268979948205 328.5845271652299857, 53.1603285264767607 330.1024202117251320, 55.2489309912589661 331.2368742661907959, 57.5178610482016879 331.9448309416234792, 59.8810010902576906 332.1994196279774201, 62.2486577551672084 331.9909773705118141, 64.5309662515200699 331.3274156288001677, 264.5309662515200557 251.3274156288001677, 266.8526771887014775 250.0936026941548675, 268.8561264807556199 248.3910085065419082, 270.4482671257503057 246.2987073331728141, 271.5551546948153714 243.9138727596698857, 272.1253815630181521 241.3472646181131154, 292.1253815630181521 61.3472646181131296, 292.1646248250303870 59.0716127606139096, 291.7804983265691590 56.8282718941085747, 290.9863709586593927 54.6953178079431552, 289.8098810182789293 52.7469844611216772, 288.2919743028874109 51.0510803914519897, 286.4854790592872291 49.6666287509086999, 284.4532673833778631 48.6418131019012137, 282.2660670602604682 48.0123004676292240, 280.0000000000000000 47.7999999999999972, 60.0000000000000000 47.7999999999999972, 59.9999999978090486 47.7999999999999972, 57.6198980695229892 48.0344195794545925, 55.3312621236277806 48.7286697039911303, 53.2220431560222806 49.8560707306697211, 51.3732972687495035 51.3732972702987425, 49.8560707294524903 53.2220431578439914, 48.7286697031526899 55.3312621256519535, 48.0344195790271584 57.6198980716718481, 47.7999999999999972 60.0000000000000000), (94.0667181863941124 227.8000000000000114, 103.9865101885854841 158.3614559846603811, 123.8260941929682275 227.8000000000000114, 94.0667181863941124 227.8000000000000114)) Case #31 MULTILINESTRING ((635074.5625 6184832.5, 635074.5625 6184832.5, 635074.625 6184832.5), (635074.6875 6184832.5, 635074.6875 6184832.5, 635074.5625 6184832.5)) POLYGON ((635074.5524999999906868 6184832.5000000000000000, 635074.5526921472046524 6184832.5019509028643370, 635074.5532612046226859 6184832.5038268342614174, 635074.5541853038594127 6184832.5055557023733854, 635074.5554289321880788 6184832.5070710675790906, 635074.5569442976266146 6184832.5083146961405873, 635074.5586731656221673 6184832.5092387953773141, 635074.5605490967864171 6184832.5098078530281782, 635074.5625000000000000 6184832.5099999997764826, 635074.6250000000000000 6184832.5099999997764826, 635074.6875000000000000 6184832.5099999997764826, 635074.6894509032135829 6184832.5098078530281782, 635074.6913268343778327 6184832.5092387953773141, 635074.6930557023733854 6184832.5083146961405873, 635074.6945710678119212 6184832.5070710675790906, 635074.6958146961405873 6184832.5055557023733854, 635074.6967387953773141 6184832.5038268342614174, 635074.6973078527953476 6184832.5019509028643370, 635074.6975000000093132 6184832.5000000000000000, 635074.6973078527953476 6184832.4980490971356630, 635074.6967387953773141 6184832.4961731657385826, 635074.6958146961405873 6184832.4944442976266146, 635074.6945710678119212 6184832.4929289324209094, 635074.6930557023733854 6184832.4916853038594127, 635074.6913268343778327 6184832.4907612046226859, 635074.6894509032135829 6184832.4901921469718218, 635074.6875000000000000 6184832.4900000002235174, 635074.6250000000000000 6184832.4900000002235174, 635074.5625000000000000 6184832.4900000002235174, 635074.5605490967864171 6184832.4901921469718218, 635074.5586731656221673 6184832.4907612046226859, 635074.5569442976266146 6184832.4916853038594127, 635074.5554289321880788 6184832.4929289324209094, 635074.5541853038594127 6184832.4944442976266146, 635074.5532612046226859 6184832.4961731657385826, 635074.5526921472046524 6184832.4980490971356630, 635074.5524999999906868 6184832.5000000000000000)) Case #32 (previously in buffer_snapround.xml) MULTILINESTRING ( ( 85.5939933259177 234.65406006674084, 251 233, 344.3694502052736 126.0884157954882 ), ( 344.3694502052736 126.0884157954882, 382 83 )) POLYGON ((251.2999850011249 262.9985001124906, 257.5681863594468 262.27215277268783, 263.54579707741004 260.25074266313584, 268.9683548466559 257.0237012990225, 273.5959540907721 252.733799905941, 366.9654042960458 145.8222157014292, 366.96540429604596 145.822215701429, 404.5959540907721 102.73379990594101, 408.01165254714834 97.94636851433921, 410.42773778364045 92.58455656275139, 411.75136099956626 86.85441547753827, 411.93165609703425 80.97615136710445, 410.9616944365593 75.17566262464543, 408.8787511007927 69.67585877958233, 405.762872434 64.6880942093554, 401.733799905941 60.40404590922786, 396.9463685143392 56.98834745285165, 391.5845565627514 54.57226221635955, 385.8544154775383 53.24863900043373, 379.9761513671045 53.068343902965765, 374.17566262464544 54.0383055634407, 368.6758587795823 56.12124889920727, 363.68809420935537 59.23712756600002, 359.4040459092279 63.26620009405899, 321.77349611450177 106.35461588954689, 321.7734961145014 106.35461588954719, 237.25109687130038 203.1359890687851, 85.29400832479278 204.6555599542502, 85.29400832479277 204.6555599542502, 79.44735540552597 205.29049689270485, 73.83691433446558 207.05385909666174, 68.67829121560081 209.87788154552774, 64.16972904240048 213.654038640323, 60.4844893307499 218.23721478158777, 57.764193776061546 223.45128108048806, 56.11338181094277 229.09586389323925, 55.59549321342706 234.95404506786576, 56.230430151881706 240.80069798713257, 57.99379235583859 246.41113905819296, 60.81781480470461 251.56976217705773, 64.59397189949983 256.0783243502581, 69.1771480407646 259.7635640619086, 74.39121433966491 262.483859616597, 80.03579715241607 264.13467158171574, 85.89397832704257 264.65256017923144, 85.8939783270426 264.65256017923144, 251.2999850011249 262.9985001124906)) geos-3.4.2/tests/xmltester/tests/failure/0000755000175000017500000000000012206417242020257 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/failure/TestOverlay.xml0000644000175000017500000001331312206417146023266 0ustar frankiefrankie http://postgis.refractions.net/pipermail/postgis-users/2006-November/013743.html POLYGON((5417148.108 5658342.603,5417139.016 5658338.009,5417126.791 5658331.833,5417116.292 5658327.518,5417112.871 5658325.598,5417110.25 5658324.127,5417106.071 5658321.781,5417104.226 5658320.745,5417093.266 5658315.008,5417091.265 5658313.961,5417085.335 5658310.857,5417060.44 5658326.26,5417064.68 5658327.52,5417088.83 5658336.46,5417088.52 5658337.31,5417102.92 5658342.65,5417103.26 5658341.83,5417111.76 5658345.51,5417121.662 5658349.583,5417121.878 5658349.672,5417125.217 5658351.119,5417131.761 5658353.388,5417137.589 5658356.276,5417142.166 5658359.67,5417146.599 5658364.988,5417151.395 5658370.641,5417150.853 5658371.392,5417152.59741167 5658373.52811061,5417154.92 5658376.37,5417155.18955743 5658376.89699992,5417154.919 5658376.371,5417155.814 5658378.111,5417157.051 5658380.297,5417158.004 5658382.304,5417159.014 5658384.47,5417159.775 5658386.619,5417160.629 5658389.278,5417161.5 5658399.49,5417160.773 5658404.194,5417159.41 5658413.02,5417158.853 5658414.442,5417153.671 5658427.659,5417153.67051161 5658427.6586943,5417153.67 5658427.66,5417152.73 5658427.07,5417149.993 5658436.599,5417148.81 5658439.42,5417149.233 5658439.67,5417148.36 5658440.81,5417146.41 5658446.6,5417144.321 5658453.127,5417144.32092232 5658453.13043826,5417154.59 5658458.01,5417154.99551047 5658455.8409905,5417155.446 5658453.413,5417157.23981414 5658448.75748237,5417157.22660892 5658448.57861162,5417157.22660849 5658448.57860592,5417157.22660865 5658448.57860812,5417157.128 5658447.265,5417157.64950997 5658446.06368023,5417157.64950961 5658446.06368108,5417158.314 5658444.533,5417172.322 5658417.957,5417174.99 5658418.57,5417175.23 5658417.74,5417176.696 5658412.61,5417177.875 5658408.488,5417178.76 5658405.39,5417178.1 5658393.55,5417178.08 5658393.36,5417177.11 5658384.95,5417178.151 5658384.915,5417178.14836289 5658384.91508866,5417178.12 5658384.83,5417177.91415246 5658383.81114117,5417176.927 5658378.944,5417176.603 5658377.341,5417176.73975922 5658378.01762048,5417176.6 5658377.34,5417176.51210558 5658376.89535766,5417176.428 5658376.483,5417175.235 5658370.602,5417171.577 5658362.886,5417170.762 5658360.107,5417168.522 5658357.989,5417166.042 5658355.047,5417164.137 5658352.264,5417162.642 5658351.593,5417160.702 5658350.843,5417160.05417889 5658350.5823586,5417158.82 5658350.09,5417158.82103105 5658350.0862195,5417159.50373263 5658350.36089455,5417158.818 5658350.085,5417159.055 5658349.214,5417155.754 5658347.679,5417156.78066321 5658348.15640928,5417155.7525011 5658347.6811561,5417155.161 5658348.532,5417149.028 5658343.237,5417152.26877967 5658346.03496647,5417149.03 5658343.24,5417148.78133339 5658343.06701453,5417148.108 5658342.603)) POLYGON((5417148.36 5658440.81,5417149.233 5658439.67,5417148.81 5658439.42,5417149.993 5658436.599,5417152.73 5658427.07,5417153.67 5658427.66,5417153.67051161 5658427.6586943,5417153.671 5658427.659,5417158.853 5658414.442,5417159.41 5658413.02,5417160.773 5658404.194,5417161.5 5658399.49,5417160.63 5658389.28,5417159.78 5658386.62,5417159.366239 5658385.46469333,5417159.014 5658384.47,5417158.004 5658382.304,5417157.051 5658380.297,5417155.814 5658378.111,5417155.18955747 5658376.897,5417154.92 5658376.37,5417152.59740379 5658373.52810095,5417150.853 5658371.392,5417151.13020611 5658371.00790076,5417151.4 5658370.64,5417147.11100598 5658365.59149663,5417146.599 5658364.988,5417145.96673439 5658364.22950947,5417142.17 5658359.67,5417139.98754716 5658358.05460369,5417137.589 5658356.276,5417131.761 5658353.388,5417125.33011568 5658351.15822058,5417125.22 5658351.12,5417121.88 5658349.67,5417121.66 5658349.58,5417111.76 5658345.51,5417103.26 5658341.83,5417102.92 5658342.65,5417088.52 5658337.31,5417088.83 5658336.46,5417064.68 5658327.52,5417060.44 5658326.26,5417085.34 5658310.86,5417085.90750076 5658311.15666987,5417091.265 5658313.961,5417093.266 5658315.008,5417093.61266829 5658315.18946314,5417104.23 5658320.75,5417105.81727304 5658321.63852784,5417106.071 5658321.781,5417106.60319005 5658322.07975996,5417110.25 5658324.13,5417112.87 5658325.6,5417116.29 5658327.52,5417121.76604303 5658329.76778528,5417126.791 5658331.833,5417139.016 5658338.009,5417148.108 5658342.603,5417148.78133333 5658343.06701449,5417149.03 5658343.24,5417152.26878253 5658346.03496893,5417155.161 5658348.532,5417155.7525011 5658347.6811561,5417156.78066337 5658348.15640935,5417159.055 5658349.214,5417158.818 5658350.085,5417158.82103105 5658350.0862195,5417158.82 5658350.09,5417160.0541792 5658350.58235872,5417160.702 5658350.843,5417162.642 5658351.593,5417164.137 5658352.264,5417165.25343486 5658353.89499119,5417166.04 5658355.05,5417168.52 5658357.99,5417170.76 5658360.11,5417171.26171711 5658361.81094338,5417171.577 5658362.886,5417175.235 5658370.602,5417176.428 5658376.483,5417176.51210558 5658376.89535766,5417176.6 5658377.34,5417176.73975924 5658378.01762057,5417176.927 5658378.944,5417177.91415134 5658383.81113564,5417178.12 5658384.83,5417178.14836289 5658384.91508866,5417177.11 5658384.95,5417178.08 5658393.36,5417178.1 5658393.55,5417178.76 5658405.39,5417177.875 5658408.488,5417176.696 5658412.61,5417175.23 5658417.74,5417174.99 5658418.57,5417172.322 5658417.957,5417172.32037372 5658417.96008538,5417172.32 5658417.96,5417158.31 5658444.53,5417157.64951003 5658446.06368011,5417157.128 5658447.265,5417157.22660867 5658448.5786084,5417157.23981414 5658448.75748238,5417155.446 5658453.413,5417154.99551072 5658455.84098918,5417154.59 5658458.01,5417144.32092232 5658453.13043826,5417144.321 5658453.127,5417146.41 5658446.6,5417148.36 5658440.81)) POLYGON EMPTY geos-3.4.2/tests/xmltester/tests/fme.xml0000644000175000017500000045445212206417147020143 0ustar frankiefrankie Big Bad Nasty buffer POLYGON((377888.21875 5686717.5,377888.09375 5686717.5,377886.46875 5686721,377885.25 5686725,377884.40625 5686730.5,377883.59375 5686735,377883.5625 5686737,377883.5 5686743.5,377883.09375 5686747,377883.03125 5686752.5,377883 5686758,377883.75 5686762,377884.46875 5686767.5,377885.25 5686771.5,377885.21875 5686775,377887.53125 5686781,377891.8125 5686788,377895.4375 5686792,377896.5 5686793,377900.03125 5686797,377905.5 5686802.5,377908.65625 5686804.5,377911.40625 5686807.5,377915.34375 5686809,377918.6875 5686810.5,377920.90625 5686806.5,377923.3125 5686801,377926.09375 5686797.5,377928.21875 5686794.5,377928.90625 5686793.5,377932.09375 5686790.5,377935.6875 5686786,377939.28125 5686782,377944.46875 5686776,377948.0625 5686773,377953.625 5686769,377958.8125 5686765.5,377962.75 5686763.5,377964.0625 5686763,377964.59375 5686762,377965.0625 5686761,377965.5625 5686760,377965.625 5686759,377965.65625 5686759,377966.125 5686758,377967.03125 5686757,377967.46875 5686756.5,377968.46875 5686754.5,377969.71875 5686753.5,377970.625 5686752.5,377971.125 5686751.5,377971.53125 5686751.5,377971.5625 5686751,377973.125 5686751,377975.6875 5686749.5,377978.15625 5686748.5,377978.9375 5686748.5,377979.75 5686748.5,377980.15625 5686748.5,377980.96875 5686748,377981.75 5686748,377982.96875 5686748,377984.15625 5686748,377986.625 5686747,377989 5686747,377990.1875 5686747,377990.96875 5686747,377991.84375 5686746.5,377992.25 5686746,377993.03125 5686746,377993.84375 5686746,377994.65625 5686746,377995.4375 5686746,377996.625 5686746,377997.40625 5686746,377998.59375 5686746.5,377999.375 5686746.5,378000.9375 5686746.5,378001.71875 5686746.5,378002.90625 5686746.5,378003.6875 5686747,378004.46875 5686747,378004.875 5686747,378005.71875 5686746,378006.125 5686746,378007.40625 5686745,378008.21875 5686745,378009.03125 5686745,378009.09375 5686744,378010.375 5686743,378012.40625 5686742.5,378013.6875 5686742,378014.53125 5686741,378015.3125 5686741,378015.34375 5686741,378016.1875 5686740.5,378017.59375 5686738.5,378018.0625 5686737.5,378018.125 5686736.5,378018.59375 5686736,378018.78125 5686734,378018.90625 5686733,378019.03125 5686731,378019.1875 5686729.5,378019.28125 5686729,378019.34375 5686728,378019.40625 5686727.5,378019.5 5686726.5,378019.6875 5686724.5,378020.9375 5686724,378021.40625 5686723,378021.5 5686722,378021.5625 5686721.5,378021.6875 5686720,378021.78125 5686719,378022.5625 5686719.5,378022.625 5686718.5,378022.71875 5686717.5,378022.84375 5686716,378023.3125 5686715.5,378023.4375 5686714,378023.5 5686713.5,378023.65625 5686712,378024.53125 5686711,378025.4375 5686710,378025.46875 5686709.5,378025.96875 5686708.5,378026.78125 5686708,378027.71875 5686706.5,378028.9375 5686706.5,378029.40625 5686705.5,378030.28125 5686705,378031.09375 5686704.5,378031.5625 5686704,378032.84375 5686703,378034.0625 5686702.5,378034.96875 5686701.5,378035.8125 5686701,378036.25 5686700.5,378036.6875 5686700,378037.53125 5686699.5,378037.9375 5686699.5,378038.78125 5686698.5,378039.1875 5686698.5,378040.0625 5686698,378040.875 5686697.5,378042.125 5686697,378042.5625 5686696.5,378043.78125 5686696.5,378044.5625 5686696.5,378045.34375 5686696.5,378046.125 5686696.5,378047.40625 5686695.5,378049.03125 5686695.5,378049.84375 5686695,378050.65625 5686694.5,378051.5 5686694.5,378052.3125 5686694,378053.59375 5686693,378054.8125 5686692.5,378055.59375 5686693,378055.6875 5686692,378056.15625 5686691.5,378057.78125 5686690.5,378059 5686690.5,378059.84375 5686690,378060.25 5686689.5,378060.65625 5686690,378061.4375 5686690,378061.84375 5686690,378062.6875 5686689,378063.46875 5686689.5,378064.65625 5686689.5,378065.0625 5686689.5,378066.28125 5686689,378067.0625 5686689,378067.84375 5686689.5,378069.40625 5686689.5,378070.96875 5686689.5,378071.375 5686689.5,378071.78125 5686689.5,378072.5625 5686690,378073.34375 5686690,378074.40625 5686691,378075.5 5686692,378076.25 5686692.5,378076.96875 5686693.5,378077.6875 5686694.5,378078.4375 5686694.5,378079.15625 5686695,378079.125 5686695.5,378079.53125 5686695.5,378079.4375 5686696.5,378080.4375 5686698.5,378080.71875 5686699.5,378080.5625 5686701.5,378081.21875 5686703,378081.0625 5686704.5,378080.9375 5686705.5,378080.84375 5686707,378081.5 5686708,378082.1875 5686709.5,378082.90625 5686710.5,378083.21875 5686711,378083.125 5686712,378083.5 5686712.5,378083.40625 5686713,378084.59375 5686713,378085.6875 5686714,378086.4375 5686714.5,378088.8125 5686715,378091.46875 5686716,378093.78125 5686716.5,378094.59375 5686716.5,378095.28125 5686717.5,378095.6875 5686717.5,378096.0625 5686717.5,378096.875 5686717.5,378097.65625 5686717.5,378098.8125 5686718,378100.1875 5686716,378102.3125 5686714.5,378102.78125 5686714,378102.84375 5686713,378104.03125 5686713,378105.34375 5686712,378107.4375 5686711,378108.65625 5686710.5,378109.0625 5686710,378109.875 5686710,378110.65625 5686710.5,378111.90625 5686709.5,378113.0625 5686710,378115.125 5686709,378116.6875 5686709.5,378117.53125 5686708.5,378117.96875 5686708.5,378118.8125 5686708,378119.28125 5686707,378120.1875 5686705.5,378121.46875 5686705,378122.34375 5686704,378122.84375 5686703,378123.71875 5686702,378124.15625 5686701.5,378125.09375 5686700,378125.5 5686700,378127.28125 5686698,378128.96875 5686697,378129.8125 5686696.5,378130.6875 5686695.5,378131.46875 5686695.5,378132.28125 5686695.5,378133.0625 5686695.5,378134.625 5686695.5,378135.8125 5686696,378137.78125 5686696,378139.34375 5686696,378140.1875 5686696,378140.96875 5686696,378141.0625 5686694.5,378142.3125 5686694,378142.84375 5686693,378144.09375 5686692,378144.9375 5686691.5,378145.84375 5686690.5,378146.28125 5686690,378147.125 5686689.5,378147.96875 5686689,378149.1875 5686689,378150.8125 5686688,378152.4375 5686688,378153.59375 5686688,378154 5686688,378155.1875 5686688,378155.96875 5686688.5,378156.34375 5686688.5,378156.75 5686688.5,378156.84375 5686687,378156.15625 5686686.5,378155.90625 5686684.5,378155.1875 5686684,378155.28125 5686683,378154.46875 5686683,378153.5 5686681,378152.0625 5686679,378151.71875 5686678.5,378151.75 5686678.5,378150.96875 5686678,378150.625 5686678,378149.5 5686677,378148.375 5686676.5,378148.09375 5686675,378146.9375 5686674.5,378146.5625 5686674.5,378146.625 5686674,378146.65625 5686673.5,378145.875 5686673.5,378146.0625 5686671.5,378145.4375 5686669.5,378145.125 5686669,378145.1875 5686668,378145.28125 5686667.5,378145.34375 5686666.5,378145.375 5686666,378145.53125 5686664.5,378146.375 5686664,378146.9375 5686662.5,378147.03125 5686661,378147.90625 5686660.5,378147.96875 5686659.5,378148.46875 5686658.5,378149.34375 5686658,378149.8125 5686657,378149.84375 5686656.5,378149.875 5686656.5,378150.65625 5686656.5,378151.53125 5686655.5,378152.3125 5686655.5,378153.09375 5686656,378154 5686654.5,378155.65625 5686654,378156.46875 5686654,378157.34375 5686653,378158.15625 5686652.5,378158.59375 5686652.5,378159.84375 5686651.5,378161.0625 5686651.5,378161.875 5686651,378162.75 5686650.5,378163.5625 5686650,378164.40625 5686649.5,378165.65625 5686648.5,378167.28125 5686648.5,378168.53125 5686648,378169.40625 5686647,378169.78125 5686647,378169.875 5686646.5,378170.65625 5686646.5,378171.0625 5686646,378171.15625 5686645.5,378171.96875 5686645,378172.15625 5686643,378172.28125 5686642,378172.375 5686640.5,378172.84375 5686640,378172.96875 5686638.5,378173.4375 5686638,378173.9375 5686637,378174 5686636,378174.9375 5686634.5,378175.03125 5686634,378175.0625 5686633.5,378175.09375 5686633,378176 5686632,378176.03125 5686631.5,378176.1875 5686630,378176.25 5686629,378176.34375 5686628.5,378176.375 5686628,378176.59375 5686628,378182.875 5686630.5,378186.8125 5686632,378193.09375 5686633.5,378194.34375 5686630,378194.78125 5686625.5,378194.46875 5686618,378193.6875 5686614,378192.96875 5686607.5,378192.21875 5686604,378191.0625 5686599.5,378189.9375 5686593.5,378188.78125 5686588,378187.6875 5686580,378187.71875 5686575.5,378187.71875 5686574,378187.75 5686571,378186.59375 5686567.5,378186.65625 5686563,378187.5 5686557,378188.3125 5686553.5,378189.90625 5686550.5,378192.3125 5686546.5,378195.125 5686543,378196.5 5686541.5,378196.6875 5686539.5,378197.625 5686538,378198.09375 5686537,378198.21875 5686536,378198.25 5686535.5,378198.71875 5686535,378198.8125 5686533.5,378198.90625 5686533,378199.6875 5686533,378199.84375 5686531.5,378201.5625 5686530,378202.8125 5686529.5,378203.3125 5686528,378203.6875 5686528,378203.78125 5686527.5,378204.15625 5686527.5,378205.03125 5686526.5,378206.21875 5686527,378206.71875 5686525.5,378207.5625 5686525,378208 5686524.5,378208.46875 5686524,378209.4375 5686522,378211.09375 5686521.5,378212.40625 5686520,378213.71875 5686519,378214.5625 5686518,378215.03125 5686517.5,378215.875 5686517,378216.28125 5686517,378217.15625 5686516,378217.59375 5686515.5,378218.4375 5686515,378219.65625 5686514.5,378220.46875 5686514.5,378220.5625 5686513.5,378221.375 5686513.5,378221.78125 5686513.5,378222.59375 5686513,378223.09375 5686512,378223.90625 5686511.5,378225.28125 5686509.5,378226.96875 5686508.5,378227.84375 5686508,378228.25 5686507.5,378228.71875 5686507,378228.75 5686506.5,378229.21875 5686505.5,378230.09375 5686505,378230.125 5686504.5,378231.0625 5686503,378231.9375 5686502.5,378232.4375 5686501.5,378233.34375 5686500,378234.21875 5686499,378235.09375 5686498.5,378235.9375 5686497.5,378236.40625 5686497,378237.3125 5686496,378237.8125 5686494.5,378238.71875 5686493.5,378239.21875 5686492.5,378240.125 5686491.5,378241.0625 5686490,378241.5625 5686488.5,378242.46875 5686487.5,378242.875 5686487.5,378243.34375 5686486.5,378243.8125 5686486,378244.65625 5686485.5,378245.53125 5686484.5,378246.78125 5686483.5,378247.3125 5686482.5,378247.84375 5686481,378248.3125 5686480.5,378248.4375 5686479,378248.5 5686478.5,378248.96875 5686477.5,378249.8125 5686477,378249.90625 5686476,378250.09375 5686474,378251 5686473,378251.53125 5686471.5,378251.65625 5686470.5,378251.75 5686469,378252.21875 5686468.5,378252.71875 5686467,378252.75 5686467,378252.84375 5686466,378253.09375 5686463.5,378254.4375 5686462,378255.3125 5686460.5,378255.4375 5686459.5,378255.5 5686458.5,378255.90625 5686459,378257 5686455.5,378258.40625 5686453.5,378258.5 5686452.5,378259.0625 5686450.5,378259.125 5686450,378260.78125 5686447,378262.78125 5686443.5,378265.59375 5686439,378266.9375 5686437,378269.1875 5686434,378270.28125 5686433,378270.625 5686432.5,378271.15625 5686432,378271.34375 5686429.5,378272.28125 5686428,378272.75 5686427.5,378272.84375 5686426.5,378272.875 5686426.5,378273.25 5686426.5,378274.15625 5686425.5,378274.25 5686424.5,378274.375 5686423,378275.71875 5686421.5,378276.625 5686420.5,378276.71875 5686419,378277.15625 5686419,378277.21875 5686418,378278 5686418,378278.5625 5686416.5,378279.5 5686415,378279.5625 5686414.5,378279.65625 5686413.5,378280.15625 5686412.5,378280.5625 5686412,378281.5 5686410.5,378282.375 5686410,378282.40625 5686409.5,378282.4375 5686409,378282.96875 5686408,378284.21875 5686407,378284.75 5686405.5,378284.78125 5686405.5,378284.8125 5686405,378285.25 5686404.5,378286.0625 5686404,378286.46875 5686404,378287 5686402.5,378288.6875 5686401.5,378289.125 5686401.5,378290 5686400.5,378290.375 5686400.5,378291.1875 5686400.5,378292 5686400.5,378293.15625 5686400.5,378293.9375 5686400.5,378295.53125 5686401,378295.90625 5686401,378296.6875 5686401,378297.09375 5686401,378298.15625 5686402.5,378299.3125 5686403,378299.96875 5686404,378301.03125 5686405.5,378302.09375 5686406.5,378302.78125 5686408,378303.53125 5686408.5,378303.84375 5686409,378304.15625 5686410,378304.09375 5686411,378304.84375 5686411.5,378305.625 5686411.5,378306.6875 5686412.5,378307.03125 5686413,378308.15625 5686414,378309.28125 5686414.5,378309.96875 5686416,378310.65625 5686416.5,378311.375 5686417.5,378312.09375 5686418.5,378313.21875 5686419,378313.1875 5686419.5,378313.9375 5686419.5,378314.34375 5686420,378315.40625 5686421,378316.9375 5686421.5,378319.9375 5686423.5,378322.21875 5686424.5,378323.3125 5686425.5,378324.03125 5686426.5,378325.15625 5686427,378325.53125 5686427.5,378326.3125 5686427.5,378326.625 5686428,378327.75 5686428.5,378328.15625 5686428.5,378329.25 5686429.5,378330.03125 5686429.5,378331.09375 5686431,378332.65625 5686431.5,378333.71875 5686433,378334.375 5686434,378335.4375 5686435.5,378336.15625 5686436.5,378337.25 5686437,378337.9375 5686438.5,378338.65625 5686439.5,378339.34375 5686440,378340.09375 5686440.5,378340.46875 5686441,378341.15625 5686442,378342.3125 5686442.5,378343.8125 5686443.5,378344.90625 5686444.5,378345.25 5686445,378345.21875 5686445,378345.96875 5686445.5,378346.75 5686445.5,378348.1875 5686447.5,378350.09375 5686448,378350.8125 5686449,378351.5625 5686449.5,378352.34375 5686449.5,378353.0625 5686450.5,378353.46875 5686450.5,378354.5625 5686451.5,378354.90625 5686451.5,378355.625 5686452.5,378356.375 5686453,378357.84375 5686454.5,378359.375 5686455,378360.46875 5686456,378361.1875 5686456.5,378362.28125 5686457.5,378363 5686458.5,378364.125 5686459,378364.5 5686459.5,378365.5625 5686460.5,378366.3125 5686461,378367.09375 5686461.5,378367 5686462,378368.59375 5686462,378370.46875 5686463,378372.4375 5686463.5,378373.21875 5686463.5,378374.375 5686464,378375.9375 5686464,378378.6875 5686464.5,378379.84375 5686464.5,378380.65625 5686464.5,378381.4375 5686464.5,378381.8125 5686465,378382.25 5686464.5,378384.25 5686464,378385.5 5686463.5,378386.6875 5686463.5,378387.875 5686464,378387.90625 5686463.5,378388.71875 5686463,378389.5 5686463,378391.15625 5686462.5,378393.125 5686462.5,378394.375 5686462,378395.1875 5686461.5,378395.625 5686461.5,378395.65625 5686461,378396.4375 5686461,378396.59375 5686459.5,378397.40625 5686459,378398.3125 5686458,378398.40625 5686457.5,378399.28125 5686456,378399.75 5686455.5,378399.90625 5686454,378400.03125 5686452.5,378400.09375 5686452,378400.21875 5686450.5,378400.34375 5686449,378400.46875 5686448,378400.59375 5686447,378400.71875 5686445,378401.1875 5686444.5,378401.3125 5686443.5,378401.4375 5686442,378401.5 5686441.5,378401.625 5686440,378401.6875 5686439.5,378401.75 5686438.5,378401.5625 5686436.5,378401.71875 5686435,378401.8125 5686434,378402.09375 5686431,378402.21875 5686429.5,378402.40625 5686427.5,378402.65625 5686425,378402.78125 5686423.5,378402.9375 5686422,378403.0625 5686421,378403.15625 5686419.5,378402.84375 5686419,378402.65625 5686417,378402.78125 5686415,378402.9375 5686413.5,378403.03125 5686413,378402.6875 5686412,378402.78125 5686411,378402.84375 5686410.5,378402.96875 5686409.5,378403.03125 5686408.5,378402 5686407,378402.125 5686405.5,378402.1875 5686405,378401.875 5686404,378401.5625 5686403,378400.875 5686402,378401.0625 5686400,378400.03125 5686398.5,378399.4375 5686396,378398.84375 5686394,378398.5625 5686393,378398.6875 5686392,378397.96875 5686391,378398.09375 5686389.5,378398.15625 5686389,378397.84375 5686388,378397.59375 5686386.5,378396.9375 5686385,378397.125 5686383.5,378397.34375 5686381,378397.0625 5686379.5,378396.8125 5686378,378396.5 5686377,378396.53125 5686377,378396.65625 5686375.5,378396.71875 5686375,378396.9375 5686372.5,378396.6875 5686371,378396.96875 5686368,378398.3125 5686366.5,378398.75 5686366,378398.84375 5686365,378398.90625 5686364.5,378400.90625 5686364,378401.8125 5686363,378402.625 5686363,378403.4375 5686362.5,378403.5 5686362,378403.59375 5686361,378404.8125 5686360.5,378405.59375 5686360.5,378406.46875 5686360,378408.09375 5686359.5,378409.03125 5686358,378410.3125 5686357,378411.09375 5686357,378411.15625 5686356.5,378411.96875 5686356,378412.78125 5686356,378414.0625 5686355,378415.6875 5686354.5,378416.53125 5686354,378416.5625 5686354,378416.96875 5686354,378417.75 5686354,378419 5686353.5,378420.21875 5686353,378420.59375 5686353,378421.375 5686353,378422.5625 5686353,378424.59375 5686352.5,378425.8125 5686352.5,378426.59375 5686352.5,378426.65625 5686352,378429 5686352.5,378430.40625 5686351.5,378430.6875 5686351.5,378432.28125 5686351,378433.0625 5686351,378433.46875 5686351,378434.25 5686351,378434.65625 5686351.5,378436.21875 5686351.5,378437.40625 5686351.5,378438.1875 5686351.5,378438.5625 5686351.5,378440.15625 5686352,378441.3125 5686352,378442.0625 5686352.5,378442.46875 5686352.5,378443.65625 5686352.5,378444.8125 5686352.5,378446 5686353,378446.40625 5686353,378447.1875 5686353,378447.96875 5686353,378448.8125 5686352.5,378451.21875 5686352,378452.5 5686351,378453.375 5686350.5,378453.75 5686350.5,378453.84375 5686349.5,378454.625 5686349.5,378454.71875 5686348.5,378455.59375 5686348,378456.5 5686346.5,378456.96875 5686346,378457.0625 5686345,378457.15625 5686344,378457.25 5686343,378457.34375 5686342,378457.59375 5686339.5,378458.125 5686338,378458.3125 5686336,378458.5625 5686333.5,378458.625 5686332.5,378458.75 5686331.5,378458.84375 5686330.5,378458.875 5686330,378459.03125 5686328.5,378458.6875 5686328,378457.625 5686326.5,378457.65625 5686326,378457.25 5686326,378456.6875 5686323.5,378452.53125 5686321.5,378451.09375 5686320,378450.4375 5686318.5,378449.65625 5686318.5,378448.9375 5686318,378448.59375 5686317.5,378447.90625 5686316,378446.8125 5686315,378446.15625 5686313.5,378445.53125 5686312,378445.28125 5686310,378445.4375 5686308.5,378445.5625 5686307.5,378445.25 5686306.5,378445.3125 5686306,378445.375 5686305,378445.625 5686302.5,378445.71875 5686301.5,378445.875 5686300,378446.03125 5686298.5,378446.09375 5686297.5,378446.1875 5686297,378446.28125 5686295.5,378446.3125 5686295,378447.1875 5686294.5,378447.21875 5686294,378447.625 5686294,378448 5686294,378448.09375 5686293.5,378448.125 5686293,378448.15625 5686292.5,378450.5 5686293,378451.8125 5686292,378452.28125 5686291,378452.6875 5686290.5,378452.75 5686290.5,378453.53125 5686290.5,378454.09375 5686288.5,378456.1875 5686287.5,378456.71875 5686286,378457.65625 5686284.5,378457.6875 5686284,378458.125 5686283.5,378458.53125 5686284,378459.3125 5686284,378460.59375 5686283,378462.28125 5686282,378463.0625 5686282,378463.125 5686281,378464.03125 5686280,378464.84375 5686279.5,378466.625 5686278,378467.875 5686277,378468.71875 5686276.5,378469.1875 5686275.5,378469.625 5686275.5,378470.0625 5686275,378470.90625 5686274.5,378471.75 5686274,378473.0625 5686272.5,378474.3125 5686272,378474.78125 5686271,378475.65625 5686270.5,378476.5 5686269.5,378477.40625 5686268.5,378477.84375 5686268,378478.6875 5686267.5,378480 5686266.5,378481.25 5686266,378481.75 5686265.5,378482.0625 5686265.5,378482.5 5686265,378483.4375 5686263.5,378485.875 5686263,378487.59375 5686261.5,378489.34375 5686260,378490.1875 5686259,378491.09375 5686258,378491.96875 5686257.5,378492.375 5686257,378493.25 5686256.5,378493.6875 5686256,378494.5625 5686255,378496.21875 5686254,378497.5625 5686252.5,378498.875 5686251.5,378499.75 5686250.5,378500.625 5686249.5,378501.0625 5686249,378501.9375 5686248.5,378502.78125 5686247.5,378503.21875 5686247.5,378504.0625 5686246.5,378504.90625 5686246.5,378505.8125 5686245,378506.625 5686245,378507.46875 5686244,378507.9375 5686243.5,378508.5 5686242,378510.125 5686241.5,378511.4375 5686240,378511.9375 5686239,378512.78125 5686238.5,378513.65625 5686237.5,378514.90625 5686237,378515.8125 5686236,378516.65625 5686235,378517.90625 5686234.5,378518.75 5686234,378519.59375 5686233.5,378520 5686233.5,378520.78125 5686233.5,378521.625 5686233,378522.5 5686232,378524.15625 5686231.5,378525.75 5686231.5,378526.65625 5686230.5,378527.90625 5686229.5,378528.71875 5686229.5,378529.59375 5686228.5,378530.8125 5686228.5,378531.625 5686228,378532.875 5686227.5,378534.09375 5686227,378534.875 5686227,378535.75 5686226.5,378536.5625 5686226,378537.46875 5686225,378539.0625 5686225,378539.9375 5686224,378539.96875 5686223.5,378540.78125 5686223.5,378541.6875 5686222,378542.5625 5686221.5,378543.84375 5686220.5,378545.0625 5686220,378546.34375 5686219,378547.21875 5686218.5,378548.0625 5686217.5,378548.9375 5686217,378549.78125 5686216.5,378550.21875 5686216,378551.0625 5686215,378551.90625 5686215,378552.71875 5686214.5,378553.59375 5686214,378554.4375 5686213,378556.0625 5686213,378557.3125 5686212.5,378558.15625 5686211.5,378559.375 5686211.5,378559.8125 5686211,378560.59375 5686211,378560.6875 5686210.5,378561.46875 5686210.5,378561.5 5686210,378561.6875 5686208,378563.84375 5686206,378564.90625 5686203,378566 5686200,378566.5 5686199,378567 5686198,378567.46875 5686197,378567.5625 5686196.5,378567.59375 5686196,378567.65625 5686195,378568.0625 5686195,378569.0625 5686193,378570.03125 5686191,378570.9375 5686190,378571.40625 5686189,378571.875 5686188.5,378572.3125 5686188,378572.8125 5686187,378573.6875 5686186,378575.40625 5686184.5,378577.0625 5686183.5,378578.375 5686182.5,378578.875 5686181.5,378579.6875 5686181,378579.78125 5686180.5,378580.25 5686179.5,378580.375 5686178,378581.21875 5686178,378582.53125 5686176.5,378583.4375 5686175,378583.90625 5686174.5,378584.8125 5686173.5,378585.28125 5686172.5,378585.34375 5686172,378586.3125 5686170,378587.21875 5686169,378588.0625 5686168,378588.59375 5686167,378589.03125 5686166,378589.5 5686165.5,378590.40625 5686164.5,378591.65625 5686163.5,378592.09375 5686163.5,378592.15625 5686162.5,378593 5686162.5,378593.0625 5686161.5,378593.09375 5686161,378593.53125 5686160.5,378593.96875 5686160,378598.0625 5686158,378601.25 5686156.5,378604.40625 5686156.5,378609.15625 5686154,378615.125 5686151.5,378618.28125 5686151.5,378622.65625 5686149.5,378625.84375 5686146,378628.21875 5686143.5,378628.25 5686140,378628.25 5686139.5,378629.46875 5686136,378630.3125 5686132,378631.90625 5686129,378635.53125 5686123.5,378640.65625 5686123,378645 5686122.5,378649.5 5686122,378649.5625 5686122,378650.40625 5686121.5,378651.3125 5686120,378651.84375 5686119,378651.875 5686118.5,378652.6875 5686118,378653.1875 5686117,378654.84375 5686116.5,378655.75 5686115.5,378656.25 5686114,378657.09375 5686113.5,378657.5625 5686113,378658.4375 5686112,378658.90625 5686111.5,378659.8125 5686110,378659.84375 5686110,378660.8125 5686108,378661.65625 5686107,378662.1875 5686106,378662.25 5686105.5,378663.0625 5686105,378663.15625 5686104,378663.25 5686103,378664.5625 5686102,378665.4375 5686101,378665.53125 5686100,378665.59375 5686099.5,378666.0625 5686098.5,378666.65625 5686096.5,378666.71875 5686096,378666.78125 5686095,378666.84375 5686094.5,378666.90625 5686094,378667.15625 5686091,378667.28125 5686090,378667.34375 5686089,378667.40625 5686088.5,378667.46875 5686088,378667.65625 5686086,378666.59375 5686084.5,378665.96875 5686083,378665.28125 5686082,378664.96875 5686081,378665.03125 5686080,378663.875 5686080,378662.59375 5686076.5,378660.5 5686073.5,378659.78125 5686073,378659.46875 5686072,378659.0625 5686072,378659.15625 5686071,378658.375 5686071,378658.4375 5686070.5,378656.9375 5686069.5,378656.21875 5686068.5,378654.84375 5686066.5,378654.1875 5686065,378653.90625 5686064,378653.53125 5686063.5,378653.5625 5686063,378652.90625 5686062,378652.96875 5686061,378652.34375 5686059.5,378651.625 5686058.5,378651.375 5686057,378651.53125 5686055.5,378651.5625 5686055,378651.625 5686054.5,378651.71875 5686053.5,378651.75 5686053,378651.84375 5686052,378651.90625 5686051.5,378651.9375 5686051,378652.84375 5686050,378652.9375 5686049,378653 5686048.5,378653.03125 5686048,378653.4375 5686048,378654.375 5686046.5,378654.84375 5686045.5,378654.875 5686045.5,378654.90625 5686045,378655.3125 5686045,378656.1875 5686044,378657.0625 5686043,378657.4375 5686043,378657.84375 5686043.5,378658.625 5686043.5,378659.40625 5686043.5,378660.625 5686043,378661.03125 5686043,378662.1875 5686043.5,378662.59375 5686043.5,378663.78125 5686043.5,378664.15625 5686043.5,378665.34375 5686043.5,378666.125 5686043.5,378666.90625 5686044,378668.09375 5686044,378668.875 5686044,378669.65625 5686044,378670.4375 5686044,378671.21875 5686044,378672.40625 5686044.5,378673.1875 5686044.5,378674.4375 5686043.5,378675.25 5686044,378676.8125 5686044,378677.1875 5686044,378678 5686044,378679.15625 5686044,378679.5625 5686044.5,378680.78125 5686044,378681.5625 5686044,378681.9375 5686044,378682.75 5686044,378683.90625 5686044.5,378686.34375 5686044,378687.90625 5686044,378688.75 5686043.5,378689.53125 5686043.5,378690.84375 5686042,378691.71875 5686041.5,378692.15625 5686041,378693.40625 5686040.5,378693.78125 5686040.5,378695.03125 5686040,378695.90625 5686039,378696.84375 5686037.5,378697.28125 5686037.5,378698.1875 5686036,378699.0625 5686035,378699.96875 5686034,378700.03125 5686033,378700.9375 5686032,378701.40625 5686031.5,378701.90625 5686030,378702.03125 5686029,378702.875 5686028.5,378703 5686027,378703.125 5686025.5,378704 5686025,378704.53125 5686023.5,378704.65625 5686022,378704.78125 5686021,378704.875 5686020,378705 5686018.5,378705.0625 5686018,378705.1875 5686016.5,378705.21875 5686016.5,378705.375 5686014.5,378704.6875 5686013.5,378703.28125 5686011.5,378702.40625 5686008.5,378701.71875 5686007,378701.84375 5686006,378702.03125 5686004,378702.21875 5686002,378702.28125 5686001.5,378702.3125 5686001,378703.09375 5686001,378703.15625 5686000.5,378703.71875 5685994.5,378704.15625 5685990,378704.21875 5685989,378704.3125 5685988.5,378704.40625 5685987,378705.3125 5685986,378705.5625 5685983.5,378705.6875 5685982,378705.75 5685981.5,378705.8125 5685981,378706.1875 5685981,378706.3125 5685980,378707.5625 5685979,378708.5625 5685977,378709.5 5685975.5,378709.53125 5685975,378709.59375 5685974.5,378709.96875 5685974.5,378710.125 5685973,378712.21875 5685971.5,378713.0625 5685971.5,378713.09375 5685971,378713.21875 5685970,378714.03125 5685969.5,378715.4375 5685967,378716.75 5685966,378717.1875 5685965.5,378717.25 5685964.5,378718.0625 5685964.5,378718.59375 5685963,378720.65625 5685962,378722.03125 5685960.5,378723.28125 5685959.5,378723.75 5685959,378724.21875 5685958,378724.625 5685958,378724.65625 5685958,378725.46875 5685957.5,378726.375 5685956.5,378727.1875 5685956,378728.5625 5685954.5,378730.25 5685953,378731.09375 5685952.5,378731.625 5685951.5,378732.46875 5685950.5,378733.375 5685949.5,378733.8125 5685949,378733.875 5685948.5,378735.09375 5685948,378736 5685947,378736.8125 5685946.5,378738.09375 5685945.5,378739.34375 5685945,378740.1875 5685944.5,378740.59375 5685944.5,378741.46875 5685943.5,378741.875 5685943.5,378743.15625 5685942.5,378744.375 5685942.5,378745.15625 5685942.5,378746 5685941.5,378746.84375 5685941.5,378748.09375 5685940.5,378748.46875 5685941,378749.6875 5685940.5,378750.09375 5685940.5,378751.75 5685940,378752.53125 5685940,378753.8125 5685939,378755.53125 5685939,378758.5 5685935.5,378761.6875 5685932.5,378766.875 5685927.5,378770.46875 5685924,378774.84375 5685920,378778.8125 5685917,378783.21875 5685913,378787.96875 5685909.5,378793.53125 5685906.5,378796.71875 5685904.5,378799.5 5685903.5,378802.65625 5685903,378806.25 5685899.5,378808.09375 5685898,378808.65625 5685896,378809.9375 5685895,378810.4375 5685894,378810.59375 5685892,378811.40625 5685892,378811.5 5685891,378812.4375 5685889.5,378813.28125 5685889,378813.75 5685888,378813.875 5685887,378813.9375 5685886,378814.4375 5685885,378815.40625 5685883,378816.28125 5685882.5,378816.78125 5685881.5,378816.90625 5685880,378816.96875 5685879.5,378817 5685879,378817.125 5685878,378817.96875 5685877,378819.09375 5685873.5,378819.25 5685872,378819.40625 5685870.5,378819.5625 5685869,378819.625 5685868,378819.75 5685867,378819.84375 5685865.5,378819.96875 5685864.5,378820.1875 5685862,378820.3125 5685861,378820.5 5685859,378820.53125 5685858.5,378820.6875 5685857,378820.8125 5685855.5,378820.9375 5685854.5,378821 5685853.5,378821.0625 5685853,378821.46875 5685849,378821.0625 5685845,378821.1875 5685843,378821.3125 5685842,378821.375 5685841.5,378821.46875 5685840.5,378821.5 5685840,378820.78125 5685839,378820.59375 5685837,378820.3125 5685836,378820.375 5685835,378820.5 5685834,378820.21875 5685833,378817.96875 5685831.5,378817.3125 5685825.5,378814.8125 5685822.5,378813.875 5685820,378813.28125 5685818,378812.5625 5685817.5,378812.28125 5685816,378811.9375 5685815.5,378812 5685815,378809.25 5685814.5,378806.71875 5685812,378803.8125 5685809.5,378801.96875 5685808,378801.25 5685807,378800.0625 5685807,378799.75 5685806,378799.375 5685806,378798.625 5685805.5,378797.84375 5685805.5,378794.28125 5685805,378792.71875 5685805,378790.75 5685805,378789.59375 5685804.5,378789.1875 5685804.5,378788.40625 5685804.5,378787.625 5685804.5,378786.84375 5685804.5,378785.65625 5685804.5,378784.09375 5685804,378782.03125 5685804.5,378780.875 5685804.5,378780.09375 5685804.5,378779.28125 5685804.5,378778.90625 5685804.5,378777.6875 5685804.5,378775.34375 5685804.5,378773.65625 5685805.5,378772.4375 5685805.5,378771.21875 5685806,378770.40625 5685806.5,378769.59375 5685806,378768.8125 5685806,378767.65625 5685806,378767.25 5685806,378766.0625 5685806,378765.6875 5685806,378764.53125 5685805.5,378763.75 5685805,378762.6875 5685804,378761.1875 5685803,378760 5685803,378759.28125 5685802.5,378758.09375 5685802.5,378757.3125 5685802,378756.125 5685802,378755.90625 5685802,378754.9375 5685802,378752.1875 5685801.5,378750.625 5685801.5,378749.84375 5685801.5,378748.65625 5685801.5,378747.875 5685801,378746.65625 5685801.5,378745.46875 5685801.5,378745.0625 5685801.5,378744.1875 5685802.5,378743.375 5685803,378742.125 5685803.5,378740.875 5685804,378740 5685805,378739.15625 5685805.5,378738.28125 5685806,378737.8125 5685807,378737.03125 5685807,378737 5685807.5,378736.21875 5685807,378734.8125 5685809.5,378731.875 5685811,378730.625 5685812,378730.53125 5685812.5,378729.375 5685812.5,378727.59375 5685814.5,378723.90625 5685815.5,378723.0625 5685816,378722.625 5685816.5,378721.84375 5685816.5,378721.03125 5685817,378720.59375 5685817,378719.65625 5685818.5,378717.65625 5685819,378716.375 5685820,378715.46875 5685821,378714.65625 5685821.5,378714.59375 5685821.5,378713.75 5685822.5,378713.3125 5685823,378712.375 5685824.5,378711.90625 5685825,378711.84375 5685826,378711.75 5685826.5,378711.6875 5685827.5,378710.8125 5685828,378710.25 5685830,378709.75 5685831,378709.59375 5685832.5,378709.46875 5685834,378709.375 5685835,378708.46875 5685836,378707.96875 5685837.5,378707.875 5685838,378707 5685839,378706.90625 5685840,378705.90625 5685842.5,378705.03125 5685843,378704.5 5685844.5,378704.34375 5685846,378703.53125 5685846.5,378703.46875 5685847,378702.5625 5685848.5,378702.09375 5685849,378700.75 5685850.5,378699.90625 5685851,378699.03125 5685852,378698.1875 5685852.5,378697.3125 5685853.5,378696.84375 5685854,378696 5685855,378695.53125 5685855.5,378694.65625 5685856.5,378694.1875 5685857,378692.90625 5685858,378691.21875 5685859,378690.375 5685860,378689.875 5685861,378689.03125 5685861,378688.59375 5685861.5,378687.75 5685862.5,378686.9375 5685862.5,378686.125 5685862.5,378685.75 5685862.5,378684.84375 5685863.5,378683.625 5685864,378681.9375 5685865,378680.34375 5685865,378679.5625 5685865,378678.78125 5685865,378677.90625 5685865.5,378676.71875 5685865.5,378674.3125 5685866,378672.34375 5685866,378671.15625 5685866,378670.375 5685865.5,378669.125 5685866.5,378668.34375 5685866.5,378667.09375 5685867,378665.90625 5685867,378665.03125 5685867.5,378664.1875 5685868.5,378663.34375 5685868.5,378662.90625 5685869.5,378662.46875 5685869.5,378661.6875 5685869.5,378660.375 5685870.5,378658.78125 5685871,378657.96875 5685871,378657.125 5685871.5,378656.6875 5685872,378655.875 5685872,378654.125 5685874,378652.46875 5685874.5,378651.1875 5685875.5,378650.3125 5685876.5,378649.46875 5685877,378648.625 5685877.5,378648.1875 5685878,378647.75 5685878.5,378646.90625 5685879,378646.4375 5685879.5,378645.59375 5685880.5,378643.9375 5685881,378643.46875 5685881.5,378642.65625 5685882,378641.78125 5685882.5,378640.9375 5685883.5,378639.71875 5685883.5,378638.84375 5685884.5,378638.375 5685885,378637.5625 5685885.5,378636.75 5685886,378636.3125 5685886,378635.46875 5685887,378635.0625 5685887,378633.6875 5685888.5,378632.0625 5685889.5,378630.8125 5685890,378630.28125 5685891,378629.4375 5685892,378629 5685892,378628.5625 5685892.5,378628.5 5685893.5,378627.625 5685894,378627.21875 5685894.5,378626.28125 5685896,378625.03125 5685896.5,378624.5 5685897.5,378624.03125 5685898.5,378623.15625 5685899.5,378622.65625 5685900.5,378622.34375 5685901,378623.25 5685903,378626.75 5685907.5,378629.09375 5685910.5,378631.03125 5685914.5,378633.375 5685918.5,378636.125 5685922.5,378637.65625 5685928,378638.40625 5685931.5,378638.34375 5685938,378636.34375 5685941.5,378634.3125 5685945.5,378628.34375 5685951.5,378627.09375 5685951.5,378627.4375 5685954.5,378629.5625 5685957,378630.5625 5685959,378631.125 5685961.5,378631.4375 5685962.5,378631.375 5685963,378632.125 5685963.5,378632.09375 5685964,378632.40625 5685965,378632.65625 5685966.5,378633.34375 5685967.5,378634.3125 5685970,378634.96875 5685971,378634.9375 5685971.5,378634.875 5685972,378635.53125 5685973.5,378635.90625 5685974,378636.53125 5685975.5,378637.25 5685976.5,378637.15625 5685977,378637.09375 5685978,378637.0625 5685978.5,378638.9375 5685979.5,378639.375 5685983,378640.375 5685985,378640.65625 5685986.5,378640.5 5685988,378640.46875 5685988.5,378641.65625 5685988.5,378642.53125 5685991.5,378643.875 5685994,378644.15625 5685995.5,378644.09375 5685996,378644.46875 5685996,378644.59375 5685999,378644.8125 5686001,378644.75 5686002,378644.65625 5686002.5,378644.5625 5686004,378644.46875 5686004.5,378644.375 5686005.5,378644.25 5686007,378643.65625 5686009,378642.78125 5686010,378640.71875 5686015,378640.25 5686015.5,378639.78125 5686016.5,378638.8125 5686018.5,378637.53125 5686019.5,378637 5686020.5,378636.875 5686022,378636.03125 5686022.5,378636 5686023,378635.875 5686024,378634.28125 5686024,378633.125 5686028,378632.15625 5686030,378632.0625 5686030.5,378631.5625 5686032,378631.53125 5686032.5,378631.09375 5686032.5,378630.25 5686033.5,378629.78125 5686034,378628.40625 5686036,378626.71875 5686037,378625.78125 5686038.5,378624.84375 5686040,378624.8125 5686040.5,378624.78125 5686040.5,378623.90625 5686041.5,378623.4375 5686042,378623.0625 5686042,378622.15625 5686043,378620.90625 5686044,378620 5686045,378618.75 5686045.5,378617.90625 5686046.5,378617 5686047.5,378616.1875 5686048,378615.71875 5686048.5,378614.875 5686049,378614.0625 5686049,378612.8125 5686050,378611.15625 5686050.5,378609.90625 5686051,378609.0625 5686052,378608.1875 5686052.5,378608.15625 5686053,378607.34375 5686053,378606.875 5686054,378605.59375 5686054.5,378604.78125 5686055,378604.40625 5686055,378603.21875 5686055,378601.65625 5686054.5,378599.28125 5686054.5,378598.5 5686054.5,378598.1875 5686053.5,378597.40625 5686053.5,378597 5686053.5,378595.9375 5686052,378594.40625 5686051.5,378593.3125 5686050.5,378592.1875 5686049.5,378591.09375 5686049,378590 5686048,378588.9375 5686046.5,378587.8125 5686045.5,378586.71875 5686045,378586 5686044,378584.90625 5686043,378584.1875 5686042,378583.4375 5686041.5,378582.75 5686041,378582.375 5686040.5,378581.625 5686040,378580.96875 5686038.5,378579.8125 5686038,378579.46875 5686037.5,378579.125 5686037.5,378578.4375 5686036,378577.28125 5686035.5,378576.625 5686034,378575.90625 5686033.5,378575.65625 5686032,378575 5686030.5,378574.40625 5686028.5,378573 5686026.5,378572.46875 5686024,378571.84375 5686022,378571.21875 5686020,378570.625 5686018,378570 5686016.5,378569.3125 5686015,378568.625 5686014,378568.3125 5686013,378567.625 5686012.5,378567.65625 5686012,378566.9375 5686011,378566.96875 5686010.5,378565.875 5686009.5,378565.53125 5686009.5,378564.40625 5686008.5,378563.3125 5686007.5,378562.5625 5686007,378562.21875 5686006.5,378561.5 5686005.5,378560.75 5686005,378559.28125 5686004,378557.78125 5686003,378556.71875 5686001.5,378556.0625 5686000.5,378555 5685999,378554.3125 5685998,378553.21875 5685997,378552.53125 5685995.5,378551.84375 5685995,378551.65625 5685994.5,378551.5 5685994,378551.15625 5685993.5,378551.1875 5685993,378550 5685993,378549.46875 5685990.5,378546.90625 5685988.5,378546.21875 5685987,378545.96875 5685985.5,378545.625 5685985,378545.65625 5685984.5,378544.9375 5685984,378544.59375 5685983.5,378543.96875 5685981.5,378543.59375 5685981,378542.5625 5685979.5,378541.8125 5685979,378541.5 5685978,378541.1875 5685977.5,378540.5625 5685976,378539.0625 5685975,378538.375 5685973.5,378537.3125 5685972.5,378536.59375 5685971.5,378535.875 5685971,378535.15625 5685970,378534.78125 5685969.5,378534.03125 5685969,378532.875 5685969,378531.875 5685967,378530.46875 5685965,378529.75 5685964.5,378529.78125 5685964,378529.375 5685964,378528.6875 5685963,378527.90625 5685963,378525.96875 5685962.5,378524.40625 5685962,378523.625 5685962,378522.8125 5685962,378522.03125 5685962,378521.65625 5685962,378520.46875 5685962,378519.6875 5685961.5,378518.5 5685961.5,378517.71875 5685961.5,378516.53125 5685961.5,378515.75 5685961.5,378514.25 5685960.5,378512.34375 5685960,378511.21875 5685959,378510.53125 5685958,378509.78125 5685957.5,378509.8125 5685957,378508.65625 5685956.5,378508.28125 5685956.5,378507.21875 5685955.5,378506.90625 5685954.5,378506.09375 5685954.5,378506.21875 5685953,378505.46875 5685952.5,378503.71875 5685950,378502.65625 5685949,378502.0625 5685947,378502.21875 5685945.5,378501.53125 5685944,378501.65625 5685943,378501.78125 5685941.5,378501.5 5685940.5,378501.125 5685940,378501.21875 5685939,378500.4375 5685939,378499.40625 5685937.5,378498.34375 5685936,378497.53125 5685936,378497.59375 5685935.5,378496.0625 5685935,378495.21875 5685935,378494.46875 5685935,378493.78125 5685934,378492.96875 5685934,378492.1875 5685934,378491.40625 5685934,378490.21875 5685933.5,378488.65625 5685933.5,378487.46875 5685933.5,378486.3125 5685933.5,378485.15625 5685933,378484.78125 5685933,378484.03125 5685932.5,378483.25 5685932,378482.53125 5685931.5,378481.375 5685931,378479.84375 5685930.5,378478.6875 5685930,378477.9375 5685929.5,378477.53125 5685929.5,378477.21875 5685929,378476.875 5685928.5,378476.21875 5685926.5,378475.125 5685926,378474.4375 5685924.5,378473.78125 5685923.5,378473.40625 5685923,378473.46875 5685922.5,378473.6875 5685920,378473.125 5685917.5,378473.3125 5685915.5,378473.53125 5685913.5,378473.65625 5685912,378473.75 5685911,378473.875 5685910,378473.9375 5685909,378474.0625 5685908,378474.15625 5685906.5,378474.34375 5685904.5,378474.53125 5685902.5,378474.6875 5685901,378474.84375 5685899.5,378475 5685898,378475.15625 5685896.5,378475.25 5685895.5,378474.53125 5685894.5,378473.84375 5685893.5,378473.875 5685893,378473.15625 5685892.5,378472.09375 5685891,378471.4375 5685889.5,378470.75 5685888.5,378470.875 5685887.5,378469.75 5685886.5,378469.46875 5685885,378468.84375 5685883.5,378467.8125 5685882,378467.1875 5685880,378466.5 5685879,378466.65625 5685877.5,378465.9375 5685876.5,378466.03125 5685875.5,378465.28125 5685875,378465.3125 5685875,378464.53125 5685874.5,378463.84375 5685873.5,378461.96875 5685872.5,378461.21875 5685872,378461 5685872,378460.46875 5685871.5,378459.6875 5685871.5,378458.53125 5685871,378457.4375 5685870,378454.6875 5685869.5,378453.1875 5685869,378451.6875 5685868,378450.53125 5685867.5,378449.71875 5685867.5,378448.625 5685866.5,378448.28125 5685866.5,378447.09375 5685866,378446.3125 5685866,378445.125 5685866,378444.75 5685866,378443.5625 5685866,378442.78125 5685865.5,378442 5685865.5,378441.59375 5685865.5,378440.40625 5685865.5,378439.625 5685865.5,378438.46875 5685865.5,378438.25 5685865.5,378437.28125 5685865,378435.25 5685866,378432.4375 5685866,378430.875 5685865.5,378429.28125 5685866,378428.09375 5685866,378426.84375 5685866.5,378425.28125 5685866.5,378424.09375 5685866,378422.84375 5685867,378422 5685867,378421.21875 5685867,378420.84375 5685867,378419.96875 5685868,378419.125 5685868.5,378417.46875 5685869,378415.46875 5685869.5,378414.21875 5685870,378413.71875 5685871,378412.875 5685871.5,378412.46875 5685872,378411.5625 5685873,378410.125 5685873,378410.09375 5685873.5,378408.8125 5685882.5,378405.96875 5685892.5,378403.53125 5685899.5,378401.53125 5685904,378399.28125 5685908,378399.46875 5685908,378399.875 5685912.5,378400.34375 5685916,378400.15625 5685918,378399.96875 5685920,378399.875 5685920.5,378399.8125 5685921.5,378399.75 5685922,378399.625 5685923.5,378399.5 5685924.5,378398.0625 5685927,378397.0625 5685929.5,378395.625 5685932,378395.15625 5685933,378395.03125 5685934,378394.90625 5685935.5,378390.84375 5685936.5,378389.15625 5685937.5,378387.90625 5685938,378387.09375 5685938.5,378386.21875 5685939,378385.8125 5685939.5,378384.96875 5685940,378384.15625 5685940,378382.9375 5685940.5,378381.25 5685941.5,378378.875 5685941.5,378377.25 5685942,378376 5685942.5,378374.78125 5685942.5,378373.53125 5685943.5,378371.9375 5685943.5,378371.09375 5685944,378369.9375 5685944,378369.53125 5685944,378368.71875 5685944,378367.9375 5685944,378366.34375 5685944,378365.5625 5685944,378364.3125 5685944.5,378363.125 5685944.5,378362.75 5685944.5,378361.875 5685945,378361.09375 5685945,378359.90625 5685945,378359.125 5685944.5,378357.84375 5685946,378357.0625 5685945.5,378355.40625 5685946.5,378353.84375 5685946,378352.96875 5685947,378352.15625 5685947,378351.34375 5685947.5,378350.90625 5685948,378349.625 5685949,378348 5685949,378346.75 5685950,378345.5 5685950.5,378344.28125 5685950.5,378343.0625 5685951,378341.84375 5685951.5,378341.03125 5685951.5,378340.25 5685951.5,378339.84375 5685951.5,378339.1875 5685950,378339.28125 5685949,378339.3125 5685948.5,378338.6875 5685947,378338.71875 5685946.5,378338.0625 5685945.5,378337.5 5685943,378337.59375 5685941.5,378337.71875 5685940.5,378337.78125 5685940,378337.84375 5685939.5,378337.5625 5685938,378337.28125 5685937,378336.09375 5685937,378335.3125 5685936.5,378334.15625 5685936,378333.375 5685936,378333 5685936,378331.8125 5685936,378331.40625 5685936,378329.84375 5685936,378329.0625 5685935.5,378328.28125 5685935.5,378327.5 5685935.5,378326.3125 5685935.5,378325.53125 5685935.5,378323.96875 5685935,378323.15625 5685935,378321.59375 5685935,378320.03125 5685935,378319.25 5685934.5,378318.0625 5685934.5,378316.84375 5685935,378316.03125 5685935,378315.15625 5685936,378313.9375 5685936,378313.15625 5685936,378312.375 5685936,378311.53125 5685936.5,378311.0625 5685937.5,378309.75 5685938.5,378308.9375 5685939,378308.4375 5685940,378307.9375 5685941,378307.46875 5685942,378306.5625 5685943,378306.09375 5685943.5,378306.03125 5685944.5,378305.53125 5685945.5,378305.09375 5685946,378304.1875 5685947,378303.375 5685947.5,378302.5 5685948,378302.03125 5685949,378301.5625 5685949.5,378301.53125 5685950,378301.46875 5685951,378300.65625 5685950.5,378300.3125 5685950.5,378299.53125 5685950,378299.125 5685950,378299.09375 5685950.5,378298.28125 5685951,378297.5 5685951,378296.59375 5685952,378294.53125 5685953,378293.6875 5685953,378293.28125 5685953.5,378292.875 5685953.5,378292.8125 5685954.5,378291.59375 5685954.5,378291.1875 5685954.5,378291.125 5685955.5,378289.53125 5685955,378288.59375 5685956.5,378287.34375 5685957.5,378286.5 5685958,378285.625 5685958.5,378285.21875 5685959,378284.75 5685960,378283.90625 5685960,378283.125 5685960,378282.21875 5685961,378280.59375 5685962,378279.34375 5685962.5,378278.46875 5685963,378277.625 5685964,378277.1875 5685964,378276.3125 5685965,378275.9375 5685965,378274.6875 5685965.5,378274.28125 5685965.5,378273.03125 5685966,378272.625 5685966,378271 5685967,378270.59375 5685966.5,378269.3125 5685968,378268.5 5685968,378267.21875 5685969,378265.96875 5685969.5,378265.1875 5685969.5,378264.40625 5685969.5,378263.15625 5685970,378262.375 5685970,378260.8125 5685969.5,378260 5685969.5,378259.15625 5685970.5,378258.375 5685970.5,378257.59375 5685970,378256.375 5685970.5,378255.1875 5685970.5,378253.21875 5685970,378251.65625 5685970,378250.875 5685970,378250.46875 5685970,378249.6875 5685970,378248.90625 5685969.5,378247.71875 5685969.5,378246.90625 5685970,378245.25 5685970.5,378244.46875 5685970.5,378243.6875 5685970.5,378243.28125 5685970.5,378242.03125 5685971,378241.21875 5685971.5,378239.5625 5685972,378239.15625 5685972.5,378238.75 5685972.5,378237.84375 5685973.5,378237.03125 5685973.5,378235.78125 5685974.5,378235.28125 5685975.5,378235.1875 5685976.5,378235.15625 5685976.5,378234.8125 5685980,378233.375 5685983,378233.3125 5685983.5,378233.28125 5685984,378233.1875 5685985,378233.15625 5685985,378233.03125 5685986.5,378232.5625 5685987,378231.53125 5685990,378231.375 5685991.5,378231.21875 5685993,378231.09375 5685994.5,378231.03125 5685995,378231 5685995.5,378230.90625 5685996.5,378230.8125 5685997.5,378230.71875 5685998.5,378230.625 5685999.5,378230.46875 5686001,378230.4375 5686001,378230.28125 5686003,378230.1875 5686004,378230.0625 5686005,378230 5686006,378229.34375 5686008.5,378228.40625 5686010,378228.25 5686011.5,378228.15625 5686013,378227.6875 5686013.5,378227.59375 5686014.5,378227.21875 5686014.5,378226.40625 5686014.5,378225.8125 5686016.5,378225.625 5686018.5,378224.84375 5686018.5,378223.90625 5686020,378222.5625 5686021.5,378222.1875 5686021.5,378220.96875 5686021.5,378220.0625 5686023,378219.25 5686023,378218.78125 5686024,378218.34375 5686024,378217.5625 5686024,378216.78125 5686024,378215.96875 5686024,378215.1875 5686024,378214.03125 5686024,378213.25 5686023.5,378212.0625 5686023.5,378212.125 5686023,378211.34375 5686022.5,378211.03125 5686022,378210.3125 5686021,378210.40625 5686020.5,378209.65625 5686020,378209.71875 5686019,378209.375 5686018.5,378209.09375 5686017.5,378209.125 5686017,378208.03125 5686016,378208.0625 5686015.5,378208.15625 5686014.5,378205.9375 5686013,378204.96875 5686010.5,378203.90625 5686009.5,378203.59375 5686008.5,378203.65625 5686007.5,378202.875 5686007.5,378201.6875 5686007.5,378200.53125 5686007.5,378199.71875 5686007.5,378198.9375 5686007,378197.78125 5686007,378196.59375 5686007,378195.03125 5686007,378193.84375 5686006.5,378193.0625 5686006.5,378192.96875 5686007.5,378191.8125 5686007,378191.40625 5686007,378190.625 5686007,378190.5625 5686008,378189.34375 5686008,378188.40625 5686009.5,378187.5 5686011,378187.4375 5686011.5,378186.59375 5686012,378186.125 5686012.5,378184.84375 5686013.5,378184.375 5686014.5,378183.46875 5686015.5,378183 5686016.5,378182.59375 5686016.5,378182.53125 5686017,378181.28125 5686017.5,378180.8125 5686018.5,378180.71875 5686019.5,378179.46875 5686020.5,378179.03125 5686020.5,378179 5686021,378178.96875 5686021.5,378178.5625 5686021.5,378177.6875 5686022,378176.375 5686023.5,378175.9375 5686024,378175.09375 5686024.5,378173.78125 5686025.5,378173.375 5686026,378172.5 5686027,378171.59375 5686028,378170.34375 5686028.5,378169.0625 5686029.5,378167.40625 5686030,378165.78125 5686031,378164.875 5686032,378163.65625 5686032,378162.84375 5686032.5,378162.4375 5686032.5,378162.5 5686031.5,378162.5625 5686031.5,378162.59375 5686030.5,378152.25 5686035.5,378151.90625 5686039,378153.625 5686042,378154.40625 5686042,378154.3125 5686043,378154.03125 5686046,378158.40625 5686046,378163.125 5686048,378164.6875 5686052,378166.59375 5686059.5,378167.71875 5686064.5,378168.09375 5686067.5,378169.625 5686072.5,378174.53125 5686078,378175.5625 5686078,378176.75 5686078,378177.53125 5686078,378178.3125 5686078,378179.09375 5686078.5,378179.875 5686078.5,378181.46875 5686078.5,378182.25 5686078.5,378183.40625 5686078.5,378184.21875 5686079,378185.78125 5686079,378186.5625 5686079,378186.96875 5686079,378188.0625 5686080,378188.84375 5686080,378190.34375 5686081,378191.90625 5686081,378192.6875 5686081,378193.46875 5686081.5,378194.53125 5686082.5,378195.6875 5686083,378197.5625 5686084,378199.0625 5686085,378200.21875 5686085.5,378200.96875 5686086,378202.09375 5686086.5,378203.25 5686087,378204 5686087.5,378205.125 5686088,378206.28125 5686088.5,378207.375 5686089.5,378208.5 5686090,378209.25 5686090.5,378210.40625 5686091,378211.53125 5686091.5,378212.34375 5686091.5,378213.125 5686091.5,378214.21875 5686092.5,378215 5686092.5,378216.1875 5686093,378216.9375 5686093,378218.375 5686094.5,378220.3125 5686095,378221.375 5686096.5,378222.5 5686097.5,378223.9375 5686098.5,378225.03125 5686099.5,378226.15625 5686100.5,378227.25 5686101.5,378228.34375 5686102.5,378229.0625 5686103,378229.78125 5686104,378230.53125 5686104.5,378231.15625 5686106,378232.65625 5686107,378233.375 5686108,378234.09375 5686109,378234.78125 5686109.5,378235.5 5686110.5,378235.78125 5686112,378236.5 5686112.5,378237.1875 5686113.5,378237.125 5686114.5,378237.875 5686115,378238.5625 5686116,378239.28125 5686116.5,378240.3125 5686118,378241.375 5686119.5,378242.5 5686120.5,378243.15625 5686121.5,378243.90625 5686122,378244.28125 5686122.5,378245.34375 5686124,378245.6875 5686124.5,378246.84375 5686125,378247.625 5686125,378248 5686125,378248.71875 5686126,378249.46875 5686126.5,378250.9375 5686127.5,378252.4375 5686128.5,378253.46875 5686129.5,378253.53125 5686129.5,378254.25 5686130.5,378255.375 5686131,378256.125 5686131.5,378257.3125 5686131.5,378258 5686132.5,378259.125 5686133.5,378261.03125 5686134,378261.78125 5686134.5,378262.53125 5686135,378263.3125 5686135,378264.125 5686135,378264.8125 5686136,378267.125 5686136.5,378268.3125 5686136.5,378269.0625 5686137,378269.84375 5686137,378270.25 5686137,378271.03125 5686137,378271.875 5686136.5,378272.3125 5686136,378273.5625 5686135.5,378274.40625 5686135,378275.6875 5686134,378276.9375 5686133.5,378278.1875 5686133,378278.65625 5686132,378279.53125 5686131.5,378280 5686130.5,378280.9375 5686129,378282.1875 5686128.5,378282.71875 5686127,378282.875 5686125.5,378283.71875 5686124.5,378283.78125 5686124,378283.90625 5686122.5,378284.0625 5686121,378284.5625 5686116,378283.21875 5686113.5,378283.03125 5686111,378283.21875 5686109,378283.34375 5686108,378283.03125 5686107,378282.34375 5686106,378282.46875 5686104.5,378281.78125 5686103.5,378281.46875 5686102.5,378281.21875 5686101,378280.96875 5686099.5,378280.6875 5686098,378280.84375 5686096.5,378280.1875 5686095.5,378280.28125 5686094,378280.34375 5686093.5,378280.375 5686093.5,378280.625 5686090.5,378279.6875 5686088,378279.5 5686085.5,378279.71875 5686083.5,378279.84375 5686082,378279.96875 5686081,378280.03125 5686080,378279.3125 5686079.5,378278.9375 5686079,378278.71875 5686077,378276.53125 5686075.5,378276.03125 5686075,378272.375 5686073.5,378267.28125 5686070,378262.5625 5686067,378258.25 5686062.5,378255.53125 5686058,378255.5625 5686054.5,378256.78125 5686050.5,378260 5686041.5,378260.84375 5686037.5,378263.25 5686032,378265.28125 5686027.5,378267.6875 5686021.5,378270.53125 5686014.5,378273.34375 5686008.5,378277.75 5686000.5,378282.40625 5685992.5,378282.96875 5685992,378285.3125 5685987.5,378286.03125 5685988,378287.28125 5685987,378288.875 5685987.5,378289.71875 5685986.5,378290.96875 5685986,378292.1875 5685985.5,378292.625 5685985.5,378293.40625 5685985.5,378294.28125 5685984.5,378294.6875 5685984.5,378295.5 5685984.5,378295.875 5685984.5,378296.75 5685983.5,378297.15625 5685983.5,378298 5685983,378298.84375 5685982.5,378299.25 5685982.5,378300.15625 5685981,378300.53125 5685981.5,378301.78125 5685980.5,378302.5625 5685980.5,378303 5685980.5,378304.25 5685979.5,378304.6875 5685979.5,378305.90625 5685979,378307.15625 5685978.5,378307.5625 5685978.5,378308.8125 5685978,378310.375 5685978,378311.625 5685977,378312.0625 5685977,378312.4375 5685977,378313.25 5685977,378314.5 5685976.5,378314.875 5685976.5,378316.09375 5685976,378316.875 5685976,378317.75 5685975.5,378318.53125 5685975.5,378319.3125 5685975.5,378320.96875 5685975,378322.1875 5685974.5,378322.5625 5685975,378323.4375 5685974,378324.21875 5685974,378324.59375 5685974,378325.46875 5685973.5,378326.6875 5685973,378327.0625 5685973,378327.9375 5685972.5,378328.75 5685972,378330.8125 5685971.5,378331.96875 5685972,378333.15625 5685972,378333.59375 5685971.5,378333.96875 5685971.5,378334.75 5685971.5,378335.9375 5685972,378336.34375 5685972,378337.9375 5685971.5,378338.71875 5685971.5,378339.5 5685971.5,378340.28125 5685971.5,378340.78125 5685971,378342.375 5685971,378342.78125 5685971,378343.9375 5685971,378344.34375 5685971,378345.59375 5685970.5,378346.375 5685970.5,378347.15625 5685970.5,378347.9375 5685970.5,378349.15625 5685970.5,378349.9375 5685970.5,378351.1875 5685969.5,378352 5685970,378353.28125 5685968.5,378354.5 5685968.5,378355.28125 5685968.5,378355.65625 5685968.5,378356.53125 5685968,378356.96875 5685967.5,378357.75 5685967.5,378358.125 5685967.5,378358.96875 5685967.5,378359.75 5685967.5,378361.03125 5685966.5,378361.875 5685966,378362.65625 5685966,378363.46875 5685966,378363.875 5685966,378365.125 5685965,378365.90625 5685965.5,378367.59375 5685964,378369.1875 5685964,378370.40625 5685963.5,378371.21875 5685963.5,378372.03125 5685963.5,378373.21875 5685963,378374.03125 5685963.5,378374.125 5685962,378375.3125 5685962,378376.53125 5685962,378377.6875 5685962,378378.59375 5685961,378379 5685961,378380.625 5685960.5,378381.4375 5685960.5,378382.75 5685959,378384 5685958.5,378384.40625 5685958.5,378385.25 5685957.5,378386.09375 5685957.5,378386.90625 5685957,378388.09375 5685957,378389.75 5685956,378391.03125 5685955.5,378391.8125 5685955.5,378392.1875 5685955.5,378393.03125 5685955.5,378393.40625 5685955.5,378394.1875 5685955.5,378394.96875 5685955.5,378396.625 5685955,378397.40625 5685955,378398.625 5685954.5,378399.8125 5685955,378401.5 5685954,378402.34375 5685953,378402.75 5685953,378403.59375 5685952.5,378405.65625 5685952,378406.90625 5685951,378408.125 5685951,378408.90625 5685951,378409.28125 5685951,378410.53125 5685950.5,378410.96875 5685950,378412.625 5685949.5,378413.40625 5685949.5,378413.84375 5685949,378414.71875 5685948,378415.15625 5685947.5,378416.40625 5685947,378417.28125 5685946,378418.53125 5685945.5,378419.4375 5685944.5,378420.25 5685944,378421.125 5685943.5,378421.53125 5685943,378422.84375 5685942,378424.03125 5685941.5,378425.3125 5685941,378425.78125 5685940.5,378426.1875 5685940,378427.03125 5685939.5,378427.96875 5685938,378429.59375 5685937.5,378430.4375 5685937,378430.46875 5685937,378430.53125 5685936,378432.15625 5685936,378432.96875 5685935.5,378433.375 5685935.5,378434.6875 5685934,378436.3125 5685934,378437.125 5685933.5,378437.9375 5685933,378437.96875 5685933,378438.75 5685933,378439.5625 5685933,378441.5 5685933,378442.59375 5685934.5,378443.375 5685934.5,378443.71875 5685935,378443.5625 5685936.5,378445.8125 5685938,378447.125 5685941,378448.53125 5685942.5,378449.28125 5685943,378449.21875 5685944,378449.15625 5685944.5,378449.84375 5685945.5,378451.625 5685947.5,378453.125 5685948.5,378453.84375 5685949.5,378454.5625 5685950.5,378454.90625 5685951,378455.25 5685951,378455.96875 5685952,378456.71875 5685952.5,378457.375 5685954,378458.125 5685954.5,378458.5 5685954.5,378459.625 5685955.5,378460 5685955.5,378460.375 5685955.5,378460.3125 5685956.5,378461.0625 5685957,378461.84375 5685957,378462.46875 5685958.5,378463.625 5685959,378464 5685959.5,378463.9375 5685960,378465.8125 5685961,378466.5 5685962.5,378467.96875 5685963.5,378469.09375 5685964,378469.03125 5685965,378468.90625 5685966,378470.8125 5685967,378471.4375 5685969,378472.15625 5685969.5,378472.46875 5685970.5,378472.4375 5685971,378472.34375 5685971.5,378473.4375 5685972.5,378474.09375 5685974,378474.75 5685975.5,378475.125 5685976,378475.4375 5685976.5,378475.78125 5685977,378476.96875 5685977.5,378478.53125 5685977.5,378479.71875 5685977.5,378480.46875 5685978,378481.25 5685978,378482.40625 5685978.5,378484.34375 5685979,378485.15625 5685979,378486.71875 5685979,378487.4375 5685980,378487.375 5685980.5,378488.5625 5685980.5,378489.25 5685981.5,378490.3125 5685983,378490.96875 5685984.5,378490.8125 5685986,378490.75 5685986.5,378490.71875 5685987,378491.09375 5685987,378491.34375 5685988.5,378491.25 5685990,378491.15625 5685990.5,378491.09375 5685991.5,378491.46875 5685991.5,378492.0625 5685993.5,378493.5 5685995,378494.125 5685997,378494.71875 5685999,378495.4375 5686000,378495.71875 5686001,378496.4375 5686002,378496.34375 5686002.5,378497.0625 5686003.5,378498.125 5686005,378498.8125 5686006,378499.53125 5686007,378499.5625 5686007,378500.1875 5686008,378500.90625 5686009,378501.25 5686009.5,378501.1875 5686010.5,378501.5625 5686010.5,378501.78125 5686012.5,378502.8125 5686014,378503.40625 5686016,378503.25 5686017.5,378503.21875 5686018,378503.1875 5686018.5,378502.96875 5686021,378503.9375 5686023,378504.5625 5686025,378505.1875 5686026.5,378505.46875 5686028,378505.375 5686028.5,378506.1875 5686028.5,378506.625 5686032.5,378507.53125 5686035,378507.75 5686037,378507.5625 5686039,378507.53125 5686039.5,378507.84375 5686040.5,378508.1875 5686041,378508.15625 5686041,378509.34375 5686041.5,378510.75 5686043,378512.21875 5686044.5,378512.96875 5686045,378513.28125 5686045.5,378513.6875 5686046,378514.40625 5686046,378514.8125 5686046.5,378515.5625 5686046.5,378516.6875 5686047.5,378517.5 5686047.5,378519.4375 5686047.5,378520.25 5686047.5,378520.625 5686047.5,378521.8125 5686048,378522.5625 5686048.5,378523.71875 5686048.5,378524.53125 5686048.5,378525.65625 5686049,378527.21875 5686049,378527.625 5686049,378528.75 5686049.5,378530.25 5686050.5,378532.21875 5686051,378533.375 5686051.5,378534.15625 5686051.5,378534.9375 5686051.5,378534.875 5686052.5,378536.03125 5686052.5,378537.1875 5686053,378539.09375 5686053.5,378539.78125 5686055,378540.875 5686055.5,378541.625 5686056,378542 5686056.5,378542.78125 5686056.5,378543.5625 5686056.5,378544.34375 5686057,378545.4375 5686057.5,378546.1875 5686058,378546.59375 5686058,378547.375 5686058.5,378548.15625 5686058.5,378549.34375 5686058.5,378550.125 5686058.5,378550.90625 5686058.5,378552.09375 5686059,378552.46875 5686059,378552.875 5686059,378553.25 5686059,378554.125 5686058,378554.9375 5686058,378555.34375 5686058,378556.125 5686058,378556.96875 5686057.5,378558.59375 5686057,378559 5686057,378559.78125 5686057,378560.5625 5686057.5,378561.40625 5686056.5,378561.8125 5686056.5,378562.59375 5686056.5,378563.375 5686057,378564.15625 5686057,378564.5625 5686057,378564.9375 5686057,378566.125 5686057,378566.90625 5686057,378567.3125 5686057,378568.09375 5686057,378568.8125 5686058,378569.96875 5686058,378569.84375 5686060,378570.5 5686061,378570.75 5686062.5,378570.59375 5686064,378570.4375 5686066,378571.15625 5686066.5,378571.40625 5686068.5,378571.25 5686070,378571.1875 5686070.5,378571.09375 5686071.5,378570.75 5686075,378570.53125 5686077.5,378570.34375 5686079.5,378570.21875 5686081,378570.125 5686081.5,378570.03125 5686083,378569.6875 5686086.5,378568.59375 5686089.5,378568.4375 5686091,378568.34375 5686092,378568.25 5686093,378568.21875 5686093.5,378568.15625 5686094,378567.96875 5686096,378566.59375 5686098,378566 5686100,378565.0625 5686101.5,378564.5625 5686102.5,378564.0625 5686103.5,378563.15625 5686105,378562.65625 5686106,378561.71875 5686107.5,378560.84375 5686108.5,378560.28125 5686110,378559.40625 5686111,378558.84375 5686112.5,378558.3125 5686114.5,378557.40625 5686115.5,378556.90625 5686116.5,378556.40625 5686117.5,378555.90625 5686119,378555.375 5686120,378555.3125 5686120.5,378554.46875 5686121.5,378554.375 5686122,378553.40625 5686124,378552.53125 5686125,378551.65625 5686126,378551.5 5686127.5,378551.03125 5686128,378550.96875 5686129,378550.84375 5686130,378550.8125 5686130.5,378550.03125 5686130.5,378549.78125 5686133,378548.40625 5686135,378547.8125 5686137,378547.625 5686139,378547.5 5686140,378547 5686141.5,378546.125 5686142.5,378546.0625 5686143,378545.6875 5686143,378545.03125 5686145.5,378544.0625 5686147.5,378543.875 5686149.5,378543.28125 5686151.5,378543.1875 5686152.5,378543.03125 5686154,378542.09375 5686155.5,378541.9375 5686157,378541.875 5686158,378541.75 5686159,378541.625 5686160.5,378541.59375 5686160.5,378541.40625 5686162.5,378540.46875 5686164,378540.375 5686165.5,378540.25 5686166.5,378539.90625 5686170,378538.875 5686172.5,378538.78125 5686173.5,378538.75 5686174,378538.5625 5686176,378537.28125 5686177,378536.78125 5686178,378536.6875 5686179,378536.5 5686181,378534.75 5686182.5,378533.84375 5686183.5,378533.75 5686185,378533.71875 5686185.5,378533.625 5686186,378532.84375 5686186,378531.84375 5686188.5,378530.4375 5686190.5,378530.34375 5686191.5,378530.28125 5686192,378529.8125 5686193,378529.75 5686193.5,378528.84375 5686194.5,378528.78125 5686195.5,378527.90625 5686196,378527.875 5686196.5,378527 5686197.5,378525.78125 5686197.5,378524.90625 5686198.5,378524.03125 5686199.5,378523.1875 5686200,378522.75 5686200.5,378522.28125 5686201,378522.25 5686201.5,378521.46875 5686201.5,378520.5625 5686202.5,378519.3125 5686203.5,378518.53125 5686203,378518.125 5686203,378516.84375 5686204,378515.15625 5686205.5,378514.28125 5686206,378513.46875 5686206.5,378513.0625 5686206,378512.625 5686207,378511.8125 5686207,378511.03125 5686207,378509.875 5686206.5,378509.46875 5686206.5,378508.6875 5686206.5,378507.90625 5686206.5,378506.71875 5686206.5,378505.9375 5686206.5,378504.375 5686206,378503.5625 5686206,378502.40625 5686206,378501.625 5686206,378500.03125 5686205.5,378499.65625 5686205.5,378498.46875 5686205.5,378497.6875 5686205.5,378496.90625 5686205.5,378495.71875 5686205.5,378495.34375 5686205,378494.15625 5686205,378493.375 5686205,378491.40625 5686205,378490.625 5686205,378489.84375 5686204.5,378489.4375 5686204.5,378488.65625 5686204.5,378487.875 5686204.5,378487.78125 5686205.5,378487.75 5686205.5,378486.46875 5686206.5,378486.4375 5686207,378486.15625 5686210,378487.1875 5686211.5,378487.40625 5686213.5,378487.59375 5686215.5,378487.5625 5686216,378487.5 5686217,378487.8125 5686217.5,378488.15625 5686218,378488.84375 5686219.5,378488.75 5686220,378489.46875 5686221,378489.4375 5686221.5,378489.28125 5686223,378489.1875 5686224,378489.09375 5686225,378489.0625 5686225.5,378489 5686226,378488.9375 5686226.5,378488.84375 5686227.5,378488.75 5686228.5,378487.90625 5686229,378487.875 5686229.5,378487.46875 5686229.5,378486.625 5686230,378484.625 5686230.5,378483.75 5686231,378482.53125 5686231.5,378481.75 5686231.5,378480.875 5686232,378480.5 5686232,378480.09375 5686232,378479.21875 5686233,378478.375 5686233.5,378476.75 5686234,378475.125 5686234,378473.875 5686235,378473.0625 5686235,378472.28125 5686235,378471.875 5686235,378471 5686236,378470.21875 5686235.5,378468.59375 5686236.5,378467 5686236,378465.78125 5686236.5,378465 5686236.5,378464.1875 5686236.5,378463.40625 5686236.5,378462.21875 5686236.5,378461.4375 5686236.5,378459.875 5686236,378457.90625 5686236,378457.125 5686236,378455.9375 5686236,378454.6875 5686236.5,378453.875 5686237,378452.6875 5686236.5,378451.90625 5686236.5,378450.71875 5686236.5,378449.9375 5686236.5,378448.75 5686236.5,378447.59375 5686236,378445.53125 5686237,378443.9375 5686237,378442.375 5686237,378441.5625 5686237,378440.78125 5686236.5,378440.40625 5686236.5,378439.625 5686236.5,378439.21875 5686236.5,378438.03125 5686236.5,378437.65625 5686236.5,378436.59375 5686235,378436.21875 5686234.5,378435.0625 5686234.5,378434.65625 5686234.5,378433.46875 5686234.5,378433.09375 5686234.5,378432 5686233.5,378431.59375 5686233.5,378430.5 5686232.5,378429.3125 5686232.5,378429 5686231.5,378428.59375 5686231.5,378427.9375 5686230,378427.1875 5686229.5,378425.65625 5686229,378424.59375 5686228,378423.84375 5686227.5,378423.875 5686227,378423.5625 5686226,378423.59375 5686226,378422.53125 5686224.5,378421.40625 5686223.5,378421.125 5686222.5,378420.4375 5686221.5,378420.15625 5686220.5,378419.46875 5686219,378418.75 5686218,378418.4375 5686217.5,378418.09375 5686217,378418.125 5686216.5,378416.9375 5686216.5,378415.90625 5686214.5,378414.5 5686213,378414.09375 5686213,378413.3125 5686213,378412.53125 5686213,378410.96875 5686212.5,378410.1875 5686212.5,378408.625 5686212.5,378407.8125 5686212.5,378407.03125 5686212,378405.875 5686212,378404.6875 5686212,378402.71875 5686212,378400.75 5686211.5,378399.5625 5686211.5,378398.78125 5686211.5,378398 5686211.5,378397.21875 5686211,378396.03125 5686211,378395.1875 5686212,378393.09375 5686213,378391.875 5686213,378391 5686214,378390.09375 5686215.5,378389.625 5686216,378389.15625 5686216.5,378388.6875 5686217.5,378388.65625 5686218,378388.59375 5686218.5,378387.28125 5686219.5,378386.8125 5686220.5,378386.34375 5686221,378386.25 5686222.5,378385.34375 5686223.5,378385.28125 5686224.5,378384.40625 5686225,378384.03125 5686225,378382.4375 5686225,378381.65625 5686224.5,378380.875 5686224.5,378380.09375 5686224.5,378378.53125 5686224.5,378376.15625 5686224,378374.96875 5686224,378373.40625 5686224,378372.625 5686224,378371.84375 5686223.5,378370.96875 5686224.5,378370.59375 5686224.5,378369.71875 5686225,378368.5 5686225.5,378366.84375 5686226.5,378365.5625 5686227,378364.71875 5686228,378363.84375 5686228.5,378363.4375 5686229,378363.375 5686229,378362.78125 5686230,378362.5 5686230.5,378361.65625 5686230.5,378360.6875 5686232.5,378359.40625 5686233.5,378358.90625 5686234.5,378358.34375 5686236.5,378357.53125 5686236.5,378357.5 5686237,378357 5686238,378356.96875 5686238.5,378356.875 5686239.5,378356.84375 5686239.5,378356.65625 5686241.5,378355.78125 5686242.5,378355.6875 5686243.5,378355.5625 5686244.5,378355.40625 5686246.5,378354.9375 5686247,378354.5625 5686247,378354.46875 5686248,378354.375 5686249,378353.90625 5686249.5,378352.9375 5686251.5,378352.4375 5686253,378352.34375 5686253.5,378352.28125 5686254.5,378351.875 5686254.5,378350.84375 5686257,378350.25 5686259,378350.15625 5686260,378350.0625 5686261,378349.6875 5686261,378349.0625 5686263,378347.6875 5686265,378347.125 5686267,378346.9375 5686269,378346.46875 5686269.5,378346.40625 5686270,378346.34375 5686271,378346.3125 5686271,378346.28125 5686271.5,378346.09375 5686273.5,378345.96875 5686275,378345.875 5686276,378345.75 5686277,378345.625 5686278.5,378345.5625 5686279,378345.5 5686280,378345.4375 5686280.5,378345.34375 5686281.5,378345.25 5686282,378345.15625 5686283.5,378345.46875 5686284.5,378345.78125 5686285,378345.65625 5686286.5,378346.46875 5686286.5,378347.125 5686287.5,378347.4375 5686288.5,378348.21875 5686288.5,378348.9375 5686289.5,378349.34375 5686289.5,378350.5 5686289.5,378350.90625 5686289.5,378352.0625 5686290,378352.84375 5686290,378354.75 5686291,378355.53125 5686291,378357.5 5686291,378358.28125 5686291,378359.09375 5686291,378359.875 5686291.5,378361.03125 5686291.5,378362.625 5686291.5,378363.40625 5686291.5,378364.1875 5686291.5,378365.25 5686293,378366.03125 5686293,378366.8125 5686293,378367.59375 5686293,378368.75 5686294,378369.53125 5686294,378370.71875 5686294,378371.5 5686294,378371.875 5686294,378373.0625 5686294,378373.84375 5686294.5,378375.03125 5686294.5,378375.4375 5686294.5,378376.65625 5686294,378377.03125 5686294,378378.21875 5686294.5,378378.59375 5686294.5,378379.78125 5686294.5,378380.5625 5686294.5,378381.34375 5686294.5,378382.53125 5686295,378383.28125 5686295,378384.03125 5686295.5,378385.90625 5686296.5,378386.6875 5686297,378387.5 5686297,378388.1875 5686297.5,378388.96875 5686298,378389.375 5686298,378390.0625 5686299,378390.8125 5686299.5,378391.0625 5686301,378391.03125 5686301,378391.625 5686303,378391.53125 5686304.5,378391.40625 5686305.5,378391.34375 5686306.5,378391.25 5686307,378390.40625 5686308,378389.15625 5686308.5,378388.71875 5686309,378387.9375 5686309,378386.75 5686308.5,378386.25 5686310,378384.21875 5686310.5,378383.3125 5686311.5,378382 5686313,378381.125 5686313.5,378380.28125 5686314.5,378379.8125 5686315,378379.71875 5686316,378378.875 5686316.5,378378.4375 5686317,378377.5625 5686317.5,378377.15625 5686318,378376.28125 5686319,378375.8125 5686319.5,378374.5 5686321,378372.8125 5686322,378371.875 5686323.5,378370.9375 5686325,378370.0625 5686325.5,378369.59375 5686326.5,378369.125 5686327,378369.09375 5686327.5,378368.28125 5686328,378367.40625 5686328.5,378366.1875 5686329,378365.40625 5686329,378363.0625 5686328.5,378361.5 5686328.5,378360.3125 5686328.5,378359.875 5686328.5,378359.09375 5686328.5,378358.3125 5686328.5,378357.53125 5686328.5,378356.75 5686328.5,378355.5625 5686328,378355.15625 5686328,378354.375 5686328,378353.59375 5686328,378353.21875 5686328,378352.40625 5686328,378351.625 5686328,378350.46875 5686327.5,378349.65625 5686327.5,378347.71875 5686327.5,378345.75 5686327,378344.875 5686328,378344.03125 5686328.5,378343.25 5686328.5,378342.84375 5686328.5,378341.65625 5686328.5,378340.875 5686328.5,378339.6875 5686328,378338.53125 5686328,378336.5625 5686328,378335 5686327.5,378334.21875 5686327.5,378333.40625 5686327.5,378332.625 5686327.5,378331.84375 5686327.5,378330.65625 5686327.5,378329.875 5686327,378328.28125 5686327.5,378327.5 5686327.5,378325.90625 5686327,378325.53125 5686327,378323.96875 5686327,378323.5625 5686327,378322 5686327,378321.21875 5686326.5,378319.625 5686326.5,378319.25 5686326.5,378318.40625 5686327,378317.625 5686326.5,378316.8125 5686327,378316.03125 5686327,378315.25 5686327,378314.46875 5686327,378312.875 5686326.5,378312.09375 5686326.5,378310.03125 5686327.5,378309.25 5686327.5,378308.4375 5686327.5,378307.625 5686327.5,378307.25 5686327.5,378306.40625 5686328,378304.84375 5686328,378304.0625 5686327.5,378303.65625 5686327.5,378302.375 5686329,378301.59375 5686328.5,378300.8125 5686328.5,378300.03125 5686328.5,378298.75 5686329,378297.15625 5686329.5,378296.375 5686329.5,378295.59375 5686329.5,378294.71875 5686330,378294.28125 5686330.5,378293.5 5686330.5,378292.71875 5686330,378291.53125 5686330,378290.375 5686330,378288.78125 5686330,378288 5686329.5,378287.1875 5686330,378285.96875 5686330.5,378284.40625 5686330,378283.625 5686330,378282.78125 5686330.5,378282.375 5686330.5,378281.96875 5686330.5,378281.5625 5686330.5,378280.71875 5686331.5,378280.3125 5686331.5,378279.5 5686331.5,378278.71875 5686331.5,378277.0625 5686332,378275.84375 5686332.5,378275.0625 5686332.5,378274.25 5686332.5,378274.15625 5686333.5,378273.375 5686333.5,378272.5625 5686333.5,378271 5686333.5,378270.96875 5686333.5,378270.46875 5686335.5,378268.40625 5686344,378266.78125 5686349.5,378264.75 5686356.5,378262.71875 5686362.5,378258.6875 5686369,378256.6875 5686372,378254.625 5686373,378254.53125 5686373,378254.46875 5686374,378254.40625 5686374.5,378253.0625 5686376,378252.1875 5686377,378251.65625 5686378.5,378251.15625 5686379.5,378250.25 5686380.5,378250.1875 5686381.5,378249.3125 5686382,378249.25 5686383,378249.15625 5686384,378249 5686385.5,378246.15625 5686386.5,378244.4375 5686387.5,378242.75 5686388.5,378241.875 5686389.5,378241.84375 5686390,378241.46875 5686390,378240.28125 5686389.5,378239.5 5686389.5,378238.3125 5686389.5,378237.8125 5686390.5,378237.40625 5686390.5,378236.15625 5686391,378235.375 5686391,378233.71875 5686392,378231.375 5686391.5,378230.1875 5686391.5,378229.40625 5686391.5,378228.25 5686391,378227.84375 5686391,378227.0625 5686391,378226.65625 5686391,378225.875 5686391,378225.8125 5686392,378225.40625 5686391.5,378223.75 5686392.5,378223.375 5686392.5,378221.65625 5686393.5,378220 5686394.5,378218.71875 5686395.5,378217.8125 5686396.5,378216.96875 5686397,378216.09375 5686398,378215.25 5686398.5,378215.1875 5686399,378215.0625 5686400.5,378212.1875 5686401.5,378210.8125 5686403.5,378208.75 5686404.5,378208.34375 5686404.5,378207.9375 5686404.5,378207.5 5686405,378206.71875 5686405,378206.3125 5686405,378205.9375 5686405,378205.53125 5686405,378204.8125 5686404,378204.46875 5686403.5,378203.75 5686402.5,378202.96875 5686402.5,378202.25 5686401.5,378201.46875 5686401.5,378200.0625 5686400,378199.3125 5686399.5,378198.90625 5686399.5,378198.125 5686399.5,378197.34375 5686399,378196.5625 5686399,378195.78125 5686399,378194.09375 5686400,378191.65625 5686400.5,378190.46875 5686400.5,378189.65625 5686401,378188.875 5686400.5,378188.46875 5686400.5,378187.6875 5686400.5,378186.90625 5686400.5,378185.71875 5686400.5,378184.53125 5686400.5,378182.59375 5686400,378181 5686400,378180.21875 5686400,378179.84375 5686400,378179.0625 5686399.5,378177.875 5686399.5,378177.71875 5686401,378174.90625 5686401.5,378173.21875 5686402.5,378171.59375 5686403,378170.4375 5686403,378169.5625 5686403.5,378169.1875 5686403.5,378168.375 5686403.5,378168.28125 5686404.5,378166.625 5686405,378165.71875 5686406.5,378165.65625 5686407,378165.59375 5686408,378165.5 5686408.5,378164.53125 5686410.5,378164.46875 5686411.5,378164.3125 5686413,378164.15625 5686414.5,378164.09375 5686415.5,378164 5686416,378164.6875 5686417.5,378164.59375 5686418,378165.40625 5686418,378166.09375 5686423.5,378168.46875 5686427.5,378169.03125 5686430,378169.1875 5686432.5,378169.5 5686433.5,378169.46875 5686433.5,378169.40625 5686434.5,378170.15625 5686435,378170.46875 5686436,378170.4375 5686436,378171.09375 5686437.5,378171.40625 5686438.5,378171.65625 5686440,378171.59375 5686440.5,378171.5 5686441.5,378172.625 5686442.5,378172.625 5686446.5,378172.4375 5686448.5,378172.375 5686449,378172.28125 5686450,378172.6875 5686450,378173.15625 5686453,378173.3125 5686456,378173.125 5686458,378172.96875 5686459.5,378172.84375 5686460.5,378172.78125 5686461.5,378172.65625 5686462.5,378172.59375 5686463.5,378172.40625 5686465.5,378172.28125 5686466.5,378172.15625 5686468,378172 5686470,378171.8125 5686471.5,378171.65625 5686473.5,378171.46875 5686475.5,378171.25 5686477.5,378171.15625 5686478.5,378171.09375 5686479,378170.6875 5686479,378169.8125 5686480.5,378169.34375 5686481,378169.21875 5686482,378168.75 5686483,378167.78125 5686485,378167.71875 5686485.5,378167.3125 5686485.5,378166.40625 5686486.5,378165.9375 5686487.5,378165.84375 5686488.5,378165 5686489,378164.21875 5686489,378163.28125 5686490.5,378161.625 5686491.5,378160.71875 5686492.5,378160.59375 5686493.5,378159.8125 5686493.5,378159.375 5686494,378156.9375 5686494.5,378155.65625 5686495.5,378154.40625 5686496,378154.03125 5686496,378153.625 5686496,378153.5625 5686497,378152.75 5686497,378152.71875 5686497,378152.28125 5686497.5,378151.09375 5686498,378150.28125 5686498,378149.03125 5686498.5,378148.25 5686498.5,378146.6875 5686498,378144.25 5686498.5,378140.3125 5686498.5,378138.75 5686498,378137.1875 5686498,378136.40625 5686498,378135.5625 5686498.5,378134.78125 5686498,378133.625 5686498,378132.4375 5686498,378130.09375 5686497.5,378128.90625 5686497.5,378127.71875 5686497.5,378126.53125 5686497.5,378125.375 5686497,378124.1875 5686497,378122.625 5686497,378121.4375 5686497,378119.78125 5686497.5,378118.625 5686497.5,378117.84375 5686497.5,378116.65625 5686497,378115.875 5686497,378115.09375 5686497,378114.28125 5686497,378112.34375 5686496.5,378111.53125 5686496.5,378110.75 5686496.5,378108.78125 5686496.5,378107.625 5686496,378106.0625 5686496,378104.875 5686496,378104.46875 5686496,378103.6875 5686496,378103.3125 5686496,378102.5 5686495.5,378101.71875 5686495.5,378100.125 5686496,378098.9375 5686495.5,378098.15625 5686495.5,378097.375 5686495.5,378096.15625 5686496,378094.96875 5686495.5,378092.625 5686495.5,378090.25 5686495.5,378089.09375 5686495,378087.90625 5686495,378087.125 5686495,378086.34375 5686495,378085.1875 5686494.5,378083.625 5686494,378082.84375 5686494,378082.0625 5686494,378081.3125 5686493.5,378080.53125 5686493.5,378078.15625 5686493,378077 5686493,378075.40625 5686493,378074.25 5686493,378073.4375 5686493,378072.65625 5686492.5,378072.28125 5686492.5,378071.09375 5686492.5,378070.3125 5686492.5,378068.3125 5686492.5,378066.75 5686492.5,378065.5625 5686492.5,378064.78125 5686492.5,378064 5686492,378063.25 5686491.5,378062.46875 5686491.5,378061.65625 5686491.5,378060.5625 5686490.5,378059.78125 5686490.5,378058.21875 5686490.5,378057.4375 5686490.5,378055.46875 5686490,378054.28125 5686490,378053.15625 5686489.5,378052.75 5686489.5,378051.59375 5686489,378051.21875 5686489,378049.65625 5686489,378048.9375 5686488,378048.625 5686487,378047.875 5686486.5,378047.1875 5686485.5,378046.125 5686484,378045.78125 5686483.5,378045.03125 5686483,378044.625 5686483,378043.53125 5686482,378042.03125 5686481,378041.28125 5686481,378041.3125 5686480.5,378040.53125 5686480.5,378039.75 5686480,378038.96875 5686480,378038.5625 5686480,378037 5686480,378036.21875 5686480,378034.65625 5686479.5,378033.4375 5686480,378032.59375 5686480.5,378032.1875 5686480.5,378031.3125 5686481.5,378030.9375 5686481.5,378029.65625 5686482,378028.875 5686482,378028.03125 5686482.5,378026.46875 5686482.5,378025.59375 5686483,378024.40625 5686483,378023.5625 5686483.5,378023.125 5686484,378022.3125 5686484.5,378021.90625 5686484.5,378021.0625 5686485,378019.84375 5686485.5,378019.4375 5686485.5,378018.53125 5686486.5,378017.3125 5686486.5,378016.5 5686487,378016.03125 5686488,378015.5625 5686488.5,378015.125 5686489,378013.8125 5686490.5,378013.34375 5686491,378013.28125 5686492,378013.1875 5686492.5,378012.8125 5686492.5,378012.03125 5686492.5,378011.125 5686493.5,378009.4375 5686494.5,378008.96875 5686495.5,378008.53125 5686495.5,378008.15625 5686495.5,378008.0625 5686496.5,378007.25 5686497,378006.46875 5686496.5,378005.3125 5686496,378004.9375 5686496,378004.53125 5686496,378003.34375 5686496,378002.5625 5686496,378001 5686496,378000.21875 5686495.5,377998.25 5686495.5,377996.6875 5686495.5,377995.53125 5686495,377994.78125 5686494.5,377994 5686494.5,377993.21875 5686494,377992.09375 5686493.5,377991.28125 5686493.5,377989.71875 5686493.5,377989.34375 5686493.5,377987.75 5686493,377987.375 5686493,377986.1875 5686493,377985.78125 5686493,377984.6875 5686492,377984.3125 5686492,377983.125 5686492,377982.34375 5686492,377981.5625 5686492,377980.78125 5686491.5,377979.96875 5686491.5,377980.0625 5686491,377979.3125 5686490.5,377978.90625 5686490.5,377979 5686489.5,377978.21875 5686489.5,377977.5625 5686488,377976.53125 5686486,377975.875 5686485,377975.625 5686483.5,377975.65625 5686483,377974.9375 5686482,377974.65625 5686481,377974.75 5686480,377974 5686479.5,377974.03125 5686479,377973.75 5686478,377973.9375 5686476,377972.84375 5686475,377972.59375 5686473.5,377972.75 5686472,377972.46875 5686470.5,377972.5625 5686469.5,377971.90625 5686468,377971.625 5686467,377971.3125 5686466,377971.40625 5686465,377971.5 5686464,377971.1875 5686463.5,377970.46875 5686462.5,377970.5 5686462,377969.71875 5686462,377969.15625 5686459.5,377967.34375 5686458,377966.71875 5686456,377966.03125 5686455,377965.71875 5686454,377965.40625 5686453,377965.03125 5686453,377964.6875 5686452.5,377963.96875 5686451.5,377963.625 5686451,377962.84375 5686451,377962.4375 5686451,377962.0625 5686451,377960.875 5686451,377960.15625 5686450,377959.78125 5686450,377958.96875 5686450,377958.625 5686449.5,377957.5 5686449,377957.09375 5686449,377955.90625 5686448.5,377955.125 5686448.5,377955.25 5686447.5,377954.46875 5686447.5,377953.78125 5686446,377953.0625 5686445,377952.75 5686444.5,377952.46875 5686443,377952.125 5686442.5,377952.1875 5686442,377951.53125 5686440.5,377951.5625 5686440.5,377950.53125 5686438.5,377949.8125 5686437.5,377949.5 5686437,377949.1875 5686436,377948.875 5686435.5,377948.9375 5686434.5,377948.3125 5686433,377947.1875 5686432,377946.59375 5686430,377946.375 5686428.5,377946.09375 5686427,377945.8125 5686426,377945.46875 5686425,377945.59375 5686424,377944.875 5686423,377944.96875 5686422,377945.03125 5686421.5,377945.0625 5686421,377944.28125 5686421,377944.375 5686420,377944.4375 5686419.5,377944.03125 5686419.5,377943.84375 5686417.5,377941.625 5686415.5,377940.96875 5686414,377941.0625 5686413,377940.75 5686412,377939.96875 5686412,377940 5686411.5,377939.4375 5686409.5,377939.1875 5686407.5,377939.34375 5686406,377938.28125 5686405,377937.90625 5686405,377937.96875 5686404,377936.0625 5686403,377935.40625 5686401.5,377933.875 5686401,377933.1875 5686400,377932.875 5686399,377932.15625 5686398,377932.21875 5686398,377931.15625 5686396.5,377930.40625 5686396,377929.3125 5686394.5,377928.3125 5686393,377927.625 5686392,377927.375 5686390,377926.6875 5686389.5,377926.75 5686388.5,377925.96875 5686388.5,377926 5686388,377926.03125 5686387.5,377925.3125 5686387,377924.96875 5686386.5,377925 5686386,377924.625 5686386,377923.90625 5686385,377923.28125 5686383.5,377922.5625 5686382.5,377921.9375 5686381,377921.6875 5686379.5,377920.96875 5686378.5,377920.6875 5686377,377920.40625 5686376,377920.15625 5686374.5,377919.53125 5686372.5,377919.28125 5686371,377919.03125 5686369.5,377919.1875 5686368,377919.375 5686366,377919.53125 5686364.5,377919.6875 5686363,377919.84375 5686361,377919.9375 5686360,377919.625 5686359,377919.40625 5686357,377919.5 5686356.5,377919.6875 5686354.5,377919.78125 5686353.5,377919.9375 5686351.5,377920.0625 5686350.5,377920.15625 5686349.5,377920.25 5686348.5,377920.28125 5686348,377920.125 5686345.5,377919.09375 5686344,377918.375 5686343,377918.4375 5686342.5,377918.0625 5686342.5,377917.53125 5686339.5,377916.96875 5686337,377917.15625 5686335,377913.75 5686333.5,377912.25 5686332.5,377911.1875 5686331.5,377910.46875 5686330.5,377910.09375 5686330,377909.71875 5686330,377908.9375 5686330,377909.03125 5686328.5,377907.5 5686328,377906.8125 5686327.5,377906.40625 5686327.5,377905.71875 5686326,377903.875 5686324.5,377902.8125 5686323.5,377902.09375 5686322.5,377901 5686321.5,377900.28125 5686320.5,377899.59375 5686320,377899.25 5686319,377898.5 5686318.5,377898.5625 5686318,377898.15625 5686318,377896.96875 5686318,377896.1875 5686318,377894.21875 5686317.5,377893.4375 5686317.5,377892.28125 5686317.5,377891.4375 5686318,377891.03125 5686318,377890.15625 5686319,377889.375 5686319,377887.8125 5686318.5,377887.375 5686319,377886.15625 5686319.5,377885.375 5686319,377885.25 5686320.5,377884.40625 5686321,377882.75 5686321.5,377881.5 5686322.5,377880.6875 5686322.5,377880.25 5686323,377879.375 5686323.5,377879 5686323.5,377877.65625 5686325,377876.40625 5686326,377875.5625 5686326.5,377875.46875 5686327.5,377875.09375 5686327.5,377874.96875 5686328.5,377874.15625 5686329,377872.65625 5686332,377871.71875 5686333.5,377871.21875 5686334.5,377871.125 5686335.5,377871.09375 5686336,377871 5686337,377870.09375 5686338,377870 5686339,377869.03125 5686341,377868.15625 5686341.5,377868.0625 5686343,377867.53125 5686344,377867.4375 5686345,377866.9375 5686346.5,377865.9375 5686348,377865.4375 5686349.5,377865.375 5686350,377865.34375 5686350.5,377865.3125 5686351,377864.5 5686351,377863.53125 5686352.5,377863.03125 5686354,377862.9375 5686355,377862.375 5686356.5,377862.21875 5686358,377861.71875 5686359.5,377860.8125 5686360.5,377860.75 5686361,377860.375 5686361,377859.65625 5686364.5,377858.625 5686367,377858.5 5686368,377858.40625 5686369.5,377858.34375 5686369.5,377858.3125 5686370,377858.25 5686371,377858.21875 5686371.5,377857.75 5686372,377857.6875 5686372.5,377856.8125 5686373.5,377856.53125 5686376.5,377856.5 5686376.5,377856.46875 5686377,377856.3125 5686378.5,377856.25 5686379.5,377856.09375 5686381,377856.03125 5686382,377855.875 5686383.5,377855.78125 5686384,377855.46875 5686387.5,377855.3125 5686389,377855.125 5686391,377854.9375 5686393,377854.8125 5686394.5,377854.34375 5686395,377853.46875 5686396,377853.03125 5686396.5,377852.125 5686397.5,377851.6875 5686398,377850.71875 5686400,377849.875 5686400.5,377849.34375 5686402,377849.25 5686403,377849.1875 5686403.5,377849.09375 5686404.5,377848.1875 5686405.5,377848.125 5686406.5,377847.90625 5686409,377847.75 5686410.5,377847.5625 5686412.5,377847.375 5686414.5,377847.3125 5686415,377847.21875 5686416,377847.15625 5686416.5,377847 5686418,377846.8125 5686420,377846.6875 5686421.5,377846.5625 5686423,377847.15625 5686425,377847.4375 5686426,377847.3125 5686427.5,377847.21875 5686428.5,377847.09375 5686429.5,377847.03125 5686430.5,377846.96875 5686431,377847.375 5686431,377847.15625 5686433.5,377847.78125 5686435,377847.71875 5686436,377847.625 5686436.5,377848.40625 5686436.5,377848.65625 5686438,377850.875 5686440,377851.96875 5686441,377852.28125 5686442,377853.0625 5686442,377853.40625 5686442.5,377854.53125 5686443,377856.03125 5686444,377857.21875 5686444.5,377857.96875 5686444.5,377858.625 5686446,377859.40625 5686446,377860.53125 5686447,377862.0625 5686447.5,377863.15625 5686448.5,377863.5 5686449,377864.3125 5686449,377864.6875 5686449,377865 5686450,377865.78125 5686450,377866.9375 5686450.5,377867.71875 5686450.5,377869.28125 5686450.5,377870.0625 5686450.5,377871.65625 5686451,377872.4375 5686451,377874.03125 5686450.5,377875.21875 5686451,377876 5686451,377876.875 5686450,377877.65625 5686450.5,377879.25 5686450,377880.84375 5686450,377881.625 5686450.5,377882.90625 5686449.5,377883.3125 5686449.5,377884.15625 5686448.5,377884.9375 5686448.5,377886.21875 5686447.5,377887.03125 5686447.5,377888.25 5686447.5,377888.625 5686447.5,377889.4375 5686447,377890.25 5686447,377891.09375 5686446.5,377892.28125 5686446.5,377894.25 5686447,377896.1875 5686447,377897.375 5686447,377898.15625 5686447,377899.34375 5686447.5,377900.125 5686447.5,377901.21875 5686448.5,377903.5625 5686449,377905.0625 5686450,377905.75 5686451,377906.53125 5686451,377907.34375 5686451,377908.03125 5686452,377908.78125 5686452.5,377909.90625 5686453,377910.6875 5686453.5,377912.5 5686455,377913.59375 5686456,377914.34375 5686456.5,377915.0625 5686457.5,377915.40625 5686457.5,377915.71875 5686458.5,377916.3125 5686460.5,377918.5625 5686462,377919.625 5686463.5,377920.3125 5686464.5,377921.03125 5686465.5,377921.375 5686466,377921.71875 5686466.5,377922.4375 5686467,377922.78125 5686467.5,377923.125 5686468.5,377924.59375 5686469.5,377925.71875 5686470.5,377926.03125 5686471,377926.75 5686472,377927.09375 5686472.5,377927.5 5686472.5,377928.1875 5686473.5,377928.5625 5686473.5,377929.21875 5686475,377930.75 5686475.5,377931.46875 5686476.5,377932.21875 5686477,377932.9375 5686478,377933.625 5686478.5,377934.34375 5686479.5,377934.65625 5686480.5,377935.375 5686481,377935.6875 5686482,377936.4375 5686482.5,377936.40625 5686483,377937.125 5686483.5,377937.46875 5686484,377938.1875 5686485,377938.09375 5686486,377938.46875 5686486.5,377939.53125 5686487.5,377940.28125 5686488,377940.25 5686488.5,377940.5625 5686489.5,377941.28125 5686490,377941.59375 5686491,377941.875 5686492,377942.96875 5686493,377943.6875 5686494,377944.34375 5686495,377945.09375 5686495.5,377945.03125 5686496.5,377945.40625 5686496.5,377946.09375 5686498,377947.59375 5686498.5,377948.21875 5686500.5,377949.71875 5686501.5,377950.03125 5686502,377950.75 5686503,377951.0625 5686504,377951.4375 5686504.5,377952.21875 5686504.5,377952.125 5686505,377952.53125 5686505,377953.71875 5686505.5,377954.6875 5686507.5,377956.53125 5686509,377957.25 5686509.5,377957.5625 5686510.5,377957.96875 5686510.5,377957.90625 5686511.5,377958.625 5686512,377959.75 5686512.5,377960.125 5686512.5,377960.8125 5686514,377961.15625 5686514.5,377960.9375 5686517,377960.78125 5686518.5,377960.59375 5686520.5,377960.4375 5686522,377960.3125 5686523.5,377960.1875 5686524.5,377960.09375 5686526,377959.96875 5686527,377959 5686529,377958.90625 5686529.5,377958.8125 5686531,377958.71875 5686531.5,377958.625 5686533,377958.59375 5686533,377957.5625 5686535.5,377957 5686537.5,377956.90625 5686538,377956.4375 5686539,377956.34375 5686540,377955.5 5686540.5,377954.21875 5686541.5,377953.40625 5686542,377952.53125 5686542.5,377952.125 5686543,377951.21875 5686544,377950 5686544.5,377949.125 5686545,377948.71875 5686545.5,377948.3125 5686545.5,377947.90625 5686545,377947.0625 5686546,377946.625 5686546.5,377945.40625 5686546.5,377944.25 5686546.5,377943.0625 5686546.5,377941.875 5686546,377941.40625 5686547,377940.59375 5686547.5,377939.40625 5686547,377938.625 5686547,377937.4375 5686547,377936.65625 5686547,377935.09375 5686546.5,377933.90625 5686546.5,377933.125 5686546.5,377932.34375 5686546.5,377931.5625 5686546.5,377930.375 5686546,377929.59375 5686546,377928.0625 5686545.5,377926.90625 5686545,377926.125 5686545,377925.34375 5686545,377924.53125 5686545.5,377922.09375 5686546,377921.28125 5686546,377920.40625 5686547,377919.625 5686546.5,377919.21875 5686546.5,377918.40625 5686547,377917.5 5686548,377917.40625 5686549.5,377916.4375 5686550,377916.40625 5686552.5,377915.59375 5686558,377914.71875 5686565.5,377914.6875 5686571,377914.65625 5686574,377914.625 5686576.5,377914.1875 5686581.5,377914.15625 5686585.5,377914.125 5686589.5,377914.09375 5686593,377914.8125 5686600.5,377915.53125 5686607,377916.6875 5686610.5,377917.84375 5686614,377920.15625 5686616,377920.09375 5686616.5,377920.375 5686618,377920.3125 5686618.5,377920.125 5686620.5,377920 5686622,377919.875 5686623.5,377919.71875 5686625,377919.6875 5686625.5,377919.59375 5686626,377918.75 5686627,377918.6875 5686627.5,377918.625 5686628,377918.1875 5686628.5,377918.15625 5686629,377918.125 5686629,377917.9375 5686631,377917.78125 5686633,377917.625 5686634.5,377918.28125 5686636,377918.59375 5686637,377918.5 5686637.5,377918.46875 5686638,377920.4375 5686638,377921.125 5686639.5,377921.90625 5686639.5,377922.6875 5686639.5,377923.0625 5686639.5,377923.40625 5686640.5,377924.15625 5686641,377925.3125 5686641,377926.09375 5686641,377927.28125 5686641.5,377928.0625 5686641.5,377929.625 5686641.5,377930.4375 5686641.5,377931.125 5686642.5,377931.5 5686643,377931.84375 5686643.5,377932.625 5686643.5,377934.09375 5686645,377935.21875 5686645.5,377936.375 5686646,377936.6875 5686646.5,377937 5686647.5,377937.75 5686648,377938.4375 5686649,377939.125 5686650,377939.84375 5686651,377940.15625 5686651.5,377940.5 5686652.5,377941.15625 5686654,377941.46875 5686654.5,377941.75 5686656,377942.03125 5686657,377942.71875 5686658.5,377943.03125 5686659,377942.90625 5686660.5,377943.59375 5686661.5,377943.90625 5686662.5,377944.1875 5686663.5,377944.4375 5686665.5,377944.71875 5686666.5,377945.03125 5686667.5,377945.28125 5686669,377945.5625 5686670,377945.84375 5686671.5,377945.71875 5686672.5,377945.65625 5686673.5,377946.3125 5686674.5,377947 5686676,377946.90625 5686676.5,377946.8125 5686678,377946.71875 5686678.5,377946.53125 5686680.5,377946.4375 5686682,377946.3125 5686683,377946.21875 5686684,377946.09375 5686685.5,377946.0625 5686685.5,377945.9375 5686687,377945.875 5686687.5,377945.71875 5686689.5,377945.65625 5686690,377944.84375 5686690,377944.46875 5686690,377943.59375 5686690.5,377942.375 5686691,377941.59375 5686691,377940.8125 5686691,377940.03125 5686690.5,377938.84375 5686690.5,377938.46875 5686690.5,377937.28125 5686690.5,377936.5 5686690.5,377934.9375 5686690,377933.75 5686690,377932.96875 5686690,377932.5625 5686690,377931.78125 5686690,377931.46875 5686689,377930.3125 5686688.5,377929.53125 5686688.5,377929.15625 5686688.5,377927.96875 5686688.5,377927.5625 5686688,377926.78125 5686688,377926 5686688,377923.9375 5686689,377922.6875 5686689.5,377921.46875 5686690,377921 5686690.5,377920.59375 5686690.5,377919.4375 5686690.5,377918.21875 5686691,377916.625 5686690.5,377916.25 5686690.5,377915.84375 5686690.5,377915.46875 5686690.5,377914.28125 5686690.5,377913.875 5686690.5,377913.09375 5686690.5,377912.71875 5686690.5,377911.96875 5686690,377911.5625 5686690,377910.40625 5686689.5,377910 5686689.5,377909.25 5686689,377908.84375 5686689,377908.0625 5686689,377907.28125 5686689,377906.09375 5686689,377905.71875 5686689,377904.8125 5686690,377903.21875 5686690,377901.96875 5686691,377901.5625 5686691,377900.28125 5686692,377898.25 5686692.5,377897.375 5686693,377896.5 5686694,377896.125 5686694,377895.96875 5686695.5,377893.5 5686696.5,377892.1875 5686698,377891.3125 5686698.5,377890.875 5686699,377890.8125 5686699.5,377890.75 5686700.5,377890.6875 5686701,377889.90625 5686700.5,377889.84375 5686701.5,377889.375 5686702,377889.09375 5686705,377888.21875 5686706,377888.125 5686707,377888.03125 5686708,377887.9375 5686709,377887.875 5686709.5,377887.75 5686711,377887.6875 5686711.5,377887.5625 5686713,377887.5 5686713.5,377887.4375 5686714.5,377887.96875 5686717,377888.21875 5686717.5),(378145.21875 5686513.5,378145.125 5686514.5,378145.4375 5686515.5,378146.34375 5686518.5,378147.03125 5686519.5,378147.6875 5686521,378147.59375 5686522,378147.90625 5686523,378147.875 5686523.5,378147.75 5686524.5,378148.5 5686525,378149.125 5686526.5,378149.84375 5686527.5,378150.15625 5686528.5,378150.90625 5686529,378151.21875 5686529.5,378151.53125 5686530.5,378151.75 5686532.5,378152.8125 5686534,378153.5 5686535,378154.125 5686536.5,378154.4375 5686537.5,378154.375 5686538.5,378155.0625 5686539,378154.9375 5686540.5,378155.625 5686541.5,378155.5 5686543,378155.40625 5686544,378155.8125 5686544,378156 5686546,378156.65625 5686547.5,378156.5625 5686548.5,378156.53125 5686549,378156.3125 5686551,378156.9375 5686553,378156.90625 5686553.5,378156.84375 5686554,378157.625 5686554,378157.8125 5686556,378157.71875 5686557.5,378158.4375 5686558,378158.375 5686558.5,378159.15625 5686558.5,378159.8125 5686560.5,378160.09375 5686561.5,378160 5686562.5,378161.15625 5686563,378160.96875 5686565,378160.8125 5686566.5,378160.71875 5686567.5,378160.59375 5686568.5,378159.59375 5686571,378159.40625 5686573,378159.25 5686574.5,378157.96875 5686575.5,378157.4375 5686577,378157.375 5686577.5,378157.3125 5686578.5,378157.21875 5686579,378156.84375 5686579,378156.375 5686580,378156.28125 5686580.5,378156.21875 5686581.5,378156.1875 5686582,378155.3125 5686582.5,378155.28125 5686583,378155.21875 5686583.5,378155.125 5686584.5,378155.03125 5686585.5,378154.9375 5686586.5,378154.84375 5686587.5,378154.75 5686588.5,378154.6875 5686589,378154.65625 5686589.5,378154.53125 5686591,378154.5 5686591,378154.40625 5686592,378153.59375 5686592.5,378153.40625 5686594,378152.125 5686595.5,378152 5686596.5,378151.9375 5686597.5,378151.84375 5686598,378151.375 5686599,378151.28125 5686600,378151.1875 5686601,378150.59375 5686603,378150.09375 5686604,378150 5686605,378149.9375 5686606,378149.84375 5686606.5,378149.03125 5686607,378148.09375 5686608.5,378147.625 5686609,378147.5625 5686610,378147.46875 5686610.5,378147.46875 5686611,378147.40625 5686611.5,378146.9375 5686612.5,378146.15625 5686612,378146.125 5686612.5,378145.25 5686613.5,378144.6875 5686615,378144.5625 5686616.5,378143.78125 5686616.5,378142.40625 5686618,378141.875 5686619.5,378141.84375 5686620,378139.84375 5686620.5,378139.3125 5686621.5,378139.25 5686622,378139.1875 5686623,378136.78125 5686623,378135.90625 5686624,378135.875 5686624.5,378135.09375 5686624,378133.8125 5686625,378132.96875 5686625.5,378132.5625 5686626,378132.5 5686626.5,378132.28125 5686628.5,378131.34375 5686630,378131.28125 5686631,378131.15625 5686632,378131.09375 5686633,378131.0625 5686633.5,378130.90625 5686635,378129.96875 5686636.5,378129.9375 5686637,378129.84375 5686637.5,378129.78125 5686638.5,378129.75 5686638.5,378129.65625 5686639.5,378129.5625 5686640.5,378129.46875 5686641.5,378129.40625 5686642.5,378130.125 5686643,378130.09375 5686643.5,378130 5686644.5,378130.78125 5686644.5,378130.96875 5686647,378130.8125 5686648.5,378130.6875 5686649.5,378130.59375 5686650.5,378130.4375 5686652.5,378130.3125 5686653.5,378130.25 5686654.5,378130.03125 5686656.5,378130 5686657,378129.90625 5686658,378129.875 5686658,378129.75 5686659.5,378128.15625 5686659.5,378127.25 5686660.5,378126.78125 5686661.5,378126.75 5686662,378126.3125 5686662,378125.5 5686662.5,378125.09375 5686662.5,378124.3125 5686662.5,378123.46875 5686663,378123.375 5686664,378122.59375 5686664,378120.53125 5686665,378119.65625 5686665.5,378118.875 5686665.5,378118.40625 5686666,378116.75 5686667,378116.34375 5686667,378115.15625 5686667,378114.375 5686667,378113.46875 5686668,378112.28125 5686668,378111.5 5686668,378109.875 5686668.5,378108.65625 5686669,378107.46875 5686668.5,378107.0625 5686668.5,378106.6875 5686668.5,378105.90625 5686668.5,378105.03125 5686669,378103.875 5686669,378101.90625 5686669,378100.71875 5686669,378099.9375 5686668.5,378099.15625 5686668.5,378098.75 5686668.5,378097.96875 5686668.5,378096.40625 5686668.5,378094.5 5686667.5,378093.34375 5686667,378092.9375 5686667,378092.15625 5686667,378091.375 5686667,378090.65625 5686666,378089.90625 5686665.5,378088.34375 5686665.5,378087.5625 5686665.5,378087.15625 5686665.5,378086.375 5686665.5,378085.1875 5686665,378084.40625 5686665,378083.21875 5686665,378082.84375 5686665,378082.0625 5686665,378081.28125 5686665,378080.46875 5686664.5,378079.3125 5686664.5,378077.34375 5686664.5,378075.78125 5686664.5,378074.59375 5686664,378074.1875 5686664,378073.8125 5686664,378073.03125 5686664,378071.84375 5686664,378069.875 5686663.5,378069.09375 5686663.5,378067.125 5686663.5,378065.90625 5686663.5,378065.125 5686663.5,378064.34375 5686663.5,378075.375 5686660.5,378075.40625 5686660,378076.1875 5686660,378076.6875 5686659,378077.15625 5686658,378077.28125 5686657,378078.125 5686656,378078.90625 5686656,378079.03125 5686655,378080.71875 5686654,378081.5 5686654,378081.59375 5686653,378081.65625 5686652.5,378082.15625 5686651.5,378082.1875 5686651,378083.4375 5686650.5,378083.875 5686650,378084.34375 5686649,378085.5625 5686649,378085.96875 5686648.5,378086.40625 5686648.5,378087.3125 5686647,378088.5625 5686646.5,378089.4375 5686646,378089.9375 5686644.5,378091.1875 5686644,378091.65625 5686643,378092.125 5686642.5,378092.15625 5686642,378092.21875 5686641.5,378092.625 5686641.5,378093.59375 5686639.5,378093.71875 5686638.5,378093.78125 5686637.5,378093.90625 5686636.5,378093.96875 5686635.5,378094 5686635,378094.09375 5686634.5,378094.15625 5686633.5,378093.5625 5686631.5,378093.25 5686630.5,378093.3125 5686630,378093.34375 5686629.5,378093.5 5686628,378092.75 5686627.5,378092.5 5686626,378092.5625 5686625.5,378092.65625 5686624.5,378092.6875 5686624,378092.84375 5686622.5,378092.9375 5686621.5,378093.4375 5686620.5,378093.5 5686619.5,378094.78125 5686618.5,378094.875 5686617.5,378094.96875 5686616.5,378095.0625 5686616,378095.90625 5686615,378095.96875 5686614.5,378096.4375 5686614,378098.0625 5686613.5,378098.96875 5686612,378099.4375 5686611.5,378099.46875 5686611,378099.53125 5686610,378099.65625 5686609,378100.125 5686608.5,378100.28125 5686606.5,378100.34375 5686606,378100.53125 5686604,378100.625 5686603,378100.6875 5686602.5,378100.8125 5686601,378100.90625 5686600,378101.40625 5686599,378102.34375 5686597.5,378102.46875 5686596,378102.53125 5686595.5,378103 5686594.5,378103.40625 5686594.5,378103.5 5686593.5,378104.75 5686593,378105.6875 5686591.5,378106.96875 5686590.5,378107.40625 5686590,378107.84375 5686589.5,378108.75 5686588.5,378109.40625 5686588.5,378109.96875 5686588.5,378110.78125 5686588,378110.875 5686587,378111.65625 5686587,378111.6875 5686587,378111.71875 5686586.5,378112.59375 5686585.5,378112.71875 5686584,378112.8125 5686583.5,378113.75 5686582,378113.84375 5686580.5,378114 5686579,378114.09375 5686578.5,378114.1875 5686577,378114.28125 5686576.5,378114.34375 5686575.5,378114.03125 5686575,378114.125 5686573.5,378114.21875 5686573,378114.28125 5686572,378113.5625 5686571,378113.28125 5686570,378113.34375 5686569.5,378113.5625 5686567,378113.65625 5686566,378113.84375 5686564,378113.25 5686562,378112.96875 5686560.5,378113.125 5686559,378113.21875 5686558.5,378113.28125 5686557.5,378113.3125 5686557,378112.96875 5686557,378113.03125 5686556,378113.0625 5686555.5,378111.90625 5686555.5,378110.3125 5686555.5,378108.3125 5686555.5,378107.53125 5686555.5,378107.15625 5686555.5,378106.71875 5686555.5,378105.90625 5686556,378105.09375 5686556,378104.3125 5686556,378103.53125 5686556,378102.75 5686555.5,378101.5625 5686555.5,378100.40625 5686555.5,378100.03125 5686555,378099.3125 5686554,378098.59375 5686553.5,378096.625 5686553.5,378095.125 5686552.5,378094.34375 5686552.5,378093.15625 5686552.5,378092.8125 5686552,378091.65625 5686551.5,378091.28125 5686551.5,378089.6875 5686551,378088.53125 5686551,378086.5625 5686551,378084.625 5686550.5,378083.4375 5686550,378083.0625 5686550,378082.65625 5686550,378082.28125 5686550,378081.5 5686550,378081.09375 5686550,378080 5686549,378078.8125 5686549,378078.21875 5686547,378077.125 5686546,378076 5686545,378075.65625 5686544.5,378074.875 5686544.5,378074.15625 5686543.5,378073.375 5686543.5,378071.53125 5686542,378069.71875 5686540.5,378068.6875 5686539,378067.65625 5686537,378066.96875 5686536,378066.3125 5686534.5,378066 5686533.5,378065.3125 5686532.5,378065 5686531.5,378065.0625 5686531,378064.34375 5686530,378064.4375 5686529,378063.71875 5686528.5,378063.75 5686528,378063.90625 5686526.5,378063.96875 5686525.5,378063.3125 5686524.5,378063.375 5686523.5,378063.46875 5686523,378063.5 5686522.5,378063.65625 5686521,378063.75 5686519.5,378063.84375 5686519,378064.625 5686519,378065.90625 5686518,378067.90625 5686517.5,378069.125 5686517.5,378070 5686516.5,378070.8125 5686516.5,378072.0625 5686515.5,378072.9375 5686515,378073.78125 5686514.5,378074.6875 5686513,378075.53125 5686512.5,378076.34375 5686512.5,378076.40625 5686511.5,378076.4375 5686511.5,378077.625 5686511.5,378078.875 5686511,378080.875 5686510.5,378081.65625 5686510.5,378082.4375 5686511,378083.21875 5686511,378083.625 5686511,378084.8125 5686511,378085.59375 5686511,378087.21875 5686510.5,378089.1875 5686510.5,378090.0625 5686510,378090.84375 5686510,378092.0625 5686510,378092.21875 5686510,378095.40625 5686512,378099.71875 5686514.5,378103.28125 5686515.5,378108 5686517.5,378113.125 5686518,378117.46875 5686519,378121.8125 5686519,378126.5625 5686519,378131.3125 5686519,378135.25 5686518.5,378138.4375 5686517.5,378143.1875 5686515,378145.21875 5686513.5),(378774.4375 5685824.5,378776.46875 5685827,378781.53125 5685834,378783.875 5685837.5,378787 5685842,378790.90625 5685846.5,378796.40625 5685850,378798.6875 5685851,378798.625 5685851.5,378798.5625 5685852,378798.4375 5685853,378798.34375 5685854.5,378799.34375 5685856,378799.28125 5685857,378798.875 5685861,378798.65625 5685863.5,378798.375 5685866.5,378798.125 5685869,378798 5685870.5,378797.46875 5685872,378797 5685872.5,378796.875 5685873.5,378796.8125 5685874.5,378796.78125 5685875,378796 5685875,378794.9375 5685877.5,378790.625 5685881,378789.15625 5685884,378787.6875 5685887,378786.40625 5685888,378785.09375 5685889,378783.8125 5685890.5,378782.53125 5685891.5,378780.875 5685892,378780.03125 5685892.5,378778.75 5685893.5,378777.90625 5685894,378776.65625 5685894.5,378775.4375 5685895,378774.1875 5685895.5,378773.34375 5685896,378772.53125 5685896.5,378771.3125 5685896.5,378770.53125 5685896.5,378769.75 5685896.5,378768.53125 5685896.5,378766.875 5685897.5,378765.65625 5685897.5,378764.46875 5685898,378763.625 5685898,378762.375 5685899,378761.5625 5685899,378760.6875 5685900,378759.84375 5685900.5,378758.625 5685901,378757.71875 5685902,378756.4375 5685903,378755.09375 5685904.5,378753.375 5685906,378752.4375 5685907.5,378751.5625 5685908.5,378750.65625 5685909.5,378749.78125 5685910.5,378748.96875 5685910.5,378748.15625 5685911,378747.28125 5685911.5,378746.0625 5685912,378744.78125 5685913,378742.78125 5685913,378741.5 5685914,378740.1875 5685915.5,378739.375 5685915.5,378739.3125 5685916.5,378738.46875 5685916.5,378738.4375 5685917,378737.625 5685917.5,378736.6875 5685919,378735.4375 5685919.5,378734.53125 5685920.5,378732.8125 5685922,378731.90625 5685923,378731 5685924.5,378730.15625 5685925,378729.28125 5685925.5,378728.4375 5685926.5,378727.5625 5685927,378726.71875 5685928,378725.84375 5685928.5,378724.59375 5685929,378723.75 5685930,378722.90625 5685930,378722.0625 5685931,378721.1875 5685931.5,378720.34375 5685932.5,378719.46875 5685933,378718.21875 5685933.5,378717.375 5685934.5,378716.90625 5685935,378716.03125 5685936,378715.21875 5685936,378714.78125 5685936.5,378713.90625 5685937.5,378713.4375 5685938,378712.9375 5685939,378712.125 5685939.5,378711.65625 5685940,378711.53125 5685941.5,378710.65625 5685942.5,378709.34375 5685943.5,378708.875 5685944.5,378708.40625 5685945,378707.5625 5685946,378707.09375 5685946.5,378705.78125 5685948,378704.5625 5685948,378703.65625 5685949.5,378703.15625 5685950.5,378702.25 5685951.5,378701.34375 5685952.5,378700.84375 5685954,378699.90625 5685955.5,378698.96875 5685957,378698.4375 5685958.5,378697.53125 5685959.5,378697 5685961,378696.5 5685962,378696.03125 5685963,378695.5625 5685963.5,378695.53125 5685964,378695.125 5685964,378694.125 5685966.5,378692.75 5685968,378692.21875 5685969.5,378692.0625 5685971,378692.03125 5685971.5,378691.96875 5685972,378691.875 5685973,378690.96875 5685974.5,378690.71875 5685977,378689.375 5685978.5,378688.53125 5685979,378688 5685980.5,378687.625 5685980.5,378687.5 5685981.5,378686.6875 5685982,378684.53125 5685983.5,378682.875 5685984,378681.5625 5685985.5,378680.65625 5685987,378680.1875 5685987.5,378680.15625 5685988,378659.96875 5685975,378660 5685974.5,378660.0625 5685974,378660.15625 5685973,378660.25 5685972,378660.3125 5685971.5,378659.65625 5685970,378659.34375 5685969,378659.40625 5685968.5,378659.5 5685967.5,378659.5625 5685966.5,378659.1875 5685966.5,378658.875 5685966,378658.90625 5685965.5,378658.21875 5685964,378658.3125 5685963.5,378657.28125 5685961.5,378656.96875 5685961,378657.0625 5685959.5,378657.15625 5685959,378656.875 5685957.5,378656.53125 5685957,378655.90625 5685955,378655.1875 5685954.5,378655.28125 5685953.5,378655.3125 5685953,378655.03125 5685952,378654.6875 5685951.5,378654.03125 5685950,378653.71875 5685949,378653.78125 5685948.5,378653.90625 5685947,378653.9375 5685946.5,378653.96875 5685946.5,378653.6875 5685945,378653.75 5685944.5,378653.09375 5685943,378653.1875 5685942.5,378652.65625 5685939.5,378652.03125 5685938,378652.125 5685936.5,378652.25 5685935.5,378652.3125 5685934.5,378652.40625 5685934,378652.4375 5685933.5,378652.125 5685932.5,378652.25 5685931,378651.9375 5685930,378651.65625 5685929,378651.75 5685928,378651.875 5685926.5,378651.1875 5685926,378651.3125 5685924,378651.4375 5685923,378651.5625 5685922,378651.28125 5685920.5,378651.4375 5685919,378651.5 5685918,378651.53125 5685918,378651.59375 5685917,378650.9375 5685916,378650.96875 5685915.5,378651.0625 5685914.5,378651.09375 5685914,378651.15625 5685913.5,378651.1875 5685913,378651.375 5685911,378652.25 5685910.5,378652.40625 5685909,378653.28125 5685907.5,378653.8125 5685906.5,378654.65625 5685906,378655.09375 5685905.5,378655.5625 5685904.5,378656.375 5685904.5,378657.15625 5685904.5,378658.84375 5685903.5,378660.46875 5685903.5,378661.34375 5685902,378662.21875 5685901.5,378663.46875 5685901,378664.71875 5685900,378665.96875 5685899.5,378666.84375 5685898.5,378668.0625 5685898.5,378668.90625 5685898,378669.8125 5685896.5,378671.0625 5685896,378671.96875 5685895,378673.21875 5685894,378674.46875 5685893.5,378675.3125 5685893,378676.53125 5685892.5,378677.375 5685892,378678.21875 5685891.5,378679.0625 5685891,378679.875 5685891,378680.6875 5685890.5,378681.96875 5685889.5,378683.625 5685889,378684.5 5685888,378685.34375 5685887.5,378686.59375 5685887,378687.46875 5685886,378688.71875 5685885.5,378689.96875 5685885,378690.78125 5685884.5,378692 5685884,378693.3125 5685883,378694.9375 5685882.5,378696.625 5685881.5,378697.875 5685881,378699.5625 5685880,378701.25 5685879,378702.5 5685878,378703.78125 5685877,378705.4375 5685876.5,378706.28125 5685875.5,378707.1875 5685874.5,378708.0625 5685874,378708.90625 5685873,378709.375 5685872.5,378710.21875 5685872,378710.625 5685872,378711.53125 5685870.5,378712.34375 5685870.5,378713.65625 5685869.5,378714.90625 5685868.5,378715.34375 5685868.5,378715.8125 5685867.5,378717.09375 5685866.5,378717.9375 5685866,378720.0625 5685864.5,378722.53125 5685863.5,378723.40625 5685862.5,378724.25 5685862,378724.6875 5685861.5,378725.53125 5685861,378726 5685860,378727.25 5685859.5,378729.03125 5685857.5,378731.0625 5685857,378732.34375 5685856,378733.25 5685855,378734.09375 5685854.5,378734.5625 5685853.5,378735 5685853,378735.84375 5685853,378736.71875 5685852,378738.34375 5685851.5,378739.1875 5685851,378740.5 5685850,378741.34375 5685849,378742.21875 5685848.5,378743.46875 5685847.5,378744.3125 5685847,378744.78125 5685846,378745.65625 5685845.5,378746.5 5685845,378746.96875 5685844,378747.4375 5685843.5,378747.53125 5685842.5,378748.40625 5685841.5,378748.5 5685840.5,378748.625 5685839,378749.15625 5685838,378749.28125 5685836.5,378749.40625 5685835,378749.5625 5685833.5,378749.71875 5685832,378750.21875 5685831,378750.375 5685829.5,378751.21875 5685828.5,378751.34375 5685827.5,378751.375 5685827,378751.40625 5685826.5,378752.59375 5685826.5,378753.90625 5685825.5,378756.34375 5685824.5,378757.5625 5685824.5,378758.78125 5685824,378759.96875 5685824.5,378760.75 5685824.5,378762.78125 5685824,378765.5625 5685823.5,378767.125 5685824,378768.71875 5685824,378770.28125 5685824,378771.46875 5685824.5,378772.25 5685824.5,378773.03125 5685824.5,378774.21875 5685824.5,378774.4375 5685824.5)) POLYGON((377787.21236766 5686430.83570257,377787.091569461 5686434.83708883,377787.737693002 5686438.88795447,377787.864087559 5686442.68909533,377788.459649403 5686444.80578393,377788.880197144 5686448.70852724,377792.362122552 5686459.86695051,377797.94149236 5686470.13850574,377798.930849234 5686471.33060785,377799.58710372 5686472.52852275,377804.899910503 5686478.52288668,377805.406547456 5686479.13334686,377805.529915074 5686479.23371183,377805.644567469 5686479.36307249,377807.392061045 5686481.81156509,377816.741061307 5686490.34144172,377819.268024607 5686491.8162556,377819.445913559 5686491.96408342,377821.252932048 5686492.97470892,377821.845793585 5686493.32072123,377822.749238227 5686493.92301766,377822.749238226 5686493.92301766,377823.285211318 5686494.21114939,377825.784078899 5686496.21427985,377828.942060624 5686497.86905437,377829.459811307 5686498.34144172,377829.814097052 5686498.54821383,377830.563106926 5686499.15138158,377833.445420292 5686500.66756629,377840.389980754 5686504.72062639,377852.415040396 5686508.66531166,377853.163293988 5686508.74466712,377854.777839837 5686509.25493736,377860.602216238 5686509.85131204,377862.571299679 5686510.30820919,377870.722679781 5686510.92891152,377865.18357042 5686518.6232882,377864.473453212 5686520.3059776,377860.565589664 5686528.1292516,377857.549254266 5686538.50328245,377856.91908596 5686544.62059585,377856.237925827 5686549.23152597,377855.997961655 5686551.04715803,377855.122961655 5686558.54715803,377854.719718468 5686565.15909641,377854.689275479 5686570.51706246,377854.660155864 5686573.31254549,377854.65773972 5686573.50583704,377854.41587695 5686576.26998298,377854.189330971 5686581.0312643,377854.127092524 5686588.99778552,377854.096141439 5686592.46430707,377854.367387449 5686598.72377641,377855.086137449 5686606.22377641,377855.17598771 5686607.09442203,377855.89473771 5686613.59442203,377858.280137917 5686624.53884835,377858.199446436 5686625.39955748,377858.119771519 5686626.32673996,377858.023869995 5686627.55427948,377857.947895467 5686628.28363494,377857.764790992 5686638.5933333,377859.05375186 5686646.88004093,377856.001223071 5686649.83265362,377854.203654971 5686651.45270116,377853.326280308 5686652.05597871,377846.157898318 5686658.98972353,377845.720398318 5686659.48972353,377842.727400395 5686663.68434142,377841.391454247 5686665.19681894,377840.139069476 5686667.31182779,377838.825885171 5686669.15222545,377838.128428148 5686670.70736908,377835.625770583 5686674.93382011,377833.502392192 5686680.82867703,377832.29696122 5686683.50412238,377831.973057845 5686685.07436739,377831.790848094 5686685.58021243,377831.644992471 5686686.50242365,377830.932850338 5686688.15831566,377828.480696436 5686700.39955748,377828.206798474 5686703.32113575,377828.082254505 5686704.51727121,377827.999100384 5686705.51512066,377827.894754505 5686706.51727121,377827.786916907 5686707.81132239,377825.943807975 5686715.901891,377825.220199407 5686720.61874685,377824.548478334 5686724.33904817,377823.601072878 5686734.06261442,377823.569822878 5686736.06261442,377823.565273476 5686736.42310359,377823.533360075 5686739.74209727,377823.493888631 5686740.08215895,377823.097623592 5686746.31822584,377823.035123592 5686751.81822584,377823.032218468 5686752.15909641,377823.000968468 5686757.65909641,377823.000968468 5686757.65909641,377824.027668784 5686769.0573121,377824.471288948 5686771.42328631,377824.974612037 5686775.27480212,377825.581424615 5686779.00143074,377825.630407432 5686779.25222276,377826.18246145 5686785.71058515,377829.233057786 5686796.57781887,377831.545557786 5686802.57781887,377831.545557786 5686802.57781887,377836.345640303 5686812.3054845,377840.626890303 5686819.3054845,377840.626890303 5686819.3054845,377847.353282914 5686828.29116548,377850.978282914 5686832.29116548,377852.700599818 5686834.04625263,377855.051235229 5686836.70891929,377857.484142848 5686839.30536223,377862.952892848 5686844.80536223,377862.952892848 5686844.80536223,377869.686775859 5686850.21221063,377877.705497875 5686857.14130645,377890.046530344 5686863.5692641,377892.365742884 5686864.45277363,377894.129456389 5686865.24397222,377894.129456389 5686865.24397222,377904.662578639 5686868.8378229,377915.678245555 5686870.42448905,377926.797449571 5686869.94937946,377937.637620798 5686867.42884086,377947.825789816 5686862.94959549,377957.011420141 5686856.66575728,377964.878468864 5686848.79352942,377971.156260501 5686839.60376559,377971.156260501 5686839.60376559,377973.375010501 5686835.60376559,377975.066906348 5686832.18392847,377978.977625886 5686827.94198421,377981.484173001 5686824.80335131,377983.913558476 5686822.09933965,377984.669362103 5686821.24180526,377986.185425879 5686819.48828571,377987.926419053 5686818.23633556,377989.293706174 5686817.31382859,377989.921927409 5686816.99473209,377989.873018893 5686816.89844345,377995.095714589 5686814.35114013,378003.770653794 5686807.98069055,378004.698589966 5686807,378004.875 5686807,378017.82150131 5686805.58658638,378030.158043911 5686801.41293679,378031.59311331 5686800.54545313,378041.188704049 5686795.65469523,378043.084469103 5686794.18364035,378044.434002771 5686793.52332062,378045.233912908 5686792.95104325,378045.931893418 5686792.61749202,378045.931893418 5686792.61749202,378046.775643418 5686792.11749202,378046.775643418 5686792.11749202,378056.930405571 5686784.5456087,378065.269249503 5686775.01060512,378066.675499503 5686773.01060512,378066.675499503 5686773.01060512,378067.710879139 5686771.22544555,378068.621616828 5686771.50978914,378070.328964472 5686772.15255531,378070.328964472 5686772.15255531,378071.629707797 5686772.53575925,378072.614108282 5686773.05358392,378083.73168367 5686776.37790347,378086.021479365 5686776.60036826,378086.217855703 5686776.66323325,378097.923439188 5686777.99341273,378109.663298452 5686777.01067847,378120.984829107 5686773.75291761,378131.451554502 5686768.34572595,378132.83400169 5686767.24255441,378133.275728824 5686767.16134463,378144.21991248 5686762.81009532,378147.862764532 5686760.44920264,378148.556893418 5686760.11749202,378148.556893418 5686760.11749202,378149.400643418 5686759.61749202,378149.400643418 5686759.61749202,378151.27530229 5686758.23757414,378154.103268256 5686756.40480024,378155.154383617 5686755.38222069,378158.072315767 5686753.23435965,378163.061983609 5686751.78430809,378173.126204049 5686746.65469523,378174.586891142 5686745.52124735,378178.843233609 5686744.28430809,378188.907454049 5686739.15469523,378197.831858343 5686732.22963429,378205.300122319 5686723.754583,378211.047534476 5686714.0299383,378214.870378653 5686703.40038876,378216.633154709 5686692.24269717,378216.633154709 5686692.24269717,378216.726904709 5686690.74269717,378216.726904709 5686690.74269717,378216.645742475 5686688.60917386,378227.027757499 5686682.98214966,378236.551161192 5686674.86971613,378244.185292614 5686664.95877101,378249.598264696 5686653.68018382,378249.598264696 5686653.68018382,378250.848264696 5686650.18018382,378250.848264696 5686650.18018382,378254.062179706 5686635.80595844,378254.499679706 5686631.30595844,378254.499679706 5686631.30595844,378254.729234386 5686623.00216732,378254.416734386 5686615.50216732,378253.356075385 5686606.49856926,378253.050996439 5686604.93656506,378252.60526229 5686600.90557797,378251.636894845 5686594.92825468,378250.886894845 5686591.42825468,378250.331105977 5686589.06835298,378249.668944511 5686586.49129214,378248.909831216 5686582.4426879,378248.654024391 5686581.15618521,378247.938225112 5686577.75130216,378247.715857559 5686576.12484234,378247.717303293 5686575.91665662,378247.71875 5686575.5,378247.71875 5686574.31249152,378247.737534969 5686572.50913452,378248.39564958 5686571.61381003,378250.086972119 5686567.80307527,378250.783169124 5686567.17477502,378251.960406524 5686565.56243201,378252.034074363 5686565.52578072,378253.415790902 5686564.48337878,378254.03959554 5686564.099499,378262.909901064 5686557.43656111,378264.933487426 5686555.226561,378265.24510196 5686554.98677176,378265.763339467 5686554.37955416,378266.671507815 5686553.74281608,378271.889194546 5686548.41174489,378272.022232248 5686548.53646773,378272.490982248 5686548.03646773,378273.453968001 5686546.81296766,378274.410590007 5686545.8355575,378274.816840007 5686545.33555751,378274.694827002 5686545.23642194,378277.147059306 5686542.12079289,378277.641602136 5686541.59510565,378277.947947396 5686541.10324239,378278.891109616 5686539.90492867,378279.078203741 5686539.55762228,378279.349962447 5686539.27034681,378280.020015725 5686538.20549869,378280.178482248 5686538.03646773,378280.865467086 5686537.29116548,378281.771717086 5686536.29116548,378281.771717086 5686536.29116548,378289.111109473 5686526.28042366,378289.588184921 5686525.2273648,378289.810851682 5686525.01027647,378290.497979114 5686524.22498798,378292.972080264 5686521.7936966,378299.768193168 5686511.64931356,378300.299443167 5686510.64931356,378300.299443167 5686510.64931356,378302.780656154 5686505.00791412,378303.295109949 5686504.19577969,378305.408136913 5686498.84630532,378305.516626195 5686498.60215308,378305.528653296 5686498.54119833,378307.443388493 5686493.6937321,378307.582809068 5686492.9597446,378307.950301597 5686491.92211864,378308.385479485 5686492.16072969,378314.207170076 5686496.95035064,378317.15747356 5686498.62266775,378317.530488227 5686498.92301766,378318.280488227 5686499.42301766,378318.280488226 5686499.42301766,378319.277926173 5686499.95504202,378321.075314038 5686501.4022915,378321.182831792 5686501.52701992,378324.324605925 5686504.08281167,378324.324779073 5686504.08297463,378324.781547456 5686504.63334686,378333.848959523 5686512.01008414,378344.174584471 5686517.48874125,378353.459109908 5686520.28659093,378355.699519231 5686521.15384615,378357.668269231 5686521.65384615,378359.426962812 5686521.87368285,378362.215339837 5686522.75493736,378365.566960279 5686523.09811944,378367.954373708 5686523.53219461,378370.998826888 5686523.80671278,378373.647177666 5686524.44179936,378385.481215174 5686524.88773271,378394.988365155 5686523.35316882,378398.235660894 5686523.09870308,378404.265772984 5686521.43700791,378404.471451269 5686521.4173832,378406.550548316 5686520.80740102,378409.249217489 5686520.06373896,378409.487854801 5686519.94563045,378415.408440581 5686518.20860145,378416.658440581 5686517.70860145,378416.658440581 5686517.70860145,378417.205932556 5686517.43318833,378417.718233609 5686517.28430809,378420.19869325 5686516.02004746,378420.856221764 5686515.80625902,378422.637998175 5686514.7767629,378427.782454049 5686512.15469523,378429.550356832 5686510.7828575,378431.723905632 5686509.52699844,378435.162318673 5686506.42814917,378436.706858343 5686505.22963429,378437.535289576 5686504.28952328,378441.047459662 5686501.12420091,378448.418885996 5686490.96557208,378448.624675583 5686490.50245318,378449.381599944 5686489.4951906,378450.392909613 5686487.45810343,378450.536892713 5686487.21127526,378451.314091539 5686486.1780779,378456.699493191 5686474.38796509,378459.427104533 5686461.71636506,378459.583354533 5686460.21636506,378459.698995495 5686458.98272879,378459.782149616 5686457.98487934,378459.886495495 5686456.98272879,378460.033802457 5686455.21504524,378460.118158214 5686454.54019919,378460.724172603 5686451.94208407,378460.849172603 5686450.94208408,378461.105245495 5686448.48272879,378461.188399616 5686447.48487934,378461.292745495 5686446.48272879,378461.417745495 5686444.98272879,378461.407762427 5686444.98189687,378461.570654709 5686443.24269717,378461.633154709 5686442.24269717,378461.633154709 5686442.24269717,378461.586212728 5686439.2200781,378461.831803564 5686436.60044252,378461.886495495 5686435.98272879,378461.985745646 5686434.79172697,378462.126964899 5686433.28538828,378462.358481413 5686430.97022314,378462.448995495 5686429.98272879,378462.52254423 5686429.10014397,378462.550689799 5686428.8299465,378462.599172603 5686428.44208407,378462.945654709 5686424.74269717,378463.039404709 5686423.24269717,378463.039404709 5686423.24269717,378462.760497768 5686416.45785223,378463.026022923 5686413.79197347,378462.913720164 5686412.2536499,378462.914404709 5686412.24269717,378462.848800117 5686410.88732273,378463.185646724 5686410.79501182,378463.425537409 5686410.74516441,378463.706274599 5686410.65233669,378468.916223591 5686409.22457959,378470.919633681 5686408.26718909,378476.4382307 5686406.44242641,378480.856071903 5686403.74435199,378482.244813679 5686403.05342394,378482.268336301 5686403.09458853,378482.983655565 5686402.68583466,378485.315324363 5686401.52578072,378494.147855443 5686394.86229565,378501.606683948 5686386.69029983,378501.686676282 5686386.56132124,378502.481683948 5686385.69029983,378504.660033884 5686382.17795703,378506.948682517 5686379.0269384,378507.797555292 5686377.62190759,378508.638023677 5686376.50059274,378514.04678878 5686364.49587762,378516.706803564 5686351.60044252,378517.064464899 5686347.78538828,378517.167259982 5686346.75743745,378517.863053564 5686343.60044252,378518.033214899 5686341.78538828,378518.264731413 5686339.47022314,378518.368139354 5686338.19706551,378518.488053564 5686337.10044252,378518.581803564 5686336.10044252,378518.634623593 5686335.42418208,378518.708354533 5686334.71636506,378518.712933798 5686334.42156822,378518.726904709 5686334.24269717,378518.758154709 5686333.74269717,378518.723512761 5686333.74053205,378518.872640897 5686324.14019089,378517.245233236 5686314.11876861,378525.327054795 5686308.20547945,378526.844298538 5686306.88133946,378528.391232407 5686305.55539614,378528.391232408 5686305.55539614,378530.433059692 5686303.49763807,378530.534230962 5686303.42670452,378531.236219692 5686302.94402129,378532.885980675 5686301.34826067,378534.491385764 5686300.20828228,378539.198661458 5686295.6800569,378539.59190745 5686295.45819816,378542.138030614 5686293.22902237,378543.05340656 5686292.67568768,378546.266262528 5686289.61468242,378548.850854898 5686287.35182616,378549.385775754 5686286.6426082,378549.497957834 5686286.53572824,378550.065942003 5686286.35193674,378555.043688699 5686283.49137127,378555.228753112 5686283.44222475,378562.484597062 5686280.09149011,378563.855476946 5686279.63797484,378574.844866515 5686273.16245682,378578.195086568 5686270.06962916,378579.925374024 5686268.55473194,378580.485185386 5686268.16609236,378581.978751324 5686267.29894701,378582.828406369 5686266.63580161,378583.728884702 5686266.36032462,378584.098168333 5686266.16106896,378584.167976946 5686266.13797484,378584.461319104 5686265.96512243,378589.118933177 5686263.45199732,378593.626204049 5686261.15469523,378602.550608343 5686254.22963429,378610.018872319 5686245.754583,378615.766284476 5686236.0299383,378616.636689569 5686233.60974705,378620.40138351 5686226.03082854,378620.919053422 5686224.56917231,378621.027280372 5686224.48588919,378622.44197345 5686222.82818932,378624.585394632 5686220.77008529,378625.836940187 5686218.85005723,378629.13146682 5686214.9896182,378630.965230287 5686211.61708631,378632.504951879 5686209.64043998,378643.226835616 5686206.06846854,378647.601835616 5686204.06846854,378658.026050605 5686197.9662481,378667.016792889 5686189.89978013,378669.778875653 5686186.86690494,378671.718716016 5686184.82496771,378671.718716016 5686184.82496771,378678.666192883 5686175.98161798,378679.80628052 5686173.78205631,378680.150643418 5686173.61749202,378680.150643418 5686173.61749202,378680.994393418 5686173.11749202,378680.994393418 5686173.11749202,378689.016905355 5686167.42621575,378696.001741737 5686160.50065555,378697.445240391 5686158.50218896,378699.302967086 5686156.79116549,378699.302967086 5686156.79116549,378700.209217086 5686155.79116548,378700.209217086 5686155.79116548,378702.179269768 5686153.10406446,378702.717101682 5686152.51027647,378703.592101682 5686151.51027647,378703.510176204 5686151.43859168,378706.697738223 5686147.23085638,378708.05211086 5686145.72049752,378708.888508611 5686144.33893402,378710.261182517 5686142.5269384,378711.167432517 5686141.0269384,378711.054203941 5686140.95852946,378716.72558217 5686131.8379137,378716.741039557 5686131.79819963,378717.791067693 5686130.31047509,378722.723399662 5686118.84168434,378723.150942352 5686116.70737561,378723.581311977 5686115.57589731,378724.175061977 5686113.57589731,378724.175061977 5686113.57589731,378726.192922603 5686103.94208407,378726.255422603 5686103.44208407,378726.442199357 5686101.44787004,378726.442922603 5686101.44208407,378726.698995495 5686098.98272879,378726.903726676 5686096.52595461,378727.004699357 5686095.44787004,378727.005422603 5686095.44208407,378727.206803564 5686093.60044252,378727.394303564 5686091.60044252,378727.400868624 5686090.21980753,378729.70932404 5686088.96356994,378740.185851682 5686079.51027647,378741.060851682 5686078.51027647,378741.090535847 5686078.47030038,378741.225854898 5686078.35182616,378743.537483929 5686075.28698248,378743.8728117 5686074.90375074,378744.427967086 5686074.29116548,378744.427967086 5686074.29116548,378747.349409706 5686070.23298961,378748.636182517 5686068.52693839,378748.942132528 5686068.02053838,378752.28517958 5686063.3767118,378752.554464219 5686062.73861656,378752.947238098 5686062.21687722,378754.892621556 5686057.97059332,378756.525230487 5686055.3635956,378760.318371987 5686045.5535046,378760.55763351 5686045.03082853,378761.08888351 5686043.53082853,378764.119716025 5686029.43293325,378764.192922603 5686029.44208407,378764.297348442 5686028.60667736,378764.323995495 5686028.48272879,378764.357685096 5686028.07845357,378764.519303564 5686026.60044252,378764.613053564 5686025.60044252,378764.667745495 5686024.98272879,378764.750899616 5686023.98487934,378764.855245495 5686022.98272879,378764.97772926 5686021.5129236,378765.036478481 5686021.17326004,378765.192728481 5686019.17326004,378764.712117656 5686005.60581829,378764.087602098 5686003.27845524,378764.760311183 5686002.65652859,378764.885498412 5686002.54347771,378764.901640586 5686002.52586807,378767.053482248 5686000.53646773,378767.522232248 5686000.03646773,378767.794136784 5685999.6963826,378768.368058548 5685999.28125337,378768.42433033 5685999.34455912,378769.052518591 5685998.78616956,378770.542014955 5685997.70878667,378771.700012641 5685996.49550307,378780.743480126 5685993.44578452,378791.8665466 5685986.74668806,378801.287904958 5685977.8114484,378802.076355126 5685976.88190715,378802.80938194 5685976.19199956,378803.326001028 5685975.69994482,378808.513501028 5685970.69994482,378808.737049828 5685970.48335473,378811.653086552 5685967.64338853,378813.260840081 5685966.17344245,378814.993147565 5685964.86398167,378819.141493108 5685961.42490647,378820.680900257 5685960.02743048,378820.901908995 5685959.90823475,378823.912518014 5685959.10856503,378834.890522105 5685953.60584652,378844.518299828 5685945.98335473,378848.112049828 5685942.48335473,378848.066158661 5685942.43623434,378854.623970899 5685935.88058267,378861.348710525 5685925.63890699,378861.678801755 5685924.8038634,378863.60313146 5685921.83281573,378864.10313146 5685920.83281573,378864.555712231 5685919.6562937,378865.094427308 5685918.78767659,378865.213754785 5685918.48045524,378867.608786158 5685914.46603257,378868.077536158 5685913.46603257,378869.165152867 5685910.57513817,378869.94688146 5685909.33281573,378870.44688146 5685908.33281573,378874.552846828 5685897.70008024,378874.891592625 5685895.82004503,378875.090463677 5685895.36055082,378876.215463677 5685891.86055082,378876.215463677 5685891.86055082,378878.770854533 5685879.71636506,378879.239604533 5685875.21636506,378879.444196981 5685872.76019745,378879.633154709 5685870.74269717,378879.633643026 5685870.7348841,378879.74037305 5685869.73001702,378879.868664309 5685868.26383119,378880.050553564 5685866.60044252,378880.238053564 5685864.60044252,378880.290873593 5685863.92418208,378880.364604533 5685863.21636506,378880.480245495 5685861.98272879,378880.559976677 5685861.02595461,378880.68865159 5685859.6520935,378880.755425319 5685859.06256273,378881.161675319 5685855.06256273,378881.161675319 5685855.06256273,378881.161675319 5685846.58181046,378881.206803564 5685846.10044252,378881.351904709 5685844.24269717,378881.383154709 5685843.74269717,378881.383154709 5685843.74269717,378880.67402079 5685830.07854529,378880.049842602 5685827.91108609,378878.259056409 5685817.75526539,378877.977806409 5685816.75526538,378874.658656173 5685808.01009282,378874.557579977 5685807.52777648,378869.982610536 5685796.76222945,378867.906156209 5685793.70815317,378867.688303869 5685792.9770032,378867.265578075 5685792.19961426,378866.185489212 5685789.23310731,378860.364952091 5685779.49181208,378852.81440755 5685771.02063966,378843.803937489 5685764.12260266,378842.564372905 5685763.5023179,378842.501604784 5685763.43045671,378836.333689154 5685758.61063122,378835.290188693 5685757.65855828,378834.599378598 5685757.25538016,378833.555058031 5685756.43931146,378832.01932966 5685755.65186093,378831.907011773 5685755.57698234,378831.907011774 5685755.57698234,378829.776251417 5685754.44045408,378824.360019246 5685751.27937361,378823.034923463 5685750.84469087,378821.54734454 5685750.05122976,378810.309900209 5685746.64880539,378806.160818512 5685746.24088685,378806.183067702 5685746.08236137,378802.620567702 5685745.58236137,378802.620567702 5685745.58236137,378794.896531841 5685745.04296711,378793.640025358 5685744.91430979,378791.704589973 5685744.48466488,378780.776064765 5685744.09179551,378778.011169716 5685744.5,378775.34375 5685744.5,378774.331260387 5685744.59051271,378772.872400209 5685744.14880539,378772.619267546 5685744.12391856,378771.354298877 5685743.7272045,378770.584865243 5685743.64899291,378768.630544417 5685743.07715324,378763.681500867 5685742.60614623,378762.920626292 5685742.46780539,378759.351818049 5685742.14600616,378758.962579723 5685742.033352,378747.523116618 5685741.00103186,378736.096548767 5685742.16745725,378734.606338054 5685742.61776609,378732.379410671 5685742.85582514,378720.269523054 5685746.86202516,378709.280133485 5685753.33754318,378709.22462373 5685753.38878821,378706.19692596 5685755.03643006,378704.970337347 5685756.14321874,378699.837063399 5685759.28865041,378697.176956001 5685761.78279137,378696.959308011 5685761.85099138,378691.870814747 5685764.67127677,378690.39790446 5685765.400501,378690.39790446 5685765.400501,378689.58540446 5685765.900501,378689.602593435 5685765.92843308,378686.353713423 5685767.72911717,378684.3497119 5685769.4465256,378680.739998676 5685771.70105299,378679.458748676 5685772.70105299,378679.458748676 5685772.70105299,378678.406830535 5685773.67833603,378678.16534344 5685773.82431232,378674.856619359 5685776.97665463,378671.915782914 5685779.70883452,378671.4535599 5685780.2188737,378668.73626099 5685782.80774365,378668.24027845 5685783.39557481,378668.157898318 5685783.48972353,378662.43260176 5685791.2000636,378662.410519235 5685791.23539564,378661.733890384 5685792.09507133,378656.826161565 5685801.20538174,378654.845604472 5685807.15314028,378654.661405339 5685807.62614885,378650.207672737 5685809.3215261,378645.552496888 5685810.55777525,378636.137913699 5685814.90541147,378635.262913699 5685815.40541147,378634.290907651 5685816.08021024,378632.793219186 5685816.79592627,378631.082023054 5685817.36202516,378628.822481722 5685818.69346405,378627.380606582 5685819.38250798,378626.536856582 5685819.88250798,378626.536856582 5685819.88250798,378625.176215335 5685820.84203323,378620.092633485 5685823.83754318,378618.490948039 5685825.31617353,378615.552498676 5685827.20105299,378614.271248676 5685828.20105299,378612.868489354 5685829.52724449,378610.272855003 5685831.35768781,378609.739921226 5685831.87727007,378608.446346597 5685832.68003912,378603.936383485 5685835.33754318,378602.250679396 5685836.89373715,378599.88409344 5685838.32431232,378599.099956155 5685839.07138856,378590.733998846 5685845.34897823,378585.414353045 5685851.04130925,378583.845398318 5685852.48972353,378583.407898318 5685852.98972353,378581.994432069 5685855.01454958,378577.772697069 5685859.53205206,378572.044306833 5685868.35068644,378571.838173476 5685868.73870217,378571.77635176 5685868.7000636,378571.46385176 5685869.2000636,378571.46385176 5685869.2000636,378570.463716367 5685871.21772283,378569.49061854 5685872.66718427,378568.99061854 5685873.66718427,378569.198113776 5685873.77093189,378566.227854681 5685879.76309127,378563.15844897 5685891.14605957,378562.374142008 5685902.90948091,378563.905215283 5685914.59917866,378563.945426146 5685914.71771567,378561.624393074 5685912.84861842,378552.559120642 5685908.08000872,378545.581045653 5685898.60214456,378542.900060347 5685896.21194793,378539.835311923 5685892.65890761,378537.429913119 5685890.76045454,378536.693251013 5685889.9892428,378534.718242295 5685888.60525161,378533.157729507 5685879.79347704,378529.431659302 5685869.72505489,378526.596792458 5685864.92656496,378524.937543479 5685861.49418064,378524.856349961 5685861.388558,378524.724425222 5685861.03796298,378523.58377914 5685859.19247,378523.298992842 5685858.4136909,378522.655679579 5685855.65878091,378521.089873527 5685852.37261397,378520.9041998 5685851.86486898,378520.609791466 5685851.36506275,378517.110911015 5685844.02194049,378509.208525032 5685833.83799188,378507.405171181 5685832.33247121,378506.959014286 5685831.80778024,378505.473906323 5685830.6354288,378503.821630274 5685828.75886581,378499.559475357 5685825.78253248,378499.313261773 5685825.57698234,378498.563261773 5685825.07698234,378498.558768469 5685825.0837223,378495.161282336 5685822.7112015,378495.250761773 5685822.57698234,378494.500761773 5685822.07698234,378494.500761774 5685822.07698234,378493.597004531 5685821.59492642,378492.660982755 5685820.86740032,378492.140510344 5685820.60174641,378492.079044118 5685820.55882353,378490.204044118 5685819.55882353,378490.181183176 5685819.6016878,378489.101008897 5685819.0503569,378488.988754928 5685818.9655184,378487.108124264 5685818.03317025,378482.587520607 5685815.72581254,378482.264212419 5685815.63173527,378478.954541551 5685813.99092107,378475.860918869 5685813.12366841,378475.502169041 5685812.92857784,378474.345919041 5685812.42857784,378473.591766921 5685812.19023132,378470.340159184 5685810.56743469,378464.992636409 5685809.04278175,378458.97046355 5685807.18721504,378454.738472604 5685806.76417854,378454.099294417 5685806.57715324,378445.814130912 5685805.78864328,378443.443794055 5685805.31731364,378432.253276928 5685805.2110421,378428.922780543 5685805.80777847,378424.918847315 5685805.79636322,378423.364853639 5685806.11415208,378422.247067112 5685806.02842538,378409.515017138 5685807.79810529,378406.578009806 5685808.87939861,378396.050773054 5685812.36202516,378394.159768006 5685813.47630337,378393.185309419 5685813.79139855,378391.935309419 5685814.29139855,378382.237494848 5685819.23387627,378378.574174462 5685822.03611347,378377.967545951 5685822.34530477,378369.043141657 5685829.27036571,378361.574877681 5685837.745417,378355.827465523 5685847.4700617,378352.004621347 5685858.09961124,378350.902831554 5685865.07351508,378350.692662324 5685865.04359516,378349.985849542 5685870.00852397,378348.7331974 5685874.41345457,378347.758789978 5685877.21175281,378347.525090354 5685877.62721881,378346.315910163 5685877.24506264,378340.696880242 5685876.66971397,378340.380544417 5685876.57715324,378334.481835622 5685876.01576533,378333.222751029 5685875.71793302,378326.862945037 5685875.22453404,378319.25 5685874.5,378318.0625 5685874.5,378306.456618434 5685875.63317137,378304.441117635 5685876.23898779,378303.348160671 5685876.35582514,378300.656668531 5685877.24622613,378291.427526409 5685879.77542041,378281.786856582 5685884.38250798,378280.943106582 5685884.88250798,378280.943106582 5685884.88250798,378271.335057685 5685891.95489787,378269.708212699 5685893.74704021,378268.621348936 5685894.56343889,378261.889680078 5685901.91523231,378253.885533457 5685906.73631912,378250.616477734 5685909.66276463,378248.90625 5685909.5,378247.71875 5685909.5,378236.747723614 5685910.51155554,378233.486806621 5685911.43453263,378231.934798731 5685911.5826168,378220.997809419 5685914.79139855,378219.747809419 5685915.29139855,378219.747809419 5685915.29139855,378216.462115851 5685916.94425043,378215.935284758 5685917.1622879,378214.434057997 5685917.64806326,378213.591226335 5685918.13241397,378211.239334504 5685919.10578201,378207.30359047 5685921.74573444,378203.600182905 5685923.87397448,378202.765108728 5685924.62163022,378199.549547146 5685926.64787143,378199.549547147 5685926.64787143,378198.299547147 5685927.64787143,378198.299547147 5685927.64787143,378189.121284722 5685936.7793473,378182.220677787 5685947.50390673,378182.045468976 5685947.52013032,378180.511377027 5685947.95628226,378179.379078188 5685948.06334551,378168.531766391 5685951.21569191,378158.467545951 5685956.34530477,378156.124893031 5685958.16313078,378155.103713423 5685958.72911717,378152.309148623 5685961.12403009,378149.543141657 5685963.27036571,378148.736489089 5685964.1857621,378145.8965485 5685966.6195616,378140.581371466 5685973.47065024,378140.495828194 5685973.55530235,378140.099170374 5685973.86473539,378139.544653626 5685974.49656784,378138.151918961 5685975.87479337,378136.481425453 5685976.48012859,378126.137675453 5685981.48012859,378126.137675453 5685981.48012859,378115.710327539 5685987.90953524,378106.806144543 5685996.32276169,378099.796299445 5686006.36910063,378094.972999303 5686017.62976802,378092.537304526 5686029.63536027,378092.193554526 5686033.13536027,378092.256836574 5686045.47668727,378094.84382494 5686057.54399219,378096.089521947 5686060.35426616,378097.126227984 5686065.02152647,378102.28181264 5686076.36438264,378109.668954347 5686086.39785544,378111.679556709 5686088.19038111,378112.255051206 5686090.06954682,378112.255051206 5686090.06954682,378117.342309051 5686101.93671563,378124.850689549 5686112.44072012,378129.756939549 5686117.94072012,378129.756939548 5686117.94072012,378139.095593642 5686126.41811911,378150.000078066 5686132.75601888,378161.988545602 5686136.67436038,378167.043594189 5686137.20862895,378167.775705583 5686137.42284676,378170.929305485 5686137.72297903,378173.283312044 5686139.00310359,378174.426402972 5686139.63220604,378174.521767939 5686139.70622614,378183.006692037 5686144.32869292,378183.791506063 5686144.67749915,378185.435330959 5686145.57142216,378186.059145529 5686145.84117981,378186.440328447 5686146.61018638,378192.281965243 5686153.99530037,378192.413531134 5686154.18104045,378192.413531134 5686154.18104045,378192.54531074 5686154.32822701,378194.207343764 5686156.42940237,378195.017328168 5686157.10135574,378196.019271166 5686158.30926235,378196.264128741 5686158.51465843,378197.974316826 5686160.56295615,378200.576405756 5686163.77241257,378200.824297808 5686163.97638744,378203.417330742 5686167.08207124,378212.060168336 5686174.19107128,378215.707534879 5686176.19094762,378220.635283202 5686180.19960578,378226.919114586 5686183.68531783,378230.803864518 5686186.39530494,378235.369022803 5686188.18725527,378239.60890546 5686190.44877024,378240.315725558 5686190.66277814,378241.346250518 5686191.22078536,378252.132532448 5686194.64484993,378254.445032448 5686195.14484993,378254.445032448 5686195.14484993,378255.371847678 5686195.24390174,378257.377599791 5686195.85119461,378269.0625 5686197,378271.03125 5686197,378281.673740887 5686196.04860191,378291.978723591 5686193.22457959,378301.619393418 5686188.61749202,378301.619393418 5686188.61749202,378302.463143418 5686188.11749202,378302.463143418 5686188.11749202,378303.256718141 5686187.55786252,378304.150643418 5686187.11749202,378304.994393418 5686186.61749202,378304.994393418 5686186.61749202,378306.37071544 5686185.67823676,378310.4893487 5686183.56273895,378319.369579626 5686176.63526461,378324.226593568 5686171.10104222,378325.456479778 5686170.06675822,378327.023086172 5686168.04444268,378327.557397254 5686167.46511059,378327.851602177 5686166.97492018,378333.249102472 5686160.00734443,378338.74513351 5686148.53082853,378339.27638351 5686147.03082853,378339.516861003 5686145.96588274,378340.73818421 5686143.17576297,378343.255422603 5686131.94208407,378343.255422603 5686131.94208407,378343.317922603 5686131.44208407,378343.573995495 5686128.98272879,378343.64754423 5686128.10014397,378343.739604533 5686127.21636505,378343.764731413 5686126.97022314,378344.264731413 5686121.97022314,378344.264731413 5686121.97022314,378344.274887638 5686110.13222678,378343.078871214 5686104.13242761,378343.104861821 5686102.65121379,378341.852922473 5686096.34824333,378341.836197064 5686095.81056796,378341.478852803 5686094.46496512,378340.612548682 5686090.10350041,378340.383396199 5686089.37021247,378340.380157902 5686089.05579863,378340.224503146 5686088.41552969,378340.05611435 5686082.25726701,378339.816894469 5686081.31368851,378339.421695955 5686071.46917769,378336.439833931 5686059.5531993,378334.745770587 5686056.04879669,378330.201857814 5686046.18621072,378325.142116805 5686039.48786053,378325.52683558 5686038.54086047,378326.841994115 5686035.73518893,378326.981378739 5686035.48212181,378327.744393418 5686035.11749202,378327.744393418 5686035.11749202,378327.858641822 5686035.04978926,378329.25738518 5686034.55913658,378330.792270128 5686034.15152573,378337.922332482 5686033.00065126,378341.687848842 5686031.59306344,378345.428700321 5686031.30820919,378347.788886508 5686030.76056234,378351.986669321 5686030.34711682,378352.353917565 5686030.23571329,378355.690201269 5686029.9173832,378356.061788788 5686029.80836387,378363.318831118 5686028.98880215,378365.086795369 5686028.36863378,378367.263978727 5686028.02595069,378372.420664412 5686026.0947433,378372.897046354 5686026.04190954,378380.282004811 5686023.50111123,378385.546481495 5686022.07919844,378390.171446883 5686021.28835561,378398.79742894 5686017.88935639,378402.003442003 5686016.85193674,378403.29756351 5686016.10824296,378406.230476946 5686015.13797484,378407.571203584 5686014.3479492,378409.464225985 5686014.21861351,378420.288242584 5686011.39808477,378425.098165519 5686009.12421498,378425.994984548 5686010.49172937,378426.338734548 5686010.99172937,378426.338734548 5686010.99172937,378426.716791326 5686011.44305532,378426.75 5686011.5,378427.125 5686012,378427.160818034 5686011.97313647,378433.647939148 5686019.71749193,378441.039453961 5686025.73782703,378441.305527045 5686026.18216112,378441.584439473 5686027.02382333,378444.129057211 5686031.44620916,378445.168506962 5686037.0975745,378446.976387614 5686041.88109574,378447.293701318 5686042.89649959,378447.42914556 5686043.26889358,378447.90983673 5686044.80935034,378447.964407252 5686046.69661345,378450.262451318 5686057.39649959,378450.574951318 5686058.39649959,378452.436126491 5686063.08708748,378452.628450515 5686063.73023283,378452.880132208 5686064.20608362,378453.884596499 5686066.73756379,378457.521229266 5686072.98093604,378458.116075298 5686074.10560248,378458.328754351 5686074.36729535,378458.401234548 5686074.49172937,378458.744984548 5686074.99172937,378458.803525845 5686074.95148223,378465.518603033 5686083.21410974,378468.894114969 5686086.01381834,378469.34812441 5686086.47748756,378469.34812441 5686086.47748756,378471.096722031 5686087.92644935,378474.541820716 5686091.47104346,378483.195790578 5686097.67451651,378485.806007041 5686098.91690257,378495.364666549 5686103.58330209,378496.165693331 5686103.80714234,378495.951161565 5686104.20538174,378495.641981302 5686105.1338728,378494.494401965 5686107.76478327,378494.17752199 5686109.27895625,378492.888120439 5686112.20621023,378492.656172009 5686113.32317709,378490.887438023 5686117.92410269,378490.293688023 5686119.92410269,378490.293688023 5686119.92410269,378490.038215987 5686121.24512057,378489.226145426 5686123.46585501,378489.218491316 5686123.48292164,378489.216171835 5686123.49312936,378488.217241206 5686126.22486199,378486.272775927 5686131.36470355,378485.457342653 5686135.77385019,378485.35449995 5686135.98955398,378483.381837077 5686144.91604782,378476.857968976 5686145.52013032,378466.215564864 5686148.54583242,378456.309675637 5686153.47421928,378447.477144557 5686160.13770435,378445.712019665 5686162.07159963,378438.351749789 5686157.94462758,378426.679442823 5686154.24916024,378422.976888441 5686153.86941514,378420.222751029 5686153.21793302,378418.089806525 5686153.05245743,378408.871753294 5686152.17516313,378408.536794417 5686152.07715324,378397.21875 5686151,378396.03125 5686151,378383.08474869 5686152.41341362,378370.748206089 5686156.5870632,378368.694212555 5686157.8286797,378367.082023054 5686158.36202516,378356.092633485 5686164.83754318,378354.502666276 5686166.30535559,378345.968279381 5686169.3662765,378341.472881069 5686172.1064123,378340.825413699 5686172.40541147,378340.076410342 5686172.83341339,378337.487854058 5686174.13613328,378337.197664211 5686174.31134225,378334.815997229 5686175.47667938,378326.726924277 5686181.26382112,378325.754150764 5686182.23964366,378325.015992185 5686182.75718392,378322.841023348 5686184.97941655,378320.912514265 5686186.45515923,378313.44788914 5686194.77950248,378313.067081186 5686195.40852183,378312.97366441 5686195.49980269,378310.004319798 5686200.08428963,378308.981127681 5686201.245417,378306.153864883 5686206.02915713,378305.74061854 5686206.66718427,378305.541955708 5686207.06450993,378303.233715524 5686210.9700617,378300.164721798 5686219.50350417,378299.063654724 5686222.39936232,378298.814694849 5686223.91576723,378298.495350338 5686224.65831566,378297.800841321 5686228.12533004,378297.668811462 5686228.46525504,378296.016502117 5686232.52633404,378295.93911819 5686232.75848582,378295.377433934 5686234.12014462,378295.377433934 5686234.12014462,378293.627932165 5686239.06730913,378293.357184263 5686239.53989804,378289.928443591 5686248.75526538,378289.365943591 5686250.75526538,378288.570517129 5686255.03356946,378288.561292023 5686255.07311949,378288.192121347 5686256.09961124,378287.919782994 5686257.82340782,378286.932077397 5686262.05791592,378286.869577397 5686262.55791593,378286.556484802 5686265.90080326,378286.543196436 5686265.89955748,378286.355696436 5686267.89955748,378286.301004505 5686268.51727121,378286.216197542 5686269.53495476,378286.213327397 5686269.55791593,378286.198533846 5686269.699995,378277.376371744 5686270.44800154,378276.790815717 5686270.61095001,378272.982509113 5686270.95139809,378270.038941888 5686271.75806607,378268.61599869 5686271.91341362,378264.965834824 5686273.14832241,378263.801031729 5686273.46753012,378263.232968976 5686273.52013032,378252.590564864 5686276.54583242,378252.127953088 5686276.77599144,378248.780120358 5686277.7535677,378238.681421946 5686282.92798751,378229.737518657 5686289.91117618,378222.26829995 5686298.45337156,378216.540911415 5686308.24905176,378212.760199991 5686318.9478625,378212.260199991 5686320.9478625,378212.160719698 5686321.35172794,378210.446585784 5686328.4160374,378209.240187516 5686332.49923154,378209.158255013 5686332.77904163,378208.881223643 5686333.73373435,378203.781766391 5686335.21569191,378196.357012929 5686339,378195.78125 5686339,378185.138759113 5686339.95139809,378184.795091371 5686340.04557829,378179.0625 5686339.5,378177.875 5686339.5,378165.392523102 5686340.81279722,378153.456278236 5686344.69374098,378150.35466243 5686346.48582972,378150.083746888 5686346.55777525,378149.912122419 5686346.6370311,378146.715564864 5686347.54583242,378136.809675637 5686352.47421928,378130.977557062 5686356.87411719,378129.826006776 5686357.60976791,378129.090400571 5686358.29783583,378127.977144557 5686359.13770435,378126.719995225 5686360.51505457,378121.795121559 5686365.12166003,378115.270067483 5686373.9730616,378114.363817483 5686375.4730616,378109.032787365 5686386.83526913,378108.041070634 5686391.08733387,378106.49793905 5686395.26402874,378104.883738308 5686405.29322795,378104.791645467 5686405.28363495,378104.479145467 5686408.28363494,378104.273095291 5686410.75730283,378104.210595291 5686411.75730283,378104.460625361 5686411.77292971,378104.011629082 5686417.18125126,378105.5086817 5686429.37032847,378106.483657896 5686432.242566,378107.648244037 5686435.97468073,378102.5 5686435.5,378101.71875 5686435.5,378100.140074503 5686435.62021125,378098.9375 5686435.5,378097.375 5686435.5,378096.532809999 5686435.58222948,378094.464048687 5686435.09287082,378092.997400209 5686434.64880539,378091.567748734 5686434.50824866,378090.516878863 5686434.2870129,378090.516878863 5686434.2870129,378084.126208825 5686433.62160381,378083.974294417 5686433.57715324,378080.775310503 5686433.27270171,378078.172012418 5686433.00164121,378077.613969466 5686432.70398616,378076.813261773 5686432.07698234,378075.313261773 5686431.07698234,378075.313261774 5686431.07698234,378073.300528278 5686430.00340854,378065.135687228 5686425.43226216,378062.813099321 5686424.69792192,378061.979713227 5686424.26993765,378055.001087444 5686422.22797248,378053.476704246 5686421.74600324,378053.287766154 5686421.72664994,378051.068044417 5686421.07715324,378044.546690613 5686420.45650738,378042.728578699 5686420.04550051,378032.268467407 5686419.54753137,378021.881091886 5686420.87581271,378016.891153862 5686422.42999057,378014.45719621 5686419.01966198,378014.473765452 5686419.00827063,378014.130015452 5686418.50827063,378013.408422281 5686417.48183711,378012.689672281 5686416.48183711,378012.660771406 5686416.50260961,378010.295438955 5686413.18843491,378008.407105479 5686411.46554999,378005.599698655 5686408.12664379,378002.807542065 5686405.87815699,378002.658281672 5686405.27813361,378002.537271275 5686404.51946003,378002.319601725 5686403.91664792,378001.509047328 5686400.65823767,378000.936226672 5686399.46620892,377997.463887609 5686390.57638875,377997.186543718 5686390.13234884,377993.425308938 5686380.01567813,377990.519433217 5686375.16625725,377990.256324968 5686374.57196058,377989.591228767 5686373.61723916,377987.761869038 5686370.56434354,377986.35695907 5686368.97456259,377983.692357771 5686365.1496243,377980.052548883 5686361.61563751,377979.648463586 5686360.77474379,377979.631521291 5686357.75671207,377979.661743092 5686357.36987301,377979.800553564 5686356.10044252,377979.988053564 5686354.10044252,377980.133154709 5686352.24269717,377980.164404709 5686351.74269717,377980.164404709 5686351.74269717,377980.164404709 5686344.25730283,377980.008154709 5686341.75730283,377980.008154709 5686341.75730283,377978.371241693 5686331.09946776,377975.701958091 5686323.36591394,377974.053316086 5686315.95468901,377968.886638814 5686304.60317659,377961.484757713 5686294.56507198,377952.167498583 5686286.27410881,377950.108550497 5686285.09814125,377947.319310436 5686282.30449775,377945.843331616 5686281.29914387,377943.115449585 5686278.20904762,377942.50961659 5686277.42349735,377942.1745247 5686277.14318464,377939.609879151 5686274.23799976,377930.690005005 5686267.32630444,377920.633748104 5686262.20698962,377909.796808551 5686259.06113073,377898.5625 5686258,377898.21875 5686258,377894.21875 5686257.5,377892.28125 5686257.5,377881.638759113 5686258.45139809,377876.556073103 5686259.84427949,377871.743182592 5686260.6918947,377871.697717158 5686260.70942128,377870.328885159 5686260.91717613,377858.782694968 5686265.21478537,377848.357695104 5686271.78009807,377847.02882866 5686273.06278234,377843.640842367 5686275.02598664,377840.180629417 5686278.15547427,377840.174547147 5686278.14787143,377838.924547147 5686279.14787143,377838.991214461 5686279.23120558,377838.955557203 5686279.26345473,377835.845022471 5686281.527542,377828.122362464 5686289.76536579,377824.383122888 5686295.66825783,377823.558077582 5686296.77420516,377823.217682564 5686297.50806196,377822.079890051 5686299.30422031,377821.747704321 5686300.14520297,377820.49061854 5686302.16718427,377819.781681905 5686303.58505754,377818.05311854 5686306.66718427,377817.55311854 5686307.66718427,377815.330365766 5686313.37922188,377814.342888867 5686314.96469967,377810.176942326 5686326.05979658,377810.167740165 5686326.11633596,377806.610252117 5686333.52633404,377806.110252117 5686335.02633404,377805.839142079 5686336.31335692,377805.064867551 5686337.7451242,377801.601488028 5686348.93043951,377800.882738028 5686352.43043951,377800.912196992 5686352.43648911,377799.526600338 5686355.65831566,377797.074446436 5686367.89955748,377796.80394407 5686370.78491605,377796.791645467 5686370.78363494,377796.635395467 5686372.28363494,377796.543730068 5686373.38409386,377793.31736649 5686380.46917147,377792.78611649 5686381.96917147,377792.11064063 5686385.03397965,377790.642193022 5686388.51360413,377788.304345291 5686401.75730283,377788.304345291 5686401.75730283,377788.28836736 5686402.01294973,377788.177813823 5686403.27641872,377788.072895467 5686404.28363494,377788.011946436 5686404.89955748,377787.68397999 5686408.39786624,377787.574446436 5686409.39955748,377787.547481292 5686409.68718568,377787.479145467 5686410.28363494,377787.322895467 5686411.78363494,377787.261946436 5686412.39955748,377787.074446436 5686414.39955748,377787.019754505 5686415.01727121,377786.769754505 5686418.01727121,377786.878782577 5686429.15255025,377787.21236766 5686430.83570257),(378241.097744652 5686581.54216122,378241.116955388 5686581.55236693,378240.803657309 5686581.94224898,378241.097744652 5686581.54216122)) geos-3.4.2/tests/xmltester/tests/general/0000755000175000017500000000000012206417242020245 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/general/TestBoundary.xml0000644000175000017500000000557112206417147023426 0ustar frankiefrankie P - point POINT(10 10) GEOMETRYCOLLECTION EMPTY mP - MultiPoint MULTIPOINT((10 10), (20 20)) GEOMETRYCOLLECTION EMPTY L - Line LINESTRING(10 10, 20 20) MULTIPOINT((10 10), (20 20)) L - closed LINESTRING(10 10, 20 20, 20 10, 10 10) MULTIPOINT EMPTY L - self-intersecting with boundary LINESTRING(40 40, 100 100, 180 100, 180 180, 100 180, 100 100) MULTIPOINT((40 40), (100 100)) mL - 2 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 30)) MULTIPOINT((10 10), (30 30)) mL - 3 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30)) MULTIPOINT((10 10), (20 20), (30 20), (30 30)) mL - 4 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40)) MULTIPOINT((10 10), (30 20), (30 30), (30 40)) mL - 2 lines, one closed, with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT((10 10), (20 20)) L - 1 line, self-intersecting, topologically equal to prev case MULTILINESTRING( (10 10, 20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT((10 10), (20 20)) A - polygon with no holes POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60)) LINESTRING(40 60, 420 60, 420 320, 40 320, 40 60) A - polygon with 1 hole POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) MULTILINESTRING( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) geos-3.4.2/tests/xmltester/tests/general/TestBuffer.xml0000644000175000017500000004527512206417147023061 0ustar frankiefrankie Basic buffer test cases. com.vividsolutions.jtstest.testrunner.BufferResultMatcher Point POINT (100 100) POLYGON EMPTY POLYGON EMPTY POLYGON ((110 100, 109.80785280403231 98.04909677983872, 109.23879532511287 96.1731656763491, 108.31469612302546 94.44429766980397, 107.07106781186548 92.92893218813452, 105.55570233019603 91.68530387697454, 103.8268343236509 90.76120467488713, 101.95090322016128 90.19214719596769, 100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488713, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100.00000000000001, 90.19214719596769 101.9509032201613, 90.76120467488714 103.82683432365091, 91.68530387697456 105.55570233019603, 92.92893218813454 107.07106781186549, 94.44429766980399 108.31469612302547, 96.17316567634911 109.23879532511287, 98.04909677983873 109.80785280403231, 100.00000000000003 110, 101.95090322016131 109.8078528040323, 103.82683432365093 109.23879532511286, 105.55570233019606 108.31469612302544, 107.0710678118655 107.07106781186545, 108.31469612302547 105.555702330196, 109.23879532511287 103.82683432365086, 109.80785280403231 101.95090322016124, 110 100)) Line LINESTRING (10 10, 100 100) POLYGON EMPTY POLYGON EMPTY POLYGON ((92.92893218813452 107.07106781186548, 94.44429766980397 108.31469612302546, 96.1731656763491 109.23879532511287, 98.04909677983872 109.80785280403231, 100 110, 101.95090322016128 109.80785280403231, 103.8268343236509 109.23879532511287, 105.55570233019603 108.31469612302546, 107.07106781186548 107.07106781186548, 108.31469612302546 105.55570233019603, 109.23879532511287 103.8268343236509, 109.80785280403231 101.95090322016128, 110 100, 109.80785280403231 98.04909677983872, 109.23879532511286 96.1731656763491, 108.31469612302544 94.44429766980397, 107.07106781186548 92.92893218813452, 17.071067811865476 2.9289321881345254, 15.555702330196024 1.6853038769745474, 13.826834323650898 0.7612046748871322, 11.950903220161283 0.1921471959676957, 10 0, 8.049096779838719 0.1921471959676957, 6.173165676349103 0.7612046748871322, 4.44429766980398 1.6853038769745474, 2.9289321881345254 2.9289321881345245, 1.6853038769745474 4.444297669803978, 0.7612046748871322 6.173165676349101, 0.1921471959676957 8.049096779838713, 0 9.999999999999998, 0.1921471959676957 11.950903220161283, 0.761204674887134 13.8268343236509, 1.685303876974551 15.555702330196027, 2.9289321881345254 17.071067811865476, 92.92893218813452 107.07106781186548)) Polygon POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON EMPTY POLYGON ((110 110, 110 190, 190 190, 190 110, 110 110)) POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON ((100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488714, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100, 90 200, 90.19214719596769 201.95090322016128, 90.76120467488713 203.8268343236509, 91.68530387697454 205.55570233019603, 92.92893218813452 207.07106781186548, 94.44429766980397 208.31469612302544, 96.1731656763491 209.23879532511287, 98.04909677983872 209.8078528040323, 100 210, 200 210, 201.95090322016128 209.8078528040323, 203.8268343236509 209.23879532511287, 205.55570233019603 208.31469612302544, 207.07106781186548 207.07106781186548, 208.31469612302544 205.55570233019603, 209.23879532511287 203.8268343236509, 209.8078528040323 201.95090322016128, 210 200, 210 100, 209.8078528040323 98.04909677983872, 209.23879532511287 96.1731656763491, 208.31469612302544 94.44429766980397, 207.07106781186548 92.92893218813452, 205.55570233019603 91.68530387697454, 203.8268343236509 90.76120467488713, 201.95090322016128 90.19214719596769, 200 90, 100 90)) POLYGON ((100 80, 96.09819355967743 80.3842943919354, 92.3463313526982 81.52240934977428, 88.88859533960796 83.37060775394909, 85.85786437626905 85.85786437626905, 83.37060775394909 88.88859533960796, 81.52240934977426 92.3463313526982, 80.38429439193538 96.09819355967743, 80 100, 80 200, 80.38429439193538 203.90180644032256, 81.52240934977426 207.6536686473018, 83.37060775394909 211.11140466039205, 85.85786437626905 214.14213562373095, 88.88859533960796 216.6293922460509, 92.3463313526982 218.47759065022575, 96.09819355967744 219.61570560806462, 100 220, 200 220, 203.90180644032256 219.61570560806462, 207.6536686473018 218.47759065022575, 211.11140466039205 216.6293922460509, 214.14213562373095 214.14213562373095, 216.6293922460509 211.11140466039205, 218.47759065022575 207.6536686473018, 219.61570560806462 203.90180644032256, 220 200, 220 100, 219.61570560806462 96.09819355967744, 218.47759065022575 92.3463313526982, 216.6293922460509 88.88859533960796, 214.14213562373095 85.85786437626905, 211.11140466039205 83.37060775394909, 207.6536686473018 81.52240934977426, 203.90180644032256 80.38429439193538, 200 80, 100 80)) POLYGON ((100 0, 80.49096779838713 1.921471959676964, 61.73165676349097 7.61204674887135, 44.442976698039786 16.85303876974548, 29.28932188134523 29.28932188134526, 16.853038769745453 44.44297669803981, 7.612046748871322 61.73165676349103, 1.9214719596769498 80.49096779838716, 0 100, 0 200, 1.9214719596769498 219.50903220161285, 7.612046748871322 238.268343236509, 16.853038769745467 255.55702330196021, 29.28932188134526 270.71067811865476, 44.44297669803981 283.14696123025453, 61.731656763491024 292.3879532511287, 80.49096779838717 298.078528040323, 100 300, 200 300, 219.50903220161283 298.078528040323, 238.268343236509 292.3879532511287, 255.55702330196021 283.14696123025453, 270.71067811865476 270.71067811865476, 283.14696123025453 255.55702330196021, 292.3879532511287 238.26834323650897, 298.078528040323 219.50903220161283, 300 200, 300 100, 298.078528040323 80.49096779838717, 292.3879532511287 61.731656763491024, 283.14696123025453 44.44297669803978, 270.71067811865476 29.289321881345245, 255.55702330196021 16.85303876974548, 238.268343236509 7.612046748871322, 219.50903220161283 1.9214719596769498, 200 0, 100 0)) Polygon POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280)) POLYGON EMPTY MULTIPOLYGON (((90 100, 90.19214719596769 98.04909677983872, 90.76120467488713 96.1731656763491, 91.68530387697454 94.44429766980397, 92.92893218813452 92.92893218813452, 94.44429766980397 91.68530387697454, 96.1731656763491 90.76120467488713, 98.04909677983872 90.19214719596769, 100 90, 90 90, 90 100)), ((260 90, 261.9509032201613 90.19214719596769, 263.82683432365087 90.76120467488713, 265.555702330196 91.68530387697454, 267.0710678118655 92.92893218813452, 268.31469612302544 94.44429766980397, 269.23879532511285 96.1731656763491, 269.8078528040323 98.04909677983872, 270 100, 270 90, 260 90)), ((270 280, 269.8078528040323 281.9509032201613, 269.23879532511285 283.82683432365087, 268.31469612302544 285.555702330196, 267.0710678118655 287.0710678118655, 265.555702330196 288.31469612302544, 263.82683432365087 289.23879532511285, 261.9509032201613 289.8078528040323, 260 290, 270 290, 270 280)), ((260 290, 258.0490967798387 289.8078528040323, 256.17316567634913 289.23879532511285, 254.44429766980397 288.31469612302544, 252.92893218813452 287.0710678118655, 180 214.14213562373095, 107.07106781186548 287.0710678118655, 105.55570233019603 288.31469612302544, 103.8268343236509 289.23879532511285, 101.95090322016128 289.8078528040323, 100 290, 260 290)), ((100 290, 98.04909677983872 289.8078528040323, 96.1731656763491 289.23879532511285, 94.44429766980397 288.31469612302544, 92.92893218813452 287.0710678118655, 91.68530387697454 285.555702330196, 90.76120467488713 283.82683432365087, 90.19214719596769 281.9509032201613, 90 280, 90 290, 100 290))) POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280)) POLYGON ((70 300, 70.19214719596769 301.9509032201613, 70.76120467488713 303.82683432365087, 71.68530387697454 305.555702330196, 72.92893218813452 307.0710678118655, 74.44429766980397 308.31469612302544, 76.1731656763491 309.23879532511285, 78.04909677983872 309.8078528040323, 80 310, 280 310, 281.9509032201613 309.8078528040323, 283.82683432365087 309.23879532511285, 285.555702330196 308.31469612302544, 287.0710678118655 307.0710678118655, 288.31469612302544 305.555702330196, 289.23879532511285 303.82683432365087, 289.8078528040323 301.9509032201613, 290 300, 290 80, 289.8078528040323 78.04909677983872, 289.23879532511285 76.1731656763491, 288.31469612302544 74.44429766980397, 287.0710678118655 72.92893218813452, 285.555702330196 71.68530387697454, 283.82683432365087 70.76120467488713, 281.9509032201613 70.19214719596769, 280 70, 80 70, 78.04909677983872 70.19214719596769, 76.1731656763491 70.76120467488714, 74.44429766980397 71.68530387697454, 72.92893218813452 72.92893218813452, 71.68530387697454 74.44429766980397, 70.76120467488713 76.1731656763491, 70.19214719596769 78.04909677983872, 70 80, 70 300), (250 255.85786437626905, 187.07106781186548 192.92893218813452, 185.55570233019603 191.68530387697456, 183.8268343236509 190.76120467488713, 181.95090322016128 190.1921471959677, 180 190, 178.04909677983872 190.1921471959677, 176.1731656763491 190.76120467488713, 174.44429766980397 191.68530387697456, 172.92893218813452 192.92893218813452, 110 255.85786437626905, 110 110, 250 110, 250 255.85786437626905)) POLYGON ((60 300, 60.38429439193539 303.90180644032256, 61.522409349774264 307.6536686473018, 63.370607753949095 311.11140466039205, 65.85786437626905 314.14213562373095, 68.88859533960796 316.6293922460509, 72.3463313526982 318.47759065022575, 76.09819355967744 319.6157056080646, 80 320, 280 320, 283.90180644032256 319.6157056080646, 287.6536686473018 318.47759065022575, 291.11140466039205 316.6293922460509, 294.14213562373095 314.14213562373095, 296.6293922460509 311.11140466039205, 298.47759065022575 307.6536686473018, 299.6157056080646 303.90180644032256, 300 300, 300 80, 299.6157056080646 76.09819355967744, 298.47759065022575 72.3463313526982, 296.6293922460509 68.88859533960796, 294.14213562373095 65.85786437626905, 291.11140466039205 63.370607753949095, 287.6536686473018 61.522409349774264, 283.90180644032256 60.38429439193539, 280 60, 80 60, 76.09819355967743 60.3842943919354, 72.3463313526982 61.52240934977427, 68.88859533960796 63.370607753949095, 65.85786437626905 65.85786437626905, 63.37060775394909 68.88859533960796, 61.522409349774264 72.3463313526982, 60.38429439193539 76.09819355967743, 60 80, 60 300), (240 231.7157287525381, 194.14213562373095 185.85786437626905, 191.11140466039205 183.3706077539491, 187.6536686473018 181.52240934977425, 183.90180644032256 180.38429439193538, 180 180, 176.09819355967744 180.38429439193538, 172.3463313526982 181.52240934977425, 168.88859533960795 183.3706077539491, 165.85786437626905 185.85786437626905, 120 231.7157287525381, 120 120, 240 120, 240 231.7157287525381)) POLYGON ((-20 300, -18.07852804032305 319.50903220161285, -12.387953251128678 338.268343236509, -3.146961230254533 355.5570233019602, 9.28932188134526 370.71067811865476, 24.442976698039807 383.14696123025453, 41.731656763491024 392.3879532511287, 60.49096779838718 398.078528040323, 80 400, 280 400, 299.50903220161285 398.078528040323, 318.268343236509 392.3879532511287, 335.5570233019602 383.14696123025453, 350.71067811865476 370.71067811865476, 363.14696123025453 355.5570233019602, 372.3879532511287 338.268343236509, 378.078528040323 319.50903220161285, 380 300, 380 80, 378.078528040323 60.490967798387175, 372.3879532511287 41.731656763491024, 363.14696123025453 24.44297669803978, 350.71067811865476 9.289321881345245, 335.5570233019602 -3.1469612302545187, 318.268343236509 -12.387953251128678, 299.50903220161285 -18.07852804032305, 280 -20, 80 -20, 60.49096779838713 -18.078528040323036, 41.73165676349097 -12.38795325112865, 24.442976698039786 -3.1469612302545187, 9.28932188134523 9.28932188134526, -3.146961230254547 24.442976698039807, -12.387953251128678 41.73165676349103, -18.07852804032305 60.49096779838716, -20 80, -20 300)) MultiLineString which caused failure for distance > 10 in ver 1.10 MULTILINESTRING ((1335558.59524 631743.01449, 1335572.28215 631775.89056, 1335573.2578018496 631782.1915185435), (1335573.2578018496 631782.1915185435, 1335576.62035 631803.90754), (1335573.2578018496 631782.1915185435, 1335580.70187 631802.08139)) POLYGON ((1335548.595256113 631743.032441783, 1335548.790905219 631744.982996921, 1335549.363329412 631746.857903442, 1335562.585102127 631778.616709872, 1335563.375568292 631783.721701512, 1335566.738116443 631805.437722968, 1335567.226524677 631807.336249059, 1335568.075932351 631809.103011783, 1335569.253697204 631810.67011544, 1335570.714558392 631811.977337115, 1335572.402375839 631812.974441013, 1335574.252287668 631813.62310899, 1335576.193202805 631813.898413099, 1335578.150532968 631813.789773558, 1335580.049059059 631813.301365323, 1335581.815821783 631812.451957649, 1335582.575762837 631811.880820023, 1335584.207062652 631811.446945214, 1335585.966840541 631810.583159534, 1335587.524288564 631809.392655618, 1335588.819554868 631807.921183865, 1335589.802863095 631806.225292108, 1335590.436425262 631804.370152517, 1335590.695893928 631802.427057067, 1335590.57129786 631800.470677824, 1335590.067425214 631798.576197348, 1335582.983023804 631779.64732263, 1335582.164383558 631774.360377032, 1335581.514060589 631772.047146558, 1335567.827150589 631739.171076558, 1335566.899949249 631737.44387026, 1335565.653602591 631735.930739755, 1335564.136007016 631734.689833799, 1335562.405482873 631733.768839712, 1335560.528533233 631733.203150781, 1335558.577288218 631733.014506113, 1335556.626733079 631733.210155219, 1335554.751826558 631733.782579411, 1335553.02462026 631734.709780751, 1335551.511489755 631735.956127409, 1335550.270583799 631737.473722984, 1335549.349589712 631739.204247127, 1335548.783900781 631741.081196768, 1335548.595256113 631743.032441783)) POLYGON ((1335543.59526417 631743.041417674, 1335543.888737828 631745.967250381, 1335544.747374117 631748.779610163, 1335557.736578191 631779.97978481, 1335558.434451514 631784.486792996, 1335561.796999664 631806.202814452, 1335562.529612016 631809.050603588, 1335563.803723527 631811.700747674, 1335565.570370805 631814.051403159, 1335567.761662587 631816.012235673, 1335570.293388759 631817.507891519, 1335573.068256502 631818.480893485, 1335575.979629207 631818.893849648, 1335578.915624452 631818.730890336, 1335581.763413588 631817.998277984, 1335584.413557674 631816.724166473, 1335584.790893177 631816.440578026, 1335585.959658978 631816.129722821, 1335588.599325811 631814.834044301, 1335590.935497846 631813.048288427, 1335592.878397303 631810.841080797, 1335594.353359643 631808.297243162, 1335595.303702892 631805.514533776, 1335595.692905893 631802.5998906, 1335595.50601179 631799.665321737, 1335594.750202821 631796.823601022, 1335587.845634781 631778.375224674, 1335587.105500336 631773.595285547, 1335586.130015883 631770.125439837, 1335572.443105883 631737.249369837, 1335571.052303874 631734.65856039, 1335569.182783886 631732.388864632, 1335566.906390525 631730.527505698, 1335564.310604309 631729.146014568, 1335561.495179849 631728.297481171, 1335558.568312326 631728.01451417, 1335555.642479619 631728.307987828, 1335552.830119837 631729.166624117, 1335550.23931039 631730.557426126, 1335547.969614632 631732.426946114, 1335546.108255698 631734.703339476, 1335544.726764568 631737.299125691, 1335543.878231171 631740.114550151, 1335543.59526417 631743.041417674)) Degenerate polygon which caused error in ver 1.10 POLYGON ((-69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90, -69 -90)) POLYGON EMPTY Degenerate polygon - ring is flat. This case tests a fix made in ver 1.12 POLYGON ((100 100, 200 100, 200 100, 100 100)) POLYGON EMPTY POLYGON ((100 90, 98.04909677983872 90.19214719596769, 96.1731656763491 90.76120467488714, 94.44429766980397 91.68530387697454, 92.92893218813452 92.92893218813452, 91.68530387697454 94.44429766980397, 90.76120467488713 96.1731656763491, 90.19214719596769 98.04909677983872, 90 100, 90.19214719596769 101.95090322016128, 90.76120467488713 103.8268343236509, 91.68530387697454 105.55570233019603, 92.92893218813452 107.07106781186548, 94.44429766980397 108.31469612302546, 96.1731656763491 109.23879532511287, 98.04909677983872 109.80785280403231, 100 110, 200 110, 201.95090322016128 109.80785280403231, 203.8268343236509 109.23879532511287, 205.55570233019603 108.31469612302546, 207.07106781186548 107.07106781186548, 208.31469612302544 105.55570233019603, 209.23879532511287 103.8268343236509, 209.8078528040323 101.95090322016128, 210 100, 209.8078528040323 98.04909677983872, 209.23879532511287 96.1731656763491, 208.31469612302544 94.44429766980397, 207.07106781186548 92.92893218813452, 205.55570233019603 91.68530387697454, 203.8268343236509 90.76120467488713, 201.95090322016128 90.19214719596769, 200 90, 100 90)) geos-3.4.2/tests/xmltester/tests/general/TestBufferMitredJoin.xml0000644000175000017500000000713312206417147025035 0ustar frankiefrankie Test cases for buffers with mitred joins. com.vividsolutions.jtstest.testrunner.BufferResultMatcher Polygon with very close vertices POLYGON ((588736.6028960398 4518922.914991864, 588736.1060708747 4518922.061957178, 588718.6830715544 4518930.620699637, 588712.0102834741 4518933.8985304395, 588722.7612465625 4518964.956739423, 588755.2073151038 4518948.2420851765, 588750.2892019567 4518938.490656119, 588750.2892047082 4518938.490654858, 588741.1098934844 4518920.290260831, 588736.6028960398 4518922.914991864)) POLYGON ((588734.1297355227 4518928.603500288, 588720.8876067492 4518935.108463509, 588718.180507909 4518936.438254274, 588725.599306024 4518957.870248819, 588748.510613743 4518946.067444841, 588745.824857241 4518940.742239175, 588739.0370049385 4518927.28353524, 588734.7985587667 4518929.751873097, 588734.1297355227 4518928.603500288)) Polygon with almost collinear segments POLYGON ((589300.089821923 4519627.577687806, 589296.6197410262 4519621.834087054, 589292.5450979208 4519615.089809029, 589282.7894421419 4519620.983829066, 589289.8814929381 4519632.722288636, 589300.089821923 4519627.577687806)) POLYGON ((589293.0184401305 4519625.542333956, 589292.3401596148 4519624.419659127, 589290.8510825798 4519621.954964854, 589289.654619631 4519622.677825188, 589291.766473935 4519626.173276233, 589293.0184401305 4519625.542333956)) Polygon with almost collinear segments POLYGON ((588978.2942617612 4519797.499233156, 588989.1612999197 4519792.050291001, 588982.5784094566 4519779.549041149, 588962.0866377753 4519790.334848753, 588967.4026187821 4519802.960530801, 588978.2942617612 4519797.499233156)) POLYGON ((588976.0531144794 4519793.029640461, 588982.3607149989 4519789.866888121, 588980.48352001 4519786.3019976355, 588968.47502784 4519792.622646146, 588969.9375199836 4519796.09612748, 588976.0531144794 4519793.029640461)) Polygon with almost collinear segments POLYGON ((589099.8017397423 4518490.719003885, 589097.1198886324 4518486.20858194, 589090.9424687021 4518475.819013388, 589069.8993093553 4518487.1362185385, 589078.7377975255 4518502.093799692, 589081.1515112884 4518509.334764771, 589103.7370954598 4518497.015419995, 589099.8017397423 4518490.719003885)) POLYGON ((589095.5298653984 4518493.317948498, 589092.8222002359 4518488.763943842, 589089.0925332544 4518482.491158241, 589076.8521287646 4518489.074160654, 589083.3129233124 4518500.0079495255, 589084.0046933009 4518502.083060501, 589096.6851902619 4518495.166462162, 589095.5298653984 4518493.317948498)) Polygon with very close vertices POLYGON ((587854.8616905196 4519121.941123185, 587863.6671614297 4519138.176489661, 587863.9386104685 4519138.676991724, 587880.5408633598 4519129.672513268, 587871.463857397 4519112.9366913745, 587854.8616905196 4519121.941123185)) POLYGON ((587861.6406480775 4519123.952511722, 587865.9500049312 4519131.898025201, 587873.7618842344 4519127.661136427, 587869.4524883915 4519119.715644092, 587861.6406480775 4519123.952511722)) geos-3.4.2/tests/xmltester/tests/general/TestCentroid.xml0000644000175000017500000001635112206417147023410 0ustar frankiefrankie P - empty POINT EMPTY POINT EMPTY P - single point POINT(10 10) POINT(10 10) mP - two points MULTIPOINT((10 10), (20 20) ) POINT(15 15) mP - 4 points MULTIPOINT((10 10), (20 20), (10 20), (20 10)) POINT(15 15) L - single segment LINESTRING(10 10, 20 20) POINT(15 15) L - zero length line LINESTRING (10 10, 10 10) POINT (10 10) mL - zero length lines MULTILINESTRING ((10 10, 10 10), (20 20, 20 20)) POINT (15 15) L - two segments LINESTRING (60 180, 120 100, 180 180) POINT (120 140) L - elongated horseshoe LINESTRING (80 0, 80 120, 120 120, 120 0)) POINT (100 68.57142857142857) mL - two single-segment lines MULTILINESTRING ((0 0, 0 100), (100 0, 100 100)) POINT (50 50) mL - two concentric rings, offset MULTILINESTRING ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180)) POINT (90 110) mL - complicated symmetrical collection of lines MULTILINESTRING ((20 20, 60 60), (20 -20, 60 -60), (-20 -20, -60 -60), (-20 20, -60 60), (-80 0, 0 80, 80 0, 0 -80, -80 0), (-40 20, -40 -20), (-20 40, 20 40), (40 20, 40 -20), (20 -40, -20 -40)) POINT (0 0) A - box POLYGON ((40 160, 160 160, 160 40, 40 40, 40 160)) POINT (100 100) A - box with hole POLYGON ((0 200, 200 200, 200 0, 0 0, 0 200), (20 180, 80 180, 80 20, 20 20, 20 180)) POINT (115.78947368421052 100) A - box with offset hole (showing difference between area and line centroid) POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180)) POINT (102.5 97.5) A - box with 2 symmetric holes POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0), (60 180, 20 180, 20 140, 60 140, 60 180), (180 60, 140 60, 140 20, 180 20, 180 60)) POINT (100 100) mA - symmetric angles MULTIPOLYGON (((0 40, 0 140, 140 140, 140 120, 20 120, 20 40, 0 40)), ((0 0, 0 20, 120 20, 120 100, 140 100, 140 0, 0 0))) POINT (70 70) GC - two adjacent polygons (showing that centroids are additive) GEOMETRYCOLLECTION (POLYGON ((0 200, 20 180, 20 140, 60 140, 200 0, 0 0, 0 200)), POLYGON ((200 200, 0 200, 20 180, 60 180, 60 140, 200 0, 200 200))) POINT (102.5 97.5) GC - heterogeneous collection of lines, points GEOMETRYCOLLECTION (LINESTRING (80 0, 80 120, 120 120, 120 0), MULTIPOINT ((20 60), (40 80), (60 60))) POINT (100 68.57142857142857) GC - heterogeneous collection of polygons, line GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), LINESTRING (80 0, 80 80, 120 40)) POINT (20 20) GC - collection of polygons, lines, points GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), LINESTRING (80 0, 80 80, 120 40), MULTIPOINT ((20 60), (40 80), (60 60))) POINT (20 20) GC - collection of zero-area polygons and lines GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 30 30)) POINT (25 25) GC - collection of zero-area polygons and zero-length lines GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 20 20)) POINT (15 15) GC - collection of zero-area polygons, zero-length lines, and points GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 20 20), MULTIPOINT ((20 10), (10 20)) ) POINT (15 15) GC - collection of zero-area polygons, zero-length lines, and points GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 20 20), POINT EMPTY ) POINT (15 15) GC - collection of zero-area polygons, zero-length lines, and points GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING EMPTY, POINT EMPTY ) POINT (10 10) GC - overlapping polygons GEOMETRYCOLLECTION (POLYGON ((20 100, 20 -20, 60 -20, 60 100, 20 100)), POLYGON ((-20 60, 100 60, 100 20, -20 20, -20 60))) POINT (40 40) A - degenerate box POLYGON ((40 160, 160 160, 160 160, 40 160, 40 160)) POINT (100 160) A - degenerate triangle POLYGON ((10 10, 100 100, 100 100, 10 10)) POINT (55 55) A - empty POLYGON EMPTY POINT EMPTY A - almost degenerate triangle POLYGON(( 56.528666666700 25.2101666667, 56.529000000000 25.2105000000, 56.528833333300 25.2103333333, 56.528666666700 25.2101666667)) POINT (56.52883333335 25.21033333335) geos-3.4.2/tests/xmltester/tests/general/TestConvexHull-big.xml0000644000175000017500000000133112206417147024457 0ustar frankiefrankie Big convex hull MULTIPOINT((-1000000000000000000000000 -1000000000000000000000000), (1000000000000000000000000 -1000000000000000000000000), (1000000000000000000000000 1000000000000000000000000), (-1000000000000000000000000 1000000000000000000000000), (0 0)) POLYGON( (-1000000000000000000000000 -1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, -1000000000000000000000000 -1000000000000000000000000)) geos-3.4.2/tests/xmltester/tests/general/TestConvexHull.xml0000644000175000017500000001025712206417147023727 0ustar frankiefrankie Several points collinear and overlapping MULTIPOINT((130 240), (130 240), (130 240), (570 240), (570 240), (570 240), (650 240)) LINESTRING(130 240, 650 240) Convex hull POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) POLYGON( (40 60, 40 320, 420 320, 420 60, 40 60)) Convex hull POLYGON( (10 10, 100 10, 100 100, 10 100, 10 10)) POLYGON( (10 10, 10 100, 100 100, 100 10, 10 10)) Point POINT(20 20) POINT(20 20) Horizontal Line LINESTRING(30 220, 240 220, 240 220) LINESTRING(30 220, 240 220) Vertical Line LINESTRING(110 290, 110 100, 110 100) LINESTRING(110 290, 110 100) Spiral LINESTRING(120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140) POLYGON( (140 50, 40 160, 60 310, 180 320, 240 230, 280 140, 140 50)) Starlike Polygon POLYGON( (200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300)) POLYGON( (360 10, 100 190, 200 360, 490 230, 360 10)) Most of the points in one area MULTIPOINT ((70 340), (70 50), (430 50), (420 340), (340 120), (390 110), (390 70), (350 100), (350 50), (370 90), (320 80), (360 120), (350 80), (390 90), (420 80), (410 60), (410 100), (370 100), (380 60), (370 80), (380 100), (360 80), (370 80), (380 70), (390 80), (390 70), (410 70), (400 60), (410 60), (410 60), (410 60), (370 70), (410 50), (410 50), (410 50), (410 50), (410 50), (410 50), (410 50)) POLYGON( (70 50, 70 340, 420 340, 430 50, 70 50)) Multipoint MULTIPOINT ((140 350), (510 140), (110 140), (250 290), (250 50), (300 370), (450 310), (440 160), (290 280), (220 160), (100 260), (320 230), (200 280), (360 130), (330 210), (380 80), (220 210), (380 310), (260 150), (260 110), (170 130)) POLYGON( (250 50, 110 140, 100 260, 140 350, 300 370, 450 310, 510 140, 380 80, 250 50)) GeometryCollection GEOMETRYCOLLECTION( POINT(110 300), POINT(100 110), POINT(130 210), POINT(150 210), POINT(150 180), POINT(130 170), POINT(140 190), POINT(130 200), LINESTRING(240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON( (210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270))) POLYGON( (240 50, 100 110, 110 300, 210 340, 360 240, 330 70, 240 50)) Collinear L MULTIPOINT ((50 320), (50 280), (50 230), (50 160), (50 120), (100 120), (160 120), (210 120), (210 180), (210 150), (180 180), (140 180), (140 210), (140 260), (160 180), (140 300), (140 320), (110 320), (80 320)) POLYGON( (50 120, 50 320, 140 320, 210 180, 210 120, 50 120)) geos-3.4.2/tests/xmltester/tests/general/TestDistance.xml0000644000175000017500000000370112206417147023366 0ustar frankiefrankie PeP - point to an empty point POINT(10 10) POINT EMPTY 0.0 PP - point to point POINT(10 10) POINT (10 0) 10.0 LL - line to line LINESTRING (0 0, 0 10) LINESTRING (10 0, 10 10) 10.0 PA - point inside polygon POINT (240 160) POLYGON ((100 260, 340 180, 100 60, 180 160, 100 260)) 0.0 LL - crossing linestrings LINESTRING (40 300, 280 220, 60 160, 140 60) LINESTRING (140 360, 260 280, 240 120, 120 160) 0.0 AA - overlapping polygons POLYGON ((60 260, 260 180, 100 60, 60 160, 60 260)) POLYGON ((220 280, 120 160, 300 60, 360 220, 220 280)) 0.0 AA - disjoint polygons POLYGON ((100 320, 60 120, 240 180, 200 260, 100 320)) POLYGON ((420 320, 280 260, 400 100, 420 320)) 71.55417527999327 mAmA - overlapping multipolygons MULTIPOLYGON (((40 240, 160 320, 40 380, 40 240)), ((100 240, 240 60, 40 40, 100 240))) MULTIPOLYGON (((220 280, 120 160, 300 60, 360 220, 220 280)), ((240 380, 280 300, 420 340, 240 380))) 0.0 geos-3.4.2/tests/xmltester/tests/general/TestFunctionAA.xml0000644000175000017500000004205512206417147023630 0ustar frankiefrankie AA - simple polygons POLYGON( (10 10, 100 10, 100 100, 10 100, 10 10)) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POLYGON( (50 50, 50 100, 100 100, 100 50, 50 50)) POLYGON( (10 10, 10 100, 50 100, 50 200, 200 200, 200 50, 100 50, 100 10, 10 10)) POLYGON( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)) MULTIPOLYGON( ( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)), ( (50 100, 50 200, 200 200, 200 50, 100 50, 100 100, 50 100))) AA - A with hole intersecting B POLYGON( (20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140)) POLYGON( (80 100, 220 100, 220 240, 80 240, 80 100)) POLYGON( (80 140, 80 160, 160 160, 160 100, 140 100, 140 140, 80 140)) POLYGON( (20 20, 20 160, 80 160, 80 240, 220 240, 220 100, 160 100, 160 20, 20 20), (80 100, 80 140, 40 140, 40 40, 140 40, 140 100, 80 100)) POLYGON( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)) MULTIPOLYGON( ( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)), ( (80 100, 80 140, 140 140, 140 100, 80 100)), ( (80 160, 80 240, 220 240, 220 100, 160 100, 160 160, 80 160))) AA - simple polygons #2 POLYGON( (20 340, 330 380, 50 40, 20 340)) POLYGON( (210 320, 140 270, 0 270, 140 220, 210 320)) POLYGON( (27 270, 140 270, 210 320, 140 220, 28 260, 27 270)) POLYGON( (20 340, 330 380, 50 40, 28 260, 0 270, 27 270, 20 340)) POLYGON( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)) MULTIPOLYGON( ( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)), ( (27 270, 28 260, 0 270, 27 270))) AA - simple polygons intersecting in P, L and A POLYGON((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0)) POLYGON((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0)) GEOMETRYCOLLECTION( POINT(110 260), LINESTRING(110 0, 110 60), POLYGON( (110 100, 40 140, 110 180, 180 140, 110 100))) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 100, 40 60, 110 60, 180 60, 110 100)) POLYGON( (110 0, 0 0, 0 260, 110 260, 40 220, 110 180, 40 140, 110 100, 40 60, 110 60, 110 0)) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 180, 40 140, 110 100, 180 140, 110 180), (110 100, 40 60, 110 60, 180 60, 110 100)) AA - simple polygons with two touching holes in their symDifference POLYGON( (0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0)) POLYGON( (230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0)) POLYGON( (120 0, 0 0, 0 190, 120 190, 230 190, 230 0, 120 0), (120 100, 50 50, 120 50, 190 50, 120 100), (120 100, 190 150, 120 150, 50 150, 120 100)) AmA - A simple, symDiff contains inversion POLYGON( (0 0, 210 0, 210 230, 0 230, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 90, 60 60, 90 60, 90 90, 60 90)), ( (70 120, 90 90, 100 120, 70 120)), ( (120 70, 90 90, 120 100, 120 70))) POLYGON( (0 0, 0 230, 210 230, 210 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 90 60, 90 90, 60 90, 60 60), (90 90, 120 70, 120 100, 90 90), (90 90, 100 120, 70 120, 90 90)) AmA - A simple, B connected multiPolygon touching A at vertex POLYGON( (0 0, 340 0, 340 300, 0 300, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 0, 0 300, 340 300, 340 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 100 60, 100 100, 60 100, 60 60)) AmA - A simple, B connected multiPolygon touching A at interior of edge POLYGON( (0 0, 120 0, 120 120, 0 120, 0 0)) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) AA - simple polygons with holes POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) POLYGON( (300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240)) POLYGON( (251 104, 217 57, 176 89, 210 130, 210 210, 172 226, 190 270, 217 285, 260 250, 263 218, 240 200, 240 110, 251 104)) MULTIPOLYGON( ( (217 57, 190 20, 60 40, 20 150, 60 260, 160 330, 217 285, 190 270, 172 226, 140 240, 80 190, 90 100, 160 70, 176 89, 217 57)), ( (217 57, 251 104, 290 80, 330 170, 290 240, 263 218, 260 250, 217 285, 300 330, 380 250, 380 50, 250 30, 217 57)), ( (263 218, 270 130, 251 104, 240 110, 240 200, 263 218)), ( (172 226, 210 210, 210 130, 176 89, 150 110, 150 170, 172 226))) AA - simple polygons with hole touching shell POLYGON ((20 0, 20 160, 200 160, 200 0, 20 0)) POLYGON ((220 80, 0 80, 0 240, 220 240, 220 80), (100 80, 120 120, 80 120, 100 80)) POLYGON ((20 80, 20 160, 200 160, 200 80, 100 80, 20 80), (100 80, 120 120, 80 120, 100 80)) POLYGON ((20 0, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80, 200 0, 20 0)) MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)), ((100 80, 80 120, 120 120, 100 80))) MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)), ((200 80, 200 160, 20 160, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80)), ((100 80, 80 120, 120 120, 100 80))) mAmA - complex polygons touching and overlapping MULTIPOLYGON( ( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ( (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200))) MULTIPOLYGON( ( (100 220, 100 200, 300 200, 300 220, 100 220)), ( (280 180, 280 160, 300 160, 300 180, 280 180)), ( (220 140, 220 120, 240 120, 240 140, 220 140)), ( (180 220, 160 240, 200 240, 180 220))) MULTILINESTRING( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340), (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200)) POLYGON( (220 100, 120 200, 120 340, 220 340, 360 200, 360 100, 220 100)) GEOMETRYCOLLECTION( POINT(200 240), LINESTRING(300 200, 220 200), LINESTRING(280 180, 300 180), LINESTRING(300 180, 300 160), LINESTRING(300 160, 280 160), LINESTRING(220 140, 240 140), LINESTRING(240 120, 220 120), POLYGON( (120 200, 120 220, 140 220, 140 200, 120 200)), POLYGON( (160 200, 160 220, 180 220, 180 200, 160 200)), POLYGON( (180 240, 180 220, 160 240, 180 240)), POLYGON( (200 200, 200 220, 220 220, 220 200, 200 200))) POLYGON( (120 220, 120 340, 220 340, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200, 200 200, 180 200, 160 200, 140 200, 120 200, 100 200, 100 220, 120 220), (200 240, 200 280, 180 280, 180 240, 200 240), (200 240, 180 220, 200 220, 200 240), (160 240, 160 280, 140 280, 140 220, 160 220, 160 240), (240 120, 300 120, 300 140, 240 140, 240 120)) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (160 220, 160 240, 180 220, 160 220)), ( (300 200, 360 200, 360 100, 220 100, 220 120, 240 120, 300 120, 300 140, 240 140, 220 140, 220 160, 280 160, 300 160, 300 180, 280 180, 220 180, 220 200, 300 200))) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (120 220, 120 200, 100 200, 100 220, 120 220)), ( (140 200, 140 220, 160 220, 160 200, 140 200)), ( (160 220, 160 240, 180 220, 160 220)), ( (180 200, 180 220, 200 220, 200 200, 180 200)), ( (180 220, 180 240, 200 240, 180 220)), ( (220 200, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200), (240 120, 300 120, 300 140, 240 140, 240 120))) mAmA - complex polygons touching MULTIPOLYGON( ( (100 200, 100 180, 120 180, 120 200, 100 200)), ( (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (280 220, 240 180, 260 160, 300 200, 280 220))) MULTIPOLYGON( ( (80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ( (220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220))) MULTILINESTRING( (100 200, 100 180, 120 180, 120 200, 100 200), (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220), (280 220, 240 180, 260 160, 300 200, 280 220)) POLYGON( (60 140, 60 240, 220 240, 280 220, 300 200, 260 160, 220 140, 60 140)) GEOMETRYCOLLECTION( POINT(240 180), POINT(260 160), POINT(280 220), POINT(300 200), LINESTRING(100 200, 100 180), LINESTRING(100 180, 120 180), LINESTRING(120 180, 120 200), LINESTRING(120 200, 100 200), LINESTRING(220 140, 220 160), LINESTRING(220 160, 160 160), LINESTRING(160 160, 160 180), LINESTRING(160 180, 200 180), LINESTRING(200 200, 160 200), LINESTRING(160 200, 160 220), LINESTRING(160 220, 220 220), LINESTRING(220 220, 220 240), LINESTRING(80 220, 80 160), LINESTRING(80 160, 140 160), LINESTRING(140 160, 140 220), LINESTRING(140 220, 80 220)) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (100 180, 100 200, 120 200, 120 180, 100 180)), ( (220 140, 60 140, 60 240, 220 240, 220 220, 160 220, 160 200, 200 200, 200 180, 160 180, 160 160, 220 160, 220 140), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) AA - hole intersecting boundary to produce line POLYGON( (60 160, 140 160, 140 60, 60 60, 60 160)) POLYGON( (160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140)) LINESTRING(60 160, 140 160, 140 60, 60 60, 60 160) POLYGON( (60 60, 60 160, 140 160, 140 60, 60 60)) GEOMETRYCOLLECTION( LINESTRING(140 140, 140 120), POLYGON( (100 160, 140 160, 140 140, 120 140, 120 120, 140 120, 140 100, 100 100, 100 160))) POLYGON( (60 160, 100 160, 140 160, 160 160, 160 100, 140 100, 140 60, 60 60, 60 160)) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 120, 120 120, 120 140, 140 140))) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 160, 160 160, 160 100, 140 100, 140 120, 120 120, 120 140, 140 140))) geos-3.4.2/tests/xmltester/tests/general/TestFunctionAAPrec.xml0000644000175000017500000004371512206417147024446 0ustar frankiefrankie AA - sliver triangle, cut by polygon POLYGON( (10 10, 100 10, 10 11, 10 10)) POLYGON( (90 0, 200 0, 200 200, 90 200, 90 0)) true LINESTRING(90 10, 100 10) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) POLYGON( (90 10, 10 10, 10 11, 90 10)) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) AA - polygon with outward sliver, cut by polygon POLYGON( (100 10, 10 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 10 10) AA - narrow wedge in polygon POLYGON((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10)) POLYGON((60 40, 40 40, 40 20, 60 20, 60 40)) true POLYGON( (50 40, 50 20, 40 20, 40 30, 40 40, 50 40)) POLYGON( (50 20, 50 10, 10 10, 10 30, 40 30, 10 31, 10 50, 50 50, 50 40, 60 40, 60 20, 50 20)) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (50 20, 50 40, 60 40, 60 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) AA - hole close to shell POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (0 30, 0 0, 30 0, 30 30, 0 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) mAA - shells close together MULTIPOLYGON( ( (0 0, 100 0, 100 20, 0 20, 0 0)), ( (0 40, 0 21, 100 20, 100 40, 0 40))) POLYGON( (110 30, 90 30, 90 10, 110 10, 110 30)) true GEOMETRYCOLLECTION( LINESTRING(100 20, 90 20), POLYGON( (100 20, 100 10, 90 10, 90 20, 90 30, 100 30, 100 20))) POLYGON( (100 10, 100 0, 0 0, 0 20, 90 20, 0 21, 0 40, 100 40, 100 30, 110 30, 110 10, 100 10)) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (100 10, 100 20, 100 30, 110 30, 110 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) AA - A sliver triangle cutting all the way across B POLYGON( (100 10, 0 10, 100 11, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) POLYGON( (100 10, 20 10, 100 11, 100 10)) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - A polygon with sliver cutting all the way across B POLYGON( (100 10, 0 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 90 11, 90 20, 100 20, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 0, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) AA - A hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B hole close to shell, A coincident with B POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 10, 10 30, 30 30, 30 10, 10 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B sliver crossing A triangle in line segment with length < 1 POLYGON( (0 0, 200 0, 0 198, 0 0)) POLYGON( (280 60, 139 60, 280 70, 280 60)) true POINT(139 60) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) POLYGON( (139 60, 200 0, 0 0, 0 198, 139 60)) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) AA - sliver triangles, at angle to each other POLYGON( (0 0, 140 10, 0 20, 0 0)) POLYGON( (280 0, 139 10, 280 1, 280 0)) LINESTRING(140 10, 139 10) AA - sliver triangle with multiple intersecting boxes MULTIPOLYGON( ( (1 4, 1 1, 2 1, 2 4, 1 4)), ( (3 4, 3 1, 4 1, 4 4, 3 4)), ( (5 4, 5 1, 6 1, 6 4, 5 4)), ( (7 4, 7 1, 8 1, 8 4, 7 4)), ( (9 4, 9 1, 10 1, 10 4, 9 4))) POLYGON( (0 2, 11 3, 11 2, 0 2)) POLYGON( (1 1, 1 4, 10 4, 10 1, 1 1)) GEOMETRYCOLLECTION( LINESTRING(1 2, 2 2), LINESTRING(3 2, 4 2), POLYGON( (6 3, 6 2, 5 2, 6 3)), POLYGON( (7 2, 7 3, 8 3, 8 2, 7 2)), POLYGON( (9 2, 9 3, 10 3, 10 2, 9 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 7 3, 7 4, 8 4, 8 3, 9 3, 9 4, 10 4, 10 3, 11 3, 11 2, 10 2, 10 1, 9 1, 9 2, 8 2, 8 1, 7 1, 7 2, 6 2, 6 1, 5 1, 5 2))) MULTIPOLYGON( ( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), ( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), ( (5 2, 5 4, 6 4, 6 3, 5 2)), ( (6 2, 6 1, 5 1, 5 2, 6 2)), ( (7 3, 7 4, 8 4, 8 3, 7 3)), ( (8 2, 8 1, 7 1, 7 2, 8 2)), ( (9 3, 9 4, 10 4, 10 3, 9 3)), ( (10 2, 10 1, 9 1, 9 2, 10 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 5 2)), POLYGON( (6 2, 6 1, 5 1, 5 2, 6 2)), POLYGON( (6 2, 6 3, 7 3, 7 2, 6 2)), POLYGON( (7 3, 7 4, 8 4, 8 3, 7 3)), POLYGON( (8 2, 8 1, 7 1, 7 2, 8 2)), POLYGON( (8 2, 8 3, 9 3, 9 2, 8 2)), POLYGON( (9 3, 9 4, 10 4, 10 3, 9 3)), POLYGON( (10 2, 10 1, 9 1, 9 2, 10 2)), POLYGON( (10 2, 10 3, 11 3, 11 2, 10 2))) AA - Polygon with hole with outward sliver, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) POLYGON( (200 160, 160 160, 160 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) GEOMETRYCOLLECTION( LINESTRING(180 120, 160 120), POLYGON( (180 160, 180 120, 180 80, 160 80, 160 120, 160 160, 180 160))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)), ( (180 120, 180 160, 200 160, 200 80, 180 80, 180 120))) AA - Polygon with hole with outward sliver, cut by line POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) LINESTRING(160 140, 160 100) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTILINESTRING( (160 140, 160 120), (160 120, 160 100)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) AA - Polygon with inward sliver touching hole, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160)) POLYGON( (200 160, 150 160, 150 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTIPOLYGON( ( (180 160, 180 120, 150 120, 150 160, 180 160)), ( (150 120, 180 119, 180 80, 150 80, 150 120))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) POLYGON( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)), ( (150 120, 180 120, 180 160, 200 160, 200 80, 180 80, 180 119, 150 120))) AA - intersecting slivers, dimensional collapse POLYGON( (83 33, 62 402, 68 402, 83 33)) POLYGON( (78 39, 574 76, 576 60, 78 39)) LINESTRING(83 33, 62 402, 68 402, 83 33) POLYGON( (83 33, 62 402, 68 402, 83 33)) POINT(83 39) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) GEOMETRYCOLLECTION( LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39))) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) geos-3.4.2/tests/xmltester/tests/general/TestFunctionLA.xml0000644000175000017500000003616612206417147023651 0ustar frankiefrankie LA - A and B simple LINESTRING(240 190, 120 120) POLYGON( (110 240, 50 80, 240 70, 110 240)) LINESTRING(177 153, 120 120) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LINESTRING(240 190, 177 153) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LA - A intersects B-hole LINESTRING(0 100, 100 100, 200 200) POLYGON( (30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140)) MULTILINESTRING( (30 100, 80 100), (110 110, 140 140)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) MULTILINESTRING( (0 100, 30 100), (80 100, 100 100, 110 110), (140 140, 200 200)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) LA - A intersects B-hole #2 LINESTRING(40 340, 200 250, 120 180, 160 110, 270 40) POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) MULTILINESTRING( (114 298, 200 250, 173 226), (182 96, 225 68)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) MULTILINESTRING( (40 340, 114 298), (173 226, 120 180, 160 110, 182 96), (225 68, 270 40)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) mLmA - A and B complex, disjoint MULTIPOLYGON( ( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) MULTILINESTRING( (100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120)) POLYGON( (60 80, 60 320, 300 80, 60 80)) MULTILINESTRING( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280), (120 160, 140 160, 140 140, 120 160)) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) MULTIPOLYGON( ( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) GEOMETRYCOLLECTION EMPTY mLmA - A and B complex, overlapping and touching #1 MULTIPOLYGON( ( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ( (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200))) MULTILINESTRING( (40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320)) MULTILINESTRING( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240), (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200)) POLYGON( (60 120, 60 260, 220 260, 220 120, 60 120)) MULTILINESTRING( (220 260, 140 260), (140 260, 120 260), (120 260, 60 260), (200 240, 140 240), (140 240, 120 240), (120 240, 80 240), (180 220, 140 220), (140 220, 120 220), (120 220, 100 220), (120 200, 120 180), (220 240, 200 240), (80 240, 60 240), (60 220, 80 220), (200 220, 220 220), (120 260, 120 240), (120 220, 120 200), (120 180, 120 160), (120 140, 120 120), (140 120, 140 140), (140 160, 140 180), (140 200, 140 220), (140 240, 140 260)) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) MULTIPOLYGON( ( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), ( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) mLmA - A and B complex, overlapping and touching #2 MULTIPOLYGON( ( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ( (280 400, 320 400, 320 360, 280 360, 280 400)), ( (300 240, 300 220, 320 220, 320 240, 300 240))) MULTILINESTRING( (80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360)) POLYGON( (60 120, 60 320, 280 400, 320 400, 320 220, 280 120, 60 120)) MULTILINESTRING( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260), (280 400, 320 400, 320 360, 280 360, 280 400), (300 240, 300 220, 320 220, 320 240, 300 240)) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) MULTIPOLYGON( ( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), ( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), ( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( POINT(300 240), POINT(300 360), LINESTRING(80 300, 80 160), LINESTRING(80 160, 260 160, 260 240), LINESTRING(260 240, 260 300, 220 300), LINESTRING(220 300, 80 300), LINESTRING(80 160, 80 140), LINESTRING(220 320, 220 300), LINESTRING(220 300, 220 260), LINESTRING(240 240, 260 240), LINESTRING(260 240, 280 240)) mLmA - A and B complex, overlapping and touching #3 MULTIPOLYGON( ( (120 180, 60 80, 180 80, 120 180)), ( (100 240, 140 240, 120 220, 100 240))) MULTILINESTRING( (180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100)) POLYGON( (60 80, 100 240, 140 240, 180 80, 60 80)) MULTILINESTRING( (120 180, 60 80, 180 80, 120 180), (100 240, 140 240, 120 220, 100 240)) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) MULTIPOLYGON( ( (60 80, 120 180, 180 80, 60 80)), ( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( POINT(60 80), POINT(120 180), LINESTRING(100 100, 140 100)) geos-3.4.2/tests/xmltester/tests/general/TestFunctionLAPrec.xml0000644000175000017500000000230512206417147024447 0ustar frankiefrankie LA - line and sliver intersecting, dimensional collapse POLYGON( (95 9, 81 414, 87 414, 95 9)) LINESTRING(93 13, 96 13) LINESTRING(95 9, 81 414, 87 414, 95 9) POLYGON( (95 9, 81 414, 87 414, 95 9)) POINT(95 13) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13))) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) geos-3.4.2/tests/xmltester/tests/general/TestFunctionLL.xml0000644000175000017500000001716612206417147023663 0ustar frankiefrankie LL - A crosses B LINESTRING(0 0, 100 100) LINESTRING(0 100, 100 0) POINT(50 50) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) MULTILINESTRING( (0 0, 50 50), (50 50, 100 100)) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) LL - A shares one segment with B LINESTRING(0 0, 100 100, 200 0) LINESTRING(0 0, 100 100, 200 200) LINESTRING(0 0, 100 100) MULTILINESTRING( (0 0, 100 100), (100 100, 200 200), (100 100, 200 0)) LINESTRING(100 100, 200 0) MULTILINESTRING( (100 100, 200 200), (100 100, 200 0)) LL - A and B disjoint LINESTRING(40 360, 40 220, 120 360) LINESTRING(120 340, 60 220, 140 220, 140 360) MULTIPOINT((40 360), (120 360)) POLYGON( (40 220, 40 360, 120 360, 40 220)) GEOMETRYCOLLECTION EMPTY MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LINESTRING(40 360, 40 220, 120 360) MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LL - A and B intersect frequently LINESTRING(220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280) LINESTRING(220 240, 140 160, 120 180, 220 280, 200 300, 100 200) MULTIPOINT((220 240), (20 280)) POLYGON( (160 180, 20 280, 60 320, 220 240, 160 180)) GEOMETRYCOLLECTION( POINT(113 213), POINT(133 233), POINT(137 197), POINT(153 253), POINT(157 217), POINT(177 237), LINESTRING(180 200, 160 180), LINESTRING(220 240, 200 220)) MULTILINESTRING( (113 213, 20 280), (133 233, 113 213), (113 213, 100 200), (137 197, 113 213), (153 253, 133 233), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (137 197, 157 217), (160 180, 140 160, 120 180, 137 197), (160 180, 137 197), (177 237, 220 280, 200 300, 153 253), (177 237, 153 253), (157 217, 177 237), (157 217, 180 200), (180 200, 160 180), (200 220, 177 237), (200 220, 180 200), (220 240, 200 220)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280), (200 220, 180 200), (160 180, 140 160, 120 180, 137 197), (137 197, 157 217), (157 217, 177 237), (177 237, 220 280, 200 300, 153 253), (153 253, 133 233), (133 233, 113 213), (113 213, 100 200)) LL - A and B equal LINESTRING(80 320, 220 320, 220 160, 80 300) LINESTRING(80 320, 220 320, 220 160, 80 300) MULTIPOINT((80 320), (80 300)) POLYGON( (220 160, 80 300, 80 320, 220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY LL - A and B touch ends LINESTRING(60 200, 60 260, 140 200) LINESTRING(60 200, 60 140, 140 200) MULTIPOINT((60 200), (140 200)) POLYGON( (60 200, 60 260, 140 200, 60 200)) MULTIPOINT((60 200), (140 200)) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LINESTRING(60 200, 60 260, 140 200) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LL - intersecting rings LINESTRING(180 200, 100 280, 20 200, 100 120, 180 200) LINESTRING(100 200, 220 200, 220 80, 100 80, 100 200) MULTIPOINT EMPTY POLYGON( (100 120, 20 200, 100 280, 180 200, 100 120)) MULTIPOINT((100 120), (180 200)) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) MULTILINESTRING( (100 120, 180 200), (180 200, 100 280, 20 200, 100 120)) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) LrL - LinearRing bug LINEARRING(0 0, 0 5, 5 5, 5 0, 0 0) LINESTRING( 2 2, 5 5) POINT (5 5) geos-3.4.2/tests/xmltester/tests/general/TestFunctionLLPrec.xml0000644000175000017500000000074112206417147024464 0ustar frankiefrankie LL - narrow V LINESTRING(0 10, 620 10, 0 11) LINESTRING(400 60, 400 10) POINT(400 10) MULTILINESTRING( (0 10, 400 10), (400 10, 620 10, 400 10), (400 10, 0 11), (400 60, 400 10)) geos-3.4.2/tests/xmltester/tests/general/TestFunctionPA.xml0000644000175000017500000000757112206417147023653 0ustar frankiefrankie PA - point contained in simple polygon POINT(100 100) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POINT(100 100) mPmA - points on I, B and E of touching triangles MULTIPOLYGON( ( (120 320, 180 200, 240 320, 120 320)), ( (180 200, 240 80, 300 200, 180 200))) MULTIPOINT((120 320), (180 260), (180 320), (180 200), (300 200), (200 220)) MULTILINESTRING( (120 320, 180 200, 240 320, 120 320), (180 200, 240 80, 300 200, 180 200)) POLYGON( (240 80, 120 320, 240 320, 300 200, 240 80)) MULTIPOINT((120 320), (180 200), (180 260), (180 320), (300 200)) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) MULTIPOLYGON( ( (180 200, 120 320, 240 320, 180 200)), ( (180 200, 300 200, 240 80, 180 200))) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) mPmA - points on I, B and E of concentric doughnuts MULTIPOLYGON( ( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOINT((200 360), (420 340), (400 100), (340 120), (200 140), (200 160), (220 180), (260 200), (200 360), (420 340), (400 100), (340 120), (200 140), (200 160), (220 180), (260 200)) MULTILINESTRING( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300), (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220)) POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80)) MULTIPOINT((200 160), (220 180), (260 200), (340 120), (400 100), (420 340)) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOLYGON( ( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) geos-3.4.2/tests/xmltester/tests/general/TestFunctionPL.xml0000644000175000017500000001674212206417147023666 0ustar frankiefrankie mPL - points in I and E of line MULTIPOINT((40 90), (20 20), (70 70)) LINESTRING(20 20, 100 100) MULTIPOINT((20 20), (70 70)) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) mPL - points in I and E of line, line self-intersecting MULTIPOINT((40 90), (20 20), (70 70)) LINESTRING(20 20, 110 110, 170 50, 130 10, 70 70) MULTIPOINT((20 20), (70 70)) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT ((100 320), (100 260), (100 220), (100 200), (100 180), (120 180), (200 180), (220 180), (220 260), (220 320), (200 320), (160 320), (140 320), (120 320), (100 320), (100 260), (100 220), (100 200), (100 180), (120 180), (200 180), (220 180), (220 260), (220 320), (200 320), (160 320), (140 320), (120 320)) MULTIPOINT((100 220), (100 320)) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT ((100 180), (100 220), (100 260), (100 320), (120 180), (160 320), (200 180), (200 320), (220 180), (220 260), (220 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) mPmL - points in I, B and E of lines, lines overlap, points overlap, x <0, y < 0 MULTILINESTRING( (-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140)) MULTIPOINT ((-560 -180), (-420 -180), (-500 -220), (-500 -340), (-500 -280), (-500 -140), (-320 -140), (-420 -140), (-320 -180), (-280 -140), (-320 -120), (-560 -180), (-420 -180), (-500 -220), (-500 -340), (-500 -280), (-500 -140), (-320 -140), (-420 -140), (-320 -180), (-280 -140), (-320 -120)) MULTIPOINT((-500 -340), (-500 -140)) POLYGON( (-500 -340, -500 -140, -320 -140, -320 -280, -500 -340)) MULTIPOINT((-500 -340), (-500 -280), (-500 -220), (-500 -140), (-420 -140), (-320 -180), (-320 -140)) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) MULTILINESTRING( (-500 -140, -500 -280), (-500 -280, -320 -280, -320 -140), (-320 -140, -500 -140), (-500 -280, -500 -340)) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) mL - lines intersect at 1 point MULTILINESTRING( (180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280)) MULTIPOINT((180 100), (140 280)) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT ((100 320), (100 260), (100 220), (100 200), (100 180), (120 180), (200 180), (220 180), (220 260), (220 320), (200 320), (160 320), (140 320), (120 320), (100 320), (100 260), (100 220), (100 200), (100 180), (120 180), (200 180), (220 180), (220 260), (220 320), (200 320), (160 320), (140 320), (120 320)) MULTIPOINT((100 220), (100 320)) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT ((100 180), (100 220), (100 260), (100 320), (120 180), (160 320), (200 180), (200 320), (220 180), (220 260), (220 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) geos-3.4.2/tests/xmltester/tests/general/TestFunctionPLPrec.xml0000644000175000017500000000053012206417147024464 0ustar frankiefrankie PP - Point just off line. Causes non-robust algorithms to fail. LINESTRING(-123456789 -40, 381039468754763 123456789) POINT(0 0) false geos-3.4.2/tests/xmltester/tests/general/TestFunctionPP.xml0000644000175000017500000001105612206417147023663 0ustar frankiefrankie PP - point contained in both A and B POINT(100 100) POINT(100 100) POINT(100 100) PP - A different from B POINT(100 100) POINT(200 200) GEOMETRYCOLLECTION EMPTY MULTIPOINT((100 100), (200 200)) POINT(100 100) MULTIPOINT((100 100), (200 200)) PmP - point in A contained in B POINT(100 100) MULTIPOINT((100 100), (200 200)) POINT(100 100) MULTIPOINT((100 100), (200 200)) GEOMETRYCOLLECTION EMPTY POINT(200 200) mPmP - points in A only, B only, and in both MULTIPOINT((100 100), (200 200), (300 300), (500 500)) MULTIPOINT((100 100), (200 200), (400 400), (600 600)) MULTIPOINT((100 100), (200 200)) MULTIPOINT ((100 100), (200 200), (300 300), (400 400), (500 500), (600 600)) MULTIPOINT((300 300), (500 500)) MULTIPOINT((300 300), (400 400), (500 500), (600 600)) PP - point contained in both A and B POINT(80 200) POINT(80 200) GEOMETRYCOLLECTION EMPTY POINT(80 200) POINT(80 200) POINT(80 200) GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY PP - A different from B POINT(80 200) POINT(260 80) GEOMETRYCOLLECTION EMPTY POINT(80 200) GEOMETRYCOLLECTION EMPTY MULTIPOINT((80 200), (260 80)) POINT(80 200) MULTIPOINT((80 200), (260 80)) PP - A different from B, same y POINT(60 260) POINT(120 260) GEOMETRYCOLLECTION EMPTY POINT(60 260) GEOMETRYCOLLECTION EMPTY MULTIPOINT((60 260), (120 260)) POINT(60 260) MULTIPOINT((60 260), (120 260)) PP - A different from B, same x POINT(80 80) POINT(80 280) GEOMETRYCOLLECTION EMPTY POINT(80 80) GEOMETRYCOLLECTION EMPTY MULTIPOINT((80 80), (80 280)) POINT(80 80) MULTIPOINT((80 80), (80 280)) geos-3.4.2/tests/xmltester/tests/general/TestInteriorPoint.xml0000644000175000017500000000760212206417147024445 0ustar frankiefrankie P - empty POINT EMPTY POINT EMPTY P - single point POINT(10 10) POINT(10 10) P - single point MULTIPOINT ((60 300), (200 200), (240 240), (200 300), (40 140), (80 240), (140 240), (100 160), (140 200), (60 200)) POINT (140 240) L - linestring with single segment LINESTRING (0 0, 7 14) POINT (7 14) L - linestring with multiple segments LINESTRING (0 0, 3 15, 6 2, 11 14, 16 5, 16 18, 2 22) POINT (11 14) L - zero length line LINESTRING (10 10, 10 10) POINT (10 10) mL - zero length lines MULTILINESTRING ((10 10, 10 10), (20 20, 20 20)) POINT (10 10) mL - complex linestrings MULTILINESTRING ((60 240, 140 300, 180 200, 40 140, 100 100, 120 220), (240 80, 260 160, 200 240, 180 340, 280 340, 240 180, 180 140, 40 200, 140 260)) POINT (180 200) A - box POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0)) POINT (5 5) A - empty POLYGON EMPTY POINT EMPTY A - polygon with horizontal segment at centre (L shape) POLYGON ((0 2, 0 4, 6 4, 6 0, 2 0, 2 2, 0 2)) POINT (3 3) A - polygon with horizontal segment at centre (narrower L shape) POLYGON ((0 2, 0 4, 3 4, 3 0, 2 0, 2 2, 0 2)) POINT (2 3) mA - polygons with holes MULTIPOLYGON (((50 260, 240 340, 260 100, 20 60, 90 140, 50 260), (200 280, 140 240, 180 160, 240 140, 200 280)), ((380 280, 300 260, 340 100, 440 80, 380 280), (380 220, 340 200, 400 100, 380 220))) POINT (115 200) GC - collection of polygons, lines, points GEOMETRYCOLLECTION (POLYGON ((0 40, 40 40, 40 0, 0 0, 0 40)), LINESTRING (80 0, 80 80, 120 40), MULTIPOINT ((20 60), (40 80), (60 60))) POINT (20 20) GC - collection of zero-area polygons and lines GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 30 30)) POINT (10 10) GC - collection of zero-area polygons and zero-length lines GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 20 20)) POINT (10 10) GC - collection of zero-area polygons, zero-length lines, and points GEOMETRYCOLLECTION (POLYGON ((10 10, 10 10, 10 10, 10 10)), LINESTRING (20 20, 20 20), MULTIPOINT ((20 10), (10 20)) ) POINT (10 10) geos-3.4.2/tests/xmltester/tests/general/TestRectanglePredicate.xml0000644000175000017500000001462512206417147025370 0ustar frankiefrankie A disjoint POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) false false A contained in rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POLYGON((10 10, 10 90, 90 90, 90 10, 10 10)) true true A containing rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POLYGON ((60 180, -100 120, -140 60, -40 20, -100 -80, 40 -20, 140 -100, 140 40, 260 160, 80 120, 60 180)) true false mA containing rectangle POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTIPOLYGON (((-60 180, -60 -60, 40 -20, 140 -100, 180 120, -20 140, -60 180)), ((20 280, 0 180, 180 160, 200 280, 20 280))) true false true false true L overlaps thru Y axis side POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING(10 10, 200 10) true L overlaps thru X axis side POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING(10 10, 10 2000) true false false L line intersection POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 10, -10 -20 ) true false L in polygon boundary POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 0, 90 0 ) true false true true L (3 pts) in polygon boundary POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 0, 100 0, 100 50 ) true false true true L (4 pts) in polygon boundary POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) LINESTRING( 10 0, 100 0, 100 100, 50 100 ) true false true true mL with one component contained and one in boundary POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTILINESTRING( (10 0, 20 0), (10 10, 20 20) ) true true true true mL with one component contained POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTILINESTRING( (10 10, 10 20), (200 10, 200 20) ) true false P in polygon boundary (Y axis) POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POINT(100 50) true false true true P in polygon boundary (X axis) POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POINT(50 100) true false true true P in polygon POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) POINT(60 60) true true true true mP in polygon boundary and interior POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) MULTIPOINT((50 100), (60 60)) true true true true geos-3.4.2/tests/xmltester/tests/general/TestRelateAA.xml0000644000175000017500000001430212206417147023251 0ustar frankiefrankie AA disjoint POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) true false false AA equal but opposite orientation POLYGON( (0 0, 140 0, 140 140, 0 140, 0 0)) POLYGON( (140 0, 0 0, 0 140, 140 140, 140 0)) true true true AA A-shell contains B-shell POLYGON( (40 60, 360 60, 360 300, 40 300, 40 60)) POLYGON( (120 100, 280 100, 280 240, 120 240, 120 100)) true true true AA A-shell contains B-shell contains A-hole POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) POLYGON( (80 100, 360 100, 360 280, 80 280, 80 100)) true true false AA A-shell contains B-shell contains A-hole contains B-hole POLYGON( (0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240)) POLYGON( (20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180)) true true false AA A-shell overlapping B-shell POLYGON( (60 80, 200 80, 200 220, 60 220, 60 80)) POLYGON( (120 140, 260 140, 260 260, 120 260, 120 140)) true true false AA A-shell overlapping B-shell at B-vertex POLYGON( (60 220, 220 220, 140 140, 60 220)) POLYGON( (100 180, 180 180, 180 100, 100 100, 100 180)) true true false AA A-shell overlapping B-shell at A & B-vertex POLYGON( (40 40, 180 40, 180 180, 40 180, 40 40)) POLYGON( (180 40, 40 180, 160 280, 300 140, 180 40)) true true false AmA A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true true false AA A-shell touches B-shell, which contains A-hole POLYGON( (40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220)) POLYGON( (40 280, 180 260, 180 120, 60 120, 40 280)) true true false AA - A-hole contains B, boundaries touch in line POLYGON( (0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180)) POLYGON( (60 90, 130 90, 130 30, 60 30, 60 90)) true true false AA - A-hole contains B, boundaries touch in points POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) POLYGON( (270 90, 200 50, 150 80, 210 120, 270 90)) true true false AA - A contained completely in B POLYGON ((0 0, 20 80, 120 80, -20 120, 0 0)) POLYGON ((60 180, -100 120, -140 60, -40 20, -100 -80, 40 -20, 140 -100, 140 40, 260 160, 80 120, 60 180)) true true false geos-3.4.2/tests/xmltester/tests/general/TestRelateAC.xml0000644000175000017500000000121212206417147023247 0ustar frankiefrankie AC A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true true geos-3.4.2/tests/xmltester/tests/general/TestRelateLA.xml0000644000175000017500000000732412206417147023272 0ustar frankiefrankie LA - intersection at NV: {A-Bdy, A-Int} = {B-Bdy, B-Int} LINESTRING(100 120, 100 240) POLYGON( (40 60, 160 60, 160 180, 40 180, 40 60)) true LA - intersection at V: {A-Bdy, A-Int} = {B-Bdy, B-Int} LINESTRING(80 80, 140 140, 200 200) POLYGON( (40 40, 140 40, 140 140, 40 140, 40 40)) true LmA - intersection at NV, L contained in A LINESTRING(70 50, 70 150) MULTIPOLYGON( ( (0 0, 0 100, 140 100, 140 0, 0 0)), ( (20 170, 70 100, 130 170, 20 170))) true LA - A crosses B at {shell-NV, hole-V} LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true LA - A intersects B at {shell-NV}, B-Int, {hole-V} LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110)) true LA - A crosses B hole at {hole1-V, hole2-NV} LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true LA - A crosses B hole at {hole1-V}, B-Int, {hole2-NV} LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180)) true LA - Line with endpoints in interior but crossing exterior of multipolygon LINESTRING(160 70, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true LA - Line with a very small piece in the exterior between parts of a multipolygon LINESTRING(100 140, 100 40) MULTIPOLYGON( ( (20 80, 180 79, 100 0, 20 80)), ( (20 160, 180 160, 100 80, 20 160))) true LA - Line contained completely and spanning parts of multipolygon LINESTRING(100 140, 100 40) MULTIPOLYGON( ( (20 80, 180 80, 100 0, 20 80)), ( (20 160, 180 160, 100 80, 20 160))) true LA - overlapping ring and triangle LINESTRING(110 60, 20 150, 200 150, 110 60) POLYGON( (20 20, 200 20, 110 110, 20 20)) true geos-3.4.2/tests/xmltester/tests/general/TestRelateLC.xml0000644000175000017500000000132412206417147023266 0ustar frankiefrankie LC - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LC - equal with boundary intersection LINESTRING(0 0, 60 0, 60 60, 60 0, 120 0) MULTILINESTRING( (0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true geos-3.4.2/tests/xmltester/tests/general/TestRelateLL.xml0000644000175000017500000001276612206417147023313 0ustar frankiefrankie LL - disjoint, non-overlapping envelopes LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(140 300, 220 160, 260 200, 240 260) true LL - disjoint, overlapping envelopes LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(60 40, 140 40, 140 160, 0 160) true LL - disjoint, non-overlapping envelopes, B closed LINESTRING(60 0, 20 80, 100 80, 80 120, 40 140) LINESTRING(140 280, 240 280, 240 180, 140 180, 140 280) true LL - disjoint, overlapping envelopes, B closed LINESTRING(140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40) LINESTRING(80 140, 180 100, 160 40, 100 40, 60 100, 80 140) true Line vs line - pointwise equal LINESTRING(20 20, 80 80) LINESTRING(20 20, 80 80) true Line vs line - pointwise equal LINESTRING(40 40, 160 160, 200 60, 60 140) LINESTRING(40 40, 160 160, 200 60, 60 140) true Line vs line - topologically equal LINESTRING(40 40, 200 40) LINESTRING(200 40, 140 40, 40 40) true LL - topographically equal with self-intersection LINESTRING(0 0, 110 0, 60 0) LINESTRING(0 0, 110 0) true LmL - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LmL - topographically equal with self intersections LINESTRING(0 0, 80 0, 80 60, 80 0, 170 0) MULTILINESTRING( (0 0, 170 0), (80 0, 80 60)) true LL - A-IntNV = B-IntNV LINESTRING(80 100, 180 200) LINESTRING(80 180, 180 120) true intersect in Int NV LINESTRING(40 40, 100 100, 160 160) LINESTRING(160 60, 100 100, 60 140) true LL - intersection: {A-Bdy, A-IntV} = B-IntNV LINESTRING(40 40, 100 100, 180 100, 180 180, 100 180, 100 100) LINESTRING(140 60, 60 140) true LL - intersection: {A-Bdy, A-IntNV} = B-IntNV LINESTRING(40 40, 180 180, 100 180, 100 100) LINESTRING(140 60, 60 140) true LL - intersection: A-IntNV = {B-Bdy, B-IntNV} LINESTRING(20 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true LL - one segment overlapping, one distinct LINESTRING(80 90, 50 50, 0 0) LINESTRING(0 0, 100 100) true LL - A contained in B LINESTRING(40 140, 240 140) LINESTRING(40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140) true LL - simple overlapping lines LINESTRING(20 20, 100 20, 20 20) LINESTRING(60 20, 200 20) true LL - A-spiral, B-contained LINESTRING(40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60) LINESTRING(140 60, 180 60, 220 60, 260 60) true test for LinearRing point location bug LINEARRING(0 0, 0 5, 5 5, 5 0, 0 0) LINESTRING( 2 2, 4 4) true geos-3.4.2/tests/xmltester/tests/general/TestRelatePA.xml0000644000175000017500000000320512206417147023270 0ustar frankiefrankie PA - disjoint POINT(20 20) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mPA - points in B: E, I MULTIPOINT((0 20), (40 20)) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: E, B MULTIPOINT((0 20), (20 20)) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: B, I MULTIPOINT((20 20), (40 20)) POLYGON( (20 40, 20 0, 60 0, 60 40, 20 40)) true mPA - points in B: I, B, E MULTIPOINT((80 260), (140 260), (180 260)) POLYGON( (40 320, 140 320, 140 200, 40 200, 40 320)) true PmA - point in B: mod-2 I POINT(40 40) MULTIPOLYGON( ( (0 40, 0 0, 40 0, 40 40, 0 40)), ( (40 80, 40 40, 80 40, 80 80, 40 80))) true geos-3.4.2/tests/xmltester/tests/general/TestRelatePL.xml0000644000175000017500000000356512206417147023314 0ustar frankiefrankie PL - disjoint POINT(60 120) LINESTRING(40 40, 120 120, 200 120) true PL - touches Bdy POINT(40 40) LINESTRING(40 40, 100 100, 160 100) true PL - touches non-vertex POINT(60 60) LINESTRING(40 40, 100 100) true mPL - touches Bdy and Ext MULTIPOINT((40 40), (100 40)) LINESTRING(40 40, 80 80) true mPL - touches Int and Bdy MULTIPOINT((40 40), (60 60)) LINESTRING(40 40, 80 80) true mPL - touches Int and Ext MULTIPOINT((60 60), (100 100)) LINESTRING(40 40, 80 80) true mPL - touches IntNV and Ext MULTIPOINT((60 60), (100 100)) LINESTRING(40 40, 80 80) true mPL - touches IntV and Ext MULTIPOINT((60 60), (100 100)) LINESTRING(40 40, 60 60, 80 80) true geos-3.4.2/tests/xmltester/tests/general/TestRelatePP.xml0000644000175000017500000000171112206417147023307 0ustar frankiefrankie same point POINT(20 20) POINT(20 20) true different point POINT(20 20) POINT(20 30) true some same, some different points MULTIPOINT((40 40), (80 60), (40 100)) MULTIPOINT((40 40), (80 60), (120 100)) true same points MULTIPOINT((40 40), (80 60), (120 100)) MULTIPOINT((40 40), (80 60), (120 100)) true geos-3.4.2/tests/xmltester/tests/general/TestSimple.xml0000644000175000017500000001122012206417147023060 0ustar frankiefrankie P - point POINT(10 10) true mP - multipoint with repeated points MULTIPOINT ((80 280), (80 220), (160 220), (80 220)) false mP - multipoint with no repeated points MULTIPOINT ((80 280), (80 220), (160 220)) true mP - empty MULTIPOINT EMPTY true L - simple line LINESTRING(10 10, 20 20) true L - non-simple, proper interior intersection LINESTRING (20 60, 160 60, 80 160, 80 20) false L - non-simple, interior intersection at vertices LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20) false L - non-simple, interior intersection at Bdy/non-vertex LINESTRING (20 60, 100 60, 60 100, 60 60) false L - non-simple, interior intersection at Bdy/vertex LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60) false L - simple, intersection at Bdy/Bdy (ring) LINESTRING (20 20, 80 20, 80 80, 20 20) true L - simple, intersection at Bdy/Bdy + non-vertex LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80) false L - empty LINESTRING EMPTY true mL - intersection between elements at non-vertex MULTILINESTRING( (40 140, 160 40), (160 140, 40 40)) false mL - no intersection between elements MULTILINESTRING( (20 160, 20 20), (100 160, 100 20)) true mL - mutual intersection at endpoints only MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140)) true mL - one element is non-simple MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120)) false mL - proper intersection between elements at vertex MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60)) false mL - intersection between closed lines MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160)) false mL - intersection between closed and open lines MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160)) false A POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260)) true A - empty POLYGON EMPTY true mA MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true mA - with touching elements MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true geos-3.4.2/tests/xmltester/tests/general/TestUnaryUnion.xml0000644000175000017500000000756312206417147023755 0ustar frankiefrankie Tests for Geometry.union() method (unary union) P - point (showing merging of identical points) MULTIPOINT((10 10), (0 0), (10 10)) MULTIPOINT((10 10), (0 0)) P - point (showing merging of identical points) MULTIPOINT((10 10), (0 0), (10 10), (10 10), (10 10), (5 5), (5 5)) MULTIPOINT((10 10), (5 5), (0 0)) L - LineString (showing noding) LINESTRING (0 0, 10 0, 5 -5, 5 5) MULTILINESTRING ((0 0, 5 0), (5 0, 10 0, 5 -5, 5 0), (5 0, 5 5)) mL - multiLineString (showing noding) MULTILINESTRING((0 0, 10 10), (0 10, 10 0)) MULTILINESTRING ((0 0, 5 5), (5 5, 10 10), (0 10, 5 5), (5 5, 10 0)) GC - shows handling linear rings and linestrings GEOMETRYCOLLECTION (LINEARRING (0 0, 0 70, 80 70, 80 0, 0 0), LINESTRING (30 110, 30 30, 100 30)) MULTILINESTRING ((0 0, 0 70, 30 70), (30 70, 80 70, 80 30), (80 30, 80 0, 0 0), (30 110, 30 70), (30 70, 30 30, 80 30), (80 30, 100 30)) mL - multiLineString (showing noding and dissolving) MULTILINESTRING((0 0, 10 10), (5 5, 15 15)) MULTILINESTRING ((0 0, 5 5), (5 5, 10 10), (10 10, 15 15)) mP - multiPolygon (invalid) MULTIPOLYGON (((0 0, 0 100, 100 100, 100 0, 0 0)), ((70 160, 70 70, 160 70, 160 160, 70 160))) POLYGON ((0 0, 0 100, 70 100, 70 160, 160 160, 160 70, 100 70, 100 0, 0 0)) GC - geometry collection (homo) GEOMETRYCOLLECTION (POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0)), POLYGON ((70 160, 70 70, 160 70, 160 160, 70 160))) POLYGON ((0 0, 0 100, 70 100, 70 160, 160 160, 160 70, 100 70, 100 0, 0 0)) GC - geometry collection (hetero LA) GEOMETRYCOLLECTION (POLYGON ((0 0, 0 100, 100 100, 100 0, 0 0)), POLYGON ((70 160, 70 70, 160 70, 160 160, 70 160)), LINESTRING (40 70, 40 160)) GEOMETRYCOLLECTION (LINESTRING (40 100, 40 160), POLYGON ((0 0, 0 100, 40 100, 70 100, 70 160, 160 160, 160 70, 100 70, 100 0, 0 0))) GC - geometry collection (hetero PL) GEOMETRYCOLLECTION (LINESTRING (40 60, 120 110), POINT (120 110), POINT (40 60)) LINESTRING (40 60, 120 110) GC - geometry collection (hetero PL) GEOMETRYCOLLECTION (LINESTRING (40 60, 120 110), POINT (120 110), POINT (40 60), POINT (100 70), POINT (80 50)) GEOMETRYCOLLECTION (POINT (80 50), POINT (100 70), LINESTRING (40 60, 120 110)) mP - multipolygon (invalid) with topology collapse MULTIPOLYGON (((0 0, 150 0, 150 1, 0 0)), ((180 0, 20 0, 20 100, 180 100, 180 0))) POLYGON ((150 0, 20 0, 20 100, 180 100, 180 0, 150 0)) geos-3.4.2/tests/xmltester/tests/general/TestUnaryUnionFloating.xml0000644000175000017500000000131212206417147025423 0ustar frankiefrankie Tests for Geometry.union() method (unary union) with floating precision mP - showing that non-polygonal components are discarded correctly GEOMETRYCOLLECTION ( POLYGON ((-3 -2, 700 900, -6 900, -3 -2)), POLYGON((700 900, -1.6859349853697 899.55, 0.3 -0.4, 700 900)), POLYGON ((700 860, 700 899.5, -1.68593498537 899.55, 700 860)) ) POLYGON ((0.2942036115049298 2.226702215615205, -3 -2, -6 900, 700 900, 699.6114719806972 899.5000276853219, 700 899.5, 700 860, 670.2204017222961 861.6785046602191, 0.3 -0.4, 0.2942036115049298 2.226702215615205)) geos-3.4.2/tests/xmltester/tests/general/TestValid.xml0000644000175000017500000004736312206417147022707 0ustar frankiefrankie L - linear-ring bowtie LINEARRING(0 0, 100 100, 100 0, 0 100, 0 0) false L - linestring bowtie LINESTRING(0 0, 100 100, 100 0, 0 100, 0 0) true P - point POINT(10 10) true P - empty point POINT EMPTY true P - point with invalid X ordinate POINT(NaN 10) false P - point with invalid Y ordinate POINT(10 NaN) false mP - no repeated points MULTIPOINT((10 10), (20 20), (30 30)) true P - repeated points MULTIPOINT((10 10), (20 20), (30 30), (10 10)) true L - no repeated points LINESTRING (40 180, 120 120, 140 200, 200 140, 240 200) true L - invalid ordinate LINESTRING (40 180, 120 120, 140 200, 200 140, NaN 200) false L - repeated points LINESTRING (40 180, 120 120, 140 200, 140 200, 200 140, 240 200) true L - linestring with two identical points LINESTRING(0 0, 0 0) false mL - MultiLinestring with two identical points in first component MULTILINESTRING((1 1, 0 0), (0 0, 0 0)) false mL - MultiLinestring with two identical points in second component MULTILINESTRING((1 1, 0 0), (0 0, 0 0)) false A - zero-area polygon POLYGON ((0 0, 0 0, 0 0, 0 0, 0 0)) false A - polygon with too few points POLYGON ((0 0, 10 0, 20 0, 0 0, 0 0)) false A - polygon with invalid point POLYGON ((0 0, 10 NaN, 20 0, 0 10, 0 0)) false A - polygon with repeated point POLYGON ((107 246, 107 246, 250 285, 294 137, 151 90, 15 125, 157 174, 107 246)) true A - polygon with degenerate hole ring (A-B-A) POLYGON ((0 0, 0 240, 260 240, 260 0, 0 0), (220 200, 40 200, 40 20, 40 200, 220 200, 220 200)) false mA - multipolygon with component with too few points MULTIPOLYGON ( ((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 180 180, 180 180, 180 100))) false A - polygon self-intersects at non-vertex POLYGON ((0 40, 0 0, 40 40, 40 0, 0 40)) false A - polygon self-intersects at vertex MULTIPOLYGON ( ((0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) ) false A - polygon self-intersects at vertex/non-vertex POLYGON ((0 40, 20 20, 40 0, 40 40, 0 0, 0 40)) false A - hole self-intersects at non-vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 0 0, 40 40, 40 0, 0 40)) false A - polygon self-intersects at vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 20 20, 0 0, 0 40)) false A - polygon self-intersects at vertex/non-vertex POLYGON ((-10 50, 50 50, 50 -10, -10 -10, -10 50), (0 40, 20 20, 40 0, 40 40, 0 0, 0 40)) false A - Valid doughnut POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40)) true A - shell has repeated points POLYGON ((0 60, 0 0, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 40 20, 40 40, 20 40)) true A - shell touches hole without crossing it (valid) POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (20 40, 20 20, 60 20, 20 40)) true A - shell touches hole without crossing it, but does so twice (invalid) POLYGON ((0 60, 0 0, 60 0, 60 60, 0 60), (0 40, 20 20, 60 20, 0 40)) false A - hole touches hole without crossing it (valid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 20 100)) true A - holel touches hole without crossing it, but does so twice (invalid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 80 60, 100 80, 20 100)) false A - hole touches hole without crossing it, but does so at an infinite number of points (invalid) POLYGON ((0 120, 0 0, 140 0, 140 120, 0 120), (100 100, 100 20, 120 20, 120 100, 100 100), (20 100, 20 40, 100 40, 100 80, 20 100)) false A - spike (invalid) POLYGON ((0 60, 0 0, 60 0, 60 20, 100 20, 60 20, 60 60, 0 60)) false A - puncture (invalid) POLYGON ((0 60, 0 0, 60 0, 60 20, 20 20, 60 20, 60 60, 0 60)) false A - hole within a hole (invalid) POLYGON ((0 140, 0 0, 180 0, 180 140, 0 140), (20 20, 160 20, 160 120, 20 120, 20 20), (40 100, 40 40, 140 40, 140 100, 40 100)) false A - empty shell and holes (valid) POLYGON (EMPTY, EMPTY, EMPTY) true A - hole overlapping shell at non-vertex POLYGON ((60 280, 260 180, 60 80, 60 280), (140 80, 120 180, 200 180, 140 80)) false A - shell self-overlaps POLYGON ((60 340, 60 100, 340 100, 340 280, 340 200, 340 340, 60 340)) false A - hole with repeated points POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), (70 230, 80 230, 80 220, 80 220, 70 230)) true A - hole outside but adjacent to shell POLYGON ((40 260, 40 60, 120 60, 180 160, 240 60, 300 60, 300 260, 40 260), (180 160, 240 60, 120 60, 180 160)) false A - hole touches shell at two points POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 180, 140 260, 140 180)) false A - hole touches shell at one non-vertex point POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 180, 140 240, 140 180)) true A - hole touches shell at one vertex point POLYGON ((240 260, 40 260, 40 80, 240 80, 240 260), (140 180, 40 260, 140 240, 140 180)) true A - hole outside shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (160 120, 180 100, 160 80, 160 120)) false A - hole identical to shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (20 180, 20 20, 140 20, 140 180, 20 180)) false A - hole identical to shell POLYGON ((20 180, 20 20, 140 20, 140 180, 20 180), (20 180, 20 20, 140 20, 140 180, 20 180)) false A - hole self-intersects POLYGON ((380 340, 40 340, 40 20, 380 20, 380 340), (120 300, 300 280, 320 200, 160 140, 200 80, 320 120, 320 200, 360 60, 120 40, 120 300)) false A - holes overlap, first point is identical POLYGON ((20 320, 260 320, 260 20, 20 20, 20 320), (140 280, 80 100, 200 100, 140 280), (140 280, 40 80, 240 80, 140 280)) false A - holes do not overlap, first point is identical POLYGON ((20 320, 240 320, 240 40, 20 40, 20 320), (140 180, 60 120, 60 240, 140 180), (140 180, 200 120, 200 240, 140 180)) true A - shell self-touches at vertex POLYGON ((340 320, 340 200, 200 280, 200 80, 340 200, 340 20, 60 20, 60 340, 340 320)) false A - shell self-touches at non-vertex POLYGON ((300 320, 300 220, 260 260, 180 220, 360 220, 360 140, 120 140, 120 320, 300 320)) false A - chain of holes surrounds an island inside the polygon POLYGON ((40 300, 40 20, 280 20, 280 300, 40 300), (120 240, 80 180, 160 220, 120 240), (220 240, 160 220, 220 160, 220 240), (160 100, 80 180, 100 80, 160 100), (160 100, 220 160, 240 100, 160 100)) false A - chain of holes splits polygon in two (touching at vertices) POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), (100 120, 40 20, 180 100, 100 120), (200 200, 180 100, 240 160, 200 200), (260 260, 240 160, 300 200, 260 260), (300 300, 300 200, 340 320, 300 300)) false A - chain of holes splits polygon in two (touching at non-vertex) POLYGON ((40 320, 340 320, 340 20, 40 20, 40 320), (100 120, 40 20, 180 100, 100 120), (200 200, 180 100, 240 160, 200 200), (260 260, 240 160, 300 200, 260 260), (300 300, 300 200, 340 260, 300 300)) false A - holes touch in one point POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true A - holes touch in one point POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true A - one holes touches another at all vertices POLYGON( (0 0, 0 5, 6 5, 6 0, 0 0), (2 1, 4 1, 3 2, 2 1), (2 1, 1 4, 5 4, 4 1, 4 3, 3 2, 2 3, 2 1) ) false A - one holes touches another at several vertices POLYGON ((0 0, 0 5, 6 5, 6 0, 0 0), (2.5 1, 3.5 1, 3.5 2, 2.5 2, 2.5 1), (2.5 1.5, 1 4, 5 4, 3.5 1.5, 4 3, 3 2, 2 3, 2.5 1.5)) false A - hole disconnects interiors POLYGON ((0 0, 10 10, 10 0, 0 0), (5 5, 5 0, 10 5, 5 5)) false A - touching holes do NOT disconnect (isCCW bug) POLYGON ((60 40, 60 240, 460 240, 460 40, 60 40), (260 200, 340 60, 400 120, 260 200), (260 200, 120 100, 200 60, 260 200)) true mA - adjacent shells (shared vertices) MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), ((140 120, 40 120, 40 200, 140 200, 140 120))) false mA - adjacent shells (different vertices) MULTIPOLYGON (((40 120, 140 120, 140 40, 40 40, 40 120)), ((160 120, 60 120, 40 200, 140 200, 160 120))) false mA - nested overlapping shells MULTIPOLYGON (((80 260, 240 260, 240 100, 80 100, 80 260)), ((120 240, 220 240, 220 140, 120 140, 120 240))) false mA - nested non-overlapping shells MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ((120 160, 140 160, 140 140, 120 160))) true mA - nested non-overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 180 160, 340 60, 240 220, 220 340)), ((180 240, 180 160, 240 220, 180 240))) true mA - nested overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 140 100, 340 60, 300 240, 220 340)), ((60 200, 340 60, 220 340, 60 200))) false mA - nested non-overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 80 320, 60 200, 140 100, 340 60, 300 240, 220 340)), ((60 200, 340 60, 220 340, 60 200))) true mA - nested overlapping shells, all vertices touch MULTIPOLYGON (((20 380, 420 380, 420 20, 20 20, 20 380), (220 340, 180 240, 60 200, 200 180, 340 60, 240 220, 220 340)), ((60 200, 340 60, 220 340, 60 200))) false mA - disconnected exterior MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 260 100, 260 180, 180 180, 180 100))) true mA - shells touch in single point MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110))) true mA - duplicate shells MULTIPOLYGON (((60 300, 320 220, 260 60, 60 100, 60 300)), ((60 300, 320 220, 260 60, 60 100, 60 300))) false mA - shells are not nested but share all vertices MULTIPOLYGON (((180 60, 240 160, 300 60, 180 60)), ((80 80, 180 60, 160 140, 240 160, 360 140, 300 60, 420 100, 320 280, 120 260, 80 80))) true mA - shell is nested inside first hole MULTIPOLYGON (((0 0, 0 8, 8 8, 8 0, 0 0), (3 3, 7 3, 7 7, 3 7, 3 3), (1 1, 2 1, 2 2, 1 2, 1 1)), ((4 4, 4 6, 6 6, 6 4, 4 4))) true geos-3.4.2/tests/xmltester/tests/general/TestValid2-big.xml0000644000175000017500000000110612206417147023511 0ustar frankiefrankie Test 92 POLYGON ((100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true Test 558 MULTIPOINT (-1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 -1000000000000000000000000, 1000000000000000000000000 1000000000000000000000000, -1000000000000000000000000 1000000000000000000000000, 0 0) true geos-3.4.2/tests/xmltester/tests/general/TestValid2.xml0000644000175000017500000040116512206417147022763 0ustar frankiefrankie Test 1 LINESTRING (-123456789 -40, 381039468754763 123456789) true Test 2 POINT (0 0) true Test 3 POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20)) true Test 4 POLYGON ((20 20, 140 20, 120 100, 20 100, 20 20)) true Test 5 POLYGON ((120 100, 140 20, 20 20, 20 100, 120 100)) true Test 6 POLYGON ((20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100)) true Test 7 POLYGON ((0 0, 80 0, 80 80, 0 80, 0 0)) true Test 8 POLYGON ((100 200, 100 140, 180 140, 180 200, 100 200)) true Test 9 POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120)) true Test 10 POLYGON ((140 120, 140 200, 240 200, 240 120, 140 120)) true Test 11 POLYGON ((80 180, 140 260, 260 200, 200 60, 80 180)) true Test 12 POLYGON ((240 80, 140 120, 180 240, 280 200, 240 80)) true Test 13 POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) true Test 14 POLYGON ((140 40, 180 80, 120 100, 140 40)) true Test 15 POLYGON ((120 100, 180 80, 130 40, 120 100)) true Test 16 POLYGON ((20 20, 180 20, 140 140, 20 140, 20 20)) true Test 17 POLYGON ((180 100, 80 200, 180 280, 260 200, 180 100)) true Test 18 POLYGON ((140 140, 20 120, 0 220, 120 240, 140 140)) true Test 19 POLYGON ((160 200, 210 70, 120 70, 160 200)) true Test 20 POLYGON ((160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200)) false Test 21 POLYGON ((110 140, 200 70, 200 160, 110 140)) true Test 22 POLYGON ((110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140)) false Test 23 POLYGON ((20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120)) true Test 24 POLYGON ((20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120)) true Test 25 POLYGON ((20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120)) true Test 26 POLYGON ((20 120, 300 120, 140 240, 20 120)) true Test 27 POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) true Test 28 POLYGON ((100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140)) true Test 29 POLYGON ((260 200, 180 80, 120 160, 200 160, 180 220, 260 200)) true Test 30 POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) true Test 31 POLYGON ((0 140, 300 140, 140 240, 0 140)) true Test 32 POLYGON ((20 240, 20 140, 320 140, 180 240, 20 240)) true Test 33 POLYGON ((20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240)) true Test 34 POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120)) true Test 35 POLYGON ((120 120, 220 20, 280 20, 240 160, 120 120)) true Test 36 POLYGON ((140 120, 160 20, 260 120, 220 200, 140 120)) true Test 37 POLYGON ((20 140, 120 40, 20 40, 20 140)) true Test 38 POLYGON ((190 140, 190 20, 140 20, 20 140, 190 140)) true Test 39 POLYGON ((300 20, 220 20, 120 120, 260 160, 300 20)) true Test 40 POLYGON ((140 120, 240 160, 280 60, 160 20, 140 120)) true Test 41 POLYGON ((280 60, 180 60, 120 120, 260 180, 280 60)) true Test 42 POLYGON ((120 200, 120 120, 40 120, 40 200, 120 200)) true Test 43 POLYGON ((160 220, 140 120, 60 120, 40 220, 160 220)) true Test 44 POLYGON ((140 120, 20 120, 20 220, 140 220, 140 120)) true Test 45 POLYGON ((320 20, 220 20, 80 160, 240 140, 320 20)) true Test 46 POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20)) true Test 47 POLYGON ((60 40, 60 140, 180 140, 180 40, 60 40)) true Test 48 POLYGON ((20 20, 80 140, 160 60, 20 20)) true Test 49 POLYGON ((160 60, 20 20, 100 140, 160 60)) true Test 50 POLYGON ((20 100, 140 160, 160 40, 20 100)) true Test 51 POLYGON ((160 40, 20 100, 160 160, 160 40)) true Test 52 POLYGON ((20 180, 180 120, 80 40, 20 180)) true Test 53 POLYGON ((180 120, 100 40, 20 180, 180 120)) true Test 54 POLYGON ((20 20, 140 40, 140 120, 20 160, 80 80, 20 20)) true Test 55 POLYGON ((20 20, 140 40, 140 140, 20 180, 80 100, 20 20)) true Test 56 POLYGON ((40 180, 60 100, 180 100, 200 180, 120 120, 40 180)) true Test 57 POLYGON ((20 180, 60 80, 180 80, 220 180, 120 120, 20 180)) true Test 58 POLYGON ((40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60)) true Test 59 POLYGON ((60 100, 180 100, 220 180, 120 140, 20 180, 60 100)) true Test 60 POLYGON ((20 20, 20 140, 120 120, 120 40, 20 20)) true Test 61 POLYGON ((20 20, 20 180, 140 140, 140 60, 20 20)) true Test 62 POLYGON ((20 20, 120 40, 120 120, 20 140, 20 20)) true Test 63 POLYGON ((120 40, 20 20, 20 140, 120 120, 120 40)) true Test 64 POLYGON ((20 20, 140 60, 140 140, 20 180, 20 20)) true Test 65 POLYGON ((140 60, 20 20, 20 180, 140 140, 140 60)) true Test 66 POLYGON ((20 20, 60 120, 140 120, 180 20, 20 20)) true Test 67 POLYGON ((20 40, 120 40, 120 120, 20 140, 20 40)) true Test 68 POLYGON ((20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20)) true Test 69 POLYGON ((150 150, 330 150, 250 70, 70 70, 150 150)) true Test 70 POLYGON ((150 150, 270 150, 140 20, 20 20, 150 150)) true Test 71 POLYGON ((150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150)) true Test 72 POLYGON ((150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150)) true Test 73 POLYGON ((20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20)) true Test 74 POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true Test 75 POLYGON ((70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150)) true Test 76 POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160)) true Test 77 POLYGON ((60 160, 20 200, 260 200, 220 160, 140 80, 60 160)) true Test 78 POLYGON ((60 160, 20 200, 260 200, 140 80, 60 160)) true Test 79 POLYGON ((20 200, 140 80, 260 200, 20 200)) true Test 80 POLYGON ((20 200, 60 160, 140 80, 220 160, 260 200, 20 200)) true Test 81 POLYGON ((20 200, 60 160, 140 80, 260 200, 20 200)) true Test 82 POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0)) true Test 83 POLYGON ((100 100, 1000000 110, 10000000 100, 100 100)) true Test 84 POLYGON ((100 0, 100 200, 200 200, 200 0, 100 0)) true Test 85 POLYGON ((120 0, 120 200, 200 200, 200 0, 120 0)) true Test 86 POLYGON ((0 0, 0 200, 110 200, 110 0, 0 0)) true Test 87 POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100)) true Test 88 POLYGON ((100 100, 2100 110, 2100 100, 100 100)) true Test 89 POLYGON ((100 100, 2101 110, 2101 100, 100 100)) true Test 90 POLYGON ((100 100, 200 200, 200 100, 100 100)) true Test 91 POLYGON ((100 100, 1000000 110, 1000000 100, 100 100)) true Test 93 POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100)) true Test 94 POLYGON ((100 100, 500 110, 500 100, 100 100)) true Test 95 POLYGON ((100 100, 501 110, 501 100, 100 100)) true Test 96 POLYGON ((120 100, 130 200, 200 200, 200 100, 120 100)) true Test 97 POLYGON ((120 100, 17 200, 200 200, 200 100, 120 100)) true Test 98 POLYGON ((101 99, 101 1000000, 102 1000000, 101 99)) true Test 99 POLYGON ((100 100, 200 101, 200 100, 100 100)) true Test 100 POLYGON ((16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319)) true Test 101 POLYGON ((10 307, 22 307, 153 34, 22 34, 10 307)) true Test 102 POLYGON ((160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200)) true Test 103 POLYGON ((170 120, 240 100, 260 50, 190 70, 170 120)) true Test 104 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true Test 105 POLYGON ((270 90, 200 50, 150 80, 210 120, 270 90)) true Test 106 POLYGON ((170 120, 260 100, 240 60, 150 80, 170 120)) true Test 107 POLYGON ((220 120, 270 80, 200 60, 160 100, 220 120)) true Test 108 POLYGON ((260 50, 180 70, 180 110, 260 90, 260 50)) true Test 109 POLYGON ((230 110, 290 80, 190 60, 140 90, 230 110)) true Test 110 POLYGON ((170 120, 330 120, 260 50, 100 50, 170 120)) true Test 111 POLYGON ((170 120, 330 120, 280 70, 120 70, 170 120)) true Test 112 POLYGON ((170 120, 300 120, 250 70, 120 70, 170 120)) true Test 113 POLYGON ((190 100, 310 100, 260 50, 140 50, 190 100)) true Test 114 POLYGON ((280 130, 360 130, 270 40, 190 40, 280 130)) true Test 115 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true Test 116 POLYGON ((220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80)) true Test 117 POLYGON ((260 130, 360 130, 280 40, 170 40, 260 130)) true Test 118 POLYGON ((240 110, 340 110, 290 60, 190 60, 240 110)) true Test 119 POLYGON ((250 120, 350 120, 280 50, 180 50, 250 120)) true Test 120 POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) true Test 121 POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) true Test 122 POLYGON ((280 190, 330 150, 200 110, 150 150, 280 190)) true Test 123 MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)), ((300 270, 420 270, 340 190, 220 190, 300 270))) true Test 124 POLYGON ((80 190, 220 190, 140 110, 0 110, 80 190)) true Test 125 POLYGON ((330 150, 200 110, 150 150, 280 190, 330 150)) true Test 126 POLYGON ((290 190, 340 150, 220 120, 170 170, 290 190)) true Test 127 POLYGON ((220 190, 340 190, 260 110, 140 110, 220 190)) true Test 128 POLYGON ((140 190, 220 190, 100 70, 20 70, 140 190)) true Test 129 POLYGON ((140 220, 60 140, 140 60, 220 140, 140 220)) true Test 130 MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)), ((20 100, 100 100, 100 180, 20 180, 20 100)), ((100 180, 180 180, 180 260, 100 260, 100 180)), ((180 100, 260 100, 260 180, 180 180, 180 100))) true Test 131 MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)), ((110 110, 150 20, 70 20, 110 110))) true Test 132 MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110))) true Test 133 MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 134 MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true Test 135 MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 136 MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ((110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110))) true Test 137 MULTIPOLYGON (((110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ((110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true Test 138 POLYGON ((100 60, 140 100, 100 140, 60 100, 100 60)) true Test 139 MULTIPOLYGON (((80 40, 120 40, 120 80, 80 80, 80 40)), ((120 80, 160 80, 160 120, 120 120, 120 80)), ((80 120, 120 120, 120 160, 80 160, 80 120)), ((40 80, 80 80, 80 120, 40 120, 40 80))) true Test 140 LINESTRING (150 150, 40 230) true Test 141 POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150)) true Test 142 LINESTRING (40 40, 50 130, 130 130) true Test 143 LINESTRING (40 230, 150 150) true Test 144 LINESTRING (210 150, 330 150) true Test 145 LINESTRING (200 150, 310 150, 360 220) true Test 146 LINESTRING (180 150, 250 150, 230 250, 370 250, 410 150) true Test 147 LINESTRING (210 210, 220 150, 320 150, 370 210) true Test 148 LINESTRING (20 60, 150 60) true Test 149 LINESTRING (60 90, 310 180) true Test 150 LINESTRING (90 210, 210 90) true Test 151 LINESTRING (290 10, 130 170) true Test 152 LINESTRING (30 100, 100 100, 180 100) true Test 153 LINESTRING (20 100, 100 100, 360 100, 410 100) true Test 154 LINESTRING (90 210, 150 150, 210 90) true Test 155 LINESTRING (180 90, 280 120) true Test 156 LINESTRING (70 70, 80 20) true Test 157 LINESTRING (130 20, 150 60) true Test 158 LINESTRING (70 70, 80 20, 140 20, 150 60) true Test 159 LINESTRING (170 50, 170 20, 240 20, 260 60) true Test 160 LINESTRING (50 100, 140 190, 280 190) true Test 161 LINESTRING (140 60, 180 100, 290 100) true Test 162 LINESTRING (170 120, 210 80, 270 80) true Test 163 LINESTRING (170 120, 260 50) true Test 164 LINESTRING (190 90, 190 270) true Test 165 POLYGON ((190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true Test 166 LINESTRING (60 160, 150 70) true Test 167 POLYGON ((190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true Test 168 POLYGON ((190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true Test 169 LINESTRING (190 90, 190 190, 190 270) true Test 170 LINESTRING (60 160, 110 110, 150 70) true Test 171 POLYGON ((190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true Test 172 LINESTRING (130 110, 180 110, 190 60) true Test 173 POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true Test 174 LINESTRING (80 110, 180 110) true Test 175 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true Test 176 LINESTRING (80 110, 170 110) true Test 177 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true Test 178 LINESTRING (80 110, 130 110, 170 110) true Test 179 LINESTRING (80 110, 130 110, 180 110) true Test 180 LINESTRING (160 70, 320 230) true Test 181 LINESTRING (160 70, 200 110, 280 190, 320 230) true Test 182 LINESTRING (70 50, 70 150) true Test 183 MULTIPOLYGON (((0 0, 0 100, 140 100, 140 0, 0 0)), ((20 170, 70 100, 130 170, 20 170))) true Test 184 LINESTRING (110 110, 20 200, 200 200, 110 110) true Test 185 POLYGON ((20 20, 200 20, 110 110, 20 20)) true Test 186 LINESTRING (150 70, 160 110, 200 60, 150 70) true Test 187 LINESTRING (80 60, 120 40, 120 70, 80 60) true Test 188 POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true Test 189 LINESTRING (20 20, 200 20, 110 110, 20 20) true Test 190 LINESTRING (110 90, 170 30, 50 30, 110 90) true Test 191 LINESTRING (110 110, 170 50, 170 110, 110 110) true Test 192 LINESTRING (110 90, 70 50, 130 50, 110 90) true Test 193 LINESTRING (110 60, 20 150, 200 150, 110 60) true Test 194 LINESTRING (110 130, 110 70, 200 100, 110 130) true Test 195 LINESTRING (110 90, 160 40, 60 40, 110 90) true Test 196 LINESTRING (110 100, 40 30, 180 30, 110 100) true Test 197 POLYGON ((110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true Test 198 LINESTRING (110 110, 180 30, 40 30, 110 110) true Test 199 LINESTRING (110 90, 180 30, 40 30, 110 90) true Test 200 LINESTRING (110 90, 50 30, 180 30, 110 90) true Test 201 LINESTRING (110 110, 200 200, 200 110, 110 200) true Test 202 POLYGON ((110 110, 200 20, 20 20, 110 110)) true Test 203 LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110) true Test 204 LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170) true Test 205 LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200) true Test 206 LINESTRING (110 110, 170 50, 20 200, 20 110, 200 110) true Test 207 LINESTRING (110 110, 180 40, 110 40, 110 180) true Test 208 LINESTRING (110 60, 50 30, 170 30, 90 70) true Test 209 LINESTRING (110 110, 180 40, 110 40, 110 110, 70 40) true Test 210 LINESTRING (230 70, 170 120, 190 60, 140 60, 170 120, 270 90) true Test 211 MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 210, 110 110)) true Test 212 MULTILINESTRING ((20 110, 200 110), (60 180, 60 110, 160 110, 110 110)) true Test 213 MULTILINESTRING ((20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110)) true Test 214 MULTILINESTRING ((20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150)) true Test 215 MULTILINESTRING ((20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50)) true Test 216 MULTILINESTRING ((20 110, 200 110), (110 60, 110 160, 200 160)) true Test 217 MULTILINESTRING ((110 100, 40 30, 180 30), (170 30, 110 90, 50 30)) true Test 218 MULTILINESTRING ((110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80)) true Test 219 MULTILINESTRING ((20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150)) true Test 220 MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)), ((110 110, 20 200, 200 200, 110 110))) true Test 221 MULTILINESTRING ((20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110)) true Test 222 MULTILINESTRING ((20 110, 200 110), (110 110, 20 170, 20 130, 200 90)) true Test 223 LINESTRING (0 0, 0 50, 50 50, 50 0, 0 0) true Test 224 MULTILINESTRING ((0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true Test 225 LINESTRING (40 180, 140 180) true Test 226 MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((20 180, 20 80, 180 80, 180 180, 20 180))) false Test 227 MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)), ((60 180, 60 80, 180 80, 180 180, 60 180))) false Test 228 LINESTRING (0 0, 60 0, 60 60, 60 0, 120 0) true Test 229 MULTILINESTRING ((0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true Test 230 LINESTRING (40 40, 120 120) true Test 231 LINESTRING (40 40, 60 120) true Test 232 LINESTRING (60 240, 40 40) true Test 233 LINESTRING (40 40, 180 180) true Test 234 LINESTRING (120 120, 20 200) true Test 235 LINESTRING (60 240, 120 120) true Test 236 LINESTRING (20 180, 140 140) true Test 237 LINESTRING (40 120, 120 40) true Test 238 LINESTRING (40 40, 100 100) true Test 239 LINESTRING (100 100, 40 40) true Test 240 LINESTRING (40 120, 120 160) true Test 241 LINESTRING (20 20, 180 180) true Test 242 LINESTRING (20 20, 110 110) true Test 243 LINESTRING (50 50, 140 140) true Test 244 LINESTRING (180 180, 40 40) true Test 245 LINESTRING (120 120, 260 260) true Test 246 LINESTRING (260 260, 120 120) true Test 247 LINESTRING (40 40, 100 100, 200 120, 80 240) true Test 248 LINESTRING (40 40, 20 100, 40 160, 20 200) true Test 249 LINESTRING (20 200, 40 160, 20 100, 40 40) true Test 250 LINESTRING (80 240, 200 120, 100 100, 40 40) true Test 251 LINESTRING (60 60, 60 230, 140 230, 250 160) true Test 252 LINESTRING (20 20, 60 60, 250 160, 310 230) true Test 253 LINESTRING (20 20, 110 110, 200 110, 320 230) true Test 254 LINESTRING (60 110, 60 250, 360 210) true Test 255 LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210) true Test 256 LINESTRING (360 210, 310 160, 110 160, 60 110) true Test 257 LINESTRING (160 160, 240 240) true Test 258 LINESTRING (240 240, 160 160) true Test 259 LINESTRING (60 150, 110 100, 170 100, 110 230) true Test 260 LINESTRING (200 120, 200 190, 150 240, 200 240) true Test 261 LINESTRING (200 240, 150 240, 200 200, 200 120) true Test 262 LINESTRING (60 230, 80 140, 120 140, 140 230) true Test 263 LINESTRING (60 110, 200 110, 250 160, 300 210) true Test 264 LINESTRING (60 110, 200 110, 250 160, 300 210, 360 210) true Test 265 LINESTRING (60 110, 220 110, 250 160, 280 110) true Test 266 LINESTRING (60 110, 150 110, 200 160, 250 110, 360 110, 360 210) true Test 267 LINESTRING (130 160, 160 110, 220 110, 250 160, 250 210) true Test 268 LINESTRING (130 160, 160 110, 190 110, 230 210) true Test 269 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210) true Test 270 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210) true Test 271 LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 380 210) true Test 272 LINESTRING (110 160, 160 110, 200 110, 250 160, 250 210) true Test 273 LINESTRING (110 160, 180 110, 250 160, 320 110) true Test 274 LINESTRING (140 160, 180 80, 220 160, 250 80) true Test 275 LINESTRING (40 40, 100 100, 200 120, 130 190) true Test 276 LINESTRING (20 130, 70 130, 160 40) true Test 277 LINESTRING (40 160, 40 100, 110 40, 170 40) true Test 278 LINESTRING (130 110, 180 160, 230 110, 280 160, 330 110) true Test 279 LINESTRING (30 140, 80 140, 100 100, 200 30) true Test 280 LINESTRING (110 110, 110 160, 180 110, 250 160, 250 110) true Test 281 LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140) true Test 282 LINESTRING (20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110) true Test 283 LINESTRING (20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200) true Test 284 LINESTRING (30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20) true Test 285 LINESTRING (80 240, 120 200, 200 120, 100 100, 80 80, 40 40) true Test 286 LINESTRING (260 210, 240 130, 280 120, 260 40) true Test 287 LINESTRING (100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150) true Test 288 LINESTRING (140 130, 100 110, 120 60, 170 60) true Test 289 LINESTRING (60 110, 110 160, 310 160, 360 210) true Test 290 LINESTRING (60 110, 110 160, 250 160) true Test 291 LINESTRING (110 160, 310 160, 340 190) true Test 292 LINESTRING (140 160, 250 160, 310 160, 340 190) true Test 293 LINESTRING (110 160, 250 160, 310 160) true Test 294 LINESTRING (200 120, 100 100, 40 40, 140 80, 200 40) true Test 295 LINESTRING (280 240, 240 140, 200 120, 100 100, 40 40) true Test 296 LINESTRING (80 190, 140 140, 40 40) true Test 297 LINESTRING (240 200, 200 260, 80 240, 140 180) true Test 298 LINESTRING (140 180, 80 240, 200 260, 240 200) true Test 299 LINESTRING (280 240, 240 140, 200 120, 80 240) true Test 300 LINESTRING (20 80, 120 80, 200 80, 260 20) true Test 301 LINESTRING (100 100, 200 120, 240 140, 280 240) true Test 302 LINESTRING (280 240, 240 140, 200 120, 100 100) true Test 303 LINESTRING (80 20, 80 80, 240 80, 300 20) true Test 304 LINESTRING (20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80) true Test 305 LINESTRING (100 100, 20 180, 180 180) true Test 306 LINESTRING (100 100, 180 20, 20 20, 100 100) true Test 307 LINESTRING (20 100, 180 100, 100 180) true Test 308 LINESTRING (100 40, 100 160, 180 160) true Test 309 LINESTRING (20 100, 100 100, 180 100, 100 180) true Test 310 LINESTRING (100 100, 160 40) true Test 311 LINESTRING (100 100, 180 20) true Test 312 LINESTRING (60 60, 100 100, 140 60) true Test 313 LINESTRING (100 100, 190 10, 190 100) true Test 314 LINESTRING (100 100, 160 40, 160 100) true Test 315 LINESTRING (60 140, 160 40, 160 140) true Test 316 LINESTRING (20 20, 140 140) true Test 317 LINESTRING (80 80, 20 80, 140 80, 80 20, 80 140) true Test 318 LINESTRING (80 80, 20 80, 140 80) true Test 319 LINESTRING (80 80, 140 80, 80 20, 80 140) true Test 320 LINESTRING (80 80, 20 80, 140 80, 80 20, 80 80) true Test 321 LINESTRING (80 80, 20 80, 140 80, 80 80) true Test 322 LINESTRING (80 80, 20 80, 20 140, 140 20, 80 20, 80 80) true Test 323 LINESTRING (20 140, 140 20, 100 20, 100 80) true Test 324 LINESTRING (140 80, 20 80, 120 80, 80 20, 80 140) true Test 325 LINESTRING (140 80, 20 80, 140 80) true Test 326 LINESTRING (140 80, 20 80, 80 140, 80 20) true Test 327 LINESTRING (140 80, 80 80, 20 80, 50 140, 50 60) true Test 328 LINESTRING (140 80, 20 80, 120 80, 80 20, 80 80, 80 140) true Test 329 LINESTRING (140 80, 20 80, 80 80, 140 80) true Test 330 LINESTRING (140 80, 20 80, 80 140, 80 80, 80 20) true Test 331 LINESTRING (130 150, 220 150, 220 240) true Test 332 LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150) true Test 333 LINESTRING (30 150, 130 150, 250 150) true Test 334 LINESTRING (30 150, 250 150) true Test 335 LINESTRING (130 240, 130 20, 30 20, 130 150) true Test 336 LINESTRING (120 240, 120 20, 20 20, 120 170) true Test 337 LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true Test 338 LINESTRING (110 110, 200 110) true Test 339 LINESTRING (20 110, 200 110) true Test 340 LINESTRING (90 200, 90 130, 110 110, 150 200) true Test 341 LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true Test 342 LINESTRING (200 110, 110 110, 90 130, 90 200) true Test 343 LINESTRING (80 80, 150 80, 210 80) true Test 344 MULTILINESTRING ((20 20, 140 140), (20 140, 140 20)) true Test 345 LINESTRING (40 80, 160 200, 260 20, 40 80) true Test 346 LINESTRING (40 80, 260 20, 160 200, 40 80) true Test 347 LINESTRING (260 20, 40 80, 160 200, 260 20) true Test 348 LINESTRING (100 140, 160 200, 260 20, 40 80, 100 140) true Test 349 LINESTRING (100 100, 180 180, 20 180, 100 100) true Test 350 LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150) true Test 351 LINESTRING (40 150, 150 40, 170 20, 170 190, 40 150) true Test 352 LINESTRING (180 100, 20 100, 100 180, 180 100) true Test 353 LINESTRING (180 180, 100 100, 20 180, 180 180) true Test 354 LINESTRING (20 180, 100 100, 20 20, 20 180) true Test 355 LINESTRING (100 20, 100 180, 180 100, 100 20) true Test 356 LINESTRING (170 20, 20 170, 170 170, 170 20) true Test 357 LINESTRING (40 150, 150 150, 90 210, 40 150) true Test 358 LINESTRING (20 150, 170 150, 90 230, 20 150) true Test 359 LINESTRING (40 150, 150 150, 150 40, 20 40, 20 150, 40 150) true Test 360 LINESTRING (110 110, 200 20, 20 20, 110 110) true Test 361 LINESTRING (200 20, 20 200, 200 200, 110 110, 110 40) true Test 362 LINESTRING (200 20, 20 200, 200 200, 20 20) true Test 363 LINESTRING (110 110, 20 110, 110 20, 20 20, 110 110) true Test 364 LINESTRING (110 110, 200 200, 110 200, 200 110, 110 110) true Test 365 LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120) true Test 366 LINESTRING (170 100, 70 100, 170 170, 70 170, 170 100) true Test 367 LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110) true Test 368 LINESTRING (110 160, 70 110, 60 160, 20 130, 110 160) true Test 369 LINESTRING (20 200, 200 200, 20 20, 200 20, 20 200) true Test 370 LINESTRING (20 110, 200 110, 200 160, 20 60, 20 110) true Test 371 LINESTRING (200 200, 110 110, 200 110, 110 200, 200 200) true Test 372 LINESTRING (220 120, 120 20, 220 20, 120 120, 220 120) true Test 373 MULTILINESTRING ((70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) true Test 374 MULTILINESTRING ((20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) true Test 375 MULTILINESTRING ((90 140, 90 60, 90 20), (170 20, 130 20, 20 20)) true Test 376 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90)) true Test 377 MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60)) true Test 378 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60)) true Test 379 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20)) true Test 380 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true Test 381 MULTILINESTRING ((90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20)) true Test 382 MULTILINESTRING ((90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20)) true Test 383 MULTILINESTRING ((20 20, 90 90, 20 160), (90 160, 90 20)) true Test 384 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60)) true Test 385 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60)) true Test 386 MULTILINESTRING ((160 160, 90 90, 160 20), (160 120, 90 90, 160 60)) true Test 387 POINT (20 20) true Test 388 POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120)) true Test 389 POINT (70 170) true Test 390 POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230)) true Test 391 POINT (110 130) true Test 392 POLYGON ((20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160)) true Test 393 POINT (100 70) true Test 394 POLYGON ((20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150)) true Test 395 POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) false Test 396 POINT (60 120) true Test 397 POINT (110 120) true Test 398 POINT (160 120) true Test 399 POINT (100 150) true Test 400 POINT (100 80) true Test 401 POINT (60 160) true Test 402 POLYGON ((190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true Test 403 POINT (190 90) true Test 404 POINT (190 190) true Test 405 POINT (360 20) true Test 406 POINT (130 130) true Test 407 POINT (280 50) true Test 408 POINT (150 100) true Test 409 POINT (100 50) true Test 410 POINT (140 120) true Test 411 POINT (190 50) true Test 412 POLYGON ((190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true Test 413 POINT (180 90) true Test 414 POLYGON ((190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90)) true Test 415 MULTIPOINT (20 80, 110 160, 20 160) true Test 416 MULTIPOINT (20 80, 60 120, 20 160) true Test 417 MULTIPOINT (10 80, 110 170, 110 120) true Test 418 MULTIPOINT (10 80, 110 170, 160 120) true Test 419 MULTIPOINT (20 120, 60 120, 110 120, 160 120, 200 120) true Test 420 MULTIPOINT (60 120, 110 120, 160 120) true Test 421 MULTIPOINT (60 120, 160 120, 160 40, 60 40) true Test 422 MULTIPOINT (20 150, 60 120, 110 80) true Test 423 MULTIPOINT (110 80, 160 120, 200 160) true Test 424 MULTIPOINT (110 80, 110 120, 110 160) true Test 425 MULTIPOINT (110 170, 110 80) true Test 426 MULTIPOINT (60 120, 160 120, 110 80, 110 170) true Test 427 MULTIPOINT (90 80, 130 80) true Test 428 MULTIPOINT (60 120, 160 120, 110 80) true Test 429 MULTIPOINT (40 170, 40 90, 130 170) true Test 430 MULTIPOINT (90 170, 280 170, 190 90) true Test 431 MULTIPOINT (190 110, 150 70, 230 70) true Test 432 POINT (100 100) true Test 433 MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)), ((100 180, 100 100, 180 100, 180 180, 100 180))) true Test 434 POINT (20 100) true Test 435 POINT (60 100) true Test 436 POINT (110 110) true Test 437 MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ((110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110))) true Test 438 POINT (110 200) true Test 439 LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240) true Test 440 POINT (90 80) true Test 441 POINT (340 240) true Test 442 POINT (230 150) true Test 443 POINT (160 150) true Test 444 POINT (90 150) true Test 445 LINESTRING (150 150, 20 20, 280 20, 150 150) true Test 446 POINT (150 80) true Test 447 POINT (150 150) true Test 448 POINT (100 20) true Test 449 POINT (220 220) true Test 450 LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220) true Test 451 LINESTRING (110 110, 220 20, 20 20, 220 220) true Test 452 POINT (110 20) true Test 453 POINT (220 20) true Test 454 LINESTRING (220 220, 20 20, 220 20, 110 110) true Test 455 POINT (20 110) true Test 456 LINESTRING (20 200, 20 20, 110 20, 20 110, 110 200) true Test 457 POINT (20 200) true Test 458 LINESTRING (20 200, 200 20, 20 20, 200 200) true Test 459 LINESTRING (20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true Test 460 POINT (80 140) true Test 461 LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 462 LINESTRING (20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 463 LINESTRING (20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true Test 464 LINESTRING (20 200, 200 20, 20 20, 110 110, 200 200) true Test 465 LINESTRING (20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true Test 466 LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 467 LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true Test 468 LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true Test 469 LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true Test 470 LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200) true Test 471 LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 200 200) true Test 472 LINESTRING (110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true Test 473 LINESTRING (110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200) true Test 474 LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true Test 475 LINESTRING (200 200, 20 20, 200 20, 20 200, 110 200, 110 110) true Test 476 LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110) true Test 477 LINESTRING (200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110) true Test 478 POINT (110 160) true Test 479 LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true Test 480 LINESTRING (110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110) true Test 481 LINESTRING (110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110) true Test 482 LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true Test 483 LINESTRING (110 110, 200 200, 110 200, 110 20, 20 20, 110 110) true Test 484 POINT (140 200) true Test 485 LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true Test 486 POINT (90 130) true Test 487 LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true Test 488 LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true Test 489 LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true Test 490 LINESTRING (110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110) true Test 491 LINESTRING (110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110) true Test 492 LINESTRING (110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110) true Test 493 LINESTRING (110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110) true Test 494 LINESTRING (200 200, 20 20, 200 20, 20 200, 200 200) true Test 495 LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200) true Test 496 LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200) true Test 497 LINESTRING (90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 498 LINESTRING (90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 499 LINESTRING (90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 500 LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true Test 501 LINESTRING (90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true Test 502 LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true Test 503 POINT (110 150) true Test 504 LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true Test 505 LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true Test 506 MULTIPOINT (50 250, 90 220, 130 190) true Test 507 MULTIPOINT (180 180, 230 130, 280 80) true Test 508 MULTIPOINT (50 120, 90 80, 130 40) true Test 509 MULTIPOINT (300 280, 340 240, 380 200) true Test 510 MULTIPOINT (230 150, 260 120, 290 90) true Test 511 MULTIPOINT (200 190, 240 150, 270 110) true Test 512 MULTIPOINT (160 150, 190 120, 220 90) true Test 513 MULTIPOINT (120 190, 160 150, 200 110) true Test 514 MULTIPOINT (90 80, 160 150, 340 240) true Test 515 MULTIPOINT (90 80, 160 150, 300 150) true Test 516 MULTIPOINT (90 80, 160 150, 240 150) true Test 517 MULTIPOINT (90 80, 130 120, 210 150) true Test 518 MULTIPOINT (130 120, 210 150, 340 200) true Test 519 MULTIPOINT (160 150, 240 150, 340 210) true Test 520 MULTIPOINT (160 150, 300 150, 340 150) true Test 521 MULTIPOINT (160 150, 240 150, 340 240) true Test 522 POINT (40 60) true Test 523 POINT (40 40) true Test 524 MULTIPOINT (20 20, 80 80, 20 120) true Test 525 MULTIPOINT (40 40, 80 60, 120 100) true Test 526 MULTIPOINT (40 40, 120 100, 80 60) true Test 527 MULTIPOINT (40 40, 60 100, 100 60, 120 120) true Test 528 MULTIPOINT (20 120, 60 60, 100 100, 140 40) true Test 529 MULTIPOINT (20 20, 80 70, 140 120, 200 170) true Test 530 MULTIPOINT (20 20, 140 120, 80 70, 200 170) true Test 531 MULTIPOINT (80 70, 20 20, 200 170, 140 120) true Test 532 MULTIPOINT (80 70, 140 120) true Test 533 MULTIPOINT (140 120, 80 70) true Test 534 MULTIPOINT (80 170, 140 120, 200 80) true Test 535 MULTIPOINT (80 170, 140 120, 200 80, 80 70) true Test 536 POINT (10 10) true Test 537 MULTIPOINT (10 10, 20 20) true Test 538 LINESTRING (10 10, 20 20) true Test 539 LINESTRING (10 10, 20 20, 20 10, 10 10) true Test 540 LINESTRING (40 40, 100 100, 180 100, 180 180, 100 180, 100 100) true Test 541 MULTILINESTRING ((10 10, 20 20), (20 20, 30 30)) true Test 542 MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30)) true Test 543 MULTILINESTRING ((10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40)) true Test 544 MULTILINESTRING ((10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20)) true Test 545 MULTILINESTRING ((10 10, 20 20, 20 30, 30 30, 30 20, 20 20)) true Test 546 POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60)) true Test 547 POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) true Test 548 MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240) true Test 549 POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10)) true Test 550 LINESTRING (30 220, 240 220, 240 220) true Test 551 LINESTRING (110 290, 110 100, 110 100) true Test 552 LINESTRING (120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140) true Test 553 POLYGON ((200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360), (220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300)) true Test 554 MULTIPOINT (70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50) true Test 555 MULTIPOINT (140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130) true Test 556 GEOMETRYCOLLECTION (POINT (110 300), POINT (100 110), POINT (130 210), POINT (150 210), POINT (150 180), POINT (130 170), POINT (140 190), POINT (130 200), LINESTRING (240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON ((210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340), (230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270))) true Test 557 MULTIPOINT (50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320) true Test 559 POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50)) true Test 560 POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140)) true Test 561 POLYGON ((80 100, 220 100, 220 240, 80 240, 80 100)) true Test 562 POLYGON ((20 340, 330 380, 50 40, 20 340)) true Test 563 POLYGON ((210 320, 140 270, 0 270, 140 220, 210 320)) true Test 564 POLYGON ((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0)) true Test 565 POLYGON ((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0)) true Test 566 POLYGON ((0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0)) true Test 567 POLYGON ((230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0)) true Test 568 POLYGON ((0 0, 210 0, 210 230, 0 230, 0 0)) true Test 569 MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 90, 60 60, 90 60, 90 90, 60 90)), ((70 120, 90 90, 100 120, 70 120)), ((120 70, 90 90, 120 100, 120 70))) true Test 570 POLYGON ((0 0, 340 0, 340 300, 0 300, 0 0)) true Test 571 MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)), ((60 100, 60 60, 100 60, 100 100, 60 100))) true Test 572 POLYGON ((0 0, 120 0, 120 120, 0 120, 0 0)) true Test 573 MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)), ((60 100, 60 60, 100 60, 100 100, 60 100))) true Test 574 POLYGON ((160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) true Test 575 POLYGON ((300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240)) true Test 576 MULTIPOLYGON (((120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ((360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200))) true Test 577 MULTIPOLYGON (((100 220, 100 200, 300 200, 300 220, 100 220)), ((280 180, 280 160, 300 160, 300 180, 280 180)), ((220 140, 220 120, 240 120, 240 140, 220 140)), ((180 220, 160 240, 200 240, 180 220))) true Test 578 MULTIPOLYGON (((100 200, 100 180, 120 180, 120 200, 100 200)), ((60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ((280 220, 240 180, 260 160, 300 200, 280 220))) true Test 579 MULTIPOLYGON (((80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ((220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220))) true Test 580 POLYGON ((60 160, 140 160, 140 60, 60 60, 60 160)) true Test 581 POLYGON ((160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140)) true Test 582 POLYGON ((10 10, 100 10, 10 11, 10 10)) true Test 583 POLYGON ((90 0, 200 0, 200 200, 90 200, 90 0)) true Test 584 POLYGON ((100 10, 10 10, 90 11, 90 20, 100 20, 100 10)) true Test 585 POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20)) true Test 586 POLYGON ((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10)) true Test 587 POLYGON ((60 40, 40 40, 40 20, 60 20, 60 40)) true Test 588 POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) true Test 589 POLYGON ((0 30, 0 0, 30 0, 30 30, 0 30)) true Test 590 MULTIPOLYGON (((0 0, 100 0, 100 20, 0 20, 0 0)), ((0 40, 0 21, 100 20, 100 40, 0 40))) true Test 591 POLYGON ((110 30, 90 30, 90 10, 110 10, 110 30)) true Test 592 POLYGON ((100 10, 0 10, 100 11, 100 10)) true Test 593 POLYGON ((100 10, 0 10, 90 11, 90 20, 100 20, 100 10)) true Test 594 POLYGON ((10 30, 10 0, 30 10, 30 30, 10 30)) true Test 595 POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30)) true Test 596 POLYGON ((0 0, 200 0, 0 198, 0 0)) true Test 597 POLYGON ((280 60, 139 60, 280 70, 280 60)) true Test 598 POLYGON ((0 0, 140 10, 0 20, 0 0)) true Test 599 POLYGON ((280 0, 139 10, 280 1, 280 0)) true Test 600 MULTIPOLYGON (((1 4, 1 1, 2 1, 2 4, 1 4)), ((3 4, 3 1, 4 1, 4 4, 3 4)), ((5 4, 5 1, 6 1, 6 4, 5 4)), ((7 4, 7 1, 8 1, 8 4, 7 4)), ((9 4, 9 1, 10 1, 10 4, 9 4))) true Test 601 POLYGON ((0 2, 11 3, 11 2, 0 2)) true Test 602 POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) true Test 603 POLYGON ((200 160, 160 160, 160 80, 200 80, 200 160)) true Test 604 LINESTRING (160 140, 160 100) true Test 605 POLYGON ((20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160)) true Test 606 POLYGON ((200 160, 150 160, 150 80, 200 80, 200 160)) true Test 607 POLYGON ((83 33, 62 402, 68 402, 83 33)) true Test 608 POLYGON ((78 39, 574 76, 576 60, 78 39)) true Test 609 LINESTRING (240 190, 120 120) true Test 610 POLYGON ((110 240, 50 80, 240 70, 110 240)) true Test 611 LINESTRING (0 100, 100 100, 200 200) true Test 612 POLYGON ((30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140)) true Test 613 LINESTRING (40 340, 200 250, 120 180, 160 110, 270 40) true Test 614 MULTIPOLYGON (((60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ((120 160, 140 160, 140 140, 120 160))) true Test 615 MULTILINESTRING ((100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120)) true Test 616 MULTIPOLYGON (((60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ((100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200))) true Test 617 MULTILINESTRING ((40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320)) true Test 618 MULTIPOLYGON (((60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ((280 400, 320 400, 320 360, 280 360, 280 400)), ((300 240, 300 220, 320 220, 320 240, 300 240))) true Test 619 MULTILINESTRING ((80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360)) true Test 620 MULTIPOLYGON (((120 180, 60 80, 180 80, 120 180)), ((100 240, 140 240, 120 220, 100 240))) true Test 621 MULTILINESTRING ((180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100)) true Test 622 POLYGON ((95 9, 81 414, 87 414, 95 9)) true Test 623 LINESTRING (93 13, 96 13) true Test 624 LINESTRING (0 0, 100 100) true Test 625 LINESTRING (0 100, 100 0) true Test 626 LINESTRING (0 0, 100 100, 200 0) true Test 627 LINESTRING (0 0, 100 100, 200 200) true Test 628 LINESTRING (40 360, 40 220, 120 360) true Test 629 LINESTRING (120 340, 60 220, 140 220, 140 360) true Test 630 LINESTRING (220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280) true Test 631 LINESTRING (220 240, 140 160, 120 180, 220 280, 200 300, 100 200) true Test 632 LINESTRING (80 320, 220 320, 220 160, 80 300) true Test 633 LINESTRING (60 200, 60 260, 140 200) true Test 634 LINESTRING (60 200, 60 140, 140 200) true Test 635 LINESTRING (180 200, 100 280, 20 200, 100 120, 180 200) true Test 636 LINESTRING (100 200, 220 200, 220 80, 100 80, 100 200) true Test 637 LINESTRING (0 10, 620 10, 0 11) true Test 638 LINESTRING (400 60, 400 10) true Test 639 MULTIPOLYGON (((120 320, 180 200, 240 320, 120 320)), ((180 200, 240 80, 300 200, 180 200))) true Test 640 MULTIPOINT (120 320, 180 260, 180 320, 180 200, 300 200, 200 220) true Test 641 MULTIPOLYGON (((120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ((200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) true Test 642 MULTIPOINT (200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200) true Test 643 MULTIPOINT (40 90, 20 20, 70 70) true Test 644 LINESTRING (20 20, 100 100) true Test 645 LINESTRING (20 20, 110 110, 170 50, 130 10, 70 70) true Test 646 MULTILINESTRING ((100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) true Test 647 MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) true Test 648 MULTILINESTRING ((-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140)) true Test 649 MULTIPOINT (-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120) true Test 650 MULTILINESTRING ((180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280)) true Test 651 POINT (200 200) true Test 652 MULTIPOINT (100 100, 200 200) true Test 653 MULTIPOINT (100 100, 200 200, 300 300, 500 500) true Test 654 MULTIPOINT (100 100, 200 200, 400 400, 600 600) true Test 655 POINT (80 200) true Test 656 POINT (260 80) true Test 657 POINT (60 260) true Test 658 POINT (120 260) true Test 659 POINT (80 80) true Test 660 POINT (80 280) true Test 661 POLYGON ((0 0, 140 0, 140 140, 0 140, 0 0)) true Test 662 POLYGON ((140 0, 0 0, 0 140, 140 140, 140 0)) true Test 663 POLYGON ((40 60, 360 60, 360 300, 40 300, 40 60)) true Test 664 POLYGON ((120 100, 280 100, 280 240, 120 240, 120 100)) true Test 665 POLYGON ((80 100, 360 100, 360 280, 80 280, 80 100)) true Test 666 POLYGON ((0 280, 0 0, 260 0, 260 280, 0 280), (220 240, 40 240, 40 40, 220 40, 220 240)) true Test 667 POLYGON ((20 260, 240 260, 240 20, 20 20, 20 260), (160 180, 80 180, 120 120, 160 180)) true Test 668 POLYGON ((60 80, 200 80, 200 220, 60 220, 60 80)) true Test 669 POLYGON ((120 140, 260 140, 260 260, 120 260, 120 140)) true Test 670 POLYGON ((60 220, 220 220, 140 140, 60 220)) true Test 671 POLYGON ((100 180, 180 180, 180 100, 100 100, 100 180)) true Test 672 POLYGON ((40 40, 180 40, 180 180, 40 180, 40 40)) true Test 673 POLYGON ((180 40, 40 180, 160 280, 300 140, 180 40)) true Test 674 POLYGON ((40 280, 200 280, 200 100, 40 100, 40 280), (100 220, 120 220, 120 200, 100 180, 100 220)) true Test 675 POLYGON ((40 280, 180 260, 180 120, 60 120, 40 280)) true Test 676 POLYGON ((0 200, 0 0, 200 0, 200 200, 0 200), (20 180, 130 180, 130 30, 20 30, 20 180)) true Test 677 POLYGON ((60 90, 130 90, 130 30, 60 30, 60 90)) true Test 678 LINESTRING (100 120, 100 240) true Test 679 POLYGON ((40 60, 160 60, 160 180, 40 180, 40 60)) true Test 680 LINESTRING (80 80, 140 140, 200 200) true Test 681 POLYGON ((40 40, 140 40, 140 140, 40 140, 40 40)) true Test 682 POLYGON ((190 190, 360 20, 20 20, 190 190), (111 110, 250 100, 140 30, 111 110)) true Test 683 POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 131 40, 200 110, 130 180)) true Test 684 LINESTRING (100 140, 100 40) true Test 685 MULTIPOLYGON (((20 80, 180 79, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160))) true Test 686 MULTIPOLYGON (((20 80, 180 80, 100 0, 20 80)), ((20 160, 180 160, 100 80, 20 160))) true Test 687 LINESTRING (60 0, 20 80, 100 80, 80 120, 40 140) true Test 688 LINESTRING (140 300, 220 160, 260 200, 240 260) true Test 689 LINESTRING (60 40, 140 40, 140 160, 0 160) true Test 690 LINESTRING (140 280, 240 280, 240 180, 140 180, 140 280) true Test 691 LINESTRING (140 0, 0 0, 40 60, 0 120, 60 200, 220 160, 220 40) true Test 692 LINESTRING (80 140, 180 100, 160 40, 100 40, 60 100, 80 140) true Test 693 LINESTRING (20 20, 80 80) true Test 694 LINESTRING (40 40, 160 160, 200 60, 60 140) true Test 695 LINESTRING (40 40, 200 40) true Test 696 LINESTRING (200 40, 140 40, 40 40) true Test 697 LINESTRING (0 0, 110 0, 60 0) true Test 698 LINESTRING (0 0, 110 0) true Test 699 LINESTRING (0 0, 80 0, 80 60, 80 0, 170 0) true Test 700 MULTILINESTRING ((0 0, 170 0), (80 0, 80 60)) true Test 701 LINESTRING (80 100, 180 200) true Test 702 LINESTRING (80 180, 180 120) true Test 703 LINESTRING (40 40, 100 100, 160 160) true Test 704 LINESTRING (160 60, 100 100, 60 140) true Test 705 LINESTRING (140 60, 60 140) true Test 706 LINESTRING (40 40, 180 180, 100 180, 100 100) true Test 707 LINESTRING (80 90, 50 50, 0 0) true Test 708 LINESTRING (40 140, 240 140) true Test 709 LINESTRING (40 140, 100 140, 80 80, 120 60, 100 140, 160 140, 160 100, 200 100, 160 140, 240 140) true Test 710 LINESTRING (20 20, 100 20, 20 20) true Test 711 LINESTRING (60 20, 200 20) true Test 712 LINESTRING (40 60, 180 60, 180 140, 100 140, 100 60, 220 60, 220 180, 80 180, 80 60, 280 60) true Test 713 LINESTRING (140 60, 180 60, 220 60, 260 60) true Test 714 MULTIPOINT (0 20, 40 20) true Test 715 POLYGON ((20 40, 20 0, 60 0, 60 40, 20 40)) true Test 716 MULTIPOINT (0 20, 20 20) true Test 717 MULTIPOINT (20 20, 40 20) true Test 718 MULTIPOINT (80 260, 140 260, 180 260) true Test 719 POLYGON ((40 320, 140 320, 140 200, 40 200, 40 320)) true Test 720 MULTIPOLYGON (((0 40, 0 0, 40 0, 40 40, 0 40)), ((40 80, 40 40, 80 40, 80 80, 40 80))) true Test 721 LINESTRING (40 40, 120 120, 200 120) true Test 722 LINESTRING (40 40, 100 100, 160 100) true Test 723 POINT (60 60) true Test 724 MULTIPOINT (40 40, 100 40) true Test 725 LINESTRING (40 40, 80 80) true Test 726 MULTIPOINT (40 40, 60 60) true Test 727 MULTIPOINT (60 60, 100 100) true Test 728 LINESTRING (40 40, 60 60, 80 80) true Test 729 POINT (20 30) true Test 730 MULTIPOINT (40 40, 80 60, 40 100) true Test 731 MULTIPOINT (80 280, 80 220, 160 220, 80 220) true Test 732 MULTIPOINT (80 280, 80 220, 160 220) true Test 733 MULTIPOINT EMPTY true Test 734 LINESTRING (20 60, 160 60, 80 160, 80 20) true Test 735 LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20) true Test 736 LINESTRING (20 60, 100 60, 60 100, 60 60) true Test 737 LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60) true Test 738 LINESTRING (20 20, 80 20, 80 80, 20 20) true Test 739 LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80) true Test 740 LINESTRING EMPTY true Test 741 MULTILINESTRING ((40 140, 160 40), (160 140, 40 40)) true Test 742 MULTILINESTRING ((20 160, 20 20), (100 160, 100 20)) true Test 743 MULTILINESTRING ((60 140, 20 80, 60 40), (60 40, 100 80, 60 140)) true Test 744 MULTILINESTRING ((60 40, 140 40, 100 120, 100 0), (100 200, 200 120)) true Test 745 MULTILINESTRING ((40 120, 100 60), (160 120, 100 60), (40 60, 160 60)) true Test 746 MULTILINESTRING ((80 160, 40 220, 40 100, 80 160), (80 160, 120 220, 120 100, 80 160)) true Test 747 MULTILINESTRING ((80 160, 40 220), (80 160, 120 220, 120 100, 80 160), (40 100, 80 160)) true Test 748 POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260)) true Test 749 POLYGON EMPTY true Test 750 MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true Test 751 MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)), ((160 380, 100 240, 20 380, 160 380), (120 340, 60 360, 80 320, 120 340))) true Test 752 POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260), EMPTY) true Test 753 POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260), EMPTY, EMPTY) true Test 754 MultiPolygon(((10 10, 10 20, 20 20, 20 15, 10 10)),((60 60, 70 70, 80 60, 60 60 )), (EMPTY)) true geos-3.4.2/tests/xmltester/tests/general/TestWithinDistance.xml0000644000175000017500000000737012206417147024557 0ustar frankiefrankie PP - disjoint points POINT(10 10) POINT(100 100) true false PP - overlapping points POINT(10 10) POINT(10 10) true true PL - point on linestring POINT (340 200) LINESTRING (80 280, 340 200, 80 80) true true PL - point not on linestring LINESTRING (100 100, 200 100, 200 200, 100 200, 100 100) POINT (10 10) true false PA - point inside polygon POINT (240 160) POLYGON ((100 260, 340 180, 100 60, 180 160, 100 260)) true true mPA - points outside polygon POLYGON ((200 180, 60 140, 60 260, 200 180)) MULTIPOINT ((140 280), (140 320)) true false LL - disjoint linestrings LINESTRING (40 300, 240 260, 60 160, 140 60) LINESTRING (140 360, 260 280, 240 120, 120 160) true false LL - crossing linestrings LINESTRING (40 300, 280 220, 60 160, 140 60) LINESTRING (140 360, 260 280, 240 120, 120 160) true true AA - overlapping polygons POLYGON ((60 260, 260 180, 100 60, 60 160, 60 260)) POLYGON ((220 280, 120 160, 300 60, 360 220, 220 280)) true true AA - disjoint polygons POLYGON ((100 320, 60 120, 240 180, 200 260, 100 320)) POLYGON ((420 320, 280 260, 400 100, 420 320)) true false mAmA - overlapping multipolygons MULTIPOLYGON (((40 240, 160 320, 40 380, 40 240)), ((100 240, 240 60, 40 40, 100 240))) MULTIPOLYGON (((220 280, 120 160, 300 60, 360 220, 220 280)), ((240 380, 280 300, 420 340, 240 380))) true true geos-3.4.2/tests/xmltester/tests/heisenbugs.xml0000644000175000017500000001377412206417146021525 0ustar frankiefrankie Heisenbug provided by "Rene Neidt" (r.neidt at idu.de) 01060000001C000000010300000001000000040000005C8FC245BCA25441F853E3DD919355419133753ABCA25441053861CD91935541E833753ABCA25441853861CD919355415C8FC245BCA25441F853E3DD91935541010300000001000000040000009133753ABCA25441053861CD91935541C520B01ABCA2544123DBF99E919355418833753ABCA25441F83761CD919355419133753ABCA25441053861CD9193554101030000000100000004000000F24283B3B4A254418422B80B87935541FD3F83B3B4A254415B1EB80B879355418FC2F508B4A25441C3F5281C86935541F24283B3B4A254418422B80B87935541010300000001000000070000007B14AE1FB2A25441B072686183935541736891E5AFA25441B81E8533809355412FDD2496AFA25441560E2DC27F9355416A184AE0AFA2544113B2FC2B809355415C8FC2E5AFA254413D0AD733809355412881420FB0A25441B1F5096F809355417B14AE1FB2A25441B07268618393554101030000000100000005000000448B6CD7A9A2544139B4C88E77935541BD7206BDA9A25441E03F2169779355415C8FC2A5A9A2544185EB514877935541AE7206BDA9A25441CB3F216977935541448B6CD7A9A2544139B4C88E7793554101030000000100000004000000AD448E189CA2544144E1C8F86393554154BF62AF9BA25441505D126363935541F6285CAF9BA254413333336363935541AD448E189CA2544144E1C8F863935541010300000001000000040000009CC420189BA2544104560E4D5B935541C74B377197A25441D122DBC15A9355416D707F0798A25441E74A3BD85A9355419CC420189BA2544104560E4D5B9355410103000000010000000400000052B81EED90A25441EC51B83E54935541C1CAA10D8FA2544148E17A7451935541E6A570C18FA2544196EE51805293554152B81EED90A25441EC51B83E5493554101030000000100000004000000ED2D96108BA25441051F3EAB4B9355418A2D96108BA25441761E3EAB4B9355413D0AD7338DA254415C8FC2C54E935541ED2D96108BA25441051F3EAB4B935541010300000001000000040000008DF47DDF8AA2544134CC05644B93554128F47DDF8AA25441A1CB05644B93554152B81E7589A25441713D0A57499355418DF47DDF8AA2544134CC05644B9355410103000000010000000400000004560E2D85A254415A643B4743935541000000D082A25441250681CD3F935541773FCC6B83A25441F25B9AB24093554104560E2D85A254415A643B474393554101030000000100000014000000819543D375A25441000000702D935541B6F3FDE471A254412DB29D5731935541FCA9F1E272A254415C8FC27D31935541C520B02275A25441250681AD34935541B6F3FD8475A254418B6CE72B35935541355EBAA975A25441BC749318359355411B2FDD1C77A2544104560E85379355412FDD243677A254416F1283A83793554139B4C8B677A254413108AC5C389355414A0C029379A254413BDF4F1D3B9355419102F4F578A25441AA6AED343A93554148E17AB477A254417B14AE573893554152B81E3577A2544148E17AA437935541B81E851B77A254410AD7A380379355419A9999A975A254413D0AD7133593554148E17A8475A25441713D0A2735935541295C8F2275A2544185EB51A83493554148E17AE472A25441A4703D7A31935541291701E871A2544182A89F5431935541819543D375A25441000000702D93554101030000000100000006000000B579E52F7FA25441B2E4F0124393554104560E557FA254410C022B57439355417593186C81A254418FC2F540469355413EC2875880A254417C5FD9C04493554152B81E557FA25441713D0A5743935541B579E52F7FA25441B2E4F01243935541010300000001000000070000007593186C81A254418FC2F54046935541DD2406F182A2544189416095489355416ABC744B85A254415839B4C84B935541E94EE8C784A254412D23CB154B93554114AE47F182A2544152B81E95489355412EF656CF81A25441B81E26D9469355417593186C81A254418FC2F5404693554101030000000100000005000000809754BF85A25441F27DDB674C9355416F12839086A254410C022B874D935541652160F887A2544191B2E8894F9355410AD7A39086A25441713D0A874D935541809754BF85A25441F27DDB674C93554101030000000100000006000000666666D688A2544191ED7CC750935541FCA9F1328AA25441AAF1D2BD5293554131A117908AA254417F880C4453935541333333338AA25441E17A14BE5293554123BD00B289A25441541EFD0352935541666666D688A2544191ED7CC7509355410103000000010000000400000031A117908AA254417F880C44539355415839B4108BA25441894160FD5393554149A117908AA25441A1880C445393554131A117908AA254417F880C4453935541010300000001000000040000005839B4108BA25441894160FD53935541FA41670E8CA25441C185F56755935541AF3E670E8CA254410C81F567559355415839B4108BA25441894160FD5393554101030000000100000009000000FA41670E8CA25441C185F56755935541EC51B8568DA25441A01A2F3D579355412FDD24468FA2544104560E0D5A9355410681958B90A2544121B072D85B93554182A07A2C91A25441514995BB5C935541B81E858B90A2544185EB51D85B935541666666468FA25441CDCCCC0C5A935541713D0A578DA25441D7A3703D57935541FA41670E8CA25441C185F567559355410103000000010000000400000082A07A2C91A25441514995BB5C935541B6F3FD6C91A254419EEFA7165D935541C4A37A2C91A25441EA4D95BB5C93554182A07A2C91A25441514995BB5C93554101030000000100000004000000A5A644AD91A25441FE677FDD64935541FCA9F1DA91A25441A245B62B6593554117A844AD91A25441776A7FDD64935541A5A644AD91A25441FE677FDD649355410103000000010000000400000056D0BCD993A25441741BC98B659355415BD2BCD993A25441D51BC98B6593554152B81E6593A254415C8FC2756593554156D0BCD993A25441741BC98B6593554101030000000100000007000000AE47E1BA98A25441DF4F8D97679355416DE7FB619AA25441EE7C3FF569935541BA490C929CA25441D578E9166D935541E8228C9C9AA25441010F13496A9355411F85EB619AA2544152B81EF569935541E90F4B049AA2544185E71F6F69935541AE47E1BA98A25441DF4F8D976793554101030000000100000004000000D34D62989CA25441000000206D9355414A0C025B9DA25441508D97366E9355412C12DF499DA25441E3DE0F1E6E935541D34D62989CA25441000000206D93554101030000000100000004000000D5F04439A0A254416BFCF05872935541E9F34439A0A25441E200F1587293554100000000A1A254418FC2F57873935541D5F04439A0A254416BFCF05872935541010300000001000000040000002FDD247EA2A25441FA7E6A8C759355417F6ABC2CA3A25441BE9F1A7F76935541D2A270D5A2A25441F18DC205769355412FDD247EA2A25441FA7E6A8C75935541010300000001000000050000007F6ABC2CA3A25441BE9F1A7F769355414D412ABFA4A2544170642EBF7893554114AE4771A5A25441E17A14BE79935541B2372ABFA4A25441AF562EBF789355417F6ABC2CA3A25441BE9F1A7F7693554101030000000100000005000000B81E85FBADA25441000000F085935541022B87DEAFA25441F2D24DA2889355417B14AEE7AFA25441F6285CAF88935541EC51B8DEAFA25441295C8FA288935541B81E85FBADA25441000000F085935541 010300000001000000090000001340670E8CA254410883F56755935541713D0A578DA25441D7A3703D57935541666666468FA25441CDCCCC0C5A935541B81E858B90A2544185EB51D85B935541CD9D7A2C91A254417E4595BB5C9355410681958B90A2544121B072D85B9355412FDD24468FA2544104560E0D5A935541EC51B8568DA25441A01A2F3D579355411340670E8CA254410883F56755935541 5 geos-3.4.2/tests/xmltester/tests/hexwkb.xml0000644000175000017500000000746712206417147020664 0ustar frankiefrankie HEXWKB (Little Endian) POINT(0 1) 01010000000000000000000000000000000000F03F true HEXWKB (Little Endian) LINESTRING(0 1, 2 3, 4 5) 0102000000030000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000001440 true HEXWKB (Little Endian) POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)) 010300000001000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000000000000000000000000 true HEXWKB (Little Endian) MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0) 010400000005000000010100000000000000000000000000000000000000010100000000000000000024400000000000000000010100000000000000000024400000000000002440010100000000000000000000000000000000002440010100000000000000000000000000000000000000 true HEXWKB (Little Endian) MULTILINESTRING((0 0, 10 0, 10 10, 0 10),(20 20, 30 20)) 01050000000200000001020000000400000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440010200000002000000000000000000344000000000000034400000000000003E400000000000003440 true HEXWKB (Little Endian) MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)),((20 20, 20 30, 30 30, 30 20, 20 20),(25 25, 25 26, 26 26, 26 25, 25 25))) 010600000002000000010300000001000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000000000000000000000000010300000002000000050000000000000000003440000000000000344000000000000034400000000000003E400000000000003E400000000000003E400000000000003E40000000000000344000000000000034400000000000003440050000000000000000003940000000000000394000000000000039400000000000003A400000000000003A400000000000003A400000000000003A40000000000000394000000000000039400000000000003940 true HEXWKB (Little Endian) GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)),((20 20, 20 30, 30 30, 30 20, 20 20),(25 25, 25 26, 26 26, 26 25, 25 25))),MULTILINESTRING((0 0, 10 0, 10 10, 0 10),(20 20, 30 20)),MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)) 010700000003000000010600000002000000010300000001000000050000000000000000000000000000000000000000000000000024400000000000000000000000000000244000000000000024400000000000000000000000000000244000000000000000000000000000000000010300000002000000050000000000000000003440000000000000344000000000000034400000000000003E400000000000003E400000000000003E400000000000003E40000000000000344000000000000034400000000000003440050000000000000000003940000000000000394000000000000039400000000000003A400000000000003A400000000000003A400000000000003A4000000000000039400000000000003940000000000000394001050000000200000001020000000400000000000000000000000000000000000000000000000000244000000000000000000000000000002440000000000000244000000000000000000000000000002440010200000002000000000000000000344000000000000034400000000000003E400000000000003440010400000005000000010100000000000000000000000000000000000000010100000000000000000024400000000000000000010100000000000000000024400000000000002440010100000000000000000000000000000000002440010100000000000000000000000000000000000000 true geos-3.4.2/tests/xmltester/tests/hole_from_shell.xml0000644000175000017500000002134112206417147022520 0ustar frankiefrankie GEOS 3.0.0_rc4 bufferReducedPrecision MULTIPOLYGON (((2350000.0000000000000000 1488707.0969169281888753, 2349964.4004191001877189 1488636.0190692699979991, 2350000.0000000000000000 1488563.5240085718687624, 2350000.0000000000000000 1486139.5954903985839337, 2349862.9023056798614562 1486219.9886801000684500, 2349276.5575175802223384 1486686.9452663098927587, 2349189.6188003402203321 1486714.0890033100731671, 2349075.2651923401281238 1486839.4363198699429631, 2349177.6410056301392615 1487348.6899289600551128, 2349095.0335451299324632 1487322.3496956799644977, 2348966.6837510201148689 1487132.5463537599425763, 2348855.5631697699427605 1486958.4198595299385488, 2348746.1466918801888824 1487029.9212600900791585, 2348637.5355608197860420 1487162.9215295300818980, 2348675.8306268397718668 1487255.0497121699154377, 2349197.2302119499072433 1487757.7338257899973541, 2349432.8564184200949967 1487884.7684968400280923, 2349765.1257171598263085 1488676.7953792500775307, 2350000.0000000000000000 1489132.4801826500333846, 2350000.0000000000000000 1488707.0969169281888753)), ((2350001.0000000000000000 1489673.5379561646841466, 2349939.3882785998284817 1489622.4783083000220358, 2349744.2255139001645148 1489564.2840713199693710, 2349714.5727142500691116 1489555.4998093899339437, 2349656.1571633601561189 1489548.4856726101133972, 2349506.3355672401376069 1489530.0346219500061125, 2349451.7939001601189375 1489559.0524864098988473, 2349350.2853812701068819 1489613.4625319899059832, 2349462.3675328497774899 1489926.2343633500859141, 2349330.2864756002090871 1489979.5005766900721937, 2349260.1990413102321327 1489893.8673000501003116, 2349230.8788724797777832 1489867.6174024299252778, 2349166.9456986500881612 1489723.0448318300768733, 2349154.8086357498541474 1489739.3992036799900234, 2349131.1424813498742878 1489770.6534391599707305, 2349099.0351308397948742 1489781.1517036699224263, 2349004.9882596200332046 1489541.9173064299393445, 2348980.2695384998805821 1489479.6504641300998628, 2348907.8565663797780871 1489514.8251357700210065, 2349009.3763570399023592 1489810.8385419999249279, 2348931.2276480901055038 1489836.9062225199304521, 2348616.8570989957079291 1490000.0000000000000000, 2350000.0000000000000000 1490000.0000000000000000, 2350001.0000000000000000 1489673.5379561646841466)), ((2348513.9023286257870495 1490000.0000000000000000, 2348551.0426795501261950 1489629.9404302500188351, 2347950.9423539699055254 1488768.7056682100519538, 2347701.5905358898453414 1488337.4487687300425023, 2347624.7384369401261210 1488310.0302828899584711, 2347499.1729842298664153 1488265.0651581101119518, 2347502.5397046101279557 1488242.8735023899935186, 2347521.6533973598852754 1488218.1605436000972986, 2347569.8924814299680293 1488156.0150597000028938, 2347694.8907968699932098 1487994.6547907099593431, 2347653.5779449897818267 1487947.1325197399128228, 2348543.3460486000403762 1487182.0493400199338794, 2348013.1856879801489413 1486291.0932264500297606, 2347256.6836529830470681 1485000.0000000000000000, 2345000.0000000000000000 1485000.0000000000000000, 2345000.0000000000000000 1486224.2831608161795884, 2345083.9256702000275254 1486101.5096448599360883, 2345183.0970447300933301 1486188.2705280799418688, 2345331.7724219402298331 1486561.8534152100328356, 2345316.8952683401294053 1486588.3938146599102765, 2345200.3844798500649631 1486747.5935537801124156, 2345000.0000000000000000 1486303.9886013225186616, 2345000.0000000000000000 1490000.0000000000000000, 2348513.9023286257870495 1490000.0000000000000000), (2347201.0095643401145935 1489535.2747832599561661, 2347264.5333871799521148 1489565.9454100900329649, 2347223.8374039400368929 1489645.2065054799895734, 2347153.6678731199353933 1489605.7917709499597549, 2347201.0095643401145935 1489535.2747832599561661)), ((2347572.7863241606391966 1485000.0000000000000000, 2348407.4356893599033356 1486442.4005138298962265, 2348538.4335729400627315 1486681.6946907700039446, 2348581.4885673602111638 1486644.2865022399928421, 2348497.7225665301084518 1486404.7074402100406587, 2348459.7195179299451411 1486318.0383337000384927, 2348448.2131743398495018 1485957.4058874400798231, 2348506.7706681001000106 1485883.9986570500768721, 2348472.0240390901453793 1485660.5130987700540572, 2348203.9518477302044630 1485187.3743550300132483, 2348081.8803086061961949 1485000.0000000000000000, 2347572.7863241606391966 1485000.0000000000000000))) MULTIPOLYGON (((2350000.0000000000000000 1488707.0969169281888753, 2349964.4004191001877189 1488636.0190692699979991, 2350000.0000000000000000 1488563.5240085718687624, 2350000.0000000000000000 1486139.5954903985839337, 2349862.9023056798614562 1486219.9886801000684500, 2349276.5575175802223384 1486686.9452663098927587, 2349189.6188003402203321 1486714.0890033100731671, 2349075.2651923401281238 1486839.4363198699429631, 2349177.6410056301392615 1487348.6899289600551128, 2349095.0335451299324632 1487322.3496956799644977, 2348966.6837510201148689 1487132.5463537599425763, 2348855.5631697699427605 1486958.4198595299385488, 2348746.1466918801888824 1487029.9212600900791585, 2348637.5355608197860420 1487162.9215295300818980, 2348675.8306268397718668 1487255.0497121699154377, 2349197.2302119499072433 1487757.7338257899973541, 2349432.8564184200949967 1487884.7684968400280923, 2349765.1257171598263085 1488676.7953792500775307, 2350000.0000000000000000 1489132.4801826500333846, 2350000.0000000000000000 1488707.0969169281888753)), ((2350001.0000000000000000 1489673.5379561646841466, 2349939.3882785998284817 1489622.4783083000220358, 2349744.2255139001645148 1489564.2840713199693710, 2349714.5727142500691116 1489555.4998093899339437, 2349656.1571633601561189 1489548.4856726101133972, 2349506.3355672401376069 1489530.0346219500061125, 2349451.7939001601189375 1489559.0524864098988473, 2349350.2853812701068819 1489613.4625319899059832, 2349462.3675328497774899 1489926.2343633500859141, 2349330.2864756002090871 1489979.5005766900721937, 2349260.1990413102321327 1489893.8673000501003116, 2349230.8788724797777832 1489867.6174024299252778, 2349166.9456986500881612 1489723.0448318300768733, 2349154.8086357498541474 1489739.3992036799900234, 2349131.1424813498742878 1489770.6534391599707305, 2349099.0351308397948742 1489781.1517036699224263, 2349004.9882596200332046 1489541.9173064299393445, 2348980.2695384998805821 1489479.6504641300998628, 2348907.8565663797780871 1489514.8251357700210065, 2349009.3763570399023592 1489810.8385419999249279, 2348931.2276480901055038 1489836.9062225199304521, 2348616.8570989957079291 1490000.0000000000000000, 2350000.0000000000000000 1490000.0000000000000000, 2350001.0000000000000000 1489673.5379561646841466)), ((2348513.9023286257870495 1490000.0000000000000000, 2348551.0426795501261950 1489629.9404302500188351, 2347950.9423539699055254 1488768.7056682100519538, 2347701.5905358898453414 1488337.4487687300425023, 2347624.7384369401261210 1488310.0302828899584711, 2347499.1729842298664153 1488265.0651581101119518, 2347502.5397046101279557 1488242.8735023899935186, 2347521.6533973598852754 1488218.1605436000972986, 2347569.8924814299680293 1488156.0150597000028938, 2347694.8907968699932098 1487994.6547907099593431, 2347653.5779449897818267 1487947.1325197399128228, 2348543.3460486000403762 1487182.0493400199338794, 2348013.1856879801489413 1486291.0932264500297606, 2347256.6836529830470681 1485000.0000000000000000, 2345000.0000000000000000 1485000.0000000000000000, 2345000.0000000000000000 1486224.2831608161795884, 2345083.9256702000275254 1486101.5096448599360883, 2345183.0970447300933301 1486188.2705280799418688, 2345331.7724219402298331 1486561.8534152100328356, 2345316.8952683401294053 1486588.3938146599102765, 2345200.3844798500649631 1486747.5935537801124156, 2345000.0000000000000000 1486303.9886013225186616, 2345000.0000000000000000 1490000.0000000000000000, 2348513.9023286257870495 1490000.0000000000000000), (2347201.0095643401145935 1489535.2747832599561661, 2347264.5333871799521148 1489565.9454100900329649, 2347223.8374039400368929 1489645.2065054799895734, 2347153.6678731199353933 1489605.7917709499597549, 2347201.0095643401145935 1489535.2747832599561661)), ((2347572.7863241606391966 1485000.0000000000000000, 2348407.4356893599033356 1486442.4005138298962265, 2348538.4335729400627315 1486681.6946907700039446, 2348581.4885673602111638 1486644.2865022399928421, 2348497.7225665301084518 1486404.7074402100406587, 2348459.7195179299451411 1486318.0383337000384927, 2348448.2131743398495018 1485957.4058874400798231, 2348506.7706681001000106 1485883.9986570500768721, 2348472.0240390901453793 1485660.5130987700540572, 2348203.9518477302044630 1485187.3743550300132483, 2348081.8803086061961949 1485000.0000000000000000, 2347572.7863241606391966 1485000.0000000000000000))) geos-3.4.2/tests/xmltester/tests/hole_red.xml0000644000175000017500000001302312206417146021135 0ustar frankiefrankie GEOS 3.0.0_rc4 bufferReducedPrecision MULTIPOLYGON ( ((2350001.0000000000000000 1489673.5379561646841466, 2349939.3882785998284817 1489622.4783083000220358, 2349744.2255139001645148 1489564.2840713199693710, 2349714.5727142500691116 1489555.4998093899339437, 2349656.1571633601561189 1489548.4856726101133972, 2349506.3355672401376069 1489530.0346219500061125, 2349451.7939001601189375 1489559.0524864098988473, 2349350.2853812701068819 1489613.4625319899059832, 2349462.3675328497774899 1489926.2343633500859141, 2349330.2864756002090871 1489979.5005766900721937, 2349260.1990413102321327 1489893.8673000501003116, 2349230.8788724797777832 1489867.6174024299252778, 2349166.9456986500881612 1489723.0448318300768733, 2349154.8086357498541474 1489739.3992036799900234, 2349131.1424813498742878 1489770.6534391599707305, 2349099.0351308397948742 1489781.1517036699224263, 2349004.9882596200332046 1489541.9173064299393445, 2348980.2695384998805821 1489479.6504641300998628, 2348907.8565663797780871 1489514.8251357700210065, 2349009.3763570399023592 1489810.8385419999249279, 2348931.2276480901055038 1489836.9062225199304521, 2348616.8570989957079291 1490000.0000000000000000, 2350000.0000000000000000 1490000.0000000000000000, 2350001.0000000000000000 1489673.5379561646841466)), ((2348513.9023286257870495 1490000.0000000000000000, 2348551.0426795501261950 1489629.9404302500188351, 2347950.9423539699055254 1488768.7056682100519538, 2347701.5905358898453414 1488337.4487687300425023, 2347624.7384369401261210 1488310.0302828899584711, 2347499.1729842298664153 1488265.0651581101119518, 2347502.5397046101279557 1488242.8735023899935186, 2347521.6533973598852754 1488218.1605436000972986, 2347569.8924814299680293 1488156.0150597000028938, 2347694.8907968699932098 1487994.6547907099593431, 2347653.5779449897818267 1487947.1325197399128228, 2348543.3460486000403762 1487182.0493400199338794, 2348013.1856879801489413 1486291.0932264500297606, 2347256.6836529830470681 1485000.0000000000000000, 2345000.0000000000000000 1485000.0000000000000000, 2345000.0000000000000000 1486224.2831608161795884, 2345083.9256702000275254 1486101.5096448599360883, 2345183.0970447300933301 1486188.2705280799418688, 2345331.7724219402298331 1486561.8534152100328356, 2345316.8952683401294053 1486588.3938146599102765, 2345200.3844798500649631 1486747.5935537801124156, 2345000.0000000000000000 1486303.9886013225186616, 2345000.0000000000000000 1490000.0000000000000000, 2348513.9023286257870495 1490000.0000000000000000), (2347201.0095643401145935 1489535.2747832599561661, 2347264.5333871799521148 1489565.9454100900329649, 2347223.8374039400368929 1489645.2065054799895734, 2347153.6678731199353933 1489605.7917709499597549, 2347201.0095643401145935 1489535.2747832599561661)) ) MULTIPOLYGON ( ((2350001.0000000000000000 1489673.5379561646841466, 2349939.3882785998284817 1489622.4783083000220358, 2349744.2255139001645148 1489564.2840713199693710, 2349714.5727142500691116 1489555.4998093899339437, 2349656.1571633601561189 1489548.4856726101133972, 2349506.3355672401376069 1489530.0346219500061125, 2349451.7939001601189375 1489559.0524864098988473, 2349350.2853812701068819 1489613.4625319899059832, 2349462.3675328497774899 1489926.2343633500859141, 2349330.2864756002090871 1489979.5005766900721937, 2349260.1990413102321327 1489893.8673000501003116, 2349230.8788724797777832 1489867.6174024299252778, 2349166.9456986500881612 1489723.0448318300768733, 2349154.8086357498541474 1489739.3992036799900234, 2349131.1424813498742878 1489770.6534391599707305, 2349099.0351308397948742 1489781.1517036699224263, 2349004.9882596200332046 1489541.9173064299393445, 2348980.2695384998805821 1489479.6504641300998628, 2348907.8565663797780871 1489514.8251357700210065, 2349009.3763570399023592 1489810.8385419999249279, 2348931.2276480901055038 1489836.9062225199304521, 2348616.8570989957079291 1490000.0000000000000000, 2350000.0000000000000000 1490000.0000000000000000, 2350001.0000000000000000 1489673.5379561646841466)), ((2348513.9023286257870495 1490000.0000000000000000, 2348551.0426795501261950 1489629.9404302500188351, 2347950.9423539699055254 1488768.7056682100519538, 2347701.5905358898453414 1488337.4487687300425023, 2347624.7384369401261210 1488310.0302828899584711, 2347499.1729842298664153 1488265.0651581101119518, 2347502.5397046101279557 1488242.8735023899935186, 2347521.6533973598852754 1488218.1605436000972986, 2347569.8924814299680293 1488156.0150597000028938, 2347694.8907968699932098 1487994.6547907099593431, 2347653.5779449897818267 1487947.1325197399128228, 2348543.3460486000403762 1487182.0493400199338794, 2348013.1856879801489413 1486291.0932264500297606, 2347256.6836529830470681 1485000.0000000000000000, 2345000.0000000000000000 1485000.0000000000000000, 2345000.0000000000000000 1486224.2831608161795884, 2345083.9256702000275254 1486101.5096448599360883, 2345183.0970447300933301 1486188.2705280799418688, 2345331.7724219402298331 1486561.8534152100328356, 2345316.8952683401294053 1486588.3938146599102765, 2345200.3844798500649631 1486747.5935537801124156, 2345000.0000000000000000 1486303.9886013225186616, 2345000.0000000000000000 1490000.0000000000000000, 2348513.9023286257870495 1490000.0000000000000000), (2347201.0095643401145935 1489535.2747832599561661, 2347264.5333871799521148 1489565.9454100900329649, 2347223.8374039400368929 1489645.2065054799895734, 2347153.6678731199353933 1489605.7917709499597549, 2347201.0095643401145935 1489535.2747832599561661)) ) geos-3.4.2/tests/xmltester/tests/linemerge.xml0000644000175000017500000000037612206417147021333 0ustar frankiefrankie Case # MULTILINESTRING((0 0, 10 0), (10 0, 20 0)) GEOMETRYCOLLECTION ( LINESTRING(0 0, 10 0, 20 0) ) geos-3.4.2/tests/xmltester/tests/robust/0000755000175000017500000000000012206417242020146 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/robust/TestRobustOverlayFixed.xml0000644000175000017500000000047112206417147025336 0ustar frankiefrankie AA POLYGON ((545 317, 617 379, 581 321, 545 317)) POLYGON ((484 290, 558 359, 543 309, 484 290)) POINT (545 317) geos-3.4.2/tests/xmltester/tests/robust/TestRobustRelate.xml0000644000175000017500000000057012206417147024151 0ustar frankiefrankie PP - Point is not on line. Non-robust algorithms fail by erroneously reporting intersects=true. LINESTRING(-123456789 -40, 381039468754763 123456789) POINT(0 0) false geos-3.4.2/tests/xmltester/tests/robustness.xml0000644000175000017500000005117212206417147021573 0ustar frankiefrankie http://geos.osgeo.org/pipermail/geos-devel/2005-May/001441.html 0103000020E80A00000100000069010000ECA2396C13BBFF40E8BA3424319F2541DEFB1D49DFB8FF40E73660ADA07F2541FAD6C80B43B2FF407033A9AC12602541E43630383FA7FF401F0EFC9789402541470638AAD497FF408AE2E2E40721254133F2A0950484FF40D372540890012541776AF085D06BFF40B21B837624E22441E2C9515E3A4FFF40DBD7ABA2C7C22441CDA87059442EFF407956E5FE7BA32441DF5C4C09F108FF40A728EFFB4384244184A9045743DFFE40A40901092265244116A59F823EB1FE4096459A931846244141D7C822E67EFE40AD4251072A272441B29589243E48FE405630A3CD58082441A6A4FACA4A0DFE4065E0C34DA7E923417321EFAE10CEFD40D6CD6DEC17CB2341B7BD98BE948AFD40F954B20BADAC23414652253DDC42FD40B720CA0A698E234192D155C2ECF6FC40ADD0E5454E702341B3A10E3ACCA6FC40CCDBFE155F522341D166E1E38052FC4022B3A8D09D3423411747905211FAFB408628E2C70C172341F7B18A6B849DFB40B61CE749AEF92241F6B46366E13CFB40907802A184DC2241B9E841CC2FD8FA40FA74601392BF224194014977776FFA400135E1E2D8A22241500FFD91C002FA40CFB5EB4C5B8622416E789F961392F940DE17418A1B6A22418ABD854E791DF940FD44D0CE1B4E224122126AD1FAA4F84096F689495E32224164D8B584A128F840951F3524E5162241350EC61A77A8F7406EBD4383B2FB2141FEB929928524F7408B13A885C8E021417066DA34D79CF6408654AA4429C62141BCBC6E977611F64071BCBED3D6AB21414A4D47986E82F5407B1F5C40D39121416897B55ECAEFF44024F0D29120782141DA601D5A9559F4403AC024C9C05E2141AC6E1041DBBFF340C23FDCE0B545214109B16410A822F340EABCE5CC012D214160F4440A0882F2402528687AA61421417B2A3CB507DEF140659F9ECFA5FC2041975E3BDBB336F1408B83B2AB01E5204109689A88198CF040F01A96E6BBCD204192DE26168CBCEF40FDC3DF50D6B620418BB372E18D5AEE40A5BAA5B352A020414762D20D54F2EC409D735AD0328A204125366DB2FA83EB401B90A9607874204149EEA6609E0FEA40CC6C5516255F20412C71E5215C95E840C14E159B3A4A204167244D755115E740E4307490BA3520410516744D9C8FE5409C34B08FA621204130250C0E5B04E44024B89A29000E2041F2588489AC73E240152AF2CC91F51F414194A1FEAFDDE040A812CC8B04D01F41B9AE1D2C0A85DE40479B677D5BAB1F413F7ECABF9744DB4062B59D7D99871F4122E757A249FAD740CEC04256C1641F412B6FA08261A6D440A7E1EEBED5421F41A4982BCF2149D14038C2C75CD9211F41436DFF619BC5CB402FC54BC2CE011F41DF6CCA0C52E7C44028AC1E6FB8E21E41DD196F76E1EFBB409BB6D7CF98C41E41F3220E7C07E0AB40163DD13D72A71E4180CA45A3CBEE47C079CCF9FE468B1E4173AA092451DDACC0EBC4A64519701E41488EA3D140CBBCC00E806830EB551E41721152D143A2C5C0D501E0C9BE3C1E41BB857A0AAEECCCC05637960896241E4176759EC42622D2C0BAC6D4CE720D1E41BE846FDD47D4D5C0657380EA56F71D41F4583488708CD9C03319F51444E21D4153B71285564ADDC0B041E3F23BCE1D41F73ECE90D786E0C0E7552F1440BB1D417067519F176BE2C05E6FD2F351A91D413DDB08ABC551E4C0B5CABCF772981D41C6EB69C0BB3AE6C01FDEB970A4881D4115D45EBED325E8C00516569AE7791D4168E43F59E712EAC0BF39C69A3D6C1D4198FFCF1DD001ECC05C7AD082A75F1D41AE2E3C7467F2EDC0482DB74D26541D41D30E1EA386E4EFC0703425E1BA491D41C76E406903ECF0C06B151C0D66401D417873748760E6F1C014C1E38B28381D41AC8C2E2647E1F2C0D60CFC0103311D410441B9B4A3DCF3C0C9DE0FFEF52A1D41EDBA2C9962D8F4C0A10DEAF801261D419914F63170D4F5C053F56B5527221D41003D5FD7B8D0F6C024C18560661F1D41725717DD28CDF7C0C06B3051BF1D1D410D77BB93ACC9F8C0D0756948321D1D4181975F4A30C6F9C067533051BF1D1D4180B41750A0C2FAC075908560661F1D4127E180F5E8BEFBC051AC6B5527221D41C5404A8EF6BAFCC051ACE9F801261D4152C2BD72B5B6FDC033650FFEF52A1D41FF7F480112B2FEC0047BFB0103311D4139A402A0F8ACFFC01117E38B28381D41D05A1BDFAA5300C145531B0D66401D41B215F4EA8AD000C1365A24E1BA491D41C495ACB6124D01C10B3BB64D26541D4169AA478C38C901C12E70CF82A75F1D41EBBA6BBDF24402C1B517C59A3D6C1D418A0924A437C002C136DC549AE7791D41FC4EA1A3FD3A03C1A38CB870A4881D414F9FF9283BB503C1A661BBF772981D414689E7ABE62E04C1DAEED0F351A91D41386188AFF6A704C10ABE2D1440BB1D41B0A819C3612005C19B92E1F23BCE1D41F083B5821E9805C10753F31444E21D41B72E0E98230F06C145967EEA56F71D41AE6128BB678506C1CDD2D2CE720D1E41DA9914B3E1FA06C1C12C940896241E41C133A756886F07C1C2E0DDC9BE3C1E41D14B2F8D52E307C1A7486630EB551E41CA552C4F375608C15C77A44519701E410E5D02A72DC808C1F068F7FE468B1E41B1DFACB12C3909C1C3C3CE3D72A71E417036709F2BA909C1B027D5CF98C41E41AB7B89B421180AC1D7071C6FB8E21E41ACE3DC4906860AC1AD0B49C2CE011F41A378A2CDD0F20AC1BCF3C45CD9211F41E52C11C4785E0BC168FEEBBED5421F410D3608C8F5C80BC107C93F56C1641F41D1A3B68B3F320CC14DA99A7D99871F41742541D94D9A0CC1207B647D5BAB1F41F3F0659318010DC1AFDEC88B04D01F4116BF1EB697660DC189E2EECC91F51F41C9CF4057C3CA0DC1B60A9929000E20414EEA1AA7932D0EC1A77DAE8FA6212041DF4C11F1008F0EC189707290BA352041B07F379C03EF0EC12585139B3A4A20413BFFE72B944D0FC1129A5316255F204117B25940ABAA0FC167B4A76078742041528F99CB200310C1148F58D0328A20418BAA0D06283010C16DCDA3B352A020414941A4CC675C10C13DCEDD50D6B62041221106ACDC8710C1CE1C94E6BBCD2041B960AE4083B210C12F7DB0AB01E52041EEA52E3758DC10C1F8909CCFA5FC2041EAEA704C580511C1D011667AA6142141DEECF84D802D11C1D79EE3CC012D214154EF231ACD5411C11A1ADAE0B5452141313F67A03B7B11C1299322C9C05E214166608DE1C8A011C1D5BBD09120782141B1E1F1EF71C511C11AE45940D39121419ED1BBEF33E911C12B7ABCD3D6AB214159D016170C0C12C1870BA84429C62141C5B96AAEF72D12C101C4A585C8E0214195E39110F44E12C187674183B2FB21411BEB0DABFE6E12C181C33224E5162241BB0E3BFE148E12C1839487495E322241FB0E829D34AC12C11BDDCDCE1B4E22414D93882F5BC912C15CAA3E8A1B6A2241D00E606E86E512C1DF42E94C5B8622415A21B327B40013C1D3BCDEE2D8A222414B71F13CE21A13C1BFF75D1392BF2241AFFA79A30E3413C17BF6FFA084DC22416DD0C364374C13C1F895E449AEF922415D4C859E5A6313C1519DDFC70C1723411AABD982767913C1AA23A6D09D342341C6106558898E13C14348FC155F522341D5F3767A91A213C14839E3454E7023413AEB2A598DB513C1A885C70A698E23416FDD87797BC713C175B6AF0BADAC2341D48D9D755AD813C1112C6BEC17CB23413386A0FC28E813C1943BC14DA7E92341235A04D3E5F613C1AD88A0CD580824414D4294D28F0414C161984E072A2724419E0D8AEA251114C1DD98979318462441AA66A31FA71C14C1B25AFE0822652441856B358C122714C1B377ECFB4384244195963E60673014C1B9A3E2FE7BA32441FEF676E1A43814C18423A9A2C7C2244154B75E6BCA3F14C1FA65807624E2244180F14A6FD74514C1EFBB510890012541CBCE7074CB4A14C1B22AE0E40721254140F3EE17A64E14C18855F997894025419833D50C675114C1517AA6AC1260254128952A1C0E5314C1777D5DADA07F25414597F1249B5314C15C013224319F2541DAC52A1C0E5314C17985069BC1BE2541F994D50C675114C14189BD9B4FDE25414685EF17A64E14C11AAF6AB0D8FD25416D917174CB4A14C16DDB83635A1D2641AEE44B6FD74514C1194C1240D23C2641FCDA5F6BCA3F14C164A4E3D13D5C2641074B78E1A43814C19CE9BAA59A7B2641E61A4060673014C1946C8149E69A26410020378C122714C1339C774C1EBA26412D4BA51FA71C14C139BD653F40D9264102228CEA251114C17E83CCB449F82641698696D28F0414C1D588154138172741CBCD06D3E5F613C1CE9DC37A093627413529A3FC28E813C196F0A2FABA542741FB5FA0755AD813C13106F95B4A73274183DE8A797BC713C14F82B43CB5912741FF1A2E598DB513C107BA9C3DF9AF27410B527A7A91A213C1B90D810214CE27412B9D6858898E13C17706683203EC27416665DD82767913C13233BE77C40928414634899E5A6313C111C2848055272841A6E5C764374C13C157D27FFEB3442841E43C7EA30E3413C1257B64A7DD6128412AE0F53CE21A13C197830635D07E284189BCB727B40013C19BC88565899B2841F2D5646E86E512C10B4D7BFB06B8284104868D2F5BC912C16BF025BE46D42841E42C879D34AC12C1EBC8967946F02841705740FE148E12C1211DDDFE030C2941325E13ABFE6E12C121FA31247D272941A1809710F44E12C1756223C5AF422941578070AEF72D12C1B412BFC2995D2941FDBF1C170C0C12C143D8BC0339782941DEE9C1EF33E911C11077A8748B9229411322F8EF71C511C1EC1A0B088FAC29416DC893E1C8A011C1555194B641C629415DCE6DA03B7B11C17C88427FA1DF294123A52A1ACD5411C15E108B67ACF82941C9C8FF4D802D11C1C99A817B60112A4169EC774C580511C14D37FFCDBB292A4173CC353758DC10C1F5C7C878BC412A41B7ABB54083B210C1E0EBB49C60592A4108800DACDC8710C1B45CD161A6702A4182D3ABCC675C10C108BC87F78B872A417F5F1506283010C1E9CDC1940F9E2A416866A1CB200310C1A01D0D782FB42A414EA36940ABAA0FC1F609BEE7E9C92A413E32F82B944D0FC13F3612323DDF2A413DF3479C03EF0EC1685D52AD27F42A41AAFF21F1008F0EC18884F3B7A7082B410ADB2BA7932D0EC1358AB7B8BB1C2B4123FD5157C3CA0DC13510CD1E62302B41B72730B697660DC1F8BCEE6199432B418093779318010DC177D2810260562B418C0053D94D9A0CC11218B489B4682B4110B6C88B3F320CC10D159989957A2B410B7E1AC8F5C80BC17F99469D018C2B4134A923C4785E0BC15793F068F79C2B41D227B5CDD0F20AC1702D049A75AD2B4146C4EF4906860AC1733642E77ABD2B41378C9CB421180AC18FCDD81006CD2B417275839F2BA909C109537CE015DC2B41A84BC0B12C3909C1989A7F29A9EA2B4177F415A72DC808C1CD5DEBC8BEF82B411D17404F375608C191EC94A555062C418335438D52E307C1141A34B06C132C414644BB56886F07C15A6478E302202C41A1CF28B3E1FA06C1DA541D44172C2C4123BB3CBB678506C17B18FEE0A8372C4144AA2298230F06C18E4D28D3B6422C41FB1FCA821E9805C12106EE3D404D2C41A0632EC3612005C16EFDF64E44572C416D399DAFF6A704C1EFFE503EC2602C41207DFCABE62E04C1DF7D7F4EB9692C412DAD0E293BB503C1EF5B8ACC28722C413875B6A3FD3A03C104DE0B10107A2C417F4639A437C002C1E7CD3D7B6E812C41F10C81BDF24402C1EDC7057B43882C41D70F5D8C38C901C18CB300878E8E2C41ED0CC2B6124D01C10E668D214F942C41EA9C09EB8AD000C17C6ED6D784992C416AF030DFAA5300C1090ADB412F9E2C41D2E82DA0F8ACFFC0464077024EA22C419DDA730112B2FEC07D266BC7E0A52C41942FE972B5B6FDC0A2496149E7A82C4148BD758EF6BAFCC0593EF44B61AB2C418769ACF5E8BEFBC0A656B39D4EAD2C4158454350A0C2FAC0E77C2618AFAE2C416B2D8B4A30C6F9C0C433D19F82AF2C41A30EE793ACC9F8C0E8BA3424C9AF2C414FED42DD28CDF7C04858D19F82AF2C41BCCD8AD7B8D0F6C0EDC52618AFAE2C41CF9C213270D4F5C028C4B39D4EAD2C413837589962D8F4C04ED0F44B61AB2C41FFADE4B4A3DCF3C0FFFF6149E7A82C41F6E6592647E1F2C034016CC7E0A52C41AFB79F8760E6F1C0463F78024EA22C418B996B6903ECF0C03D2DDC412F9E2C41B92A74A386E4EFC0CEB5D7D784992C413B0A927467F2EDC065D18E214F942C411C94251ED001ECC0CB4202878E8E2C41352B9559E712EAC0F57A077B43882C4184C6B3BED325E8C096A43F7B6E812C413983BEC0BB3AE6C036D80D10107A2C411C115DABC551E4C07C798CCC28722C412835A59F176BE2C09DBE814EB9692C41009E2191D786E0C0B062533EC2602C41078BB885564ADDC00384F94E44572C415C35D988708CD9C058AFF03D404D2C41FF5C13DE47D4D5C031192BD3B6422C41C93C41C52622D2C0540601E1A8372C4123D9BD0BAEECCCC0AC642044172C2C41681093D243A2C5C0EA957BE302202C413EB120D440CBBCC0216D37B06C132C411BD7F92851DDACC0D96098A555062C4127FFB1DCCCEE47C00BF3EEC8BEF82B41B64F337707E0AB4085508329A9EA2B417C4F0774E1EFBB405A2980E015DC2B41506F990B52E7C440F8C3DC1006CD2B411C6FD1609BC5CB40A54C46E77ABD2B410A2596CE2149D1401A63089A75AD2B41B2920C8261A6D44024E8F468F79C2B414CADC5A149FAD740170D4B9D018C2B4172F239BF9744DB401AA79D89957A2B4139DC8E2B0A85DE4037C8B889B4682B413A0D5BFEAFDDE04058A0860260562B41A3B93E89AC73E24033A8F36199432B410773C70D5B04E4406918D21E62302B415C56304D9C8FE540FEAEBCB8BB1C2B41885C0A755115E7407FC5F8B7A7082B414AA6A3215C95E84024BA57AD27F42A41872566609E0FEA4053AE17323DDF2A418F742DB2FA83EB40F79CC3E7E9C92A41D6AC930D54F2EC401DCB12782FB42A41220F35E18D5AEE407195C7940F9E2A41FF4FEA158CBCEF40299D8DF78B872A4107AE7C88198CF040F756D761A6702A412F341EDBB336F140CFFEBA9C60592A41F1911FB507DEF14015F3CE78BC412A41F0EF280A0882F240247A05CEBB292A41E2424910A822F340DAF4877B60112A41F298F540DBBFF3402A819167ACF82941A425035A9559F440820F497FA1DF2941C0F89B5ECAEFF44013EE9AB641C62941314D2E986E82F540DECC11088FAC2941255D56977611F640B13DAF748B92294141A9C234D79CF6400BB3C3033978294111A112928524F7401A01C6C2995D2941579BAF1A77A8F740EF632AC5AF422941540DA084A128F840220E39247D27294193F054D1FAA4F8401D43E4FE030C29412347714E791DF94053009E7946F02841C8AE8B961392F940AF382DBE46D42841F4F3E991C002FA409AA582FB06B8284100963677776FFA40E2308D65899B28415D2E30CC2FD8FA4001FB0D35D07E284133AD5266E13CFB401E016CA7DD612841215E7A6B849DFB40496687FEB344284173A8805211FAFB4064638C8055272841987ED2E38052FC404EE1C577C40928410E71003ACCA6FC40C3C06F3203EC27419C5948C2ECF6FC409AD3880214CE27410C94183DDC42FD40E28AA43DF9AF274136BA8CBE948AFD40895DBC3CB59127419BD9E3AE10CEFD402CEB005C4A7327415819F0CA4A0DFE40B5DEAAFABA542741C1C77F243E48FE407294CB7A0936274170C7BF22E67EFE405F871D41381727411A5497823EB1FE404F89D4B449F826410318FD5643DFFE40B1C96D3F40D926416F8B4509F108FF40B1AE7F4C1EBA2641F6976A59442EFF4077848949E69A26411D7A4C5E3A4FFF404206C3A59A7B26412FDCEB85D06BFF402CC5EBD13D5C2641C2259D950484FF4060701A40D23C2641F9FB34AAD497FF4090028C635A1D2641F4EE2D383FA7FF4077D872B0D8FD25419651C70B43B2FF4035B4C59B4FDE254124391D49DFB8FF4060B10E9BC1BE2541ECA2396C13BBFF40E8BA3424319F2541 0103000020E80A0000010000001B0000003731C25DB7A40AC123BABA3D2F2E1541482DDA6520AE15C150176B846E0E04419D9BAD51D2DD20C188B238C6A20F1341C93BA6B63EF616C1773C690356B72041AFE718BD3DE01AC1363F67295618224104666722A81614C128DF2B476DE92641E3BF74CA1BBCF1C0D43292B68C652141BDD1D74AAFA6CCC01D27263DE8A122418FF95A96AD86C240BA1AA7079685274134285EE6E81EF9C040F2AA56B1AF2C4117B1B91CDC81FA40E8363289617C3041DF296F1F14800941806416C77A5C2C4143DE3E9BAE901A41E5DD836A7C8E2E413E4390CBBBDE1E41DCBAED0B9BC82741489E9ED935770A41535871C71BFB2441A247FE423D360841CDF36716539B2441ECC1420680470741BD3D4C94710F23414D024D7D04380A41FEC5364D1A022241407DA7BAAF811D41DD0784C658ED184192B08CF1A618184108E3295E56ED104121896F9066610541F13A975D57FE1941096E8D134BEBFB406847DAE3D9661741AABE21A245A00B41845A019F2304FF40E48112BC1AF0F84080891F1A39C7F140DD811CEEB3B3EF40AE82AE28194B0341AB6F85D09F3409C1B06BA7169F6201413731C25DB7A40AC123BABA3D2F2E1541 1 http://postgis.refractions.net/pipermail/postgis-users/2006-March/011316.html POLYGON((742605.987032656 5087763.72510381,742599.903121688 5087760.56016809,742598.666141033 5087762.50894352,742591.100910753 5087758.50480931,742586.861672536 5087766.63211263,742591.417801844 5087769.04526206,742592.428792606 5087767.35034731,742601.541294342 5087772.18101105,742605.987032656 5087763.72510381)) POLYGON((742601.541294537 5087772.18101068,742592.428792606 5087767.35034731,742589.944404072 5087771.51539701,742583.880455986 5087782.54873438,742582.81550675 5087784.27809355,742583.216887765 5087784.43459684,742582.99081514 5087785.0349637,742592.341351823 5087789.67654,742593.375823205 5087787.7060691,742599.28794443 5087776.4640487,742601.541294537 5087772.18101068)) 1 http://postgis.refractions.net/pipermail/postgis-users/2006-March/011332.html POLYGON ((613697.0000000041909516 2369267.9999981997534633, 613797.0000000043073669 2368322.9999981978908181, 613643.0000000041909516 2367807.9999981969594955, 613674.0000000041909516 2367405.9999981969594955, 613400.0000000041909516 2367299.9999981955625117, 613200.0000000040745363 2366813.9999981950968504, 613252.0000000040745363 2366474.9999981927685440, 613094.0000000040745363 2366400.9999981927685440, 612695.0000000039581209 2365506.9999981909058988, 612326.0000000038417056 2365402.9999981909058988, 612145.0000000037252903 2365470.9999981913715601, 612061.0000000037252903 2365967.9999981918372214, 611724.0000000036088750 2366168.9999981927685440, 611334.0000000034924597 2366316.9999981927685440, 610743.0000000033760443 2366221.9999981932342052, 610174.0000000031432137 2366305.9999981927685440, 609973.0000000031432137 2367066.9999981955625117, 609073.0000000027939677 2367938.9999981974251568, 609061.0000000027939677 2368332.9999981974251568, 609151.0000000027939677 2368684.9999981992878020, 608919.0000000027939677 2368811.9999982002191246, 608801.0000000026775524 2369192.9999982002191246, 609161.0000000027939677 2369096.9999982006847858, 609161.0000000027939677 2369509.9999982025474310, 609857.0000000030267984 2369498.9999982011504471, 609762.0000000030267984 2369689.9999982020817697, 610796.0000000033760443 2369794.9999982025474310, 611332.0000000034924597 2370097.9999982025474310, 613149.0000000040745363 2370460.9999982034787536, 613613.0000000041909516 2369720.9999982016161084, 613697.0000000041909516 2369267.9999981997534633)) POLYGON ((607216.0000000019790605 2370623.9999982002191246, 608128.0000000019790605 2370312.9999982002191246, 608317.0000000030267984 2370101.9999982002191246, 608328.0000000030267984 2369868.9999982002191246, 608644.0000000030267984 2369847.9999982002191246, 608801.0000000030267984 2369192.9999982002191246, 608919.0000000030267984 2368811.9999982002191246, 609151.0000000030267984 2368684.9999982002191246, 609061.0000000030267984 2368332.9999982002191246, 608602.0000000030267984 2368124.9999982002191246, 607980.0000000019790605 2367585.9999982002191246, 607295.0000000019790605 2367062.9999981899745762, 606251.0000000019790605 2366697.9999981899745762, 605456.0000000019790605 2367679.9999982002191246, 605108.0000000019790605 2368377.9999982002191246, 604906.0000000019790605 2369083.9999982002191246, 604191.0000000010477379 2369719.9999982002191246, 604107.0000000010477379 2370057.9999982002191246, 604264.0000000010477379 2370397.9999982002191246, 604141.0000000010477379 2370768.9999982002191246, 604561.0000000010477379 2370448.9999982002191246, 604940.0000000019790605 2370406.9999982002191246, 605460.0000000019790605 2370792.9999982002191246, 605942.0000000019790605 2370945.9999982099980116, 606364.0000000019790605 2370892.9999982002191246, 606881.0000000019790605 2370988.9999982002191246, 607216.0000000019790605 2370623.9999982002191246)) 1 http://postgis.refractions.net/pipermail/postgis-users/2006-March/011332.html (2) 0103000020BE6B0000010000002A000000FBFFFFFF0BB81A41D3FFFFFF12C63E41FBFFFFFF4FBD1A41D6FFFFFF66C63E41FCFFFFFF1BC11A41D7FFFFFF14C53E41FBFFFFFF93C31A41D3FFFFFFC4C23E41FCFFFFFF87C71A41D8FFFFFFC4C23E41FBFFFFFF8BD41A41D5FFFFFFBEC03E41FBFFFFFF2BD81A41D3FFFFFFDEC03E41FCFFFFFF63DA1A41DBFFFFFFB9BF3E41FCFFFFFF43D91A41D7FFFFFF5BBE3E41FBFFFFFFD7D81A41D1FFFFFFA8BC3E41FCFFFFFF37D61A41D3FFFFFF60BB3E41FCFFFFFFF3DD1A41D6FFFFFFFDB73E41FCFFFFFF6BE11A41D8FFFFFFBCB33E41FCFFFFFF4BDE1A41D8FFFFFFEBB13E41FCFFFFFF7BDB1A41D7FFFFFF8BB13E41FCFFFFFF4BDD1A41D6FFFFFF83B03E41FBFFFFFFB7D91A41D0FFFFFFADAE3E41FBFFFFFF07D81A41D6FFFFFFF4AD3E41FCFFFFFFBBD61A41D6FFFFFF45AB3E41FCFFFFFF67D61A41DBFFFFFFB3A93E41FCFFFFFF63D91A41D6FFFFFF92A83E41FBFFFFFF03C31A41D2FFFFFF75A93E41FBFFFFFF13BE1A41D7FFFFFFB7A83E41FBFFFFFF0FBF1A41D2FFFFFF84A73E41FBFFFFFFD7B41A41D5FFFFFF77A83E41FBFFFFFFAF871A41D6FFFFFFACA83E41FAFFFFFFDF811A41CEFFFFFF79AA3E41FBFFFFFFDF8B1A41D1FFFFFF9AAE3E41FAFFFFFF3B971A41D0FFFFFF76B03E41FBFFFFFF3B891A41D3FFFFFF4FB33E41FCFFFFFFE7871A41D3FFFFFF2EB43E41FBFFFFFFE7881A41D2FFFFFF16B53E41FCFFFFFFC3861A41D8FFFFFF9BB53E41FBFFFFFF27851A41D8FFFFFF67B73E41FBFFFFFFBB8C1A41D4FFFFFFA6B73E41FBFFFFFF03911A41D4FFFFFF38B93E41FBFFFFFF879E1A41D3FFFFFF11BC3E41FBFFFFFF37A91A41D4FFFFFF3EBB3E41FBFFFFFF0BA91A41D2FFFFFF46BC3E41FCFFFFFFC3B31A41D5FFFFFFFABC3E41FBFFFFFFF3B11A41D4FFFFFFDFC33E41FBFFFFFF0BB81A41D3FFFFFF12C63E41 0103000020BE6B00000100000038000000000000009C801A41D5FFFFFF33D83E41000000006C821A41D5FFFFFFE0D63E410000000038861A41D5FFFFFFE3D53E4100000000E4851A41D5FFFFFFB0D43E4100000000C0821A41D5FFFFFFF2D33E4100000000B4691A41D5FFFFFFC6CF3E410000000038681A41D5FFFFFFBDCE3E410000000038751A41D5FFFFFF76CD3E410000000068731A41D5FFFFFF30CB3E4100000000787C1A41D5FFFFFFDCCA3E4100000000B4851A41D5FFFFFFDCCA3E4100000000788B1A41D5FFFFFF23CC3E41000000004C8C1A41D5FFFFFF10CB3E4100000000A48A1A41D5FFFFFFDEC93E4100000000788B1A41D5FFFFFFF5C83E4100000000C48E1A41D5FFFFFF17C83E4100000000B8921A41D5FFFFFFCDC73E41000000001C9D1A41D5FFFFFFE2C73E410000000008A31A41D5FFFFFFCBC83E4100000000ECAC1A41D5FFFFFF41C83E41000000005CB21A41D5FFFFFF31C63E41000000000CB81A41D5FFFFFF12C63E4100000000F4B11A41D5FFFFFFDFC33E4100000000C4B31A41D5FFFFFFFABC3E41000000000CA91A41D5FFFFFF46BC3E410000000038A91A41D5FFFFFF3EBB3E4100000000889E1A41D5FFFFFF11BC3E410000000004911A41D5FFFFFF38B93E4100000000BC8C1A41D5FFFFFFA6B73E410000000028851A41D5FFFFFF67B73E4100000000C4861A41D5FFFFFF9BB53E4100000000F0791A41D5FFFFFFD5B53E410000000038701A41D5FFFFFFDDB63E4100000000D0681A41D5FFFFFF84B83E4100000000D0581A41D5FFFFFF9CB73E410000000028581A41D5FFFFFF23B93E4100000000445E1A41D5FFFFFFB5BA3E4100000000245B1A41D5FFFFFF3CBC3E410000000080591A41D5FFFFFF99BD3E4100000000F8501A41D5FFFFFFBABE3E410000000018511A41D5FFFFFF75BF3E4100000000A84B1A41D5FFFFFF31C13E41000000004C4D1A41D5FFFFFFCCC73E4100000000244F1A41D5FFFFFF50CB3E41000000006C441A41D5FFFFFF8DCC3E4100000000BC451A41D5FFFFFF14CE3E4100000000D84B1A41D5FFFFFFFBCF3E4100000000B4571A41D5FFFFFFD6D13E4100000000B0581A41D5FFFFFF09D33E410000000028561A41D5FFFFFF5AD43E4100000000F45E1A41D5FFFFFF59D53E4100000000506B1A41D5FFFFFFB4D73E410000000044701A41D5FFFFFF5FD73E410000000038731A41D5FFFFFF74D73E4100000000E4721A41D5FFFFFFB4D73E41000000009C801A41D5FFFFFF33D83E41 1 postgis-users/2006-November/014013.html MULTIPOLYGON(((-112.237615 33.491154,-112.237614 33.490469,-112.237752 33.490529,-112.23774 33.494274,-112.235109 33.494339,-112.235109 33.494222,-112.233468 33.494258,-112.233631 33.491873,-112.236704 33.491169,-112.237615 33.491154)),((-112.237137 33.506662,-112.237111 33.505964,-112.236836 33.505292,-112.235281 33.503124,-112.23644 33.502654,-112.237714 33.502702,-112.237695 33.50665,-112.237137 33.506662)),((-112.236804 33.501624,-112.236731 33.501185,-112.234285 33.501218,-112.234295 33.499851,-112.237725 33.499804,-112.237714 33.501536,-112.236804 33.501624))) POLYGON((-112.235266 33.502267,-112.234309 33.502505,-112.234451 33.501985,-112.234479 33.501868,-112.234509 33.501141,-112.236709 33.501141,-112.236909 33.501541,-112.235687 33.502032,-112.235266 33.502267)) 0.001 geos-3.4.2/tests/xmltester/tests/safe/0000755000175000017500000000000012206417242017546 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/safe/16595.xml0000644000175000017500000030240112206417147020765 0ustar frankiefrankie SAFE test 16595 line 1 LINESTRING(608919.148 232497.434 2047.83996582031,608912.759 232499.018 2054.42238984432,608908.967 232499.509 2058.24604268589,608904.178 232499.499 2063.0350492044,608899.288 232499.689 2067.92873501108,608892.205 232498.975 2075.0476255139,608886.918 232498.165 2080.39630966434,608882.13 232497.355 2085.25233740058,608877.841 232496.348 2089.65796314595,608873.953 232494.342 2094.03295442012,608870.963 232492.538 2097.52501627898,608868.671 232490.736 2100.44057009889,608865.882 232487.934 2104.39401156164,608864.088 232486.432 2106.73376176908,608861.298 232484.129 2110.35148032683,608856.515 232480.324 2116.46335833722,608851.432 232476.818 2122.63821562682,608844.353 232473.707 2130.37064500361,608838.072 232470.398 2137.46996605894,608832.189 232467.589 2143.98917616351,608826.604 232466.279 2149.72574927799,608815.232 232464.557 2161.22737748111,608809.944 232464.746 2166.51874962256,608804.854 232465.534 2171.66938070493,608799.763 232466.822 2176.9207785979,608795.171 232468.01 2181.66396014097,608789.88 232469.497 2187.15994053798,608783.791 232471.082 2193.45184654153,608776.705 232472.565 2200.69136304159,608771.415 232473.553 2206.0728309235,608765.827 232473.841 2211.66824303684,608761.536 232474.031 2215.96344393816,608756.147 232474.519 2221.37448977438,608751.159 232474.309 2226.36690433807,608746.57 232473.8 2230.98404274652,608739.986 232472.488 2237.69748643633,608734.9 232471.179 2242.94923203415,608728.317 232469.667 2249.70363491477,608718.443 232467.349 2259.84606221341,608713.656 232465.841 2264.86496565354,608709.567 232464.534 2269.15776658243,608698.698 232460.516 2280.74565962041,608692.815 232458.007 2287.14133808331,608686.734 232454.699 2294.06386265939,608679.954 232451.289 2301.65309224221,608673.872 232448.579 2308.31152684674,608666.994 232444.67 2316.22272539603,608662.209 232441.664 2321.87358450737,608655.829 232438.554 2328.97121914761,608650.545 232436.047 2334.81977871156,608645.26 232433.738 2340.58715693029,608638.38 232430.928 2348.01887338989,608632.796 232428.619 2354.06142890847,608626.016 232425.608 2361.47994836029,608620.932 232422.801 2367.28737892445,608614.351 232419.791 2374.5240615361,608608.768 232416.983 2380.7734366273,608602.987 232413.675 2387.43397356792,608597.903 232410.369 2393.49834754724,608589.032 232404.957 2403.88989257812) LINESTRING (608916.741593641 232487.72785718,608910.907705488 232489.174230452,608908.332673382 232489.50765365,608904.19888114 232489.499021801,608903.789744906 232489.506539943,608899.596850546 232489.669454039,608893.464514039 232489.051285429,608888.50930563 232488.292117884,608884.108834654 232487.547677305,608881.328810042 232486.894964602,608878.833975851 232485.607763628,608876.657972004 232484.294883715,608875.329586331 232483.250489744,608872.969490056 232480.879392661,608872.301483435 232480.266521117,608870.507483435 232478.764521117,608870.453885232 232478.719963614,608867.663885232 232476.416963614,608867.523577273 232476.30326121,608862.740577273 232472.49826121,608862.192859365 232472.09223755,608857.109859365 232468.58623755,608855.455311822 232467.663058057,608848.700607031 232464.6945757,608842.733005277 232461.550682338,608842.38080069 232461.373907989,608836.49780069 232458.564907989,608834.472591442 232457.853230378,608828.887591442 232456.543230378,608828.101178103 232456.391712317,608816.729178103 232454.669712317,608814.874815058 232454.56338109,608809.586815058 232454.75238109,608808.414091641 232454.863723925,608803.324091641 232455.651723925,608802.401321739 232455.839446408,608797.310321739 232457.127446408,608797.258354086 232457.140742393,608792.666354086 232458.328742393,608792.46538849 232458.382972091,608787.267396709 232459.843832756,608781.505872447 232461.343589031,608774.76256878 232462.754867515,608770.234457652 232463.600571446,608765.348463333 232463.852390766,608761.093646199 232464.040788635,608760.63414181 232464.07175044,608755.905332502 232464.499966981,608751.9214168 232464.332239977,608748.101194266 232463.908510783,608742.211089554 232462.734783963,608737.392502547 232461.494608896,608737.138538015 232461.43277265,608730.579005672 232459.926162761,608721.091725587 232457.698948335,608716.680647131 232456.309371082,608712.824647895 232455.076846992,608702.395405539 232451.221414498,608697.175628941 232448.995268062,608691.512599562 232445.91463968,608691.227206023 232445.765294183,608684.447206023 232442.355294183,608684.024022372 232442.154728388,608678.388313356 232439.643585436,608672.126811684 232436.084962284,608667.528540762 232433.196267949,608666.590737876 232432.67509722,608660.210737876 232429.56509722,608660.115522039 232429.519304166,608654.831522039 232427.012304166,608654.548548964 232426.883398323,608649.263548963 232424.574398323,608649.041088412 232424.480388514,608642.181175994 232421.67859289,608636.736650905 232419.427266165,608630.470442473 232416.644441152,608625.765458911 232414.046705342,608625.09136099 232413.707061571,608618.678787281 232410.774095933,608613.501319749 232408.170060677,608608.200242013 232405.136681478,608603.354506295 232401.985618873,608603.111075942 232401.832259113,608594.240075942 232396.420259112) LINESTRING (608583.823924058 232413.493740887,608592.572105684 232418.830812126,608597.535493705 232422.058381127,608598.020437514 232422.354473317,608603.801437514 232425.662473317,608604.274754421 232425.916685923,608609.85775442 232428.724685923,608610.19163901 232428.884938429,608616.429176161 232431.737846319,608621.182541089 232434.362294658,608621.957241977 232434.747282429,608628.737241977 232437.758282429,608628.974772207 232437.860115634,608634.558772207 232440.169115634,608634.598911588 232440.185611486,608641.367113667 232442.949949835,608646.398962292 232445.14834879,608651.494749083 232447.566050812,608657.344361551 232450.417507673,608661.674459238 232453.137732051,608662.052906973 232453.363997912,608668.930906973 232457.272997912,608669.801977628 232457.713271612,608675.670037001 232460.327944565,608682.096894417 232463.560331555,608688.036400438 232466.79136032,608688.892041772 232467.205391095,608694.775041772 232469.714391095,608695.230590786 232469.895609445,608706.099590786 232473.913609445,608706.522370279 232474.059241722,608710.611370279 232475.366241722,608710.651362069 232475.378932213,608715.438362069 232476.886932213,608716.157552904 232477.084334179,608726.031552904 232479.402334179,608726.078461985 232479.41322735,608732.534075608 232480.895968926,608737.493497453 232482.172391104,608738.031713964 232482.295179314,608744.615713964 232483.607179314,608745.467586474 232483.739048466,608750.056586474 232484.248048466,608750.7383622 232484.300149275,608755.7263622 232484.510149275,608757.04885819 232484.47824956,608762.208462574 232484.011022442,608766.269353801 232483.831211365,608766.341706975 232483.827745052,608771.929706975 232483.539745052,608773.250928807 232483.383023673,608778.540928807 232482.395023673,608778.753477665 232482.352938458,608785.839477665 232480.869938458,608786.310107407 232480.759504734,608792.399107407 232479.174504734,608792.58561151 232479.124027909,608797.77641093 232477.665188609,608802.241679923 232476.509975289,608806.849717536 232475.344162591,608810.890831392 232474.718544179,608814.657044473 232474.583934823,608824.710579109 232476.106286797,608828.854389576 232477.078245921,608833.585355109 232479.33717541,608839.691994723 232482.554317662,608840.329688178 232482.861941943,608846.537488763 232485.590076937,608850.556356992 232488.362091891,608855.001755373 232491.898521085,608857.695238025 232494.121851031,608859.114608899 232495.310198329,608861.583509944 232497.790607339,608862.490361138 232498.59727873,608864.782361138 232500.39927873,608865.797001815 232501.100269719,608868.787001815 232502.904269719,608869.367851753 232503.228867589,608873.255851753 232505.234867589,608875.555287973 232506.08327198,608879.844287973 232507.09027198,608880.461971355 232507.214902659,608885.249971355 232508.024902659,608885.403610079 232508.049666063,608890.690610079 232508.859666063,608891.202035542 232508.924575986,608898.285035542 232509.638575986,608899.676255094 232509.681460057,608904.361763905 232509.499405522,608908.946118859 232509.508978199,608910.251111341 232509.426210196,608914.043111341 232508.935210196,608915.165406359 232508.72414282,608921.554406359 232507.14014282) SAFE test 16595 line 2 LINESTRING(609188.538 232627.432 1717.13000488281,609187.04 232627.928 1718.70807521457,609183.948 232627.123 1721.90333129484,609179.361 232625.415 1726.79828629907,609175.872 232623.61 1730.7267616047,609171.288 232620.305 1736.37828783883,609167.5 232617.7 1740.97583025788,609165.21 232614.7 1744.75018263909,609161.923 232611.597 1749.27072737107,609158.933 232609.293 1753.04566477512,609154.846 232606.588 1757.94702710631,609150.559 232604.482 1762.72366034349,609146.771 232602.477 1767.00980997084,609143.682 232599.874 1771.0495381826,609139.895 232596.869 1775.88421274695,609136.106 232595.563 1779.89220497454,609133.113 232595.557 1782.88538285307,609129.523 232594.351 1786.67275439575,609125.236 232592.045 1791.54088816792,609122.446 232589.742 1795.15881742541,609119.16 232585.64 1800.41499213391,609115.573 232582.137 1805.42901895725,609111.587 232579.033 1810.48133953794,609108.796 232577.529 1813.65196272768,609105.704 232576.524 1816.90337826442,609103.511 232575.221 1819.45441831082,609102.017 232573.72 1821.5723305127,609102.022 232570.924 1824.36849553563,609102.225 232568.627 1826.67458067964,609103.029 232564.834 1830.55207878163,609103.534 232561.04 1834.37975999249,609102.544 232556.244 1839.27715422177,609101.253 232552.646 1843.09997558594) LINESTRING (609186.9602967 232617.573896739,609183.418039307 232616.254913607,609181.122024306 232615.067092719,609177.136313611 232612.193450955,609176.954395972 232612.065342441,609174.480871301 232610.364304487,609173.158839862 232608.632385572,609172.074611158 232607.428334877,609168.787611158 232604.325334877,609168.026762934 232603.67588404,609165.036762934 232601.37188404,609164.452190674 232600.954023186,609160.365190674 232598.249023186,609159.255216338 232597.612543951,609155.103706964 232595.573104077,609152.395799275 232594.139800244,609150.125872788 232592.227006899,609149.897873505 232592.040551426,609146.110873505 232589.035551426,609143.153676462 232587.414846007,609139.364676462 232586.108846007,609136.126046736 232585.563020094,609134.75753066 232585.56027666,609133.512383768 232585.141990545,609130.841510087 232583.70531345,609129.606454841 232582.685839532,609126.964602725 232579.387946233,609126.146801772 232578.485658591,609122.559801772 232574.982658591,609121.717064274 232574.24710303,609117.731064274 232571.14310303,609116.330819346 232570.229808646,609113.539819346 232568.725808646,609112.518831632 232568.289004015,609112.811642575 232566.907621047,609112.941575395 232566.153412381,609113.446575395 232562.359412381,609113.327525233 232559.018400755,609112.337525233 232554.222400755,609111.956437207 232552.866719168,609110.665437207 232549.268719168) LINESTRING (609091.840562793 232556.023280832,609092.893172374 232558.956889874,609093.397728796 232561.401185433,609093.166950182 232563.134995462,609092.442357425 232566.553378953,609092.263824436 232567.746669726,609092.060824436 232570.043669726,609092.02201599 232570.906117339,609092.01701599 232573.702117339,609092.770330549 232577.52776891,609094.929424844 232580.774521841,609096.423424844 232582.275521841,609098.402986025 232583.817987451,609100.595986024 232585.120987451,609102.612861086 232586.034250271,609104.846616915 232586.760293158,609106.104753839 232587.438271637,609108.986965062 232589.682723126,609111.736777614 232592.368140848,609114.641397275 232595.994053767,609116.080114768 232597.454036386,609118.870114768 232599.757036386,609120.498799826 232600.85175505,609124.785799826 232603.15775505,609126.338550739 232603.830413637,609129.928550739 232605.036413637,609133.092953264 232605.556979906,609134.421205178 232605.559642623,609135.019107031 232605.765728614,609137.350753774 232607.615899849,609140.327127212 232610.123993101,609142.09287323 232611.315276411,609145.88087323 232613.320276411,609146.149783662 232613.457456049,609149.861395144 232615.28079493,609153.114011866 232617.433554468,609155.422550839 232619.212442024,609157.754341326 232621.41370332,609159.551160138 232623.767614428,609161.833604028 232625.939657559,609165.529932565 232628.481615278,609170.023686389 232631.721549045,609171.27707829 232632.491818197,609174.76607829 232634.296818197,609175.871492792 232634.78641075,609180.458492792 232636.49441075,609181.428495445 232636.800401345,609184.520495445 232637.605401345,609190.183259659 232637.421151148,609191.681259659 232636.925151148) SAFE test 16595 line 3 LINESTRING(609093.181 232546.537 1853.38000488281,609091.088 232545.234 1855.84536607578,609088.795 232544.231 1858.34804304639,609086.102 232543.027 1861.29782569125,609083.81 232541.723 1863.93471072891,609078.925 232539.117 1869.47115187422,609074.936 232537.41 1873.8098808932,609072.644 232535.808 1876.60614380643,609069.853 232534.104 1879.87608287387,609067.359 232534.099 1882.36999511719) LINESTRING (609098.466033027 232538.047687548,609096.373033027 232536.744687548,609095.095559519 232536.072151568,609092.839598283 232535.085352998,609090.62587224 232534.095629212,609088.755044918 232533.03124927,609088.516819773 232532.89997061,609083.631819773 232530.29397061,609082.85918556 232529.923405274,609079.818982583 232528.622420947,609078.372861916 232527.611650742,609077.854912441 232527.272990244,609075.063912441 232525.568990244,609069.873048075 232524.104020096,609067.379048075 232524.099020096) LINESTRING (609067.168870898 232544.181696538,609069.207138084 232545.606349258,609071.00181444 232546.603594726,609074.596551576 232548.14187908,609078.983174869 232550.482010155,609081.156955082 232551.71875073,609082.020495157 232552.156146631,609084.713495157 232553.360146631,609084.787440481 232553.392848432,609086.417366889 232554.105807956,609087.895966973 232555.026312452) SAFE test 16595 line 4 LINESTRING(609067.359 232534.099 1882.36999511719,609064.765 232533.594 1885.01256394715,609061.969 232535.086 1888.18158371422,609058.175 232536.876 1892.37643708604,609053.382 232538.863 1897.56472721392,609048.293 232539.052 1902.65698370207,609042.207 232539.039 1908.74269650551,609034.824 232538.524 1916.14327044958,609030.335 232537.516 1920.74382375671,609026.545 232536.509 1924.66512806707,609021.659 232534.701 1929.87465535857,609017.871 232532.696 1934.1603468529,609014.381 232531.191 1937.96083311229,609009.794 232529.383 1942.89104891279,609006.203 232529.076 1946.49496966992,609002.214 232527.57 1950.75857826658,609000.72 232526.268 1952.74020674876,608998.429 232523.767 1956.13174678721,608996.141 232519.168 1961.26819832597,608994.054 232514.37 1966.50018307343,608988.587 232509.148 1974.06005859375) LINESTRING (609069.269924747 232524.283279618,609066.675924747 232523.778279618,609063.280976628 232523.704729318,609060.057152467 232524.771518966,609057.478881915 232526.147334296,609054.124427721 232527.72995765,609051.213708413 232528.9366339,609048.118046122 232529.051603476,609042.56601786 232529.039744067,609036.275680762 232528.600962595,609032.715310609 232527.801485403,609029.570925419 232526.966024747,609025.75116778 232525.552573701,609022.54912677 232523.857723589,609021.830823674 232523.513418856,609018.340823674 232522.008418856,609018.048000857 232521.887607892,609013.461000857 232520.079607892,609010.645807887 232519.419344881,609008.437115 232519.230520399,609007.516432283 232518.882927476,609006.754607938 232518.051272003,609005.20861367 232514.943742441,609003.224062357 232510.381271334,609000.961179422 232507.1387572,608995.494179422 232501.9167572) LINESTRING (608981.679820578 232516.3792428,608985.688398337 232520.20817879,608986.970937643 232523.156728666,608987.187790866 232523.622216677,608989.475790866 232528.221216677,608991.055133718 232530.521709177,608993.346133718 232533.022709177,608994.149971357 232533.806880794,608995.643971357 232535.108880794,608998.681955577 232536.925461624,609002.670955576 232538.431461624,609005.351192113 232539.039655119,609007.486358663 232539.222193724,609010.566630895 232540.436305822,609013.545162864 232541.720744393,609016.98087323 232543.539276411,609018.188607284 232544.079505979,609023.074607284 232545.887505979,609023.977103956 232546.173673295,609027.767103955 232547.180673295,609028.144067592 232547.273039263,609032.633067593 232548.281039263,609034.128142454 232548.499759734,609041.511142454 232549.014759734,609042.185639549 232549.038977187,609048.271639549 232549.051977187,609048.664133407 232549.045110627,609053.753133407 232548.856110627,609057.211588655 232548.100653963,609062.004588655 232546.113653963,609062.441922556 232545.919968814,609066.235922556 232544.129968814,609066.676847533 232543.908481034) SAFE test 16595 line 5 LINESTRING(610697.427 232662.077 82.0999984741211,610693.636 232661.769 85.9034983533511,610690.143 232662.261 89.4309861355961,610685.752 232662.551 93.8315622106401,610682.262 232661.246 97.5575773282136,610680.267 232660.742 99.6152605919326,610676.179 232659.236 103.971849512795,610672.59 232657.231 108.082934952672,610669.6 232655.626 111.476484392912,610665.511 232654.419 115.739916501307,610662.221 232652.615 119.492059962401,610657.137 232649.508 125.450303644566,610652.353 232646.502 131.1003335888,610649.063 232644.498 134.952629533395,610646.275 232640.896 139.50756566134,610643.487 232637.795 143.677604597904,610638.403 232634.788 149.584318148741,610635.409 232635.081 152.592627723176,610630.619 232635.271 157.386405499466,610628.321 232637.064 160.301142529422,610625.524 232639.055 163.734412697461,610623.226 232641.147 166.842034341098,610619.131 232643.635 171.633618032477,610615.637 232644.926 175.358504690936,610611.844 232645.418 179.183289662098,610606.755 232645.906 184.295645756759,610604.164 232644.103 187.452247677664,610599.875 232642.796 191.935980740536,610597.384 232640.793 195.132406376658,610591.801 232637.985 201.381800913136,610588.809 232637.18 204.480209055688,610585.216 232637.971 208.159256766947,610582.718 232639.764 211.234138285351,610578.126 232641.252 216.061219684784,610573.036 232642.24 221.246233404112,610567.747 232642.528 226.543080923488,610562.359 232642.517 231.931104504507,610556.271 232643.503 238.098447076676,610549.983 232644.987 244.559204879729,610544.392 232646.773 250.428551943498,610539.1 232649.059 256.193203916539,610532.512 232651.043 263.073481313022,610526.921 232652.828 268.942524159912,610520.534 232653.814 275.405198258445,610516.542 232654.105 279.407799719691,610511.654 232653.795 284.305631279915,610506.666 232652.786 289.394672815204,610500.281 232652.473 295.787354676403,610496.489 232652.964 299.611019415482,610490.101 232654.249 306.126996984121,610483.313 232656.232 313.198733850089,610477.223 232658.016 319.544672759963,610470.836 232659.002 326.007346858496,610465.846 232659.49 331.021163694299,610455.666 232661.067 341.322610950687,610452.076 232659.761 345.14279457383,610447.588 232658.953 349.702959411719,610442 232658.941 355.290985107422) LINESTRING (610698.236782348 232652.1098413,610694.445782348 232651.8018413,610692.241236479 232651.866745978,610689.114708683 232652.307127219,610687.239491508 232652.430974402,610685.764409278 232651.87940354,610684.711362175 232651.550608057,610683.228336126 232651.175948844,610680.371571622 232650.123530218,610677.467068662 232648.500925472,610677.319572113 232648.420146033,610674.329572113 232646.815146033,610672.43105896 232646.035113432,610669.374778925 232645.132953979,610667.235051967 232643.959681203,610662.404690575 232641.007688118,610657.673337983 232638.034768826,610657.555104468 232637.961618913,610655.841283449 232636.917698755,610654.182922651 232634.775153706,610653.711398452 232634.21019578,610650.923398452 232631.10919578,610648.577829051 232629.187825111,610643.493829051 232626.180825111,610640.568542672 232625.02529418,610637.429028856 232624.835544011,610634.723265729 232625.100336461,610630.222651975 232625.278857675,610627.17958304 232625.881089938,610624.467487558 232627.386908761,610622.342782336 232629.044696603,610619.724850888 232630.9082295,610618.792148327 232631.660260447,610617.208249154 232633.102173881,610614.761673608 232634.588640293,610613.230570686 232635.154368362,610610.723236588 232635.479601258,610609.30135993 232635.615949423,610607.078988422 232634.537288186,610604.636804622 232633.793074098,610603.650388836 232632.999902351,610601.877245579 232631.859314078,610596.29424558 232629.051314077,610594.399114285 232628.328406286,610591.407114285 232627.523406286,610586.658982182 232627.413863436,610583.065982182 232628.204863436,610579.384867646 232629.847091121,610578.152887828 232630.731374473,610575.62269551 232631.551262576,610571.805600089 232632.292184045,610567.485138921 232632.527444551,610562.379415696 232632.51702084,610560.760252648 232632.645626899,610554.672252648 232633.631626899,610553.974050559 232633.77037326,610547.686050559 232635.25437326,610546.940065113 232635.461216711,610541.349065113 232637.247216711,610540.42644362 232637.592893105,610535.664019734 232639.650130634,610529.628388724 232641.467782718,610529.470611244 232641.51672295,610524.623535964 232643.064215237,610519.405819519 232643.869705829,610516.494734339 232644.081911688,610512.967904379 232643.858237938,610508.648696164 232642.984524809,610507.155623486 232642.79799375,610500.770623486 232642.48499375,610498.996888659 232642.555789804,610495.204888659 232643.046789804,610494.516919936 232643.160383309,610488.128919936 232644.445383309,610487.296873399 232644.650204554,610480.508873399 232646.633204554,610475.045085022 232648.233759722,610469.585530831 232649.076584277,610464.872687383 232649.537479588,610464.31514363 232649.607870737,610456.672128903 232650.791862311,610455.494691673 232650.363524422,610453.847869836 232649.91922794,610449.359869836 232649.11122794,610447.609474539 232648.953023058,610442.021474539 232648.941023058) LINESTRING (610441.978525461 232668.940976942,610446.68434957 232668.951082506,610449.461704023 232669.451105322,610452.247308327 232670.464475578,610457.19685637 232670.949129263,610467.099073827 232669.415160999,610471.809312617 232668.954520412,610472.361687735 232668.884928561,610478.748687735 232667.898928561,610480.034253174 232667.612710665,610486.120690298 232665.829754371,610492.493495075 232663.968046671,610498.11907708 232662.836413472,610500.681398212 232662.504636131,610505.422803497 232662.737065239,610509.671303836 232663.596475191,610511.02106539 232663.774949588,610515.90906539 232664.084949588,610517.269028833 232664.078536438,610521.261028833 232663.787536438,610522.059687735 232663.696928561,610528.446687735 232662.710928561,610529.962388756 232662.35427705,610535.47470214 232660.594398783,610541.983611276 232658.634217282,610543.06555638 232658.239106895,610547.904770448 232656.148698097,610552.656948263 232654.6306531,610558.221319142 232653.317433255,610563.153405385 232652.518642677,610567.726584304 232652.52797916,610568.290720882 232652.513207439,610573.579720882 232652.225207439,610574.941495951 232652.056775702,610580.031495952 232651.068775702,610581.208615121 232650.765016557,610585.800615121 232649.277016557,610588.549132354 232647.887908879,610588.831639811 232647.685132309,610591.943728061 232649.250373901,610593.608611164 232650.589097649,610596.960011578 232652.361711814,610599.743773599 232653.210016071,610601.043148526 232654.114212518,610604.221186316 232655.579664674,610607.709552284 232655.860337242,610612.798552284 232655.372337242,610613.130349773 232655.3349201,610616.923349773 232654.8429201,610619.102885215 232654.306172689,610622.596885215 232653.015172689,610624.323449646 232652.181254541,610628.418449646 232649.693254541,610629.957851673 232648.541739553,610631.812066449 232646.853742463,610634.120149112 232645.2107705,610634.220435135 232645.136009433,610635.805348025 232645.073142325,610636.113366419 232645.051979527,610637.076040587 232645.621366078,610638.592438941 232647.30800571,610641.155077349 232650.618846294,610643.860895532 232653.038381087,610647.091524512 232655.006217097,610651.816662017 232657.975231174,610651.922364129 232658.040735361,610657.006364129 232661.147735361,610657.413070467 232661.383341554,610660.703070467 232663.187341554,610662.67994104 232664.009886568,610665.779446364 232664.924805357,610667.786339985 232666.002084374,610671.301931338 232667.966074528,610672.722159155 232668.619509545,610676.810159155 232670.125509545,610677.817637825 232670.437391943,610679.2770324 232670.806081099,610682.249590722 232671.91759646,610686.411006139 232672.529261918,610690.802006139 232672.239261918,610691.537763521 232672.163254022,610693.93209123 232671.826005459,610696.617217652 232672.0441587) SAFE test 16595 line 6 LINESTRING(609243.805 232633.641 1657.5,609243.009 232632.141 1659.19849814777,609239.718 232631.036 1662.67082523786,609236.013 232629.856 1666.56005859375) LINESTRING (609252.63829116 232628.953466824,609251.84229116 232627.453466824,609249.477350762 232624.51470087,609246.192010078 232622.661103015,609242.901010078 232621.556103015,609242.752690253 232621.50758696,609239.047690253 232620.32758696) LINESTRING (609232.978309747 232639.38441304,609236.608960551 232640.540733674) SAFE test 16595 line 7 LINESTRING(609624.315 232783.037 1234.64001464844,609622.224 232781.246 1237.39321386488,609619.931 232779.544 1240.2488762816,609616.144 232776.939 1244.84537442258,609612.557 232773.936 1249.5235143881,609607.775 232769.631 1255.95790131306,609603.193 232764.728 1262.66871259738,609601.2 232762.726 1265.49363817565,609594.621 232759.217 1272.95000308381,609587.241 232757.104 1280.62660962107,609582.654 232755.097 1285.6335142532,609578.165 232754.289 1290.19469611964,609574.076 232753.282 1294.40590814555,609570.285 232752.774 1298.23082942377,609566.494 232752.467 1302.03427584445,609563.701 232752.261 1304.83488897829,609559.909 232752.253 1308.62693341766,609556.816 232752.246 1311.71997070312) LINESTRING (609630.820221245 232775.442126956,609628.729221245 232773.651126956,609628.184144828 232773.216263166,609625.891144828 232771.514263166,609625.598411693 232771.305041043,609622.200847486 232768.967925976,609619.114095901 232766.383728872,609614.786473051 232762.487782329,609610.499190474 232757.900146695,609610.279979643 232757.672879906,609608.286979643 232755.670879906,609605.906091181 232753.902581966,609599.327091181 232750.393581966,609597.373544435 232749.603285883,609590.636651061 232747.674416546,609586.662502661 232745.935564173,609584.425487511 232745.255159115,609580.248464315 232744.50331355,609576.467258274 232743.572114117,609575.404144518 232743.37059081,609571.613144518 232742.86259081,609571.092170341 232742.806629432,609567.301170341 232742.499629432,609567.2295602 232742.494089131,609564.4365602 232742.288089131,609563.722097 232742.261022254,609559.930864244 232742.253023873,609556.838631691 232742.24602561) LINESTRING (609556.793368309 232762.24597439,609559.886368309 232762.25297439,609563.322187287 232762.260223071,609565.722624782 232762.437269303,609569.216609265 232762.720216608,609572.210839173 232763.121448155,609575.773741726 232763.998885883,609576.393512489 232764.130840885,609579.723957178 232764.73030609,609583.232497339 232766.265435827,609584.488455565 232766.717714117,609590.849813415 232768.539062239,609595.170891925 232770.843768804,609595.994620681 232771.671217359,609600.468809526 232776.458853305,609601.084322363 232777.063014044,609605.866322363 232781.368014044,609606.137721116 232781.603650136,609609.724721116 232784.606650136,609610.476588306 232785.177958957,609614.115339406 232787.680981564,609615.983731686 232789.067812642,609617.809778755 232790.631873044) SAFE test 16595 line 8 LINESTRING(610442 232658.941 355.290985107422,610438.208 232659.232 359.094130190923,610435.413 232659.726 361.932447106464,610428.031 232659.211 369.332381299169,610418.452 232659.191 378.91139142481,610412.068 232658.178 385.375254913024,610403.487 232657.861 393.96209859711,610394.311 232656.044 403.316256418451,610383.735 232655.822 413.894574279224,610373.356 232656.599 424.302606119403,610359.587 232656.57 438.07162120207,610345.421 232654.942 452.330845707698,610334.746 232654.22 463.030221950211,610322.375 232653.395 475.428686406307,610300.616 232657.943 497.657885122763,610292.233 232659.124 506.123656740916,610284.05 232659.706 514.327318234372,610277.464 232659.892 520.915936795002,610271.177 232660.378 527.221686213318,610265.591 232659.867 532.831004028975,610259.803 232660.154 538.626108652756,610251.62 232661.135 546.867692086723,610243.836 232661.818 554.681590468218,610236.153 232661.802 562.364598503491,610227.772 232661.784 570.745608424561,610215.399 232662.058 583.121628023647,610205.719 232662.836 592.832831464125,610198.135 232663.519 600.447515621579,610185.261 232664.79 613.384089405171,610175.083 232665.268 623.573296190194,610165.504 232665.248 633.152306315953,610157.322 232665.43 641.336321077749,610146.746 232665.208 651.914638938522,610136.369 232665.386 662.293153821036,610113.217 232667.434 685.535533112759,610096.553 232668.398 702.227374426872,610073.702 232669.149 725.090686268668,610064.122 232670.327 734.742829804306,610056.537 232671.11 742.368128713434,610039.572 232673.071 759.446070368713,610024.303 232674.537 774.785268155239,610008.335 232677.1 790.957633652766,609994.36 232680.566 805.356012573512,609984.778 232682.343 815.101382744515,609977.391 232684.625 822.832822377346,609970.602 232686.907 829.995079691019,609965.01 232689.692 836.242207141137,609958.919 232692.975 843.161619146883,609953.824 232696.459 849.333911708401,609949.23 232699.046 854.606230229752,609943.938 232701.831 860.586314569434,609933.553 232706.603 872.015221592247,609928.959 232708.89 877.146999634257,609924.666 232710.879 881.878375727976,609919.373 232713.464 887.76887622425,609914.48 232715.95 893.257189022581,609908.688 232719.034 899.819065532172,609905.393 232720.525 903.43570439062,609901.598 232722.814 907.867577798319,609898.003 232724.305 911.759501743102,609894.009 232726.094 916.135860275022,609890.911 232728.884 920.304992675781) LINESTRING (610441.234844669 232648.970316106,610437.442844669 232649.261316106,610436.467533871 232649.38462585,610434.882853218 232649.664708942,610428.726951354 232649.23524681,610428.051878961 232649.211021797,610419.250831236 232649.192646084,610413.635172427 232648.301564885,610412.437168994 232648.184816611,610404.650104669 232647.897146247,610396.253449545 232646.234469442,610394.520862999 232646.046202366,610383.944862999 232645.824202366,610382.988462 232645.849904883,610372.992726062 232646.5982127,610360.170226137 232646.5712062,610346.562715787 232645.007389536,610346.095804935 232644.964794064,610335.420804936 232644.242794064,610323.040404234 232643.417162699,610320.329044609 232643.606534005,610298.893628239 232648.086899539,610291.179515034 232649.173666531,610283.553901563 232649.716023495,610277.181695311 232649.895985591,610276.693275662 232649.921745039,610271.247628824 232650.342706445,610266.501983195 232649.908580968,610265.095754967 232649.879270911,610259.307754967 232650.166270911,610258.61269609 232650.225093887,610250.58754588 232651.187170431,610243.40851384 232651.817088067,610236.174150784 232651.802022362,610227.793477101 232651.784023063,610227.550604348 232651.786451102,610215.177604348 232652.060451102,610214.597864351 232652.090142574,610204.917864352 232652.868142574,610204.822049819 232652.876307215,610197.238049819 232653.559307215,610197.152515306 232653.567380844,610184.534714939 232654.81308725,610174.858743135 232655.267509977,610165.524878961 232655.248021797,610165.281615509 232655.250473049,610157.315736329 232655.427665668,610146.955862999 232655.210202366,610146.574492032 232655.209470857,610136.197492032 232655.387470857,610135.487851958 232655.424896741,610112.487493449 232657.459482705,610096.099929355 232658.407491093,610073.373526522 232659.154396197,610072.481547079 232659.22375468,610062.998244964 232660.389864272,610055.51015616 232661.162860123,610055.388736446 232661.176144212,610038.519909445 232663.126027487,610023.347279646 232664.582774837,610022.718199605 232664.663378187,610006.750199605 232667.226378187,610005.927787266 232667.394057137,609992.24279121 232670.788132009,609982.954572081 232672.510649791,609981.826418475 232672.788515896,609974.439418475 232675.070515896,609974.204857226 232675.146155438,609967.415857226 232677.428155438,609966.14395605 232677.955695953,609960.55195605 232680.740695953,609960.265382521 232680.889238787,609954.174382521 232684.172238787,609953.274426198 232684.720377865,609948.538360987 232687.958935509,609944.447096938 232690.262831916,609939.518567813 232692.85654953,609929.377627295 232697.516402024,609929.096459959 232697.650947115,609924.627955868 232699.875472334,609920.462153745 232701.805539984,609920.277583261 232701.893355976,609914.984583261 232704.478355976,609914.843379877 232704.548701825,609909.950379877 232707.034701825,609909.780130179 232707.123266535,609904.27219258 232710.056015077,609901.270392284 232711.414341098,609900.228147082 232711.962039395,609897.074813538 232713.864010536,609894.171994186 232715.067933667,609893.915131105 232715.178701304,609889.921131105 232716.967701304,609887.316967702 232718.663205714,609884.218967702 232721.453205714) LINESTRING (609897.603032298 232736.314794286,609899.532288331 232734.57734292,609901.963212053 232733.488478989,609905.429005814 232732.051066333,609906.762852918 232731.376960605,609910.052879695 232729.392541293,609912.810607716 232728.144658902,609913.387869821 232727.860733465,609919.095169898 232724.821832664,609923.832295877 232722.415028008,609928.962580253 232719.909495208,609933.162846255 232717.963460016,609933.415540041 232717.842052885,609937.870004945 232715.6245167,609948.113372705 232710.917597976,609948.595119725 232710.680363585,609953.887119725 232707.895363585,609954.136754183 232707.75942432,609958.730754183 232705.17242432,609959.468573802 232704.713622135,609964.12805569 232701.527432754,609969.612529551 232698.571345464,609974.442296672 232696.165962518,609980.460328229 232694.143109666,609987.173589478 232692.069241767,609996.183427919 232690.398350209,609996.767212734 232690.271942863,610010.334528125 232686.90705448,610025.57453903 232684.46090293,610040.527720354 232683.025225163,610040.720263554 232683.004855788,610057.624594263 232681.050868607,610065.14884384 232680.274139877,610065.342452921 232680.25224532,610074.478016082 232679.128895278,610096.881473478 232678.392603803,610097.130527008 232678.381309199,610113.794527008 232677.417309199,610114.098148042 232677.395103259,610136.895993321 232675.378431389,610146.726815509 232675.209800151,610157.112137001 232675.427797634,610157.544384491 232675.427526951,610165.604767675 232675.248232189,610175.062121039 232675.267978203,610175.552123332 232675.256990104,610185.730123332 232674.778990104,610186.243484694 232674.741619156,610199.074734778 232673.474839689,610206.568062544 232672.800005451,610215.910696729 232672.049120182,610227.87197402 232671.784237779,610236.131522899 232671.801976937,610243.815174847 232671.817978316,610244.710082564 232671.779725738,610252.494082564 232671.096725738,610252.81030391 232671.063906113,610260.646800885 232670.124445826,610265.382097721 232669.889644479,610270.266016805 232670.336419032,610271.947724338 232670.348254961,610277.99082958 232669.881108604,610284.332304689 232669.702014409,610284.75943852 232669.680803105,610292.94243852 232669.098803105,610293.628027798 232669.026216794,610302.011027798 232667.845216794,610302.661955391 232667.731465995,610323.078263685 232663.464111332,610334.075895279 232664.197523834,610344.51224023 232664.903382481,610358.445284213 232666.504610464,610359.565938241 232666.56997782,610373.334938241 232666.59897782,610374.102538 232666.571095117,610384.003952975 232665.829848423,610393.22660968 232666.023440498,610401.544550455 232667.670530558,610403.117831006 232667.854183389,610411.096309725 232668.148924999,610416.884827573 232669.067435115,610418.431121039 232669.190978203,610427.672175505 232669.210272607,610434.717048646 232669.70175319,610437.153466129 232669.57337415,610439.463844966 232669.165028123,610442.765155331 232668.911683894) SAFE test 16595 line 9 LINESTRING(609236.013 232629.856 1666.56005859375,609235.928 232629.829 1666.64923781753,609231.639 232629.021 1671.01339088307,609228.347 232628.814 1674.31167145913,609224.557 232628.007 1678.18637616007,609220.467 232627.2 1682.35495141766,609217.674 232626.495 1685.23536143201,609207.498 232625.674 1695.44374269009,609204.209 232623.371 1699.45861121687,609200.72 232621.865 1703.25850877845,609198.125 232621.86 1705.85333968766,609195.928 232623.353 1708.50944817875,609193.829 232625.446 1711.4734441922,609191.533 232626.44 1713.97520617731,609188.538 232627.432 1717.13000488281) LINESTRING (609239.040408113 232620.325270746,609238.955408113 232620.298270746,609237.779323358 232620.001864007,609233.490323358 232619.193864007,609232.266557671 232619.040710857,609229.709425503 232618.879919132,609226.639599785 232618.226264949,609226.492783494 232618.196151807,609222.660101445 232617.439923344,609220.121404189 232616.799113618,609218.478187225 232616.527388305,609211.009166319 232615.924787463,609209.944793454 232615.179499926,609208.171999131 232614.189788866,609204.682999131 232612.683788866,609200.739267787 232611.865018562,609198.144267787 232611.860018562,609195.193924692 232612.299205183,609192.504371364 232613.589054846,609190.307371364 232615.082054847,609188.867060224 232616.271818638,609188.113035068 232617.02368841,609187.967418884 232617.086729563,609185.393794577 232617.939162055) LINESTRING (609191.682205423 232636.924837945,609194.677205423 232635.932837945,609195.505933443 232635.616916686,609197.801933443 232634.622916686,609200.36230491 232632.885270986,609201.762206546 232633.865500074,609206.693812775 232635.641611695,609216.036850676 232636.395408287,609218.019595811 232636.895886382,609218.531216506 232637.010848193,609222.547695529 232637.803341731,609226.264400215 232638.594735051,609227.719442329 232638.794289143,609230.394828341 232638.962516635,609234.076676642 232639.656135993) SAFE test 16595 line 10 LINESTRING(609556.816 232752.246 1311.71997070312,609554.023 232751.741 1314.55825551404,609552.028 232751.238 1316.61568765014,609548.24 232749.132 1320.94975605225,609543.951 232748.624 1325.26873210332,609539.563 232747.117 1329.90829645542,609535.076 232745.11 1334.8236985768,609531.486 232743.804 1338.64387028083,609526.402 232740.997 1344.45130079578,609522.115 232738.99 1349.1848386819,609516.832 232735.883 1355.3137436277,609512.745 232733.078 1360.27071380478,609507.463 232729.272 1366.78109703898,609503.378 232725.968 1372.035009421,609497.597 232721.961 1379.06892213882,609493.01 232720.154 1383.99901116188,609488.225 232717.547 1389.44810511055,609483.641 232714.042 1395.21854927843,609476.564 232709.233 1403.77485039758,609470.182 232706.923 1410.56204037313,609463.103 232704.112 1418.17872377157,609457.322 232700.005 1425.27007955011,609453.237 232696.201 1430.85197792229,609447.459 232691.096 1438.56211479659,609442.676 232687.091 1444.80046791227,609439.087 232684.786 1449.0659005855,609431.708 232682.174 1456.89354924909,609427.218 232682.165 1461.38355455381,609422.329 232681.955 1466.27705855098,609415.049 232679.942 1473.83023500769,609407.966 232679.128 1480.95984936457,609401.881 232677.817 1487.18446837927,609395.001 232675.505 1494.44254366266,609387.92 232673.193 1501.89142365735,609382.334 232671.983 1507.60696754556,609376.25 232670.472 1513.87578816551,609370.465 232669.362 1519.7663117057,609365.876 232669.152 1524.36011035991,609362.083 232669.643 1528.18475489143,609358.49 232670.135 1531.81128094744,609354.999 232669.828 1535.31575090389,609351.907 232669.123 1538.48710272217,609350.41 232669.119 1539.98410682745,609346.121 232668.112 1544.38973253541,609342.331 232667.305 1548.264693716,609338.041 232666.796 1552.58478053391,609332.954 232665.987 1557.73570337269,609329.163 232665.479 1561.56058517342,609320.484 232664.462 1570.2989605161,609316.693 232664.454 1574.08996582031) LINESTRING (609558.595242098 232742.405558061,609556.137468596 232741.961170084,609555.742611766 232741.861614703,609553.099171711 232740.391951357,609549.416203743 232739.201413675,609546.188438897 232738.819109049,609543.236011108 232737.805137153,609539.159080671 232735.981558061,609538.494691673 232735.712524422,609535.637140376 232734.672980691,609531.235458911 232732.242705342,609530.641954105 232731.940356627,609526.779934801 232730.132315399,609522.202604346 232727.440328701,609518.498122056 232724.897859207,609513.535049771 232721.321665887,609509.666641732 232718.192848222,609509.074682409 232717.749252557,609503.293682409 232713.742252557,609501.262245184 232712.656916072,609497.250936022 232711.076703372,609493.686450464 232709.134673309,609489.715050797 232706.09807736,609489.261414655 232705.770909437,609482.184414656 232700.961909437,609479.967467557 232699.830000022,609473.729860015 232697.572263666,609467.912823063 232695.262376553,609463.652796167 232692.235922573,609460.051880169 232688.882707284,609459.858148054 232688.706975817,609454.080148054 232683.601975817,609453.8789583 232683.428918715,609449.095958299 232679.423918715,609448.079902181 232678.676854695,609444.490902181 232676.371854695,609442.423886913 232675.359166718,609435.044886913 232672.747166718,609431.728044503 232672.174020089,609427.442686303 232672.165430284,609423.896195667 232672.013095853,609417.71410169 232670.303678934,609416.190715787 232670.007389536,609409.593821537 232669.249254294,609404.535095568 232668.1593628,609398.186414861 232666.025910795,609398.104819754 232665.998880764,609391.023819754 232663.686880764,609390.037032119 232663.419659987,609384.598199209 232662.241538286,609378.660339745 232660.766833216,609378.13438103 232660.651149317,609372.34938103 232659.541149317,609370.922137637 232659.372454205,609366.333137637 232659.162454205,609364.592221626 232659.234746696,609360.799221626 232659.725746696,609360.726330876 232659.735454952,609358.24664254 232660.075005929,609356.555760202 232659.926309029,609354.130024934 232659.373222559,609351.933720011 232659.123035698,609351.58136501 232659.122094202,609348.406712027 232658.37672802,609348.203599785 232658.331264949,609344.413599785 232657.524264949,609343.509216088 232657.374652229,609339.41594297 232656.888993484,609334.524591049 232656.111107951,609334.282144518 232656.07559081,609330.491144518 232655.56759081,609330.326830939 232655.546956024,609321.64783094 232654.529956024,609320.505102564 232654.462022266,609316.714102564 232654.454022266) LINESTRING (609316.671897436 232674.453977734,609319.889585883 232674.460767897,609327.916926837 232675.401406882,609331.504414627 232675.882135924,609336.470408951 232676.671892049,609336.862783912 232676.726347771,609340.697159799 232677.181288873,609343.936607515 232677.871060458,609348.124287973 232678.85427198,609350.383279989 232679.118964302,609350.768216291 232679.119992856,609352.775975066 232679.577777441,609354.122976665 232679.789555256,609357.613976665 232680.096555256,609359.846669124 232680.042545048,609363.403241598 232679.555533176,609366.292481478 232679.181524006,609369.288163833 232679.318611236,609374.101081564 232680.242092425,609379.923660255 232681.688166784,609380.216967881 232681.756340013,609385.302735435 232682.857983181,609391.856324606 232684.997779561,609398.695585139 232687.296089205,609399.774848745 232687.592690609,609405.859848745 232688.903690609,609406.824284213 232689.062610464,609413.134060973 232689.787749286,609419.66389831 232691.593321066,609421.899860009 232691.9457877,609426.788860009 232692.1557877,609427.197955497 232692.164979911,609429.980606116 232692.170557607,609434.657941588 232693.826229141,609436.74046898 232695.163711905,609440.93729858 232698.677887641,609446.517836682 232703.608425373,609450.507119831 232707.323292716,609451.530446551 232708.15717202,609457.311446551 232712.26417202,609459.412420351 232713.406063797,609466.491420351 232716.217063797,609466.778532443 232716.325999978,609471.981068443 232718.209086496,609477.789190799 232722.155852133,609482.150949203 232725.49092264,609483.440722343 232726.328269117,609488.225722343 232728.935269117,609489.344754816 232729.458083928,609492.853124198 232730.840168836,609497.377128844 232733.975904282,609501.174358268 232737.047151778,609501.616958817 232737.38518695,609506.898958817 232741.19118695,609507.086306123 232741.322948975,609511.173306123 232744.127948975,609511.762583103 232744.502803497,609517.045583103 232747.609803497,609517.875045895 232748.046643373,609521.860255986 232749.912357544,609526.652541089 232752.558294658,609528.067308327 232753.201475578,609531.320289694 232754.384872142,609535.479919329 232756.245441939,609536.314852892 232756.574776714,609540.702852892 232758.081776714,609542.774796257 232758.554586325,609545.104889589 232758.830568468,609547.168828289 232759.978048643,609549.583206925 232760.934545097,609551.578206925 232761.437545097,609552.243757902 232761.581441939,609555.036757902 232762.086441939) SAFE test 16595 line 11 LINESTRING(610766.635 232685.492 0,610763.548 232681.99 4.66837115191394,610762.554 232679.491 7.35780893128456,610760.764 232676.092 11.1993424391044,610758.774 232672.293 15.4880017955653,610756.485 232668.992 19.50499171887,610754.192 232667.49 22.2461398481215,610749.704 232666.481 26.8461765691108,610745.313 232666.672 31.2413403894991,610741.022 232667.262 35.5727236603881,610735.432 232668.449 41.2873752805263,610730.942 232668.439 45.7773983875674,610726.055 232667.43 50.7674868417649,610722.566 232665.126 54.9485907891251,610718.778 232663.12 59.2349736431465,610716.486 232661.618 61.9752853119838,610713.693 232660.613 64.943604867428,610709.106 232659.305 69.7134638086124,610704.815 232659.296 74.0044846876773,610701.72 232660.588 77.3583405253578,610698.427 232661.08 80.6879008738046,610697.427 232662.077 82.0999984741211) LINESTRING (610774.136565799 232678.879397595,610772.198026247 232676.68025101,610771.845929644 232675.795050394,610771.402052621 232674.831390058,610769.617171836 232671.442110847,610767.632269713 232667.652842925,610766.991617828 232666.594688213,610764.702617829 232663.293688213,610761.964470404 232660.62686975,610759.671470404 232659.12486975,610756.385466599 232657.733530132,610751.897466599 232656.724530132,610749.269430284 232656.490447004,610744.878430284 232656.681447004,610743.950844919 232656.765207707,610739.659844919 232657.355207707,610738.944877467 232657.480100288,610734.393002697 232658.446661173,610731.974575859 232658.441274922,610729.960584503 232658.025453912,610728.076521077 232656.78129165,610727.245949078 232656.288688382,610723.869568034 232654.50066822,610721.967142973 232653.253965584,610719.871763092 232652.208610632,610717.078763092 232651.203610632,610716.435226769 232650.996337775,610711.848226769 232649.688337775,610709.126974086 232649.305021996,610704.835974086 232649.296021996,610700.962707274 232650.067791032,610699.013902576 232650.881314673,610696.949323489 232651.189778965,610693.932912854 232652.146737398,610691.366562691 232653.998317643,610690.366562691 232654.995317643) LINESTRING (610703.197676511 232670.478221035,610705.572292726 232669.816208968,610706.80839071 232669.30020296,610707.697812474 232669.302068445,610710.625499676 232670.136909269,610711.990926434 232670.628228242,610713.296857028 232671.484034416,610714.098050923 232671.957311618,610717.4588588 232673.737084744,610720.544478923 232675.77470835,610724.032986364 232677.223439684,610728.919986364 232678.232439685,610730.91972834 232678.438975199,610735.40972834 232678.448975199,610737.509122533 232678.230899712,610742.743906457 232677.119327527,610746.213314799 232676.642293986,610748.80897506 232676.52938779,610749.678147326 232676.724796617,610750.203270484 232677.482084316,610751.905730287 232680.732157075,610751.915947379 232680.751609942,610753.458412337 232683.680569937,610754.256070356 232685.685949606,610756.046434201 232688.602602405,610759.133434201 232692.104602405) SAFE test 16595 line 12 LINESTRING(609780.059 232789.469 1051.80004882812,609775.468 232790.458 1056.49630718269,609773.97 232791.554 1058.35241402419,609772.968 232794.048 1061.04013736407,609771.167 232796.841 1064.36341433737,609768.668 232799.832 1068.26093876405,609767.367 232801.926 1070.72615332611,609765.368 232804.419 1073.92158615777,609762.566 232809.206 1079.4682781955,609758.265 232815.589 1087.16501693724,609752.669 232820.87 1094.85934440624,609749.076 232821.861 1098.58645825157,609746.281 232822.155 1101.39684268156,609741.692 232821.846 1105.99617582748,609736.203 232822.333 1111.50666761276,609729.618 232822.12 1118.09502802359,609722.938 232819.309 1125.34228879232,609718.949 232817.803 1129.60605424477,609714.663 232815.197 1134.62206797628,609709.578 232813.189 1140.08910838352,609704.791 232811.182 1145.27974750999,609701 232810.874 1149.08319042856,609698.207 232810.369 1151.92144158919,609696.113 232809.865 1154.07521370549,609693.82 232808.861 1156.57835294603,609691.03 232806.559 1160.19539208357,609688.837 232805.256 1162.74625329872,609683.95 232803.747 1167.86085850523,609679.96 232802.94 1171.93159905746,609676.368 232803.232 1175.53540240213,609674.073 232803.227 1177.83037874053,609670.082 232803.219 1181.82133613931,609667.486 232804.012 1184.53571969703,609664.193 232804.205 1187.83432879566,609660.403 232803.398 1191.70924403516,609656.912 232802.392 1195.34225686,609653.621 232801.386 1198.78353810281,609650.531 232799.382 1202.46644075248,609648.539 232797.581 1205.15186102975,609644.952 232793.978 1210.23590689137,609643.458 232792.277 1212.49982097676,609642.165 232790.177 1214.96593020487,609640.671 232788.676 1217.08369393832,609638.179 232787.172 1219.99434078967,609636.084 232786.669 1222.1488514645,609632.593 232786.162 1225.67643056876,609630.298 232785.857 1227.99157938358,609627.008 232784.353 1231.6090072061,609624.914 232783.549 1233.85202400835,609624.315 232783.037 1234.64001464844) LINESTRING (609777.95309487 232779.693256367,609773.36209487 232780.682256367,609769.563242393 232782.387446264,609768.065242393 232783.483446264,609764.690888825 232787.825985005,609764.045442382 232789.432515373,609763.097246367 232790.902982596,609760.993995332 232793.420319069,609760.173918092 232794.554635835,609759.189759254 232796.138670121,609757.566338967 232798.163275811,609756.737740284 232799.367404486,609754.095859976 232803.880852394,609750.593145291 232809.079138335,609747.613614536 232811.890950686,609747.210955152 232812.002009815,609746.092469002 232812.119660952,609742.363828004 232811.868593166,609740.808242538 232811.885127912,609735.921742667 232812.318672353,609731.790928203 232812.185056031,609726.816657657 232810.091841285,609726.470044423 232809.953538376,609723.350345279 232808.775732683,609719.858294684 232806.652474668,609718.33587304 232805.895924598,609713.348111958 232803.926322975,609708.65752683 232801.959745922,609705.600782347 232801.2148413,609702.297613224 232800.946475146,609700.268339052 232800.579563776,609699.313345089 232800.349708495,609699.108479911 232800.260007388,609697.394240793 232798.84560651,609696.138013976 232797.962012549,609693.945013976 232796.659012549,609691.787336927 232795.701131502,609686.900336927 232794.192131502,609685.932415126 232793.945467963,609681.942415126 232793.138467963,609679.149755188 232792.972878884,609675.973086275 232793.231115889,609674.09478644 232793.227023732,609670.102045061 232793.21902009,609667.160563419 232793.655255529,609665.707689518 232794.099064852,609664.955398053 232794.143156032,609662.831848245 232793.690991204,609659.758338898 232792.80529931,609657.885562047 232792.23282483,609656.643804825 232791.427491021,609655.440404315 232790.339476804,609652.259240652 232787.144123395,609651.529750824 232786.313559675,609650.680329902 232784.933989732,609649.252575156 232783.122478159,609647.758575156 232781.621478159,609645.838170739 232780.114437844,609643.34617074 232778.610437844,609640.513607232 232777.448337672,609638.418607232 232776.945337672,609637.521228067 232776.772820157,609634.030228066 232776.265820157,609633.910393205 232776.249156052,609633.096617542 232776.141007216,609631.165597603 232775.258255244,609630.592412751 232775.017477238) LINESTRING (609617.817543303 232790.638516722,609618.416543303 232791.150516722,609621.329587249 232792.884522762,609623.133250702 232793.577046838,609626.140402397 232794.951744756,609628.980606795 232795.769843948,609631.21563896 232796.066874367,609634.194137018 232796.499443406,609634.335136482 232796.533296738,609634.942670098 232797.520010268,609635.944559288 232798.876106657,609637.438559288 232800.577106657,609637.865214396 232801.033315004,609641.452214396 232804.636315004,609641.83249982 232804.998739233,609643.82449982 232806.799739233,609645.089708787 232807.772014895,609648.179708787 232809.776014895,609650.69770728 232810.949177279,609653.98870728 232811.955177279,609654.142983514 232812.000982657,609657.633983514 232813.006982657,609658.320400215 232813.178735051,609662.110400215 232813.985735051,609664.778087673 232814.187868947,609668.071087673 232813.994868947,609670.407436581 232813.575744471,609671.565490603 232813.221993762,609674.052084217 232813.226978164,609676.34621356 232813.231976268,609677.178244812 232813.199121116,609679.3622187 232813.021582036,609681.477456736 232813.449400857,609684.750893787 232814.460167485,609685.259845378 232814.762567814,609687.455759207 232816.57439349,609689.809087424 232818.021381013,609692.102087424 232819.025381013,609693.772949241 232819.58735375,609695.866949241 232820.09135375,609696.427757902 232820.209441939,609699.220757902 232820.714441939,609700.190217652 232820.8411587,609702.393516261 232821.020165815,609705.71147317 232822.411254078,609705.90512696 232822.490075402,609710.19664521 232824.184739836,609713.753705316 232826.347525332,609715.416955577 232827.158461624,609719.231358415 232828.59854452,609725.739342343 232831.337158715,609729.294706669 232832.114772705,609735.879706669 232832.327772705,609737.086757462 232832.293872088,609741.79860975 232831.875822887,609745.609171996 232832.132406834,609747.327106959 232832.100132489,609750.122106959 232831.806132489,609751.734860105 232831.501044758,609755.327860105 232830.510044758,609759.532410793 232828.142798106,609765.128410793 232822.861798106,609766.558017675 232821.177010186,609770.859017675 232814.794010186,609771.196259716 232814.257595514,609773.628079558 232810.103019645,609775.168661033 232808.181724189,609775.861081908 232807.203364165,609776.791833851 232805.70528994,609778.841004668 232803.252680931,609779.571248571 232802.260280944,609781.372248571 232799.467280944,609781.402393726 232799.409004966,609782.16490513 232799.244743633) SAFE test 16595 line 13 LINESTRING(609890.911 232728.884 920.304992675781,609887.614 232731.673 924.623392735533,609884.315 232735.661 929.799040347982,609881.017 232738.75 934.317730396102,609877.22 232742.237 939.472937755411,609872.626 232745.024 944.846202250726,609868.33 232748.11 950.13569991747,609864.233 232751.897 955.714815088414,609858.64 232755.68 962.467027245764,609854.144 232758.966 968.035829722215,609849.249 232762.451 974.044653050655,609844.755 232765.038 979.23005442278,609839.861 232768.024 984.963043695717,609834.867 232771.309 990.940582639761,609830.772 232773.597 995.631402495782,609827.974 232776.688 999.800688324114,609824.975 232779.677 1004.0348325007,609822.678 232781.17 1006.77439400943,609818.383 232783.758 1011.78882972072,609813.99 232785.546 1016.5317413734,609809.498 232787.235 1021.33076196218,609805.703 232788.824 1025.44498230272,609802.111 232789.017 1029.04214900424,609799.118 232789.01 1032.03514507878,609796.324 232788.805 1034.83664422788,609794.03 232788.3 1037.18556235058,609790.44 232787.494 1040.86491371185,609787.946 232787.189 1043.37748409059,609785.351 232787.184 1045.97247840681,609783.155 232787.678 1048.2233473495,609780.059 232789.469 1051.80004882812) LINESTRING (609884.452615701 232721.249258862,609881.155615701 232724.038258862,609879.908715249 232725.298944234,609877.014957404 232728.797066782,609874.21682031 232731.417881058,609871.185924108 232734.201324581,609867.439229974 232736.474297274,609866.791821205 232736.902278644,609862.495821205 232739.988278644,609861.542212762 232740.766571345,609858.002175872 232744.038750916,609853.037414353 232747.396822224,609852.739293848 232747.606483609,609848.293529951 232750.855767454,609843.842071297 232754.024987762,609839.76601391 232756.37139641,609839.546568979 232756.501475748,609834.652568979 232759.487475748,609834.36544951 232759.669424917,609829.67364274 232762.75564543,609825.894407571 232764.867218096,609823.358290268 232766.886045671,609820.732741989 232769.786535209,609818.652774555 232771.859567108,609817.371044332 232772.692663852,609813.890354572 232774.789992164,609810.344703815 232776.23311157,609805.978546115 232777.874794642,609805.635801482 232778.010932426,609803.437715418 232778.931290464,609801.854226933 232779.016372112,609799.496042883 232779.010856813,609797.772269779 232778.884380977,609796.200265362 232778.53832072,609792.630594644 232777.736884898,609791.653891433 232777.567950051,609789.159891433 232777.262950051,609787.965267787 232777.189018562,609785.370267787 232777.184018562,609783.156300914 232777.427807304,609780.960300914 232777.921807304,609778.147613268 232779.022014896,609775.051613268 232780.813014896) LINESTRING (609785.066386732 232798.124985104,609786.688527233 232797.186595686,609787.327204186 232797.187826278,609788.733565582 232797.359815141,609791.839405356 232798.057115102,609791.880082761 232798.066158706,609794.174082761 232798.571158706,609795.592251891 232798.7781913,609798.386251891 232798.9831913,609799.094612159 232799.00997265,609802.087612159 232799.01697265,609802.647531206 232799.00259634,609806.239531206 232798.80959634,609809.565198518 232798.048067574,609813.190081577 232796.530297039,609817.509453885 232794.906205358,609817.759820936 232794.808205467,609822.152820937 232793.020205467,609823.544078288 232792.323236185,609827.839078288 232789.735236185,609828.127755203 232789.554519559,609830.424755203 232788.061519559,609832.034249237 232786.759866666,609835.033249237 232783.770866666,609835.387709732 232783.398954329,609837.083445751 232781.52564481,609839.744592429 232780.038781904,609840.36255049 232779.663575083,609845.214537166 232776.471989934,609849.854538208 232773.640963553,609854.23798609 232771.11760359,609855.048780935 232770.59732071,609859.943780935 232767.11232071,609860.044706152 232767.039516391,609864.393556566 232763.861063886,609869.835585647 232760.180177776,609871.020787238 232759.240428655,609874.664978467 232755.871975595,609878.144784405 232753.372282596,609882.406770026 232750.786702726,609883.984007045 232749.602338328,609887.781007045 232746.115338328,609887.853024307 232746.048545861,609891.151024307 232742.959545861,609892.020284751 232742.035055766,609894.751940312 232738.732890752,609897.369384299 232736.518741138) SAFE test 16595 line 14 LINESTRING(609101.253 232552.646 1843.09997558594,609099.76 232550.645 1845.59684261421,609098.464 232549.644 1847.23457706256,609096.172 232548.041 1850.03180752373,609093.181 232546.537 1853.38000488281) LINESTRING (609109.26787555 232546.665885459,609107.77487555 232544.664885459,609105.872736883 232542.730807192,609104.576736883 232541.729807192,609104.195263585 232541.44932992,609101.903263585 232539.84632992,609100.664435969 232539.106906926,609097.673435969 232537.602906926) LINESTRING (609088.688564031 232555.471093074,609091.033411058 232556.650180313,609092.538678781 232557.702948271,609092.56380557 232557.722355613,609093.23812445 232558.626114541) SAFE test 16595 line 15 LINESTRING(608988.587 232509.148 1974.06005859375,608987.977 232508.565 1974.90388095372,608983.194 232504.16 1981.4064893125,608977.911 232501.153 1987.48551772014,608973.125 232499.345 1992.60180487824,608968.038 232497.836 1997.90807621276,608961.654 232497.024 2004.34372257249,608955.371 232495.313 2010.85574373215,608947.989 232493.999 2018.35402654017,608940.407 232493.184 2025.9799561211,608936.316 232493.475 2030.08142860374,608928.229 232496.454 2038.69995117188) LINESTRING (608995.496265997 232501.918750842,608994.886265997 232501.335750842,608994.751429103 232501.209246447,608989.968429103 232496.804246447,608988.140678015 232495.469178599,608982.857678015 232492.462178599,608981.444929665 232491.798250344,608976.658929665 232489.990250344,608975.968899032 232489.75791294,608970.881899031 232488.24891294,608969.299764328 232487.915921836,608963.608122601 232487.19198495,608957.998535509 232485.664370193,608957.123459282 232485.467753103,608949.741459282 232484.153753103,608949.057757574 232484.056276166,608941.475757574 232483.241276166,608939.697475209 232483.209203031,608935.606475209 232483.500203031,608932.859376587 232484.091410358,608924.772376587 232487.070410358) LINESTRING (608931.685623414 232505.837589642,608938.441022454 232503.349110139,608940.225951827 232503.222144985,608946.57670759 232503.904796785,608953.176589554 232505.07957935,608959.026464492 232506.672629807,608960.392235672 232506.944078164,608965.971664647 232507.653742376,608969.931853751 232508.828486893,608973.644707414 232510.23108602,608977.257412405 232512.287380532,608981.134567689 232515.858124631,608981.677734003 232516.377249158) SAFE test 16595 line 16 LINESTRING(608589.032 232404.957 2403.88989257812,608580.657 232400.945 2413.17630313634,608575.574 232397.639 2419.23986669253,608569.992 232393.732 2426.05336241927,608563.913 232389.425 2433.50352414116,608557.634 232385.117 2441.11832180329,608551.552 232382.108 2447.90397970466,608545.173 232378.2 2455.38492404065,608539.891 232374.394 2461.89533727516,608524.24 232365.472 2479.91084001694,608507.993 232354.852 2499.32094711831,608501.41 232353.34 2506.07538106635,608498.916 232353.335 2508.56939550729,608497.618 232354.031 2510.04222828865,608496.618 232355.028 2511.45432746263,608495.319 232356.623 2513.51137826287,608494.318 232358.618 2515.74343195181,608492.517 232361.411 2519.06676363997,608490.515 232365.202 2523.35393333254,608488.213 232369.791 2528.48796920112,608485.911 232374.08 2533.35571037761,608484.109 232378.071 2537.73468628396,608481.607 232382.66 2542.96145694711,608475.505 232392.034 2554.14659109725,608471.906 232396.621 2559.97699648898,608468.404 232402.206 2566.56915528426,608464.803 232407.991 2573.38338870365,608459.501 232416.668 2583.55208158137,608454.896 232425.746 2593.73131988617,608451.091 232433.828 2602.6642562657,608447.286 232442.209 2611.86859364442,608443.983 232448.793 2619.23468319474,608440.379 232456.375 2627.62968604655,608436.378 232462.159 2634.66268192299,608432.278 232467.743 2641.59026583592,608422.885 232476.112 2654.17079868258,608418.591 232478.4 2659.03634685311,608413.001 232480.386 2664.96867878049,608408.21 232481.375 2669.86071137999,608402.62 232482.661 2675.59675049931,608397.53 232483.449 2680.74740527242,608392.939 232484.139 2685.38998472464,608388.146 232486.425 2690.7002444374,608385.633 232497.605 2702.15923923827,608384.829 232501.199 2705.84208522401,608383.827 232504.193 2708.99931745662,608382.324 232507.785 2712.89310579697,608381.024 232509.48 2715.02923769884,608376.43 232512.267 2720.40254425147,608372.137 232514.055 2725.05302342309,608368.044 232515.045 2729.26406641519,608363.752 232516.135 2733.69232931061,608360.458 232517.126 2737.1321848989,608357.463 232517.819 2740.20632631654,608354.668 232518.812 2743.17249228029,608352.372 232519.606 2745.60191538601,608349.875 232521.099 2748.51123180031,608348.076 232522.893 2751.05187853029,608346.776 232524.688 2753.26819577766,608345.775 232526.483 2755.32344708559,608344.272 232530.475 2759.58903152118,608343.27 232533.269 2762.55728127779,608341.968 232535.863 2765.45971193092,608340.168 232538.356 2768.53462989599,608337.671 232540.348 2771.72886691719,608334.375 232541.939 2775.38878471431,608331.779 232542.932 2778.16823131617,608329.283 232544.425 2781.07668949199,608326.985 232546.217 2783.99081581232,608323.886 232549.706 2788.65740843004,608319.386 232555.789 2796.22400091953,608318.585 232557.585 2798.1905324451,608318.082 232560.38 2801.030443532,608317.579 232562.376 2803.08885482159,608316.279 232564.471 2805.55443202886,608315.278 232566.166 2807.52294804348,608313.978 232568.461 2810.16057531128,608313.474 232571.056 2812.80407561166,608313.468 232575.051 2816.79909522083,608313.462 232578.846 2820.59411431131,608312.955 232583.439 2825.21502974582,608311.452 232587.73 2829.76165995984,608309.95 232590.823 2833.20008145728,608307.351 232593.813 2837.161775498,608304.852 232596.604 2840.90807875851,608303.352 232598.698 2843.4839060368,608302.052 232600.693 2845.86509646852,608299.753 232603.185 2849.25560556301,608297.954 232604.979 2851.79625229297,608295.456 232606.971 2854.99127110131,608292.96 232608.264 2857.80230734227,608290.364 232609.057 2860.51673558994,608287.869 232609.551 2863.06018008786,608285.274 232610.045 2865.70179205077,608282.778 232611.039 2868.38844546662,608280.98 232612.033 2870.44292153487,608279.481 232613.329 2872.42449835394,608278.681 232614.625 2873.94753267372,608277.68 232616.321 2875.91690981522,608276.68 232618.116 2877.97167426005,608275.38 232619.911 2880.18799150742,608273.881 232621.406 2882.30507910349,608271.882 232623.499 2885.19933433379,608269.784 232625.192 2887.89524010994,608267.786 232626.487 2890.27622139187,608263.188 232631.77 2897.2799392539,608260.186 232636.857 2903.18670121015,608258.683 232640.649 2907.26572055381,608257.381 232643.742 2910.62160168299,608255.378 232648.032 2915.35618492689,608253.777 232650.825 2918.57552156121,608253.075 232653.62 2921.45734247769,608252.272 232656.115 2924.07838920453,608252.069 232658.411 2926.38335453431,608252.263 232662.007 2929.98459738374,608252.557 232665.303 2933.29369617281,608253.249 232669.1 2937.15325387188,608254.041 232672.896 2941.03101014288,608255.032 232676.893 2945.14904586687,608255.325 232680.789 2949.05606268529,608256.017 232684.785 2953.11155332869,608256.509 232689.08 2957.43465757359,608257.002 232692.876 2961.26255200685,608257.294 232697.271 2965.66725809213,608256.989 232700.766 2969.17555441143,608256.783 232704.86 2973.27474933887,608255.476 232711.149 2979.69815046092,608250.172 232720.526 2990.4713311686,608246.573 232725.112 2996.3009498493,608244.573 232727.904 2999.73538622035,608242.074 232730.695 3003.48168948079,608238.975 232734.284 3008.2235131819,608235.677 232737.572 3012.88054141732,608231.58 232741.059 3018.26057829983,608228.083 232743.848 3022.73357296574,608224.789 232745.139 3026.27154012849,608219.199 232746.326 3031.98619811714,608212.61 232748.409 3038.8966373997,608208.018 232750.197 3043.82447583168,608205.521 232751.69 3046.73379224609,608202.924 232753.183 3049.72937663817,608201.724 232754.678 3051.64641935748,608200.724 232756.474 3053.70205744595,608199.423 232758.768 3056.33930783015,608198.122 232761.062 3058.97655821426,608196.821 232763.356 3061.61380859838,608195.322 232764.851 3063.73089619446,608193.324 232766.345 3066.22570822375,608191.526 232767.639 3068.4409457065,608190.227 232768.635 3070.07784437768,608189.028 232769.931 3071.84341526829,608188.228 232770.928 3073.12170371586,608186.728 232773.222 3075.86259641773,608185.925 232775.717 3078.48364314458,608184.722 232779.31 3082.27270194006,608183.419 232782.802 3085.99989633256,608181.915 232787.393 3090.83099077106,608180.113 232791.184 3095.02849219697,608178.313 232793.977 3098.35128206131,608177.013 232795.772 3100.56759930861,608175.812 232797.567 3102.72733569735,608174.512 232799.262 3104.8634675992,608174.212 232800.06 3105.71599882766,608173.51 232802.056 3107.831856538,608173.006 232805.351 3111.1651919566,608172.703 232807.447 3113.28298772398,608171.901 232809.942 3115.90372825528,608170.199 232813.734 3120.0601929343,608168.396 232817.824 3124.52998712031,608166.394 232821.815 3128.99498832314,608164.293 232825.106 3132.89947257462,608161.993 232828.397 3136.91454454058,608159.994 232830.49 3139.80879977085,608157.496 232832.482 3143.0038185791,608154.9 232833.975 3145.99853606348,608150.904 232836.763 3150.8710240841,608148.605 232839.055 3154.11736736311,608147.104 232841.848 3157.28816001153,608145.304 232844.64 3160.61010935497,608144.002 232847.434 3163.69259404173,608142.701 232849.928 3166.505545664,608140.699 232853.519 3170.61692168784,608138.899 232856.012 3173.6918396529,608137.1 232858.105 3176.45175044753,608133.796 232865.389 3184.45009750894,608133.293 232867.685 3186.80055847926,608131.791 232870.977 3190.41903426351,608129.489 232875.566 3195.55307013207,608127.987 232878.359 3198.72433628964,608125.982 232884.147 3204.84979567686,608125.98 232885.945 3206.64780358676,608126.672 232889.742 3210.50736128584,608128.258 232896.336 3217.28943912292,608128.454 232898.334 3219.29703730853,608129.244 232903.229 3224.25539498961,608129.737 232906.726 3227.78698844074,608129.232 232910.52 3231.61446434111,608128.23 232913.314 3234.58271409775,608127.128 232916.108 3237.58619677766,608126.923 232919.203 3240.68799025031,608126.62 232921.999 3243.50037087977,608125.417 232924.993 3246.72702916995,608123.618 232927.286 3249.64152985222,608121.319 232929.278 3252.68349220694,608118.322 232931.569 3256.45586514732,608115.526 232933.361 3259.77685346293,608112.729 232935.352 3263.21012873967,608101.843 232941.221 3275.57747742449,608098.246 232944.509 3280.45082663975,608095.748 232946.501 3283.64584544809,608092.651 232949.092 3287.68376734975,608089.354 232951.781 3291.93830220853,608085.359 232954.369 3296.69833795636,608081.765 232955.66 3300.51718952058,608078.77 232956.153 3303.55250559343,608075.676 232957.145 3306.8016562245,608074.178 232957.841 3308.45345543453,608072.679 232959.436 3310.6423049556,608071.38 232960.432 3312.27920362678,608069.082 232962.224 3315.193329947,608067.286 232962.42 3317) LINESTRING (608593.352307769 232395.938411375,608585.563959691 232392.207443914,608581.168863295 232389.348858691,608575.749714229 232385.555842676,608569.694104416 232381.265414733,608569.570427128 232381.179181769,608563.291427128 232376.871181769,608562.0683694 232376.15394427,608556.391006459 232373.345133831,608550.715735792 232369.868263198,608545.737041183 232366.28081305,608544.843420067 232365.706449397,608529.456732874 232356.935123403,608513.464396986 232346.481586927,608510.231538015 232345.10577265,608503.648538015 232343.59377265,608501.430048075 232343.340020096,608498.936048075 232343.335020096,608494.190394757 232344.522017809,608492.892394757 232345.218017809,608490.557562691 232346.949317643,608489.557562691 232347.946317643,608488.864151481 232348.713110203,608487.565151481 232350.308110203,608486.381009161 232352.138323895,608485.621696517 232353.651639304,608484.112751429 232355.991719056,608483.674302827 232356.741234835,608481.672302827 232360.532234835,608481.576579103 232360.718181106,608479.336543822 232365.183655436,608477.099898383 232369.35088927,608476.79696244 232369.96486703,608475.1494546 232373.613703763,608473.013660981 232377.531032666,608467.365061436 232386.208510892,608464.03859279 232390.44816404,608463.433781281 232391.308607886,608459.931781281 232396.893607886,608459.914384933 232396.921453093,608456.313384933 232402.706453093,608456.269914274 232402.776937477,608450.967914274 232411.453937477,608450.582813738 232412.144068767,608445.977813738 232421.222068767,608445.848548847 232421.486466266,608442.043548847 232429.568466266,608441.985475789 232429.69406376,608438.260695321 232437.898369961,608435.04470941 232444.308921352,608434.951402515 232444.499953662,608431.694681596 232451.351357104,608428.234041662 232456.354191739,608424.840107944 232460.976563906,608417.126253919 232467.849473981,608414.543698533 232469.225553795,608410.303499368 232470.732000225,608406.188337799 232471.581487762,608405.96802634 232471.629562395,608400.731576839 232472.834226806,608396.021914292 232473.563345488,608391.452751642 232474.250063464,608388.634109531 232475.113041987,608383.841109531 232477.399041987,608380.3291398 232480.188278376,608378.389435431 232484.231954672,608375.876435431 232495.411954673,608375.874205846 232495.421897468,608375.182592692 232498.513511492,608374.460405727 232500.671423441,608373.846832799 232502.13779334,608371.888502471 232503.325835705,608369.019876917 232504.520595195,608365.6930296 232505.325280962,608365.582528885 232505.352675204,608361.290528885 232506.442675204,608360.871054213 232506.5589804,608357.887677219 232507.45652946,608355.208703513 232508.076405513,608354.11523131 232508.396025692,608351.35991799 232509.374925917,608349.103722029 232510.155160931,608347.240190902 232511.023195366,608344.743190902 232512.516195366,608342.813779086 232514.018098983,608341.014779086 232515.812098983,608339.976948349 232517.027391562,608338.676948349 232518.822391562,608338.042241849 232519.81753097,608337.041241849 232521.61253097,608336.416340823 232522.959436688,608334.913340823 232526.951436688,608334.859009881 232527.099260523,608334.061237696 232529.323786954,608333.39064202 232530.659827802,608332.86171491 232531.39239185,608332.312588374 232531.830461557,608330.408055611 232532.749791541,608328.20633286 232533.591975936,608326.645676589 232534.350100982,608324.149676589 232535.843100982,608323.133620811 232536.539244767,608320.835620811 232538.331244767,608319.508424528 232539.576155234,608316.409424528 232543.065155234,608315.846683748 232543.758782651,608311.346683748 232549.841782651,608310.253134513 232551.715823354,608309.452134513 232553.511823354,608308.743105373 232555.813811092,608308.301063294 232558.270088646,608308.262128242 232558.424590365,608307.781971741 232559.198381033,608307.668420276 232559.385931975,608306.667420276 232561.080931975,608306.576965155 232561.237309238,608305.276965155 232563.532309238,608304.161432889 232566.55442974,608303.657432889 232569.14942974,608303.474011278 232571.040981243,608303.468011873 232575.035585149,608303.462869931 232578.287863431,608303.14042713 232581.208928101,608302.204758354 232583.88022199,608301.533394851 232585.26273019,608299.851922758 232587.197167111,608297.401960968 232589.933398946,608296.722542197 232590.780606159,608295.222542197 232592.874606159,608294.973805985 232593.238525204,608294.132429228 232594.52971492,608292.544284932 232596.251183204,608291.285568673 232597.506401085,608289.986825044 232598.542068543,608289.168268344 232598.966104525,608287.925941707 232599.345597986,608285.962807894 232599.734290613,608283.403922659 232600.221415586,608281.574215904 232600.754596476,608279.078215904 232601.748596476,608277.939765215 232602.287343919,608276.141765215 232603.281343919,608274.439729206 232604.468288642,608272.940729206 232605.764288642,608270.971638899 232608.076307962,608270.171638899 232609.372307962,608270.069107559 232609.542155464,608269.068107559 232611.238155464,608268.944172442 232611.4542437,608268.232928297 232612.730926941,608267.750988902 232613.396374028,608266.819385475 232614.325491523,608266.649405872 232614.499188408,608265.097887015 232616.123665131,608263.908723111 232617.083271655,608262.347045458 232618.095470134,608260.24283496 232619.92189062,608255.64483496 232625.20489062,608254.575803894 232626.68767,608251.573803894 232631.77467,608250.889612764 232633.172276895,608249.425433771 232636.866333275,608248.238777183 232639.685326232,608246.494080979 232643.422094436,608245.10126684 232645.851906985,608244.078234366 232648.389030957,608243.455799132 232650.867245316,608242.752866262 232653.051326897,608242.310858066 232655.23428928,608242.107858066 232657.53028928,608242.083520693 232658.949704946,608242.277520693 232662.545704946,608242.302546502 232662.895462782,608242.596546502 232666.191462782,608242.719047957 232667.095958339,608243.411047957 232670.892958339,608243.459796951 232671.142425926,608244.251796951 232674.938425926,608244.334879463 232675.302496235,608245.123292064 232678.482400538,608245.35315982 232681.538935619,608245.471654354 232682.495335132,608246.114653787 232686.208378099,608246.573971848 232690.218075402,608246.592283598 232690.367919174,608247.044823826 232693.85238714,608247.265055121 232697.167169814,608247.026861984 232699.896628871,608247.001635285 232700.263460398,608246.83456706 232703.583738626,608246.002995895 232707.585078375,608241.839426068 232714.945899316,608238.706246463 232718.938331011,608238.443542197 232719.288606159,608236.760216177 232721.638529283,608234.623960968 232724.024398946,608234.505153508 232724.159515108,608231.650214458 232727.465864334,608228.895636045 232730.212090477,608225.220075959 232733.340398512,608223.028220515 232735.088492545,608221.906531186 232735.528110312,608217.121877467 232736.544100288,608216.184708448 232736.791114241,608209.595708448 232738.874114241,608208.981620571 232739.090477439,608204.389620571 232740.878477439,608202.886190902 232741.614195366,608200.462713639 232743.063234835,608197.939978691 232744.513540294,608195.125500588 232746.92333492,608193.925500588 232748.41833492,608192.98702047 232749.813312066,608192.006132454 232751.574986944,608190.724513552 232753.834813047,608188.794662705 232757.237639982,608188.763962426 232757.268258339,608187.408591987 232758.281733533,608185.684617746 232759.522458042,608185.44129981 232759.703231379,608184.14229981 232760.699231379,608182.886570303 232761.843969749,608181.687570304 232763.139969749,608181.22847892 232763.67260796,608180.42847892 232764.66960796,608179.858432409 232765.455309771,608178.358432409 232767.749309771,608177.208866262 232770.158326897,608176.423806436 232772.597585011,608175.293459778 232775.973591282,608174.049987187 232779.306059652,608173.915941397 232779.688822013,608172.610118269 232783.674881838,608171.358158326 232786.308722097,608170.054572148 232788.331453316,608168.913948349 232789.906391562,608168.701769076 232790.211115131,608167.680438217 232791.737583818,608166.577066737 232793.176210477,608165.151603685 232795.743054018,608164.851603685 232796.541054018,608164.778437732 232796.742184012,608164.076437732 232798.738184012,608163.624968813 232800.54399523,608163.120968813 232803.83899523,608163.108879813 232803.920261728,608162.925945282 232805.185709834,608162.55058234 232806.353453652,608161.075827716 232809.639158432,608161.048655952 232809.700241976,608159.34600946 232813.562595914,608157.687201748 232816.86943986,608155.976645839 232819.548849425,608154.233879021 232822.042521424,608153.229980728 232823.09362654,608151.853693563 232824.191130156,608149.914535921 232825.306369894,608149.178055629 232825.773820048,608145.182055629 232828.561820048,608143.84372181 232829.681159005,608141.54472181 232831.973159005,608139.796443689 232834.32115001,608138.483737269 232836.763780944,608136.899264506 232839.221474252,608136.239849333 232840.416118766,608135.03235409 232843.007318235,608133.899053167 232845.179841296,608132.249281488 232848.139047138,608131.039343484 232849.814811275,608129.516392889 232851.586648737,608127.993083931 232853.974130877,608124.689083931 232861.258130877,608124.027666429 232863.248986156,608123.752768352 232864.50378931,608122.769823776 232866.65815252,608120.614372939 232870.95500912,608119.179758916 232873.622703506,608118.537877059 232875.085763736,608116.532877059 232880.873763736,608115.982006187 232884.135876536,608115.980006187 232885.933876536,608116.142047957 232887.737958339,608116.834047957 232891.534958339,608116.949279194 232892.080525204,608118.37336719 232898.001355121,608118.501771671 232899.310294671,608118.581742247 232899.927275511,608119.355845234 232904.723774398,608119.64361318 232906.76500058,608119.459816017 232908.145845011,608118.869921339 232909.79072099,608117.825430747 232912.438912199,608117.149864034 232915.44708954,608116.958681912 232918.333473283,608116.826800746 232919.550436119,608116.669495966 232919.941932803,608116.343456887 232920.357501234,608115.002291135 232921.519572647,608112.577617211 232923.373068797,608110.129995544 232924.94178769,608109.726850888 232925.2142295,608107.436263799 232926.844747517,608097.097421673 232932.418756744,608095.096074456 232933.840011198,608091.74780203 232936.900650546,608089.513271348 232938.682550113,608089.331308794 232938.831184228,608086.282236329 232941.382087282,608083.45774781 232943.685711677,608080.891404814 232945.348213723,608079.241814275 232945.9407628,608077.145780802 232946.285786006,608075.716882853 232946.630475351,608072.622882853 232947.622475351,608071.462396875 232948.076066837,608069.964396875 232948.772066837,608066.891039363 232950.992627589,608065.948955538 232951.995045001,608065.29529981 232952.496231379,608065.230620811 232952.546244767) LINESTRING (608068.370872917 232972.36097836,608070.166872917 232972.16497836,608075.231379189 232970.109755232,608077.497141918 232968.342894131,608078.76370019 232967.371768621,608079.965960637 232966.28437241,608079.983992397 232966.265185849,608081.121368857 232965.900519576,608083.389219198 232965.527213994,608085.145610267 232965.071241906,608088.739610267 232963.780241906,608090.795954513 232962.761825842,608094.790954513 232960.173825842,608095.67433878 232959.530407571,608098.97133878 232956.841407571,608099.067691206 232956.761815772,608102.074583037 232954.246201715,608104.480728653 232952.327449887,608104.992925544 232951.889988802,608107.677133752 232949.436367288,608117.474578327 232944.154243256,608118.528149112 232943.4987705,608121.126891814 232941.648896807,608123.718004456 232939.98821231,608124.395123463 232939.513631609,608127.392123463 232937.222631609,608127.867429266 232936.835650041,608130.166429266 232934.843650041,608131.48558666 232933.45860724,608133.28458666 232931.16560724,608134.695984788 232928.721329559,608135.898984788 232925.727329559,608136.561792876 232923.076383133,608136.864792876 232920.280383133,608136.901135966 232919.86391046,608137.003020658 232918.32570012,608137.532569253 232916.983087801,608137.642990119 232916.689739477,608138.644990119 232913.895739477,608139.144575395 232911.839412381,608139.649575395 232908.045412381,608139.639083207 232905.3300243,608139.146083207 232901.8330243,608139.116257753 232901.635724489,608138.37584393 232897.047970481,608138.210228329 232895.359705329,608137.980720806 232893.997474796,608136.459944629 232887.674651272,608136.074885425 232885.561833643,608137.173806645 232882.389486501,608138.296241084 232880.302296494,608138.427420897 232880.049818894,608140.729420897 232875.460818894,608140.888787693 232875.127934725,608142.390787693 232871.835934725,608143.061333571 232869.825013844,608143.338616934 232868.559322785,608145.616019298 232863.53856043,608146.482607111 232862.530351263,608147.006564018 232861.865836836,608148.806564018 232859.372836836,608149.433335063 232858.388434362,608151.435335063 232854.797434362,608151.56716538 232854.55305259,608152.86816538 232852.05905259,608153.066150667 232851.657881234,608154.07929215 232849.4837512,608155.508735494 232847.266525748,608155.912556311 232846.58184999,608156.713124455 232845.092185215,608157.344121525 232844.463109406,608160.263907892 232842.42598118,608162.481464079 232841.150630106,608163.730728653 232840.300449886,608166.228728653 232838.308449886,608167.225594128 232837.396811592,608169.224594128 232835.303811592,608170.189646212 232834.125437036,608172.489646212 232830.834437036,608172.721801936 232830.487012722,608174.822801936 232827.196012722,608175.332441239 232826.298778341,608177.334441239 232822.307778341,608177.546344048 232821.857758024,608179.335860262 232817.798345204,608181.024172284 232814.036841568,608181.421245911 232813.002215319,608182.223245911 232810.507215319,608182.600120187 232808.877738272,608182.897242611 232806.822396355,608183.253696096 232804.492010974,608183.381088971 232804.129794196,608183.746933263 232803.652789523,608184.123230924 232803.127884869,608185.220970503 232801.487216638,608186.412051651 232799.842608438,608186.718618993 232799.394155097,608188.518618993 232796.601155097,608189.144597485 232795.477046338,608190.946597485 232791.686046338,608191.418058603 232790.506177987,608192.85891729 232786.107918524,608194.091012813 232782.805940348,608194.204601822 232782.484942943,608195.407601822 232778.891942943,608195.444133738 232778.780673103,608195.834558178 232777.567585958,608196.331634073 232776.807391222,608196.607344754 232776.463786786,608196.988369906 232776.051936413,608197.490411287 232775.666999373,608199.165382254 232774.461541958,608199.312449754 232774.353649671,608201.310449754 232772.859649671,608202.383614525 232771.931508477,608203.882614525 232770.436508477,608205.519486448 232768.289186953,608208.121486448 232763.701186953,608209.422486448 232761.407186953,608209.46097953 232761.338687934,608209.771366011 232760.781233815,608210.505021309 232760.359459706,608210.652809098 232760.272804634,608212.428988625 232759.210795809,608215.934859151 232757.845705108,608221.75069908 232756.007126481,608226.866122533 232754.920899712,608228.438001874 232754.44946644,608231.732001874 232753.15846644,608234.31821992 232751.666058106,608237.81521992 232748.877058106,608238.06139271 232748.67421822,608242.15839271 232745.18721822,608242.73732316 232744.653796162,608246.03532316 232741.365796162,608246.543846492 232740.819484893,608249.584050546 232737.29857739,608252.023039032 232734.574601054,608252.702457803 232733.727393841,608254.574940724 232731.113407683,608258.038753537 232726.699668989,608258.876054731 232725.449355689,608264.180054731 232716.072355689,608265.26680032 232713.18375529,608266.57380032 232706.89475529,608266.770364715 232705.362539602,608266.967124015 232701.452187302,608267.256138016 232698.140371129,608267.272002007 232696.608070174,608266.980002007 232692.213070174,608266.918716402 232691.588080825,608266.435437798 232687.8669336,608265.952028152 232683.646924598,608265.870345646 232683.078664868,608265.260662054 232679.558006439,608265.00384018 232676.143064381,608264.738120537 232674.486503765,608263.792061254 232670.670763148,608263.064162953 232667.181998057,608262.476863833 232663.959491183,608262.239032956 232661.29319672,608262.092813931 232658.582868819,608262.134449369 232658.111957661,608262.594133738 232656.683673103,608262.773765634 232656.055969043,608263.139410584 232654.600160444,608264.05373316 232653.005093015,608264.439021843 232652.262588986,608266.442021843 232647.972588986,608266.597690265 232647.621770684,608267.899690265 232644.528770684,608267.979387236 232644.333723105,608269.194827113 232641.267224093,608271.33372717 232637.64277886,608274.405536954 232634.113337562,608275.222954542 232633.583529866,608276.063916811 232632.974200514,608278.161916811 232631.281200514,608279.113594128 232630.405811592,608281.028659744 232628.400692865,608282.441614525 232626.991508477,608283.479051651 232625.776608438,608284.779051651 232623.981608438,608285.415827558 232622.9827563,608286.355205828 232621.296572304,608287.063743037 232620.096093677,608287.064006874 232620.095947819,608288.084450372 232619.689569278,608289.739077341 232619.374584414,608289.811255347 232619.36056901,608292.306255347 232618.86656901,608293.285436581 232618.620744471,608295.881436581 232617.827744471,608297.55974464 232617.14332144,608300.05574464 232615.85032144,608301.690728653 232614.789449887,608304.188728653 232612.797449887,608305.015220914 232612.059901017,608306.814220914 232610.265901017,608307.102956457 232609.965718257,608309.401956457 232607.473718257,608310.430194015 232606.152474796,608311.609837294 232604.342176072,608312.664783823 232602.869470717,608314.801039032 232600.483601054,608314.898304949 232600.373349686,608317.497304949 232597.383349686,608318.945440773 232595.191300046,608320.447440773 232592.098300046,608320.889794632 232591.035757476,608322.392794632 232586.744757476,608322.894626529 232584.536189343,608323.40162653 232579.943189343,608323.461987502 232578.861810257,608323.467987502 232575.066810257,608323.472555135 232572.025548588,608323.483409917 232571.969659385,608323.93451357 232571.173287936,608324.833832053 232569.65046593,608326.076028259 232567.648618967,608327.2758354 232564.819641386,608327.7788354 232562.823641386,608327.923894627 232562.151188908,608328.182864715 232560.712180172,608331.659449934 232556.01260953,608333.854846816 232553.540928432,608334.945827368 232552.690172492,608336.165004362 232551.960913177,608337.94766714 232551.279024064,608338.722108605 232550.944700793,608342.018108605 232549.353700793,608343.907254598 232548.165232796,608346.404254598 232546.173232796,608348.275564017 232544.209836836,608350.075564018 232541.716836836,608350.90537049 232540.348912251,608352.20737049 232537.754912251,608352.682990119 232536.644739477,608353.658406692 232533.924865321,608354.871344446 232530.703276821,608355.22182074 232530.07480035,608355.704847018 232529.407852528,608356.064015167 232529.049682623,608356.616893295 232528.719107115,608357.936277971 232528.262839069,608358.01576869 232528.234974308,608360.273150392 232527.432977874,608362.712296487 232526.868594487,608363.338945787 232526.7020196,608366.424474441 232525.77373821,608370.450298729 232524.751336422,608374.4879704 232523.774719038,608375.981779632 232523.2863417,608380.274779632 232521.4983417,608381.616770026 232520.816702726,608386.210770026 232518.029702726,608388.958933263 232515.565789523,608390.258933263 232513.870789523,608391.54898417 232511.645008688,608393.05198417 232508.053008688,608393.310025316 232507.366677811,608394.312025316 232504.372677811,608394.587794154 232503.382102532,608395.390681893 232499.793074502,608396.765612242 232493.676193761,608399.016248358 232493.337936536,608399.059908359 232493.331276075,608404.149908359 232492.543276075,608404.86197366 232492.406437605,608410.342088963 232491.145716982,608415.022662201 232490.179512238,608416.34876869 232489.808974308,608421.93876869 232487.822974308,608423.293468396 232487.225349341,608427.587468396 232484.937349341,608429.53736659 232483.578325652,608438.930366591 232475.209325652,608440.338560769 232473.661391682,608444.438560768 232468.077391682,608444.602122364 232467.847920051,608448.603122364 232462.063920051,608449.410597485 232460.668046338,608452.968959441 232453.182058451,608456.22429059 232446.693078648,608456.391524211 232446.34293624,608460.167922176 232438.024935887,608463.880764256 232430.138683669,608468.240282024 232421.544611508,608473.314496319 232413.240394715,608476.88493975 232407.504483789,608480.098468429 232402.379538708,608483.37240721 232398.20683596,608483.8857984 232397.48947598,608489.9877984 232388.11547598,608490.386832989 232387.446912647,608492.888832989 232382.857912647,608493.22303756 232382.18613297,608494.884084673 232378.50730998,608497.024101617 232374.52011073,608497.151420897 232374.274818894,608499.406531303 232369.779292546,608501.156759057 232366.465050079,608502.722248571 232364.037280944,608502.790657901 232363.917493372,608504.015277578 232364.1987671,608518.768603014 232373.842413073,608519.287579932 232374.159550603,608534.476494346 232382.818134361,608539.326958816 232386.31318695,608539.949040832 232386.727030586,608546.328040832 232390.635030586,608547.1176306 232391.07105573,608552.562614221 232393.764899156,608558.193409183 232397.62816794,608564.210895584 232401.891585267,608564.257770571 232401.924595002,608569.839770571 232405.831595002,608570.121740008 232406.021890968,608575.204740008 232409.327890968,608576.336692231 232409.963588625,608584.711692231 232413.975588625) SAFE test 16595 line 17 LINESTRING(609316.693 232664.454 1574.08996582031,609314.198 232664.449 1576.58501397663,609310.605 232665.44 1580.31223954877,609306.013 232666.729 1585.0818068008,609302.821 232666.223 1588.31371974088,609299.429 232665.417 1591.80022521322,609295.64 232664.21 1595.77689680241,609292.151 232662.105 1599.85178579216,609289.559 232660.402 1602.95323798033,609284.274 232658.793 1608.47783403638,609279.188 232656.785 1613.9459684638,609274.103 232654.777 1619.41317275522,609269.317 232652.47 1624.72627178568,609264.231 232650.961 1630.03150037809,609260.244 232648.656 1634.6369240884,609256.456 232646.051 1639.23428202346,609252.668 232644.246 1643.43042048197,609249.081 232641.242 1648.1092389351,609246.789 232639.24 1651.15252471111,609245.296 232636.64 1654.15075083655,609243.805 232633.641 1657.5) LINESTRING (609316.71304004 232654.45402008,609314.21804004 232654.44902008,609311.539139895 232654.808955242,609307.946139895 232655.799955242,609307.902402002 232655.812125673,609305.417309672 232656.509704944,609304.762544835 232656.405910769,609302.10630535 232655.774740655,609299.797443009 232655.039243995,609297.481441016 232653.641942707,609295.050071107 232652.044480147,609292.471480493 232650.835524297,609287.571702984 232649.343803954,609282.860561445 232647.483801553,609278.115878653 232645.610188368,609273.659173714 232643.461918771,609272.161412958 232642.883065405,609268.210779581 232641.710925066,609265.587899278 232640.194562112,609262.122395972 232637.811342441,609260.757648365 232637.023496395,609258.115457869 232635.764480068,609255.581235013 232633.642147907,609254.627722574 232632.809280585,609254.117076832 232631.920011376,609252.75940057 232629.189178976) LINESTRING (609234.85059943 232638.092821024,609236.34159943 232641.091821024,609236.624055813 232641.619697181,609238.117055813 232644.219697181,609240.210470187 232646.771463702,609242.502470187 232648.773463702,609242.660464605 232648.908598023,609246.247464605 232651.912598023,609248.366351635 232653.273503605,609251.440843269 232654.738513478,609254.577604028 232656.895657559,609255.238945079 232657.31333361,609259.225945079 232659.61833361,609261.386587042 232660.547934595,609265.700394399 232661.827827497,609269.760826286 232663.785081229,609270.43012696 232664.078075402,609275.51512696 232666.086075402,609280.60175172 232668.094322087,609281.361519507 232668.359475703,609285.270262501 232669.54947901,609286.659928893 232670.462519853,609286.985125771 232670.667344507,609290.474125771 232672.772344506,609292.604745905 232673.738233445,609296.393745905 232674.945233445,609297.117189665 232675.146107512,609300.509189665 232675.952107512,609301.255336693 232676.099674461,609304.447336693 232676.605674461,609308.715597998 232676.356874327,609313.285742868 232675.074009184,609315.541957617 232674.451713382,609316.67295996 232674.45397992) SAFE test 16595 line 18 LINESTRING(608928.229 232496.454 2038.69995117188,608923.439 232496.744 2043.49616183397,608919.148 232497.434 2047.83996582031) LINESTRING (608927.624678561 232486.472276922,608922.834678561 232486.762276922,608921.851377939 232486.870831502,608917.560377939 232487.560831502) LINESTRING (608920.735622061 232507.307168498,608924.537659798 232506.69579445,608928.833321439 232506.435723078) geos-3.4.2/tests/xmltester/tests/safe/16596.xml0000644000175000017500000020530712206417147020775 0ustar frankiefrankie SAFE test 16596 line 1 LINESTRING (658588.69478542 2088471.45516372,658599.81438543 2088528.25234777,658608.877809439 2088556.1276758,658620.369153449 2088574.02309982,658620.83814545 2088606.26271585,658625.151233454 2088642.98642788,658627.046657455 2088688.57797992,658622.179585451 2088709.65087594,658607.897841438 2088739.52709997,658598.270193429 2088770.558396,658598.120689429 2088786.11910001,658605.639921436 2088812.86802804) LINESTRING (658612.378734295 2088810.97372045,658605.129968417 2088785.18694906,658605.260007681 2088771.6521774,658614.432728887 2088742.08717598,658628.495091372 2088712.66987991,658629.00003324 2088711.22615114,658633.867105245 2088690.15325512,658634.04061589 2088688.28721297,658632.145191888 2088642.69566093,658632.103448984 2088642.16991136,658627.832188998 2088605.80234325,658627.368412906 2088573.92128109,658626.259326974 2088570.24079155,658615.255681816 2088553.104859,658606.60248678 2088526.49122492,658595.564371963 2088470.11025453) LINESTRING (658581.825198876 2088472.80007291,658592.944798886 2088529.59725696,658593.157423756 2088530.41680181,658602.220847765 2088558.29212984,658602.987635914 2088559.90998407,658613.398967634 2088576.12350927,658613.838885993 2088606.36453457,658613.885929919 2088607.07923236,658618.168236492 2088643.54085644,658620.013422386 2088687.92400694,658615.532270894 2088707.32598812,658601.582335516 2088736.508096,658601.212224526 2088737.45284673,658591.584576517 2088768.48414276,658591.27051649 2088770.49114456,658591.12101249 2088786.05184858,658591.381876569 2088788.0134076,658598.901108576 2088814.76233563) SAFE test 16596 line 2 LINESTRING (658513.98065735 2088478.52178773,658522.161393358 2088517.50444376,658531.288305366 2088538.71148378,658544.346369378 2088555.5102038,658565.913841399 2088576.83602782,658578.21515341 2088591.40447583,658588.83404942 2088619.29516386,658590.899457422 2088647.10393188,658590.612737422 2088677.11327591,658584.637697416 2088732.63455596) LINESTRING (658591.59751109 2088733.38355104,658597.572551096 2088677.86227098,658597.612417943 2088677.18015336,658597.899137944 2088647.17080933,658597.880229869 2088646.58545716,658595.814821867 2088618.77668914,658595.375941612 2088616.8044518,658584.757045602 2088588.91376378,658583.563531656 2088586.88841005,658571.262219644 2088572.31996204,658570.835625365 2088571.85847394,658549.592827722 2088550.85368656,658537.36429324 2088535.12212583,658528.868239003 2088515.38092946,658520.83143047 2088477.08411333) LINESTRING (658507.12988423 2088479.95946212,658515.310620238 2088518.94211816,658515.731576914 2088520.27165545,658524.858488923 2088541.47869547,658525.761627221 2088543.00750854,658538.819691233 2088559.80622855,658539.424585411 2088560.48775767,658560.768391846 2088581.59242212,658572.09752179 2088595.00951458,658581.92889485 2088620.83176189,658583.896976786 2088647.33012635,658583.616324804 2088676.70436562,658577.677883741 2088731.88556089) SAFE test 16596 line 3 LINESTRING (658719.186161541 2088486.04613973,658724.850929547 2088543.90111579) LINESTRING (658731.817614393 2088543.21898512,658726.152846388 2088485.36400907) LINESTRING (658712.219476695 2088486.7282704,658717.8842447 2088544.58324646) SAFE test 16596 line 4 LINESTRING (659042.039025842 2088469.14604372,659035.357441836 2088516.87877976,659024.992513826 2088543.45567579) LINESTRING (659031.514100815 2088545.99907964,659041.879028825 2088519.42218361,659042.289853984 2088517.84917237,659048.97143799 2088470.11643632) LINESTRING (659035.106613694 2088468.17565111,659028.538485803 2088515.09786516,659018.470926837 2088540.91227194) SAFE test 16596 line 5 LINESTRING (658743.362801564 2088478.49721173,658789.830897607 2088497.83954774,658823.805169639 2088522.62137177) LINESTRING (658827.930343794 2088516.96602579,658793.956071763 2088492.18420176,658792.520909691 2088491.37705326,658746.052813648 2088472.03471724) LINESTRING (658740.67278948 2088484.95970621,658786.375507649 2088503.98345384,658819.679995483 2088528.27671775) SAFE test 16596 line 6 LINESTRING (659042.039025842 2088469.14604372,659119.584497914 2088491.01458774,659167.627505959 2088508.15225175,659184.710897975 2088510.54124376) LINESTRING (659185.680365075 2088503.60870212,659169.30551307 2088501.31879445,659121.936351023 2088484.42150144,659121.484457046 2088484.27736611,659043.938984974 2088462.40882209) LINESTRING (659040.13906671 2088475.88326535,659117.456148718 2088497.68740125,659165.27565285 2088514.74533805,659166.658038858 2088515.08479339,659183.741430874 2088517.47378539) SAFE test 16596 line 7 LINESTRING (658743.362801564 2088478.49721173,658719.186161541 2088486.04613973) LINESTRING (658721.272507222 2088492.7279929,658745.449147245 2088485.17906489) LINESTRING (658741.276455883 2088471.81535856,658717.099815861 2088479.36428657) SAFE test 16596 line 8 LINESTRING (658710.132977533 2088457.05772371,658719.186161541 2088486.04613973) LINESTRING (658725.867895062 2088483.95941092,658716.814711054 2088454.97099489) LINESTRING (658703.451244012 2088459.14445252,658712.50442802 2088488.13286855) SAFE test 16596 line 9 LINESTRING (658588.69478542 2088471.45516372,658513.98065735 2088478.52178773) LINESTRING (658514.639790838 2088485.49068599,658589.353918907 2088478.42406199) LINESTRING (658588.035651932 2088464.48626545,658513.321523863 2088471.55288946) SAFE test 16596 line 10 LINESTRING (658879.670529691 2088454.2417237,658872.640753684 2088457.50828371,658842.286337656 2088460.55161171,658804.923649621 2088464.63839571,658784.708849602 2088464.44383571,658769.915121589 2088466.52460372,658743.362801564 2088478.49721173) LINESTRING (658746.240162862 2088484.87849623,658771.880617381 2088473.31705411,658785.165189071 2088471.44855202,658804.856280321 2088471.63807152,658805.68477993 2088471.59689272,658843.016076514 2088467.51354236,658873.33907138 2088464.47336464,658875.590564811 2088463.85640267,658882.620340818 2088460.58984266) LINESTRING (658876.720718563 2088447.89360475,658870.764519778 2088450.66130043,658841.588019961 2088453.58653078,658841.525207347 2088453.5931147,658804.575547015 2088457.63472114,658784.776218902 2088457.44415991,658783.733881993 2088457.51206551,658768.940153979 2088459.59283351,658767.03776029 2088460.14331921,658740.485440266 2088472.11592722) SAFE test 16596 line 11 LINESTRING (658879.670529691 2088454.2417237,658924.572929733 2088474.68178772) LINESTRING (658927.473063731 2088468.31082054,658882.57066369 2088447.87075653) LINESTRING (658876.770395692 2088460.61269088,658921.672795734 2088481.0527549) SAFE test 16596 line 12 LINESTRING (658710.132977533 2088457.05772371,658588.69478542 2088471.45516372) LINESTRING (658589.51891797 2088478.40648054,658710.957110083 2088464.00904053) LINESTRING (658709.308844983 2088450.10640689,658587.87065287 2088464.5038469) SAFE test 16596 line 13 LINESTRING (658582.165761414 2088422.48441167,658582.059249414 2088433.59890768,658588.69478542 2088471.45516372) LINESTRING (658595.589667793 2088470.24661208,658589.065086394 2088433.02336083,658589.165440006 2088422.55149072) LINESTRING (658575.166082821 2088422.41733263,658575.059570821 2088433.53182864,658575.164367041 2088434.80745932,658581.799903047 2088472.66371536) SAFE test 16596 line 14 LINESTRING (659050.37132985 2088411.42418766,659042.039025842 2088469.14604372) LINESTRING (659048.967214278 2088470.14614621,659057.299518285 2088412.42429016) LINESTRING (659043.443141414 2088410.42408517,659035.110837406 2088468.14594122) SAFE test 16596 line 15 LINESTRING (658986.953985791 2088456.38700371,659042.039025842 2088469.14604372) LINESTRING (659043.618578873 2088462.32658537,658988.533538822 2088449.56754535) LINESTRING (658985.374432759 2088463.20646206,659040.459472811 2088475.96550207) SAFE test 16596 line 16 LINESTRING (658582.165761414 2088422.48441167,658551.800049385 2088426.63980368,658502.76478534 2088431.72805968) LINESTRING (658503.487276951 2088438.69067456,658552.522540997 2088433.60241855,658552.749118335 2088433.57516727,658583.114830363 2088429.41977526) LINESTRING (658581.216692464 2088415.54904808,658550.964046971 2088419.68896751,658502.042293728 2088424.76544481) SAFE test 16596 line 17 LINESTRING (658646.889713474 2088403.09599566,658593.966337425 2088408.14738766,658586.127601417 2088414.74092367,658582.165761414 2088422.48441167) LINESTRING (658588.397480462 2088425.67277767,658591.715410208 2088419.18782391,658596.802945502 2088414.9084545,658647.554821637 2088410.06432624) LINESTRING (658646.224605311 2088396.12766507,658593.301229262 2088401.17905708,658591.258177366 2088401.6924772,658589.460388674 2088402.79048316,658581.621652666 2088409.38401916,658579.895882369 2088411.55255768,658575.934042365 2088419.29604568) SAFE test 16596 line 18 LINESTRING (659066.742001865 2088407.13669966,659059.712241858 2088410.40325966,659050.37132985 2088411.42418766) LINESTRING (659051.131875469 2088418.3827486,659060.472787478 2088417.3618206,659062.662058507 2088416.75137606,659069.691818514 2088413.48481605) LINESTRING (659063.792185216 2088400.78858327,659057.80684426 2088403.56982692,659049.61078423 2088404.46562672) SAFE test 16596 line 19 LINESTRING (659036.515569837 2088396.84037965,659041.094897841 2088405.77682766,659050.37132985 2088411.42418766) LINESTRING (659054.011351724 2088405.44503716,659046.423211801 2088400.82548539,659042.745272805 2088393.64807626) LINESTRING (659030.285866869 2088400.03268304,659034.865194873 2088408.96913105,659037.454875967 2088411.75597816,659046.731307976 2088417.40333817) SAFE test 16596 line 20 LINESTRING (658803.90270562 2088409.05055566,658785.232113603 2088409.98239566) LINESTRING (658785.581045819 2088416.97369356,658804.251637836 2088416.04185356) LINESTRING (658803.553773404 2088402.05925776,658784.883181387 2088402.99109776) SAFE test 16596 line 21 LINESTRING (658884.018433695 2088406.48645966,658803.90270562 2088409.05055566) LINESTRING (658804.126625279 2088416.04697332,658884.242353354 2088413.48287731) LINESTRING (658883.794514035 2088399.49004201,658803.678785961 2088402.05413801) SAFE test 16596 line 22 LINESTRING (658885.904641696 2088372.04626763,658823.715057639 2088370.33618763,658818.239745633 2088373.61810763,658807.940337624 2088393.52671565,658803.90270562 2088409.05055566) LINESTRING (658810.67731078 2088410.81257863,658814.517690904 2088396.04713032,658823.543624862 2088378.60012938,658825.563097716 2088377.38965072,658885.712229461 2088379.04362267) LINESTRING (658886.097053932 2088365.04891259,658823.907469874 2088363.33883259,658820.116222031 2088364.33215712,658814.640910026 2088367.61407713,658812.022458177 2088370.40169088,658801.723050168 2088390.3102989,658801.165732464 2088391.76469268,658797.12810046 2088407.2885327) SAFE test 16596 line 23 LINESTRING (658885.904641696 2088372.04626763,658884.018433695 2088406.48645966) LINESTRING (658891.007959023 2088406.86925946,658892.894167025 2088372.42906743) LINESTRING (658878.915116368 2088371.66346783,658877.028908367 2088406.10365986) SAFE test 16596 line 24 LINESTRING (658576.254193408 2088390.19257164,658528.730353364 2088399.74137165,658516.237569352 2088405.17983566,658498.344177336 2088406.11986766) LINESTRING (658498.711416942 2088413.11022781,658516.604808959 2088412.17019581,658519.031598067 2088411.59804441,658530.840518733 2088406.45728556,658577.633119837 2088397.05541085) LINESTRING (658574.87526698 2088383.32973244,658527.351426935 2088392.87853245,658525.936324649 2088393.3231629,658514.605158943 2088398.25594144,658497.976937729 2088399.12950751) SAFE test 16596 line 25 LINESTRING (659041.341697841 2088380.21369164,659036.612865837 2088386.83692364,659036.515569837 2088396.84037965) LINESTRING (659043.515238761 2088396.9084601,659043.591089527 2088389.10988874,659047.038665203 2088384.28119245) LINESTRING (659035.64473048 2088376.14619082,659030.915898476 2088382.76942283,659029.957042517 2088384.66897163,659029.613196912 2088386.76884319,659029.515900912 2088396.7722992) SAFE test 16596 line 26 LINESTRING (659010.944257813 2088387.70117964,659036.515569837 2088396.84037965) LINESTRING (659038.871430803 2088390.24872439,659013.300118779 2088381.10952438) LINESTRING (659008.588396847 2088394.29283491,659034.159708871 2088403.43203491) SAFE test 16596 line 27 LINESTRING (658885.969153697 2088365.37695562,658964.32563377 2088383.91647564,659002.348785805 2088392.06444365,659010.944257813 2088387.70117964) LINESTRING (659007.775752529 2088381.45933903,659001.391146847 2088384.70031522,658965.865039028 2088377.08743795,658887.580887757 2088358.56503127) LINESTRING (658884.357419636 2088372.18887997,658962.713899709 2088390.72839999,658962.858904381 2088390.76108702,659000.882056417 2088398.90905502,659003.251472599 2088399.00599654,659005.517291089 2088398.30628426,659014.112763097 2088393.94302026) SAFE test 16596 line 28 LINESTRING (658733.993217555 2088320.56466758,658765.019377584 2088328.64402759,658785.170673603 2088335.50687559,659010.944257813 2088387.70117964) LINESTRING (659012.520933138 2088380.88105538,658787.092253745 2088328.76648638,658767.276058773 2088322.01776242,658766.783382737 2088321.86993829,658735.757222708 2088313.79057828) LINESTRING (658732.229212402 2088327.33875688,658763.006316968 2088335.35326166,658782.913992414 2088342.13314076,658783.593998278 2088342.32699985,659009.367582488 2088394.5213039) SAFE test 16596 line 29 LINESTRING (659055.401201854 2088373.67954763,659066.243313864 2088378.23122763,659072.38833787 2088386.07097164) LINESTRING (659077.897606519 2088381.75264338,659071.752582513 2088373.91289937,659068.952925589 2088371.77692641,659058.110813579 2088367.2252464) LINESTRING (659052.691590129 2088380.13384885,659061.85631881 2088383.98133837,659066.879069222 2088390.3892999) SAFE test 16596 line 30 LINESTRING (659055.401201854 2088373.67954763,659047.615729847 2088374.71583563,659041.341697841 2088380.21369164) LINESTRING (659045.95506798 2088385.47836788,659050.637300688 2088381.37538575,659056.324793594 2088380.61835) LINESTRING (659054.477610115 2088366.74074526,659046.692138107 2088367.77703326,659043.002359708 2088369.45115939,659036.728327702 2088374.94901539) SAFE test 16596 line 31 LINESTRING (659025.802481827 2088378.95212363,659041.341697841 2088380.21369164) LINESTRING (659041.908136702 2088373.23664735,659026.368920688 2088371.97507934) LINESTRING (659025.236042966 2088385.92916792,659040.77525898 2088387.19073592) SAFE test 16596 line 32 LINESTRING (658736.432369557 2088309.47269957,658785.288449603 2088323.28031558,659025.802481827 2088378.95212363) LINESTRING (659027.381036091 2088372.13243402,658787.030607875 2088316.4984954,658738.336127704 2088302.73655045) LINESTRING (658734.528611411 2088316.20884869,658783.384691456 2088330.0164647,658783.709895339 2088330.1000052,659024.223927563 2088385.77181325) SAFE test 16596 line 33 LINESTRING (659076.181233874 2088234.9347155,659073.633537871 2088257.14117952,659054.753009854 2088360.33477962,659055.401201854 2088373.67954763) LINESTRING (659062.392958847 2088373.33993881,659061.7839081 2088360.80099831,659080.519236605 2088258.4010021,659080.587919182 2088257.93903952,659083.135615184 2088235.7325755) LINESTRING (659069.226852563 2088234.1368555,659066.705788015 2088256.11119196,659047.86731112 2088359.07495703,659047.761252861 2088360.67438844,659048.409444861 2088374.01915645) SAFE test 16596 line 34 LINESTRING (658885.969153697 2088365.37695562,658885.904641696 2088372.04626763) LINESTRING (658892.904314238 2088372.11397519,658892.968826238 2088365.44466319) LINESTRING (658878.969481155 2088365.30924806,658878.904969155 2088371.97856006) SAFE test 16596 line 35 LINESTRING (658885.969153697 2088365.37695562,658885.904641696 2088372.04626763) LINESTRING (658892.904314238 2088372.11397519,658892.968826238 2088365.44466319) LINESTRING (658878.969481155 2088365.30924806,658878.904969155 2088371.97856006) SAFE test 16596 line 36 LINESTRING (658733.993217555 2088320.56466758,658749.415681569 2088334.05177159,658786.640129604 2088344.4136276,658831.650033646 2088353.73817161,658885.969153697 2088365.37695562) LINESTRING (658887.435733537 2088358.5323122,658833.116613487 2088346.89352819,658833.07004718 2088346.88371601,658788.290580457 2088337.60691089,658752.825874018 2088327.73489933,658738.60128825 2088315.29535221) LINESTRING (658729.38514686 2088325.83398295,658744.807610874 2088339.32108696,658747.538519906 2088340.79538072,658784.762967941 2088351.15723673,658785.22011607 2088351.2680832,658830.206720283 2088360.58780027,658884.502573856 2088372.22159904) SAFE test 16596 line 37 LINESTRING (658716.931329539 2088315.95461958,658719.071489541 2088335.98303559) LINESTRING (658726.031864704 2088335.2392765,658723.891704702 2088315.21086048) LINESTRING (658709.970954376 2088316.69837867,658712.111114378 2088336.72679469) SAFE test 16596 line 38 LINESTRING (658925.925633734 2088253.49369152,658910.66086572 2088304.47865156,658911.38481772 2088310.04306757,658923.706609732 2088322.38943558,658939.214081746 2088326.98514759,658971.848945777 2088329.52261959) LINESTRING (658972.391581848 2088322.5436837,658940.49401693 2088320.06353922,658927.4031826 2088316.18400912,658918.019483354 2088306.78159394,658917.794987784 2088305.05608349,658932.631528772 2088255.50141952) LINESTRING (658919.219738696 2088251.48596351,658903.954970682 2088302.47092356,658903.719368599 2088305.38176713,658904.4433206 2088310.94618314,658905.102814348 2088313.13117923,658906.430141456 2088314.98788133,658918.751933467 2088327.33424934,658921.717631171 2088329.10091562,658937.225103185 2088333.69662762,658938.671445674 2088333.96408347,658971.306309705 2088336.50155547) SAFE test 16596 line 39 LINESTRING (658716.931329539 2088315.95461958,658733.993217555 2088320.56466758) LINESTRING (658735.819110824 2088313.80699684,658718.757222808 2088309.19694884) LINESTRING (658715.10543627 2088322.71229031,658732.167324286 2088327.32233832) SAFE test 16596 line 40 LINESTRING (658714.715393537 2088303.70655556,658716.931329539 2088315.95461958) LINESTRING (658723.819503587 2088314.70840198,658721.603567585 2088302.46033797) LINESTRING (658707.827219489 2088304.95277316,658710.043155492 2088317.20083717) SAFE test 16596 line 41 LINESTRING (658503.04844934 2088239.4300755,658513.146097349 2088240.63839551,658548.007169382 2088254.31084352,658565.794049398 2088264.48530753,658627.772673456 2088288.42233155,658716.931329539 2088315.95461958) LINESTRING (658718.99670384 2088309.26625438,658630.069070018 2088281.80530627,658568.810029811 2088258.14619574,658551.482853956 2088248.23469204,658550.563015286 2088247.79412259,658515.701943253 2088234.12167457,658513.977808301 2088233.68798135,658503.880160292 2088232.47966135) LINESTRING (658502.216738388 2088246.38048966,658511.424557054 2088247.48232956,658544.975313579 2088260.64087425,658562.318364824 2088270.561459,658563.27210359 2088271.01522248,658625.250727647 2088294.95224651,658625.707299155 2088295.11069675,658714.865955238 2088322.64298477) SAFE test 16596 line 42 LINESTRING (658714.715393537 2088303.70655556,658736.432369557 2088309.47269957) LINESTRING (658738.22872135 2088302.70711606,658716.51174533 2088296.94097205) LINESTRING (658712.919041745 2088310.47213907,658734.636017765 2088316.23828308) SAFE test 16596 line 43 LINESTRING (658901.023985711 2088255.47717952,658892.734721703 2088308.75180357) LINESTRING (658899.651495565 2088309.82801885,658907.940759573 2088256.5533948) LINESTRING (658894.107211848 2088254.40096424,658885.81794784 2088307.67558829) SAFE test 16596 line 44 LINESTRING (658559.169793392 2088306.66079557,658495.403265333 2088307.16255557) LINESTRING (658495.458344563 2088314.16233887,658559.224872622 2088313.66057887) LINESTRING (658559.114714162 2088299.66101226,658495.348186103 2088300.16277227) SAFE test 16596 line 45 LINESTRING (658708.059377531 2088268.07237953,658714.715393537 2088303.70655556) LINESTRING (658721.596385345 2088302.42127282,658714.940369339 2088266.78709679) LINESTRING (658701.178385723 2088269.35766228,658707.834401729 2088304.99183831) SAFE test 16596 line 46 LINESTRING (658503.17643334 2088226.09247549,658610.85824144 2088268.25157953,658682.145025507 2088294.50079556,658714.715393537 2088303.70655556) LINESTRING (658716.61930148 2088296.97044878,658684.309603231 2088287.83836505,658613.343880804 2088261.70737033,658505.728422689 2088219.57424334) LINESTRING (658500.624443991 2088232.61070764,658608.306252091 2088274.76981168,658608.439467102 2088274.82040977,658679.726251169 2088301.06962579,658680.241117564 2088301.23690233,658712.811485594 2088310.44266234) SAFE test 16596 line 47 LINESTRING (658768.717057587 2088267.54297153,658767.608065586 2088301.99135556) LINESTRING (658774.604441073 2088302.2165889,658775.713433074 2088267.76820487) LINESTRING (658761.720682101 2088267.31773819,658760.6116901 2088301.76612223) SAFE test 16596 line 48 LINESTRING (658768.717057587 2088267.54297153,658708.059377531 2088268.07237953) LINESTRING (658708.120469793 2088275.07211294,658768.778149849 2088274.54270493) LINESTRING (658768.655965326 2088260.54323813,658707.998285269 2088261.07264613) SAFE test 16596 line 49 LINESTRING (658687.663345512 2088205.62885947,658692.179185516 2088221.23359549,658708.059377531 2088268.07237953) LINESTRING (658714.688725152 2088265.82476966,658698.859319083 2088219.13577927,658694.38744731 2088203.68297792) LINESTRING (658680.939243713 2088207.57474102,658685.455083718 2088223.17947704,658685.549837895 2088223.48120535,658701.430029909 2088270.3199894) SAFE test 16596 line 50 LINESTRING (658869.880049682 2088259.62335552,658768.717057587 2088267.54297153) LINESTRING (658769.263385941 2088274.52161935,658870.426378036 2088266.60200334) LINESTRING (658869.333721328 2088252.64470771,658768.170729233 2088260.56432371) SAFE test 16596 line 51 LINESTRING (658901.023985711 2088255.47717952,658869.880049682 2088259.62335552) LINESTRING (658870.803805916 2088266.56213599,658901.947741945 2088262.41595999) LINESTRING (658900.100229476 2088248.53839905,658868.956293447 2088252.68457505) SAFE test 16596 line 52 LINESTRING (658865.007873677 2088119.51967539,658857.91360167 2088129.4555474,658842.298609656 2088135.97433141,658836.802801651 2088141.47935541,658838.282481652 2088149.27404342,658842.904817656 2088153.76530742,658863.844609676 2088159.52428343,658867.65796968 2088167.34252344,658868.32868968 2088178.46418745,658864.269553676 2088196.21010746,658869.880049682 2088259.62335552) LINESTRING (658876.852812011 2088259.0064394,658871.339695188 2088196.69383026,658875.152454764 2088180.02503019,658875.315994808 2088178.04280039,658874.645274807 2088166.92113638,658873.949480581 2088164.27382818,658870.136120577 2088156.45558817,658868.314890249 2088154.13757835,658865.700864836 2088152.77488962,658846.49392341 2088147.49249165,658844.747096179 2088145.79519785,658844.369767638 2088143.80749899,658846.273742746 2088141.90033108,658860.61032801 2088135.91524299,658863.610489615 2088133.52315945,658870.704761621 2088123.58728744) LINESTRING (658859.310985733 2088115.45206335,658853.375936379 2088123.76438781,658839.601883316 2088129.51463582,658837.344717251 2088131.02873235,658831.848909246 2088136.53375636,658830.112310405 2088139.42087858,658829.925618512 2088142.78486377,658831.405298514 2088150.57955178,658832.118348005 2088152.59118924,658833.404426032 2088154.29445908,658838.026762036 2088158.78572308,658841.048562496 2088160.51470123,658858.939361231 2088165.43512645,658860.754673655 2088169.1569225,658861.280905098 2088177.88272359,658857.445788592 2088194.64926472,658857.296791347 2088196.82702359,658862.907287353 2088260.24027165) SAFE test 16596 line 53 LINESTRING (658911.14212972 2088254.46239552,658901.023985711 2088255.47717952) LINESTRING (658901.722535667 2088262.44223716,658911.840679677 2088261.42745316) LINESTRING (658910.443579763 2088247.49733788,658900.325435754 2088248.51212188) SAFE test 16596 line 54 LINESTRING (658925.925633734 2088253.49369152,658911.14212972 2088254.46239552) LINESTRING (658911.599830223 2088261.44741594,658926.383334237 2088260.47871194) LINESTRING (658925.467933231 2088246.5086711,658910.684429217 2088247.4773751) SAFE test 16596 line 55 LINESTRING (658908.646657718 2088109.93503538,658911.14212972 2088254.46239552) LINESTRING (658918.141086499 2088254.3415485,658915.645614497 2088109.81418836) LINESTRING (658901.647700938 2088110.0558824,658904.143172941 2088254.58324254) SAFE test 16596 line 56 LINESTRING (658995.296497798 2088236.3775315,658947.728625754 2088250.36946751,658925.925633734 2088253.49369152) LINESTRING (658926.918545335 2088260.42291417,658948.721537356 2088257.29869017,658949.703970038 2088257.08497308,658997.271842082 2088243.09303706) LINESTRING (658993.321153515 2088229.66202594,658946.236803901 2088243.51173539,658924.932722132 2088246.56446887) SAFE test 16596 line 57 LINESTRING (659056.979185856 2088210.29522748,658995.296497798 2088236.3775315) LINESTRING (658998.022717199 2088242.82483542,659059.705405256 2088216.74253139) LINESTRING (659054.252966455 2088203.84792356,658992.570278398 2088229.93022759) SAFE test 16596 line 58 LINESTRING (658983.381233787 2088181.79525945,658995.296497798 2088236.3775315) LINESTRING (659002.135440955 2088234.88459597,658990.220176944 2088180.30232392) LINESTRING (658976.54229063 2088183.28819498,658988.457554642 2088237.87046703) SAFE test 16596 line 59 LINESTRING (659056.979185856 2088210.29522748,659076.181233874 2088234.9347155) LINESTRING (659081.702570046 2088230.6318273,659062.500522028 2088205.99233928) LINESTRING (659051.457849684 2088214.59811568,659070.659897701 2088239.2376037) SAFE test 16596 line 60 LINESTRING (658687.663345512 2088205.62885947,658626.089217455 2088220.59973949,658613.648625443 2088220.48095549,658606.704881437 2088214.85714748) LINESTRING (658602.299224729 2088220.29683396,658609.242968735 2088225.92064196,658611.280252971 2088227.06812573,658613.581791799 2088227.48063643,658626.02238381 2088227.59942043,658627.742989048 2088227.40158038,658689.317117105 2088212.43070036) LINESTRING (658686.009573919 2088198.82701858,658625.283416339 2088213.59172654,658616.156931879 2088213.50458597,658611.110538144 2088209.417461) SAFE test 16596 line 61 LINESTRING (658777.965825596 2088114.23583539,658787.879153605 2088215.48383548,658787.090673605 2088216.58770748) LINESTRING (658792.786807903 2088220.65637484,658793.575287904 2088219.55250284,658794.641493787 2088217.29235843,658794.84583973 2088214.80171786,658784.93251172 2088113.55371777) LINESTRING (658770.999139472 2088114.91795301,658780.912467481 2088216.1659531) SAFE test 16596 line 62 LINESTRING (658673.348849499 2088157.69439543,658621.22212945 2088160.52882743,658608.771329438 2088161.52108343,658600.953073431 2088165.89253944,658597.757169428 2088174.75423544,658597.650673428 2088185.86873145,658602.135793432 2088204.80863547,658606.704881437 2088214.85714748) LINESTRING (658613.077068671 2088211.95969518,658608.790259684 2088202.53198191,658604.65851091 2088185.0843049,658604.745454588 2088176.01039453,658606.65104579 2088170.72651556,658610.852328431 2088168.37743384,658621.690286332 2088167.51371193,658673.728918619 2088164.68406977) LINESTRING (658672.968780378 2088150.70472108,658620.842060329 2088153.53915308,658620.666033488 2088153.55095116,658608.215233477 2088154.54320716,658605.355132591 2088155.41128809,658597.536876584 2088159.7827441,658595.615201201 2088161.36406066,658594.3682109 2088163.5177583,658591.172306897 2088172.37945431,658590.757490739 2088174.68716648,658590.650994739 2088185.80166249,658590.839059257 2088187.4817759,658595.324179261 2088206.42167992,658595.763606197 2088207.70608777,658600.332694202 2088217.75459978) SAFE test 16596 line 63 LINESTRING (659134.212337928 2088184.36345145,659093.70496189 2088191.75263546,659056.979185856 2088210.29522748) LINESTRING (659060.134117743 2088216.54393973,659095.956606612 2088198.45741119,659135.468519278 2088191.2498154) LINESTRING (659132.956156577 2088177.47708751,659092.448780539 2088184.86627151,659090.550030003 2088185.50392321,659053.824253969 2088204.04651523) SAFE test 16596 line 64 LINESTRING (659028.681969829 2088161.11250743,659056.979185856 2088210.29522748) LINESTRING (659063.046615405 2088206.80433953,659034.749399379 2088157.62161948) LINESTRING (659022.61454028 2088164.60339538,659050.911756307 2088213.78611543) SAFE test 16596 line 65 LINESTRING (658673.348849499 2088157.69439543,658687.663345512 2088205.62885947) LINESTRING (658694.370659931 2088203.62587837,658680.056163917 2088155.69141433) LINESTRING (658666.64153508 2088159.69737653,658680.956031093 2088207.63184057) SAFE test 16596 line 66 LINESTRING (659037.391089838 2088064.49093934,659028.681969829 2088161.11250743) LINESTRING (659035.653705942 2088161.7409146,659044.36282595 2088065.11934651) LINESTRING (659030.419353725 2088063.86253217,659021.710233717 2088160.48410026) SAFE test 16596 line 67 LINESTRING (658808.666369625 2087994.48210728,658873.841905685 2088009.55948329,658910.279921719 2088021.0252113,658941.242609748 2088035.77388331,658962.799857768 2088058.21381934,658988.116209792 2088094.02719537,659028.681969829 2088161.11250743) LINESTRING (659034.671992973 2088157.49040545,658994.106232936 2088090.40509339,658993.83225228 2088089.98654464,658968.515900256 2088054.17316861,658967.847893114 2088053.36435141,658946.290645094 2088030.92441539,658944.252899291 2088029.45421901,658913.290211262 2088014.705547,658912.381005961 2088014.34797797,658875.942989927 2088002.88224995,658875.419584741 2088002.73959115,658810.24404868 2087987.66221514) LINESTRING (658807.088690569 2088001.30199942,658871.999757953 2088016.3181946,658907.711727856 2088027.5554621,658937.079332744 2088041.5443371,658957.387431424 2088062.68397582,658982.255694399 2088097.86346979,659022.691946686 2088164.73460941) SAFE test 16596 line 68 LINESTRING (658661.387505487 2088107.55935538,658673.348849499 2088157.69439543) LINESTRING (658680.157744699 2088156.06991208,658668.196400687 2088105.93487203) LINESTRING (658654.578610287 2088109.18383873,658666.539954299 2088159.31887878) SAFE test 16596 line 69 LINESTRING (658908.646657718 2088109.93503538,658792.036593609 2088106.59065138,658777.965825596 2088114.23583539) LINESTRING (658781.307753182 2088120.38656868,658793.72124556 2088113.64184562,658908.445979792 2088116.93215825) LINESTRING (658908.847335643 2088102.93791252,658792.237271535 2088099.59352852,658788.694666023 2088100.43991809,658774.62389801 2088108.0851021) SAFE test 16596 line 70 LINESTRING (658746.875121567 2088112.82578739,658777.965825596 2088114.23583539) LINESTRING (658778.282968644 2088107.24302334,658747.192264615 2088105.83297534) LINESTRING (658746.557978519 2088119.81859943,658777.648682548 2088121.22864743) SAFE test 16596 line 71 LINESTRING (658754.801905574 2088016.1960273,658746.919153567 2088027.23577131,658746.875121567 2088112.82578739) LINESTRING (658753.875120641 2088112.82938855,658753.917999945 2088029.47999885,658760.498718161 2088020.26374488) LINESTRING (658749.105092988 2088012.12830971,658741.222340981 2088023.16805372,658740.253456518 2088025.09837035,658739.919154493 2088027.23217014,658739.875122493 2088112.82218622) SAFE test 16596 line 72 LINESTRING (658661.387505487 2088107.55935538,658746.875121567 2088112.82578739) LINESTRING (658747.30553793 2088105.83903265,658661.81792185 2088100.57260064) LINESTRING (658660.957089125 2088114.54611012,658746.444705204 2088119.81254212) SAFE test 16596 line 73 LINESTRING (658656.947441483 2088003.02943528,658655.881473482 2088033.03161131,658661.387505487 2088107.55935538) LINESTRING (658668.368479983 2088107.04360827,658662.890651237 2088032.89761374,658663.943027406 2088003.27798628) LINESTRING (658649.951855561 2088002.78088429,658648.88588756 2088032.78306032,658648.900498986 2088033.54735843,658654.406530991 2088108.0751025) SAFE test 16596 line 74 LINESTRING (659037.391089838 2088064.49093934,659082.44606588 2088069.37234735) LINESTRING (659083.200057108 2088062.41307316,659038.145081066 2088057.53166515) LINESTRING (659036.637098609 2088071.45021353,659081.692074651 2088076.33162153) SAFE test 16596 line 75 LINESTRING (659031.873777832 2087911.0414672,659040.785665841 2087954.47852324,659037.391089838 2088064.49093934) LINESTRING (659044.387759826 2088064.70683068,659047.782335829 2087954.69441458,659047.642831209 2087953.07165327,659038.7309432 2087909.63459723) LINESTRING (659025.016612465 2087912.44833717,659033.76370754 2087955.08218295,659030.394419849 2088064.275048) SAFE test 16596 line 76 LINESTRING (658656.947441483 2088003.02943528,658612.615425442 2088003.71551528,658579.149057411 2088006.73017129,658576.763121409 2088012.26489129,658578.925825411 2088030.07020331) LINESTRING (658585.874752606 2088029.22615898,658583.943532267 2088013.32662734,658612.984103381 2088010.71064786,658657.055760153 2088010.02859717) LINESTRING (658656.839122814 2087996.0302734,658612.507106773 2087996.7163534,658611.987407136 2087996.74374413,658578.521039105 2087999.75840013,658576.118050621 2088000.42041711,658574.099357928 2088001.88243624,658572.720907371 2088003.9590908,658570.334971369 2088009.49381081,658569.814194213 2088013.10893562,658571.976898215 2088030.91424764) SAFE test 16596 line 77 LINESTRING (658658.992369485 2087951.91647524,658656.947441483 2088003.02943528) LINESTRING (658663.941845956 2088003.30926751,658665.986773958 2087952.19630747) LINESTRING (658651.997965013 2087951.63664301,658649.953037011 2088002.74960305) SAFE test 16596 line 78 LINESTRING (658810.705153627 2087863.33637915,658808.666369625 2087994.48210728) LINESTRING (658815.665523911 2087994.59091573,658817.704307913 2087863.44518761) LINESTRING (658803.70599934 2087863.2275707,658801.667215338 2087994.37329882) SAFE test 16596 line 79 LINESTRING (658752.821505573 2087979.49484326,658808.666369625 2087994.48210728) LINESTRING (658810.48077729 2087987.72134365,658754.635913238 2087972.73407963) LINESTRING (658751.007097907 2087986.25560689,658806.851961959 2088001.2428709) SAFE test 16596 line 80 LINESTRING (659031.873777832 2087911.0414672,659000.696065803 2087918.52178721,658992.088305795 2087923.99609121,658988.892401792 2087932.85778722,658991.150321795 2087940.66066723,659005.699313808 2087964.14405925,659007.157505809 2087974.16185126,659000.861937804 2087981.88281126,658992.276737796 2087985.13401127,658980.645121785 2087981.68722726,658972.135681777 2087977.15909926,658965.989617771 2087969.31935525,658960.686337766 2087954.81746724,658958.610673764 2087928.11973921) LINESTRING (658951.631734335 2087928.6623297,658953.707398337 2087955.36005773,658954.112143073 2087957.22162284,658959.415423078 2087971.72351085,658960.480703964 2087973.63813618,658966.626767969 2087981.47788018,658968.847355075 2087983.33865487,658977.356795083 2087987.86678287,658978.656302304 2087988.39875444,658990.287918315 2087991.84553845,658992.535411416 2087992.1292302,658994.755813966 2087991.68032178,659003.341013974 2087988.42912178,659006.287063112 2087986.30638622,659012.582631118 2087978.58542621,659013.904361337 2087976.02731112,659014.08450658 2087973.15355551,659012.626314579 2087963.1357635,659011.649847832 2087960.45744226,658997.607208981 2087937.79135014,658996.248197502 2087933.09490231,658997.862106366 2087928.61980865,659003.466043627 2087925.05585518,659033.506907325 2087917.84829378) LINESTRING (659030.24064834 2087904.23464062,658999.062936311 2087911.71496063,658996.93957929 2087912.61511225,658988.331819282 2087918.08941625,658986.624383806 2087919.62052765,658985.503443265 2087921.62131007,658982.307539262 2087930.48300608,658981.896035825 2087932.63225839,658982.1682659 2087934.80355095,658984.426185902 2087942.60643096,658985.19978777 2087944.34728422,658998.982022424 2087966.59306035,658999.787105083 2087972.12398537,658996.624798388 2087976.00227618,658992.003770415 2087977.75225127,658983.31050802 2087975.17618637,658976.731095698 2087971.67508393,658972.182862711 2087965.87348761,658967.590750705 2087953.31629772,658965.589613194 2087927.57714872) SAFE test 16596 line 81 LINESTRING (658696.19840152 2087964.50143525,658752.821505573 2087979.49484326) LINESTRING (658754.613305111 2087972.72805271,658697.990201059 2087957.73464469) LINESTRING (658694.406601981 2087971.2682258,658751.029706034 2087986.26163382) SAFE test 16596 line 82 LINESTRING (658699.010289522 2087914.5077072,658696.19840152 2087964.50143525) LINESTRING (658703.187355543 2087964.89452768,658705.999243546 2087914.90079963) LINESTRING (658692.021335499 2087914.11461477,658689.209447496 2087964.10834282) SAFE test 16596 line 83 LINESTRING (658658.992369485 2087951.91647524,658696.19840152 2087964.50143525) LINESTRING (658698.44131932 2087957.87049868,658661.235287285 2087945.28553867) LINESTRING (658656.749451685 2087958.5474118,658693.95548372 2087971.13237181) SAFE test 16596 line 84 LINESTRING (658601.708785432 2087924.69036321,658658.992369485 2087951.91647524) LINESTRING (658661.997244788 2087945.59423478,658604.713660735 2087918.36812275) LINESTRING (658598.703910129 2087931.01260367,658655.987494182 2087958.23871569) SAFE test 16596 line 85 LINESTRING (659030.066433831 2087856.55749915,659108.139249903 2087905.10841119,659176.210673967 2087942.44857123) LINESTRING (659179.577241767 2087936.31128997,659111.673464515 2087899.06309156,659033.763024924 2087850.6131561) LINESTRING (659026.369842737 2087862.5018422,659104.44265881 2087911.05275424,659104.772682103 2087911.24569245,659172.844106167 2087948.58585249) SAFE test 16596 line 86 LINESTRING (658561.986801395 2087687.54629899,658585.645313417 2087815.60261911,658601.708785432 2087924.69036321) LINESTRING (658608.634105919 2087923.67059062,658592.570633904 2087814.58284651,658592.528822164 2087814.33088512,658568.870310142 2087686.274565) LINESTRING (658555.103292648 2087688.81803298,658578.738600106 2087816.74875386,658594.783464944 2087925.71013581) SAFE test 16596 line 87 LINESTRING (658481.77073732 2087862.40658715,658601.708785432 2087924.69036321) LINESTRING (658604.934828941 2087918.47806547,658484.996780829 2087856.19428941) LINESTRING (658478.544693811 2087868.6188849,658598.482741923 2087930.90266096) SAFE test 16596 line 88 LINESTRING (658765.126897584 2087831.77465112,658763.847921583 2087884.00581917,658758.159617578 2087909.5177552,658699.010289522 2087914.5077072) LINESTRING (658699.598732851 2087921.4829301,658758.748060906 2087916.49297809,658761.555952341 2087915.63861381,658763.766768635 2087913.7082035,658764.991848616 2087911.04111301,658770.680152621 2087885.52917699,658770.845823908 2087884.17717565,658772.12479991 2087831.9460076) LINESTRING (658758.128995259 2087831.60329464,658756.866770664 2087883.15036421,658752.4465761 2087902.97485334,658698.421846194 2087907.53248431) SAFE test 16596 line 89 LINESTRING (658691.683585516 2087786.60703508,658706.96881753 2087814.54277911,658699.010289522 2087914.5077072) LINESTRING (658705.988210507 2087915.06324183,658713.946738515 2087815.09831374,658713.109686896 2087811.18276074,658697.824454882 2087783.24701672) LINESTRING (658685.542716149 2087789.96705345,658699.825086646 2087816.06993798,658692.032368538 2087913.95217257) SAFE test 16596 line 90 LINESTRING (659031.267569832 2087893.25049118,659031.873777832 2087911.0414672) LINESTRING (659038.869717759 2087910.80308822,659038.263509759 2087893.0121122) LINESTRING (659024.271629905 2087893.48887016,659024.877837906 2087911.27984618) SAFE test 16596 line 91 LINESTRING (659030.066433831 2087856.55749915,659031.267569832 2087893.25049118) LINESTRING (659038.263822369 2087893.02147059,659037.062686368 2087856.32847855) LINESTRING (659023.070181293 2087856.78651974,659024.271317294 2087893.47951177) SAFE test 16596 line 92 LINESTRING (658955.842801762 2087892.52345118,659031.267569832 2087893.25049118) LINESTRING (659031.335041615 2087886.25081636,658955.910273545 2087885.52377636) LINESTRING (658955.775329979 2087899.523126,659031.200098049 2087900.250166) SAFE test 16596 line 93 LINESTRING (658719.071489541 2088335.98303559,658720.306433542 2088369.34188363,658719.815921542 2088420.46917967,658710.132977533 2088457.05772371) LINESTRING (658716.900017461 2088458.84858121,658726.58296147 2088422.26003718,658726.815599411 2088420.53633413,658727.306111412 2088369.40903809,658727.30164179 2088369.08292113,658726.066697789 2088335.7240731) LINESTRING (658712.076281294 2088336.24199809,658713.3051908 2088369.43783972,658712.824651947 2088419.52560962,658703.365937604 2088455.2668662) SAFE test 16596 line 94 LINESTRING (658884.018433695 2088406.48645966,658883.653889694 2088444.27615569,658882.024689693 2088452.0411477,658879.670529691 2088454.2417237) LINESTRING (658884.450656758 2088459.35546844,658886.80481676 2088457.15489244,658888.123761929 2088455.47645233,658888.875521066 2088453.47854448,658890.504721068 2088445.71355247,658890.653564015 2088444.34367911,658891.018108015 2088406.55398307) LINESTRING (658877.018759375 2088406.41893625,658876.660893724 2088443.516335,658875.628194971 2088448.43831976,658874.890402624 2088449.12797897) SAFE test 16596 line 95 LINESTRING (658719.071489541 2088335.98303559,658613.265665443 2088341.6375636,658491.068657329 2088353.80677961) LINESTRING (658491.762334033 2088360.77232429,658613.799566772 2088348.6190198,658719.445053969 2088342.9730606) LINESTRING (658718.697925113 2088328.99301059,658612.892101014 2088334.64753859,658612.571988739 2088334.67201892,658490.374980625 2088346.84123493) SAFE test 16596 line 96 LINESTRING (658752.821505573 2087979.49484326,658754.801905574 2088016.1960273) LINESTRING (658761.791736847 2088015.81885522,658759.811336845 2087979.11767118) LINESTRING (658745.8316743 2087979.87201534,658747.812074302 2088016.57319937) SAFE test 16596 line 97 LINESTRING (659022.622977824 2087822.02719512,659030.066433831 2087856.55749915) LINESTRING (659036.909254942 2087855.08244008,659029.465798935 2087820.55213605) LINESTRING (659015.780156713 2087823.50225418,659023.223612719 2087858.03255821) SAFE test 16596 line 98 LINESTRING (658981.346545785 2087828.29817112,659030.066433831 2087856.55749915) LINESTRING (659033.578627202 2087850.50237754,658984.858739157 2087822.24304951) LINESTRING (658977.834352414 2087834.35329273,659026.554240459 2087862.61262076) SAFE test 16596 line 99 LINESTRING (658940.349681747 2087805.6718671,658939.325697746 2087831.22783512,658940.752113748 2087844.57977114,658945.332465752 2087853.51724314,658953.086193759 2087855.81509915,658964.77105777 2087853.70463514,658983.518449787 2087844.99244314) LINESTRING (658980.568429602 2087838.64442133,658962.639130405 2087846.97643343,658953.47964302 2087848.63077604,658950.195073637 2087847.6573775,658947.574443173 2087842.54383789,658946.340647232 2087830.99491777,658947.344069366 2087805.95212027) LINESTRING (658933.355294129 2087805.39161393,658932.331310128 2087830.94758196,658932.365304913 2087831.97142884,658933.791720915 2087845.32336485,658934.522552024 2087847.77235015,658939.102904028 2087856.70982215,658940.862367992 2087858.90409993,658943.343485305 2087860.22872262,658951.097213312 2087862.52657862,658954.330369335 2087862.70364233,658966.015233346 2087860.59317832,658967.721077956 2087860.05265696,658986.468469973 2087851.34046495) SAFE test 16596 line 100 LINESTRING (659022.622977824 2087822.02719512,658981.346545785 2087828.29817112) LINESTRING (658982.397964957 2087835.21875764,659023.674396996 2087828.94778163) LINESTRING (659021.571558652 2087815.1066086,658980.295126614 2087821.37758461) SAFE test 16596 line 101 LINESTRING (658940.349681747 2087805.6718671,658981.346545785 2087828.29817112) LINESTRING (658984.728928867 2087822.16959178,658943.732064828 2087799.54328776) LINESTRING (658936.967298666 2087811.80044644,658977.964162704 2087834.42675046) SAFE test 16596 line 102 LINESTRING (659119.289585914 2087797.39385109,659081.879809879 2087805.9247951,659060.809985859 2087813.50239511,659029.62099383 2087822.09477912,659022.622977824 2087822.02719512) LINESTRING (659022.555377816 2087829.0268687,659029.553393822 2087829.0944527,659031.480189196 2087828.8433636,659062.669181225 2087820.2509796,659063.178936196 2087820.08935756,659083.849655145 2087812.65529262,659120.845915752 2087804.21864687) LINESTRING (659117.733256076 2087790.56905531,659080.323480041 2087799.09999932,659079.510859543 2087799.33783265,659058.692823986 2087806.82487888,659028.707601294 2087815.08563151,659022.690577832 2087815.02752153) SAFE test 16596 line 103 LINESTRING (658990.832897794 2087731.68274703,659003.751665806 2087762.93215506,659022.622977824 2087822.02719512) LINESTRING (659029.291226382 2087819.89776769,659010.419914364 2087760.80272763,659010.220662504 2087760.25781744,658997.301894492 2087729.00840941) LINESTRING (658984.363901097 2087734.35708465,658997.171742213 2087765.3381699,659015.954729266 2087824.15662254) geos-3.4.2/tests/xmltester/tests/safe/TestBufferJagged.xml0000644000175000017500000037630712206417147023467 0ustar frankiefrankie com.vividsolutions.jtstest.testrunner.BufferResultMatcher Test case from Safe Software. See http://trac.osgeo.org/geos/wiki/BufferRobustness POLYGON ((99736.4572496327 -2239219.11305743, 99736.6573549178 -2239219.11305743, 99736.6573549178 -2239219.01300479, 99736.5573022753 -2239219.01300479, 99736.5573022753 -2239218.8128995, 99736.6573549178 -2239218.8128995, 99736.6573549178 -2239218.91295215, 99736.7574075604 -2239218.91295215, 99736.7574075604 -2239219.01300479, 99736.8574602029 -2239219.01300479, 99736.8574602029 -2239219.11305743, 99736.9575128455 -2239219.11305743, 99736.9575128455 -2239219.21311007, 99737.057565488 -2239219.21311007, 99737.057565488 -2239219.01300479, 99737.2576707731 -2239219.01300479, 99737.2576707731 -2239219.11305743, 99737.4577760582 -2239219.11305743, 99737.4577760582 -2239219.01300479, 99737.958039271 -2239219.01300479, 99737.958039271 -2239218.91295215, 99738.0580919136 -2239218.91295215, 99738.0580919136 -2239218.51274158, 99738.1581445561 -2239218.51274158, 99738.1581445561 -2239218.61279422, 99738.3582498412 -2239218.61279422, 99738.3582498412 -2239218.41268893, 99738.4583024838 -2239218.41268893, 99738.4583024838 -2239218.61279422, 99738.5583551263 -2239218.61279422, 99738.5583551263 -2239218.41268893, 99738.6584077689 -2239218.41268893, 99738.6584077689 -2239218.31263629, 99738.4583024838 -2239218.31263629, 99738.4583024838 -2239218.11253101, 99738.5583551263 -2239218.11253101, 99738.5583551263 -2239218.21258365, 99738.6584077689 -2239218.21258365, 99738.6584077689 -2239218.11253101, 99738.7584604114 -2239218.11253101, 99738.7584604114 -2239218.41268893, 99738.858513054 -2239218.41268893, 99738.858513054 -2239218.31263629, 99738.9585656965 -2239218.31263629, 99738.9585656965 -2239218.21258365, 99738.858513054 -2239218.21258365, 99738.858513054 -2239217.91242572, 99738.9585656965 -2239217.91242572, 99738.9585656965 -2239218.01247836, 99739.1586709816 -2239218.01247836, 99739.1586709816 -2239217.91242572, 99739.2587236242 -2239217.91242572, 99739.2587236242 -2239218.01247836, 99739.3587762667 -2239218.01247836, 99739.3587762667 -2239218.11253101, 99739.4588289093 -2239218.11253101, 99739.4588289093 -2239217.91242572, 99739.5588815519 -2239217.91242572, 99739.5588815519 -2239218.01247836, 99739.6589341944 -2239218.01247836, 99739.6589341944 -2239217.81237308, 99739.8590394795 -2239217.81237308, 99739.8590394795 -2239217.71232044, 99740.0591447646 -2239217.71232044, 99740.0591447646 -2239217.61226779, 99740.1591974072 -2239217.61226779, 99740.1591974072 -2239217.71232044, 99740.2592500497 -2239217.71232044, 99740.2592500497 -2239217.51221515, 99740.0591447646 -2239217.51221515, 99740.0591447646 -2239217.41216251, 99740.2592500497 -2239217.41216251, 99740.2592500497 -2239217.21205722, 99740.3593026923 -2239217.21205722, 99740.3593026923 -2239217.01195194, 99740.2592500497 -2239217.01195194, 99740.2592500497 -2239217.11200458, 99740.1591974072 -2239217.11200458, 99740.1591974072 -2239217.01195194, 99740.0591447646 -2239217.01195194, 99740.0591447646 -2239217.31210987, 99739.8590394795 -2239217.31210987, 99739.8590394795 -2239217.41216251, 99739.6589341944 -2239217.41216251, 99739.6589341944 -2239217.51221515, 99739.4588289093 -2239217.51221515, 99739.4588289093 -2239217.61226779, 99738.9585656965 -2239217.61226779, 99738.9585656965 -2239217.51221515, 99738.7584604114 -2239217.51221515, 99738.7584604114 -2239217.41216251, 99738.5583551263 -2239217.41216251, 99738.5583551263 -2239217.31210987, 99738.4583024838 -2239217.31210987, 99738.4583024838 -2239217.21205722, 99738.6584077689 -2239217.21205722, 99738.6584077689 -2239217.11200458, 99738.9585656965 -2239217.11200458, 99738.9585656965 -2239217.01195194, 99738.7584604114 -2239217.01195194, 99738.7584604114 -2239216.9118993, 99738.3582498412 -2239216.9118993, 99738.3582498412 -2239217.01195194, 99738.2581971987 -2239217.01195194, 99738.2581971987 -2239216.9118993, 99738.1581445561 -2239216.9118993, 99738.1581445561 -2239217.01195194, 99738.0580919136 -2239217.01195194, 99738.0580919136 -2239216.9118993, 99737.8579866284 -2239216.9118993, 99737.8579866284 -2239216.61174137, 99737.6578813433 -2239216.61174137, 99737.6578813433 -2239216.41163608, 99737.4577760582 -2239216.41163608, 99737.4577760582 -2239216.2115308, 99737.2576707731 -2239216.2115308, 99737.2576707731 -2239215.81132023, 99737.057565488 -2239215.81132023, 99737.057565488 -2239215.41110966, 99736.9575128455 -2239215.41110966, 99736.9575128455 -2239215.31105701, 99736.8574602029 -2239215.31105701, 99736.8574602029 -2239215.01089909, 99736.9575128455 -2239215.01089909, 99736.9575128455 -2239214.91084644, 99737.057565488 -2239214.91084644, 99737.057565488 -2239214.8107938, 99737.1576181306 -2239214.8107938, 99737.1576181306 -2239214.71074116, 99737.3577234157 -2239214.71074116, 99737.3577234157 -2239214.61068852, 99737.6578813433 -2239214.61068852, 99737.6578813433 -2239214.41058323, 99737.8579866284 -2239214.41058323, 99737.8579866284 -2239214.31053059, 99737.958039271 -2239214.31053059, 99737.958039271 -2239214.1104253, 99737.5578287008 -2239214.1104253, 99737.5578287008 -2239214.21047795, 99737.4577760582 -2239214.21047795, 99737.4577760582 -2239214.01037266, 99737.6578813433 -2239214.01037266, 99737.6578813433 -2239213.91032002, 99737.7579339859 -2239213.91032002, 99737.7579339859 -2239213.71021473, 99737.8579866284 -2239213.71021473, 99737.8579866284 -2239213.61016209, 99737.7579339859 -2239213.61016209, 99737.7579339859 -2239213.51010945, 99737.8579866284 -2239213.51010945, 99737.8579866284 -2239213.41005681, 99737.958039271 -2239213.41005681, 99737.958039271 -2239213.31000416, 99737.8579866284 -2239213.31000416, 99737.8579866284 -2239213.20995152, 99737.7579339859 -2239213.20995152, 99737.7579339859 -2239213.31000416, 99737.5578287008 -2239213.31000416, 99737.5578287008 -2239213.10989888, 99737.3577234157 -2239213.10989888, 99737.3577234157 -2239212.90979359, 99737.4577760582 -2239212.90979359, 99737.4577760582 -2239212.80974095, 99737.3577234157 -2239212.80974095, 99737.3577234157 -2239212.70968831, 99737.2576707731 -2239212.70968831, 99737.2576707731 -2239212.30947774, 99737.057565488 -2239212.30947774, 99737.057565488 -2239212.2094251, 99736.9575128455 -2239212.2094251, 99736.9575128455 -2239212.10937245, 99737.057565488 -2239212.10937245, 99737.057565488 -2239212.00931981, 99737.1576181306 -2239212.00931981, 99737.1576181306 -2239212.10937245, 99737.2576707731 -2239212.10937245, 99737.2576707731 -2239212.2094251, 99737.3577234157 -2239212.2094251, 99737.3577234157 -2239212.40953038, 99737.4577760582 -2239212.40953038, 99737.4577760582 -2239212.30947774, 99737.5578287008 -2239212.30947774, 99737.5578287008 -2239212.2094251, 99737.6578813433 -2239212.2094251, 99737.6578813433 -2239212.10937245, 99737.5578287008 -2239212.10937245, 99737.5578287008 -2239212.00931981, 99737.4577760582 -2239212.00931981, 99737.4577760582 -2239211.90926717, 99737.2576707731 -2239211.90926717, 99737.2576707731 -2239211.80921452, 99737.1576181306 -2239211.80921452, 99737.1576181306 -2239211.70916188, 99737.057565488 -2239211.70916188, 99737.057565488 -2239211.60910924, 99736.9575128455 -2239211.60910924, 99736.9575128455 -2239211.5090566, 99736.7574075604 -2239211.5090566, 99736.7574075604 -2239211.40900395, 99736.5573022753 -2239211.40900395, 99736.5573022753 -2239211.00879338, 99736.4572496327 -2239211.00879338, 99736.4572496327 -2239210.90874074, 99736.157091705 -2239210.90874074, 99736.157091705 -2239210.8086881, 99736.2571443476 -2239210.8086881, 99736.2571443476 -2239210.60858281, 99736.3571969901 -2239210.60858281, 99736.3571969901 -2239210.40847753, 99736.2571443476 -2239210.40847753, 99736.2571443476 -2239210.50853017, 99736.0570390625 -2239210.50853017, 99736.0570390625 -2239210.40847753, 99736.157091705 -2239210.40847753, 99736.157091705 -2239210.30842489, 99735.9569864199 -2239210.30842489, 99735.9569864199 -2239210.20837224, 99736.0570390625 -2239210.20837224, 99736.0570390625 -2239209.90821432, 99735.8569337774 -2239209.90821432, 99735.8569337774 -2239209.80816167, 99735.9569864199 -2239209.80816167, 99735.9569864199 -2239209.60805639, 99735.8569337774 -2239209.60805639, 99735.8569337774 -2239209.50800375, 99735.7568811348 -2239209.50800375, 99735.7568811348 -2239209.4079511, 99735.8569337774 -2239209.4079511, 99735.8569337774 -2239209.30789846, 99735.7568811348 -2239209.30789846, 99735.7568811348 -2239209.20784582, 99735.6568284923 -2239209.20784582, 99735.6568284923 -2239209.00774053, 99735.7568811348 -2239209.00774053, 99735.7568811348 -2239208.80763525, 99735.6568284923 -2239208.80763525, 99735.6568284923 -2239208.60752996, 99735.5567758497 -2239208.60752996, 99735.5567758497 -2239208.50747732, 99735.6568284923 -2239208.50747732, 99735.6568284923 -2239208.40742468, 99735.5567758497 -2239208.40742468, 99735.5567758497 -2239208.30737204, 99735.4567232072 -2239208.30737204, 99735.4567232072 -2239208.20731939, 99735.5567758497 -2239208.20731939, 99735.5567758497 -2239208.00721411, 99735.4567232072 -2239208.00721411, 99735.4567232072 -2239207.90716147, 99735.3566705646 -2239207.90716147, 99735.3566705646 -2239207.70705618, 99735.4567232072 -2239207.70705618, 99735.4567232072 -2239207.50695089, 99735.3566705646 -2239207.50695089, 99735.3566705646 -2239207.40689825, 99735.4567232072 -2239207.40689825, 99735.4567232072 -2239207.30684561, 99735.2566179221 -2239207.30684561, 99735.2566179221 -2239207.20679297, 99735.3566705646 -2239207.20679297, 99735.3566705646 -2239207.10674032, 99735.1565652795 -2239207.10674032, 99735.1565652795 -2239207.30684561, 99735.0565126369 -2239207.30684561, 99735.0565126369 -2239207.00668768, 99734.9564599944 -2239207.00668768, 99734.9564599944 -2239207.40689825, 99734.8564073518 -2239207.40689825, 99734.8564073518 -2239207.00668768, 99734.7563547093 -2239207.00668768, 99734.7563547093 -2239206.90663504, 99734.6563020667 -2239206.90663504, 99734.6563020667 -2239206.8065824, 99734.5562494242 -2239206.8065824, 99734.5562494242 -2239206.70652975, 99734.2560914965 -2239206.70652975, 99734.2560914965 -2239206.60647711, 99734.3561441391 -2239206.60647711, 99734.3561441391 -2239206.30631918, 99734.156038854 -2239206.30631918, 99734.156038854 -2239206.20626654, 99734.0559862114 -2239206.20626654, 99734.0559862114 -2239206.1062139, 99734.2560914965 -2239206.1062139, 99734.2560914965 -2239205.90610861, 99734.3561441391 -2239205.90610861, 99734.3561441391 -2239205.80605597, 99734.4561967816 -2239205.80605597, 99734.4561967816 -2239205.70600333, 99734.6563020667 -2239205.70600333, 99734.6563020667 -2239205.80605597, 99734.8564073518 -2239205.80605597, 99734.8564073518 -2239205.30579276, 99734.3561441391 -2239205.30579276, 99734.3561441391 -2239205.10568747, 99734.0559862114 -2239205.10568747, 99734.0559862114 -2239205.00563483, 99733.8558809263 -2239205.00563483, 99733.8558809263 -2239204.90558219, 99733.6557756412 -2239204.90558219, 99733.6557756412 -2239204.80552955, 99733.4556703561 -2239204.80552955, 99733.4556703561 -2239204.7054769, 99733.3556177135 -2239204.7054769, 99733.3556177135 -2239204.60542426, 99733.1555124284 -2239204.60542426, 99733.1555124284 -2239204.50537162, 99732.8553545008 -2239204.50537162, 99732.8553545008 -2239204.60542426, 99732.7553018582 -2239204.60542426, 99732.7553018582 -2239204.90558219, 99732.5551965731 -2239204.90558219, 99732.5551965731 -2239205.00563483, 99732.4551439306 -2239205.00563483, 99732.4551439306 -2239205.10568747, 99732.355091288 -2239205.10568747, 99732.355091288 -2239205.20574012, 99732.1549860029 -2239205.20574012, 99732.1549860029 -2239205.30579276, 99731.9548807178 -2239205.30579276, 99731.9548807178 -2239205.4058454, 99731.454617505 -2239205.4058454, 99731.454617505 -2239205.50589804, 99731.0544069348 -2239205.50589804, 99731.0544069348 -2239205.60595069, 99730.8543016497 -2239205.60595069, 99730.8543016497 -2239205.70600333, 99730.7542490072 -2239205.70600333, 99730.7542490072 -2239205.80605597, 99730.554143722 -2239205.80605597, 99730.554143722 -2239205.90610861, 99730.4540910795 -2239205.90610861, 99730.4540910795 -2239206.00616126, 99730.3540384369 -2239206.00616126, 99730.3540384369 -2239206.50642447, 99730.2539857944 -2239206.50642447, 99730.2539857944 -2239206.70652975, 99730.1539331518 -2239206.70652975, 99730.1539331518 -2239206.8065824, 99729.9538278667 -2239206.8065824, 99729.9538278667 -2239206.90663504, 99729.5536172965 -2239206.90663504, 99729.5536172965 -2239207.00668768, 99729.3535120114 -2239207.00668768, 99729.3535120114 -2239207.10674032, 99729.2534593688 -2239207.10674032, 99729.2534593688 -2239207.20679297, 99729.0533540837 -2239207.20679297, 99729.0533540837 -2239207.30684561, 99728.9533014412 -2239207.30684561, 99728.9533014412 -2239207.40689825, 99728.8532487986 -2239207.40689825, 99728.8532487986 -2239207.50695089, 99728.7531961561 -2239207.50695089, 99728.7531961561 -2239207.60700354, 99728.6531435135 -2239207.60700354, 99728.6531435135 -2239208.10726675, 99728.553090871 -2239208.10726675, 99728.553090871 -2239208.30737204, 99728.4530382284 -2239208.30737204, 99728.4530382284 -2239208.50747732, 99728.6531435135 -2239208.50747732, 99728.6531435135 -2239208.60752996, 99728.2529329433 -2239208.60752996, 99728.2529329433 -2239208.70758261, 99727.8527223731 -2239208.70758261, 99727.8527223731 -2239208.60752996, 99727.5525644454 -2239208.60752996, 99727.5525644454 -2239208.70758261, 99727.4525118029 -2239208.70758261, 99727.4525118029 -2239208.60752996, 99726.4519853773 -2239208.60752996, 99726.4519853773 -2239208.70758261, 99726.2518800922 -2239208.70758261, 99726.2518800922 -2239208.80763525, 99726.1518274497 -2239208.80763525, 99726.1518274497 -2239208.90768789, 99726.0517748071 -2239208.90768789, 99726.0517748071 -2239209.00774053, 99725.9517221646 -2239209.00774053, 99725.9517221646 -2239209.10779318, 99725.851669522 -2239209.10779318, 99725.851669522 -2239209.20784582, 99725.7516168795 -2239209.20784582, 99725.7516168795 -2239209.4079511, 99725.6515642369 -2239209.4079511, 99725.6515642369 -2239209.50800375, 99725.7516168795 -2239209.50800375, 99725.7516168795 -2239209.60805639, 99725.6515642369 -2239209.60805639, 99725.6515642369 -2239209.90821432, 99725.5515115944 -2239209.90821432, 99725.5515115944 -2239210.50853017, 99725.4514589518 -2239210.50853017, 99725.4514589518 -2239211.20889867, 99725.5515115944 -2239211.20889867, 99725.5515115944 -2239211.40900395, 99725.6515642369 -2239211.40900395, 99725.6515642369 -2239211.5090566, 99725.7516168795 -2239211.5090566, 99725.7516168795 -2239211.40900395, 99725.851669522 -2239211.40900395, 99725.851669522 -2239211.10884603, 99725.9517221646 -2239211.10884603, 99725.9517221646 -2239210.90874074, 99726.0517748071 -2239210.90874074, 99726.0517748071 -2239210.20837224, 99726.1518274497 -2239210.20837224, 99726.1518274497 -2239210.1083196, 99726.2518800922 -2239210.1083196, 99726.2518800922 -2239210.00826696, 99726.4519853773 -2239210.00826696, 99726.4519853773 -2239209.90821432, 99726.6520906625 -2239209.90821432, 99726.6520906625 -2239210.00826696, 99726.9522485901 -2239210.00826696, 99726.9522485901 -2239210.1083196, 99727.1523538752 -2239210.1083196, 99727.1523538752 -2239210.20837224, 99727.7526697305 -2239210.20837224, 99727.7526697305 -2239210.1083196, 99728.6531435135 -2239210.1083196, 99728.6531435135 -2239210.00826696, 99728.7531961561 -2239210.00826696, 99728.7531961561 -2239210.1083196, 99729.0533540837 -2239210.1083196, 99729.0533540837 -2239210.20837224, 99729.1534067263 -2239210.20837224, 99729.1534067263 -2239210.00826696, 99728.9533014412 -2239210.00826696, 99728.9533014412 -2239209.90821432, 99729.1534067263 -2239209.90821432, 99729.1534067263 -2239209.80816167, 99728.9533014412 -2239209.80816167, 99728.9533014412 -2239209.70810903, 99728.8532487986 -2239209.70810903, 99728.8532487986 -2239209.60805639, 99728.9533014412 -2239209.60805639, 99728.9533014412 -2239209.4079511, 99728.8532487986 -2239209.4079511, 99728.8532487986 -2239209.30789846, 99728.9533014412 -2239209.30789846, 99728.9533014412 -2239209.00774053, 99729.0533540837 -2239209.00774053, 99729.0533540837 -2239208.90768789, 99729.5536172965 -2239208.90768789, 99729.5536172965 -2239208.80763525, 99729.7537225816 -2239208.80763525, 99729.7537225816 -2239208.90768789, 99729.8537752242 -2239208.90768789, 99729.8537752242 -2239209.00774053, 99729.9538278667 -2239209.00774053, 99729.9538278667 -2239209.10779318, 99730.1539331518 -2239209.10779318, 99730.1539331518 -2239209.30789846, 99730.0538805093 -2239209.30789846, 99730.0538805093 -2239209.4079511, 99730.1539331518 -2239209.4079511, 99730.1539331518 -2239209.50800375, 99730.0538805093 -2239209.50800375, 99730.0538805093 -2239209.80816167, 99729.9538278667 -2239209.80816167, 99729.9538278667 -2239210.00826696, 99729.8537752242 -2239210.00826696, 99729.8537752242 -2239210.1083196, 99729.7537225816 -2239210.1083196, 99729.7537225816 -2239210.20837224, 99729.5536172965 -2239210.20837224, 99729.5536172965 -2239210.1083196, 99729.3535120114 -2239210.1083196, 99729.3535120114 -2239210.30842489, 99729.2534593688 -2239210.30842489, 99729.2534593688 -2239210.40847753, 99729.3535120114 -2239210.40847753, 99729.3535120114 -2239210.8086881, 99729.4535646539 -2239210.8086881, 99729.4535646539 -2239210.90874074, 99729.3535120114 -2239210.90874074, 99729.3535120114 -2239211.00879338, 99729.1534067263 -2239211.00879338, 99729.1534067263 -2239211.10884603, 99728.7531961561 -2239211.10884603, 99728.7531961561 -2239211.20889867, 99727.9527750156 -2239211.20889867, 99727.9527750156 -2239211.30895131, 99727.652617088 -2239211.30895131, 99727.652617088 -2239211.40900395, 99727.4525118029 -2239211.40900395, 99727.4525118029 -2239211.5090566, 99727.3524591603 -2239211.5090566, 99727.3524591603 -2239211.70916188, 99727.4525118029 -2239211.70916188, 99727.4525118029 -2239211.80921452, 99727.652617088 -2239211.80921452, 99727.652617088 -2239211.90926717, 99727.8527223731 -2239211.90926717, 99727.8527223731 -2239212.00931981, 99728.4530382284 -2239212.00931981, 99728.4530382284 -2239212.10937245, 99728.553090871 -2239212.10937245, 99728.553090871 -2239212.00931981, 99728.7531961561 -2239212.00931981, 99728.7531961561 -2239212.10937245, 99729.1534067263 -2239212.10937245, 99729.1534067263 -2239212.2094251, 99729.3535120114 -2239212.2094251, 99729.3535120114 -2239212.30947774, 99729.4535646539 -2239212.30947774, 99729.4535646539 -2239212.50958302, 99729.5536172965 -2239212.50958302, 99729.5536172965 -2239212.60963567, 99729.6536699391 -2239212.60963567, 99729.6536699391 -2239212.70968831, 99729.9538278667 -2239212.70968831, 99729.9538278667 -2239212.80974095, 99730.3540384369 -2239212.80974095, 99730.3540384369 -2239212.90979359, 99730.554143722 -2239212.90979359, 99730.554143722 -2239213.00984624, 99730.7542490072 -2239213.00984624, 99730.7542490072 -2239212.90979359, 99730.8543016497 -2239212.90979359, 99730.8543016497 -2239213.00984624, 99730.9543542922 -2239213.00984624, 99730.9543542922 -2239213.20995152, 99731.0544069348 -2239213.20995152, 99731.0544069348 -2239213.10989888, 99731.1544595774 -2239213.10989888, 99731.1544595774 -2239213.31000416, 99731.3545648625 -2239213.31000416, 99731.3545648625 -2239213.41005681, 99731.454617505 -2239213.41005681, 99731.454617505 -2239213.51010945, 99731.5546701476 -2239213.51010945, 99731.5546701476 -2239213.61016209, 99731.6547227901 -2239213.61016209, 99731.6547227901 -2239213.81026738, 99731.7547754327 -2239213.81026738, 99731.7547754327 -2239213.91032002, 99731.8548280752 -2239213.91032002, 99731.8548280752 -2239214.1104253, 99731.9548807178 -2239214.1104253, 99731.9548807178 -2239214.31053059, 99732.0549333603 -2239214.31053059, 99732.0549333603 -2239214.41058323, 99731.9548807178 -2239214.41058323, 99731.9548807178 -2239214.51063587, 99732.0549333603 -2239214.51063587, 99732.0549333603 -2239214.71074116, 99732.1549860029 -2239214.71074116, 99732.1549860029 -2239214.91084644, 99732.2550386455 -2239214.91084644, 99732.2550386455 -2239215.11095173, 99732.355091288 -2239215.11095173, 99732.355091288 -2239215.31105701, 99732.4551439306 -2239215.31105701, 99732.4551439306 -2239215.41110966, 99732.355091288 -2239215.41110966, 99732.355091288 -2239215.5111623, 99732.4551439306 -2239215.5111623, 99732.4551439306 -2239215.71126758, 99732.355091288 -2239215.71126758, 99732.355091288 -2239215.91137287, 99732.4551439306 -2239215.91137287, 99732.4551439306 -2239216.01142551, 99732.355091288 -2239216.01142551, 99732.355091288 -2239216.11147815, 99732.2550386455 -2239216.11147815, 99732.2550386455 -2239216.2115308, 99732.355091288 -2239216.2115308, 99732.355091288 -2239216.31158344, 99732.2550386455 -2239216.31158344, 99732.2550386455 -2239216.61174137, 99732.1549860029 -2239216.61174137, 99732.1549860029 -2239217.01195194, 99732.0549333603 -2239217.01195194, 99732.0549333603 -2239217.21205722, 99732.1549860029 -2239217.21205722, 99732.1549860029 -2239217.31210987, 99732.4551439306 -2239217.31210987, 99732.4551439306 -2239217.41216251, 99732.5551965731 -2239217.41216251, 99732.5551965731 -2239217.31210987, 99732.7553018582 -2239217.31210987, 99732.7553018582 -2239217.41216251, 99732.8553545008 -2239217.41216251, 99732.8553545008 -2239217.51221515, 99732.9554071433 -2239217.51221515, 99732.9554071433 -2239217.31210987, 99733.1555124284 -2239217.31210987, 99733.1555124284 -2239217.41216251, 99733.255565071 -2239217.41216251, 99733.255565071 -2239217.31210987, 99733.4556703561 -2239217.31210987, 99733.4556703561 -2239217.41216251, 99733.5557229986 -2239217.41216251, 99733.5557229986 -2239217.31210987, 99733.6557756412 -2239217.31210987, 99733.6557756412 -2239217.21205722, 99733.8558809263 -2239217.21205722, 99733.8558809263 -2239217.11200458, 99733.9559335689 -2239217.11200458, 99733.9559335689 -2239217.01195194, 99734.0559862114 -2239217.01195194, 99734.0559862114 -2239217.21205722, 99734.156038854 -2239217.21205722, 99734.156038854 -2239217.11200458, 99734.2560914965 -2239217.11200458, 99734.2560914965 -2239217.21205722, 99734.3561441391 -2239217.21205722, 99734.3561441391 -2239217.11200458, 99734.4561967816 -2239217.11200458, 99734.4561967816 -2239217.01195194, 99734.3561441391 -2239217.01195194, 99734.3561441391 -2239216.9118993, 99734.4561967816 -2239216.9118993, 99734.4561967816 -2239216.81184665, 99734.6563020667 -2239216.81184665, 99734.6563020667 -2239216.9118993, 99734.5562494242 -2239216.9118993, 99734.5562494242 -2239217.01195194, 99734.6563020667 -2239217.01195194, 99734.6563020667 -2239217.11200458, 99734.7563547093 -2239217.11200458, 99734.7563547093 -2239217.01195194, 99734.8564073518 -2239217.01195194, 99734.8564073518 -2239217.11200458, 99735.3566705646 -2239217.11200458, 99735.3566705646 -2239217.21205722, 99735.7568811348 -2239217.21205722, 99735.7568811348 -2239217.31210987, 99735.6568284923 -2239217.31210987, 99735.6568284923 -2239217.41216251, 99735.5567758497 -2239217.41216251, 99735.5567758497 -2239217.61226779, 99735.7568811348 -2239217.61226779, 99735.7568811348 -2239217.71232044, 99735.9569864199 -2239217.71232044, 99735.9569864199 -2239218.01247836, 99735.8569337774 -2239218.01247836, 99735.8569337774 -2239218.11253101, 99735.9569864199 -2239218.11253101, 99735.9569864199 -2239218.21258365, 99736.0570390625 -2239218.21258365, 99736.0570390625 -2239218.41268893, 99735.9569864199 -2239218.41268893, 99735.9569864199 -2239218.61279422, 99736.0570390625 -2239218.61279422, 99736.0570390625 -2239218.71284686, 99735.9569864199 -2239218.71284686, 99735.9569864199 -2239218.8128995, 99736.0570390625 -2239218.8128995, 99736.0570390625 -2239218.91295215, 99736.3571969901 -2239218.91295215, 99736.3571969901 -2239219.01300479, 99736.4572496327 -2239219.01300479, 99736.4572496327 -2239219.11305743)) buffer-0.35: see http://trac.osgeo.org/geos/wiki/BufferRobustness POLYGON ((99725.2015115944 -2239210.264040296, 99725.2015115944 -2239209.90821432, 99725.20823674626 -2239209.839932707, 99725.22815375803 -2239209.7742751185, 99725.26049723009 -2239209.7137647383, 99725.3015642369 -2239209.663724446, 99725.3015642369 -2239209.60805639, 99725.30649139937 -2239209.5580300703, 99725.3015642369 -2239209.50800375, 99725.3015642369 -2239209.4079511, 99725.30828938876 -2239209.339669487, 99725.32820640053 -2239209.2740118983, 99725.3605498726 -2239209.213501518, 99725.40407686349 -2239209.1604637266, 99725.40647766467 -2239209.15849344, 99725.40834203135 -2239209.1395642073, 99725.42825904312 -2239209.0739066186, 99725.46060251519 -2239209.0133962384, 99725.50412950608 -2239208.960358447, 99725.55716729794 -2239208.9168314557, 99725.55944024482 -2239208.9156165402, 99725.5606551577 -2239208.913343598, 99725.60418214859 -2239208.8603058066, 99725.65721994045 -2239208.8167788154, 99725.65949288048 -2239208.8155639037, 99725.66070780029 -2239208.8132909485, 99725.70423479118 -2239208.760253157, 99725.75727258304 -2239208.7167261657, 99725.75954552992 -2239208.7155112503, 99725.76076044279 -2239208.713238308, 99725.80428743368 -2239208.6602005167, 99725.85732522554 -2239208.6166735254, 99725.85959817292 -2239208.6154586095, 99725.8608130854 -2239208.6131856684, 99725.90434007629 -2239208.560147877, 99725.95737786815 -2239208.5166208856, 99725.95965081536 -2239208.51540597, 99725.96086572789 -2239208.5131330285, 99726.00439271878 -2239208.460095237, 99726.05743051064 -2239208.4165682457, 99726.11794089086 -2239208.384224774, 99726.18359847949 -2239208.364307762, 99726.2025277112 -2239208.3624433954, 99726.20449800388 -2239208.360042587, 99726.25753579574 -2239208.3165155957, 99726.31804617596 -2239208.2841721238, 99726.38370376459 -2239208.264255112, 99726.4519853773 -2239208.25752996, 99727.4525118029 -2239208.25752996, 99727.50253812416 -2239208.2624571226, 99727.5525644454 -2239208.25752996, 99727.8527223731 -2239208.25752996, 99727.92100398582 -2239208.264255112, 99727.98666157444 -2239208.2841721238, 99728.04717195466 -2239208.3165155957, 99728.0528276582 -2239208.321157112, 99728.05848336175 -2239208.3165155957, 99728.10456354666 -2239208.2918852237, 99728.10976338026 -2239208.2390904273, 99728.12968039203 -2239208.1734328386, 99728.16202386409 -2239208.1129224584, 99728.20555085498 -2239208.059884667, 99728.20795165507 -2239208.0579143814, 99728.20981602286 -2239208.0389851374, 99728.22973303463 -2239207.9733275487, 99728.2620765067 -2239207.9128171685, 99728.30314351349 -2239207.8627768764, 99728.30314351349 -2239207.60700354, 99728.30986866535 -2239207.538721927, 99728.32978567712 -2239207.4730643383, 99728.36212914919 -2239207.412553958, 99728.40565614008 -2239207.3595161666, 99728.45869393194 -2239207.3159891753, 99728.460966872 -2239207.3147742637, 99728.4621817918 -2239207.3125013085, 99728.50570878269 -2239207.259463517, 99728.55874657455 -2239207.2159365257, 99728.56101952141 -2239207.2147216103, 99728.56223443428 -2239207.212448668, 99728.60576142518 -2239207.1594108767, 99728.65879921704 -2239207.1158838854, 99728.66107216441 -2239207.1146689695, 99728.66228707689 -2239207.1123960284, 99728.70581406778 -2239207.059358237, 99728.75885185965 -2239207.0158312456, 99728.76112480687 -2239207.01461633, 99728.7623397194 -2239207.0123433885, 99728.80586671029 -2239206.959305597, 99728.85890450215 -2239206.9157786057, 99728.91941488237 -2239206.883435134, 99728.985072471 -2239206.863518122, 99729.0040017027 -2239206.8616537554, 99729.00597199539 -2239206.859252947, 99729.05900978725 -2239206.8157259556, 99729.06128273426 -2239206.81451104, 99729.06249764709 -2239206.812238098, 99729.10602463798 -2239206.7592003066, 99729.15906242984 -2239206.7156733153, 99729.21957281006 -2239206.6833298435, 99729.28523039869 -2239206.6634128317, 99729.30415963955 -2239206.661548464, 99729.30612992308 -2239206.659147667, 99729.35916771494 -2239206.6156206755, 99729.41967809516 -2239206.5832772036, 99729.48533568378 -2239206.563360192, 99729.5536172965 -2239206.55663504, 99729.70933799617 -2239206.55663504, 99729.75937828515 -2239206.5155680357, 99729.81988866537 -2239206.4832245638, 99729.885546254 -2239206.463307552, 99729.9044754857 -2239206.4614431853, 99729.90644577838 -2239206.459042377, 99729.90884657952 -2239206.4570720904, 99729.91071094626 -2239206.438142857, 99729.93062795803 -2239206.3724852684, 99729.9629714301 -2239206.311974888, 99730.00403843689 -2239206.261934596, 99730.00403843689 -2239206.00616126, 99730.01076358875 -2239205.937879647, 99730.03068060052 -2239205.8722220585, 99730.06302407259 -2239205.8117116783, 99730.10655106348 -2239205.758673887, 99730.15958885534 -2239205.7151468955, 99730.16186179504 -2239205.713931984, 99730.1630767152 -2239205.711659028, 99730.20660370609 -2239205.6586212367, 99730.25964149795 -2239205.6150942454, 99730.26191444516 -2239205.61387933, 99730.26312935769 -2239205.6116063884, 99730.30665634858 -2239205.558568597, 99730.35969414044 -2239205.5150416056, 99730.42020452066 -2239205.4826981337, 99730.48586210929 -2239205.462781122, 99730.50479135025 -2239205.4609167543, 99730.50676163378 -2239205.458515957, 99730.55979942564 -2239205.4149889657, 99730.56207237252 -2239205.4137740503, 99730.56328728539 -2239205.411501108, 99730.60681427628 -2239205.3584633167, 99730.65985206814 -2239205.3149363254, 99730.72036244837 -2239205.2825928535, 99730.78602003699 -2239205.262675842, 99730.8049492687 -2239205.260811475, 99730.80691956138 -2239205.2584106666, 99730.85995735324 -2239205.2148836753, 99730.92046773346 -2239205.1825402034, 99730.98612532209 -2239205.1626231917, 99731.0544069348 -2239205.1558980397, 99731.21012763448 -2239205.1558980397, 99731.26016792345 -2239205.1148310355, 99731.32067830367 -2239205.0824875636, 99731.3863358923 -2239205.062570552, 99731.454617505 -2239205.0558454, 99731.71039084728 -2239205.0558454, 99731.76043113625 -2239205.0147783956, 99731.82094151647 -2239204.9824349238, 99731.8865991051 -2239204.962517912, 99731.90552834554 -2239204.9606535444, 99731.90749862949 -2239204.9582527466, 99731.96053642135 -2239204.9147257553, 99732.02104680157 -2239204.8823822835, 99732.0867043902 -2239204.8624652717, 99732.10563362233 -2239204.860600905, 99732.10760391458 -2239204.858200097, 99732.16064170645 -2239204.8146731057, 99732.16291465345 -2239204.8134581903, 99732.16412956628 -2239204.811185248, 99732.20765655718 -2239204.7581474567, 99732.26069434904 -2239204.7146204654, 99732.26296729626 -2239204.71340555, 99732.26418220879 -2239204.7111326084, 99732.30770919968 -2239204.658094817, 99732.36074699154 -2239204.6145678256, 99732.4068271754 -2239204.589937454, 99732.41202701005 -2239204.537142647, 99732.43194402182 -2239204.4714850583, 99732.46428749389 -2239204.410974678, 99732.50781448478 -2239204.3579368866, 99732.56085227664 -2239204.3144098953, 99732.56312522401 -2239204.3131949794, 99732.5643401365 -2239204.3109220383, 99732.60786712739 -2239204.2578842468, 99732.66090491925 -2239204.2143572555, 99732.72141529947 -2239204.1820137836, 99732.7870728881 -2239204.162096772, 99732.8553545008 -2239204.15537162, 99733.1555124284 -2239204.15537162, 99733.22379404111 -2239204.162096772, 99733.28945162974 -2239204.1820137836, 99733.34996200996 -2239204.2143572555, 99733.40299980182 -2239204.2578842468, 99733.40497008535 -2239204.260285044, 99733.42389932621 -2239204.2621494117, 99733.48955691484 -2239204.2820664234, 99733.55006729506 -2239204.3144098953, 99733.60310508692 -2239204.3579368866, 99733.64663207781 -2239204.410974678, 99733.64784699064 -2239204.41324762, 99733.65011993765 -2239204.4144625356, 99733.70315772951 -2239204.457989527, 99733.7051280222 -2239204.4603903354, 99733.7240572539 -2239204.462254702, 99733.78971484253 -2239204.482171714, 99733.85022522275 -2239204.5145151857, 99733.90326301461 -2239204.558042177, 99733.90523329814 -2239204.5604429743, 99733.92416253901 -2239204.562307342, 99733.98982012764 -2239204.5822243537, 99734.05033050786 -2239204.6145678256, 99734.10336829972 -2239204.658094817, 99734.10533858325 -2239204.660495614, 99734.12426782411 -2239204.662359982, 99734.18992541273 -2239204.6822769935, 99734.25043579296 -2239204.7146204654, 99734.3004760825 -2239204.75568747, 99734.3561441391 -2239204.75568747, 99734.42442575181 -2239204.762412622, 99734.49008334044 -2239204.782329634, 99734.55059372066 -2239204.8146731057, 99734.60363151252 -2239204.858200097, 99734.64715850342 -2239204.9112378885, 99734.67097357841 -2239204.95579276, 99734.8564073518 -2239204.95579276, 99734.92468896451 -2239204.962517912, 99734.99034655314 -2239204.9824349238, 99735.05085693336 -2239205.0147783956, 99735.10389472522 -2239205.058305387, 99735.14742171612 -2239205.1113431784, 99735.17976518818 -2239205.1718535586, 99735.19968219995 -2239205.2375111473, 99735.20640735181 -2239205.30579276, 99735.20640735181 -2239205.80605597, 99735.19968219995 -2239205.874337583, 99735.17976518818 -2239205.9399951715, 99735.14742171612 -2239206.0005055517, 99735.10389472522 -2239206.053543343, 99735.05085693336 -2239206.0970703345, 99734.99034655314 -2239206.1294138064, 99734.92468896451 -2239206.149330818, 99734.8564073518 -2239206.15605597, 99734.67077661124 -2239206.15605597, 99734.67950197548 -2239206.1723799785, 99734.69941898725 -2239206.238037567, 99734.70614413911 -2239206.30631918, 99734.70614413911 -2239206.3917003134, 99734.75069900576 -2239206.4155153856, 99734.80373679762 -2239206.459042377, 99734.84726378851 -2239206.5120801684, 99734.8484787087 -2239206.514353124, 99734.85075164825 -2239206.5155680357, 99734.90378944011 -2239206.559095027, 99734.947316431 -2239206.6121328184, 99734.94853134349 -2239206.6144057596, 99734.95080429086 -2239206.6156206755, 99735.00084457983 -2239206.6566876797, 99735.0565126369 -2239206.6566876797, 99735.12479424961 -2239206.6634128317, 99735.19045183824 -2239206.6833298435, 99735.25096221846 -2239206.7156733153, 99735.301002508 -2239206.75674032, 99735.3566705646 -2239206.75674032, 99735.4249521773 -2239206.763465472, 99735.49060976593 -2239206.7833824838, 99735.55112014615 -2239206.8157259556, 99735.60415793801 -2239206.859252947, 99735.6476849289 -2239206.9122907384, 99735.68002840097 -2239206.9728011186, 99735.69994541274 -2239207.0384587073, 99735.70180978053 -2239207.0573879513, 99735.70421058062 -2239207.059358237, 99735.74773757151 -2239207.1123960284, 99735.78008104357 -2239207.1729064086, 99735.79999805534 -2239207.238563997, 99735.8067232072 -2239207.30684561, 99735.8067232072 -2239207.40689825, 99735.80179604473 -2239207.4569245703, 99735.8067232072 -2239207.50695089, 99735.8067232072 -2239207.70705618, 99735.80173959458 -2239207.757655648, 99735.80426322312 -2239207.7597267367, 99735.84779021401 -2239207.812764528, 99735.88013368608 -2239207.8732749084, 99735.90005069785 -2239207.938932497, 99735.90677584971 -2239208.00721411, 99735.90677584971 -2239208.1629348057, 99735.9478428566 -2239208.2129750983, 99735.98018632867 -2239208.2734854785, 99736.00010334044 -2239208.339143067, 99736.0068284923 -2239208.40742468, 99736.0068284923 -2239208.50747732, 99736.00190132983 -2239208.55750364, 99736.00196770823 -2239208.5581775913, 99736.00436850822 -2239208.560147877, 99736.04789549911 -2239208.6131856684, 99736.08023897118 -2239208.6736960486, 99736.10015598295 -2239208.739353637, 99736.10688113481 -2239208.80763525, 99736.10688113481 -2239209.00774053, 99736.1018975222 -2239209.058339998, 99736.10442115081 -2239209.060411087, 99736.1479481417 -2239209.1134488783, 99736.18029161377 -2239209.1739592585, 99736.20020862554 -2239209.239616847, 99736.2069337774 -2239209.30789846, 99736.2069337774 -2239209.3635665164, 99736.24800078421 -2239209.4136068085, 99736.28034425627 -2239209.4741171887, 99736.30026126804 -2239209.5397747774, 99736.3069864199 -2239209.60805639, 99736.3069864199 -2239209.6637244457, 99736.34805342682 -2239209.7137647383, 99736.38039689888 -2239209.7742751185, 99736.40031391065 -2239209.839932707, 99736.40703906251 -2239209.90821432, 99736.40703906251 -2239210.0633865455, 99736.4254786028 -2239210.065202682, 99736.49113619143 -2239210.0851196935, 99736.55164657165 -2239210.1174631654, 99736.60468436351 -2239210.1609901567, 99736.6482113544 -2239210.214027948, 99736.68055482647 -2239210.2745383284, 99736.70047183824 -2239210.340195917, 99736.7071969901 -2239210.40847753, 99736.7071969901 -2239210.60858281, 99736.70221337749 -2239210.659182278, 99736.70473700612 -2239210.6612533666, 99736.74826399701 -2239210.714291158, 99736.74947890984 -2239210.7165641002, 99736.75175185685 -2239210.7177790157, 99736.80478964871 -2239210.761306007, 99736.8483166396 -2239210.8143437984, 99736.88066011167 -2239210.8748541786, 99736.90057712344 -2239210.9405117673, 99736.9073022753 -2239211.00879338, 99736.9073022753 -2239211.0941745136, 99736.95185714196 -2239211.1179895857, 99737.00489493382 -2239211.161516577, 99737.00686522608 -2239211.163917385, 99737.02579445821 -2239211.1657817517, 99737.09145204684 -2239211.1856987635, 99737.15196242706 -2239211.2180422354, 99737.20500021892 -2239211.2615692266, 99737.24852720981 -2239211.314607018, 99737.24974212269 -2239211.3168799602, 99737.25201506955 -2239211.3180948757, 99737.30505286141 -2239211.361621867, 99737.3485798523 -2239211.4146596584, 99737.34979476478 -2239211.4169325996, 99737.35206771216 -2239211.4181475155, 99737.40510550402 -2239211.461674507, 99737.44863249491 -2239211.5147122983, 99737.44984740744 -2239211.51698524, 99737.45212035466 -2239211.5182001553, 99737.50515814652 -2239211.5617271466, 99737.5071284392 -2239211.564127955, 99737.52605767091 -2239211.565992322, 99737.59171525954 -2239211.5859093335, 99737.65222563976 -2239211.6182528054, 99737.70526343162 -2239211.6617797967, 99737.74879042251 -2239211.714817588, 99737.75000533534 -2239211.7170905303, 99737.75227828235 -2239211.7183054457, 99737.80531607421 -2239211.761832437, 99737.8488430651 -2239211.8148702285, 99737.85005797763 -2239211.81714317, 99737.85233092486 -2239211.8183580856, 99737.90536871672 -2239211.861885077, 99737.94889570761 -2239211.9149228684, 99737.98123917967 -2239211.9754332486, 99738.00115619144 -2239212.041090837, 99738.0078813433 -2239212.10937245, 99738.0078813433 -2239212.2094251, 99738.00115619144 -2239212.277706713, 99737.98123917967 -2239212.3433643016, 99737.94889570761 -2239212.403874682, 99737.90536871672 -2239212.4569124733, 99737.85233092486 -2239212.5004394646, 99737.85005797763 -2239212.50165438, 99737.8488430651 -2239212.5039273216, 99737.80531607421 -2239212.556965113, 99737.75227828235 -2239212.6004921044, 99737.750005335 -2239212.6017070203, 99737.74879042251 -2239212.6039799615, 99737.74414890668 -2239212.609635665, 99737.74879042251 -2239212.615291368, 99737.78113389458 -2239212.6758017484, 99737.80105090635 -2239212.741459337, 99737.80777605821 -2239212.80974095, 99737.80777605821 -2239212.85995152, 99737.8579866284 -2239212.85995152, 99737.9262682411 -2239212.866676672, 99737.99192582973 -2239212.8865936836, 99738.05243620995 -2239212.9189371555, 99738.10547400182 -2239212.962464147, 99738.14900099271 -2239213.0155019383, 99738.15021590519 -2239213.0177748795, 99738.15248885256 -2239213.0189897954, 99738.20552664442 -2239213.0625167866, 99738.24905363531 -2239213.115554578, 99738.28139710738 -2239213.1760649583, 99738.30131411915 -2239213.241722547, 99738.30803927101 -2239213.31000416, 99738.30803927101 -2239213.41005681, 99738.30131411915 -2239213.4783384227, 99738.28139710738 -2239213.5439960114, 99738.24905363531 -2239213.6045063916, 99738.2079866284 -2239213.654546684, 99738.2079866284 -2239213.71021473, 99738.20126147654 -2239213.7784963427, 99738.1816023578 -2239213.843303772, 99738.20552664442 -2239213.862937927, 99738.24905363531 -2239213.9159757183, 99738.28139710738 -2239213.9764860985, 99738.30131411915 -2239214.042143687, 99738.30803927101 -2239214.1104253, 99738.30803927101 -2239214.31053059, 99738.30131411915 -2239214.3788122027, 99738.28139710738 -2239214.4444697914, 99738.24905363531 -2239214.5049801716, 99738.20552664442 -2239214.558017963, 99738.15248885256 -2239214.6015449543, 99738.15021590554 -2239214.60275987, 99738.14900099271 -2239214.605032812, 99738.10547400182 -2239214.6580706034, 99738.05243620995 -2239214.7015975947, 99737.99192582973 -2239214.7339410665, 99737.98372643965 -2239214.736428324, 99737.98123917967 -2239214.7446277216, 99737.94889570761 -2239214.805138102, 99737.90536871672 -2239214.8581758933, 99737.85233092486 -2239214.9017028846, 99737.79182054463 -2239214.9340463565, 99737.72616295601 -2239214.953963368, 99737.6578813433 -2239214.96068852, 99737.60221328623 -2239214.96068852, 99737.55217299725 -2239215.0017555244, 99737.49166261703 -2239215.0340989963, 99737.4260050284 -2239215.054016008, 99737.40707578755 -2239215.0558803757, 99737.40510550402 -2239215.058281173, 99737.35206771216 -2239215.1018081643, 99737.34979476513 -2239215.1030230797, 99737.3485798523 -2239215.105296022, 99737.30505286141 -2239215.1583338133, 99737.30183084974 -2239215.16097805, 99737.30505286141 -2239215.1636222866, 99737.3485798523 -2239215.216660078, 99737.38092332437 -2239215.2771704583, 99737.40084033614 -2239215.342828047, 99737.407565488 -2239215.41110966, 99737.407565488 -2239215.4964907933, 99737.45212035466 -2239215.5203058654, 99737.50515814652 -2239215.5638328567, 99737.54868513742 -2239215.616870648, 99737.58102860948 -2239215.6773810284, 99737.60094562125 -2239215.743038617, 99737.60767077311 -2239215.81132023, 99737.60767077311 -2239215.8967013634, 99737.65222563976 -2239215.9205164355, 99737.70526343162 -2239215.964043427, 99737.74879042251 -2239216.0170812183, 99737.78113389458 -2239216.0775915985, 99737.78362115128 -2239216.085790985, 99737.79182054463 -2239216.088278244, 99737.85233092486 -2239216.1206217157, 99737.90536871672 -2239216.164148707, 99737.94889570761 -2239216.2171864985, 99737.98123917967 -2239216.2776968786, 99737.98372643965 -2239216.285896276, 99737.99192582973 -2239216.2883835337, 99738.05243620995 -2239216.3207270056, 99738.10547400182 -2239216.364253997, 99738.14900099271 -2239216.4172917884, 99738.18134446477 -2239216.4778021686, 99738.20126147654 -2239216.543459757, 99738.20307761295 -2239216.5618992997, 99738.2581971987 -2239216.5618992997, 99738.30822351994 -2239216.5668264623, 99738.3582498412 -2239216.5618992997, 99738.7584604114 -2239216.5618992997, 99738.8267420241 -2239216.5686244518, 99738.89239961273 -2239216.5885414635, 99738.95290999295 -2239216.6208849354, 99739.00594778481 -2239216.6644119266, 99739.00791806876 -2239216.6668127244, 99739.02684730921 -2239216.668677092, 99739.09250489784 -2239216.688594104, 99739.15301527806 -2239216.7209375757, 99739.20605306992 -2239216.764464567, 99739.24958006082 -2239216.8175023585, 99739.28192353288 -2239216.8780127387, 99739.30184054465 -2239216.9436703273, 99739.30856569651 -2239217.01195194, 99739.30856569651 -2239217.11200458, 99739.30184054465 -2239217.180286193, 99739.2942768954 -2239217.205220203, 99739.32488970796 -2239217.1888573137, 99739.39054729659 -2239217.168940302, 99739.40947653746 -2239217.1670759344, 99739.41144682099 -2239217.164675137, 99739.46448461285 -2239217.1211481458, 99739.52499499307 -2239217.088804674, 99739.5906525817 -2239217.068887662, 99739.60958182214 -2239217.0670232945, 99739.61155210609 -2239217.0646224967, 99739.66458989795 -2239217.0210955054, 99739.71067008185 -2239216.996465134, 99739.71586991646 -2239216.9436703273, 99739.73578692823 -2239216.8780127387, 99739.76813040029 -2239216.8175023585, 99739.81165739118 -2239216.764464567, 99739.86469518305 -2239216.7209375757, 99739.92520556327 -2239216.688594104, 99739.99086315189 -2239216.668677092, 99740.0591447646 -2239216.66195194, 99740.1591974072 -2239216.66195194, 99740.20922372845 -2239216.6668791026, 99740.2592500497 -2239216.66195194, 99740.3593026923 -2239216.66195194, 99740.42758430501 -2239216.668677092, 99740.49324189364 -2239216.688594104, 99740.55375227386 -2239216.7209375757, 99740.60679006572 -2239216.764464567, 99740.65031705661 -2239216.8175023585, 99740.68266052868 -2239216.8780127387, 99740.70257754045 -2239216.9436703273, 99740.70930269231 -2239217.01195194, 99740.70930269231 -2239217.21205722, 99740.70257754045 -2239217.2803388326, 99740.68266052868 -2239217.3459964213, 99740.65031705661 -2239217.4065068015, 99740.60679006572 -2239217.459544593, 99740.60438926567 -2239217.4615148786, 99740.60432288726 -2239217.46218883, 99740.6092500497 -2239217.51221515, 99740.6092500497 -2239217.71232044, 99740.60252489784 -2239217.780602053, 99740.58260788607 -2239217.8462596415, 99740.550264414 -2239217.9067700217, 99740.50673742311 -2239217.959807813, 99740.45369963125 -2239218.0033348044, 99740.39318925103 -2239218.0356782763, 99740.3275316624 -2239218.055595288, 99740.2592500497 -2239218.06232044, 99740.1591974072 -2239218.06232044, 99740.1091710859 -2239218.0573932775, 99740.10849713645 -2239218.0574596557, 99740.10652685292 -2239218.059860453, 99740.05348906106 -2239218.1033874443, 99739.99297868084 -2239218.135730916, 99739.98477928748 -2239218.138218175, 99739.98229203078 -2239218.1464175615, 99739.94994855871 -2239218.2069279416, 99739.90642156782 -2239218.259965733, 99739.85338377596 -2239218.3034927244, 99739.79287339574 -2239218.3358361963, 99739.72721580711 -2239218.355753208, 99739.70828657539 -2239218.3576175747, 99739.70631628271 -2239218.3600183832, 99739.65327849085 -2239218.4035453745, 99739.59276811063 -2239218.4358888464, 99739.527110522 -2239218.455805858, 99739.4588289093 -2239218.46253101, 99739.3587762667 -2239218.46253101, 99739.290494654 -2239218.455805858, 99739.27887399775 -2239218.4522807705, 99739.24958006082 -2239218.507085872, 99739.20605306992 -2239218.5601236634, 99739.15301527806 -2239218.6036506547, 99739.15074233084 -2239218.60486557, 99739.14952741831 -2239218.6071385117, 99739.10600042742 -2239218.6601763032, 99739.05296263556 -2239218.7037032945, 99738.99245225533 -2239218.7360467664, 99738.92679466671 -2239218.755963778, 99738.87399986494 -2239218.7611636124, 99738.8493694906 -2239218.8072438017, 99738.80584249971 -2239218.860281593, 99738.75280470785 -2239218.9038085844, 99738.69229432763 -2239218.9361520563, 99738.626636739 -2239218.956069068, 99738.5583551263 -2239218.96279422, 99738.4583024838 -2239218.96279422, 99738.4082761625 -2239218.9578670575, 99738.40362304353 -2239218.9583253497, 99738.40136676174 -2239218.981233763, 99738.38144974997 -2239219.0468913517, 99738.3491062779 -2239219.107401732, 99738.30557928701 -2239219.1604395234, 99738.25254149515 -2239219.2039665147, 99738.2502685478 -2239219.2051814306, 99738.24905363531 -2239219.2074543717, 99738.20552664442 -2239219.2604921632, 99738.15248885256 -2239219.3040191545, 99738.09197847234 -2239219.3363626264, 99738.02632088371 -2239219.356279638, 99737.958039271 -2239219.36300479, 99737.70226592873 -2239219.36300479, 99737.65222563976 -2239219.4040717944, 99737.59171525954 -2239219.4364152662, 99737.52605767091 -2239219.456332278, 99737.4577760582 -2239219.46305743, 99737.30205535909 -2239219.46305743, 99737.25201506955 -2239219.5041244347, 99737.19150468933 -2239219.5364679066, 99737.1258471007 -2239219.5563849183, 99737.057565488 -2239219.5631100703, 99736.9575128455 -2239219.5631100703, 99736.8892312328 -2239219.5563849183, 99736.82357364417 -2239219.5364679066, 99736.76306326395 -2239219.5041244347, 99736.71002547209 -2239219.4605974434, 99736.70795438564 -2239219.458073817, 99736.6573549178 -2239219.46305743, 99736.4572496327 -2239219.46305743, 99736.38896802 -2239219.456332278, 99736.32331043137 -2239219.4364152662, 99736.26280005115 -2239219.4040717944, 99736.20976225928 -2239219.360544803, 99736.16623526839 -2239219.3075070116, 99736.16502035591 -2239219.3052340704, 99736.16274740854 -2239219.3040191545, 99736.11270711957 -2239219.2629521503, 99736.0570390625 -2239219.2629521503, 99735.9887574498 -2239219.2562269983, 99735.92309986117 -2239219.2363099866, 99735.86258948095 -2239219.2039665147, 99735.80955168909 -2239219.1604395234, 99735.7660246982 -2239219.107401732, 99735.76480977805 -2239219.1051287763, 99735.76253683835 -2239219.1039138646, 99735.70949904648 -2239219.0603868733, 99735.66597205559 -2239219.007349082, 99735.63362858353 -2239218.9468387016, 99735.61371157176 -2239218.881181113, 99735.6069864199 -2239218.8128995, 99735.6069864199 -2239218.71284686, 99735.61191358234 -2239218.66282054, 99735.6069864199 -2239218.61279422, 99735.6069864199 -2239218.41268893, 99735.61197003162 -2239218.362089471, 99735.60944640398 -2239218.3600183832, 99735.56591941309 -2239218.3069805917, 99735.53357594102 -2239218.2464702115, 99735.51365892925 -2239218.180812623, 99735.50693377739 -2239218.11253101, 99735.50693377739 -2239218.01247836, 99735.51191738911 -2239217.961878901, 99735.50939376139 -2239217.959807813, 99735.5074234687 -2239217.9574070047, 99735.488494237 -2239217.955542638, 99735.42283664837 -2239217.9356256262, 99735.36232626815 -2239217.9032821544, 99735.30928847629 -2239217.859755163, 99735.2657614854 -2239217.8067173716, 99735.23341801333 -2239217.7462069914, 99735.21350100156 -2239217.6805494027, 99735.2067758497 -2239217.61226779, 99735.2067758497 -2239217.5268866564, 99735.16222098304 -2239217.5030715843, 99735.11218069406 -2239217.46200458, 99734.8564073518 -2239217.46200458, 99734.80638103056 -2239217.4570774175, 99734.7563547093 -2239217.46200458, 99734.6563020667 -2239217.46200458, 99734.60570259861 -2239217.4570209673, 99734.60363151252 -2239217.459544593, 99734.55059372066 -2239217.5030715843, 99734.49008334044 -2239217.535415056, 99734.42442575181 -2239217.555332068, 99734.3561441391 -2239217.56205722, 99734.2560914965 -2239217.56205722, 99734.20606517524 -2239217.5571300574, 99734.156038854 -2239217.56205722, 99734.0559862114 -2239217.56205722, 99733.9877045987 -2239217.555332068, 99733.95593356885 -2239217.5456944313, 99733.92416253901 -2239217.555332068, 99733.90523330729 -2239217.5571964346, 99733.90326301461 -2239217.559597243, 99733.85022522275 -2239217.6031242344, 99733.84795227574 -2239217.60433915, 99733.84673736291 -2239217.606612092, 99733.80321037202 -2239217.6596498834, 99733.75017258016 -2239217.7031768747, 99733.68966219993 -2239217.7355203466, 99733.62400461131 -2239217.7554373583, 99733.5557229986 -2239217.7621625103, 99733.4556703561 -2239217.7621625103, 99733.38738874339 -2239217.7554373583, 99733.35561771355 -2239217.7457997217, 99733.3238466837 -2239217.7554373583, 99733.255565071 -2239217.7621625103, 99733.19989701382 -2239217.7621625103, 99733.14985672485 -2239217.8032295145, 99733.08934634463 -2239217.8355729864, 99733.023688756 -2239217.855489998, 99732.9554071433 -2239217.86221515, 99732.8553545008 -2239217.86221515, 99732.7870728881 -2239217.855489998, 99732.72141529947 -2239217.8355729864, 99732.66090491925 -2239217.8032295145, 99732.60786712739 -2239217.7597025232, 99732.6057960413 -2239217.7571788975, 99732.5551965731 -2239217.7621625103, 99732.4551439306 -2239217.7621625103, 99732.38686231789 -2239217.7554373583, 99732.32120472926 -2239217.7355203466, 99732.26069434904 -2239217.7031768747, 99732.2106540595 -2239217.66210987, 99732.1549860029 -2239217.66210987, 99732.0867043902 -2239217.655384718, 99732.02104680157 -2239217.6354677062, 99731.96053642135 -2239217.6031242344, 99731.90749862949 -2239217.559597243, 99731.8639716386 -2239217.5065594516, 99731.86275671844 -2239217.504286496, 99731.86048377874 -2239217.5030715843, 99731.80744598688 -2239217.459544593, 99731.76391899599 -2239217.4065068015, 99731.73157552393 -2239217.3459964213, 99731.71165851215 -2239217.2803388326, 99731.70493336029 -2239217.21205722, 99731.70493336029 -2239217.01195194, 99731.71165851215 -2239216.9436703273, 99731.73157552393 -2239216.8780127387, 99731.76391899599 -2239216.8175023585, 99731.8049860029 -2239216.767462066, 99731.8049860029 -2239216.61174137, 99731.81171115476 -2239216.543459757, 99731.83162816653 -2239216.4778021686, 99731.8639716386 -2239216.4172917884, 99731.90503864549 -2239216.367251496, 99731.90503864549 -2239216.31158344, 99731.90996580794 -2239216.26155712, 99731.90503864549 -2239216.2115308, 99731.90503864549 -2239216.11147815, 99731.91176379735 -2239216.043196537, 99731.93168080912 -2239215.9775389484, 99731.96402428119 -2239215.917028568, 99732.005091288 -2239215.866988276, 99732.005091288 -2239215.71126758, 99732.01181643986 -2239215.642985967, 99732.02145407554 -2239215.61121494, 99732.01181643986 -2239215.579443913, 99732.005091288 -2239215.5111623, 99732.005091288 -2239215.41110966, 99732.01001845092 -2239215.361083335, 99732.00995207312 -2239215.3604093897, 99732.00755127208 -2239215.3584391032, 99731.96402428119 -2239215.3054013117, 99731.93168080912 -2239215.2448909315, 99731.91176379735 -2239215.179233343, 99731.90989942956 -2239215.160304099, 99731.90749862949 -2239215.1583338133, 99731.8639716386 -2239215.105296022, 99731.83162816653 -2239215.0447856416, 99731.81171115476 -2239214.979128053, 99731.80984678802 -2239214.9601988196, 99731.80744598688 -2239214.958228533, 99731.76391899599 -2239214.9051907416, 99731.73157552393 -2239214.8446803614, 99731.71165851215 -2239214.779022773, 99731.70979414435 -2239214.760093529, 99731.70739334439 -2239214.758123243, 99731.6638663535 -2239214.7050854517, 99731.63152288143 -2239214.6445750715, 99731.61160586966 -2239214.578917483, 99731.6048807178 -2239214.51063587, 99731.6048807178 -2239214.41058323, 99731.60980788028 -2239214.36055691, 99731.60974150187 -2239214.3598829587, 99731.60734070178 -2239214.357912673, 99731.56381371089 -2239214.3048748816, 99731.53147023883 -2239214.2443645014, 99731.51155322706 -2239214.178706913, 99731.50968886031 -2239214.1597776795, 99731.50728805928 -2239214.157807393, 99731.46376106839 -2239214.1047696015, 99731.4625461559 -2239214.1024966603, 99731.46027320855 -2239214.1012817444, 99731.40723541669 -2239214.057754753, 99731.3637084258 -2239214.0047169616, 99731.33136495373 -2239213.9442065815, 99731.31144794196 -2239213.878548993, 99731.30958357417 -2239213.859619749, 99731.30718277418 -2239213.857649463, 99731.26365578329 -2239213.8046116717, 99731.2624408708 -2239213.8023387305, 99731.26016792345 -2239213.8011238147, 99731.20713013159 -2239213.7575968234, 99731.1636031407 -2239213.704559032, 99731.16238822782 -2239213.70228609, 99731.16011528095 -2239213.7010711743, 99731.10707748908 -2239213.657544183, 99731.1051071964 -2239213.6551433746, 99731.0861779647 -2239213.653279008, 99731.02052037607 -2239213.633361996, 99730.96000999585 -2239213.6010185243, 99730.90697220399 -2239213.557491533, 99730.90500192046 -2239213.5550907357, 99730.8860726795 -2239213.553226368, 99730.82041509087 -2239213.5333093563, 99730.75990471065 -2239213.5009658844, 99730.70686691879 -2239213.457438893, 99730.6633399279 -2239213.4044011016, 99730.63952485814 -2239213.35984624, 99730.554143722 -2239213.35984624, 99730.48586210929 -2239213.353121088, 99730.42020452066 -2239213.333204076, 99730.35969414044 -2239213.3008606043, 99730.30665634858 -2239213.257333613, 99730.30468605632 -2239213.254932805, 99730.28575682419 -2239213.2530684383, 99730.22009923556 -2239213.2331514265, 99730.15958885534 -2239213.2008079547, 99730.1095485658 -2239213.15974095, 99729.9538278667 -2239213.15974095, 99729.885546254 -2239213.153015798, 99729.81988866537 -2239213.133098786, 99729.75937828515 -2239213.1007553143, 99729.70933799617 -2239213.05968831, 99729.6536699391 -2239213.05968831, 99729.58538832639 -2239213.052963158, 99729.51973073777 -2239213.0330461464, 99729.45922035754 -2239213.0007026745, 99729.40618256568 -2239212.957175683, 99729.36265557479 -2239212.9041378917, 99729.36144066231 -2239212.9018649505, 99729.35916771494 -2239212.9006500347, 99729.30612992308 -2239212.8571230434, 99729.26260293218 -2239212.804085252, 99729.26138801203 -2239212.8018122963, 99729.25911507235 -2239212.8005973846, 99729.20607728048 -2239212.7570703933, 99729.16255028959 -2239212.704032602, 99729.13020681753 -2239212.6435222216, 99729.11028980576 -2239212.577864633, 99729.10842543902 -2239212.5589353996, 99729.10602463798 -2239212.556965113, 99729.10405435445 -2239212.554564316, 99729.08512511359 -2239212.552699948, 99729.01946752497 -2239212.5327829365, 99728.95895714474 -2239212.5004394646, 99728.90891684328 -2239212.45937245, 99728.7531961561 -2239212.45937245, 99728.6849145434 -2239212.452647298, 99728.65314351355 -2239212.4430096615, 99728.62137248371 -2239212.452647298, 99728.553090871 -2239212.45937245, 99728.4530382284 -2239212.45937245, 99728.38475661569 -2239212.452647298, 99728.31909902707 -2239212.4327302864, 99728.25858864684 -2239212.4003868145, 99728.20854835787 -2239212.3593198103, 99727.8527223731 -2239212.3593198103, 99727.7844407604 -2239212.3525946583, 99727.71878317177 -2239212.3326776465, 99727.65827279155 -2239212.3003341747, 99727.60523499969 -2239212.2568071834, 99727.60326471574 -2239212.2544063856, 99727.58433547529 -2239212.252542018, 99727.51867788666 -2239212.232625006, 99727.45816750644 -2239212.2002815343, 99727.40512971458 -2239212.156754543, 99727.4031594219 -2239212.1543537346, 99727.38423019019 -2239212.152489368, 99727.31857260157 -2239212.132572356, 99727.25806222134 -2239212.1002288843, 99727.20502442948 -2239212.056701893, 99727.16149743859 -2239212.0036641015, 99727.1602825261 -2239212.0013911603, 99727.15800957875 -2239212.0001762444, 99727.10497178689 -2239211.956649253, 99727.061444796 -2239211.9036114616, 99727.02910132393 -2239211.8431010814, 99727.00918431216 -2239211.777443493, 99727.0024591603 -2239211.70916188, 99727.0024591603 -2239211.5090566, 99727.00918431216 -2239211.440774987, 99727.02910132393 -2239211.3751173983, 99727.061444796 -2239211.314607018, 99727.10497178689 -2239211.2615692266, 99727.15800957875 -2239211.2180422354, 99727.16028251879 -2239211.2168273237, 99727.16149743859 -2239211.2145543685, 99727.20502442948 -2239211.161516577, 99727.25806222134 -2239211.1179895857, 99727.31857260157 -2239211.085646114, 99727.38423019019 -2239211.065729102, 99727.40315943063 -2239211.0638647345, 99727.40512971458 -2239211.0614639367, 99727.45816750644 -2239211.0179369454, 99727.51867788666 -2239210.9855934735, 99727.58433547529 -2239210.965676462, 99727.652617088 -2239210.95895131, 99727.70828514507 -2239210.95895131, 99727.75832543404 -2239210.9178843056, 99727.81883581427 -2239210.8855408337, 99727.88449340289 -2239210.865623822, 99727.9527750156 -2239210.85889867, 99728.50870628557 -2239210.85889867, 99728.55874657455 -2239210.8178316657, 99728.61925695477 -2239210.785488194, 99728.6849145434 -2239210.765571182, 99728.7531961561 -2239210.75884603, 99728.90891684328 -2239210.75884603, 99728.95895714474 -2239210.7177790157, 99729.00351201139 -2239210.6939639435, 99729.00351201139 -2239210.652967404, 99728.9624450045 -2239210.6029271116, 99728.93010153243 -2239210.5424167314, 99728.92761427246 -2239210.534217334, 99728.91941488237 -2239210.5317300763, 99728.85890450215 -2239210.4993866044, 99728.80886421318 -2239210.4583196, 99728.7531961561 -2239210.4583196, 99728.7031698348 -2239210.4533924377, 99728.6531435135 -2239210.4583196, 99727.99715960103 -2239210.4583196, 99727.94711931206 -2239210.4993866044, 99727.88660893183 -2239210.5317300763, 99727.82095134321 -2239210.551647088, 99727.7526697305 -2239210.55837224, 99727.1523538752 -2239210.55837224, 99727.08407226249 -2239210.551647088, 99727.01841467386 -2239210.5317300763, 99726.95790429364 -2239210.4993866044, 99726.90486650178 -2239210.455859613, 99726.90289621825 -2239210.453458816, 99726.88396697739 -2239210.451594448, 99726.81830938876 -2239210.4316774365, 99726.75779900854 -2239210.3993339646, 99726.707758719 -2239210.35826696, 99726.6520906625 -2239210.35826696, 99726.58380904979 -2239210.351541808, 99726.5520380199 -2239210.3419041713, 99726.52026699 -2239210.351541808, 99726.50133774956 -2239210.3534061755, 99726.49936746561 -2239210.3558069733, 99726.44632967375 -2239210.3993339646, 99726.44405672654 -2239210.40054888, 99726.44284181402 -2239210.4028218216, 99726.4017748071 -2239210.452862114, 99726.4017748071 -2239210.90874074, 99726.39504965524 -2239210.9770223526, 99726.37513264347 -2239211.0426799413, 99726.34278917141 -2239211.1031903215, 99726.29926218052 -2239211.156228113, 99726.29686138059 -2239211.1581983985, 99726.29499701274 -2239211.177127643, 99726.27508000097 -2239211.2427852317, 99726.2427365289 -2239211.303295612, 99726.20166952201 -2239211.3533359044, 99726.20166952201 -2239211.40900395, 99726.19494437015 -2239211.477285563, 99726.17502735837 -2239211.5429431517, 99726.14268388631 -2239211.603453532, 99726.09915689542 -2239211.6564913234, 99726.04611910356 -2239211.7000183146, 99726.04384616365 -2239211.7012332263, 99726.0426312438 -2239211.7035061815, 99725.99910425291 -2239211.756543973, 99725.94606646105 -2239211.8000709643, 99725.88555608083 -2239211.832414436, 99725.8198984922 -2239211.852331448, 99725.7516168795 -2239211.8590566, 99725.6515642369 -2239211.8590566, 99725.5832826242 -2239211.852331448, 99725.51762503557 -2239211.832414436, 99725.45711465535 -2239211.8000709643, 99725.40407686349 -2239211.756543973, 99725.3605498726 -2239211.7035061815, 99725.35933495275 -2239211.7012332263, 99725.35706201284 -2239211.7000183146, 99725.30402422098 -2239211.6564913234, 99725.26049723009 -2239211.603453532, 99725.22815375803 -2239211.5429431517, 99725.20823674626 -2239211.477285563, 99725.20637237951 -2239211.4583563297, 99725.20397157838 -2239211.456386043, 99725.16044458748 -2239211.4033482517, 99725.12810111542 -2239211.3428378715, 99725.10818410365 -2239211.277180283, 99725.10145895179 -2239211.20889867, 99725.10145895179 -2239210.50853017, 99725.10818410365 -2239210.4402485574, 99725.12810111542 -2239210.3745909687, 99725.16044458748 -2239210.3140805885, 99725.2015115944 -2239210.264040296), (99729.4984977109 -2239209.7583196, 99729.5536172965 -2239209.7583196, 99729.60421676433 -2239209.763303213, 99729.60628785078 -2239209.7607795866, 99729.60868865077 -2239209.758809301, 99729.61055301856 -2239209.739880057, 99729.63047003033 -2239209.6742224684, 99729.6628135024 -2239209.613712088, 99729.70388050929 -2239209.5636717957, 99729.70388050929 -2239209.50800375, 99729.70880767224 -2239209.457977425, 99729.70388050929 -2239209.4079511, 99729.70388050929 -2239209.352283054, 99729.6628135024 -2239209.3022427615, 99729.66159858255 -2239209.2999698063, 99729.65932564264 -2239209.2987548946, 99729.60628785078 -2239209.2552279034, 99729.60421676433 -2239209.252704277, 99729.5536172965 -2239209.25768789, 99729.3033014412 -2239209.25768789, 99729.3033014412 -2239209.30789846, 99729.29837427876 -2239209.35792478, 99729.3033014412 -2239209.4079511, 99729.3033014412 -2239209.4933322333, 99729.34785630785 -2239209.5171473054, 99729.40089409972 -2239209.5606742967, 99729.44442109061 -2239209.613712088, 99729.47676456267 -2239209.6742224684, 99729.49668157444 -2239209.739880057, 99729.4984977109 -2239209.7583196)) buffer-0.75: see http://trac.osgeo.org/geos/wiki/BufferRobustness POLYGON((99724.80151159 -2239210.14114081,99724.80151159 -2239209.90821432,99724.81592263 -2239209.76189657,99724.85860194 -2239209.62120174,99724.9042938714 -2239209.53571816,99724.90156424 -2239209.50800375,99724.90156424 -2239209.4079511,99724.91597528 -2239209.26163336,99724.95865459 -2239209.12093853,99725.02796203 -2239208.99127343,99725.0428380369 -2239208.97314696,99725.05870723 -2239208.92083324,99725.12801467 -2239208.79116814,99725.22128679 -2239208.67751573,99725.2762402889 -2239208.63241656,99725.32133944 -2239208.57746309,99725.3762929231 -2239208.53236393,99725.42139208 -2239208.47741045,99725.4763455623 -2239208.43231129,99725.52144472 -2239208.3773578,99725.5763982031 -2239208.33225864,99725.62149736 -2239208.27730516,99725.6764508589 -2239208.23220599,99725.72155001 -2239208.17725252,99725.83520242 -2239208.0839804,99725.96486752 -2239208.01467296,99726.0171812128 -2239207.99880377,99726.0353077 -2239207.98392775,99726.1649728 -2239207.91462031,99726.30566764 -2239207.871941,99726.45198538 -2239207.85752996,99727.4525118 -2239207.85752996,99727.5025381233 -2239207.86245712,99727.55256445 -2239207.85752996,99727.8488737358 -2239207.85752996,99727.86018122 -2239207.82025418,99727.90314351 -2239207.73987739,99727.90314351 -2239207.60700354,99727.91755455 -2239207.4606858,99727.96023386 -2239207.31999096,99728.0295413 -2239207.19032586,99728.12281343 -2239207.07667345,99728.1777669131 -2239207.03157429,99728.22286607 -2239206.97662081,99728.2778195531 -2239206.93152165,99728.32291871 -2239206.87656817,99728.3778722081 -2239206.831469,99728.42297136 -2239206.77651552,99728.4779248283 -2239206.73141638,99728.523024 -2239206.67646288,99728.63667641 -2239206.58319076,99728.76634151 -2239206.51388332,99728.8010181124 -2239206.50336429,99728.82318193 -2239206.4763576,99728.93683434 -2239206.38308547,99729.06649944 -2239206.31377803,99729.118813149 -2239206.29790884,99729.13693962 -2239206.28303283,99729.26660472 -2239206.21372539,99729.40729956 -2239206.17104608,99729.5536173 -2239206.15663504,99729.5864384989 -2239206.15663504,99729.5979079113 -2239206.15050451,99729.60403844 -2239206.1390351,99729.60403844 -2239206.00616126,99729.61844948 -2239205.85984352,99729.66112879 -2239205.71914868,99729.73043623 -2239205.58948358,99729.82370835 -2239205.47583117,99729.8786618331 -2239205.43073201,99729.92376099 -2239205.37577853,99729.9787145011 -2239205.33067935,99730.02381364 -2239205.27572589,99730.13746605 -2239205.18245376,99730.26713115 -2239205.11314632,99730.3018077423 -2239205.10262729,99730.32397156 -2239205.0756206,99730.43762397 -2239204.98234848,99730.56728908 -2239204.91304104,99730.6196027728 -2239204.89717186,99730.63772926 -2239204.88229583,99730.76739436 -2239204.81298839,99730.90808919 -2239204.77030908,99731.05440693 -2239204.75589804,99731.0872281389 -2239204.75589804,99731.16760493 -2239204.71293575,99731.30829976 -2239204.67025644,99731.45461751 -2239204.6558454,99731.5874913489 -2239204.6558454,99731.66786814 -2239204.61288311,99731.7201818627 -2239204.59701392,99731.73830833 -2239204.58213791,99731.86797343 -2239204.51283047,99731.9026500223 -2239204.50231144,99731.92481384 -2239204.47530475,99731.979767316 -2239204.4302056,99732.02486649 -2239204.3752521,99732.0518731808 -2239204.35308828,99732.06239221 -2239204.31841169,99732.13169965 -2239204.18874659,99732.22497177 -2239204.07509417,99732.2799252531 -2239204.02999501,99732.32502441 -2239203.97504153,99732.43867683 -2239203.88176941,99732.56834193 -2239203.81246197,99732.70903676 -2239203.76978266,99732.8553545 -2239203.75537162,99733.15551243 -2239203.75537162,99733.30183017 -2239203.76978266,99733.442525 -2239203.81246197,99733.5721901 -2239203.88176941,99733.5903165651 -2239203.89664542,99733.64263029 -2239203.91251461,99733.77229539 -2239203.98182205,99733.8859478 -2239204.07509417,99733.9081116236 -2239204.10210087,99733.94278822 -2239204.1126199,99734.07245332 -2239204.18192734,99734.090579791 -2239204.19680335,99734.1428935 -2239204.21267254,99734.2725586 -2239204.28197998,99734.2906850673 -2239204.29685599,99734.34299879 -2239204.31272518,99734.4385623232 -2239204.36380495,99734.50246188 -2239204.37009851,99734.64315671 -2239204.41277782,99734.77282181 -2239204.48208526,99734.8634839262 -2239204.55648974,99735.00272509 -2239204.5702038,99735.14341993 -2239204.61288311,99735.27308503 -2239204.68219055,99735.38673744 -2239204.77546267,99735.48000956 -2239204.88911508,99735.549317 -2239205.01878018,99735.59199631 -2239205.15947502,99735.60640735 -2239205.30579276,99735.60640735 -2239205.80605597,99735.59199631 -2239205.95237371,99735.549317 -2239206.09306855,99735.48000956 -2239206.22273365,99735.38673744 -2239206.33638606,99735.3863763185 -2239206.33668242,99735.439088742 -2239206.3648578,99735.50298831 -2239206.37115136,99735.64368314 -2239206.41383068,99735.77334824 -2239206.48313812,99735.88700065 -2239206.57641024,99735.98027277 -2239206.69006265,99736.04958021 -2239206.81972775,99736.0654493992 -2239206.87204146,99736.08032542 -2239206.89016794,99736.14963286 -2239207.01983304,99736.19231217 -2239207.16052787,99736.20672321 -2239207.30684561,99736.20672321 -2239207.40689825,99736.2017960474 -2239207.45692457,99736.20672321 -2239207.50695089,99736.20672321 -2239207.63982474,99736.2496855 -2239207.72020153,99736.29236481 -2239207.86089637,99736.30677585 -2239208.00721411,99736.30677585 -2239208.04003531,99736.34973814 -2239208.1204121,99736.39241745 -2239208.26110694,99736.40682849 -2239208.40742468,99736.40682849 -2239208.44024588,99736.44979078 -2239208.52062267,99736.4924701 -2239208.66131751,99736.50688113 -2239208.80763525,99736.50688113 -2239208.94050908,99736.54984343 -2239209.02088589,99736.59252274 -2239209.16158072,99736.5988162972 -2239209.22548028,99736.64989607 -2239209.32104381,99736.69257538 -2239209.46173865,99736.6988689372 -2239209.52563821,99736.74994871 -2239209.62120174,99736.79262802 -2239209.76189657,99736.7967393798 -2239209.80363991,99736.88752708 -2239209.87814744,99736.9807992 -2239209.99179985,99737.05010664 -2239210.12146495,99737.09278595 -2239210.26215979,99737.10719699 -2239210.40847753,99737.10719699 -2239210.50230287,99737.18090448 -2239210.59211571,99737.25021192 -2239210.72178081,99737.2854776711 -2239210.83803638,99737.37419052 -2239210.88545439,99737.48784293 -2239210.97872651,99737.5329420869 -2239211.03367999,99737.58789557 -2239211.07877915,99737.6329947341 -2239211.13373264,99737.68794822 -2239211.1788318,99737.7101120377 -2239211.20583849,99737.74478863 -2239211.21635752,99737.87445373 -2239211.28566496,99737.98810614 -2239211.37893708,99738.0332052911 -2239211.43389055,99738.08815879 -2239211.47898972,99738.1332579599 -2239211.53394322,99738.18821143 -2239211.57904237,99738.28148355 -2239211.69269478,99738.35079099 -2239211.82235988,99738.3934703 -2239211.96305471,99738.40788134 -2239212.10937245,99738.40788134 -2239212.20942509,99738.3934703 -2239212.35574284,99738.35079099 -2239212.49643767,99738.2941740377 -2239212.60236054,99738.38831671 -2239212.67962143,99738.4334158619 -2239212.73457491,99738.48836936 -2239212.77967408,99738.58164148 -2239212.89332649,99738.65094892 -2239213.02299159,99738.69362823 -2239213.16368642,99738.70803927 -2239213.31000416,99738.70803927 -2239213.41005681,99738.69362823 -2239213.55637455,99738.65094892 -2239213.69706938,99738.6171829562 -2239213.76024105,99738.65094892 -2239213.82341273,99738.69362823 -2239213.96410756,99738.70803927 -2239214.1104253,99738.70803927 -2239214.31053059,99738.69362823 -2239214.45684833,99738.65094892 -2239214.59754316,99738.58164148 -2239214.72720826,99738.48836936 -2239214.84086067,99738.4334158741 -2239214.88595983,99738.38831671 -2239214.94091332,99738.2784097438 -2239215.03111163,99738.18821143 -2239215.1410186,99738.07455902 -2239215.23429073,99737.94489392 -2239215.30359817,99737.8341295888 -2239215.33719816,99737.88127298 -2239215.39464255,99737.95058042 -2239215.52430765,99737.99325973 -2239215.66500249,99737.9957755359 -2239215.6905459,99738.0783044636 -2239215.79110768,99738.18821143 -2239215.881306,99738.2784097438 -2239215.99121297,99738.38831671 -2239216.08141128,99738.4543715263 -2239216.1618993,99738.75846041 -2239216.1618993,99738.90477815 -2239216.17631033,99739.04547299 -2239216.21898965,99739.17513809 -2239216.28829709,99739.193264561 -2239216.3031731,99739.24557827 -2239216.31904229,99739.37524337 -2239216.38834973,99739.48889578 -2239216.48162185,99739.5088552311 -2239216.50594251,99739.52881468 -2239216.48162185,99739.64246709 -2239216.38834973,99739.77213219 -2239216.31904229,99739.91282702 -2239216.27636298,99740.05914476 -2239216.26195194,99740.15919741 -2239216.26195194,99740.20922373 -2239216.2668791,99740.25925005 -2239216.26195194,99740.35930269 -2239216.26195194,99740.50562043 -2239216.27636298,99740.64631527 -2239216.31904229,99740.77598037 -2239216.38834973,99740.88963278 -2239216.48162185,99740.9829049 -2239216.59527426,99741.05221234 -2239216.72493936,99741.09489165 -2239216.8656342,99741.10930269 -2239217.01195194,99741.10930269 -2239217.21205722,99741.09489165 -2239217.35837496,99741.05221234 -2239217.4990698,99741.00925005 -2239217.57944659,99741.00925005 -2239217.71232044,99740.99483901 -2239217.85863818,99740.9521597 -2239217.99933301,99740.88285226 -2239218.12899811,99740.78958014 -2239218.24265052,99740.67592772 -2239218.33592264,99740.54626262 -2239218.40523008,99740.40556779 -2239218.4479094,99740.25925005 -2239218.46232044,99740.255319081 -2239218.46232044,99740.18926428 -2239218.54280845,99740.07561187 -2239218.63608057,99739.94594677 -2239218.70538801,99739.8936330476 -2239218.7212572,99739.87550658 -2239218.73613321,99739.74584148 -2239218.80544066,99739.60514665 -2239218.84811997,99739.4659054834 -2239218.86183403,99739.4339422969 -2239218.88806554,99739.38884314 -2239218.94301902,99739.27519073 -2239219.03629114,99739.14552563 -2239219.10559858,99739.1108490276 -2239219.11611761,99739.08868521 -2239219.1431243,99738.9750328 -2239219.23639643,99738.8453677 -2239219.30570387,99738.70467287 -2239219.34838318,99738.6629295295 -2239219.35249454,99738.588422 -2239219.44328223,99738.5334685047 -2239219.4883814,99738.48836936 -2239219.54333487,99738.37471695 -2239219.636607,99738.24505185 -2239219.70591444,99738.10435701 -2239219.74859375,99737.95803927 -2239219.76300479,99737.8251654211 -2239219.76300479,99737.74478863 -2239219.80596708,99737.6040938 -2239219.84864639,99737.45777606 -2239219.86305743,99737.4249548511 -2239219.86305743,99737.34457806 -2239219.90601972,99737.20388323 -2239219.94869903,99737.05756549 -2239219.96311007,99736.95751285 -2239219.96311007,99736.8111951 -2239219.94869903,99736.67050027 -2239219.90601972,99736.5901234789 -2239219.86305743,99736.45724963 -2239219.86305743,99736.31093189 -2239219.84864639,99736.17023706 -2239219.80596708,99736.04057196 -2239219.73665964,99735.9362647377 -2239219.65105692,99735.91072132 -2239219.64854111,99735.77002649 -2239219.6058618,99735.64036139 -2239219.53655436,99735.52670898 -2239219.44328223,99735.4816098189 -2239219.38832875,99735.42665633 -2239219.34322959,99735.33338421 -2239219.22957718,99735.26407677 -2239219.09991208,99735.22139746 -2239218.95921724,99735.20698642 -2239218.8128995,99735.20698642 -2239218.71284686,99735.2119135826 -2239218.66282054,99735.20698642 -2239218.61279422,99735.20698642 -2239218.47992037,99735.16402413 -2239218.39954358,99735.12134482 -2239218.25884875,99735.1172334606 -2239218.21710542,99735.02644576 -2239218.14259788,99734.93317364 -2239218.02894547,99734.8638662 -2239217.89928037,99734.8524401864 -2239217.86161385,99734.80638103 -2239217.85707742,99734.75635471 -2239217.86200458,99734.7235335011 -2239217.86200458,99734.64315671 -2239217.90496687,99734.50246188 -2239217.94764618,99734.35614414 -2239217.96205722,99734.2560915 -2239217.96205722,99734.2060651767 -2239217.95713006,99734.15603885 -2239217.96205722,99734.0622135113 -2239217.96205722,99733.97240067 -2239218.03576472,99733.84273557 -2239218.10507216,99733.70204074 -2239218.14775147,99733.555723 -2239218.16216251,99733.45567036 -2239218.16216251,99733.3556177116 -2239218.15230819,99733.3379832532 -2239218.15404503,99733.24241972 -2239218.2051248,99733.10172488 -2239218.24780411,99732.95540714 -2239218.26221515,99732.8553545 -2239218.26221515,99732.70903676 -2239218.24780411,99732.56834193 -2239218.2051248,99732.4879651389 -2239218.16216251,99732.45514393 -2239218.16216251,99732.30882619 -2239218.14775147,99732.16813136 -2239218.10507216,99732.072567829 -2239218.05399239,99732.00866826 -2239218.04769883,99731.86797343 -2239218.00501951,99731.73830833 -2239217.93571207,99731.62465592 -2239217.84243995,99731.579556759 -2239217.78748647,99731.52460327 -2239217.74238731,99731.43133115 -2239217.6287349,99731.36202371 -2239217.4990698,99731.3193444 -2239217.35837496,99731.30493336 -2239217.21205722,99731.30493336 -2239217.01195194,99731.3193444 -2239216.8656342,99731.36202371 -2239216.72493936,99731.404986 -2239216.64456257,99731.404986 -2239216.61174137,99731.41939704 -2239216.46542363,99731.46207635 -2239216.32472879,99731.5077682803 -2239216.2392452,99731.50503865 -2239216.2115308,99731.50503865 -2239216.11147815,99731.51944969 -2239215.96516041,99731.562129 -2239215.82446558,99731.60509129 -2239215.74408879,99731.60509129 -2239215.71126758,99731.6149456152 -2239215.61121494,99731.60509129 -2239215.5111623,99731.60509129 -2239215.47834109,99731.562129 -2239215.3979643,99731.5462598148 -2239215.34565061,99731.53138379 -2239215.32752412,99731.46207635 -2239215.19785902,99731.4462071551 -2239215.1455453,99731.43133115 -2239215.12741883,99731.36202371 -2239214.99775373,99731.3461545199 -2239214.94544002,99731.33127851 -2239214.92731355,99731.26197107 -2239214.79764845,99731.21929176 -2239214.65695361,99731.20488072 -2239214.51063587,99731.20488072 -2239214.47781467,99731.16191843 -2239214.39743788,99731.151399397 -2239214.36276128,99731.1243927 -2239214.34059746,99731.03112058 -2239214.22694505,99730.96181314 -2239214.09727995,99730.9512941077 -2239214.06260335,99730.92428742 -2239214.04043953,99730.9021236047 -2239214.01343284,99730.867447 -2239214.00291381,99730.7377819 -2239213.93360637,99730.719655429 -2239213.91873036,99730.66734172 -2239213.90286117,99730.53767662 -2239213.83355373,99730.4333693977 -2239213.74795101,99730.40782598 -2239213.7454352,99730.26713115 -2239213.70275589,99730.13746605 -2239213.63344844,99730.1193395827 -2239213.61857243,99730.06702586 -2239213.60270324,99729.9866490689 -2239213.55974095,99729.95382787 -2239213.55974095,99729.80751013 -2239213.54532991,99729.66681529 -2239213.5026506,99729.5712517568 -2239213.45157083,99729.5073522 -2239213.44527727,99729.36665736 -2239213.40259796,99729.23699226 -2239213.33329052,99729.12333985 -2239213.24001839,99729.0782406931 -2239213.18506491,99729.02328721 -2239213.13996575,99728.9781880531 -2239213.08501227,99728.92323457 -2239213.03991311,99728.82996244 -2239212.9262607,99728.7974867573 -2239212.86550297,99728.7860173589 -2239212.85937245,99728.75319616 -2239212.85937245,99728.6531435116 -2239212.84951812,99728.55309087 -2239212.85937245,99728.45303823 -2239212.85937245,99728.30672049 -2239212.84496141,99728.16602565 -2239212.8022821,99728.0856488589 -2239212.75931981,99727.85272237 -2239212.75931981,99727.70640463 -2239212.74490877,99727.5657098 -2239212.70222946,99727.4360447 -2239212.63292202,99727.4179182327 -2239212.61804601,99727.36560451 -2239212.60217682,99727.23593941 -2239212.53286938,99727.21781293 -2239212.51799336,99727.16549923 -2239212.50212417,99727.03583413 -2239212.43281673,99726.92218172 -2239212.33954461,99726.8770825589 -2239212.28459113,99726.82212907 -2239212.23949197,99726.72885695 -2239212.12583956,99726.65954951 -2239211.99617446,99726.6168702 -2239211.85547962,99726.60245916 -2239211.70916188,99726.60245916 -2239211.5090566,99726.6066003423 -2239211.46701047,99726.5935520379 -2239211.49142213,99726.58725848 -2239211.5553217,99726.54457917 -2239211.69601653,99726.47527173 -2239211.82568163,99726.38199961 -2239211.93933404,99726.3270461269 -2239211.9844332,99726.28194697 -2239212.03938668,99726.16829455 -2239212.13265881,99726.03862945 -2239212.20196625,99725.89793462 -2239212.24464556,99725.75161688 -2239212.2590566,99725.65156424 -2239212.2590566,99725.5052465 -2239212.24464556,99725.36455166 -2239212.20196625,99725.23488656 -2239212.13265881,99725.12123415 -2239212.03938668,99725.0761349931 -2239211.9844332,99725.02118151 -2239211.93933404,99724.92790939 -2239211.82568163,99724.85860194 -2239211.69601653,99724.8427327449 -2239211.6437028,99724.82785674 -2239211.62557634,99724.7585493 -2239211.49591124,99724.71586999 -2239211.35521641,99724.70145895 -2239211.20889867,99724.70145895 -2239210.50853017,99724.71586999 -2239210.36221243,99724.7585493 -2239210.2215176,99724.80151159 -2239210.14114081),(99726.8770825589 -2239210.93362735,99726.8959962418 -2239210.91058097,99726.8653413 -2239210.90128189,99726.80177481 -2239210.86730489,99726.80177481 -2239210.90874074,99726.7911658513 -2239211.0164553,99726.82212907 -2239210.97872651,99726.8770825589 -2239210.93362735)) buffer-1.01 (#494) POLYGON ((99724.5415116 -2239210.07866999,99724.5415116 -2239209.9082143,99724.5609185 -2239209.7111731,99724.6183933 -2239209.521704,99724.6415642 -2239209.4783543,99724.6415642 -2239209.4079511,99724.6609711 -2239209.2109099,99724.7184459 -2239209.0214408,99724.8094364244 -2239208.85120953,99724.8184986 -2239208.8213356,99724.9118326 -2239208.6467199,99725.037439 -2239208.493668,99725.0923925052 -2239208.44856881,99725.1374917 -2239208.3936153,99725.19244517 -2239208.34851617,99725.2375443 -2239208.2935627,99725.2924978955 -2239208.24846343,99725.337597 -2239208.19351,99725.39255036 -2239208.14841096,99725.4376496 -2239208.0934574,99725.4926031603 -2239208.04835816,99725.5377022 -2239207.9934048,99725.6907542 -2239207.8677983,99725.8653698 -2239207.7744643,99725.8952440723 -2239207.76540204,99726.0654751 -2239207.6744116,99726.2549442 -2239207.6169368,99726.4519854 -2239207.59753,99727.4525118 -2239207.59753,99727.5025381 -2239207.60245714,99727.5525644 -2239207.59753,99727.64407656 -2239207.59753,99727.6625504 -2239207.4099623,99727.7200252 -2239207.2204933,99727.8133592 -2239207.0458776,99727.9389657 -2239206.8928257,99727.9939189892 -2239206.84772668,99728.0390183 -2239206.792773,99728.09397177 -2239206.74767387,99728.1390709 -2239206.6927204,99728.1940245825 -2239206.64762109,99728.2391236 -2239206.5926678,99728.2940769089 -2239206.54756877,99728.3391762 -2239206.4926151,99728.4922281 -2239206.3670087,99728.6537698364 -2239206.28066278,99728.7923861 -2239206.1669034,99728.9670017 -2239206.0735694,99728.9968758442 -2239206.06450717,99729.167107 -2239205.9735167,99729.3528016278 -2239205.91718687,99729.3634453 -2239205.80912,99729.4209201 -2239205.619651,99729.5142541 -2239205.4450353,99729.6398606 -2239205.2919834,99729.6948141603 -2239205.24688416,99729.7399132 -2239205.1919308,99729.7948667052 -2239205.14683161,99729.8399659 -2239205.0918781,99729.9930178 -2239204.9662717,99730.1545592497 -2239204.87992594,99730.2931757 -2239204.7661664,99730.4677914 -2239204.6728324,99730.4976652713 -2239204.66377026,99730.6678967 -2239204.5727797,99730.8573657 -2239204.5153049,99731.0180600617 -2239204.49947786,99731.0681072 -2239204.4727271,99731.2575763 -2239204.4152523,99731.4546175 -2239204.3958454,99731.5250206377 -2239204.3958454,99731.5683705 -2239204.3726744,99731.5982447981 -2239204.36361213,99731.7554017157 -2239204.27960999,99731.7959194991 -2239204.24635789,99731.8291718013 -2239204.2058398,99731.9155175 -2239204.0442983,99732.041124 -2239203.8912464,99732.0960776663 -2239203.84614711,99732.1411767 -2239203.7911938,99732.2942286 -2239203.6655873,99732.4688442 -2239203.5722533,99732.6583133 -2239203.5147785,99732.8553545 -2239203.4953716,99733.1555124 -2239203.4953716,99733.3525537 -2239203.5147785,99733.5420227 -2239203.5722533,99733.7122537168 -2239203.66324364,99733.742128 -2239203.6723059,99733.9167436 -2239203.76564,99734.0553600971 -2239203.8793995,99734.2125173287 -2239203.96340176,99734.2423912 -2239203.9724639,99734.4126222168 -2239204.06345424,99734.4424965 -2239204.0725165,99734.5151443635 -2239204.1113476,99734.5531854 -2239204.1150943,99734.7426544 -2239204.1725691,99734.9172701 -2239204.2659032,99734.9669580798 -2239204.30668106,99735.0534486 -2239204.3151996,99735.2429176 -2239204.3726744,99735.4175333 -2239204.4660085,99735.5705852 -2239204.5916149,99735.6961917 -2239204.7446668,99735.7895257 -2239204.9192825,99735.8470005 -2239205.1087515,99735.8664074 -2239205.3057928,99735.8664074 -2239205.806056,99735.8470005 -2239206.0030972,99735.7895257 -2239206.1925662,99735.7871029413 -2239206.19709886,99735.9177965 -2239206.266956,99736.0708484 -2239206.3925625,99736.1964549 -2239206.5456144,99736.2897889 -2239206.7202301,99736.2988511704 -2239206.7501044,99736.3898415 -2239206.9203353,99736.4473163 -2239207.1098044,99736.4667232 -2239207.3068456,99736.4667232 -2239207.4068983,99736.4617960304 -2239207.4569246,99736.4667232 -2239207.5069509,99736.4667232 -2239207.57735392,99736.4898942 -2239207.6207038,99736.547369 -2239207.8101729,99736.5631959389 -2239207.97086704,99736.5899468 -2239208.0209144,99736.6474216 -2239208.2103835,99736.6632486227 -2239208.37107766,99736.6899995 -2239208.421125,99736.7474743 -2239208.610594,99736.7668811 -2239208.8076352,99736.7668811 -2239208.87803829,99736.7900521 -2239208.9213882,99736.8475269 -2239209.1108572,99736.8512736244 -2239209.14889828,99736.8901047 -2239209.2215461,99736.9475796 -2239209.4110152,99736.951326291 -2239209.44905612,99736.9901574 -2239209.521704,99737.0329471384 -2239209.66276292,99737.0713748 -2239209.6942997,99737.1969813 -2239209.8473516,99737.2903153 -2239210.0219673,99737.3477901 -2239210.2114363,99737.367197 -2239210.4084775,99737.367197 -2239210.41124683,99737.3970866 -2239210.4476674,99737.4904206 -2239210.6222831,99737.5019722663 -2239210.66036386,99737.5186388 -2239210.6692723,99737.6716907 -2239210.7948787,99737.7167900108 -2239210.84983238,99737.7717433 -2239210.8949314,99737.8168423337 -2239210.94988471,99737.8573605503 -2239210.98313714,99738.018902 -2239211.0694829,99738.1719539 -2239211.1950893,99738.2170533011 -2239211.25004306,99738.2720065 -2239211.295142,99738.3171054434 -2239211.3500952,99738.3720592 -2239211.3951946,99738.4976657 -2239211.5482465,99738.5909997 -2239211.7228622,99738.6484745 -2239211.9123312,99738.6678813 -2239212.1093725,99738.6678813 -2239212.2094251,99738.6484745 -2239212.4064663,99738.6081004414 -2239212.53956179,99738.61726363 -2239212.55072717,99738.6722171 -2239212.5958263,99738.7978236 -2239212.7488782,99738.8911576 -2239212.9234939,99738.9486324 -2239213.1129629,99738.9680393 -2239213.3100042,99738.9680393 -2239213.4100568,99738.9486324 -2239213.607098,99738.9021769824 -2239213.76024105,99738.9486324 -2239213.9133841,99738.9680393 -2239214.1104253,99738.9680393 -2239214.3105306,99738.9486324 -2239214.5075718,99738.8911576 -2239214.6970409,99738.7978236 -2239214.8716565,99738.6722171 -2239215.0247084,99738.6172637911 -2239215.06980743,99738.5721645 -2239215.1247611,99738.462257725 -2239215.21495922,99738.3720592 -2239215.3248664,99738.2190073 -2239215.4504728,99738.2014247057 -2239215.45987089,99738.2367425085 -2239215.57629807,99738.2621522445 -2239215.60725993,99738.3720592 -2239215.6974582,99738.462257725 -2239215.80736538,99738.5721645 -2239215.8975635,99738.5757227977 -2239215.9018993,99738.7584604 -2239215.9018993,99738.9555016 -2239215.9213062,99739.1449707 -2239215.978781,99739.3152014914 -2239216.06977127,99739.345076 -2239216.0788336,99739.5088552031 -2239216.16637542,99739.6726345 -2239216.0788336,99739.8621035 -2239216.0213588,99740.0591448 -2239216.0019519,99740.1591974 -2239216.0019519,99740.2092237 -2239216.00687907,99740.25925 -2239216.0019519,99740.3593027 -2239216.0019519,99740.5563439 -2239216.0213588,99740.745813 -2239216.0788336,99740.9204286 -2239216.1721676,99741.0734805 -2239216.2977741,99741.199087 -2239216.450826,99741.292421 -2239216.6254417,99741.3498958 -2239216.8149107,99741.3693027 -2239217.0119519,99741.3693027 -2239217.2120572,99741.3498958 -2239217.4090984,99741.292421 -2239217.5985675,99741.26925 -2239217.64191741,99741.26925 -2239217.7123204,99741.2498432 -2239217.9093617,99741.1923684 -2239218.0988307,99741.0990344 -2239218.2734464,99740.9734279 -2239218.4264983,99740.820376 -2239218.5521047,99740.6457603 -2239218.6454388,99740.4562913 -2239218.7029136,99740.3869959453 -2239218.70973857,99740.373112 -2239218.7266562,99740.2200601 -2239218.8522627,99740.0454445 -2239218.9455967,99740.0155699914 -2239218.95465903,99739.8453392 -2239219.0456493,99739.6558701 -2239219.1031241,99739.5865749089 -2239219.10994909,99739.5726909 -2239219.1268668,99739.419639 -2239219.2524732,99739.2580975504 -2239219.33881896,99739.1194811 -2239219.4525785,99738.9448654 -2239219.5459125,99738.8038065828 -2239219.5887023,99738.7722698 -2239219.62713,99738.7173161175 -2239219.67222931,99738.6722171 -2239219.7271826,99738.5191652 -2239219.8527891,99738.3445495 -2239219.9461231,99738.1550805 -2239220.0035979,99737.9580393 -2239220.0230048,99737.8876361623 -2239220.0230048,99737.8442863 -2239220.0461758,99737.6548173 -2239220.1036506,99737.4941231253 -2239220.11947754,99737.4440758 -2239220.1462284,99737.2546067 -2239220.2037032,99737.0575655 -2239220.2231101,99736.9575128 -2239220.2231101,99736.7604716 -2239220.2037032,99736.5710026 -2239220.1462284,99736.5276526912 -2239220.1230574,99736.4572496 -2239220.1230574,99736.2602084 -2239220.1036506,99736.0707394 -2239220.0461758,99735.8961237 -2239219.9528417,99735.8220170434 -2239219.89202396,99735.6705288 -2239219.8460705,99735.4959131 -2239219.7527365,99735.3428612 -2239219.62713,99735.29776207 -2239219.57217653,99735.2428086 -2239219.5270774,99735.1172021 -2239219.3740254,99735.0238681 -2239219.1994098,99734.9663933 -2239219.0099407,99734.9469864 -2239218.8128995,99734.9469864 -2239218.7128469,99734.9519135732 -2239218.66282054,99734.9469864 -2239218.6127942,99734.9469864 -2239218.54239114,99734.9238154 -2239218.4990413,99734.8810256616 -2239218.35798238,99734.842598 -2239218.3264456,99734.7169915 -2239218.1733937,99734.7075934665 -2239218.15581122,99734.5531854 -2239218.2026504,99734.3561441 -2239218.2220572,99734.2560915 -2239218.2220572,99734.2060652 -2239218.21713006,99734.1560389 -2239218.2220572,99734.153269497 -2239218.2220572,99734.1168489 -2239218.2519468,99733.9422333 -2239218.3452808,99733.7527642 -2239218.4027556,99733.555723 -2239218.4221625,99733.4556704 -2239218.4221625,99733.3962216239 -2239218.4163073,99733.3419174 -2239218.4453335,99733.1524484 -2239218.5028083,99732.9554071 -2239218.5222152,99732.8553545 -2239218.5222152,99732.6583133 -2239218.5028083,99732.4688442 -2239218.4453335,99732.4187968324 -2239218.41858262,99732.2581027 -2239218.4027556,99732.0686337 -2239218.3452808,99731.9959858341 -2239218.30644972,99731.9579448 -2239218.302703,99731.7684757 -2239218.2452282,99731.5938601 -2239218.1518942,99731.4408082 -2239218.0262877,99731.3957091663 -2239217.97133439,99731.3407555 -2239217.9262351,99731.2151491 -2239217.7731832,99731.121815 -2239217.5985675,99731.0643402 -2239217.4090984,99731.0449334 -2239217.2120572,99731.0449334 -2239217.0119519,99731.0643402 -2239216.8149107,99731.121815 -2239216.6254417,99731.1485658751 -2239216.57539437,99731.1643929 -2239216.4147001,99731.2218677 -2239216.2252311,99731.2450386 -2239216.18188138,99731.2450386 -2239216.1114782,99731.2644455 -2239215.9144369,99731.3219203 -2239215.7249679,99731.3486711837 -2239215.6749205,99731.354945644 -2239215.61121495,99731.3486711837 -2239215.5475094,99731.3219203 -2239215.497462,99731.3128580278 -2239215.4675877,99731.2218677 -2239215.2973567,99731.2128054311 -2239215.26748241,99731.121815 -2239215.0972514,99731.1127527279 -2239215.0673771,99731.0217624 -2239214.8971461,99730.9642876 -2239214.7076771,99730.9484605738 -2239214.5469829,99730.9286978954 -2239214.51000958,99730.8149385 -2239214.3713933,99730.7377477001 -2239214.22697941,99730.5977179188 -2239214.15213197,99730.567844 -2239214.1430698,99730.3932284 -2239214.0497358,99730.3191216666 -2239213.98891804,99730.1676335 -2239213.9429646,99729.997402493 -2239213.85197417,99729.9675282 -2239213.8429119,99729.9174808437 -2239213.81616104,99729.7567866 -2239213.8003341,99729.5673176 -2239213.7428593,99729.4946695048 -2239213.7040281,99729.4566287 -2239213.7002814,99729.2671597 -2239213.6428066,99729.092544 -2239213.5494726,99728.9394921 -2239213.4238662,99728.8943929214 -2239213.36891268,99728.8394394 -2239213.3238135,99728.79434027 -2239213.26886003,99728.7393868 -2239213.2237609,99728.6461920537 -2239213.11020282,99728.5530909 -2239213.1193725,99728.4530382 -2239213.1193725,99728.255997 -2239213.0999656,99728.066528 -2239213.0424908,99728.0231780912 -2239213.0193198,99727.8527224 -2239213.0193198,99727.6556811 -2239212.9999129,99727.4662121 -2239212.9424381,99727.2959810832 -2239212.85144776,99727.2661068 -2239212.8423855,99727.0958760086 -2239212.75139523,99727.0660015 -2239212.7423329,99726.8913859 -2239212.6489988,99726.738334 -2239212.5233924,99726.6932348052 -2239212.4684389,99726.6382813 -2239212.4233397,99726.5126749 -2239212.2702878,99726.4789537659 -2239212.20720004,99726.4657947 -2239212.2232344,99726.3127428 -2239212.3488409,99726.1381271 -2239212.4421749,99725.9486581 -2239212.4996497,99725.7516169 -2239212.5190566,99725.6515642 -2239212.5190566,99725.454523 -2239212.4996497,99725.265054 -2239212.4421749,99725.0904383 -2239212.3488409,99724.9373864 -2239212.2232344,99724.8922873825 -2239212.16828111,99724.8373337 -2239212.1231818,99724.7117273 -2239211.9701299,99724.6183933 -2239211.7955142,99724.6093311591 -2239211.76564033,99724.5183406 -2239211.5954089,99724.4608658 -2239211.4059399,99724.441459 -2239211.2088987,99724.441459 -2239210.5085302,99724.4608658 -2239210.3114889,99724.5183406 -2239210.1220199,99724.5415116 -2239210.07866999)) buffer-1.1 POLYGON ((99724.45151159 -2239210.0570456,99724.45151159 -2239209.90821432,99724.47264779 -2239209.69361496,99724.53524411 -2239209.48726254,99724.55156424 -2239209.45672972,99724.55156424 -2239209.4079511,99724.57270043 -2239209.19335175,99724.63529675 -2239208.98699933,99724.7262871367 -2239208.81676829,99724.73534939 -2239208.78689404,99724.83700031 -2239208.59671856,99724.97379942 -2239208.43002836,99725.0287529111 -2239208.38492919,99725.07385206 -2239208.32997572,99725.128805548 -2239208.28487656,99725.17390471 -2239208.22992307,99725.2288581827 -2239208.18482392,99725.27395735 -2239208.12987043,99725.3289108328 -2239208.08477127,99725.37400999 -2239208.02981779,99725.4289634811 -2239207.98471862,99725.47406263 -2239207.92976515,99725.64075284 -2239207.79296603,99725.83092832 -2239207.69131512,99725.8608025436 -2239207.68225287,99726.0310336 -2239207.59126248,99726.23738602 -2239207.52866615,99726.45198538 -2239207.50752996,99727.4525118 -2239207.50752996,99727.502538125 -2239207.51245712,99727.55256445 -2239207.50752996,99727.5629408061 -2239207.50752996,99727.57427971 -2239207.39240418,99727.63687603 -2239207.18605176,99727.73852694 -2239206.99587628,99727.87532605 -2239206.82918608,99727.9302795548 -2239206.7840869,99727.9753787 -2239206.72913344,99728.0303321742 -2239206.68403429,99728.07543134 -2239206.62908079,99728.1303848228 -2239206.58398163,99728.17548398 -2239206.52902815,99728.2304374628 -2239206.48392899,99728.27553662 -2239206.42897551,99728.44222683 -2239206.29217639,99728.6037683473 -2239206.20583065,99728.74238476 -2239206.09207111,99728.93256024 -2239205.9904202,99728.9624344654 -2239205.98135795,99729.13266552 -2239205.89036755,99729.2695322976 -2239205.84884947,99729.27517463 -2239205.7915619,99729.33777095 -2239205.58520948,99729.43942186 -2239205.395034,99729.57622098 -2239205.2283438,99729.6311744542 -2239205.18324465,99729.67627362 -2239205.12829115,99729.7312271028 -2239205.08319199,99729.77632626 -2239205.02823851,99729.94301647 -2239204.8914394,99730.1045579766 -2239204.80509367,99730.24317439 -2239204.69133411,99730.43334987 -2239204.5896832,99730.4632241149 -2239204.58062095,99730.63345516 -2239204.48963056,99730.83980758 -2239204.42703424,99730.9915507716 -2239204.41208883,99731.03366573 -2239204.38957792,99731.24001815 -2239204.32698159,99731.45461751 -2239204.3058454,99731.5033961238 -2239204.3058454,99731.53392894 -2239204.28952527,99731.5638031868 -2239204.28046302,99731.7054002625 -2239204.2047778,99731.7322799528 -2239204.18271821,99731.7543395289 -2239204.15583854,99731.84068528 -2239203.994297,99731.9774844 -2239203.8276068,99732.0324378828 -2239203.78250764,99732.07753704 -2239203.72755416,99732.24422724 -2239203.59075504,99732.43440273 -2239203.48910413,99732.64075515 -2239203.42650781,99732.8553545 -2239203.40537162,99733.15551243 -2239203.40537162,99733.37011178 -2239203.42650781,99733.5764642 -2239203.48910413,99733.7466952432 -2239203.58009452,99733.77656949 -2239203.58915677,99733.96674497 -2239203.69080769,99734.1053613588 -2239203.80456722,99734.2469584764 -2239203.88025245,99734.2768327 -2239203.8893147,99734.4470637803 -2239203.98030511,99734.47693799 -2239203.98936735,99734.5416536026 -2239204.02395857,99734.57074349 -2239204.02682367,99734.77709591 -2239204.08941999,99734.9672714 -2239204.1910709,99735.002776056 -2239204.22020882,99735.07100671 -2239204.22692895,99735.27735913 -2239204.28952527,99735.46753461 -2239204.39117618,99735.63422481 -2239204.5279753,99735.77102393 -2239204.6946655,99735.87267484 -2239204.88484098,99735.93527116 -2239205.0911934,99735.95640735 -2239205.30579276,99735.95640735 -2239205.80605597,99735.93527116 -2239206.02065533,99735.8950519575 -2239206.15324028,99735.96779782 -2239206.19212375,99736.13448802 -2239206.32892287,99736.27128714 -2239206.49561307,99736.37293805 -2239206.68578855,99736.3820002963 -2239206.71566277,99736.47299069 -2239206.88589383,99736.53558702 -2239207.09224626,99736.55672321 -2239207.30684561,99736.55672321 -2239207.40689825,99736.5517960479 -2239207.45692457,99736.55672321 -2239207.50695089,99736.55672321 -2239207.55572952,99736.57304334 -2239207.58626233,99736.63563966 -2239207.79261475,99736.6505850566 -2239207.94435792,99736.67309598 -2239207.9864729,99736.7356923 -2239208.19282532,99736.7506376966 -2239208.34456849,99736.77314862 -2239208.38668347,99736.83574494 -2239208.59303589,99736.85688113 -2239208.80763525,99736.85688113 -2239208.85641386,99736.87320126 -2239208.88694668,99736.93579759 -2239209.09329911,99736.9386626941 -2239209.122389,99736.97325391 -2239209.18710461,99737.03585023 -2239209.39345703,99737.0387153344 -2239209.42254693,99737.07330655 -2239209.48726254,99737.1107700712 -2239209.61076322,99737.13501445 -2239209.63066007,99737.27181356 -2239209.79735027,99737.37346448 -2239209.98752575,99737.4360608 -2239210.19387817,99737.4539791828 -2239210.37580658,99737.47191885 -2239210.39766613,99737.57356976 -2239210.58784161,99737.5778688697 -2239210.60201388,99737.7353303 -2239210.73123914,99737.7804294535 -2239210.78619261,99737.83538295 -2239210.83129178,99737.8804821072 -2239210.88624526,99737.9073617975 -2239210.90830485,99738.06890331 -2239210.99465059,99738.23559352 -2239211.13144971,99738.2806926772 -2239211.18640319,99738.33564616 -2239211.23150235,99738.3807453172 -2239211.28645583,99738.4356988 -2239211.33155499,99738.57249792 -2239211.4982452,99738.67414883 -2239211.68842068,99738.73674515 -2239211.8947731,99738.75788134 -2239212.10937245,99738.75788134 -2239212.20942509,99738.73674515 -2239212.42402445,99738.7102974729 -2239212.51121076,99738.73585673 -2239212.5321867,99738.87265584 -2239212.69887691,99738.97430676 -2239212.88905239,99739.03690308 -2239213.09540481,99739.05803927 -2239213.31000416,99739.05803927 -2239213.41005681,99739.03690308 -2239213.62465616,99738.9957738532 -2239213.76024105,99739.03690308 -2239213.89582595,99739.05803927 -2239214.1104253,99739.05803927 -2239214.31053059,99739.03690308 -2239214.52512994,99738.97430676 -2239214.73148236,99738.87265584 -2239214.92165784,99738.73585673 -2239215.08834805,99738.6809032472 -2239215.13344721,99738.63580409 -2239215.18840069,99738.5258971362 -2239215.27859899,99738.4356988 -2239215.38850598,99738.3057292327 -2239215.49516925,99738.3172807609 -2239215.53324953,99738.3257918344 -2239215.54362031,99738.4356988 -2239215.63381862,99738.5258971196 -2239215.74372559,99738.6089670129 -2239215.81189929,99738.75846041 -2239215.81189929,99738.97305977 -2239215.83303549,99739.17941219 -2239215.89563181,99739.3496432464 -2239215.9866222,99739.37951747 -2239215.99568445,99739.50885523 -2239216.06481692,99739.63819299 -2239215.99568445,99739.84454541 -2239215.93308813,99740.05914476 -2239215.91195194,99740.15919741 -2239215.91195194,99740.20922373 -2239215.9168791,99740.25925005 -2239215.91195194,99740.35930269 -2239215.91195194,99740.57390205 -2239215.93308813,99740.78025447 -2239215.99568445,99740.97042995 -2239216.09733536,99741.13712015 -2239216.23413448,99741.27391927 -2239216.40082468,99741.37557018 -2239216.59100016,99741.4381665 -2239216.79735258,99741.45930269 -2239217.01195194,99741.45930269 -2239217.21205722,99741.4381665 -2239217.42665658,99741.37557018 -2239217.633009,99741.35925005 -2239217.66354182,99741.35925005 -2239217.71232044,99741.33811386 -2239217.92691979,99741.27551754 -2239218.13327221,99741.17386662 -2239218.32344769,99741.03706751 -2239218.49013789,99740.87037731 -2239218.62693701,99740.68020183 -2239218.72858792,99740.4738494 -2239218.79118424,99740.4304621038 -2239218.79545752,99740.27006145 -2239218.92709494,99740.07988597 -2239219.02874585,99740.050011744 -2239219.0378081,99739.87978068 -2239219.12879849,99739.67342826 -2239219.19139481,99739.6300409638 -2239219.19566809,99739.46964031 -2239219.32730551,99739.3080987927 -2239219.41365125,99739.16948238 -2239219.52741079,99738.9793069 -2239219.6290617,99738.855806222 -2239219.66652523,99738.83590937 -2239219.69076961,99738.7809558789 -2239219.73586877,99738.73585673 -2239219.79082225,99738.56916653 -2239219.92762136,99738.37899105 -2239220.02927227,99738.17263863 -2239220.0918686,99737.95803927 -2239220.11300479,99737.9092606432 -2239220.11300479,99737.87872783 -2239220.12932492,99737.67237541 -2239220.19192124,99737.5206322346 -2239220.20686664,99737.47851726 -2239220.22937756,99737.27216484 -2239220.29197388,99737.05756549 -2239220.31311007,99736.95751285 -2239220.31311007,99736.74291349 -2239220.29197388,99736.53656107 -2239220.22937756,99736.5060282537 -2239220.21305743,99736.45724963 -2239220.21305743,99736.24265028 -2239220.19192124,99736.03629786 -2239220.12932492,99735.84612238 -2239220.027674,99735.778968366 -2239219.97256213,99735.63608729 -2239219.92921963,99735.44591181 -2239219.82756872,99735.2792216 -2239219.69076961,99735.2341224342 -2239219.63581611,99735.17916896 -2239219.59071696,99735.04236985 -2239219.42402676,99734.94071893 -2239219.23385128,99734.87812261 -2239219.02749886,99734.85698642 -2239218.8128995,99734.85698642 -2239218.71284686,99734.8619135822 -2239218.66282054,99734.85698642 -2239218.61279422,99734.85698642 -2239218.5640156,99734.84066629 -2239218.53348278,99734.8032027694 -2239218.4099821,99734.77895839 -2239218.39008525,99734.6722951221 -2239218.26011568,99734.57074349 -2239218.29092103,99734.35614414 -2239218.31205722,99734.2560915 -2239218.31205722,99734.206065175 -2239218.30713006,99734.1887097995 -2239218.30883941,99734.16685025 -2239218.32677908,99733.97667477 -2239218.42842999,99733.77032235 -2239218.49102632,99733.555723 -2239218.51216251,99733.45567036 -2239218.51216251,99733.4144813942 -2239218.50810575,99733.37635892 -2239218.52848264,99733.1700065 -2239218.59107896,99732.95540714 -2239218.61221515,99732.8553545 -2239218.61221515,99732.64075515 -2239218.59107896,99732.43440273 -2239218.52848264,99732.3922877578 -2239218.50597172,99732.24054458 -2239218.49102632,99732.03419215 -2239218.42842999,99731.9694765374 -2239218.39383877,99731.94038665 -2239218.39097367,99731.73403423 -2239218.32837735,99731.54385875 -2239218.22672644,99731.37716854 -2239218.08992732,99731.3320693911 -2239218.03497385,99731.2771159 -2239217.98987468,99731.14031679 -2239217.82318448,99731.03866587 -2239217.633009,99730.97606955 -2239217.42665658,99730.95493336 -2239217.21205722,99730.95493336 -2239217.01195194,99730.97606955 -2239216.79735258,99731.03866587 -2239216.59100016,99731.0611767929 -2239216.54888519,99731.07612219 -2239216.39714201,99731.13871852 -2239216.19078959,99731.15503865 -2239216.16025677,99731.15503865 -2239216.11147815,99731.17617484 -2239215.8968788,99731.23877116 -2239215.69052638,99731.2612820825 -2239215.64841141,99731.2649456144 -2239215.61121494,99731.2612820828 -2239215.57401848,99731.23877116 -2239215.5319035,99731.2297089137 -2239215.50202928,99731.13871852 -2239215.33179822,99731.129656271 -2239215.30192399,99731.03866587 -2239215.13169293,99731.0296036237 -2239215.10181871,99730.93861323 -2239214.93158765,99730.87601691 -2239214.72523523,99730.8610715134 -2239214.57349206,99730.8538657489 -2239214.56001102,99730.74010622 -2239214.42139463,99730.6715646238 -2239214.29316233,99730.5632767436 -2239214.23528126,99730.53340252 -2239214.22621901,99730.34322704 -2239214.12456809,99730.276073026 -2239214.06945622,99730.13319195 -2239214.02611372,99729.9629609068 -2239213.93512333,99729.93308666 -2239213.92606108,99729.8909716838 -2239213.90355016,99729.73922851 -2239213.88860476,99729.53287609 -2239213.82600844,99729.4681604841 -2239213.79141723,99729.43907058 -2239213.78855212,99729.23271816 -2239213.72595579,99729.04254268 -2239213.62430488,99728.87585248 -2239213.48750577,99728.8307533142 -2239213.43255227,99728.77579984 -2239213.38745312,99728.7307006948 -2239213.33249966,99728.67574719 -2239213.28740048,99728.6073273203 -2239213.20403063,99728.55309087 -2239213.20937245,99728.45303823 -2239213.20937245,99728.23843887 -2239213.18823626,99728.03208645 -2239213.12563994,99728.0015536337 -2239213.10931981,99727.85272237 -2239213.10931981,99727.63812302 -2239213.08818362,99727.4317706 -2239213.0255873,99727.2615395585 -2239212.93459691,99727.23166531 -2239212.92553465,99727.0614342536 -2239212.83454426,99727.03156003 -2239212.82548201,99726.84138455 -2239212.7238311,99726.67469434 -2239212.58703198,99726.6295951911 -2239212.53207851,99726.5746417 -2239212.48697934,99726.4583176232 -2239212.34523804,99726.36274414 -2239212.42367317,99726.17256866 -2239212.52532408,99725.96621623 -2239212.58792041,99725.75161688 -2239212.6090566,99725.65156424 -2239212.6090566,99725.43696488 -2239212.58792041,99725.23061246 -2239212.52532408,99725.04043698 -2239212.42367317,99724.87374678 -2239212.28687406,99724.8286476041 -2239212.23192056,99724.77369414 -2239212.18682141,99724.63689502 -2239212.02013121,99724.53524411 -2239211.82995573,99724.5261818637 -2239211.80008151,99724.43519147 -2239211.62985045,99724.37259514 -2239211.42349802,99724.35145895 -2239211.20889867,99724.35145895 -2239210.50853017,99724.37259514 -2239210.29393082,99724.43519147 -2239210.0875784,99724.45151159 -2239210.0570456)) buffer-1.5 POLYGON ((99723.95146 -2239211.2089, 99723.95146 -2239210.50853, 99723.98028 -2239210.21589, 99724.05151 -2239209.98109, 99724.05151 -2239209.90821, 99724.08033 -2239209.61558, 99724.15553 -2239209.3677, 99724.18039 -2239209.11532, 99724.26574 -2239208.83393, 99724.35674 -2239208.66369, 99724.3658 -2239208.63382, 99724.50441 -2239208.37449, 99724.69096 -2239208.14719, 99724.7459 -2239208.1021, 99724.79101 -2239208.04713, 99724.84597 -2239208.00203, 99724.89106 -2239207.94708, 99724.94601 -2239207.90199, 99724.99111 -2239207.84703, 99725.04609 -2239207.80191, 99725.09117 -2239207.74698, 99725.14611 -2239207.70189, 99725.19122 -2239207.64692, 99725.41852 -2239207.46038, 99725.67785 -2239207.32176, 99725.70776 -2239207.31269, 99725.87796 -2239207.22171, 99726.15935 -2239207.13635, 99726.45199 -2239207.10753, 99727.24471 -2239207.10753, 99727.26732 -2239207.03298, 99727.40594 -2239206.77365, 99727.59248 -2239206.54634, 99727.64746 -2239206.50122, 99727.69254 -2239206.44629, 99727.74748 -2239206.4012, 99727.79259 -2239206.34624, 99727.84755 -2239206.30113, 99727.89264 -2239206.24619, 99727.94757 -2239206.20111, 99727.99269 -2239206.14613, 99728.22 -2239205.95959, 99728.38155 -2239205.87324, 99728.52016 -2239205.75948, 99728.77949 -2239205.62087, 99728.80935 -2239205.61181, 99728.93391 -2239205.54523, 99728.96822 -2239205.43214, 99729.10683 -2239205.17281, 99729.29338 -2239204.9455, 99729.34833 -2239204.9004, 99729.39343 -2239204.84545, 99729.44838 -2239204.80035, 99729.49348 -2239204.7454, 99729.72079 -2239204.55885, 99729.88233 -2239204.47251, 99730.02095 -2239204.35875, 99730.28028 -2239204.22013, 99730.31014 -2239204.21107, 99730.48038 -2239204.12008, 99730.76177 -2239204.03472, 99730.87374 -2239204.02369, 99730.88059 -2239204.02003, 99731.16198 -2239203.93467, 99731.41243 -2239203.91001, 99731.44315 -2239203.89359, 99731.5081 -2239203.77207, 99731.69464 -2239203.54476, 99731.74959 -2239203.49966, 99731.79469 -2239203.44471, 99732.022 -2239203.25817, 99732.28133 -2239203.11955, 99732.56272 -2239203.03419, 99732.85535 -2239203.00537, 99733.15551 -2239203.00537, 99733.44815 -2239203.03419, 99733.72954 -2239203.11955, 99733.89976 -2239203.21054, 99733.92964 -2239203.2196, 99734.18897 -2239203.35822, 99734.32761 -2239203.47199, 99734.4 -2239203.51069, 99734.42991 -2239203.51976, 99734.60016 -2239203.61077, 99734.63001 -2239203.61982, 99734.66893 -2239203.64062, 99734.93017 -2239203.71987, 99735.14389 -2239203.8341, 99735.14904 -2239203.83461, 99735.43043 -2239203.91997, 99735.68976 -2239204.05859, 99735.91707 -2239204.24513, 99736.10361 -2239204.47244, 99736.24223 -2239204.73177, 99736.32759 -2239205.01316, 99736.35641 -2239205.30579, 99736.35641 -2239205.80606, 99736.33909 -2239205.98187, 99736.41733 -2239206.04608, 99736.60387 -2239206.27338, 99736.74249 -2239206.53272, 99736.75155 -2239206.56258, 99736.84254 -2239206.73282, 99736.9279 -2239207.01421, 99736.95672 -2239207.30685, 99736.95672 -2239207.4069, 99736.95179 -2239207.45692, 99736.95275 -2239207.46666, 99737.02795 -2239207.71458, 99737.03898 -2239207.82653, 99737.04265 -2239207.8334, 99737.12801 -2239208.11479, 99737.13904 -2239208.22676, 99737.1427 -2239208.23361, 99737.22806 -2239208.515, 99737.25291 -2239208.76738, 99737.32199 -2239208.99507, 99737.34281 -2239209.03403, 99737.42204 -2239209.29524, 99737.44286 -2239209.33419, 99737.46408 -2239209.40414, 99737.6044 -2239209.57512, 99737.74302 -2239209.83445, 99737.82837 -2239210.11584, 99737.84096 -2239210.24364, 99737.89745 -2239210.34932, 99738.01817 -2239210.4484, 99738.06325 -2239210.50333, 99738.11823 -2239210.54845, 99738.14922 -2239210.58621, 99738.29113 -2239210.66206, 99738.51844 -2239210.84861, 99738.56354 -2239210.90357, 99738.61849 -2239210.94866, 99738.66359 -2239211.00361, 99738.71854 -2239211.04871, 99738.90509 -2239211.27602, 99739.0437 -2239211.53535, 99739.12906 -2239211.81674, 99739.15788 -2239212.10937, 99739.15788 -2239212.20943, 99739.13946 -2239212.39649, 99739.20524 -2239212.47665, 99739.34386 -2239212.73598, 99739.42922 -2239213.01737, 99739.45804 -2239213.31, 99739.45804 -2239213.41006, 99739.42922 -2239213.70269, 99739.41176 -2239213.76024, 99739.42922 -2239213.81779, 99739.45804 -2239214.11043, 99739.45804 -2239214.31053, 99739.42922 -2239214.60317, 99739.34386 -2239214.88456, 99739.20524 -2239215.14389, 99739.0187 -2239215.37119, 99738.96375 -2239215.41629, 99738.95173 -2239215.43093, 99739.0511 -2239215.44072, 99739.33249 -2239215.52608, 99739.50273 -2239215.61707, 99739.50886 -2239215.61893, 99739.76651 -2239215.54077, 99740.05914 -2239215.51195, 99740.1592 -2239215.51195, 99740.20922 -2239215.51688, 99740.25925 -2239215.51195, 99740.3593 -2239215.51195, 99740.65194 -2239215.54077, 99740.93333 -2239215.62613, 99741.19266 -2239215.76475, 99741.41996 -2239215.95129, 99741.60651 -2239216.1786, 99741.74512 -2239216.43793, 99741.83048 -2239216.71932, 99741.8593 -2239217.01195, 99741.8593 -2239217.21206, 99741.83048 -2239217.50469, 99741.75529 -2239217.75257, 99741.73043 -2239218.00496, 99741.64507 -2239218.28635, 99741.50645 -2239218.54568, 99741.31991 -2239218.77298, 99741.09261 -2239218.95952, 99740.83328 -2239219.09814, 99740.6046 -2239219.16751, 99740.49229 -2239219.25968, 99740.23296 -2239219.3983, 99740.20308 -2239219.40737, 99740.03285 -2239219.49835, 99739.80418 -2239219.56772, 99739.69187 -2239219.65989, 99739.53032 -2239219.74624, 99739.39171 -2239219.86, 99739.13238 -2239219.99861, 99739.06303 -2239220.01965, 99739.0187 -2239220.07366, 99738.79139 -2239220.26021, 99738.53206 -2239220.39882, 99738.25067 -2239220.48418, 99737.99834 -2239220.50903, 99737.75041 -2239220.58424, 99737.63844 -2239220.59527, 99737.63159 -2239220.59893, 99737.3502 -2239220.68429, 99737.05757 -2239220.71311, 99736.95751 -2239220.71311, 99736.66488 -2239220.68429, 99736.417 -2239220.6091, 99736.16461 -2239220.58424, 99735.88322 -2239220.49888, 99735.62389 -2239220.36026, 99735.58764 -2239220.33051, 99735.48301 -2239220.29877, 99735.22368 -2239220.16016, 99734.99638 -2239219.97361, 99734.95127 -2239219.91865, 99734.89633 -2239219.87356, 99734.70978 -2239219.64625, 99734.57117 -2239219.38692, 99734.48581 -2239219.10553, 99734.45699 -2239218.8129, 99734.45699 -2239218.71285, 99734.45806 -2239218.70202, 99734.35614 -2239218.71206, 99734.2905 -2239218.71206, 99734.12975 -2239218.79798, 99733.84836 -2239218.88334, 99733.55572 -2239218.91216, 99733.48285 -2239218.91216, 99733.24804 -2239218.98339, 99732.95541 -2239219.01222, 99732.85535 -2239219.01222, 99732.56272 -2239218.98339, 99732.28133 -2239218.89803, 99732.27448 -2239218.89437, 99732.16251 -2239218.88334, 99731.88112 -2239218.79798, 99731.8422 -2239218.77718, 99731.58096 -2239218.69793, 99731.32163 -2239218.55931, 99731.09433 -2239218.37277, 99731.04924 -2239218.31783, 99730.99427 -2239218.27272, 99730.80773 -2239218.04541, 99730.66911 -2239217.78608, 99730.58376 -2239217.50469, 99730.55493 -2239217.21206, 99730.55493 -2239217.01195, 99730.58376 -2239216.71932, 99730.66911 -2239216.43793, 99730.67278 -2239216.43105, 99730.68381 -2239216.31911, 99730.759 -2239216.07123, 99730.78386 -2239215.81884, 99730.84317 -2239215.62332, 99730.76917 -2239215.48487, 99730.76012 -2239215.45502, 99730.66911 -2239215.28477, 99730.66004 -2239215.25486, 99730.56906 -2239215.08466, 99730.4837 -2239214.80327, 99730.47622 -2239214.72734, 99730.40752 -2239214.64362, 99730.38225 -2239214.59635, 99730.38033 -2239214.59577, 99730.121 -2239214.45716, 99730.08474 -2239214.4274, 99729.98012 -2239214.39567, 99729.80988 -2239214.30467, 99729.78001 -2239214.29561, 99729.77316 -2239214.29195, 99729.66119 -2239214.28092, 99729.3798 -2239214.19556, 99729.34088 -2239214.17476, 99729.07964 -2239214.09551, 99728.82031 -2239213.95689, 99728.59301 -2239213.77035, 99728.54792 -2239213.7154, 99728.49296 -2239213.6703, 99728.44786 -2239213.61534, 99728.43888 -2239213.60798, 99728.1604 -2239213.58055, 99727.92559 -2239213.50932, 99727.85272 -2239213.50932, 99727.56009 -2239213.4805, 99727.2787 -2239213.39514, 99727.1085 -2239213.30416, 99727.07859 -2239213.29509, 99726.90834 -2239213.20408, 99726.87849 -2239213.19503, 99726.61916 -2239213.05642, 99726.39185 -2239212.86987, 99726.38593 -2239212.86265, 99726.32564 -2239212.89488, 99726.04425 -2239212.98023, 99725.75162 -2239213.00906, 99725.65156 -2239213.00906, 99725.35893 -2239212.98023, 99725.07754 -2239212.89488, 99724.81821 -2239212.75626, 99724.5909 -2239212.56972, 99724.54578 -2239212.51474, 99724.49085 -2239212.46966, 99724.30431 -2239212.24236, 99724.16569 -2239211.98303, 99724.15662 -2239211.95315, 99724.06564 -2239211.78292, 99723.98028 -2239211.50153, 99723.95146 -2239211.2089)) buffer-2 POLYGON ((99723.45146 -2239211.2089, 99723.45146 -2239210.50853, 99723.48989 -2239210.11835, 99723.55151 -2239209.91521, 99723.55151 -2239209.90821, 99723.58994 -2239209.51803, 99723.66513 -2239209.27016, 99723.68999 -2239209.01777, 99723.80381 -2239208.64258, 99723.8948 -2239208.47236, 99723.90386 -2239208.44248, 99724.08868 -2239208.09671, 99724.3374 -2239207.79363, 99724.39237 -2239207.74852, 99724.43746 -2239207.69358, 99724.49241 -2239207.64848, 99724.53751 -2239207.59353, 99724.59245 -2239207.54844, 99724.63756 -2239207.49347, 99724.69251 -2239207.44837, 99724.73761 -2239207.39342, 99724.79258 -2239207.34831, 99724.83767 -2239207.29337, 99725.14074 -2239207.04464, 99725.48651 -2239206.85982, 99725.5164 -2239206.85075, 99725.68662 -2239206.75977, 99726.0618 -2239206.64596, 99726.45199 -2239206.60753, 99726.93051 -2239206.60753, 99726.9902 -2239206.49586, 99727.23893 -2239206.19279, 99727.29389 -2239206.14769, 99727.33898 -2239206.09274, 99727.39394 -2239206.04764, 99727.43904 -2239205.99268, 99727.49399 -2239205.94758, 99727.53909 -2239205.89263, 99727.59404 -2239205.84754, 99727.63914 -2239205.79258, 99727.94221 -2239205.54385, 99728.10377 -2239205.4575, 99728.24237 -2239205.34375, 99728.53479 -2239205.18745, 99728.6911 -2239204.89502, 99728.93982 -2239204.59195, 99728.9948 -2239204.54683, 99729.03988 -2239204.4919, 99729.09481 -2239204.44682, 99729.13993 -2239204.39184, 99729.443 -2239204.14312, 99729.60454 -2239204.05678, 99729.74316 -2239203.94301, 99730.08893 -2239203.75819, 99730.11883 -2239203.74912, 99730.28904 -2239203.65814, 99730.66423 -2239203.54433, 99730.76844 -2239203.53407, 99731.06444 -2239203.44427, 99731.13947 -2239203.43688, 99731.34109 -2239203.19121, 99731.39604 -2239203.14611, 99731.44114 -2239203.09116, 99731.74421 -2239202.84243, 99732.08999 -2239202.65761, 99732.46517 -2239202.5438, 99732.85535 -2239202.50537, 99733.15551 -2239202.50537, 99733.54569 -2239202.5438, 99733.92088 -2239202.65761, 99734.09114 -2239202.74862, 99734.12098 -2239202.75767, 99734.46676 -2239202.94249, 99734.59911 -2239203.0511, 99734.62125 -2239203.05782, 99734.79151 -2239203.14883, 99734.82135 -2239203.15788, 99734.86028 -2239203.17869, 99735.12151 -2239203.25793, 99735.33065 -2239203.36972, 99735.62177 -2239203.45803, 99735.96755 -2239203.64285, 99736.27062 -2239203.89158, 99736.51935 -2239204.19465, 99736.70417 -2239204.54043, 99736.81798 -2239204.91561, 99736.85641 -2239205.30579, 99736.85641 -2239205.79675, 99737.01961 -2239205.9956, 99737.20443 -2239206.34137, 99737.2135 -2239206.37127, 99737.30448 -2239206.54148, 99737.41829 -2239206.91666, 99737.45672 -2239207.30685, 99737.45672 -2239207.4069, 99737.4562 -2239207.41217, 99737.51835 -2239207.61703, 99737.52862 -2239207.72126, 99737.6184 -2239208.01724, 99737.62867 -2239208.12147, 99737.71845 -2239208.41745, 99737.74331 -2239208.66984, 99737.78392 -2239208.80372, 99737.80475 -2239208.84269, 99737.88399 -2239209.10392, 99737.9048 -2239209.14285, 99737.91151 -2239209.16498, 99738.02014 -2239209.29734, 99738.20496 -2239209.64311, 99738.31877 -2239210.0183, 99738.32231 -2239210.05429, 99738.37173 -2239210.09484, 99738.41684 -2239210.14981, 99738.47006 -2239210.19349, 99738.56892 -2239210.24633, 99738.87199 -2239210.49505, 99738.91711 -2239210.55003, 99738.97204 -2239210.59511, 99739.01714 -2239210.65006, 99739.07209 -2239210.69516, 99739.32082 -2239210.99823, 99739.50564 -2239211.34401, 99739.61945 -2239211.71919, 99739.65788 -2239212.10937, 99739.65788 -2239212.20943, 99739.65302 -2239212.2588, 99739.8058 -2239212.54464, 99739.91961 -2239212.91982, 99739.95804 -2239213.31, 99739.95804 -2239213.41006, 99739.92355 -2239213.76024, 99739.95804 -2239214.11043, 99739.95804 -2239214.31053, 99739.91961 -2239214.70071, 99739.81799 -2239215.0357, 99740.05914 -2239215.01195, 99740.1592 -2239215.01195, 99740.20923 -2239215.01688, 99740.25925 -2239215.01195, 99740.3593 -2239215.01195, 99740.74948 -2239215.05038, 99741.12467 -2239215.16419, 99741.47044 -2239215.34901, 99741.77352 -2239215.59774, 99742.02224 -2239215.90081, 99742.20706 -2239216.24659, 99742.32087 -2239216.62177, 99742.3593 -2239217.01195, 99742.3593 -2239217.21206, 99742.32087 -2239217.60224, 99742.24568 -2239217.85011, 99742.22082 -2239218.1025, 99742.10701 -2239218.47769, 99741.92219 -2239218.82346, 99741.67346 -2239219.12653, 99741.37039 -2239219.37526, 99741.02462 -2239219.56008, 99740.84376 -2239219.61494, 99740.77007 -2239219.67542, 99740.4243 -2239219.86024, 99740.39442 -2239219.8693, 99740.2242 -2239219.96029, 99740.04334 -2239220.01515, 99739.96965 -2239220.07563, 99739.80811 -2239220.16197, 99739.6695 -2239220.27573, 99739.34642 -2239220.44841, 99739.06918 -2239220.67594, 99738.72341 -2239220.86076, 99738.34822 -2239220.97458, 99738.09586 -2239220.99943, 99737.84796 -2239221.07463, 99737.74373 -2239221.0849, 99737.44775 -2239221.17468, 99737.05757 -2239221.21311, 99736.95751 -2239221.21311, 99736.56733 -2239221.17468, 99736.31946 -2239221.09949, 99736.06707 -2239221.07463, 99735.69188 -2239220.96082, 99735.3514 -2239220.77883, 99735.29167 -2239220.76071, 99734.9459 -2239220.57589, 99734.64283 -2239220.32717, 99734.59773 -2239220.27221, 99734.54277 -2239220.22711, 99734.29405 -2239219.92404, 99734.10923 -2239219.57827, 99734.03865 -2239219.3456, 99733.9459 -2239219.37373, 99733.55572 -2239219.41216, 99733.54874 -2239219.41216, 99733.34559 -2239219.47379, 99732.95541 -2239219.51222, 99732.85535 -2239219.51222, 99732.46517 -2239219.47379, 99732.16918 -2239219.384, 99732.06496 -2239219.37373, 99731.68978 -2239219.25992, 99731.65085 -2239219.23911, 99731.38962 -2239219.15987, 99731.04385 -2239218.97505, 99730.74077 -2239218.72632, 99730.69568 -2239218.67137, 99730.64072 -2239218.62627, 99730.39199 -2239218.3232, 99730.20717 -2239217.97742, 99730.09336 -2239217.60224, 99730.05493 -2239217.21206, 99730.05493 -2239217.01195, 99730.09336 -2239216.62177, 99730.18316 -2239216.32575, 99730.19342 -2239216.22156, 99730.26861 -2239215.97368, 99730.29347 -2239215.7213, 99730.30719 -2239215.67607, 99730.29818 -2239215.64638, 99730.20717 -2239215.47611, 99730.1981 -2239215.44622, 99730.10712 -2239215.276, 99730.01224 -2239214.96324, 99729.84854 -2239214.87574, 99729.78878 -2239214.85761, 99729.6417 -2239214.779, 99729.56365 -2239214.77131, 99729.18846 -2239214.6575, 99729.14953 -2239214.63669, 99728.8883 -2239214.55745, 99728.54253 -2239214.37263, 99728.23946 -2239214.1239, 99728.2077 -2239214.08521, 99728.06286 -2239214.07094, 99727.85972 -2239214.00932, 99727.85272 -2239214.00932, 99727.46254 -2239213.97089, 99727.08736 -2239213.85708, 99726.91714 -2239213.7661, 99726.88725 -2239213.75703, 99726.717 -2239213.66603, 99726.68714 -2239213.65697, 99726.34137 -2239213.47215, 99726.28616 -2239213.42684, 99726.1418 -2239213.47063, 99725.75162 -2239213.50906, 99725.65156 -2239213.50906, 99725.26138 -2239213.47063, 99724.8862 -2239213.35682, 99724.54042 -2239213.172, 99724.23735 -2239212.92327, 99724.19225 -2239212.86832, 99724.1373 -2239212.82322, 99723.88857 -2239212.52014, 99723.70375 -2239212.17437, 99723.69469 -2239212.14449, 99723.6037 -2239211.97427, 99723.48989 -2239211.59908, 99723.45146 -2239211.2089)) buffer-5 POLYGON ((99720.45146 -2239211.2089, 99720.45146 -2239210.50853, 99720.54753 -2239209.53308, 99720.60814 -2239209.33328, 99720.64759 -2239208.93276, 99720.72278 -2239208.68488, 99720.74764 -2239208.4325, 99721.03217 -2239207.49453, 99721.12316 -2239207.32431, 99721.13222 -2239207.29443, 99721.59427 -2239206.42999, 99722.21608 -2239205.67231, 99722.27106 -2239205.62719, 99722.31614 -2239205.57226, 99722.37109 -2239205.52716, 99722.41619 -2239205.47221, 99722.47112 -2239205.42713, 99722.51624 -2239205.37215, 99722.57119 -2239205.32705, 99722.61629 -2239205.2721, 99722.67127 -2239205.22698, 99722.71635 -2239205.17205, 99723.47403 -2239204.55023, 99724.33846 -2239204.08818, 99724.36835 -2239204.07911, 99724.53857 -2239203.98813, 99725.47653 -2239203.7036, 99725.49258 -2239203.70202, 99725.51782 -2239203.67126, 99726.2755 -2239203.04944, 99726.39661 -2239202.98471, 99726.8185 -2239202.47063, 99726.87346 -2239202.42553, 99726.91856 -2239202.37057, 99726.97351 -2239202.32547, 99727.01861 -2239202.27052, 99727.77629 -2239201.64871, 99727.93782 -2239201.56237, 99728.07645 -2239201.4486, 99728.94088 -2239200.98655, 99728.97078 -2239200.97748, 99729.14099 -2239200.8865, 99729.58577 -2239200.75158, 99730.0775 -2239200.34802, 99730.94194 -2239199.88597, 99731.8799 -2239199.60145, 99732.85535 -2239199.50537, 99733.15551 -2239199.50537, 99734.13096 -2239199.60145, 99735.06893 -2239199.88597, 99735.2392 -2239199.97698, 99735.26903 -2239199.98603, 99736.12018 -2239200.44097, 99736.26956 -2239200.48629, 99736.47875 -2239200.5981, 99736.76982 -2239200.6864, 99737.63426 -2239201.14844, 99738.39194 -2239201.77026, 99739.01376 -2239202.52794, 99739.47581 -2239203.39238, 99739.76033 -2239204.33034, 99739.8158 -2239204.89347, 99739.97607 -2239205.19332, 99739.98514 -2239205.22321, 99740.07612 -2239205.39343, 99740.36065 -2239206.33139, 99740.41469 -2239206.88008, 99740.4607 -2239207.03176, 99740.47097 -2239207.13598, 99740.56075 -2239207.43197, 99740.57101 -2239207.53616, 99740.66081 -2239207.83218, 99740.66951 -2239207.92055, 99740.848 -2239208.25447, 99740.99331 -2239208.37373, 99741.03843 -2239208.42871, 99741.09336 -2239208.47379, 99741.13844 -2239208.52872, 99741.19342 -2239208.57384, 99741.81523 -2239209.33152, 99742.27728 -2239210.19596, 99742.56181 -2239211.13392, 99742.5926 -2239211.44657, 99742.86197 -2239212.33455, 99742.90074 -2239212.72824, 99743.13715 -2239212.8546, 99743.89484 -2239213.47642, 99744.51665 -2239214.2341, 99744.9787 -2239215.09853, 99745.26323 -2239216.0365, 99745.3593 -2239217.01195, 99745.3593 -2239217.21206, 99745.26323 -2239218.18751, 99745.18804 -2239218.43539, 99745.16318 -2239218.68777, 99744.87865 -2239219.62574, 99744.4166 -2239220.49017, 99743.79478 -2239221.24785, 99743.0371 -2239221.86967, 99742.17267 -2239222.33172, 99742.08305 -2239222.3589, 99741.57235 -2239222.63188, 99741.54248 -2239222.64094, 99741.40242 -2239222.7158, 99741.33621 -2239222.77014, 99741.01312 -2239222.94283, 99740.73589 -2239223.17035, 99739.87146 -2239223.6324, 99738.93349 -2239223.91693, 99738.68112 -2239223.94179, 99738.43323 -2239224.01698, 99738.32904 -2239224.02724, 99738.03302 -2239224.11704, 99737.05757 -2239224.21311, 99736.95751 -2239224.21311, 99735.98206 -2239224.11704, 99735.73415 -2239224.04184, 99735.4818 -2239224.01698, 99734.54383 -2239223.73246, 99734.20335 -2239223.55047, 99734.14362 -2239223.53235, 99733.27919 -2239223.0703, 99732.56422 -2239222.48354, 99731.8799 -2239222.41614, 99731.58392 -2239222.32636, 99731.47969 -2239222.31609, 99730.54173 -2239222.03156, 99730.50281 -2239222.01076, 99730.24157 -2239221.93151, 99729.37713 -2239221.46946, 99728.61945 -2239220.84764, 99728.57435 -2239220.79269, 99728.5194 -2239220.74759, 99727.89759 -2239219.98991, 99727.43554 -2239219.12547, 99727.15101 -2239218.18751, 99727.05493 -2239217.21206, 99727.05493 -2239217.01195, 99727.05953 -2239216.96524, 99726.98147 -2239216.92351, 99726.87727 -2239216.91325, 99725.93931 -2239216.62872, 99725.76905 -2239216.53772, 99725.7392 -2239216.52866, 99725.70253 -2239216.50906, 99725.65156 -2239216.50906, 99724.67611 -2239216.41298, 99723.73815 -2239216.12845, 99722.87371 -2239215.6664, 99722.11603 -2239215.04459, 99722.07093 -2239214.98964, 99722.01598 -2239214.94454, 99721.39416 -2239214.18686, 99720.93211 -2239213.32242, 99720.92305 -2239213.29255, 99720.83206 -2239213.12232, 99720.54753 -2239212.18435, 99720.45146 -2239211.2089)) buffer-10 POLYGON((99739.3044617493 -2239228.93117449,99739.008469 -2239229.020963,99737.057565 -2239229.21311,99736.957513 -2239229.21311,99735.00661 -2239229.020963,99734.7587215452 -2239228.94576679,99734.506346 -2239228.92091,99732.630415 -2239228.351853,99732.2899489618 -2239228.16987015,99732.230205 -2239228.151747,99730.501337 -2239227.227648,99730.4848796373 -2239227.2141418,99728.62831 -2239226.650958,99728.5893723796 -2239226.63014541,99728.328152 -2239226.550905,99726.599284 -2239225.626806,99725.083918 -2239224.383178,99725.0388167068 -2239224.32822188,99724.983866 -2239224.283125,99723.740237 -2239222.76776,99722.8223261684 -2239221.05046925,99721.82473 -2239220.747852,99720.095862 -2239219.823753,99718.580496 -2239218.580124,99718.5353971293 -2239218.52517087,99718.480444 -2239218.480072,99717.236815 -2239216.964706,99716.312716 -2239215.235838,99716.3036531494 -2239215.20596176,99716.212664 -2239215.035733,99715.643606 -2239213.159802,99715.451459 -2239211.208899,99715.451459 -2239210.50853,99715.643606 -2239208.557627,99715.7042101752 -2239208.357842,99715.743659 -2239207.957311,99715.8188539234 -2239207.70942636,99715.843711 -2239207.457048,99716.412769 -2239205.581117,99716.5037597346 -2239205.41088527,99716.512822 -2239205.381011,99717.436921 -2239203.652143,99718.680549 -2239202.136778,99718.7355025838 -2239202.09167879,99718.780602 -2239202.036725,99718.8355551293 -2239201.99162613,99718.880654 -2239201.936673,99718.935607786 -2239201.89157358,99718.980707 -2239201.83662,99719.0356606586 -2239201.79152069,99719.08076 -2239201.736567,99719.1357131293 -2239201.69146813,99719.180812 -2239201.636515,99720.696178 -2239200.392886,99722.425046 -2239199.468787,99722.4549222379 -2239199.45972415,99722.625151 -2239199.368735,99723.0271739372 -2239199.24678256,99723.282971 -2239198.935093,99723.3379241293 -2239198.88999413,99723.383023 -2239198.835041,99723.437976786 -2239198.78994158,99723.483076 -2239198.734988,99724.998441 -2239197.49136,99725.1599836931 -2239197.40501365,99725.298599 -2239197.291255,99727.027467 -2239196.367155,99727.0573455502 -2239196.35809145,99727.1672091138 -2239196.29936816,99727.299652 -2239196.190675,99729.02852 -2239195.266576,99730.904451 -2239194.697519,99732.855355 -2239194.505372,99733.155512 -2239194.505372,99735.106416 -2239194.697519,99736.982347 -2239195.266576,99737.1525800191 -2239195.35756742,99737.182452 -2239195.366629,99738.0336074759 -2239195.82158098,99738.182978 -2239195.866892,99738.3921436726 -2239195.97869336,99738.683242 -2239196.066997,99740.41211 -2239196.991097,99741.927475 -2239198.234725,99743.171103 -2239199.75009,99744.095203 -2239201.478958,99744.66426 -2239203.35489,99744.6723060104 -2239203.43658259,99744.695519 -2239203.480011,99745.264576 -2239205.355942,99745.3020732906 -2239205.73665892,99745.972577 -2239206.55367,99746.896677 -2239208.282538,99747.3895739426 -2239209.90740274,99747.430371 -2239209.940884,99748.673999 -2239211.45625,99749.598098 -2239213.185118,99750.167155 -2239215.061049,99750.359303 -2239217.011952,99750.359303 -2239217.212057,99750.167155 -2239219.16296,99750.0919601843 -2239219.41084441,99750.067103 -2239219.663224,99749.498045 -2239221.539155,99748.573946 -2239223.268023,99747.330318 -2239224.783388,99745.814952 -2239226.027017,99744.086084 -2239226.951116,99744.0485605807 -2239226.9624986,99743.7909773231 -2239227.10017983,99743.513742 -2239227.327701,99741.784874 -2239228.2518,99739.908942 -2239228.820858,99739.6565636369 -2239228.84571508,99739.408679 -2239228.92091,99739.3044617493 -2239228.93117449)) geos-3.4.2/tests/xmltester/tests/singlesidedbuffer.xml0000644000175000017500000000425412206417146023046 0ustar frankiefrankie Single-sided buffer on vertical line (down-up) LINESTRING (0 10, 0 20) LINESTRING (2 10, 2 20) LINESTRING (-2 10, -2 20) Single-sided buffer on vertical line (up-down) LINESTRING (0 20, 0 10) LINESTRING (-3 10, -3 20) LINESTRING (3 10, 3 20) Single-sided buffer on horizontal line (left-right) LINESTRING (0 0, 5 0) LINESTRING (0 -2, 5 -2) LINESTRING (0 2, 5 2) Single-sided buffer on horizontal line (right-left) LINESTRING (5 0, 0 0) LINESTRING (0 2, 5 2) LINESTRING (0 -2, 5 -2) Single-sided buffers on sharpe edged line LINESTRING (5 5,1 1,1.5 3) LINESTRING (0.889806640162438 3.15254833995939,3.86862915010152 6.13137084989848) LINESTRING (6.13137084989848 3.86862915010152,2.13137084989848 -0.131370849898476,1.64334932914975 -0.464957897238882,1.06750928729122 -0.598575145599803,0.482454087349093 -0.513983562756987,-0.0319550194114402 -0.222730075655103,-0.405500120335007 0.235428609129087,-0.58719153245376 0.797952878498393,-0.552228000232531 1.38805700005813,-0.052228000232531 3.38805700005813) geos-3.4.2/tests/xmltester/tests/split.xml0000644000175000017500000000260612206417146020514 0ustar frankiefrankie Line/line difference/split LINESTRING(2 0,10 0,10 10,0 10,0 2) LINESTRING(-5 5, 15 5) MULTILINESTRING((2 0,10 0,10 5),(10 5,10 10,0 10,0 5),(0 5,0 2)) Line/line difference/split with boundary intersection LINESTRING(2 0,10 0,10 10,0 10,0 2) LINESTRING(0 5, 10 5) MULTILINESTRING((2 0,10 0,10 5),(10 5,10 10,0 10,0 5),(0 5,0 2)) Multiline/line difference/split MULTILINESTRING((0 0, 0 10), (5 0, 5 10), (10 0, 10 10)) LINESTRING(-5 5, 15 5) MULTILINESTRING((0 0,0 5),(0 5,0 10),(5 0,5 5),(5 5,5 10),(10 0,10 5),(10 5,10 10)) Multiline/line difference/split with boundary intersection MULTILINESTRING((0 0, 0 10), (5 0, 5 10), (10 0, 10 10)) LINESTRING(0 5, 10 5) MULTILINESTRING((0 0,0 5),(0 5,0 10),(5 0,5 5),(5 5,5 10),(10 0,10 5),(10 5,10 10)) geos-3.4.2/tests/xmltester/tests/stmlf/0000755000175000017500000000000012206417242017755 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/stmlf/stmlf-cases-20061020-invalid-output.xml0000644000175000017500000002711412206417146026602 0ustar frankiefrankie 966094 - 2025063 abs( area(A) - difference(A,B) - intersection(A,B) ) = -12 010600000001000000010300000001000000080000009CF43774FF0951412374234411E95441BF77617BFF095141190A467611E9544188E1D28E040A51410F26D5D00FE95441B63AEC27040A5141850B95540EE954417AE0F580030A51410B25BEB20CE95441F07D6BC4010A5141D66A6B2F05E9544100000010010A5141A4703D5A01E954419CF43774FF0951412374234411E95441 0106000000010000000103000000010000001300000000000010010A5141A4703D5A01E9544152B81ED5010A5141A4703D8A05E95441EC51B86E020A5141295C8F8208E95441D7A370FD020A51419A9999690BE95441A4703DEA040A5141AE47E13A10E95441C3F528AC040A5141F6285C9F0FE95441295C8FE2080A514114AE477110E954419A999969080A5141666666260AE95441AE47E19A070A5141D7A3708D05E954419A9999E9060A514152B81E5501E95441E17A148E060A51413D0AD733FEE85441A4703D0A060A51413D0AD703FAE85441D7A3708D050A514152B81E85F6E854417B14AE17050A51417B14AE07F4E85441A4703DDA020A5141F6285C6FFBE8544100000000020A5141CDCCCC6CFDE8544185EB5188010A51413D0AD733FEE85441A4703DDA000A514133333373FEE8544100000010010A5141A4703D5A01E95441 5 975328 - 1755529 abs( area(A) - difference(A,B) - intersection(A,B) ) = 2 01060000000100000001030000000100000011000000BF4C611B19EA5041C220B911FA80544125B95E2719EA50412EA0EBF0FA805441CCC5F0CF1CEA504173EE2094F98054412B1C1C981EEA5041560AE4E8F88054411CD0625429EA5041FF041818F5805441AF6A20242AEA5041CB1F42CEF48054419E13D1F62CEA5041560F3329F480544192481A222DEA50419BE2151EF48054410C53E54D2DEA5041E09E4F15F48054416004EA6835EA50419217633BF28054410CC7166031EA50410A0AECBCDC80544193352CAE28EA5041D9FC6C6AE38054412CBA123F1EEA5041D2FEC582EA805441B0A9541919EA5041D11DE9B5ED8054419E095AE818EA5041B1DF2CEFED805441E96A4CC218EA5041A782F034EE805441BF4C611B19EA5041C220B911FA805441 0106000000010000000103000000020000003A00000088EE881719EA5041DA0E337AED805441B0A9541919EA5041D11DE9B5ED805441A1095AE818EA5041B2DF2CEFED805441E86A4CC218EA5041AA82F034EE805441C14C611B19EA5041BE20B911FA80544129B95E2719EA50412CA0EBF0FA8054418124492219EA5041CCF09BF5FA8054418F2B01C419EA50410A453C8A02815441B6383AF31AEA50418B90B654098154415C4297D11BEA504101B861E20C815441595FAE6C1EEA5041FEB0A9400C8154412E008D0528EA504138FCC7840981544152B81E5528EA504148E17A44098154417B14AE6737EA504114AE477104815441295C8FD243EA50413D0AD78302815441EC51B83E4DEA5041295C8FF200815441A4703DBA4DEA504133333393F980544185EB51384EEA5041AE47E10AF2805441B81E854B4EEA5041A4703DBAF0805441CDCCCC9C49EA5041E17A144ED58054410000004050EA5041EC51B8FED18054417B14AE4750EA5041F6285C1FD08054411F85EBC150EA5041333333F3B08054418FC2F51858EA504100000010AA805441F6285CEF72EA5041F6285CDF9080544152B81E5585EA5041AE47E19A7F8054415C8FC22590EA504148E17A74758054418FC2F52891EA5041EC51B80E65805441D6329F0891EA5041BD16B8146480544163482D787FEA50410EB25572698054413ADE4B5B7FEA5041D206DA8D69805441EDBCEA147AEA50414567FA4F6B805441FC64D8B970EA504151544DE96D80544139413ECC6EEA504160E705B26E805441BFF9C5D96CEA5041FA03CCC86F8054410B318F716AEA5041678D6E1F72805441B8A7908A65EA5041EAD8DA7E778054411230DBDA5FEA5041FFAC3BBE7D8054418A0BBA615BEA5041D11557A78280544136CF6CCC58EA50417DC3CC77858054419AF2FE3A57EA5041895144C58780544121FCF00752EA5041E3DE8027918054415CCCEE3F4FEA5041B7DEA5B395805441A4DE97EE4BEA5041466BD80E9B8054416A24D75049EA5041EAFDED4E9F8054410709F2BC48EA5041D6A2AC3DA0805441148F930847EA50414055BD65A2805441219AF3EE44EA5041FB00474FA4805441A26086AE35EA5041ED521B97AA805441D3128A7536EA5041AC950555B4805441BF70595733EA504189A8D5B1B4805441B9B9C0A32FEA5041E53E20D4B6805441A0F4CBF52CEA5041F8953378B88054413DBADB262DEA5041525890BFB880544119CFB05F31EA50413F326AC4DC80544193352CAE28EA5041D9FC6C6AE38054412CBA123F1EEA5041D2FEC582EA80544188EE881719EA5041DA0E337AED805441040000009913D1F62CEA5041570F3329F480544196481A222DEA5041A0E2151EF48054418052E54D2DEA5041FA9E4F15F48054419913D1F62CEA5041570F3329F4805441 1 589978 - 39794 abs( area(A) - difference(A,B) - intersection(A,B) ) = 3 01060000000100000001030000000200000016000000AE47E1EAED9C50411F85EBF1E37B5441B81E85FBF79C5041B81E85DBE17B5441713D0AB7059D50417B14AE47E07B54411F85EB110C9D504148E17A24E07B54418FC2F598209D5041713D0AA7E17B544148E17A44239D50418FC2F5A8DB7B5441C3F528EC259D504185EB5198D77B54413D0AD7C32B9D5041B81E855BD17B544185EB51D8309D5041CDCCCC0CCC7B5441A4703D0A309D50410AD7A320CC7B5441EC51B85E209D5041AE47E1FACE7B5441333333431A9D5041713D0A17D07B54418FC2F538089D5041D7A3705DD27B54415C8FC255FF9C5041A4703D2AD47B54410AD7A380F59C5041C3F5282CD77B544100000090F49C504133333383D77B544133333303E79C5041C3F5281CDC7B5441EC51B83EDD9C5041713D0A67E07B544114AE47C1D69C504185EB51D8E37B544185EB5118DC9C5041713D0AC7EA7B5441D7A3707DE89C5041CDCCCCCCE57B5441AE47E1EAED9C50411F85EBF1E37B54410F000000A4703DAA219D50418FC2F5F8D17B544148E17A542B9D5041AE47E1FACF7B5441666666E62A9D5041EC51B81ED17B544185EB51C80B9D5041295C8FF2D67B5441B81E85FBFD9C50413D0AD713D97B5441295C8FA2F49C504185EB5158DB7B544166666616E99C50419A999939DF7B5441F6285C2FE09C5041A4703D4AE37B5441295C8FF2DF9C5041C3F528DCE27B5441295C8F22EB9C5041713D0A97DD7B544148E17AD4F49C50419A9999A9DA7B544152B81E85FD9C504114AE4741D87B54410AD7A3700C9D504152B81E85D57B5441D7A3709D1A9D5041713D0A97D37B5441A4703DAA219D50418FC2F5F8D17B5441 0106000000010000000103000000010000001C0000001DDB3460E49C5041C2798DDDE87B5441DD941617ED9C50411F0292D8E57B54411E67F240ED9C50412E1782C8E57B54413E1C4A86F19C5041F950DAC2E47B544100583A97F49C50415EFBD202E47B544102D115CEF49C5041BF1FE0F9E37B544110ABFC5DF59C5041CCF66FD7E37B54412CDD39A8FD9C50413993F085E27B5441DACEA3E1FD9C504166C9D77EE27B544174047CECFD9C504110EA127DE27B54413E3B4637059D5041016CC096E17B54410A1E724E069D504143653E74E17B5441FCACB282099D5041AAABD870E17B5441691C90890C9D50414B8B2156E17B5441B8EC4BA0129D50418F5575C5E17B544166E0412C1B9D5041B76DAE5FE27B544127D9923E209D50410A065D9DE27B54412C6B05A5209D5041C10D1C87E17B54415053B832189D5041E95FDE08E17B5441CD997811109D5041C1B3C56FE07B54416C152827099D50417D29A334E07B5441AA5B23C2029D504150C1A09EE07B5441976A1120FC9C5041F9EFB061E17B5441090C4920F49C5041A13A46A8E27B54419AD1AA7FED9C5041BC1D9016E47B54410908B011E89C50413C0A12F8E57B54410D80C929E39C5041C10E68F0E77B54411DDB3460E49C5041C2798DDDE87B5441 1 671968 - 1396084 abs( area(A) - difference(A,B) - intersection(A,B) ) = -4 01060000000100000001030000000200000043000000773AEE5C36C35041952DEA16AA15554101B3DB5336C350412E0E5D19AA15554118980D6736C35041ED2F7355AA15554106864A7936C35041698089A0AA155541C6BE947C36C3504196DEE3AFAA1555414785F57A36C350416A659EB0AA155541105DEE8936C35041364D56EDAA1555411A34929A36C35041D9BD9337AB1555418FC2F5A836C3504148E17A74AB155541D7A370BD34C35041713D0A57AF155541295C8F722EC3504152B81E15BC155541A4703D5A23C35041EC51B89ECA1555413D0AD7D31AC35041713D0A97D8155541C3F528DC26C35041F6285C4FE415554148E17AE427C350415C8FC205E71555413333335328C3504185EB5178E5155541EC51B88E28C350419A9999A9E41555413D0AD76329C3504166666676E11555410AD7A3102AC3504185EB5138DF1555418FC2F5E82BC35041EC51B8EED715554148E17A342EC35041F6285C4FCF155541B81E854B31C350415C8FC2A5C4155541A4703D1A39C35041B81E855BC9155541E17A148E35C350419A999919D715554152B81E8530C3504185EB5178EC155541E17A14AE29C3504185EB51B8EB1555410AD7A3E02AC3504114AE4771EF155541AE47E1CA2AC3504114AE4721FF155541F6285C7F2BC3504152B81E850C1655413D0AD72335C35041C3F528BC0E165541713D0A9738C3504114AE477110165541AE47E15A3CC35041E17A144E121655415C8FC2553CC350410AD7A37011165541D7A370ED3EC350418FC2F5D8FD1555415C8FC27540C35041A4703D4AE4155541D7A3709D45C3504148E17A54CD1555410AD7A3E045C35041F6285C7FCB1555417B14AEE748C35041E17A142EAF155541D3E34FA749C350410E53C443AB15554152B81EF549C35041CDCCCCACA9155541F8C21D094AC3504193300D44A9155541713D0AA74CC35041EC51B88E9B155541713D0AE752C350419A999959831555419A9999994FC35041A4703D7A811555415C8FC2254CC35041E17A14BE8C155541A4703DDA44C3504152B81E358C1555417B14AEE740C35041666666D68B155541AE47E19A38C35041D7A3701D8B1555410AD7A3D038C350410000005086155541713D0AB737C35041CDCCCCFC85155541000000E037C35041713D0A977D1555417B14AEA732C3504114AE47417E155541D7A3709D33C35041666666E67A155541713D0A772FC350413D0AD703791555415C8FC20527C35041AE47E16A77155541CDCCCCAC23C35041D7A3700D8A15554114AE478127C35041E17A142E91155541333333732BC3504114AE47A1971555413333338331C3504185EB51E89A1555415C8FC23533C350413D0AD7A39B15554152B81E5533C3504185EB51E89C155541295C8F8233C35041F6285CFF9D1555413D0AD7B333C35041EC51B8FE9E155541AE47E10A34C35041EC51B81EA0155541E17A14AE35C3504152B81E35A7155541F2003A4236C35041CC08C2A6A9155541773AEE5C36C35041952DEA16AA1555410C00000032D16BC845C35041CA0C3C31A915554132D16BC845C3504103BEB5DEAB155541DF224B4345C35041CDE06426AC155541BE3E5F4D3AC35041510FE03AAC1555411627EA8437C35041BD9A2BA5AA1555410327AD6E37C35041FDD0149CAA1555412546D87537C35041C2C1969CAA15554150B40C6C37C35041D3D50297AA155541D05542C83AC3504143ED9A30AA155541BBB119953DC3504131D6B7B5A915554132D16BC845C35041DD279730A915554132D16BC845C35041CA0C3C31A9155541 01060000000100000001030000000200000041000000F8994F264CC35041534848BC8C1555417B14AEE740C35041666666D68B155541AE47E19A38C35041D7A3701D8B1555410AD7A3D038C350410000005086155541713D0AB737C35041CDCCCCFC85155541000000E037C35041713D0A977D1555417B14AEA732C3504114AE47417E155541D7A3709D33C35041666666E67A155541713D0A772FC350413D0AD703791555415C8FC20527C35041AE47E16A77155541CDCCCCAC23C35041D7A3700D8A15554114AE478127C35041E17A142E91155541333333732BC3504114AE47A1971555413333338331C3504185EB51E89A1555415C8FC23533C350413D0AD7A39B15554152B81E5533C3504185EB51E89C155541295C8F8233C35041F6285CFF9D1555413D0AD7B333C35041EC51B8FE9E155541AE47E10A34C35041EC51B81EA0155541E17A14AE35C3504152B81E35A7155541ED003A4236C35041CF08C2A6A91555417B3AEE5C36C35041912DEA16AA15554104B3DB5336C350412E0E5D19AA15554119980D6736C35041EE2F7355AA1555410B864A7936C35041678089A0AA155541C9BE947C36C3504197DEE3AFAA1555414885F57A36C3504166659EB0AA155541155DEE8936C35041344D56EDAA1555411534929A36C35041D8BD9337AB1555418FC2F5A836C3504148E17A74AB155541D7A370BD34C35041713D0A57AF155541295C8F722EC3504152B81E15BC155541A4703D5A23C35041EC51B89ECA1555413D0AD7D31AC35041713D0A97D8155541C3F528DC26C35041F6285C4FE415554148E17AE427C350415C8FC205E71555413333335328C3504185EB5178E5155541EC51B88E28C350419A9999A9E41555413D0AD76329C3504166666676E11555410AD7A3102AC3504185EB5138DF1555418FC2F5E82BC35041EC51B8EED715554148E17A342EC35041F6285C4FCF155541B81E854B31C350415C8FC2A5C4155541A4703D1A39C35041B81E855BC9155541E17A148E35C350419A999919D715554152B81E8530C3504185EB5178EC155541E17A14AE29C3504185EB51B8EB1555410AD7A3E02AC3504114AE4771EF155541AE47E1CA2AC3504114AE4721FF155541F6285C7F2BC3504152B81E850C1655413D0AD72335C35041C3F528BC0E165541713D0A9738C3504114AE477110165541AE47E15A3CC35041E17A144E121655415C8FC2553CC350410AD7A37011165541D7A370ED3EC350418FC2F5D8FD1555415C8FC27540C35041A4703D4AE4155541D7A3709D45C3504148E17A54CD1555410AD7A3E045C35041F6285C7FCB1555417B14AEE748C35041E17A142EAF15554152B81EF549C35041CDCCCCACA9155541A0AC12BB4AC35041F9D9AB01A6155541713D0AA74CC35041EC51B88E9B155541713D0AE752C350419A99995983155541CF9999994FC35041A4703D7A81155541F8994F264CC35041534848BC8C1555410C00000005DEFFC145C35041FA67FF30A915554105DEFFC145C350414278783FA9155541CAF2DA9945C35041EAABC8F7AB155541DE224B4345C35041CBE06426AC155541BF3E5F4D3AC35041550FE03AAC155541E526EA8437C35041A39A2BA5AA1555410027AD6E37C35041FDD0149CAA1555412846D87537C35041C3C1969CAA1555414EB40C6C37C35041D3D50297AA155541D05542C83AC3504141ED9A30AA155541B8B119953DC3504130D6B7B5A915554105DEFFC145C35041FA67FF30A9155541 1 geos-3.4.2/tests/xmltester/tests/stmlf/stmlf-cases-20061020.xml0000644000175000017500000011512312206417146023616 0ustar frankiefrankie 99455 - 3082006 abs( area(A) - difference(A,B) - intersection(A,B) ) = -9 0106000000010000000103000000010000000F000000AAC4C227788350416D0791EFF11B54417780D7447783504110D8543CF11B54411DEDE0BE73835041BC6CD80CF11B5441CDBD952172835041014004ACF01B54410AD7A360718350419A9999C9F01B54417B14AEC7718350419A999939F91B54410AD7A3F07183504133333343FA1B54413333334372835041CDCCCC5CFF1B5441A4703D2A7383504152B81EA5041C5441E17A141E75835041000000E0051C54417B14AE6777835041B81E853B061C54410AD7A3D07783504166666656031C5441A4703D5A7883504133333303FF1B5441A4703D7A78835041333333A3F91B5441AAC4C227788350416D0791EFF11B5441 010600000001000000010300000001000000140000007B14AE6777835041B81E853B061C544189F2BB14788350413D27166A011C5441C811B85A7883504136229AEEFE1B5441B1C92C6D78835041133EFFD4FB1B54411305C67478835041EBE17921F91B5441578C1E457883504175099BB6F41B54411BEC9428788350410EEA6211F21B5441D1FE145C778350411E22B04EF11B5441215B5F1877835041997FFD39F11B54410BB901D976835041C078A736F11B5441CE4C93C775835041AD3C4228F11B54417BB0BCC873835041594B5D0DF11B5441CDBD952172835041014004ACF01B54410AD7A360718350419A9999C9F01B5441C1AEF59071835041B04E83BEF41B5441DEE3EEB0718350411AA0C35CF71B54414896782172835041A56E6947FD1B5441A4703D2A7383504152B81EA5041C5441E17A141E75835041000000E0051C54417B14AE6777835041B81E853B061C5441 5 275046 - 3361837 abs( area(A) - difference(A,B) - intersection(A,B) ) = -7 0106000000010000000103000000010000000D000000B81E850BBF2D514152B81E858F3C5441E17A145EBE2D51419A9999295F3C5441CDCCCC4CBA2D5141E17A148E5B3C54410AD7A300B92D5141000000105C3C54417B14AE97B92D51418FC2F5F87B3C5441713D0A17BA2D5141AE47E16A963C5441D7A3704DBA2D5141EC51B84EA23C5441AE47E1DABA2D514148E17A54BD3C5441E17A14DEBA2D51419A9999E9BD3C54418FC2F5D8BA2D51411F85EB81BE3C54410AD7A3C0BE2D5141EC51B8FEC23C5441000000C0BF2D5141000000F0C13C5441B81E850BBF2D514152B81E858F3C5441 0106000000010000000103000000010000000D0000008FC2F5D8BA2D51411F85EB81BE3C54410AD7A3C0BE2D5141EC51B8FEC23C5441000000C0BF2D5141000000F0C13C5441B81E850BBF2D514152B81E858F3C5441E17A145EBE2D51419A9999295F3C5441CDCCCC4CBA2D5141E17A148E5B3C54410AD7A300B92D5141000000105C3C54415287AC97B92D514144D9A1F87B3C544136AB1718BA2D5141DA9CC4A5963C54414BDDE007B92D5141DFAC7E33953C5441028739EAB92D514174B3776DBD3C5441D8EE8E24BA2D5141CE1FC8B2BD3C54418FC2F5D8BA2D51411F85EB81BE3C5441 5 984559 - 984543 abs( area(A) - difference(A,B) - intersection(A,B) ) = 3 0106000000010000000103000000020000004100000012DA570FC0A55041D2589D1DB8065541F71C3BAEC4A55041AFFA4E68B80655414692F7AFC7A55041A7EDE998B80655416F002CF8CEA550413532A10EB906554124282305D0A55041FB0C7E0AAF065541AC4D8A52D2A550410796841799065541D4F53E49D4A55041DD0AE1DA87065541F23CDF21D4A5504120F16BD687065541E9FB5D2BD4A55041C1D4E67B87065541341AD0ECC3A550411D50D33F85065541B8231ACAC3A55041C5E70C3B850655416A1791F2C3A55041296FF07D830655411EAC79F6C3A550418B0BF252830655417971A807BFA55041114AC6BD820655411578213AB9A55041AAC14B0E82065541AA83191AB8A550410BB6532E8306554197883DA0B7A550417F9D9F8F850655419F4586A9B7A55041D11DA9AD85065541ACD69341BAA550414D1315128E0655417915A591C8A55041E010AC5D8F065541E656C3E3C9A55041FFFA78848F0655411B560F21CDA5504138A7ACAD8F06554168947DA7C9A5504177CD06F1AF065541E1849B42CDA55041E7CD7CE78F06554185EC5B65CDA550410CB479EB8F06554128F43A6CC9A55041B31E8409B2065541BEA3C40FA1A550419D76610AAE065541E223DE3BA1A550419C41D30AAC065541A8ABFFB1A4A55041740C03188A06554152EADBB8A4A5504112DAEE118A065541C6D01C2AA4A550410139FC0B8A0655411A3C862AA4A55041ED5B35078A065541DB6C0960AAA55041F034990F85065541044C9B65AAA550416A8FC70F85065541C79BE1C3B5A55041D69E636E85065541955A96C2B5A550419B7F4764850655412102AF3DB5A55041B717E45581065541F8DC4F578BA5504119C4682C760655410F37753389A55041B532A59977065541F3712F4F88A550419AE21A4EB50655410F37753389A55041F5A5D2FFB60655415A80D7DBACA55041E30B07E8B80655414EDFA328AEA5504100EF3261BA065541AA3CB11DAEA5504154153F57BA065541F79AE02CB1A550416679D4D4BD065541DC600B79A9A550414230DC400E075541BF6A7E10AEA550410BDA1C74110755413756C137B4A55041FC92284907075541E4EFA437B4A5504106BA974507075541BDC6AEEDB3A5504155B441FCFD065541AD85B2EBB3A550419FF670BCFD0655419F3CCD23B3A550418F5D39A3E4065541E247A97DB3A55041DAD2D922CD065541FB24D4EAB8A55041615C8329CC0655416D81503FB7A55041589E91C0E70655410AE44A8BBDA55041AE2015D1E30655410CD2E5A5BDA550417622F7DFC60655414DA59D7BBEA55041FE2EA8DDC1065541F4F4BA38B8A550415592ABC9C40655418CAE7DF1B7A55041D885FACBC90655414A8EE6C4B3A550413FCC3713CA065541EBC84FFDB3A5504112E22710B806554167F8C7FFB3A55041BB3FA65AB70655415B5FE60AB4A550416DFC595BB706554112DA570FC0A55041D2589D1DB80655410400000059BA0671B1A5504148F8A219BE065541E9E4F983B1A550414EF51C2FBE06554143FAF580AFA550413A35404AD006554159BA0671B1A5504148F8A219BE065541 01060000001200000001030000000100000033000000E7608D2561A55041ADC66F500F075541354F24CA5FA55041307794240D07554124EDC81A3EA55041168FC3750A0755410A05F86B3BA550415B8B817F04075541B62069B33EA5504119ACD748E7065541B62069B33EA550414C02EFA5CD0655416F52E8503CA55041F48DC796B7065541B62069B33EA55041575A27FEB606554175BB497D40A55041CBF3643CDF0655416F52E8503CA55041F63D919A03075541E487A9E43FA550412A0E33F80807554173A53B2746A550412A0E33F8080755414F37F57862A550417BDCB35A0B075541185145C562A55041F990E4700D075541E63773E88BA550416EC6A504110755417CFBABD7A5A55041BF94266713075541737C3C55A7A550410AFA459D11075541B60343AAAFA550419FCF5BAEBE065541B35CD980ACA55041842EFC4EBB065541B0B56F57A9A55041FD5D4C9FB906554182233B258AA55041CB6F6AFDB80655411F4777E188A55041FD5D4C9FB9065541FA528B7588A5504178340619BB0655417F7CD1FB86A55041842EFC4EBB065541299A03EE85A55041D8696033B906554140E7853083A55041D8696033B906554158E17B6683A55041389FBA4DB706554104A6178285A550411EABCEE1B60655418C76C73187A550418CDA1E32B5065541C964A9D387A55041849E8DA5770655418C76C73187A55041B3E5051E75065541D1C50FFD5FA55041241A0F286A065541FC2DCBFC41A55041C6C1254964065541DBF7ACEC3EA55041C826B9417C0655413D1392533DA550417352D275B00655414D29D2CB3AA5504106BA1565AF0655417DF207FE3DA550418359369C6B065541DF8AC40E3FA5504176CC6F26660655418B02F7C940A55041B72E0E2764065541EFFBF91B3CA5504103E6C805630655417B14AE173CA550418FC2F5F8640655419A9999A939A55041E17A14EE6A065541B81E853B39A550410AD7A37075065541AE47E1AA36A55041CDCCCC0CB406554152B81E9536A55041CDCCCC2CB6065541E17A141E33A55041EC51B82E0A0755410000005034A5504148E17A840B0755416666666644A550410AD7A3A00C0755418FC2F5385AA550411F85EB210E075541713D0A375DA5504148E17A340F075541E7608D2561A55041ADC66F500F0755410103000000010000000400000008C55C1D3CA550417844C5646206554183150A483CA55041E5AA66CF61065541EC51B81E3CA55041713D0AC76106554108C55C1D3CA550417844C56462065541010300000001000000040000005D8D8B6A85A55041BED241F372065541E47D41AC6AA55041DE43FAAE6B0655417EDE984D71A55041C74E34966D0655415D8D8B6A85A55041BED241F37206554101030000000100000005000000EAFF24B4A9A5504124CF7BA07C0655410B3AAB5FB4A55041A2DEE3787F0655418FAA4712B6A55041AB55FF007F06554100000090B4A550410AD7A3407F065541EAFF24B4A9A5504124CF7BA07C0655410103000000010000000500000001DF2966B8A55041789F9D5C7E0655410B412FB2B8A5504130F7A4477E065541CC7EBC1FB9A55041E4B857F480065541713D0AD7B8A55041CDCCCC2C7E06554101DF2966B8A55041789F9D5C7E06554101030000000100000005000000CFD9570FC0A55041CB589D1DB806554109100BF6C5A550419C44AFB4B8065541F863EE9CCAA55041D51735C8B8065541FA1C3BAEC4A55041ADFA4E68B8065541CFD9570FC0A55041CB589D1DB806554101030000000100000005000000BCC6AEEDB3A5504156B441FCFD065541DFEFA437B4A5504105BA974507075541E17A147EB4A550411F85EBD106075541E897B6E7B3A55041F089613CFD065541BCC6AEEDB3A5504156B441FCFD065541010300000001000000040000005980D7DBACA55041E50B07E8B8065541FECA9E84ACA5504183DC5CE3B806554152DFA328AEA55041FFEE3261BA0655415980D7DBACA55041E50B07E8B806554101030000000100000006000000B84DF564B4A55041D525FB62850655410E6C91F0B5A550417DA1368285065541AEC766EAB5A5504167A26F6585065541935A96C2B5A550419C7F476485065541C59BE1C3B5A55041DB9E636E85065541B84DF564B4A55041D525FB6285065541010300000001000000070000009A4586A9B7A55041D31DA9AD850655418D3618A7B7A55041CB1D6EBB8506554164E2BD2FBAA55041057226148E06554170930B7BCBA5504199BA35B38F0655417715A591C8A55041DD10AC5D8F065541B0D69341BAA550414A1315128E0655419A4586A9B7A55041D31DA9AD8506554101030000000100000004000000BFA3C40FA1A550419B76610AAE0655419BB2CE27A1A55041D8D8C20CAE065541E723DE3BA1A550419D41D30AAC065541BFA3C40FA1A550419B76610AAE0655410103000000010000000400000065F8C7FFB3A55041B63FA65AB7065541E8C84FFDB3A5504115E22710B80655415F5FE60AB4A5504169FC595BB706554165F8C7FFB3A55041B63FA65AB7065541010300000001000000060000001BAC79F6C3A550418B0BF252830655416A1791F2C3A550412E6FF07D830655418DEB2500C4A55041BC721A7F83065541ECD70406C4A55041F471C832830655417871A807BFA550410D4AC6BD820655411BAC79F6C3A550418B0BF25283065541010300000001000000040000005BBA0671B1A550414DF8A219BE0655413FFAF580AFA550413935404AD0065541E7E4F983B1A5504152F51C2FBE0655415BBA0671B1A550414DF8A219BE065541010300000001000000050000002CF43A6CC9A55041B21E8409B206554180EC5B65CDA5504107B479EB8F065541DF849B42CDA55041E8CD7CE78F065541BA6B1E6BC9A55041EEF16709B20655412CF43A6CC9A55041B21E8409B20655410103000000010000000B000000E6FB5D2BD4A55041BFD4E67B87065541F43CDF21D4A550411CF16BD687065541D4F53E49D4A55041DE0AE1DA87065541AA4D8A52D2A5504109968417990655412EB6A1FDCEA55041555C94DAB8065541E5B48A0DCFA550418F21D7DAB8065541FCDEE639D3A550414C050BCE9106554179C6256BD4A550410C9C245F87065541A3302AF0C3A55041919C022585065541321AD0ECC3A550411D50D33F85065541E6FB5D2BD4A55041BFD4E67B8706554101030000000100000006000000699DAFEAA7A55041C178B99214075541A8DF075984A55041C20F520812075541865B5BADABA550414AC4253E1507554195DE56C4ABA5504112C02019150755415C593BE4A7A5504135DDCFCC14075541699DAFEAA7A55041C178B9921407554101030000000100000006000000C8D01C2AA4A550410339FC0B8A065541B94ABDB7A9A550411F3E38478A06554129D4688AAAA55041D8D7F91085065541DA6C0960AAA55041F034990F850655411E3C862AA4A55041ED5B35078A065541C8D01C2AA4A550410339FC0B8A065541 1 982104 - 1320680 abs( area(A) - difference(A,B) - intersection(A,B) ) = -4 0106000000010000000103000000010000001000000028E1365521FD5041343426C820D2544159C8D3351CFD50415976C67A29D254410B8DFD8011FD5041C4DB59EE3FD254412E3CADFB0CFD50412506A86346D25441FDD9532F05FD5041EB3E4A994BD25441F697714AF8FC50417FF05F4053D254415C8FC2C5F7FC5041EC51B83E56D25441A4703D2AF9FC5041B81E858B55D25441B81E851B09FD5041E17A14FE4BD25441AE47E1FA0EFD5041295C8FC247D254413D0AD75313FD50411F85EB0142D254417B14AE7716FD5041D7A3706D3BD254419A9999091CFD5041E17A14EE30D25441EC51B83E1FFD5041B81E859B29D25441C3F5280C20FD5041B81E853B28D2544128E1365521FD5041343426C820D25441 0106000000010000000103000000010000001000000028E1365521FD5041323426C820D2544154C8D3351CFD50415C76C67A29D25441098DFD8011FD5041C9DB59EE3FD254412E3CADFB0CFD50412406A86346D25441FDD9532F05FD5041E83E4A994BD25441F397714AF8FC504181F05F4053D254415C8FC2C5F7FC5041EC51B83E56D25441A4703D2AF9FC5041B81E858B55D25441B81E851B09FD5041E17A14FE4BD25441AE47E1FA0EFD5041295C8FC247D254413D0AD75313FD50411F85EB0142D254417B14AE7716FD5041D7A3706D3BD254419A9999091CFD5041E17A14EE30D25441EC51B83E1FFD5041B81E859B29D25441C3F5280C20FD5041B81E853B28D2544128E1365521FD5041323426C820D25441 1 720830 - 32827 abs( area(A) - difference(A,B) - intersection(A,B) ) = -2 0106000000010000000103000000010000000900000085EB512855C550419A9999A9703955410000004055C550419A9999196A395541B81E853B43C55041AE47E1AA6D395541000000403DC55041B81E85BB6E395541295C8F022AC55041F6285CAF75395541295C8F722DC55041333333A3843955417B14AEB738C550418FC2F55882395541C3F5284C4DC55041333333137239554185EB512855C550419A9999A970395541 0106000000010000000103000000010000000A0000009B74AFA82AC550419DA4F981783955411FF4C0C12AC5504165E17AE178395541DCDE5F772DC55041C7C238A2843955410E087AE22EC55041D3007158843955416AD06EF02DC55041C01F2D6E803955416D85C44F2EC55041C16D7D6B7B39554121826EA22DC55041206F787176395541656754762DC550412108017074395541E0698F022AC55041A0645CAF753955419B74AFA82AC550419DA4F98178395541 1 11503 - 422581 abs( area(A) - difference(A,B) - intersection(A,B) ) = 3 0106000000010000000103000000010000000600000085EB511885D95041295C8F62F58B54417B14AE8733D9504152B81E85E68B54413333336334D95041D7A3706DEE8B5441CDCCCCEC87D950419A9999A9FD8B54410AD7A32088D9504148E17AF4FB8B544185EB511885D95041295C8F62F58B5441 010600000001000000010300000001000000080000000EBCBD6683D95041B3AF66D6FC8B54410CCCE3C083D950419081D7E6FC8B5441B067BACF83D9504133458CE9FC8B54410DDFC4E287D950415DEEFE9CFD8B5441C1AC0C1888D95041315BB61AFC8B54410193290685D9504126B26A64F58B5441FBD8957381D95041F05692B8F48B54410EBCBD6683D95041B3AF66D6FC8B5441 1 35309 - 21138 abs( area(A) - difference(A,B) - intersection(A,B) ) = 2 0106000000010000000103000000010000002D00000048E17AC43C32514148E17AB4782C5541E17A145E42325141D7A3703D7B2C5541295C8FF2443251418FC2F5D87A2C5541A4703D7A49325141666666D67B2C55413D0AD773533251418FC2F528822C55415C8FC255613251410AD7A3C0872C5541000000A06A3251410AD7A3808D2C55413D0AD7336C3251418FC2F578902C55415C8FC2556E325141C3F528BC8F2C5541000000706E3251415C8FC235982C5541D7A370DD70325141EC51B84E9C2C55413D0AD7237732514166666686A52C5541C3F5289C6C325141F6285CDFB62C5541F6285CCF6E325141A4703D8AB62C5541EC51B8FE72325141D7A370BDB72C55417B14AEB77632514114AE4721B82C554148E17AD47A325141E17A14BEB92C5541333333137F325141F6285CAFB42C554148E17A44813251415C8FC255AF2C55410000005082325141666666A6AC2C5541666666B683325141295C8F32AA2C5541666666468532514152B81EF5A72C55410000008089325141295C8F72A42C5541D7A370BD8B32514133333323A22C55413D0AD7038932514148E17A849C2C5541295C8F5282325141295C8F829D2C55417B14AED77F32514185EB51689E2C55418FC2F5D87C325141E17A147E9F2C5541E17A146E7A325141D7A370ED9F2C55419A9999C978325141295C8FA29F2C5541D7A370AD773251410AD7A3709F2C55415C8FC2B57632514148E17A449F2C5541D7A370ED723251415C8FC2959A2C554148E17A247132514185EB51B8962C5541A4703D0A6F3251419A999969882C5541E17A141E6F3251411F85EBE1832C5541EC51B8EE703251415C8FC275812C55417B14AEB770325141295C8FD27E2C55418FC2F56871325141EC51B8BE7C2C554100000030723251413D0AD7937B2C5541CDCCCC1C5F325141EC51B8EE682C5541CDCCCC8C593251410AD7A3F06A2C5541B81E85FB50325141F6285C4F6E2C55417B14AE9744325141AE47E1EA732C554148E17AC43C32514148E17AB4782C5541 01060000000100000001030000000100000011000000106B8EEE6832514161B65C748C2C5541778EF64C67325141CF0AFC58862C5541E8DCA88B61325141FEAB7FDF872C55415D2A447862325141068B7274882C55416A3C20E4623251411CE634B7882C5541557D4D9563325141808CDE24892C5541F02C873964325141610B848A892C554120FA216564325141AD3481A5892C5541971F8D1B65325141E76969168A2C5541D656643165325141BF11EE238A2C5541C6266B4E66325141398558D48A2C554115AEA39B66325141812724048B2C5541D0CE633867325141344329658B2C5541B7CC6354673251411FDB7D768B2C5541D06DEA786832514180918C2B8C2C5541B586798C683251419AE6092C8C2C5541106B8EEE6832514161B65C748C2C5541 1 189022 - 7822 abs( area(A) - difference(A,B) - intersection(A,B) ) = -3 01060000000100000001030000000100000051000000333333F36FE650417B14AE27992C5541B81E85FB6AE65041D7A3704D9C2C55410000008061E65041713D0AD7A02C554114AE47D15BE650415C8FC235A32C554148E17AF457E650411F85EB11A52C55416666667656E650418FC2F5C8A52C5541B81E856B54E65041D7A3700DA72C55415C8FC2A557E6504100000020AD2C55413D0AD7535AE65041C3F5286CB12C554114AE47D15CE65041B81E851BB12C55410000008061E650419A999919AE2C55413333335369E650419A999959A92C5541CDCCCCDC6CE65041E17A14EEA72C5541D7A3700D70E6504166666646A62C5541B81E859B70E65041666666E6A52C5541713D0A3771E6504152B81E25A82C55418FC2F57871E6504100000060A92C5541F6285C6F71E65041A4703DAAAA2C554185EB519874E65041713D0AC7A72C55417B14AE6779E650415C8FC2C5A42C5541AE47E1DA7DE6504185EB51D8A12C55419A9999A980E6504114AE4771A02C5541EC51B8FE85E65041666666669F2C5541D7A3703D88E65041C3F5285C9F2C5541C3F5289C8DE650410AD7A3509D2C554148E17A4495E65041F6285C4F9B2C5541AE47E18A96E6504185EB51489B2C5541D7A370CD9AE65041295C8FC2972C55410000009093E65041C3F5288C992C5541E17A141E91E65041295C8F42982C5541CDCCCCAC91E65041295C8F62952C554185EB51E893E65041295C8FE2932C55419A99993999E65041CDCCCC1C932C5541AE47E15A99E6504152B81EB58D2C5541EC51B8AE9AE65041EC51B84E8B2C5541E17A14DE9CE6504148E17A94892C55418FC2F5F89EE6504114AE47A1842C5541333333A39CE65041B81E852B822C55417B14AEF798E6504152B81E957E2C55411F85EB4195E65041F6285C1F7B2C5541333333C392E6504185EB5198782C55416666661690E65041CDCCCC3C762C5541AE47E10A8EE65041E17A149E742C55411F85EB9191E6504185EB51686F2C55415C8FC20593E65041295C8F426D2C5541D7A3706D8EE65041F6285CFF692C55410AD7A32087E65041EC51B86E642C5541295C8F9284E6504185EB5178622C55410000004083E65041AE47E19A612C5541EC51B8BE81E6504114AE47B1602C55418FC2F54880E65041D7A3700D602C5541B81E850B7DE6504185EB51185F2C5541C3F5288C79E6504148E17AA45E2C5541A4703D5A78E6504185EB5198652C5541B81E85FB77E650419A999949672C5541295C8FB27CE65041D7A370AD692C55419A99997981E65041E17A145E6C2C5541A4703D9A85E6504148E17AE46E2C55415C8FC2E584E650413D0AD7E3702C55419A99992984E6504152B81E65742C55418FC2F50884E6504148E17A64772C55419A99992984E650411F85EB517C2C5541A4703DEA84E65041333333E3892C5541A4703D5A86E65041D7A370AD892C554114AE47718CE650413D0AD763882C55417B14AEE790E65041D7A3707D872C5541F6285CBF92E65041CDCCCC2C882C55417B14AE6792E6504152B81E55892C554148E17A8490E65041A4703DFA892C554185EB51A88CE65041333333C3892C55417B14AEA789E650410AD7A3E08A2C55419A99998985E65041B81E859B8B2C55415C8FC2F584E65041333333B38A2C5541666666D67FE65041B81E85FB8B2C55410AD7A3907FE65041AE47E10A8C2C55415C8FC23577E65041713D0AD78D2C5541D7A3700D76E650419A999989912C5541CDCCCCEC72E65041A4703D8A962C55413333339372E65041D7A3704D962C5541713D0A3771E65041A4703D8A982C5541333333F36FE650417B14AE27992C5541 0106000000010000000103000000010000001C0000004F9D43E684E650415AE8839B892C5541CB4447E684E65041FFCAC59B892C5541852155E684E65041DFB9BF9C892C554192BB5FE684E65041E5DF7E9D892C5541133B4FE784E65041EF303AA6892C5541C0050AEA84E65041781F10BC892C5541B17ABDEA84E65041E5B012C3892C5541DA8D61EB84E6504159707BC9892C5541DA8D61EB84E65041958A3ACC892C5541C5238E0685E6504189ACDAC98A2C55415E58D90D85E65041D2A4FBD68A2C55413A54801085E6504191D0C1DB8A2C5541307DDC1F85E65041010ECCF28A2C5541CC78813E85E65041D99CBA238B2C554191A5E4B185E650412AEAA7888B2C5541690E5CC386E65041ABCDA25F8B2C5541F981CC498AE65041B5FCE1AD8A2C55412870C0958CE6504167B06FC5892C5541F4E202AB8EE65041400F1CD3892C55411998ECA490E65041A28ACD098A2C5541497C15ED91E650410F35BE8E892C55414886E0F092E65041AEAF4154882C554122D1F6F690E650416063CF6B872C55416AC6FD818EE650415634901D882C55411193AA8C86E650418E51C3B7892C55417E3D9B1186E65041B6F216AA892C5541A6D4230085E65041400F1CD3892C55414F9D43E684E650415AE8839B892C5541 1 191097 - 2916437 abs( area(A) - difference(A,B) - intersection(A,B) ) = 2 01060000000100000001030000000100000065000000D7A370CDE662514133333383275B5441AE47E14AE7625141AE47E1BA255B54411F85EBB1E7625141D7A370CD255B544148E17A64EA6251418FC2F5281A5B544114AE47F1EB625141F6285C1F125B5441B81E85CBEF62514152B81EA5FF5A54411F85EBC1F162514100000080F75A5441E17A148EF262514152B81E25F45A5441E17A14FEF36251417B14AE77F05A544185EB51B8F7625141713D0AF7E95A5441AE47E19AFA62514114AE4761E55A54413D0AD763FC62514166666666E25A5441333333B3FF6251413D0AD773DD5A5441D7A3700D00635141666666E6DB5A5441CDCCCC4C0063514114AE4781D95A544166666666FF625141D7A370DDD75A54417B14AEE7FD625141CDCCCC2CD65A5441295C8F52FC62514133333363D45A5441AE47E10AFA6251419A999919D35A54417B14AE17F7625141713D0A27D15A54419A999969F46251417B14AE27CF5A54410AD7A330F262514166666666CD5A5441713D0A87ED6251418FC2F5A8C75A5441E17A14FEEA625141AE47E18AC35A5441D7A3708DE7625141D7A3700DBD5A544100000040E5625141713D0A17B95A5441D7A370CDE3625141F6285CDFB55A5441295C8FA2E3625141E17A140EB35A5441F6285C3FDF625141D7A370FDB15A544185EB51D8DD6251410AD7A390B25A5441000000B0DC625141D7A3709DB15A54410AD7A310DA625141295C8F62B15A54415C8FC225D162514185EB5128B15A54410AD7A320C8625141C3F5281CB15A5441B81E852BC16251410AD7A320B15A5441A4703D7ABC6251411F85EB51B15A544114AE47D1B6625141AE47E1CAB15A54410AD7A3C0A96251415C8FC255B35A54411F85EBF1A8625141E17A146EB35A544152B81E95A2625141D7A3703DB45A5441C3F528EC99625141E17A147EB55A5441666666C691625141B81E85CBB65A5441EC51B8AE876251411F85EB81B85A5441000000B086625141D7A370FDB85A5441666666E68562514152B81EC5B95A5441CDCCCC9C8562514114AE4731BA5A54415C8FC2158562514185EB51F8BA5A54411F85EB718462514166666676BC5A54418FC2F5D88362514152B81E55BE5A544185EB512883625141EC51B8DEC15A5441713D0AF78162514166666626C95A54415C8FC2758062514185EB5188D15A5441C3F5287C7D62514166666616E15A5441333333037D625141AE47E1DAE25A54410AD7A3207D6251410AD7A3C0E35A54417B14AE477D625141F6285CEFE45A54419A99998982625141713D0AC7EB5A544148E17A5487625141333333A3F15A5441A4703D6A8C625141713D0A97F75A544148E17A849162514114AE4721FD5A5441333333E39462514148E17A74005B544166666686986251415C8FC2A5035B5441713D0A079C6251415C8FC255065B5441666666B6A0625141EC51B89E095B5441B81E85BBA5625141B81E85BB0C5B5441333333A3A962514152B81ED50E5B5441CDCCCCECAD625141713D0AE7105B54411F85EB91B2625141295C8FE2125B54411F85EBE1B762514100000020155B54418FC2F5B8B9625141A4703D5A145B5441C3F5289CBB6251419A9999790B5B544148E17AB4BB625141D7A3702D0A5B544152B81E55BB62514133333353095B5441F6285C2FBA625141E17A14FE085B5441A4703D7AB96251411F85EB710A5B5441B81E852BB762514148E17A54095B544166666646B562514114AE47E1095B54411F85EB01B362514148E17AD4085B54419A999949B4625141AE47E1FA055B54410AD7A340B162514185EB51D8025B544133333303B2625141CDCCCC3C015B5441EC51B8BEAE6251419A999969FE5A544152B81EB5B2625141EC51B80EF75A5441F6285CFFB662514100000000F95A54410AD7A330B962514152B81EB5F45A544185EB51A8BB625141CDCCCCECF55A5441D7A3709DBB6251415C8FC245F75A5441E17A140EC46251413D0AD703FB5A5441D7A3703DC5625141A4703DDAFB5A5441295C8FD2C362514133333303005B5441C3F5282CC162514133333343055B54419A999949BD62514185EB5108095B5441D7A3703DBC6251417B14AEC70B5B544152B81E85BA62514152B81EC5145B5441E17A14AEBB6251413D0AD743175B5441B81E855BC1625141EC51B80E1B5B54415C8FC215CA62514185EB5108215B5441B81E859BCD6251415C8FC235235B5441EC51B82ED162514148E17A04255B5441295C8F52D4625141E17A145E265B5441D7A370CDE662514133333383275B5441 0106000000010000000103000000010000001200000068C7D3FA856251410925E3B0B95A5441B10394108B6251412A36E4E6B85A5441D66D2E429362514176D5ECB3B75A544110B2FA739A6251418AAF1EB4B65A54417105C6BEA46251410D14FE4DB55A544186B9883CB06251412CDB48CEB35A5441AE1D0350C5625141A4FAF81DB15A5441B81E852BC16251410AD7A320B15A5441A4703D7ABC6251411F85EB51B15A544114AE47D1B6625141AE47E1CAB15A54410AD7A3C0A96251415C8FC255B35A54411F85EBF1A8625141E17A146EB35A544152B81E95A2625141D7A3703DB45A5441C3F528EC99625141E17A147EB55A5441666666C691625141B81E85CBB65A5441EC51B8AE876251411F85EB81B85A5441000000B086625141D7A370FDB85A544168C7D3FA856251410925E3B0B95A5441 1 256271 - 367713 abs( area(A) - difference(A,B) - intersection(A,B) ) = 5 0106000000010000000103000000010000001E0000003333331371C050410AD7A340502A54415C8FC2756CC05041CDCCCC8C502A5441713D0A2757C05041CDCCCCEC512A54413D0AD7333EC050418FC2F588532A54410AD7A34025C0504152B81E25552A54418FC2F5D813C05041713D0A27562A54416666667612C050419A999999522A544148E17A640EC050411F85EB31482A5441C3F528FC0CC0504133333303492A544148E17AC40BC050417B14AEB7492A5441000000D007C05041EC51B84E4B2A54415C8FC22501C05041F6285C2F4E2A5441295C8F32FABF5041E17A149E512A544148E17A44F9BF5041713D0A17522A5441B81E855BF9BF50413D0AD783522A54410AD7A350FCBF5041B81E858B602A5441E17A14CEFDBF5041D7A3709D672A5441CDCCCC5CFEBF50413D0AD7436A2A54410AD7A3A000C0504133333303752A5441295C8FD202C05041CDCCCC6C7F2A54419A9999990BC0504185EB51C8812A54419A99997911C05041E17A144E852A5441000000901AC05041A4703D7A702A5441666666E645C05041713D0A676B2A544152B81ED566C0504185EB5148712A54416666662665C050413D0AD7A3672A5441B81E850B67C05041AE47E16A602A544148E17A0473C050418FC2F588622A5441000000D071C05041B81E850B562A54413333331371C050410AD7A340502A5441 01060000000100000001030000000100000009000000713D0A2757C05041CDCCCCEC512A5441677A56726CC05041AD55058D502A5441146EC3B16BC05041F16159044E2A5441306B52721CC05041453D8A60532A5441088679DB16C05041486A9979542A5441F502C4F513C0504166605F25562A54410AD7A34025C0504152B81E25552A54413D0AD7333EC050418FC2F588532A5441713D0A2757C05041CDCCCCEC512A5441 1 275129 - 384120 abs( area(A) - difference(A,B) - intersection(A,B) ) = 2 01060000000200000001030000000100000009000000E17A146E8A2B5141B81E85FB8A3754418FC2F5788F2B51415C8FC2C58A375441AE47E1DA9A2B5141000000808A375441AE47E10A9C2B5141295C8F728A3754413D0AD7D3A12B5141AE47E1FA86375441A4703D3AA02B5141295C8F028737544114AE4721962B5141A4703D4A87375441713D0A778A2B51419A99998987375441E17A146E8A2B5141B81E85FB8A37544101030000000100000009000000C3F5283CB92B51419A9999D989375441EC51B82EB92B5141AE47E1BA8637544133333323A62B51417B14AEE78637544166666676A32B51413D0AD7F38637544133333333A32B514152B81EF586375441F6285C7F9D2B5141713D0A578A3754413D0AD7439E2B51413D0AD7538A3754418FC2F558A62B51410AD7A3308A375441C3F5283CB92B51419A9999D989375441 01060000000100000001030000000100000007000000ABEA7DD0B02B5141547E90CE86375441D17118A9B02B514194AF78D586375441899E0EA3B02B5141FBCB70FE893754416B2DEBC4B02B514182FB9C008A375441C3F5283CB92B51419A9999D989375441EC51B82EB92B5141AE47E1BA86375441ABEA7DD0B02B5141547E90CE86375441 1 275562 - 3361837 abs( area(A) - difference(A,B) - intersection(A,B) ) = 3 0106000000010000000103000000010000000E000000AE47E1DABA2D514148E17A54BD3C5441D7A3704DBA2D5141EC51B84EA23C5441713D0A17BA2D5141AE47E16A963C5441E17A149EB82D5141B81E85EB943C5441CDCCCC8CAB2D51413D0AD7A3873C544166666686A42D514100000080803C5441A4703D8A9B2D5141333333338A3C5441EC51B81E952D51419A9999B9903C5441E17A147E912D51419A999919943C54410AD7A3D0A52D5141F6285C5FAB3C5441EC51B83EB92D5141AE47E1AABC3C54418FC2F5D8BA2D51411F85EB81BE3C5441E17A14DEBA2D51419A9999E9BD3C5441AE47E1DABA2D514148E17A54BD3C5441 0106000000010000000103000000010000000D0000008FC2F5D8BA2D51411F85EB81BE3C54410AD7A3C0BE2D5141EC51B8FEC23C5441000000C0BF2D5141000000F0C13C5441B81E850BBF2D514152B81E858F3C5441E17A145EBE2D51419A9999295F3C5441CDCCCC4CBA2D5141E17A148E5B3C54410AD7A300B92D5141000000105C3C54415287AC97B92D514144D9A1F87B3C544136AB1718BA2D5141DA9CC4A5963C54414BDDE007B92D5141DFAC7E33953C5441028739EAB92D514174B3776DBD3C5441D8EE8E24BA2D5141CE1FC8B2BD3C54418FC2F5D8BA2D51411F85EB81BE3C5441 1 466188 - 3072591 abs( area(A) - difference(A,B) - intersection(A,B) ) = -3 0106000000010000000103000000010000000A000000F6285C8F26A5504114AE47111D1F55419A9999C926A55041295C8FC21B1F5541C3F528AC0BA55041AE47E13AF81E554152B81EF5F6A45041000000C0D61E5541F6285C0FF5A45041EC51B88ED51E5541295C8FE2E7A45041C3F5285CD41E55418FC2F568E6A450417B14AE77D41E55411F85EB2101A5504152B81E55001F5541A4703D1A1CA550415C8FC2A5231F5541F6285C8F26A5504114AE47111D1F5541 0106000000010000000103000000010000000800000081649D95F3A4504145CEA078D81E5541D85D39BAF4A45041D8E5536BD81E5541D0D78DD0F6A450412D5F379ED81E5541C5A26F08F7A450418E1238DFD61E5541A77AF94EF5A450419AF7B2B6D51E5541F270E2E5F4A450418941F38AD51E5541FA48048EF3A450417808B26BD51E554181649D95F3A4504145CEA078D81E5541 1 415163 - 3180189 abs( area(A) - difference(A,B) - intersection(A,B) ) = -5 010600000001000000010300000001000000110000007B14AE5706C250419A9999A9F63E54413D0AD7C3DBC150418FC2F568F53E544148E17AE4DBC15041000000C0283F54419A99993913C2504185EB51A82A3F5441C3F5288C11C25041D7A3705D123F5441EC51B82E11C25041713D0A47063F5441E17A14DE10C25041000000C0F83E5441713D0A370FC25041E17A142EF73E5441B81E855B0EC25041AE47E16AF83E5441EC51B83E0EC25041C3F5286CFB3E54419A9999A90FC25041D7A3707DFB3E5441EC51B89E0FC25041F6285CDFFC3E54419A9999D906C25041713D0A77FC3E54413D0AD7E306C25041B81E850BFB3E54417B14AE3708C25041AE47E10AFB3E5441713D0A4708C2504114AE47F1F63E54417B14AE5706C250419A9999A9F63E5441 0106000000010000000103000000010000000600000020B8CE7FE1C15041DA0A7BF1283F5441BD752992DCC150417E633D060C3F5441FCF373D3DBC15041BA5A41B4FA3E5441AE91B8C6DBC15041122208F1F93E544148E17AE4DBC15041000000C0283F544120B8CE7FE1C15041DA0A7BF1283F5441 1 401167 - 3148390 abs( area(A) - difference(A,B) - intersection(A,B) ) = -2 0106000000010000000103000000010000000C0000003D0AD733E561504152B81EF5B0295541AE47E10AE76150419A9999F9B32955410AD7A360E8615041F6285C3FB42955419A99999908625041EC51B80E9D295541A4703DBA02625041000000E09C29554152B81E3500625041713D0AE79C29554133333393F561504148E17A049D295541C3F5281CF1615041666666B69D29554166666636EC61504148E17AE49E2955419A9999A9E8615041C3F5281CA02955415C8FC255E6615041295C8F72AB2955413D0AD733E561504152B81EF5B0295541 0106000000010000000103000000010000000500000013C6A342F86150410B730BFD9C2955411D116A24FA615041396A8855A0295541446AAD4D006250419CA2C5E69C29554152B81E3500625041713D0AE79C29554113C6A342F86150410B730BFD9C295541 1 164313 - 164648 abs( area(A) - difference(A,B) - intersection(A,B) ) = -3 0106000000030000000103000000010000001700000052B81E05C937514185EB51681209554148E17A84C937514152B81E751209554166666676CC375141295C8FC212095541AC33776FCC3751415F8BDF4713095541EB20A09ECC3751413CD783B5120955415349DAA5CD3751414C9E9A421109554185EB5138CF37514148E17A740F095541CDCCCCCCD337514152B81EE5FF0855413D0AD793D5375141000000F0F808554185EB5188D5375141AE47E14AF508554185EB5108D237514166666606EC08554152B81EE5CF3751410AD7A340E40855415C8FC215CF3751410AD7A3D0DA0855417B14AEA7CD37514100000010D9085541C3F5286CC7375141B81E850BD70855411F85EBA1C6375141F6285CBFD9085541666666F6C4375141713D0A67E1085541C3F5283CC8375141D7A370CDE5085541D7A3704DCB375141EC51B8EEEC08554185EB5108CC3751410AD7A320F0085541713D0AE7C9375141295C8F32FF0855418FC2F5C8C83751417B14AEB70809554152B81E05C937514185EB51681209554101030000000100000004000000848FADD6CA375141FEEC63FE1D09554158B82ABEC837514173AA76E11C09554178888ABDC83751417869D2F11C095541848FADD6CA375141FEEC63FE1D09554101030000000100000006000000B24E5E0EC9375141636A080F1509554133333313C93751419A9999A91409554152B81E05C937514185EB516812095541CAD86B0DC93751419DEC86C9140955419DCB0FFCC837514175205B8F16095541B24E5E0EC9375141636A080F15095541 0106000000010000000103000000010000000E000000EC51B82ECD3751410AD7A3001C09554166666666CC3751411F85EBD119095541EC51B8EECB375141AE47E11A18095541C3F528DCCB3751416666667616095541CDCCCC5CCC375141EC51B8AE1409554166666676CC375141295C8FC21209554148E17A84C937514152B81E751209554152B81E05C937514185EB51681209554133333313C93751419A9999A914095541F6285CAFC83751419A9999D91C095541D7A3708DCD375141F6285C6F1F095541B81E855BCE37514152B81EC51F0955411F85EBD1CD3751417B14AEB71D095541EC51B82ECD3751410AD7A3001C095541 1 464026 - 6704 abs( area(A) - difference(A,B) - intersection(A,B) ) = -3 0106000000010000000103000000010000000E000000A4703DEAC9F35041000000607AA35441A4703DAAE5F35041EC51B83E76A35441AE47E16AEAF350418FC2F58875A3544100000070E7F35041666666A661A35441C3F5289CE4F35041A4703DCA4EA35441666666A6E0F35041E17A145E34A35441EC51B88EDFF350415C8FC2152DA354415C8FC235CCF350410AD7A3D02FA354415C8FC245CDF35041F6285C7F37A354417B14AE97AEF350413D0AD7733CA3544166666646AEF35041B81E858B3CA3544148E17A04AFF35041295C8F8241A3544114AE47F1B7F35041CDCCCC0C7DA35441A4703DEAC9F35041000000607AA35441 010600000001000000010300000001000000050000002957BC1AADF35041CAD27BBD34A3544126CEE97FAEF35041FF981A0C3EA35441DE66C3D9AFF35041923ED48B3DA3544120E0FAE1AEF3504180A4C27B34A354412957BC1AADF35041CAD27BBD34A35441 1 469351 - 5219716 abs( area(A) - difference(A,B) - intersection(A,B) ) = -4 0106000000010000000103000000010000000A000000295C8FD220AB5041666666D6F52D5541B81E85CB20AB50417B14AE87F52D5541A4703D2AD1AA5041666666D6F42D554114AE4711DAAA50415C8FC2E5FB2D55413D0AD7C3E7AA5041C3F528BC072E554152B81E75F6AA50419A9999B90A2E55416666660603AB5041CDCCCCBC0E2E5541E17A14EE09AB504148E17A04112E5541AE47E19A1BAB5041C3F528FC102E5541295C8FD220AB5041666666D6F52D5541 01060000000100000001030000000100000006000000295C8FD220AB5041666666D6F52D5541B81E85CB20AB50417B14AE87F52D5541437244AFFDAA504143908339F52D5541313017541FAB50414293A393FA2D554139DEBAD41FAB504162741EFFFA2D5541295C8FD220AB5041666666D6F52D5541 1 525923 - 45230 abs( area(A) - difference(A,B) - intersection(A,B) ) = -2 010600000001000000010300000001000000310000006666667675C950413D0AD723FC2E5441C3F528FC73C9504148E17A04FE2E5441C3F5281C73C9504133333393FF2E5441CDCCCC9C76C95041295C8F02082F54415C8FC24577C950419A999999092F54410000005078C9504152B81E95092F5441AE47E1AA7BC95041F6285C5F092F54410000008086C9504148E17A64082F5441A4703D2A87C95041E17A14BE082F5441CDCCCCAC86C950410AD7A320092F5441AE47E1AA7BC95041000000000A2F54411F85EB1178C95041295C8F620A2F54417B14AEE777C95041EC51B81E0B2F54415C8FC22578C9504148E17AB40B2F54411F85EBA181C95041CDCCCC8C222F54413333338382C95041333333E3222F544148E17AA48BC95041EC51B87E252F544185EB51E88FC95041713D0A97262F544185EB51E895C95041C3F5283C282F54410AD7A330A0C95041B81E859B302F544114AE4731A3C9504114AE4781332F5441C3F5280CA5C95041000000C0302F5441AE47E1FAA3C950418FC2F5882E2F5441B81E850BA2C95041D7A370ED2B2F54410AD7A3309DC95041333333A3252F544152B81EA58CC950413D0AD7930D2F5441713D0A2787C95041C3F5282C052F54416666669687C95041F6285C9F042F54411F85EBE18CC9504185EB51480C2F5441A4703DBA8DC950417B14AE070C2F54417B14AE2785C9504133333393FD2E5441000000A082C950410AD7A3E0F82E54410AD7A3907FC95041E17A142EF52E54413D0AD7F37DC950413D0AD7B3F42E54419A9999797EC950418FC2F528F62E54413D0AD78383C950418FC2F518FE2E54411F85EB2187C950411F85EB11042F54410000009086C9504152B81E45042F5441A4703DAA82C95041F6285C4FFE2E544114AE47517FC950413D0AD733F92E5441666666067EC95041295C8F62F62E5441EC51B80E7DC950417B14AEE7F52E544185EB51987CC9504114AE47B1F32E54415C8FC23570C950419A999979EA2E5441D7A3709D6BC950415C8FC265E02E5441B81E85CB66C95041A4703DEAE12E54417B14AEF76EC950418FC2F598F52E54419A9999F973C9504100000040F82E54416666667675C950413D0AD723FC2E5441 010600000001000000010300000001000000060000002EADC44C73C950417962AD3CFF2E544148A8F87175C95041EF284218FC2E5441934291FB73C9504179222545F82E54418DC0104D6FC95041E26A30C6F52E5441B3C1B42471C95041AA411ECCFA2E54412EADC44C73C950417962AD3CFF2E5441 1 532351 - 3180577 abs( area(A) - difference(A,B) - intersection(A,B) ) = -2 0106000000050000000103000000010000000F0000007B14AE47B91E51417B14AE27B47A5441E17A145EB71E5141C3F528ECB47A544114AE4751B61E514152B81EF5B57A5441D7A370ADB31E514152B81E05B67A5441F6285C1FAD1E5141B81E85ABB77A5441333333B3B61E5141CDCCCCFCB87A54411F85EB11B91E514114AE4791B87A544166666676BA1E51418FC2F5C8B77A54417B14AE67BB1E5141CDCCCCACB67A5441F6285C0FBC1E5141AE47E1CAB57A5441AE47E1BABB1E514152B81E95B57A544114AE47F1BB1E5141D7A3700DB47A5441AE47E1BABB1E5141D7A3709DB37A54418FC2F5B8BA1E51410AD7A3A0B37A54417B14AE47B91E51417B14AE27B47A54410103000000010000000A000000E17A142EA51E51411F85EBE1B17A544100000090A11E514148E17AA4B17A544152B81E15A11E5141E17A141EB67A5441B81E857BAA1E5141EC51B84EB77A544152B81ED5B31E514166666616B57A5441D7A370BDB31E5141713D0AA7B47A544152B81EB5AE1E514185EB5108B47A544148E17AA4AE1E5141713D0A37B37A54413D0AD763AA1E5141CDCCCC7CB27A5441E17A142EA51E51411F85EBE1B17A5441010300000002000000160000001F85EB71EC1E5141C3F5281CB17A544185EB5128EB1E51418FC2F588AF7A54418FC2F5A8E91E5141713D0AA7B17A5441CDCCCC4CDF1E51411F85EBE1AF7A544166666676DF1E5141EC51B82EAF7A5441F6285CBFE81E514114AE4721AF7A54411F85EB51E91E5141295C8F42AE7A54419A999939D21E5141F6285C5FAB7A54417B14AEA7C61E5141D7A370CDA97A5441B81E851BC51E514114AE4731AA7A54418FC2F5C8C41E51413D0AD743AB7A5441C3F528CCC41E514133333353AD7A54417B14AED7C71E5141A4703DDAAD7A54417B14AE17C91E514152B81EA5AE7A54419A999989C91E51419A999989AF7A544152B81EE5C91E51415C8FC295AF7A54418FC2F5D8C91E51410AD7A3C0AF7A5441A4703D7AD11E5141AE47E1AAB07A544100000090EB1E51419A999959B57A5441666666C6EB1E51410AD7A320B47A544148E17A04EC1E5141F6285CDFB17A54411F85EB71EC1E5141C3F5281CB17A544105000000713D0A97D91E514100000040AD7A5441000000F0D81E5141E17A142EAD7A5441AE47E1FAD81E51418FC2F5C8AC7A5441295C8FA2D91E5141B81E85DBAC7A5441713D0A97D91E514100000040AD7A54410103000000010000000E00000052B81ED5111F5141F6285CDFB97A5441295C8FC20D1F514152B81E15B77A54413D0AD7E3071F5141A4703D0AB57A544148E17A94FD1E5141666666F6B17A5441EC51B8AEF51E5141A4703D0AB17A5441E17A140EF11E5141C3F5282CAF7A5441A4703DCAEF1E5141D7A3702DB07A5441C3F528ECED1E5141F6285CBFB47A54415C8FC285FB1E514166666686B77A54411F85EB51071F5141AE47E1CABA7A5441D7A3702D101F514166666626BE7A54419A999929121F5141F6285C4FBF7A54410AD7A360151F51418FC2F538BC7A544152B81ED5111F5141F6285CDFB97A54410103000000010000000F000000EC51B89EA21E514114AE47D1A77A544100000080A21E5141000000F0A87A544100000030A21E514185EB51D8AB7A544152B81E45AF1E51413D0AD773AB7A544185EB51A8B01E51415C8FC2B5A97A544133333383B91E514114AE4731AA7A544152B81EF5C11E5141666666F6A87A5441D7A370DDC01E514133333323A87A5441D7A3706DBF1E51418FC2F5E8A77A5441D7A3700DBC1E5141E17A146EA77A54411F85EBE1B81E5141295C8F62A77A54410AD7A310B81E514152B81E45A77A544166666606B51E5141000000B0A77A544185EB5198AF1E5141E17A143EA77A5441EC51B89EA21E514114AE47D1A77A5441 0106000000010000000103000000010000000D000000665A6437A21E514171778B93AB7A544159DB026DA21E51410F537DD6AB7A5441AB6A7D34AF1E514169C45674AB7A5441F2CD22B5B01E5141035575B6A97A54415139B88CB91E514148BBE42FAA7A5441E6B49FA5C11E514107F7D6E7A87A5441330EEEBAC01E5141ED07BD1DA87A54418E7E8C1FBC1E51417676D7E4A77A5441DA182420B81E51411EF24C47A77A54410B5B86FCB41E514148D230AFA77A54415F0943B7AF1E5141DDA19D40A77A5441C163F0C0A21E51410478C3CFA77A5441665A6437A21E514171778B93AB7A5441 1 587497 - 409926 abs( area(A) - difference(A,B) - intersection(A,B) ) = 2 0106000000010000000103000000010000000A00000052B81E457B3C51410AD7A3F04967544148E17A047A3C51416666665626675441A4703D8A773C5141A4703D1A2567544152B81E95733C51413D0AD79321675441000000F0743C5141E17A14DE46675441AE47E19A753C5141B81E851B5967544152B81E35783C5141AE47E1DA58675441713D0AC7783C51419A9999A96B67544152B81E857C3C5141AE47E18A6D67544152B81E457B3C51410AD7A3F049675441 01060000000100000001030000000100000014000000C2DD97B2733C514113B1F3BE24675441FECDBCF2703C514192B37A8E21675441491ADF3F6F3C5141B86C9815206754418F63E1226F3C51411F6C98152067544157AEF33A6E3C514198DCB3B91E675441537C342F6D3C514120D49C221E675441458C0A196D3C5141D594C10B1E67544153A4A14F683C5141E51737911D67544168F79A09693C51411FD40A1741675441A1F938B6693C5141D133374A6367544110AD838A6F3C514179EC79676367544101E6B76D6F3C51419D8376C7636754410199958B6F3C51412B60D8ED6667544152B81EE56F3C5141B81E851B676754413AD5EC0B763C51415493273E6A675441088E89EE753C51419D2EDE3B686754414FA0B527763C514133F1EE5468675441AE47E19A753C5141B81E851B59675441000000F0743C5141E17A14DE46675441C2DD97B2733C514113B1F3BE24675441 1 geos-3.4.2/tests/xmltester/tests/stmlf/stmlf-cases-20070119.xml0000644000175000017500000000316012206417146023624 0ustar frankiefrankie 3440675 - 39440 abs( area(A) - difference(A,B) - intersection(A,B) ) = -12 01060000000100000001030000000100000010000000ABE5901B9F04514172F97207369854418AE1115E9B0451413A1E1606379854412FC8508A96045141574FB94E38985441D7A3701D940451413D0AD7F3389854419A99995994045141333333F33A985441EC51B81E94045141000000003F985441713D0A6799045141666666763F985441CDCCCCEC9D045141F6285C1F3F9854419A9999C9A3045141EC51B8DE3D985441666666E6AE0451411F85EBB13A985441E17A142EB8045141AE47E1CA36985441333333A3B50451419A999909309854411948A539AD045141A264514632985441BAB6FD20A904514187AD325D33985441B88E923AA6045141C428A32234985441ABE5901B9F04514172F9720736985441 01060000000100000001030000000100000011000000D7A3701D940451413D0AD7F33898544178DBFF36940451412E6318CD399854413579ED179A045141A0FF7BA5389854414304D81EA004514159B9FE6C3798544169437462A504514119BA06A235985441C01AAF28AB04514110CF31A333985441089AA624AF045141250D45D63298544191CD99DAB1045141B3DFA81232985441A5696F63B60451416745560832985441333333A3B50451419A999909309854411948A539AD045141A264514632985441BAB6FD20A904514187AD325D33985441B88E923AA6045141C428A32234985441ABE5901B9F04514172F97207369854418AE1115E9B0451413A1E1606379854412FC8508A96045141574FB94E38985441D7A3701D940451413D0AD7F338985441 5 geos-3.4.2/tests/xmltester/tests/test.xml0000644000175000017500000052733312206417147020352 0ustar frankiefrankie A/A-6-18: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true A/A-6-24: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true A/A-1-1: same polygons [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) true A/A-1-2: same polygons with reverse sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.EP-SP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 140 20, 120 100, 20 100, 20 20)) true A/A-1-3: same polygons with different sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (120 100, 140 20, 20 20, 20 100, 120 100)) true A/A-1-4: same polygons with different number of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100)) true A/A-2: different polygons [dim(2){A.A.Int = B.A.Ext}] POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) true A/A-3-1-1: the closing point of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 140 200, 240 200, 240 120, 140 120)) true A/A-3-1-2: the closing point of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (80 180, 140 260, 260 200, 200 60, 80 180)) true A/A-3-1-3: the closing point of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (240 80, 140 120, 180 240, 280 200, 240 80)) true A/A-3-1-4: the boundary (at a non-vertex) of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (140 40, 180 80, 120 100, 140 40)) true A/A-3-1-5: the boundary (at a non-vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (120 100, 180 80, 130 40, 120 100)) true A/A-3-1-6: the boundary (at a vertex) of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 180 20, 140 140, 20 140, 20 20)) POLYGON( (180 100, 80 200, 180 280, 260 200, 180 100)) true A/A-3-1-7: the boundary (at a vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 140, 20 120, 0 220, 120 240, 140 140)) true A/A-3-1-8: the closing point of a polygon touching the boundary of another polygon where the closing point touching the boundary at a vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200)) true A/A-3-1-9: the closing point of a polygon touching the boundary of another polygon where the closing point intersecting the boundary at a non-vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (110 140, 200 70, 200 160, 110 140)) POLYGON( (110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140)) true A/A-3-2-1: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120)) POLYGON( (20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120)) true A/A-3-2-2: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120)) POLYGON( (20 120, 300 120, 140 240, 20 120)) true A/A-3-2-3: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140)) true A/A-3-2-4: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (260 200, 180 80, 120 160, 200 160, 180 220, 260 200)) true A/A-3-2-5: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (0 140, 300 140, 140 240, 0 140)) true A/A-3-2-6: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 320 140, 180 240, 20 240)) true A/A-3-2-7: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240)) true A/A-3-3-1: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (120 120, 220 20, 280 20, 240 160, 120 120)) true A/A-3-3-2: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 160 20, 260 120, 220 200, 140 120)) true A/A-3-3-3: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (20 140, 120 40, 20 40, 20 140)) POLYGON( (190 140, 190 20, 140 20, 20 140, 190 140)) true A/A-3-3-4: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (300 20, 220 20, 120 120, 260 160, 300 20)) true A/A-3-3-5: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 240 160, 280 60, 160 20, 140 120)) true A/A-3-3-6: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (280 60, 180 60, 120 120, 260 180, 280 60)) true A/A-3-3-7: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (120 200, 120 120, 40 120, 40 200, 120 200)) true A/A-3-3-8: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (160 220, 140 120, 60 120, 40 220, 160 220)) true A/A-3-3-9: two polygons touching along a boundary [dim(1){A.A.Bdy.V-EP = B.A.Bdy.V-SP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 20 120, 20 220, 140 220, 140 120)) true A/A-3-3-10: two polygons touching along a boundary [dim(1){A.A.Bdy.V-V = B.A.Bdy.NV-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (320 20, 220 20, 80 160, 240 140, 320 20)) true A/A-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Int}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 40, 60 140, 180 140, 180 40, 60 40)) true A/A-5-2-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 80 140, 160 60, 20 20)) true A/A-5-2-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 60, 20 20, 100 140, 160 60)) true A/A-5-2-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 100, 140 160, 160 40, 20 100)) true A/A-5-2-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 40, 20 100, 160 160, 160 40)) true A/A-5-2-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 180 120, 80 40, 20 180)) true A/A-5-2-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (180 120, 100 40, 20 180, 180 120)) true A/A-5-3-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 120, 20 160, 80 80, 20 20)) true A/A-5-3-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 140, 20 180, 80 100, 20 20)) true A/A-5-3-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 180, 60 100, 180 100, 200 180, 120 120, 40 180)) true A/A-5-3-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 60 80, 180 80, 220 180, 120 120, 20 180)) true A/A-5-3-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60)) true A/A-5-3-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 100, 180 100, 220 180, 120 140, 20 180, 60 100)) true A/A-5-4-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.SP-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 140, 120 120, 120 40, 20 20)) true A/A-5-4-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 140 140, 140 60, 20 20)) true A/A-5-4-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 120 40, 120 120, 20 140, 20 20)) true A/A-5-4-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (120 40, 20 20, 20 140, 120 120, 120 40)) true A/A-5-4-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 60, 140 140, 20 180, 20 20)) true A/A-5-4-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (140 60, 20 20, 20 180, 140 140, 140 60)) true A/A-5-4-7: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 60 120, 140 120, 180 20, 20 20)) true A/A-5-4-8: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 40, 120 40, 120 120, 20 140, 20 40)) true A/A-5-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}, dim(1){A.A.Bdy.(NV, V) = B.A.Bdy.(V, V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20)) true A/A-6-1: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 330 150, 250 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 140 20, 20 20, 150 150)) true A/A-6-2: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150)) true A/A-6-3: spiky polygons overlapping; boundary <-> boundary intersecting at 0 dimension [dim(2){A.A.Int = B.A.Int}] POLYGON( (20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-4: spiky polygons overlapping; boundary <-> boundary intersecting at 1 dimension at a few locations [dim(2){A.A.Int = B.A.Int}] POLYGON( (70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-5: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 220 160, 140 80, 60 160)) true A/A-6-6: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 140 80, 60 160)) true A/A-6-7: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 140 80, 260 200, 20 200)) true A/A-6-8: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 220 160, 260 200, 20 200)) true A/A-6-9: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 260 200, 20 200)) true A/A-6-10: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 200 200, 200 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-11: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 0, 100 200, 200 200, 200 0, 100 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-12: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 0, 120 200, 200 200, 200 0, 120 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-13: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 110 200, 110 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-14: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2100 110, 2100 100, 100 100)) true A/A-6-15: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-16: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-17: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-19: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 500 110, 500 100, 100 100)) true A/A-6-20: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-21: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 130 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-22: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 17 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-23: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-25: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (101 99, 101 1000000, 102 1000000, 101 99)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-26: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 101, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-26: two polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319)) POLYGON( (10 307, 22 307, 153 34, 22 34, 10 307)) true A/Ah-3-1: the closing point of a polygon touching the closing points of another polygon and its hole [dim(0){A.A.Bdy.CP = B.A.oBdy.CP}, dim(0){A.A.Bdy.CP = B.A.iBdy.CP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200)) true A/Ah-3-2: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (170 120, 240 100, 260 50, 190 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-3: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (270 90, 200 50, 150 80, 210 120, 270 90)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-4: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}] POLYGON( (170 120, 260 100, 240 60, 150 80, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-5: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.NV}] POLYGON( (220 120, 270 80, 200 60, 160 100, 220 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-6: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.V}] POLYGON( (260 50, 180 70, 180 110, 260 90, 260 50)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-7: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}] POLYGON( (230 110, 290 80, 190 60, 140 90, 230 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-8: the boundary of a polygon touching the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (170 120, 330 120, 260 50, 100 50, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-9: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 330 120, 280 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-10: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 300 120, 250 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-11: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.V-V-V = B.A.iBdy.NV-V-NV}] POLYGON( (190 100, 310 100, 260 50, 140 50, 190 100)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-5-1: an entire polygon within another polygon which has a hole [dim(2){A.A.Ext = B.A.Int}, dim(2){A.A.Int = B.A.Int}] POLYGON( (280 130, 360 130, 270 40, 190 40, 280 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-2: an entire polygon within another polygon which has a hole [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}] POLYGON( (220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-3: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.iBdy.V-V}] POLYGON( (260 130, 360 130, 280 40, 170 40, 260 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-4: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.NV-NV}] POLYGON( (240 110, 340 110, 290 60, 190 60, 240 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-5: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.V-V}] POLYGON( (250 120, 350 120, 280 50, 180 50, 250 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true Ah/Ah-1-1: same polygons (with a hole) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) true A2h/A2h-1-1: same polygons (with two holes) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) true A/mA-3-1: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.CP = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (280 190, 330 150, 200 110, 150 150, 280 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-2: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A1.oBdy.CP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (80 190, 220 190, 140 110, 0 110, 80 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-3: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (330 150, 200 110, 150 150, 280 190, 330 150)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-4: a polygon touching multipolygon at one spoint [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}] POLYGON( (290 190, 340 150, 220 120, 170 170, 290 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-5: a polygon touching multipolygon along boundaries [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.SP-V = B.2A2.oBdy.V-V}, dim(1){A.A.oBdy.V-V = B.2A1.oBdy.V-SP}] POLYGON( (220 190, 340 190, 260 110, 140 110, 220 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-6: a polygon touching multipolygon along boundaries and at a point [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.V-NV = B.2A1.oBdy.NV-SP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (140 190, 220 190, 100 70, 20 70, 140 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-6-1: a polygon overlapping multipolygon [dim(2){A.A.Int = B.4A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 220, 60 140, 140 60, 220 140, 140 220)) MULTIPOLYGON( ( (100 20, 180 20, 180 100, 100 100, 100 20)), ( (20 100, 100 100, 100 180, 20 180, 20 100)), ( (100 180, 180 180, 180 260, 100 260, 100 180)), ( (180 100, 260 100, 260 180, 180 180, 180 100))) true mA/mA-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110)), ( (110 110, 150 20, 70 20, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110))) true mAh/mAh-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-2: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-3: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-1: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-2: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true AC A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true L/A-3-1: a line touching the closing point of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.CP}] LINESTRING(150 150, 40 230) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-2: the start and end points of a LineString touching the boundary (at non-vertices) of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(40 40, 50 130, 130 130) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-3: the end point of a line touching the closing point of a polygon [dim(0){A.L.Bdy.EP = B.oBdy.CP}] LINESTRING(40 230, 150 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-4: an entire LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-EP = B.oBdy.NV-NV}] LINESTRING(210 150, 330 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-5: the start portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}] LINESTRING(200 150, 310 150, 360 220) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-6: the start portion and the end point of a LineString touching the boundary of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}, dim(0){A.L.Bdy.EP = B.A.oBdy.V}] LINESTRING(180 150, 250 150, 230 250, 370 250, 410 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-7: the middle portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.V-V = B.oBdy.NV-NV}] LINESTRING(210 210, 220 150, 320 150, 370 210) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-1: a line at non-vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(20 60, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-2: a line at non-vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-NV = B.A.Int}] LINESTRING(60 90, 310 180) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-3: a line at non-vertex crossing vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(90 210, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-4: a line at non-vertex crossing vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.oBdy.CP}] LINESTRING(290 10, 130 170) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-5: a line at vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(30 100, 100 100, 180 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-6: a line at vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-V = B.A.Int}] LINESTRING(20 100, 100 100, 360 100, 410 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-7: a line at vertex crossing vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.V}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(90 210, 150 150, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-1: an entire line within a polygon [dim(1){A.L.Int.SP-EP = B.A.Int}] LINESTRING(180 90, 280 120) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-2: a line within a polygon but the line's both ends touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(70 70, 80 20) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-3: a line within a polygon but the line's start point touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}] LINESTRING(130 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-4: a line within a polygon but the line's start point and middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.A.oBdy.NV}] LINESTRING(70 70, 80 20, 140 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-5: a line within a polygon but the line's middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.A.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(170 50, 170 20, 240 20, 260 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/Ah-2-1: a line outside a polygon [dim(1){A.L.Int.SP-EP = B.A.Ext}] LINESTRING(50 100, 140 190, 280 190) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-2-2: a line inside a polygon's hole [dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(140 60, 180 100, 290 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: the start point of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(170 120, 210 80, 270 80) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-2: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}, dim(0){A.L.Bdy.SP = B.A.iBdy.CP}] LINESTRING(170 120, 260 50) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(190 90, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-2: a line at a non-vertex crossing the boundary of a polygon where the closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-3: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-4: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-5: a line crossing polygon boundary where the closing point of the hole touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(190 90, 190 190, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-6: a line at a vertex crossing the boundary of a polygon where closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-7: a line at a vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-8: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/A2h-3-1: the start point a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.SP = B.A.iBdy.TP}] LINESTRING(130 110, 180 110, 190 60) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-2: the interior (at a non-vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-3: the interior (at a non-vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy1.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-4: the interior (at a non-vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-5: the start point a line touching the closing point and a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-6: the interior (at a vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-7: the interior (at a vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy1.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-8: the interior (at a vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/mA-4-1: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-NV = B.2A1.Int}, dim (1){A.L.Int.NV-EP = B.2A2.Int}] LINESTRING(160 70, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-4-2: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-V = B.2A1.Int}, dim (1){A.L.Int.V-EP = B.2A2.Int}] LINESTRING(160 70, 200 110, 280 190, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-5-1: a line within two connected polygons [dim(1){A.L.Int = B.2A.Int}, dim(0){A.L.Int.NV = B.2A.Bdy.TP] LINESTRING(70 50, 70 150) MULTIPOLYGON( ( (0 0, 0 100, 140 100, 140 0, 0 0)), ( (20 170, 70 100, 130 170, 20 170))) true RL/A-3-1: a LinearRing touching a polygon's closing point [dim(0){A.RL.Int.CP = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 200 200, 110 110) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-2: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.Bdy.NV}] LINESTRING(150 70, 160 110, 200 60, 150 70) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-3: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.iBdy.NV}] LINESTRING(80 60, 120 40, 120 70, 80 60) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-4: a LinearRing on the boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.Bdy.SP-EP}] LINESTRING(20 20, 200 20, 110 110, 20 20) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-5: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.iBdy.SP-EP}] LINESTRING(110 90, 170 30, 50 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-6: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.oBdy.SP-NV}] LINESTRING(110 110, 170 50, 170 110, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-7: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.iBdy.SP-NV}] LINESTRING(110 90, 70 50, 130 50, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-4-1: a LinearRing crossing a polygon [dim(1){A.RL.Int.CP-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.Bdy.NV}] LINESTRING(110 60, 20 150, 200 150, 110 60) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-4-2: a LinearRing crossing a polygon with a hole [dim(1){A.RL.Int.NV-NV = B.A.Int}, dim(0){A.RL.Int.NV = B.A.oBdy.CP}, dim(0){A.RL.Int.NV = B.A.iBdy.CP}, dim(0){A.RL.Int.NV = B.A.oBdy.NV}, dim(0){A.RL.Int.NV = B.A.iBdy.NV}] LINESTRING(110 130, 110 70, 200 100, 110 130) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-5-1: a LinearRing within a polygon [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 90, 160 40, 60 40, 110 90) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-5-2: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 100, 40 30, 180 30, 110 100) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-3: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.L.Int.CP = B.A.oBdy.CP}] LINESTRING(110 110, 180 30, 40 30, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-4: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.RL.Int.CP = B.A.iBdy.CP}] LINESTRING(110 90, 180 30, 40 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-5: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(1){A.RL.Int.SP-NV = B.A.Bdy.iBdy.SP-V}] LINESTRING(110 90, 50 30, 180 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true nsL/A-3-1: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SP = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 200 110, 110 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-2: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPb = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-3: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPo = B.A.Bdy.CP}] LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-4: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPx = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-5: a non-simple LineString touching a polygon [dim(1){A.nsL.Int.SPb-Vo = B.A.Bdy.SP-NV}] LINESTRING(110 110, 170 50, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-4-1: a non-simple LineString crossing a polygon [dim(1){A.nsL.Int.V-V-NV = B.A.Int}, dim(1){A.nsL.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 180) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-1: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}] LINESTRING(110 60, 50 30, 170 30, 90 70) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-2: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}, dim(1){A.nsL.Int.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 110, 70 40) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/Ah: the self-crossing point of a non-simple LineString touching the closing point of the inner boundary of a polygon [dim(0){A.nsL.Int.V = B.A.iBdy.CP}] LINESTRING(230 70, 170 120, 190 60, 140 60, 170 120, 270 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true mL/A-3-1: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 210, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-2: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (60 180, 60 110, 160 110, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-3: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-1: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVb = B.A.Int}, dim(0){A.mL.Int.NVb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-2: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVo = B.A.Int}, dim(0){A.mL.Int.NVo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-3: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVx = B.A.Int}, dim(0){A.mL.Int.NVx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-4: MultiLineString crossing a polygon [dim(1){A.mL.Int.Vb-Vb = B.A.Int}, dim(0){A.mL.Int.Vb = B.A.oBdy.CP}, dim(0){A.mL.Int.Vb = B.A.iBdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-1: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 100, 40 30, 180 30), (170 30, 110 90, 50 30)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-2: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/mA-3-1: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPb = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-2: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPo = B.mA.Bdy.TP}] MULTILINESTRING( (20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-3: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPx = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110), (110 110, 20 170, 20 130, 200 90)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true LC - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LC - intersection (containment) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (20 180, 20 80, 180 80, 180 180, 20 180))) true LC - intersection (overlap) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (60 180, 60 80, 180 80, 180 180, 60 180))) true LC - equal with boundary intersection LINESTRING(0 0, 60 0, 60 60, 60 0, 120 0) MULTILINESTRING( (0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true L/L.1-3-1: touching at the start points of two lines [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 120 120) LINESTRING(40 40, 60 120) true L/L.1-3-2: start point of one line touching end point of another line [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 40 40) true L/L.1-3-3: start point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.SP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(120 120, 20 200) true L/L.1-3-4: touching at the end points of two lines [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 120 120) true L/L.1-3-5: end point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(20 180, 140 140) true L/L.1-4-1: two lines crossing at non-vertex [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 40) true L/L.1-1-1: equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100) LINESTRING(40 40, 100 100) true L/L.1-1-2: equal lines but points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100) LINESTRING(100 100, 40 40) true L/L.1-2-1: dim(1){A.L.Int.SP-EP = B.L.Ext} LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 160) true L/L.1-5-1: line A containing line B [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 180 180) true L/L.1-5-2: line B is part of line A [dim(1){A.L.Int.SP-NV) = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 110 110) true L/L.1-5-3: Line B is part of line A (in the middle portion) [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(50 50, 140 140) true L/L.1-6-1: start portions of two lines overlapping [dim(1){A.L.Int.SP-NV = B.L.Int.SP-NV] LINESTRING(180 180, 40 40) LINESTRING(120 120, 260 260) true L/L.1-6-2: end portions of two lines overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.NV-EP] LINESTRING(40 40, 180 180) LINESTRING(260 260, 120 120) true L/L.1-6-3: end portion of line A overlapping the start portion of line B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-NV] LINESTRING(40 40, 180 180) LINESTRING(120 120, 260 260) true L/L.2-3-1: two LineStrings touching at start points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 20 100, 40 160, 20 200) true L/L.2-3-2: start point of LineStrings A touching the end point of LineString B [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-3: two LineStrings touching at end points [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(80 240, 200 120, 100 100, 40 40) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-4: both the start and end points of LineString A touching the interior of LineString B at two vertices [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 60 60, 250 160, 310 230) true L/L.2-3-5: both the start and end points of LineString A touching the interior of LineString B at two non-vertices [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 110 110, 200 110, 320 230) true L/L.2-3-6: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-7: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}, dim(0){A.L.Bdy.EP = B.L.Bdy.SP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(360 210, 310 160, 110 160, 60 110) true L/L.2-3-8: start point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(160 160, 240 240) true L/L.2-3-9: end point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 240, 160 160) true L/L.2-3-10: both the start and end points of LineString B touching the interior of LineString A at two non-vertices [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 150, 110 100, 170 100, 110 230) true L/L.2-3-11: the start point of LineString B touching the interior of LineString A at a non-vertex and the end point of LineString A touching the interior of LineString B at a vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-12: start point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 200 190, 150 240, 200 240) true L/L.2-3-13: end point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 240, 150 240, 200 200, 200 120) true L/L.2-3-14: both the start and end points of LineString B touching the interior of LineString A at two vertices [dim(0){A.L.Int.V = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 230, 80 140, 120 140, 140 230) true L/L.2-4-1: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 200 110, 250 160, 300 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-2: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 200 110, 250 160, 300 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-3: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 220 110, 250 160, 280 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-4: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 150 110, 200 160, 250 110, 360 110, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-5: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(130 160, 160 110, 220 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-6: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(130 160, 160 110, 190 110, 230 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-7: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-8: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-9: two LineStrings crossing at three points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-10: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 160 110, 200 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-11: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 180 110, 250 160, 320 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-12: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(140 160, 180 80, 220 160, 250 80) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-13: two LineStrings crossing at a vertex for one of the LineStrings [dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(20 130, 70 130, 160 40) true L/L.2-4-14: two LineStrings crossing at non-vertices for both of the LineStrings [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(40 160, 40 100, 110 40, 170 40) true L/L.2-4-15: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(130 110, 180 160, 230 110, 280 160, 330 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-16: two LineStrings crossing at vertices for both LineString [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(30 140, 80 140, 100 100, 200 30) true L/L.2-4-17: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 110, 110 160, 180 110, 250 160, 250 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-18: multiple crossings [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110) true L/L.2-4-19: spiky LineStrings with multiple crossing [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200) LINESTRING(30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20) true L/L.2-1-1: two equal LineStrings with equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 100 100, 200 120, 80 240) true L/L.2-1-2: two equal LineStrings with points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 200 120, 100 100, 40 40) true L/L.2-1-3: two equal LineStrings with different number of points [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 120 200, 200 120, 100 100, 80 80, 40 40) true L/L.2-2-1: disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(260 210, 240 130, 280 120, 260 40) true L/L.2-2-2: wrapping around but still disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150) LINESTRING(140 130, 100 110, 120 60, 170 60) true L/L.2-5-1: LineString A containing LineString B, same pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-2: LineString A containing LineString B, LineString A with less points [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-3: LineString A containing LineString B [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160) true L/L.2-5-4: LineString A containing LineString B [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 310 160, 340 190) true L/L.2-5-5: LineString A containing LineString B [dim(1){A.L.Int.V-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(140 160, 250 160, 310 160, 340 190) true L/L.2-5-6: LineString A containing LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 250 160, 310 160) true L/L.2-6-1: start portions of two LineStrings overlapping [dim(1){A.L.Int.SP-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 100 100, 40 40, 140 80, 200 40) true L/L.2-6-2: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100, 40 40) true L/L.2-6-3: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.NV-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 190, 140 140, 40 40) true L/L.2-6-4: end portions of two LineStrings overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 200, 200 260, 80 240, 140 180) true L/L.2-6-5: end portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(140 180, 80 240, 200 260, 240 200) true L/L.2-6-6: end portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.V-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 80 240) true L/L.2-6-7: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-NV = B.L.Int.NV-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 120 80, 200 80, 260 20) true L/L.2-6-8: middle portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(100 100, 200 120, 240 140, 280 240) true L/L.2-6-9: middle portion of LineString A overlapping end portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100) true L/L.2-6-10: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-V = B.L.Int.V-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(80 20, 80 80, 240 80, 300 20) true L/L.2-6-11: middle portions of two LineStrings overlapping, multiple intersects [dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80) true L/LR-3-1: a LineString touching a LinearRing [dim(0){A.L.Bdy.SP = B.LR.Int.CP}] LINESTRING(100 100, 20 180, 180 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-1: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(20 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-2: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(100 40, 100 160, 180 160) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-3: a LineString crossing a LinearRing [dim(0){A.L.Int.V = B.LR.Int.CP}] LINESTRING(20 100, 100 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-1: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-2: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 180 20) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-3: a LineString within a LinearRing [dim(1){A.L.Int.SP-V-EP = B.LR.Int.NV-CP-NV}] LINESTRING(60 60, 100 100, 140 60) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-1: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-NV = B.LR.Int.SP-V}] LINESTRING(100 100, 190 10, 190 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-2: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-V = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40, 160 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-3: a LineString crossing a LinearRing [dim(1){A.L.Int.NV-V = B.LR.Int.SP-NV}] LINESTRING(60 140, 160 40, 160 140) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 20 140, 140 20, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(20 20, 140 140) LINESTRING(20 140, 140 20, 100 20, 100 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 20) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex [dim(0){A.L.Int.NV = B.nsL.Int.V}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 80 80, 20 80, 50 140, 50 60) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 80, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 80, 80 20) true L/nsL.1-3-1: start point of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(130 150, 220 150, 220 240) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-2: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-3: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(30 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-4: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 20, 30 20, 130 150) true L/nsL.1-4: a Line crossing a non-simple LineString at non-vertices [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(30 150, 250 150) LINESTRING(120 240, 120 20, 20 20, 120 170) true nsL.5/L-3-1: switching the geometries for case L/nsL.5-3-1 [dim(0){A.nsL.Bdy.EPx = B.L.Bdy.SP}] LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(110 110, 200 110) true L/nsL.5-3-2: the start point of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(110 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true L/nsL.5-3-3: the interior of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true nsL.5/L-3-4 touches dim(0){A.nsL.Bdy.EPx = B.L.Int.NV} LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(20 110, 200 110) true L/nsL.10-6-1: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.EPx-NVx}] LINESTRING(90 200, 90 130, 110 110, 150 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/nsL.10-6-2: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.NVx-EPx}] LINESTRING(200 110, 110 110, 90 130, 90 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/mL-3-1: a line's end point touching a non-vertex with crossing line segments of a MultiLineString [dim(0){A.L.Bdy.SP = B.mL.Int.NVx] LINESTRING(80 80, 150 80, 210 80) MULTILINESTRING( (20 20, 140 140), (20 140, 140 20)) true LR/LR-1-1: two equal LinearRings, pointwise [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 160 200, 260 20, 40 80) true LR/LR-1-2: two equal LinearRings with points in reverse sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.EP-SP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 260 20, 160 200, 40 80) true LR/LR-1-3: two equal LinearRings with points in different sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.V = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(260 20, 40 80, 160 200, 260 20) true LR/LR-1-4: two equal LinearRings with different number of points [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.NV = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(100 140, 160 200, 260 20, 40 80, 100 140) true LR/LR-4-1: two LinearRings crossing at closing points [dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(100 100, 180 180, 20 180, 100 100) true LR/LR-4-2: two LinearRings crossing at two points [dim(0){A.LR.Int.CP = B.LR.Int.CP}, dim(0){A.LR.Int.V = B.LR.Int.V},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 40, 170 20, 170 190, 40 150) true LR/LR-4-3: two LinearRings crossing at the closing and a non-vertex [dim(0){A.LR.Int.CP = B.LR.Int.NV}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 100, 20 100, 100 180, 180 100) true LR/LR-4-4: two LinearRings crossing at the closing and a vertex [dim(0){A.LR.Int.CP = B.LR.Int.V}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 180, 100 100, 20 180, 180 180) true LR/LR-4-5: two LinearRings crossing at a vertex and a non-vertex [dim(0){A.LR.Int.V = B.LR.Int.NV}] LINESTRING(20 180, 100 100, 20 20, 20 180) LINESTRING(100 20, 100 180, 180 100, 100 20) true LR/LR-4-6: two LinearRings crossing at two points [dim(0){A.LR.Int.V = B.LR.Int.NV}, dim(0){A.LR.Int.V = B.LR.Int.NV},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(170 20, 20 170, 170 170, 170 20) true LR/LR-6-1: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.CP-V}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 90 210, 40 150) true LR/LR-6-2: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.NV-NV}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(20 150, 170 150, 90 230, 20 150) true LR/LR-6-3: two LinearRings overlapping [dim(1){A.LR.Int.(V-V-V-EP) = B.LR.Int.(NV-V-V-SP)}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 150 40, 20 40, 20 150, 40 150) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPb}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPo}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) true LR/nsL-6-1: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 110 110, 110 40) true LR/nsL-6-2: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}, dim(1){A.nsL.Int.V-EP = B.nsL.Int.EP-NVx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 20 20) true nsL/nsL-4-1: non-simple LineStrings crossing at closing points [dim(0){A.nsL.Int.CP = B.nsL.Int.CP}] LINESTRING(110 110, 20 110, 110 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 200, 200 110, 110 110) true nsL/nsL-4-2: non-simple LineStrings crossing at two points without vertices [dim(0){A.nsL.Int.NV = B.nsL.Int.NV}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(170 100, 70 100, 170 170, 70 170, 170 100) true nsL/nsL-4-3: non-simple LineStrings crossing at a point [dim(0){A.nsL.Int.NV = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(110 160, 70 110, 60 160, 20 130, 110 160) true nsL/nsL-4-4: non-simple LineStrings crossing at self-crossing points [dim(0){A.nsL.Int.NVx = B.nsL.Int.NVx}] LINESTRING(20 200, 200 200, 20 20, 200 20, 20 200) LINESTRING(20 110, 200 110, 200 160, 20 60, 20 110) true nsL/nsL-4-5: non-simple LineStrings crossing at vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(200 200, 110 110, 200 110, 110 200, 200 200) true nsL/nsL-4-6: non-simple LineStrings crossing at two points with vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(220 120, 120 20, 220 20, 120 120, 220 120) true mL/mL-1: MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) true mL/mL-1-1: non-simple MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) true mL/mL-1-2: equal non-simple MultiLineString with different sequence of lines and points [dim(1){A.mL.Int.SP-EP = B.mL.Int.EP-SP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 140, 90 60, 90 20), (170 20, 130 20, 20 20)) true mL/mL-3-1: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90)) true mL/mL-3-2: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60)) true mL/mL-3-3: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60)) true mL/mL-3-4: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20)) true mL/mL-3-5: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-6: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-7: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20)) true mL/mL-3-8: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20)) true mL/mL-4-1: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vb}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60)) true mL/mL-4-2: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vo}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60)) true mL/mL-4-3: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vx}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 90 90, 160 60)) true P/A-2-1: a point outside a polygon [dim(0){A.P.Int = B.A.Ext}] POINT(20 20) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-2-2: a point outside a converx polygon [dim(0){A.P.Int = B.A.Ext}] POINT(70 170) POLYGON( (110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230)) true P/A-2-3: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(110 130) POLYGON( (20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160)) true P/A-2-4: dim(0){A.P.Int = B.A.Ext} POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150)) true P/A-2-5: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-3-1: a point on the closing point of a polygon [dim(0){A.P.Int = B.A.Bdy.CP}] POINT(60 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-2: a point on the boudary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.Bdy.NV}] POINT(110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-3: a point on the boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.Bdy.V] POINT(160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-4: a point on the touching point of boudary [dim(0){A.P.Int = B.A.Bdy.TP}] POINT(100 150) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-5: a point on the interior of a polygon [dim(0){A.P.Int = B.A.Int}] POINT(100 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/Ah-2-1: a point outside of polygon with a hole [dim(0){A.P.Int = B.A.Ext}] POINT(60 160) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-2-2: a point inside the hole of the polygon [dim(0){A.P.Int = B.A.Ext.h}] POINT(190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-1: a point on the closing point of the outer boundary of a polygon with a hole [dim(0){A.P.Int = B.A.oBdy.CP}] POINT(190 190) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-2: a point on the outer boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.oBdy.V}] POINT(360 20) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-3: a point on the outer boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.oBdy.NV}] POINT(130 130) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-4: a point on the closing point of the inner boundary of a polygon [dim(0){A.P.Int = B.A.iBdy.CP}] POINT(280 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-5: a point on the inner boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.iBdy.NV}] POINT(150 100) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-6: a point on the inner boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.iBdy.V}] POINT(100 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-5: a point inside the interior of a polygon with a hole [dim(0){A.P.Int = B.A.Int}] POINT(140 120) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/A2h-3-1: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(190 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true P/A2h-3-2: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(180 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90)) true mP/A-2: 3 points outside a polygon [dim(0){A.2P.Int = B.A.Ext}] MULTIPOINT(20 80, 110 160, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-1: one of 3 points on the closing point of the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}] MULTIPOINT(20 80, 60 120, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-2: one of 3 points on the boundary of a polygon at a non-vertex [dim(0){A.3P3 = B.A.Bdy.NV}] MULTIPOINT(10 80, 110 170, 110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-3: one of 3 points on the boundary of a polygon at a vertex [dim(0){A.3P1.Int = B.A.Bdy.V}] MULTIPOINT(10 80, 110 170, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-4: 3 of the 5 points on the boundary of a polygon [dim(0){A.5P2.Int = B.A.Bdy.CP}, dim(0){A.5P3.Int = B.A.Bdy.NV}, dim(0){A.5P4.Int = B.A.Bdy.V}] MULTIPOINT(20 120, 60 120, 110 120, 160 120, 200 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-5: all 3 points on the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Bdy.V}] MULTIPOINT(60 120, 110 120, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-6: all 4 points on the boundary of a polygon [dim(0){A.4P = B.A.Bdy}] MULTIPOINT(60 120, 160 120, 160 40, 60 40) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-1: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.CP}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(20 150, 60 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-2: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.V}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 160 120, 200 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-3: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 110 120, 110 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-4: 1 point outside a polygon, 1 point inside [dim(0){A.2P1.Int = B.A.Ext}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(110 170, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-5: 1 point outside a polygon, 2 points on the boundary and 1 point inside [dim(0){A.4P1.Int = B.A.Ext}, dim(0){A.4P2.Int = B.A.Bdy.CP}, dim(0){A.4P3.Int = B.A.Bdy.V}, dim(0){A.4P4.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80, 110 170) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-1: 2 points within a polygon [dim(0){A.2P.Int = B.A.Int] MULTIPOINT(90 80, 130 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-2: 1 point on the boundary and 1 point inside a polygon [dim(0){A.2P1.Int = B.A.Bdy.CP}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/Ah-2-1: 3 points outside a polygon [dim(0){A.3P.Int = B.Ah.Ext}] MULTIPOINT(40 170, 40 90, 130 170) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-2: 2 points outside a polygon and 1 point inside the hole of the polygon [dim(0){A.3P1.Int = B.Ah.Ext}, dim(0){A.3P2.Int = B.Ah.Ext}, dim(0){A.3P3.Int = B.Ah.Ext.h}] MULTIPOINT(90 170, 280 170, 190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-3: all 3 points in polygon's hole [dim(0){A.3P.Int = B.Ah.Ext.h}] MULTIPOINT(190 110, 150 70, 230 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/mA-3-1: a point on the touching point of two polygons [dim(0){A.P.Int = B.2A.Bdy}] POINT(100 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-2: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.CP}] POINT(20 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-3: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.V}] POINT(60 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-4: a point touching a polygon's boundary where the boundaries touch at a point [dim(0){A.P.Int = B.2A.Bdy.TP}] POINT(110 110) MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ( (110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110))) true P/L-2: a point and a line disjoint [dim(0){A.P.Int = B.L.Ext}] POINT(110 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-1: a point touching the start point of a line [dim(0){A.P.Int = B.L.Bdy.SP}] POINT(90 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-2: a point touching the end point of a line [dim(0){A.P.Int = B.L.Bdy.EP}] POINT(340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-1: a point on the line at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(230 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-2: a point on the line at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(160 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/LR-2-1: a point outside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(90 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-2-2: a point inside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(150 80) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-1: a point on the closing point of a LinearRing [dim(0){A.P.Int = B.LR.Int.CP}] POINT(150 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-2: a point on a LinearRing at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(100 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-3: a point on a LinearRing at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(20 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/nsL.1-3-1: a point on a non-simple LineString's end point [dim(0){A.P.Int = B.nsL.Bdy.EP}] POINT(220 220) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-2: a point a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-3: a point on a non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-4: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(220 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.2-5-2: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-3: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(20 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-4: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(20 110) LINESTRING(20 200, 20 20, 110 20, 20 110, 110 200) true P/nsL.3-3-1: a point on a non-simple LineString's start point [dim(0){A.P.Int = B.nsL.Bdy.SP}] POINT(20 200) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.3-5-2: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(80 140) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-4: a point on a non-simple LineString's interior at a two-vertex point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-5: a point on a non-simple LineString's interior at a vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-6: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-7: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-8: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-1: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-2: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-3:a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.4-3-4: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-5: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-6: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 200 200) true P/nsL.4-3-7: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-8: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200) true P/nsL.5-3-1: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-2: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 110 200, 110 110) true P/nsL.5-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-5: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110) true P/nsL.6-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-2: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110) true P/nsL.7-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 20, 20 20, 110 110) true P/nsL.7-5-3: a point on a closed non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-4: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.8-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-2: a point on the interior (at a non-vertex) of a closed non-simple LineString [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-3: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.9-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.9-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.10-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.10-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.11-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.11-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.12-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.12-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.13-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110) true P/nsL.13-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110) true P/nsL.14-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110) true P/nsL.14-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110) true P/nsL.15-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 200 200) true P/nsL.15-5-2: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200) true P/nsL.15-5-3: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200) true P/nsL.16-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.16-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-3: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-4: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-5: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.18-5-1: a point on a non-simple LineString's start point with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb)}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-2: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.19-5-1: a point on a non-simple LineString's closing point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.CPo}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-2: a point on a non-simple LineString's interior at a non-vertex overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-3: a point on a non-simple LineString interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.20-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.20-5-2: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsl.20-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 200) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true mP/L-2-1: MultiPoint and a line disjoint (points on one side of the line) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(50 250, 90 220, 130 190) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-2-2: MultiPoint and a line disjoint (points over the line but no intersection) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(180 180, 230 130, 280 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-1: one of the points intersecting the start point of a line [dim(0){A.3P2.Int = B.L.Bdy.SP}] MULTIPOINT(50 120, 90 80, 130 40) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-2: one of the points intersecting the end point of a line [dim(0){A.3P2 = B.L.Bdy.EP}] MULTIPOINT(300 280, 340 240, 380 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-1: one of the points intersecting the interior of a line at a non-vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.NV] MULTIPOINT(230 150, 260 120, 290 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-2: one of the points intersecting the interior of a line at a non-vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.NV] MULTIPOINT(200 190, 240 150, 270 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-3: one of the points intersecting the interior of a line at a vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.V] MULTIPOINT(160 150, 190 120, 220 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-4: one of the points intersecting the interior of a line at a vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.V] MULTIPOINT(120 190, 160 150, 200 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-1: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(90 80, 160 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-2: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(90 80, 160 150, 300 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-3: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 160 150, 240 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-4: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 130 120, 210 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-5: all the points on a line [dim(0){A.3P1.Int = B.L.Int.NV}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(130 120, 210 150, 340 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-6: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(160 150, 240 150, 340 210) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-7: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(160 150, 300 150, 340 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-8: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(160 150, 240 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/P: same point [dim(0){A.P.Int = B.P.Int}] POINT(20 20) POINT(20 20) true P/P: different point [dim(0){A.P.Int = B.P.Ext}] POINT(20 20) POINT(40 60) true P/mP: different points [dim(0){A.P.Int = B.3P.Ext}] POINT(40 40) MULTIPOINT(20 20, 80 80, 20 120) true P/mP: point A within one of B points [dim(0){A.P.Int = B.3P1.Int}] POINT(20 20) MULTIPOINT(20 20, 80 80, 20 120) true mP/mP-1-1: same points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P2.Int = B.3P2.Int}, dim(0){A.3P3.Int = B.3P3.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 80 60, 120 100) true mP/mP-1-2: same but different sequence of points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P1.Int = B.3P3.Int}, dim(0){A.3P3.Int = B.3P2.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 120 100, 80 60) true mP/mP-2: different points [dim(0){A.4P.Int = B.4P.Ext}] MULTIPOINT(40 40, 60 100, 100 60, 120 120) MULTIPOINT(20 120, 60 60, 100 100, 140 40) true mP/mP-5-1: same points [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(20 20, 80 70, 140 120, 200 170) true mP/mP-5-2: same points but different sequence [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 140 120, 80 70, 200 170) MULTIPOINT(80 70, 20 20, 200 170, 140 120) true mP/mP-5-3: some points same [dim(0){A.4P2.Int = B.2P1.Int}, dim(0){A.4P3.Int = B.2P2.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(80 70, 140 120) true mP/mP-5-4: some points same, in a different sequence [dim(0){A.4P1.Int = B.2P2.Int}, dim(0){A.4P4.Int = B.2P1.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(140 120, 80 70) true mP/mP-6-1: some points same, some different [dim(0){A.4P4.Int = B.3P2.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80) true mP/mP-6-2: dim(0){A.4P1.Int = B.4P4.Int}, dim(0){A.4P4.Int = B.4P2.Int} MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80, 80 70) true geos-3.4.2/tests/xmltester/tests/testLeaksBig.xml0000644000175000017500000102212112206417147021736 0ustar frankiefrankie P - point POINT(10 10) GEOMETRYCOLLECTION EMPTY mP - MultiPoint MULTIPOINT((10 10), (20 20)) GEOMETRYCOLLECTION EMPTY L - Line LINESTRING(10 10, 20 20) MULTIPOINT(10 10, 20 20) L - closed LINESTRING(10 10, 20 20, 20 10, 10 10) MULTIPOINT EMPTY L - self-intersecting with boundary LINESTRING(40 40, 100 100, 180 100, 180 180, 100 180, 100 100) MULTIPOINT(40 40, 100 100) mL - 2 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 30)) MULTIPOINT(10 10, 30 30) mL - 3 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30)) MULTIPOINT(10 10, 20 20, 30 20, 30 30) mL - 4 lines with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 30 20), (20 20, 30 30), (20 20, 30 40)) MULTIPOINT((10 10), (30 20), (30 30), (30 40)) mL - 2 lines, one closed, with common endpoint MULTILINESTRING( (10 10, 20 20), (20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT(10 10, 20 20) L - 1 line, self-intersecting, topologically equal to prev case MULTILINESTRING( (10 10, 20 20, 20 30, 30 30, 30 20, 20 20)) MULTIPOINT(10 10, 20 20) A - polygon with no holes POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60)) LINESTRING(40 60, 420 60, 420 320, 40 320, 40 60) A - polygon with 1 hole POLYGON( (40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) MULTILINESTRING((40 60, 420 60, 420 320, 40 320, 40 60), (200 140, 160 220, 260 200, 200 140)) SegFault POLYGON((1033707.6 1048313.1,1033694.9 1048315.7,1033659.9 1048344.3,1033627.6 1048388.8,1033620.9 1048426.8,1033623.6 1048471.3,1033623.6 1048480.8,1033616.8 1048503.2,1033629.1 1048541.3,1033668.3 1048707.6,1033696.3 1048755.6,1033721.4 1048771.6,1033724.5 1048772,1033737.2 1048772,1033772.1 1048756.4,1033794.6 1048721.9,1033811.1 1048667.4,1033814.8 1048613.6,1033815.1 1048597.5,1033809.2 1048556.1,1033809.3 1048549.6,1033797.1 1048501.9,1033790.9 1048492.2,1033773 1048399.6,1033760.6 1048377.6,1033741.8 1048357.8,1033742.1 1048341.8,1033713.9 1048313.4,1033707.6 1048313.1)) true AA - simple polygons POLYGON( (10 10, 100 10, 100 100, 10 100, 10 10)) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POLYGON( (50 50, 50 100, 100 100, 100 50, 50 50)) POLYGON( (10 10, 10 100, 50 100, 50 200, 200 200, 200 50, 100 50, 100 10, 10 10)) POLYGON( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)) MULTIPOLYGON( ( (10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)), ( (50 100, 50 200, 200 200, 200 50, 100 50, 100 100, 50 100))) AA - A with hole intersecting B POLYGON( (20 20, 20 160, 160 160, 160 20, 20 20), (140 140, 40 140, 40 40, 140 40, 140 140)) POLYGON( (80 100, 220 100, 220 240, 80 240, 80 100)) POLYGON( (80 140, 80 160, 160 160, 160 100, 140 100, 140 140, 80 140)) POLYGON( (20 20, 20 160, 80 160, 80 240, 220 240, 220 100, 160 100, 160 20, 20 20), (80 100, 80 140, 40 140, 40 40, 140 40, 140 100, 80 100)) POLYGON( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)) MULTIPOLYGON( ( (20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)), ( (80 100, 80 140, 140 140, 140 100, 80 100)), ( (80 160, 80 240, 220 240, 220 100, 160 100, 160 160, 80 160))) AA - simple polygons #2 POLYGON( (20 340, 330 380, 50 40, 20 340)) POLYGON( (210 320, 140 270, 0 270, 140 220, 210 320)) POLYGON( (27 270, 140 270, 210 320, 140 220, 28 260, 27 270)) POLYGON( (20 340, 330 380, 50 40, 28 260, 0 270, 27 270, 20 340)) POLYGON( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)) MULTIPOLYGON( ( (20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)), ( (27 270, 28 260, 0 270, 27 270))) AA - simple polygons intersecting in P, L and A POLYGON( (0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0)) POLYGON( (220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0)) GEOMETRYCOLLECTION( POINT(110 260), LINESTRING(110 0, 110 60), POLYGON( (110 100, 40 140, 110 180, 180 140, 110 100))) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 100, 40 60, 110 60, 180 60, 110 100)) POLYGON( (110 0, 0 0, 0 260, 110 260, 40 220, 110 180, 40 140, 110 100, 40 60, 110 60, 110 0)) POLYGON( (110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0), (110 260, 40 220, 110 180, 180 220, 110 260), (110 180, 40 140, 110 100, 180 140, 110 180), (110 100, 40 60, 110 60, 180 60, 110 100)) AA - simple polygons with two touching holes in their symDifference POLYGON( (0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0)) POLYGON( (230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0)) POLYGON( (120 0, 0 0, 0 190, 120 190, 230 190, 230 0, 120 0), (120 100, 50 50, 120 50, 190 50, 120 100), (120 100, 190 150, 120 150, 50 150, 120 100)) AmA - A simple, symDiff contains inversion POLYGON( (0 0, 210 0, 210 230, 0 230, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 90, 60 60, 90 60, 90 90, 60 90)), ( (70 120, 90 90, 100 120, 70 120)), ( (120 70, 90 90, 120 100, 120 70))) POLYGON( (0 0, 0 230, 210 230, 210 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 90 60, 90 90, 60 90, 60 60), (90 90, 120 70, 120 100, 90 90), (90 90, 100 120, 70 120, 90 90)) AmA - A simple, B connected multiPolygon touching A at vertex POLYGON( (0 0, 340 0, 340 300, 0 300, 0 0)) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (40 20, 0 0, 20 40, 60 60, 40 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 0, 0 300, 340 300, 340 0, 0 0), (0 0, 40 20, 60 60, 20 40, 0 0), (60 60, 100 60, 100 100, 60 100, 60 60)) AmA - A simple, B connected multiPolygon touching A at interior of edge POLYGON( (0 0, 120 0, 120 120, 0 120, 0 0)) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 100, 60 60, 100 60, 100 100, 60 100))) MULTIPOLYGON( ( (60 20, 0 20, 60 60, 60 20)), ( (60 60, 60 100, 100 100, 100 60, 60 60))) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) POLYGON( (0 20, 0 120, 120 120, 120 0, 0 0, 0 20), (0 20, 60 20, 60 60, 0 20), (60 60, 100 60, 100 100, 60 100, 60 60)) AA - simple polygons with holes POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) POLYGON( (300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330), (290 240, 240 200, 240 110, 290 80, 330 170, 290 240)) POLYGON( (251 104, 217 57, 176 89, 210 130, 210 210, 172 226, 190 270, 217 285, 260 250, 263 218, 240 200, 240 110, 251 104)) MULTIPOLYGON( ( (217 57, 190 20, 60 40, 20 150, 60 260, 160 330, 217 285, 190 270, 172 226, 140 240, 80 190, 90 100, 160 70, 176 89, 217 57)), ( (217 57, 251 104, 290 80, 330 170, 290 240, 263 218, 260 250, 217 285, 300 330, 380 250, 380 50, 250 30, 217 57)), ( (263 218, 270 130, 251 104, 240 110, 240 200, 263 218)), ( (172 226, 210 210, 210 130, 176 89, 150 110, 150 170, 172 226))) mAmA - complex polygons touching and overlapping MULTIPOLYGON( ( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340)), ( (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200))) MULTIPOLYGON( ( (100 220, 100 200, 300 200, 300 220, 100 220)), ( (280 180, 280 160, 300 160, 300 180, 280 180)), ( (220 140, 220 120, 240 120, 240 140, 220 140)), ( (180 220, 160 240, 200 240, 180 220))) MULTILINESTRING( (120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280, 200 200, 220 200, 220 340, 120 340), (360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120, 220 120, 220 100, 360 100, 360 200)) POLYGON( (220 100, 120 200, 120 340, 220 340, 360 200, 360 100, 220 100)) GEOMETRYCOLLECTION( POINT(200 240), LINESTRING(300 200, 220 200), LINESTRING(280 180, 300 180), LINESTRING(300 180, 300 160), LINESTRING(300 160, 280 160), LINESTRING(220 140, 240 140), LINESTRING(240 120, 220 120), POLYGON( (120 200, 120 220, 140 220, 140 200, 120 200)), POLYGON( (160 200, 160 220, 180 220, 180 200, 160 200)), POLYGON( (180 240, 180 220, 160 240, 180 240)), POLYGON( (200 200, 200 220, 220 220, 220 200, 200 200))) POLYGON( (120 220, 120 340, 220 340, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200, 200 200, 180 200, 160 200, 140 200, 120 200, 100 200, 100 220, 120 220), (200 240, 200 280, 180 280, 180 240, 200 240), (200 240, 180 220, 200 220, 200 240), (160 240, 160 280, 140 280, 140 220, 160 220, 160 240), (240 120, 300 120, 300 140, 240 140, 240 120)) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (160 220, 160 240, 180 220, 160 220)), ( (300 200, 360 200, 360 100, 220 100, 220 120, 240 120, 300 120, 300 140, 240 140, 220 140, 220 160, 280 160, 300 160, 300 180, 280 180, 220 180, 220 200, 300 200))) MULTIPOLYGON( ( (120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240, 160 240, 160 280, 140 280, 140 220, 120 220)), ( (120 220, 120 200, 100 200, 100 220, 120 220)), ( (140 200, 140 220, 160 220, 160 200, 140 200)), ( (160 220, 160 240, 180 220, 160 220)), ( (180 200, 180 220, 200 220, 200 200, 180 200)), ( (180 220, 180 240, 200 240, 180 220)), ( (220 200, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200), (240 120, 300 120, 300 140, 240 140, 240 120))) mAmA - complex polygons touching MULTIPOLYGON( ( (100 200, 100 180, 120 180, 120 200, 100 200)), ( (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (280 220, 240 180, 260 160, 300 200, 280 220))) MULTIPOLYGON( ( (80 220, 80 160, 140 160, 140 220, 80 220), (100 200, 100 180, 120 180, 120 200, 100 200)), ( (220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160, 220 140, 320 140, 320 240, 220 240), (240 220, 240 160, 300 160, 300 220, 240 220))) MULTILINESTRING( (100 200, 100 180, 120 180, 120 200, 100 200), (60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200, 160 220, 220 220, 220 240, 60 240), (80 220, 80 160, 140 160, 140 220, 80 220), (280 220, 240 180, 260 160, 300 200, 280 220)) POLYGON( (60 140, 60 240, 220 240, 280 220, 300 200, 260 160, 220 140, 60 140)) GEOMETRYCOLLECTION( POINT(240 180), POINT(260 160), POINT(280 220), POINT(300 200), LINESTRING(100 200, 100 180), LINESTRING(100 180, 120 180), LINESTRING(120 180, 120 200), LINESTRING(120 200, 100 200), LINESTRING(220 140, 220 160), LINESTRING(220 160, 160 160), LINESTRING(160 160, 160 180), LINESTRING(160 180, 200 180), LINESTRING(200 200, 160 200), LINESTRING(160 200, 160 220), LINESTRING(160 220, 220 220), LINESTRING(220 220, 220 240), LINESTRING(80 220, 80 160), LINESTRING(80 160, 140 160), LINESTRING(140 160, 140 220), LINESTRING(140 220, 80 220)) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (100 180, 100 200, 120 200, 120 180, 100 180)), ( (220 140, 60 140, 60 240, 220 240, 220 220, 160 220, 160 200, 200 200, 200 180, 160 180, 160 160, 220 160, 220 140), (80 220, 80 160, 140 160, 140 220, 80 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) MULTIPOLYGON( ( (220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140), (200 200, 200 180, 220 180, 220 200, 200 200), (240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)), ( (240 180, 280 220, 300 200, 260 160, 240 180))) AA - hole intersecting boundary to produce line POLYGON( (60 160, 140 160, 140 60, 60 60, 60 160)) POLYGON( (160 160, 100 160, 100 100, 160 100, 160 160), (140 140, 120 140, 120 120, 140 120, 140 140)) LINESTRING( 60 160, 140 160, 140 60, 60 60, 60 160) POLYGON( (60 60, 60 160, 140 160, 140 60, 60 60)) GEOMETRYCOLLECTION( LINESTRING(140 140, 140 120), POLYGON( (100 160, 140 160, 140 140, 120 140, 120 120, 140 120, 140 100, 100 100, 100 160))) POLYGON( (60 160, 100 160, 140 160, 160 160, 160 100, 140 100, 140 60, 60 60, 60 160)) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 120, 120 120, 120 140, 140 140))) MULTIPOLYGON( ( (60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)), ( (140 140, 140 160, 160 160, 160 100, 140 100, 140 120, 120 120, 120 140, 140 140))) LA - A and B simple LINESTRING(240 190, 120 120) POLYGON( (110 240, 50 80, 240 70, 110 240)) LINESTRING(177 153, 120 120) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LINESTRING(240 190, 177 153) GEOMETRYCOLLECTION( LINESTRING(240 190, 177 153), POLYGON( (177 153, 240 70, 50 80, 110 240, 177 153))) LA - A intersects B-hole LINESTRING(0 100, 100 100, 200 200) POLYGON( (30 240, 260 30, 30 30, 30 240), (80 140, 80 80, 140 80, 80 140)) MULTILINESTRING( (30 100, 80 100), (110 110, 140 140)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) MULTILINESTRING( (0 100, 30 100), (80 100, 100 100, 110 110), (140 140, 200 200)) GEOMETRYCOLLECTION( LINESTRING(0 100, 30 100), LINESTRING(80 100, 100 100, 110 110), LINESTRING(140 140, 200 200), POLYGON( (30 240, 140 140, 260 30, 30 30, 30 100, 30 240), (80 140, 80 100, 80 80, 140 80, 110 110, 80 140))) LA - A intersects B-hole #2 LINESTRING(40 340, 200 250, 120 180, 160 110, 270 40) POLYGON( (160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330), (140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240)) MULTILINESTRING( (114 298, 200 250, 173 226), (182 96, 225 68)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) MULTILINESTRING( (40 340, 114 298), (173 226, 120 180, 160 110, 182 96), (225 68, 270 40)) GEOMETRYCOLLECTION( LINESTRING(40 340, 114 298), LINESTRING(173 226, 120 180, 160 110, 182 96), LINESTRING(225 68, 270 40), POLYGON( (114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260, 114 298), (140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240))) mLmA - A and B complex, disjoint MULTIPOLYGON( ( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) MULTILINESTRING( (100 240, 100 180, 160 180, 160 120, 220 120), (40 360, 40 60, 340 60, 40 360, 40 20), (120 120, 120 140, 100 140, 100 120, 140 120)) POLYGON( (60 80, 60 320, 300 80, 60 80)) MULTILINESTRING( (60 320, 60 80, 300 80, 60 320), (80 280, 80 100, 260 100, 80 280), (120 160, 140 160, 140 140, 120 160)) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) MULTIPOLYGON( ( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), ( (120 160, 140 160, 140 140, 120 160))) GEOMETRYCOLLECTION( LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120), LINESTRING(40 360, 40 60), LINESTRING(40 60, 340 60, 40 360), LINESTRING(40 60, 40 20), LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120), LINESTRING(120 120, 140 120), POLYGON( (60 320, 300 80, 60 80, 60 320), (80 280, 80 100, 260 100, 80 280)), POLYGON( (120 160, 140 160, 140 140, 120 160))) GEOMETRYCOLLECTION EMPTY mLmA - A and B complex, overlapping and touching #1 MULTIPOLYGON( ( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240)), ( (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200))) MULTILINESTRING( (40 260, 240 260, 240 240, 40 240, 40 220, 240 220), (120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320)) MULTILINESTRING( (60 260, 60 120, 220 120, 220 260, 60 260), (80 240, 80 140, 200 140, 200 240, 80 240), (100 220, 100 160, 180 160, 180 220, 100 220), (120 200, 120 180, 160 180, 160 200, 120 200)) POLYGON( (60 120, 60 260, 220 260, 220 120, 60 120)) MULTILINESTRING( (220 260, 140 260), (140 260, 120 260), (120 260, 60 260), (200 240, 140 240), (140 240, 120 240), (120 240, 80 240), (180 220, 140 220), (140 220, 120 220), (120 220, 100 220), (120 200, 120 180), (220 240, 200 240), (80 240, 60 240), (60 220, 80 220), (200 220, 220 220), (120 260, 120 240), (120 220, 120 200), (120 180, 120 160), (120 140, 120 120), (140 120, 140 140), (140 160, 140 180), (140 200, 140 220), (140 240, 140 260)) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) MULTIPOLYGON( ( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), ( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) GEOMETRYCOLLECTION( LINESTRING(40 260, 60 260), LINESTRING(220 260, 240 260, 240 240, 220 240), LINESTRING(60 240, 40 240, 40 220, 60 220), LINESTRING(80 220, 100 220), LINESTRING(180 220, 200 220), LINESTRING(220 220, 240 220), LINESTRING(120 300, 120 260), LINESTRING(120 240, 120 220), LINESTRING(120 160, 120 140), LINESTRING(120 120, 120 80), LINESTRING(120 80, 140 80), LINESTRING(140 80, 140 120), LINESTRING(140 140, 140 160), LINESTRING(140 180, 140 200), LINESTRING(140 220, 140 240), LINESTRING(140 260, 140 300), LINESTRING(120 300, 120 320), POLYGON( (60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120, 120 120, 60 120, 60 220, 60 240), (80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240, 120 240, 80 240)), POLYGON( (120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160), (120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200))) mLmA - A and B complex, overlapping and touching #2 MULTIPOLYGON( ( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260)), ( (280 400, 320 400, 320 360, 280 360, 280 400)), ( (300 240, 300 220, 320 220, 320 240, 300 240))) MULTILINESTRING( (80 300, 80 160, 260 160, 260 300, 80 300, 80 140), (220 360, 220 240, 300 240, 300 360)) POLYGON( (60 120, 60 320, 280 400, 320 400, 320 220, 280 120, 60 120)) MULTILINESTRING( (60 320, 60 120, 280 120, 280 320, 60 320), (120 260, 120 180, 240 180, 240 260, 120 260), (280 400, 320 400, 320 360, 280 360, 280 400), (300 240, 300 220, 320 220, 320 240, 300 240)) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) MULTIPOLYGON( ( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), ( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), ( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( LINESTRING(220 360, 220 320), LINESTRING(220 260, 220 240, 240 240), LINESTRING(280 240, 300 240), LINESTRING(300 240, 300 360), POLYGON( (280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240), (120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)), POLYGON( (280 400, 320 400, 320 360, 300 360, 280 360, 280 400)), POLYGON( (300 240, 320 240, 320 220, 300 220, 300 240))) GEOMETRYCOLLECTION( POINT(300 240), POINT(300 360), LINESTRING(80 300, 80 160), LINESTRING(80 160, 260 160, 260 240), LINESTRING(260 240, 260 300, 220 300), LINESTRING(220 300, 80 300), LINESTRING(80 160, 80 140), LINESTRING(220 320, 220 300), LINESTRING(220 300, 220 260), LINESTRING(240 240, 260 240), LINESTRING(260 240, 280 240)) mLmA - A and B complex, overlapping and touching #3 MULTIPOLYGON( ( (120 180, 60 80, 180 80, 120 180)), ( (100 240, 140 240, 120 220, 100 240))) MULTILINESTRING( (180 260, 120 180, 60 260, 180 260), (60 300, 60 40), (100 100, 140 100)) POLYGON( (60 80, 100 240, 140 240, 180 80, 60 80)) MULTILINESTRING( (120 180, 60 80, 180 80, 120 180), (100 240, 140 240, 120 220, 100 240)) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) MULTIPOLYGON( ( (60 80, 120 180, 180 80, 60 80)), ( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( LINESTRING(180 260, 120 180), LINESTRING(120 180, 60 260), LINESTRING(60 260, 180 260), LINESTRING(60 300, 60 260), LINESTRING(60 260, 60 80), LINESTRING(60 80, 60 40), POLYGON( (60 80, 120 180, 180 80, 60 80)), POLYGON( (100 240, 140 240, 120 220, 100 240))) GEOMETRYCOLLECTION( POINT(60 80), POINT(120 180), LINESTRING(100 100, 140 100)) LL - A crosses B LINESTRING(0 0, 100 100) LINESTRING(0 100, 100 0) POINT(50 50) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) MULTILINESTRING( (0 0, 50 50), (50 50, 100 100)) MULTILINESTRING( (0 0, 50 50), (0 100, 50 50), (50 50, 100 100), (50 50, 100 0)) LL - A shares one segment with B LINESTRING(0 0, 100 100, 200 0) LINESTRING(0 0, 100 100, 200 200) LINESTRING(0 0, 100 100) MULTILINESTRING( (0 0, 100 100), (100 100, 200 200), (100 100, 200 0)) LINESTRING(100 100, 200 0) MULTILINESTRING( (100 100, 200 200), (100 100, 200 0)) LL - A and B disjoint LINESTRING(40 360, 40 220, 120 360) LINESTRING(120 340, 60 220, 140 220, 140 360) MULTIPOINT(40 360, 120 360) POLYGON( (40 220, 40 360, 120 360, 40 220)) GEOMETRYCOLLECTION EMPTY MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LINESTRING(40 360, 40 220, 120 360) MULTILINESTRING( (40 360, 40 220, 120 360), (120 340, 60 220, 140 220, 140 360)) LL - A and B intersect frequently LINESTRING(220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280) LINESTRING(220 240, 140 160, 120 180, 220 280, 200 300, 100 200) MULTIPOINT(220 240, 20 280) POLYGON( (160 180, 20 280, 60 320, 220 240, 160 180)) GEOMETRYCOLLECTION( POINT(113 213), POINT(133 233), POINT(137 197), POINT(153 253), POINT(157 217), POINT(177 237), LINESTRING(180 200, 160 180), LINESTRING(220 240, 200 220)) MULTILINESTRING( (113 213, 20 280), (133 233, 113 213), (113 213, 100 200), (137 197, 113 213), (153 253, 133 233), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (137 197, 157 217), (160 180, 140 160, 120 180, 137 197), (160 180, 137 197), (177 237, 220 280, 200 300, 153 253), (177 237, 153 253), (157 217, 177 237), (157 217, 180 200), (180 200, 160 180), (200 220, 177 237), (200 220, 180 200), (220 240, 200 220)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280)) MULTILINESTRING( (200 220, 177 237), (177 237, 153 253), (153 253, 60 320, 40 300, 133 233), (133 233, 157 217), (157 217, 180 200), (160 180, 137 197), (137 197, 113 213), (113 213, 20 280), (200 220, 180 200), (160 180, 140 160, 120 180, 137 197), (137 197, 157 217), (157 217, 177 237), (177 237, 220 280, 200 300, 153 253), (153 253, 133 233), (133 233, 113 213), (113 213, 100 200)) LL - A and B equal LINESTRING(80 320, 220 320, 220 160, 80 300) LINESTRING(80 320, 220 320, 220 160, 80 300) MULTIPOINT(80 320, 80 300) POLYGON( (220 160, 80 300, 80 320, 220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) MULTILINESTRING( (220 160, 80 300), (80 320, 220 320), (220 320, 220 160)) GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY LL - A and B touch ends LINESTRING(60 200, 60 260, 140 200) LINESTRING(60 200, 60 140, 140 200) MULTIPOINT(60 200, 140 200) POLYGON( (60 200, 60 260, 140 200, 60 200)) MULTIPOINT(60 200, 140 200) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LINESTRING(60 200, 60 260, 140 200) MULTILINESTRING( (60 200, 60 260, 140 200), (60 200, 60 140, 140 200)) LL - intersecting rings LINESTRING(180 200, 100 280, 20 200, 100 120, 180 200) LINESTRING(100 200, 220 200, 220 80, 100 80, 100 200) MULTIPOINT EMPTY POLYGON( (100 120, 20 200, 100 280, 180 200, 100 120)) MULTIPOINT(100 120, 180 200) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) MULTILINESTRING( (100 120, 180 200), (180 200, 100 280, 20 200, 100 120)) MULTILINESTRING( (100 120, 180 200), (100 120, 100 200), (180 200, 100 280, 20 200, 100 120), (180 200, 220 200, 220 80, 100 80, 100 120), (100 200, 180 200)) PA - point contained in simple polygon POINT(100 100) POLYGON( (50 50, 200 50, 200 200, 50 200, 50 50)) POINT(100 100) mPmA - points on I, B and E of touching triangles MULTIPOLYGON( ( (120 320, 180 200, 240 320, 120 320)), ( (180 200, 240 80, 300 200, 180 200))) MULTIPOINT(120 320, 180 260, 180 320, 180 200, 300 200, 200 220) MULTILINESTRING( (120 320, 180 200, 240 320, 120 320), (180 200, 240 80, 300 200, 180 200)) POLYGON( (240 80, 120 320, 240 320, 300 200, 240 80)) MULTIPOINT(120 320, 180 200, 180 260, 180 320, 300 200) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) MULTIPOLYGON( ( (180 200, 120 320, 240 320, 180 200)), ( (180 200, 300 200, 240 80, 180 200))) GEOMETRYCOLLECTION( POINT(200 220), POLYGON( (180 200, 120 320, 240 320, 180 200)), POLYGON( (180 200, 300 200, 240 80, 180 200))) mPmA - points on I, B and E of concentric doughnuts MULTIPOLYGON( ( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOINT(200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200) MULTILINESTRING( (120 80, 420 80, 420 340, 120 340, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300), (200 260, 200 160, 340 160, 340 260, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220)) POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80)) MULTIPOINT(200 160, 220 180, 260 200, 340 120, 400 100, 420 340) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) MULTIPOLYGON( ( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), ( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) GEOMETRYCOLLECTION( POINT(200 140), POINT(200 360), POLYGON( (120 80, 120 340, 420 340, 420 80, 120 80), (160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON( (200 260, 340 260, 340 160, 200 160, 200 260), (240 220, 240 200, 300 200, 300 220, 240 220))) mPL - points in I and E of line MULTIPOINT(40 90, 20 20, 70 70) LINESTRING(20 20, 100 100) MULTIPOINT(20 20, 70 70) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 100 100)) mPL - points in I and E of line, line self-intersecting MULTIPOINT(40 90, 20 20, 70 70) LINESTRING(20 20, 110 110, 170 50, 130 10, 70 70) MULTIPOINT(20 20, 70 70) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) POINT(40 90) GEOMETRYCOLLECTION( POINT(40 90), LINESTRING(20 20, 70 70), LINESTRING(70 70, 110 110, 170 50, 130 10, 70 70)) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT(100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) MULTIPOINT(100 220, 100 320) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT(100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) mPmL - points in I, B and E of lines, lines overlap, points overlap, x <0, y < 0 MULTILINESTRING( (-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340), (-500 -140, -320 -140, -500 -140, -320 -140, -500 -140)) MULTIPOINT(-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120) MULTIPOINT(-500 -340, -500 -140) POLYGON( (-500 -340, -500 -140, -320 -140, -320 -280, -500 -340)) MULTIPOINT(-500 -340, -500 -280, -500 -220, -500 -140, -420 -140, -320 -180, -320 -140) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) MULTILINESTRING( (-500 -140, -500 -280), (-500 -280, -320 -280, -320 -140), (-320 -140, -500 -140), (-500 -280, -500 -340)) GEOMETRYCOLLECTION( POINT(-560 -180), POINT(-420 -180), POINT(-320 -120), POINT(-280 -140), LINESTRING(-500 -140, -500 -280), LINESTRING(-500 -280, -320 -280, -320 -140), LINESTRING(-320 -140, -500 -140), LINESTRING(-500 -280, -500 -340)) mL - lines intersect at 1 point MULTILINESTRING( (180 100, 140 280, 240 140, 220 120, 140 280), (140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280)) MULTIPOINT(180 100, 140 280) mPmL - points in I, B and E of lines, lines overlap, points overlap MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320), (100 220, 100 320)) MULTIPOINT(100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320) MULTIPOINT(100 220, 100 320) POLYGON( (100 180, 100 320, 220 320, 220 180, 100 180)) MULTIPOINT(100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) MULTILINESTRING( (100 320, 100 220), (100 180, 200 180), (220 180, 220 320), (220 320, 160 320)) GEOMETRYCOLLECTION( POINT(100 200), POINT(120 320), POINT(140 320), LINESTRING(100 320, 100 220), LINESTRING(100 180, 200 180), LINESTRING(220 180, 220 320), LINESTRING(220 320, 160 320)) PP - point contained in both A and B POINT(100 100) POINT(100 100) POINT(100 100) PP - A different from B POINT(100 100) POINT(200 200) GEOMETRYCOLLECTION EMPTY MULTIPOINT(100 100, 200 200) POINT(100 100) MULTIPOINT(100 100, 200 200) PmP - point in A contained in B POINT(100 100) MULTIPOINT(100 100, 200 200) POINT(100 100) MULTIPOINT(100 100, 200 200) GEOMETRYCOLLECTION EMPTY POINT(200 200) mPmP - points in A only, B only, and in both MULTIPOINT(100 100, 200 200, 300 300, 500 500) MULTIPOINT(100 100, 200 200, 400 400, 600 600) MULTIPOINT(100 100, 200 200) MULTIPOINT(100 100, 200 200, 300 300, 400 400, 500 500, 600 600) MULTIPOINT(300 300, 500 500) MULTIPOINT(300 300, 400 400, 500 500, 600 600) PP - point contained in both A and B POINT(80 200) POINT(80 200) GEOMETRYCOLLECTION EMPTY POINT(80 200) POINT(80 200) POINT(80 200) GEOMETRYCOLLECTION EMPTY GEOMETRYCOLLECTION EMPTY PP - A different from B POINT(80 200) POINT(260 80) GEOMETRYCOLLECTION EMPTY POINT(80 200) GEOMETRYCOLLECTION EMPTY MULTIPOINT(80 200, 260 80) POINT(80 200) MULTIPOINT(80 200, 260 80) PP - A different from B, same y POINT(60 260) POINT(120 260) GEOMETRYCOLLECTION EMPTY POINT(60 260) GEOMETRYCOLLECTION EMPTY MULTIPOINT(60 260, 120 260) POINT(60 260) MULTIPOINT(60 260, 120 260) PP - A different from B, same x POINT(80 80) POINT(80 280) GEOMETRYCOLLECTION EMPTY POINT(80 80) GEOMETRYCOLLECTION EMPTY MULTIPOINT(80 80, 80 280) POINT(80 80) MULTIPOINT(80 80, 80 280) AA - sliver triangle, cut by polygon POLYGON( (10 10, 100 10, 10 11, 10 10)) POLYGON( (90 0, 200 0, 200 200, 90 200, 90 0)) true LINESTRING(90 10, 100 10) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) POLYGON( (90 10, 10 10, 10 11, 90 10)) MULTIPOLYGON( ( (90 10, 10 10, 10 11, 90 10)), ( (90 10, 90 200, 200 200, 200 0, 90 0, 90 10))) AA - polygon with outward sliver, cut by polygon POLYGON( (100 10, 10 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 10 10) AA - narrow wedge in polygon POLYGON( (10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10)) POLYGON( (60 40, 40 40, 40 20, 60 20, 60 40)) true POLYGON( (50 40, 50 20, 40 20, 40 30, 40 40, 50 40)) POLYGON( (50 20, 50 10, 10 10, 10 30, 40 30, 10 31, 10 50, 50 50, 50 40, 60 40, 60 20, 50 20)) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) MULTIPOLYGON( ( (50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)), ( (50 20, 50 40, 60 40, 60 20, 50 20)), ( (40 30, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30))) AA - hole close to shell POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (0 30, 0 0, 30 0, 30 30, 0 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (30 10, 30 0, 0 0, 0 30, 10 30, 30 30, 30 10))) mAA - shells close together MULTIPOLYGON( ( (0 0, 100 0, 100 20, 0 20, 0 0)), ( (0 40, 0 21, 100 20, 100 40, 0 40))) POLYGON( (110 30, 90 30, 90 10, 110 10, 110 30)) true GEOMETRYCOLLECTION( LINESTRING(100 20, 90 20), POLYGON( (100 20, 100 10, 90 10, 90 20, 90 30, 100 30, 100 20))) POLYGON( (100 10, 100 0, 0 0, 0 20, 90 20, 0 21, 0 40, 100 40, 100 30, 110 30, 110 10, 100 10)) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) MULTIPOLYGON( ( (100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)), ( (100 10, 100 20, 100 30, 110 30, 110 10, 100 10)), ( (90 20, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20))) AA - A sliver triangle cutting all the way across B POLYGON( (100 10, 0 10, 100 11, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) POLYGON( (100 10, 20 10, 100 11, 100 10)) MULTIPOLYGON( ( (100 10, 20 10, 100 11, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - A polygon with sliver cutting all the way across B POLYGON( (100 10, 0 10, 90 11, 90 20, 100 20, 100 10)) POLYGON( (20 20, 0 20, 0 0, 20 0, 20 20)) true LINESTRING(20 10, 0 10) MULTIPOLYGON( ( (100 10, 20 10, 90 11, 90 20, 100 20, 100 10)), ( (0 10, 0 20, 20 20, 20 10, 20 0, 0 0, 0 10))) AA - hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 0, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 0, 10 10))) AA - A hole close to shell, B coincident with A POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B hole close to shell, A coincident with B POLYGON( (10 30, 10 10, 30 10, 30 30, 10 30)) POLYGON( (10 100, 10 10, 100 10, 100 100, 10 100), (90 90, 11 90, 10 10, 90 11, 90 90)) true MULTILINESTRING( (10 30, 10 10), (10 10, 30 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) POLYGON( (10 10, 10 30, 30 30, 30 10, 10 10)) MULTIPOLYGON( ( (10 30, 10 100, 100 100, 100 10, 30 10, 90 11, 90 90, 11 90, 10 30)), ( (10 10, 10 30, 30 30, 30 10, 10 10))) AA - B sliver crossing A triangle in line segment with length < 1 POLYGON( (0 0, 200 0, 0 198, 0 0)) POLYGON( (280 60, 139 60, 280 70, 280 60)) true POINT(139 60) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) POLYGON( (139 60, 200 0, 0 0, 0 198, 139 60)) MULTIPOLYGON( ( (139 60, 200 0, 0 0, 0 198, 139 60)), ( (280 60, 139 60, 280 70, 280 60))) AA - sliver triangles, at angle to each other POLYGON( (0 0, 140 10, 0 20, 0 0)) POLYGON( (280 0, 139 10, 280 1, 280 0)) LINESTRING(140 10, 139 10) AA - sliver triangle with multiple intersecting boxes MULTIPOLYGON( ( (1 4, 1 1, 2 1, 2 4, 1 4)), ( (3 4, 3 1, 4 1, 4 4, 3 4)), ( (5 4, 5 1, 6 1, 6 4, 5 4)), ( (7 4, 7 1, 8 1, 8 4, 7 4)), ( (9 4, 9 1, 10 1, 10 4, 9 4))) POLYGON( (0 2, 11 3, 11 2, 0 2)) POLYGON( (1 1, 1 4, 10 4, 10 1, 1 1)) GEOMETRYCOLLECTION( LINESTRING(1 2, 2 2), LINESTRING(3 2, 4 2), POLYGON( (6 3, 6 2, 5 2, 6 3)), POLYGON( (7 2, 7 3, 8 3, 8 2, 7 2)), POLYGON( (9 2, 9 3, 10 3, 10 2, 9 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 7 3, 7 4, 8 4, 8 3, 9 3, 9 4, 10 4, 10 3, 11 3, 11 2, 10 2, 10 1, 9 1, 9 2, 8 2, 8 1, 7 1, 7 2, 6 2, 6 1, 5 1, 5 2))) MULTIPOLYGON( ( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), ( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), ( (5 2, 5 4, 6 4, 6 3, 5 2)), ( (6 2, 6 1, 5 1, 5 2, 6 2)), ( (7 3, 7 4, 8 4, 8 3, 7 3)), ( (8 2, 8 1, 7 1, 7 2, 8 2)), ( (9 3, 9 4, 10 4, 10 3, 9 3)), ( (10 2, 10 1, 9 1, 9 2, 10 2))) GEOMETRYCOLLECTION( LINESTRING(0 2, 1 2), LINESTRING(2 2, 3 2), LINESTRING(4 2, 5 2), POLYGON( (1 2, 1 4, 2 4, 2 2, 2 1, 1 1, 1 2)), POLYGON( (3 2, 3 4, 4 4, 4 2, 4 1, 3 1, 3 2)), POLYGON( (5 2, 5 4, 6 4, 6 3, 5 2)), POLYGON( (6 2, 6 1, 5 1, 5 2, 6 2)), POLYGON( (6 2, 6 3, 7 3, 7 2, 6 2)), POLYGON( (7 3, 7 4, 8 4, 8 3, 7 3)), POLYGON( (8 2, 8 1, 7 1, 7 2, 8 2)), POLYGON( (8 2, 8 3, 9 3, 9 2, 8 2)), POLYGON( (9 3, 9 4, 10 4, 10 3, 9 3)), POLYGON( (10 2, 10 1, 9 1, 9 2, 10 2)), POLYGON( (10 2, 10 3, 11 3, 11 2, 10 2))) AA - Polygon with hole with outward sliver, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) POLYGON( (200 160, 160 160, 160 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) GEOMETRYCOLLECTION( LINESTRING(180 120, 160 120), POLYGON( (180 160, 180 120, 180 80, 160 80, 160 120, 160 160, 180 160))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 160 80, 180 80, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)), ( (180 120, 180 160, 200 160, 200 80, 180 80, 180 120))) AA - Polygon with hole with outward sliver, cut by line POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40), (180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120)) LINESTRING(160 140, 160 100) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTILINESTRING( (160 140, 160 120), (160 120, 160 100)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) POLYGON( (20 40, 20 200, 180 200, 180 120, 180 40, 20 40), (160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 120)) AA - Polygon with inward sliver touching hole, cut by polygon POLYGON( (20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40), (140 160, 80 120, 140 80, 140 160)) POLYGON( (200 160, 150 160, 150 80, 200 80, 200 160)) POLYGON( (20 40, 20 200, 180 200, 180 40, 20 40)) MULTIPOLYGON( ( (180 160, 180 120, 150 120, 150 160, 180 160)), ( (150 120, 180 119, 180 80, 150 80, 150 120))) POLYGON( (20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) POLYGON( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)) MULTIPOLYGON( ( (20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 150 80, 180 80, 180 40, 20 40), (140 160, 80 120, 140 80, 140 120, 140 160)), ( (150 120, 180 120, 180 160, 200 160, 200 80, 180 80, 180 119, 150 120))) AA - intersecting slivers, dimensional collapse POLYGON( (83 33, 62 402, 68 402, 83 33)) POLYGON( (78 39, 574 76, 576 60, 78 39)) LINESTRING( 83 33, 62 402, 68 402, 83 33) POLYGON( (83 33, 62 402, 68 402, 83 33)) POINT(83 39) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) GEOMETRYCOLLECTION( LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39))) GEOMETRYCOLLECTION( LINESTRING(78 39, 83 39), LINESTRING(83 33, 83 39), POLYGON( (83 39, 62 402, 68 402, 83 39)), POLYGON( (83 39, 574 76, 576 60, 83 39))) LA - line and sliver intersecting, dimensional collapse POLYGON( (95 9, 81 414, 87 414, 95 9)) LINESTRING(93 13, 96 13) LINESTRING( 95 9, 81 414, 87 414, 95 9) POLYGON( (95 9, 81 414, 87 414, 95 9)) POINT(95 13) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13))) GEOMETRYCOLLECTION( LINESTRING(95 9, 95 13), POLYGON( (95 13, 81 414, 87 414, 95 13)), LINESTRING(93 13, 95 13), LINESTRING(95 13, 96 13)) LL - narrow V LINESTRING(0 10, 620 10, 0 11) LINESTRING(400 60, 400 10) POINT(400 10) MULTILINESTRING( (0 10, 400 10), (400 10, 620 10, 400 10), (400 10, 0 11), (400 60, 400 10)) A/A-1-1: same polygons [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) true A/A-1-2: same polygons with reverse sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.EP-SP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 20, 140 20, 120 100, 20 100, 20 20)) true A/A-1-3: same polygons with different sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (120 100, 140 20, 20 20, 20 100, 120 100)) true A/A-1-4: same polygons with different number of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}] POLYGON( (20 20, 20 100, 120 100, 140 20, 20 20)) POLYGON( (20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100)) true A/A-2: different polygons [dim(2){A.A.Int = B.A.Ext}] POLYGON( (0 0, 80 0, 80 80, 0 80, 0 0)) POLYGON( (100 200, 100 140, 180 140, 180 200, 100 200)) true A/A-3-1-1: the closing point of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 140 200, 240 200, 240 120, 140 120)) true A/A-3-1-2: the closing point of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (80 180, 140 260, 260 200, 200 60, 80 180)) true A/A-3-1-3: the closing point of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (240 80, 140 120, 180 240, 280 200, 240 80)) true A/A-3-1-4: the boundary (at a non-vertex) of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (140 40, 180 80, 120 100, 140 40)) true A/A-3-1-5: the boundary (at a non-vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160)) POLYGON( (120 100, 180 80, 130 40, 120 100)) true A/A-3-1-6: the boundary (at a vertex) of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 180 20, 140 140, 20 140, 20 20)) POLYGON( (180 100, 80 200, 180 280, 260 200, 180 100)) true A/A-3-1-7: the boundary (at a vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 140, 20 120, 0 220, 120 240, 140 140)) true A/A-3-1-8: the closing point of a polygon touching the boundary of another polygon where the closing point touching the boundary at a vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200)) true A/A-3-1-9: the closing point of a polygon touching the boundary of another polygon where the closing point intersecting the boundary at a non-vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}] POLYGON( (110 140, 200 70, 200 160, 110 140)) POLYGON( (110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140)) true A/A-3-2-1: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120)) POLYGON( (20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120)) true A/A-3-2-2: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120)) POLYGON( (20 120, 300 120, 140 240, 20 120)) true A/A-3-2-3: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140)) true A/A-3-2-4: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20)) POLYGON( (260 200, 180 80, 120 160, 200 160, 180 220, 260 200)) true A/A-3-2-5: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (0 140, 300 140, 140 240, 0 140)) true A/A-3-2-6: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 320 140, 180 240, 20 240)) true A/A-3-2-7: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20)) POLYGON( (20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240)) true A/A-3-3-1: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (120 120, 220 20, 280 20, 240 160, 120 120)) true A/A-3-3-2: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 160 20, 260 120, 220 200, 140 120)) true A/A-3-3-3: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (20 140, 120 40, 20 40, 20 140)) POLYGON( (190 140, 190 20, 140 20, 20 140, 190 140)) true A/A-3-3-4: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (300 20, 220 20, 120 120, 260 160, 300 20)) true A/A-3-3-5: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 240 160, 280 60, 160 20, 140 120)) true A/A-3-3-6: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (280 60, 180 60, 120 120, 260 180, 280 60)) true A/A-3-3-7: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (120 200, 120 120, 40 120, 40 200, 120 200)) true A/A-3-3-8: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-V}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (160 220, 140 120, 60 120, 40 220, 160 220)) true A/A-3-3-9: two polygons touching along a boundary [dim(1){A.A.Bdy.V-EP = B.A.Bdy.V-SP}] POLYGON( (140 120, 160 20, 20 20, 20 120, 140 120)) POLYGON( (140 120, 20 120, 20 220, 140 220, 140 120)) true A/A-3-3-10: two polygons touching along a boundary [dim(1){A.A.Bdy.V-V = B.A.Bdy.NV-NV}] POLYGON( (120 120, 180 60, 20 20, 20 120, 120 120)) POLYGON( (320 20, 220 20, 80 160, 240 140, 320 20)) true A/A-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Int}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 40, 60 140, 180 140, 180 40, 60 40)) true A/A-5-2-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 80 140, 160 60, 20 20)) true A/A-5-2-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 60, 20 20, 100 140, 160 60)) true A/A-5-2-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 100, 140 160, 160 40, 20 100)) true A/A-5-2-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (160 40, 20 100, 160 160, 160 40)) true A/A-5-2-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 180 120, 80 40, 20 180)) true A/A-5-2-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (180 120, 100 40, 20 180, 180 120)) true A/A-5-3-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 120, 20 160, 80 80, 20 20)) true A/A-5-3-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 40, 140 140, 20 180, 80 100, 20 20)) true A/A-5-3-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 180, 60 100, 180 100, 200 180, 120 120, 40 180)) true A/A-5-3-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 180, 60 80, 180 80, 220 180, 120 120, 20 180)) true A/A-5-3-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60)) true A/A-5-3-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (60 100, 180 100, 220 180, 120 140, 20 180, 60 100)) true A/A-5-4-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.SP-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 140, 120 120, 120 40, 20 20)) true A/A-5-4-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 140 140, 140 60, 20 20)) true A/A-5-4-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 120 40, 120 120, 20 140, 20 20)) true A/A-5-4-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (120 40, 20 20, 20 140, 120 120, 120 40)) true A/A-5-4-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 140 60, 140 140, 20 180, 20 20)) true A/A-5-4-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (140 60, 20 20, 20 180, 140 140, 140 60)) true A/A-5-4-7: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 60 120, 140 120, 180 20, 20 20)) true A/A-5-4-8: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-EP}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 40, 120 40, 120 120, 20 140, 20 40)) true A/A-5-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}, dim(1){A.A.Bdy.(NV, V) = B.A.Bdy.(V, V)}] POLYGON( (20 20, 20 180, 220 180, 220 20, 20 20)) POLYGON( (20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20)) true A/A-6-1: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 330 150, 250 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 140 20, 20 20, 150 150)) true A/A-6-2: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}] POLYGON( (150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150)) POLYGON( (150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150)) true A/A-6-3: spiky polygons overlapping; boundary <-> boundary intersecting at 0 dimension [dim(2){A.A.Int = B.A.Int}] POLYGON( (20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-4: spiky polygons overlapping; boundary <-> boundary intersecting at 1 dimension at a few locations [dim(2){A.A.Int = B.A.Int}] POLYGON( (70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150)) POLYGON( (190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140)) true A/A-6-5: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 220 160, 140 80, 60 160)) true A/A-6-6: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (60 160, 20 200, 260 200, 140 80, 60 160)) true A/A-6-7: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 140 80, 260 200, 20 200)) true A/A-6-8: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 220 160, 260 200, 20 200)) true A/A-6-9: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}] POLYGON( (60 160, 220 160, 220 20, 60 20, 60 160)) POLYGON( (20 200, 60 160, 140 80, 260 200, 20 200)) true A/A-6-10: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 200 200, 200 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-11: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 0, 100 200, 200 200, 200 0, 100 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-12: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 0, 120 200, 200 200, 200 0, 120 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-13: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (0 0, 0 200, 110 200, 110 0, 0 0)) POLYGON( (100 100, 1000000 110, 10000000 100, 100 100)) true A/A-6-14: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2100 110, 2100 100, 100 100)) true A/A-6-15: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-16: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 200, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-17: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-18: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 100 200, 200 200, 200 100, 100 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true A/A-6-19: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 500 110, 500 100, 100 100)) true A/A-6-20: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-21: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 130 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-22: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 17 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 501 110, 501 100, 100 100)) true A/A-6-23: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-24: a polygon overlapping a very skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (120 100, 120 200, 200 200, 200 100, 120 100)) POLYGON( (100 100, 1000000000000000 110, 1000000000000000 100, 100 100)) true A/A-6-25: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (101 99, 101 1000000, 102 1000000, 101 99)) POLYGON( (100 100, 1000000 110, 1000000 100, 100 100)) true A/A-6-26: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (100 100, 200 101, 200 100, 100 100)) POLYGON( (100 100, 2101 110, 2101 100, 100 100)) true A/A-6-26: two polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}] POLYGON( (16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319)) POLYGON( (10 307, 22 307, 153 34, 22 34, 10 307)) true A/Ah-3-1: the closing point of a polygon touching the closing points of another polygon and its hole [dim(0){A.A.Bdy.CP = B.A.oBdy.CP}, dim(0){A.A.Bdy.CP = B.A.iBdy.CP}] POLYGON( (160 200, 210 70, 120 70, 160 200)) POLYGON( (160 200, 310 20, 20 20, 160 200), (160 200, 260 40, 70 40, 160 200)) true A/Ah-3-2: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (170 120, 240 100, 260 50, 190 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-3: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}] POLYGON( (270 90, 200 50, 150 80, 210 120, 270 90)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-4: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}] POLYGON( (170 120, 260 100, 240 60, 150 80, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-5: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.NV}] POLYGON( (220 120, 270 80, 200 60, 160 100, 220 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-6: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.V}] POLYGON( (260 50, 180 70, 180 110, 260 90, 260 50)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-7: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}] POLYGON( (230 110, 290 80, 190 60, 140 90, 230 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-8: the boundary of a polygon touching the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (170 120, 330 120, 260 50, 100 50, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-9: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 330 120, 280 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-10: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}] POLYGON( (170 120, 300 120, 250 70, 120 70, 170 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-3-11: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.V-V-V = B.A.iBdy.NV-V-NV}] POLYGON( (190 100, 310 100, 260 50, 140 50, 190 100)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true A/Ah-5-1: an entire polygon within another polygon which has a hole [dim(2){A.A.Ext = B.A.Int}, dim(2){A.A.Int = B.A.Int}] POLYGON( (280 130, 360 130, 270 40, 190 40, 280 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-2: an entire polygon within another polygon which has a hole [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}] POLYGON( (220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-3: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.iBdy.V-V}] POLYGON( (260 130, 360 130, 280 40, 170 40, 260 130)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-4: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.NV-NV}] POLYGON( (240 110, 340 110, 290 60, 190 60, 240 110)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true A/Ah-5-5: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.V-V}] POLYGON( (250 120, 350 120, 280 50, 180 50, 250 120)) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 250 120, 180 50, 100 50, 170 120)) true Ah/Ah-1-1: same polygons (with a hole) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (120 180, 50 50, 200 50, 120 180)) true A2h/A2h-1-1: same polygons (with two holes) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}] POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) POLYGON( (230 210, 230 20, 20 20, 20 210, 230 210), (140 40, 40 40, 40 170, 140 40), (110 190, 210 190, 210 50, 110 190)) true A/mA-3-1: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.CP = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (280 190, 330 150, 200 110, 150 150, 280 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-2: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A1.oBdy.CP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (80 190, 220 190, 140 110, 0 110, 80 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-3: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}] POLYGON( (330 150, 200 110, 150 150, 280 190, 330 150)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-4: a polygon touching multipolygon at one spoint [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}] POLYGON( (290 190, 340 150, 220 120, 170 170, 290 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-5: a polygon touching multipolygon along boundaries [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.SP-V = B.2A2.oBdy.V-V}, dim(1){A.A.oBdy.V-V = B.2A1.oBdy.V-SP}] POLYGON( (220 190, 340 190, 260 110, 140 110, 220 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-3-6: a polygon touching multipolygon along boundaries and at a point [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.V-NV = B.2A1.oBdy.NV-SP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}] POLYGON( (140 190, 220 190, 100 70, 20 70, 140 190)) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true A/mA-6-1: a polygon overlapping multipolygon [dim(2){A.A.Int = B.4A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}] POLYGON( (140 220, 60 140, 140 60, 220 140, 140 220)) MULTIPOLYGON( ( (100 20, 180 20, 180 100, 100 100, 100 20)), ( (20 100, 100 100, 100 180, 20 180, 20 100)), ( (100 180, 180 180, 180 260, 100 260, 100 180)), ( (180 100, 260 100, 260 180, 180 180, 180 100))) true mA/mA-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110)), ( (110 110, 150 20, 70 20, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110))) true mAh/mAh-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}] MULTIPOLYGON( ( (110 110, 70 200, 150 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 150 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-2: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-3-3: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}] MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 20 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-1: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 160 160, 210 110, 160 60, 110 110), (110 110, 160 130, 160 90, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true mAh/mAh-6-2: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}] MULTIPOLYGON( ( (110 110, 70 200, 200 200, 110 110), (110 110, 100 180, 120 180, 110 110)), ( (110 110, 200 20, 70 20, 110 110), (110 110, 120 40, 100 40, 110 110))) MULTIPOLYGON( ( (110 110, 70 200, 210 110, 70 20, 110 110), (110 110, 110 140, 150 110, 110 80, 110 110)), ( (110 110, 60 60, 10 110, 60 160, 110 110), (110 110, 60 90, 60 130, 110 110))) true AC A-shells overlapping B-shell at A-vertex POLYGON( (100 60, 140 100, 100 140, 60 100, 100 60)) MULTIPOLYGON( ( (80 40, 120 40, 120 80, 80 80, 80 40)), ( (120 80, 160 80, 160 120, 120 120, 120 80)), ( (80 120, 120 120, 120 160, 80 160, 80 120)), ( (40 80, 80 80, 80 120, 40 120, 40 80))) true L/A-3-1: a line touching the closing point of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.CP}] LINESTRING(150 150, 40 230) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-2: the start and end points of a LineString touching the boundary (at non-vertices) of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(40 40, 50 130, 130 130) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-3: the end point of a line touching the closing point of a polygon [dim(0){A.L.Bdy.EP = B.oBdy.CP}] LINESTRING(40 230, 150 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-4: an entire LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-EP = B.oBdy.NV-NV}] LINESTRING(210 150, 330 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-5: the start portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}] LINESTRING(200 150, 310 150, 360 220) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-6: the start portion and the end point of a LineString touching the boundary of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}, dim(0){A.L.Bdy.EP = B.A.oBdy.V}] LINESTRING(180 150, 250 150, 230 250, 370 250, 410 150) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-3-7: the middle portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.V-V = B.oBdy.NV-NV}] LINESTRING(210 210, 220 150, 320 150, 370 210) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-1: a line at non-vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(20 60, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-2: a line at non-vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-NV = B.A.Int}] LINESTRING(60 90, 310 180) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-3: a line at non-vertex crossing vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-EP = B.A.Int}] LINESTRING(90 210, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-4: a line at non-vertex crossing vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.oBdy.CP}] LINESTRING(290 10, 130 170) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-5: a line at vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(30 100, 100 100, 180 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-6: a line at vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-V = B.A.Int}] LINESTRING(20 100, 100 100, 360 100, 410 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-4-7: a line at vertex crossing vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.V}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(90 210, 150 150, 210 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-1: an entire line within a polygon [dim(1){A.L.Int.SP-EP = B.A.Int}] LINESTRING(180 90, 280 120) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-2: a line within a polygon but the line's both ends touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}] LINESTRING(70 70, 80 20) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-3: a line within a polygon but the line's start point touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}] LINESTRING(130 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-4: a line within a polygon but the line's start point and middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.A.oBdy.NV}] LINESTRING(70 70, 80 20, 140 20, 150 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/A-5-5: a line within a polygon but the line's middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.A.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}] LINESTRING(170 50, 170 20, 240 20, 260 60) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150)) true L/Ah-2-1: a line outside a polygon [dim(1){A.L.Int.SP-EP = B.A.Ext}] LINESTRING(50 100, 140 190, 280 190) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-2-2: a line inside a polygon's hole [dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(140 60, 180 100, 290 100) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: the start point of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}] LINESTRING(170 120, 210 80, 270 80) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-2: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}, dim(0){A.L.Bdy.SP = B.A.iBdy.CP}] LINESTRING(170 120, 260 50) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true L/Ah-3-1: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(190 90, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-2: a line at a non-vertex crossing the boundary of a polygon where the closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-3: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-4: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}] LINESTRING(60 160, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-5: a line crossing polygon boundary where the closing point of the hole touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(190 90, 190 190, 190 270) POLYGON( (190 190, 360 20, 20 20, 190 190), (190 190, 280 50, 100 50, 190 190)) true L/Ah-3-6: a line at a vertex crossing the boundary of a polygon where closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (110 110, 250 100, 140 30, 110 110)) true L/Ah-3-7: a line at a vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/Ah-3-8: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}] LINESTRING(60 160, 110 110, 150 70) POLYGON( (190 190, 110 110, 20 20, 360 20, 190 190), (250 100, 110 110, 140 30, 250 100)) true L/A2h-3-1: the start point a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.SP = B.A.iBdy.TP}] LINESTRING(130 110, 180 110, 190 60) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-2: the interior (at a non-vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-3: the interior (at a non-vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy1.TP}] LINESTRING(80 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-4: the interior (at a non-vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}] LINESTRING(80 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-5: the start point a line touching the closing point and a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/A2h-3-6: the interior (at a vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 240 200, 240 20, 20 20, 20 200), (130 110, 60 180, 60 40, 130 110), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-7: the interior (at a vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy1.TP}] LINESTRING(80 110, 130 110, 180 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (60 180, 130 110, 60 40, 60 180), (130 110, 200 40, 200 180, 130 110)) true L/A2h-3-8: the interior (at a vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}] LINESTRING(80 110, 130 110, 170 110) POLYGON( (20 200, 20 20, 240 20, 240 200, 20 200), (130 110, 60 40, 60 180, 130 110), (130 180, 130 40, 200 110, 130 180)) true L/mA-4-1: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-NV = B.2A1.Int}, dim (1){A.L.Int.NV-EP = B.2A2.Int}] LINESTRING(160 70, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-4-2: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-V = B.2A1.Int}, dim (1){A.L.Int.V-EP = B.2A2.Int}] LINESTRING(160 70, 200 110, 280 190, 320 230) MULTIPOLYGON( ( (140 110, 260 110, 170 20, 50 20, 140 110)), ( (300 270, 420 270, 340 190, 220 190, 300 270))) true L/mA-5-1: a line within two connected polygons [dim(1){A.L.Int = B.2A.Int}, dim(0){A.L.Int.NV = B.2A.Bdy.TP] LINESTRING(70 50, 70 150) MULTIPOLYGON( ( (0 0, 0 100, 140 100, 140 0, 0 0)), ( (20 170, 70 100, 130 170, 20 170))) true RL/A-3-1: a LinearRing touching a polygon's closing point [dim(0){A.RL.Int.CP = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 200 200, 110 110) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-2: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.Bdy.NV}] LINESTRING(150 70, 160 110, 200 60, 150 70) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-3: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.iBdy.NV}] LINESTRING(80 60, 120 40, 120 70, 80 60) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-4: a LinearRing on the boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.Bdy.SP-EP}] LINESTRING(20 20, 200 20, 110 110, 20 20) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-3-5: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.iBdy.SP-EP}] LINESTRING(110 90, 170 30, 50 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-6: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.oBdy.SP-NV}] LINESTRING(110 110, 170 50, 170 110, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-3-7: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.iBdy.SP-NV}] LINESTRING(110 90, 70 50, 130 50, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-4-1: a LinearRing crossing a polygon [dim(1){A.RL.Int.CP-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.Bdy.NV}] LINESTRING(110 60, 20 150, 200 150, 110 60) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-4-2: a LinearRing crossing a polygon with a hole [dim(1){A.RL.Int.NV-NV = B.A.Int}, dim(0){A.RL.Int.NV = B.A.oBdy.CP}, dim(0){A.RL.Int.NV = B.A.iBdy.CP}, dim(0){A.RL.Int.NV = B.A.oBdy.NV}, dim(0){A.RL.Int.NV = B.A.iBdy.NV}] LINESTRING(110 130, 110 70, 200 100, 110 130) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 50 30, 170 30, 110 90)) true RL/A-5-1: a LinearRing within a polygon [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 90, 160 40, 60 40, 110 90) POLYGON( (20 20, 200 20, 110 110, 20 20)) true RL/A-5-2: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}] LINESTRING(110 100, 40 30, 180 30, 110 100) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-3: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.L.Int.CP = B.A.oBdy.CP}] LINESTRING(110 110, 180 30, 40 30, 110 110) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-4: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.RL.Int.CP = B.A.iBdy.CP}] LINESTRING(110 90, 180 30, 40 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true RL/A-5-5: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(1){A.RL.Int.SP-NV = B.A.Bdy.iBdy.SP-V}] LINESTRING(110 90, 50 30, 180 30, 110 90) POLYGON( (110 110, 200 20, 20 20, 110 110), (110 90, 60 40, 160 40, 110 90)) true nsL/A-3-1: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SP = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 200 110, 110 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-2: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPb = B.A.Bdy.CP}] LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-3: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPo = B.A.Bdy.CP}] LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-4: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPx = B.A.Bdy.CP}] LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-3-5: a non-simple LineString touching a polygon [dim(1){A.nsL.Int.SPb-Vo = B.A.Bdy.SP-NV}] LINESTRING(110 110, 170 50, 20 200, 20 110, 200 110) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-4-1: a non-simple LineString crossing a polygon [dim(1){A.nsL.Int.V-V-NV = B.A.Int}, dim(1){A.nsL.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 180) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-1: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}] LINESTRING(110 60, 50 30, 170 30, 90 70) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/A-5-2: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}, dim(1){A.nsL.Int.SPx-V = B.A.Bdy.SP-NV}] LINESTRING(110 110, 180 40, 110 40, 110 110, 70 40) POLYGON( (110 110, 200 20, 20 20, 110 110)) true nsL/Ah: the self-crossing point of a non-simple LineString touching the closing point of the inner boundary of a polygon [dim(0){A.nsL.Int.V = B.A.iBdy.CP}] LINESTRING(230 70, 170 120, 190 60, 140 60, 170 120, 270 90) POLYGON( (150 150, 410 150, 280 20, 20 20, 150 150), (170 120, 330 120, 260 50, 100 50, 170 120)) true mL/A-3-1: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 210, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-2: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (60 180, 60 110, 160 110, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-3-3: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (200 200, 110 110, 20 200, 110 200, 110 110)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-1: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVb = B.A.Int}, dim(0){A.mL.Int.NVb = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 50, 110 170, 110 70, 110 150, 200 150)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-2: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVo = B.A.Int}, dim(0){A.mL.Int.NVo = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (50 110, 170 110, 110 170, 110 50, 110 170, 110 50)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-3: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVx = B.A.Int}, dim(0){A.mL.Int.NVx = B.A.Bdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-4-4: MultiLineString crossing a polygon [dim(1){A.mL.Int.Vb-Vb = B.A.Int}, dim(0){A.mL.Int.Vb = B.A.oBdy.CP}, dim(0){A.mL.Int.Vb = B.A.iBdy.CP}] MULTILINESTRING( (20 110, 200 110), (110 60, 110 160, 200 160)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-1: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 100, 40 30, 180 30), (170 30, 110 90, 50 30)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/A-5-2: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}] MULTILINESTRING( (110 110, 60 40, 70 20, 150 20, 170 40), (180 30, 40 30, 110 80)) POLYGON( (110 110, 200 20, 20 20, 110 110)) true mL/mA-3-1: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPb = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110, 200 160), (110 110, 200 110, 200 70, 20 150)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-2: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPo = B.mA.Bdy.TP}] MULTILINESTRING( (20 160, 70 110, 150 110, 200 160), (110 110, 20 110, 50 80, 70 110, 200 110)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true mL/mA-3-3: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPx = B.mA.Bdy.TP}] MULTILINESTRING( (20 110, 200 110), (110 110, 20 170, 20 130, 200 90)) MULTIPOLYGON( ( (110 110, 20 20, 200 20, 110 110)), ( (110 110, 20 200, 200 200, 110 110))) true LC - topographically equal with no boundary LINESTRING(0 0, 0 50, 50 50, 50 0, 0 0) MULTILINESTRING( (0 0, 0 50), (0 50, 50 50), (50 50, 50 0), (50 0, 0 0)) true LC - intersection (containment) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (20 180, 20 80, 180 80, 180 180, 20 180))) true LC - intersection (overlap) along mod-2 A-Int line segment LINESTRING(40 180, 140 180) MULTIPOLYGON( ( (20 320, 180 320, 180 180, 20 180, 20 320)), ( (60 180, 60 80, 180 80, 180 180, 60 180))) true LC - equal with boundary intersection LINESTRING(0 0, 60 0, 60 60, 60 0, 120 0) MULTILINESTRING( (0 0, 60 0), (60 0, 120 0), (60 0, 60 60)) true L/L.1-3-1: touching at the start points of two lines [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 120 120) LINESTRING(40 40, 60 120) true L/L.1-3-2: start point of one line touching end point of another line [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 40 40) true L/L.1-3-3: start point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.SP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(120 120, 20 200) true L/L.1-3-4: touching at the end points of two lines [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(40 40, 120 120) LINESTRING(60 240, 120 120) true L/L.1-3-5: end point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(40 40, 180 180) LINESTRING(20 180, 140 140) true L/L.1-4-1: two lines crossing at non-vertex [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 40) true L/L.1-1-1: equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100) LINESTRING(40 40, 100 100) true L/L.1-1-2: equal lines but points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100) LINESTRING(100 100, 40 40) true L/L.1-2-1: dim(1){A.L.Int.SP-EP = B.L.Ext} LINESTRING(40 40, 120 120) LINESTRING(40 120, 120 160) true L/L.1-5-1: line A containing line B [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 180 180) true L/L.1-5-2: line B is part of line A [dim(1){A.L.Int.SP-NV) = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(20 20, 110 110) true L/L.1-5-3: Line B is part of line A (in the middle portion) [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(20 20, 180 180) LINESTRING(50 50, 140 140) true L/L.1-6-1: start portions of two lines overlapping [dim(1){A.L.Int.SP-NV = B.L.Int.SP-NV] LINESTRING(180 180, 40 40) LINESTRING(120 120, 260 260) true L/L.1-6-2: end portions of two lines overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.NV-EP] LINESTRING(40 40, 180 180) LINESTRING(260 260, 120 120) true L/L.1-6-3: end portion of line A overlapping the start portion of line B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-NV] LINESTRING(40 40, 180 180) LINESTRING(120 120, 260 260) true L/L.2-3-1: two LineStrings touching at start points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 20 100, 40 160, 20 200) true L/L.2-3-2: start point of LineStrings A touching the end point of LineString B [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-3: two LineStrings touching at end points [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(80 240, 200 120, 100 100, 40 40) LINESTRING(20 200, 40 160, 20 100, 40 40) true L/L.2-3-4: both the start and end points of LineString A touching the interior of LineString B at two vertices [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 60 60, 250 160, 310 230) true L/L.2-3-5: both the start and end points of LineString A touching the interior of LineString B at two non-vertices [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.NV}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(20 20, 110 110, 200 110, 320 230) true L/L.2-3-6: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Bdy.EP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-7: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}, dim(0){A.L.Bdy.EP = B.L.Bdy.SP}] LINESTRING(60 110, 60 250, 360 210) LINESTRING(360 210, 310 160, 110 160, 60 110) true L/L.2-3-8: start point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(160 160, 240 240) true L/L.2-3-9: end point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 240, 160 160) true L/L.2-3-10: both the start and end points of LineString B touching the interior of LineString A at two non-vertices [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 150, 110 100, 170 100, 110 230) true L/L.2-3-11: the start point of LineString B touching the interior of LineString A at a non-vertex and the end point of LineString A touching the interior of LineString B at a vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Int.V}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-3-12: start point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 200 190, 150 240, 200 240) true L/L.2-3-13: end point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 240, 150 240, 200 200, 200 120) true L/L.2-3-14: both the start and end points of LineString B touching the interior of LineString A at two vertices [dim(0){A.L.Int.V = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(60 60, 60 230, 140 230, 250 160) LINESTRING(60 230, 80 140, 120 140, 140 230) true L/L.2-4-1: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 200 110, 250 160, 300 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-2: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 200 110, 250 160, 300 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-3: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(60 110, 220 110, 250 160, 280 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-4: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.EP}] LINESTRING(60 110, 150 110, 200 160, 250 110, 360 110, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-5: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(130 160, 160 110, 220 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-6: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(130 160, 160 110, 190 110, 230 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-7: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.SP = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-8: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-9: two LineStrings crossing at three points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Bdy.EP}] LINESTRING(130 160, 160 110, 200 110, 230 160, 260 210, 380 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-10: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 160 110, 200 110, 250 160, 250 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-11: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 160, 180 110, 250 160, 320 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-12: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(140 160, 180 80, 220 160, 250 80) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-13: two LineStrings crossing at a vertex for one of the LineStrings [dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(20 130, 70 130, 160 40) true L/L.2-4-14: two LineStrings crossing at non-vertices for both of the LineStrings [dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(40 160, 40 100, 110 40, 170 40) true L/L.2-4-15: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}] LINESTRING(130 110, 180 160, 230 110, 280 160, 330 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-16: two LineStrings crossing at vertices for both LineString [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(40 40, 100 100, 200 120, 130 190) LINESTRING(30 140, 80 140, 100 100, 200 30) true L/L.2-4-17: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(110 110, 110 160, 180 110, 250 160, 250 110) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-4-18: multiple crossings [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.NV = B.L.Int.NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110) true L/L.2-4-19: spiky LineStrings with multiple crossing [dim(0){A.L.Int.V = B.L.Int.V}] LINESTRING(20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200) LINESTRING(30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20) true L/L.2-1-1: two equal LineStrings with equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(40 40, 100 100, 200 120, 80 240) true L/L.2-1-2: two equal LineStrings with points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 200 120, 100 100, 40 40) true L/L.2-1-3: two equal LineStrings with different number of points [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 240, 120 200, 200 120, 100 100, 80 80, 40 40) true L/L.2-2-1: disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(260 210, 240 130, 280 120, 260 40) true L/L.2-2-2: wrapping around but still disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}] LINESTRING(100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150) LINESTRING(140 130, 100 110, 120 60, 170 60) true L/L.2-5-1: LineString A containing LineString B, same pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-2: LineString A containing LineString B, LineString A with less points [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) true L/L.2-5-3: LineString A containing LineString B [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(60 110, 110 160, 250 160) true L/L.2-5-4: LineString A containing LineString B [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 310 160, 340 190) true L/L.2-5-5: LineString A containing LineString B [dim(1){A.L.Int.V-NV = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(140 160, 250 160, 310 160, 340 190) true L/L.2-5-6: LineString A containing LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-EP}] LINESTRING(60 110, 110 160, 250 160, 310 160, 360 210) LINESTRING(110 160, 250 160, 310 160) true L/L.2-6-1: start portions of two LineStrings overlapping [dim(1){A.L.Int.SP-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(200 120, 100 100, 40 40, 140 80, 200 40) true L/L.2-6-2: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100, 40 40) true L/L.2-6-3: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.NV-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(80 190, 140 140, 40 40) true L/L.2-6-4: end portions of two LineStrings overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(240 200, 200 260, 80 240, 140 180) true L/L.2-6-5: end portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(140 180, 80 240, 200 260, 240 200) true L/L.2-6-6: end portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.V-EP = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 80 240) true L/L.2-6-7: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-NV = B.L.Int.NV-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 120 80, 200 80, 260 20) true L/L.2-6-8: middle portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-V}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(100 100, 200 120, 240 140, 280 240) true L/L.2-6-9: middle portion of LineString A overlapping end portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.V-EP}] LINESTRING(40 40, 100 100, 200 120, 80 240) LINESTRING(280 240, 240 140, 200 120, 100 100) true L/L.2-6-10: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-V = B.L.Int.V-V}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(80 20, 80 80, 240 80, 300 20) true L/L.2-6-11: middle portions of two LineStrings overlapping, multiple intersects [dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}] LINESTRING(20 20, 80 80, 160 80, 240 80, 300 140) LINESTRING(20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80) true L/LR-3-1: a LineString touching a LinearRing [dim(0){A.L.Bdy.SP = B.LR.Int.CP}] LINESTRING(100 100, 20 180, 180 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-1: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(20 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-2: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}] LINESTRING(100 40, 100 160, 180 160) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-4-3: a LineString crossing a LinearRing [dim(0){A.L.Int.V = B.LR.Int.CP}] LINESTRING(20 100, 100 100, 180 100, 100 180) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-1: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-2: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}] LINESTRING(100 100, 180 20) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-5-3: a LineString within a LinearRing [dim(1){A.L.Int.SP-V-EP = B.LR.Int.NV-CP-NV}] LINESTRING(60 60, 100 100, 140 60) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-1: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-NV = B.LR.Int.SP-V}] LINESTRING(100 100, 190 10, 190 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-2: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-V = B.LR.Int.SP-NV}] LINESTRING(100 100, 160 40, 160 100) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/LR-6-3: a LineString crossing a LinearRing [dim(1){A.L.Int.NV-V = B.LR.Int.SP-NV}] LINESTRING(60 140, 160 40, 160 140) LINESTRING(100 100, 180 20, 20 20, 100 100) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 140 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPb}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPo}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 140 80, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPx}] LINESTRING(20 20, 140 140) LINESTRING(80 80, 20 80, 20 140, 140 20, 80 20, 80 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(20 20, 140 140) LINESTRING(20 140, 140 20, 100 20, 100 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 20) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex [dim(0){A.L.Int.NV = B.nsL.Int.V}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 80 80, 20 80, 50 140, 50 60) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vb}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 120 80, 80 20, 80 80, 80 140) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vo}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 80, 140 80) true L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vx}] LINESTRING(20 20, 140 140) LINESTRING(140 80, 20 80, 80 140, 80 80, 80 20) true L/nsL.1-3-1: start point of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(130 150, 220 150, 220 240) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-2: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-3: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(30 150, 250 150) LINESTRING(130 240, 130 150, 220 20, 50 20, 130 150) true L/nsL.1-3-4: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}] LINESTRING(30 150, 130 150, 250 150) LINESTRING(130 240, 130 20, 30 20, 130 150) true L/nsL.1-4: a Line crossing a non-simple LineString at non-vertices [dim(0){A.L.Int.NV = B.nsL.Int.NV}] LINESTRING(30 150, 250 150) LINESTRING(120 240, 120 20, 20 20, 120 170) true nsL.5/L-3-1: switching the geometries for case L/nsL.5-3-1 [dim(0){A.nsL.Bdy.EPx = B.L.Bdy.SP}] LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(110 110, 200 110) true L/nsL.5-3-2: the start point of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}] LINESTRING(110 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true L/nsL.5-3-3: the interior of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}] LINESTRING(20 110, 200 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true nsL.5/L-3-4 touches dim(0){A.nsL.Bdy.EPx = B.L.Int.NV} LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) LINESTRING(20 110, 200 110) true L/nsL.10-6-1: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.EPx-NVx}] LINESTRING(90 200, 90 130, 110 110, 150 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/nsL.10-6-2: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.NVx-EPx}] LINESTRING(200 110, 110 110, 90 130, 90 200) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true L/mL-3-1: a line's end point touching a non-vertex with crossing line segments of a MultiLineString [dim(0){A.L.Bdy.SP = B.mL.Int.NVx] LINESTRING(80 80, 150 80, 210 80) MULTILINESTRING( (20 20, 140 140), (20 140, 140 20)) true LR/LR-1-1: two equal LinearRings, pointwise [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 160 200, 260 20, 40 80) true LR/LR-1-2: two equal LinearRings with points in reverse sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.EP-SP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(40 80, 260 20, 160 200, 40 80) true LR/LR-1-3: two equal LinearRings with points in different sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.V = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(260 20, 40 80, 160 200, 260 20) true LR/LR-1-4: two equal LinearRings with different number of points [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.NV = B.LR.Int.CP}] LINESTRING(40 80, 160 200, 260 20, 40 80) LINESTRING(100 140, 160 200, 260 20, 40 80, 100 140) true LR/LR-4-1: two LinearRings crossing at closing points [dim(0){A.LR.Int.CP = B.LR.Int.CP}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(100 100, 180 180, 20 180, 100 100) true LR/LR-4-2: two LinearRings crossing at two points [dim(0){A.LR.Int.CP = B.LR.Int.CP}, dim(0){A.LR.Int.V = B.LR.Int.V},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 40, 170 20, 170 190, 40 150) true LR/LR-4-3: two LinearRings crossing at the closing and a non-vertex [dim(0){A.LR.Int.CP = B.LR.Int.NV}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 100, 20 100, 100 180, 180 100) true LR/LR-4-4: two LinearRings crossing at the closing and a vertex [dim(0){A.LR.Int.CP = B.LR.Int.V}] LINESTRING(100 100, 180 20, 20 20, 100 100) LINESTRING(180 180, 100 100, 20 180, 180 180) true LR/LR-4-5: two LinearRings crossing at a vertex and a non-vertex [dim(0){A.LR.Int.V = B.LR.Int.NV}] LINESTRING(20 180, 100 100, 20 20, 20 180) LINESTRING(100 20, 100 180, 180 100, 100 20) true LR/LR-4-6: two LinearRings crossing at two points [dim(0){A.LR.Int.V = B.LR.Int.NV}, dim(0){A.LR.Int.V = B.LR.Int.NV},] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(170 20, 20 170, 170 170, 170 20) true LR/LR-6-1: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.CP-V}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 90 210, 40 150) true LR/LR-6-2: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.NV-NV}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(20 150, 170 150, 90 230, 20 150) true LR/LR-6-3: two LinearRings overlapping [dim(1){A.LR.Int.(V-V-V-EP) = B.LR.Int.(NV-V-V-SP)}] LINESTRING(40 150, 40 40, 150 40, 150 150, 40 150) LINESTRING(40 150, 150 150, 150 40, 20 40, 20 150, 40 150) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPb}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 110, 20 200, 20 110, 200 110) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPo}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 110, 200 110, 50 110, 110 170) true LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(110 110, 20 200, 110 200, 110 110, 200 200) true LR/nsL-6-1: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 110 110, 110 40) true LR/nsL-6-2: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}, dim(1){A.nsL.Int.V-EP = B.nsL.Int.EP-NVx}] LINESTRING(110 110, 200 20, 20 20, 110 110) LINESTRING(200 20, 20 200, 200 200, 20 20) true nsL/nsL-4-1: non-simple LineStrings crossing at closing points [dim(0){A.nsL.Int.CP = B.nsL.Int.CP}] LINESTRING(110 110, 20 110, 110 20, 20 20, 110 110) LINESTRING(110 110, 200 200, 110 200, 200 110, 110 110) true nsL/nsL-4-2: non-simple LineStrings crossing at two points without vertices [dim(0){A.nsL.Int.NV = B.nsL.Int.NV}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(170 100, 70 100, 170 170, 70 170, 170 100) true nsL/nsL-4-3: non-simple LineStrings crossing at a point [dim(0){A.nsL.Int.NV = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(110 160, 70 110, 60 160, 20 130, 110 160) true nsL/nsL-4-4: non-simple LineStrings crossing at self-crossing points [dim(0){A.nsL.Int.NVx = B.nsL.Int.NVx}] LINESTRING(20 200, 200 200, 20 20, 200 20, 20 200) LINESTRING(20 110, 200 110, 200 160, 20 60, 20 110) true nsL/nsL-4-5: non-simple LineStrings crossing at vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 110, 110 110, 20 20, 110 20, 20 110) LINESTRING(200 200, 110 110, 200 110, 110 200, 200 200) true nsL/nsL-4-6: non-simple LineStrings crossing at two points with vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}] LINESTRING(20 120, 120 120, 20 20, 120 20, 20 120) LINESTRING(220 120, 120 20, 220 20, 120 120, 220 120) true mL/mL-1: MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) MULTILINESTRING( (70 20, 20 90, 70 170), (70 170, 120 90, 70 20)) true mL/mL-1-1: non-simple MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) true mL/mL-1-2: equal non-simple MultiLineString with different sequence of lines and points [dim(1){A.mL.Int.SP-EP = B.mL.Int.EP-SP}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 140, 90 60, 90 20), (170 20, 130 20, 20 20)) true mL/mL-3-1: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 130 60, 90 20, 50 90)) true mL/mL-3-2: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60)) true mL/mL-3-3: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60)) true mL/mL-3-4: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (130 100, 90 20)) true mL/mL-3-5: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-6: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPb}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60), (120 100, 170 100, 90 20)) true mL/mL-3-7: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPo}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (130 140, 130 60, 90 20, 20 90, 90 20)) true mL/mL-3-8: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPx}] MULTILINESTRING( (20 20, 90 20, 170 20), (90 20, 90 80, 90 140)) MULTILINESTRING( (90 20, 170 100, 170 140), (170 60, 90 20, 20 60, 20 140, 90 20)) true mL/mL-4-1: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vb}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 160 60)) true mL/mL-4-2: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vo}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 120 120, 90 90, 120 60, 160 60)) true mL/mL-4-3: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vx}] MULTILINESTRING( (20 20, 90 90, 20 160), (90 160, 90 20)) MULTILINESTRING( (160 160, 90 90, 160 20), (160 120, 90 90, 160 60)) true P/A-2-1: a point outside a polygon [dim(0){A.P.Int = B.A.Ext}] POINT(20 20) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-2-2: a point outside a converx polygon [dim(0){A.P.Int = B.A.Ext}] POINT(70 170) POLYGON( (110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230)) true P/A-2-3: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(110 130) POLYGON( (20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160)) true P/A-2-4: dim(0){A.P.Int = B.A.Ext} POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150)) true P/A-2-5: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}] POINT(100 70) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-3-1: a point on the closing point of a polygon [dim(0){A.P.Int = B.A.Bdy.CP}] POINT(60 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-2: a point on the boudary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.Bdy.NV}] POINT(110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-3: a point on the boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.Bdy.V] POINT(160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/A-3-4: a point on the touching point of boudary [dim(0){A.P.Int = B.A.Bdy.TP}] POINT(100 150) POLYGON( (20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150)) true P/A-5: a point on the interior of a polygon [dim(0){A.P.Int = B.A.Int}] POINT(100 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true P/Ah-2-1: a point outside of polygon with a hole [dim(0){A.P.Int = B.A.Ext}] POINT(60 160) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-2-2: a point inside the hole of the polygon [dim(0){A.P.Int = B.A.Ext.h}] POINT(190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-1: a point on the closing point of the outer boundary of a polygon with a hole [dim(0){A.P.Int = B.A.oBdy.CP}] POINT(190 190) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-2: a point on the outer boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.oBdy.V}] POINT(360 20) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-3: a point on the outer boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.oBdy.NV}] POINT(130 130) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-4: a point on the closing point of the inner boundary of a polygon [dim(0){A.P.Int = B.A.iBdy.CP}] POINT(280 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-5: a point on the inner boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.iBdy.NV}] POINT(150 100) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-3-6: a point on the inner boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.iBdy.V}] POINT(100 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/Ah-5: a point inside the interior of a polygon with a hole [dim(0){A.P.Int = B.A.Int}] POINT(140 120) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/A2h-3-1: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(190 50) POLYGON( (190 190, 360 20, 20 20, 190 190), (90 50, 150 110, 190 50, 90 50), (190 50, 230 110, 290 50, 190 50)) true P/A2h-3-2: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}] POINT(180 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (180 140, 180 40, 80 40, 180 140), (180 90, 210 140, 310 40, 230 40, 180 90)) true mP/A-2: 3 points outside a polygon [dim(0){A.2P.Int = B.A.Ext}] MULTIPOINT(20 80, 110 160, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-1: one of 3 points on the closing point of the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}] MULTIPOINT(20 80, 60 120, 20 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-2: one of 3 points on the boundary of a polygon at a non-vertex [dim(0){A.3P3 = B.A.Bdy.NV}] MULTIPOINT(10 80, 110 170, 110 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-3: one of 3 points on the boundary of a polygon at a vertex [dim(0){A.3P1.Int = B.A.Bdy.V}] MULTIPOINT(10 80, 110 170, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-4: 3 of the 5 points on the boundary of a polygon [dim(0){A.5P2.Int = B.A.Bdy.CP}, dim(0){A.5P3.Int = B.A.Bdy.NV}, dim(0){A.5P4.Int = B.A.Bdy.V}] MULTIPOINT(20 120, 60 120, 110 120, 160 120, 200 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-5: all 3 points on the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Bdy.V}] MULTIPOINT(60 120, 110 120, 160 120) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-3-6: all 4 points on the boundary of a polygon [dim(0){A.4P = B.A.Bdy}] MULTIPOINT(60 120, 160 120, 160 40, 60 40) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-1: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.CP}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(20 150, 60 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-2: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.V}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 160 120, 200 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-3: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Int}] MULTIPOINT(110 80, 110 120, 110 160) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-4: 1 point outside a polygon, 1 point inside [dim(0){A.2P1.Int = B.A.Ext}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(110 170, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-4-5: 1 point outside a polygon, 2 points on the boundary and 1 point inside [dim(0){A.4P1.Int = B.A.Ext}, dim(0){A.4P2.Int = B.A.Bdy.CP}, dim(0){A.4P3.Int = B.A.Bdy.V}, dim(0){A.4P4.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80, 110 170) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-1: 2 points within a polygon [dim(0){A.2P.Int = B.A.Int] MULTIPOINT(90 80, 130 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/A-5-2: 1 point on the boundary and 1 point inside a polygon [dim(0){A.2P1.Int = B.A.Bdy.CP}, dim(0){A.2P2.Int = B.A.Int}] MULTIPOINT(60 120, 160 120, 110 80) POLYGON( (60 120, 60 40, 160 40, 160 120, 60 120)) true mP/Ah-2-1: 3 points outside a polygon [dim(0){A.3P.Int = B.Ah.Ext}] MULTIPOINT(40 170, 40 90, 130 170) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-2: 2 points outside a polygon and 1 point inside the hole of the polygon [dim(0){A.3P1.Int = B.Ah.Ext}, dim(0){A.3P2.Int = B.Ah.Ext}, dim(0){A.3P3.Int = B.Ah.Ext.h}] MULTIPOINT(90 170, 280 170, 190 90) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true mP/Ah-2-3: all 3 points in polygon's hole [dim(0){A.3P.Int = B.Ah.Ext.h}] MULTIPOINT(190 110, 150 70, 230 70) POLYGON( (190 190, 360 20, 20 20, 190 190), (280 50, 100 50, 190 140, 280 50)) true P/mA-3-1: a point on the touching point of two polygons [dim(0){A.P.Int = B.2A.Bdy}] POINT(100 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-2: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.CP}] POINT(20 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-3: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.V}] POINT(60 100) MULTIPOLYGON( ( (20 100, 20 20, 100 20, 100 100, 20 100)), ( (100 180, 100 100, 180 100, 180 180, 100 180))) true P/mA-3-4: a point touching a polygon's boundary where the boundaries touch at a point [dim(0){A.P.Int = B.2A.Bdy.TP}] POINT(110 110) MULTIPOLYGON( ( (110 110, 20 200, 200 200, 110 110), (110 110, 80 180, 140 180, 110 110)), ( (110 110, 20 20, 200 20, 110 110), (110 110, 80 40, 140 40, 110 110))) true P/L-2: a point and a line disjoint [dim(0){A.P.Int = B.L.Ext}] POINT(110 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-1: a point touching the start point of a line [dim(0){A.P.Int = B.L.Bdy.SP}] POINT(90 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-3-2: a point touching the end point of a line [dim(0){A.P.Int = B.L.Bdy.EP}] POINT(340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-1: a point on the line at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(230 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/L-5-2: a point on the line at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(160 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/LR-2-1: a point outside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(90 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-2-2: a point inside a LinearRing [dim(0){A.P.Int = B.LR.Ext}] POINT(150 80) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-1: a point on the closing point of a LinearRing [dim(0){A.P.Int = B.LR.Int.CP}] POINT(150 150) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-2: a point on a LinearRing at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}] POINT(100 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/LR-5-3: a point on a LinearRing at a vertex [dim(0){A.P.Int = B.L.Int.V}] POINT(20 20) LINESTRING(150 150, 20 20, 280 20, 150 150) true P/nsL.1-3-1: a point on a non-simple LineString's end point [dim(0){A.P.Int = B.nsL.Bdy.EP}] POINT(220 220) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 110 110, 220 220) true P/nsL.1-5-2: a point a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-3: a point on a non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.1-5-4: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(220 20) LINESTRING(110 110, 220 20, 20 20, 220 220) true P/nsL.2-5-2: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(110 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-3: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(20 20) LINESTRING(220 220, 20 20, 220 20, 110 110) true P/nsL.2-5-4: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(20 110) LINESTRING(20 200, 20 20, 110 20, 20 110, 110 200) true P/nsL.3-3-1: a point on a non-simple LineString's start point [dim(0){A.P.Int = B.nsL.Bdy.SP}] POINT(20 200) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.3-5-2: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 200 200) true P/nsL.3-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(80 140) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-4: a point on a non-simple LineString's interior at a two-vertex point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-5: a point on a non-simple LineString's interior at a vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}] POINT(110 110) LINESTRING(20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.3-5-6: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-7: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.3-5-8: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-1: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-2: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140) true P/nsL.4-3-3:a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140) true P/nsL.4-3-4: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-5: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200) true P/nsL.4-3-6: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 20 20, 200 200) true P/nsL.4-3-7: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200) true P/nsL.4-3-8: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 110) LINESTRING(110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200) true P/nsL.5-3-1: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-2: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 110 200, 110 110) true P/nsL.5-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110) true P/nsL.5-3-5: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110) true P/nsL.6-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-2: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(110 160) LINESTRING(110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110) true P/nsL.6-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(110 110) LINESTRING(110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110) true P/nsL.7-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 20, 20 20, 110 110) true P/nsL.7-5-3: a point on a closed non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.7-5-4: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110) true P/nsL.8-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-2: a point on the interior (at a non-vertex) of a closed non-simple LineString [dim(0){A.P.Int = B.nsL.Int.NV}] POINT(140 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.8-5-3: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}] POINT(110 200) LINESTRING(110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110) true P/nsL.9-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.9-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200) true P/nsL.10-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.10-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 20 130, 20 200, 200 20, 20 20, 200 200) true P/nsL.11-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.11-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130) true P/nsL.12-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}] POINT(90 130) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.12-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 20 130, 90 130) true P/nsL.13-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110) true P/nsL.13-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110) true P/nsL.14-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110) true P/nsL.14-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(110 110) LINESTRING(110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110) true P/nsL.15-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(200 200, 20 20, 200 20, 20 200, 200 200) true P/nsL.15-5-2: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200) true P/nsL.15-5-3: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}] POINT(110 110) LINESTRING(200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200) true P/nsL.16-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.16-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-3: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130) true P/nsL.17-5-4: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}] POINT(90 130) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.17-5-5: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}] POINT(110 110) LINESTRING(90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130) true P/nsL.18-5-1: a point on a non-simple LineString's start point with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb)}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-2: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.18-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.19-5-1: a point on a non-simple LineString's closing point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.CPo}] POINT(110 200) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-2: a point on a non-simple LineString's interior at a non-vertex overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.19-5-3: a point on a non-simple LineString interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(110 200, 110 110, 20 20, 200 20, 110 110, 110 200) true P/nsL.20-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}] POINT(110 150) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsL.20-5-2: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 110) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true P/nsl.20-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}] POINT(110 200) LINESTRING(20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200) true mP/L-2-1: MultiPoint and a line disjoint (points on one side of the line) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(50 250, 90 220, 130 190) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-2-2: MultiPoint and a line disjoint (points over the line but no intersection) [dim(0){A.3P.Int = B.L.Ext}] MULTIPOINT(180 180, 230 130, 280 80) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-1: one of the points intersecting the start point of a line [dim(0){A.3P2.Int = B.L.Bdy.SP}] MULTIPOINT(50 120, 90 80, 130 40) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-3-2: one of the points intersecting the end point of a line [dim(0){A.3P2 = B.L.Bdy.EP}] MULTIPOINT(300 280, 340 240, 380 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-1: one of the points intersecting the interior of a line at a non-vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.NV] MULTIPOINT(230 150, 260 120, 290 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-2: one of the points intersecting the interior of a line at a non-vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.NV] MULTIPOINT(200 190, 240 150, 270 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-3: one of the points intersecting the interior of a line at a vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.V] MULTIPOINT(160 150, 190 120, 220 90) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-4-4: one of the points intersecting the interior of a line at a vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.V] MULTIPOINT(120 190, 160 150, 200 110) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-1: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(90 80, 160 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-2: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(90 80, 160 150, 300 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-3: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 160 150, 240 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-4: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(90 80, 130 120, 210 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-5: all the points on a line [dim(0){A.3P1.Int = B.L.Int.NV}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(130 120, 210 150, 340 200) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-6: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}] MULTIPOINT(160 150, 240 150, 340 210) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-7: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}] MULTIPOINT(160 150, 300 150, 340 150) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true mP/L-5-8: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Bdy.EP}] MULTIPOINT(160 150, 240 150, 340 240) LINESTRING(90 80, 160 150, 300 150, 340 150, 340 240) true P/P: same point [dim(0){A.P.Int = B.P.Int}] POINT(20 20) POINT(20 20) true P/P: different point [dim(0){A.P.Int = B.P.Ext}] POINT(20 20) POINT(40 60) true P/mP: different points [dim(0){A.P.Int = B.3P.Ext}] POINT(40 40) MULTIPOINT(20 20, 80 80, 20 120) true P/mP: point A within one of B points [dim(0){A.P.Int = B.3P1.Int}] POINT(20 20) MULTIPOINT(20 20, 80 80, 20 120) true mP/mP-1-1: same points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P2.Int = B.3P2.Int}, dim(0){A.3P3.Int = B.3P3.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 80 60, 120 100) true mP/mP-1-2: same but different sequence of points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P1.Int = B.3P3.Int}, dim(0){A.3P3.Int = B.3P2.Int}] MULTIPOINT(40 40, 80 60, 120 100) MULTIPOINT(40 40, 120 100, 80 60) true mP/mP-2: different points [dim(0){A.4P.Int = B.4P.Ext}] MULTIPOINT(40 40, 60 100, 100 60, 120 120) MULTIPOINT(20 120, 60 60, 100 100, 140 40) true mP/mP-5-1: same points [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(20 20, 80 70, 140 120, 200 170) true mP/mP-5-2: same points but different sequence [dim(0){A.4P.Int = B.4P.Int}] MULTIPOINT(20 20, 140 120, 80 70, 200 170) MULTIPOINT(80 70, 20 20, 200 170, 140 120) true mP/mP-5-3: some points same [dim(0){A.4P2.Int = B.2P1.Int}, dim(0){A.4P3.Int = B.2P2.Int}] MULTIPOINT(20 20, 80 70, 140 120, 200 170) MULTIPOINT(80 70, 140 120) true mP/mP-5-4: some points same, in a different sequence [dim(0){A.4P1.Int = B.2P2.Int}, dim(0){A.4P4.Int = B.2P1.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(140 120, 80 70) true mP/mP-6-1: some points same, some different [dim(0){A.4P4.Int = B.3P2.Int}] MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80) true mP/mP-6-2: dim(0){A.4P1.Int = B.4P4.Int}, dim(0){A.4P4.Int = B.4P2.Int} MULTIPOINT(80 70, 20 20, 200 170, 140 120) MULTIPOINT(80 170, 140 120, 200 80, 80 70) true Multipoint buffer MULTIPOINT(0 0, 5 5) POLYGON ((-10.0 -2.0, -10.0 -0.0, -10.0 2.0, -9.0 4.0, -8.0 6.0, -7.0 7.0, -6.0 8.0, -4.0 9.0, -3.0 11.0, -2.0 12.0, -1.0 13.0, 1.0 14.0, 3.0 15.0, 5.0 15.0, 7.0 15.0, 9.0 14.0, 11.0 13.0, 12.0 12.0, 13.0 11.0, 14.0 9.0, 15.0 7.0, 15.0 5.0, 15.0 3.0, 14.0 1.0, 13.0 -1.0, 12.0 -2.0, 11.0 -3.0, 9.0 -4.0, 8.0 -6.0, 7.0 -7.0, 6.0 -8.0, 4.0 -9.0, 2.0 -10.0, 0.0 -10.0, -2.0 -10.0, -4.0 -9.0, -6.0 -8.0, -7.0 -7.0, -8.0 -6.0, -9.0 -4.0, -10.0 -2.0)) Multipolygon buffering MULTIPOLYGON (((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 7, 80 60, 60 60))) MULTIPOLYGON (((10 10, 10 20, 20 20, 20 15, 10 10)), ((60 60, 70 7, 80 60, 60 60))) geos-3.4.2/tests/xmltester/tests/ticket/0000755000175000017500000000000012206417242020113 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tests/ticket/bug176.xml0000644000175000017500000000352112206417146021654 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/176 com.vividsolutions.jtstest.testrunner.BufferResultMatcher Polygon 1 POLYGON ((413.3999999999999773 243.0999999999999943, 607.2999999999999545 244.1999999999999886, 607.0000000000000000 294.8999999999999773, 697.8999999999999773 295.3999999999999773, 699.2000000000000455 241.8000000000000114, 416.8999999999999773 240.9000000000000057, 416.6999999999999886 162.3000000000000114, 413.1999999999999886 162.3000000000000114, 413.3999999999999773 243.0999999999999943)) POLYGON ((609.1722610376851890 243.5129929302678704, 609.2638333893902427 243.8213729820575395, 609.2999649881396635 244.2118341123558309, 609.0118040315680901 292.9110357729544489, 695.9481804295313623 293.3892336629322699, 697.1510625643339836 243.7934779510754595, 609.1722610376851890 243.5129929302678704)) Polygon 2 POLYGON ((513.3999999999999773 343.1000000000000227, 707.2999999999999545 344.1999999999999886, 707.0000000000000000 394.8999999999999773, 797.8999999999999773 395.3999999999999773, 799.2000000000000455 341.8000000000000114, 516.8999999999999773 340.8999999999999773, 516.7000000000000455 262.3000000000000114, 513.2000000000000455 262.3000000000000114, 513.3999999999999773 343.1000000000000227)) POLYGON ((709.1722610376851890 343.5129929302678988, 709.2638333893902427 343.8213729820575963, 709.2999649881396635 344.2118341123558594, 709.0118040315680901 392.9110357729544489, 795.9481804295313623 393.3892336629322699, 797.1510625643339836 343.7934779510754879, 709.1722610376851890 343.5129929302678988)) geos-3.4.2/tests/xmltester/tests/ticket/bug188.xml0000644000175000017500000000241212206417146021655 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/188 com.vividsolutions.jtstest.testrunner.BufferResultMatcher Caused crash in RightmostEdgeFinder creating BufferSubgraphs 0103000000010000000B000000713D0AD7C3F9C3403D0AD7A3E8B01441295C8FC255FBC340C3F5285C0BB1144153BB8CF8AD01C44092DD2F29FEB0144148E17A14AE01C4408FC2F528FEB0144148E17A146E01C440A4703D0AF0B014411F85EB517801C44085EB51B8EFB014419A999999B9FFC34066666666CBB0144133333333F3FCC340CDCCCCCCC9B01441295C8FC2F5FBC3408FC2F528CAB014413D0AD7A3F0FBC340CDCCCCCCC9B01441713D0AD7C3F9C3403D0AD7A3E8B01441 0103000000010000000F000000693B38D7C3F9C340F428D7A3E8B0144168CCA9C255FBC3400F64275C0BB11441F72C82F8AD01C440D4982E29FEB01441501A4C14AE01C4402CC9F428FEB01441FB5951146E01C440B39F3D0AF0B01441E41853146E01C44058063D0AF0B01441C8385D146E01C44060833C0AF0B01441AA97BA517801C440699851B8EFB0144145027C99B9FFC340C0A56766CBB01441F3A43233F3FCC340E51CCECCC9B01441B94391C2F5FBC340C211F728CAB014412A4F79C2F5FBC340FDDFF628CAB014412F0869C2F5FBC340D64AF628CAB01441FD95D2A3F0FBC340CFB6CFCCC9B01441693B38D7C3F9C340F428D7A3E8B01441 geos-3.4.2/tests/xmltester/tests/ticket/bug244.xml0000644000175000017500000063504112206417146021660 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/244 com.vividsolutions.jtstest.testrunner.BufferResultMatcher http://trac.osgeo.org/geos/ticket/244 MULTIPOLYGON(((144.520538330078 -1.12083339691162,144.516387939453 -1.12083339691162,144.514434814453 -1.11611104011536,144.514984130859 -1.10305547714233,144.517211914062 -1.09833335876465,144.521362304688 -1.09972214698792,144.522491455078 -1.10527777671814,144.523315429688 -1.11138892173767,144.522491455078 -1.11611104011536,144.520538330078 -1.12083339691162)),((149.731903076172 -1.60333347320557,149.715515136719 -1.57861113548279,149.7099609375 -1.57027792930603,149.703308105469 -1.56361126899719,149.699127197266 -1.56083345413208,149.681915283203 -1.55722236633301,149.680541992188 -1.56277775764465,149.681915283203 -1.57527780532837,149.681365966797 -1.5813889503479,149.678588867188 -1.58555555343628,149.673034667969 -1.58694458007812,149.663299560547 -1.58277773857117,149.659423828125 -1.58000016212463,149.558013916016 -1.50055575370789,149.533325195312 -1.469722032547,149.530548095703 -1.46555542945862,149.527770996094 -1.45444440841675,149.528594970703 -1.44833326339722,149.542755126953 -1.41472220420837,149.544982910156 -1.41000008583069,149.564147949219 -1.37027788162231,149.579956054688 -1.35527777671814,149.622467041016 -1.35944437980652,149.627166748047 -1.36138892173767,149.663299560547 -1.38666677474976,149.710784912109 -1.42166662216187,149.716918945312 -1.42916655540466,149.719696044922 -1.43333315849304,149.790252685547 -1.57666683197021,149.790802001953 -1.5813889503479,149.731903076172 -1.60333347320557)),((144.517761230469 -1.39833331108093,144.506103515625 -1.38944435119629,144.503326416016 -1.38555550575256,144.505554199219 -1.38055562973022,144.516387939453 -1.38194441795349,144.519989013672 -1.38555550575256,144.521911621094 -1.39555549621582,144.517761230469 -1.39833331108093)),((142.818298339844 -1.73333311080933,142.813598632812 -1.73277759552002,142.812194824219 -1.72722220420837,142.812744140625 -1.72111105918884,142.818298339844 -1.69972205162048,142.821075439453 -1.69583320617676,142.832183837891 -1.69361114501953,142.863006591797 -1.69444441795349,142.866363525391 -1.69777774810791,142.866912841797 -1.70944428443909,142.864410400391 -1.71361112594604,142.859405517578 -1.71555542945862,142.852752685547 -1.70861101150513,142.847198486328 -1.70722222328186,142.841644287109 -1.70861101150513,142.837463378906 -1.71138882637024,142.818298339844 -1.73333311080933)),((147.391937255859 -1.96083331108093,147.399993896484 -1.96638870239258,147.430816650391 -1.9902777671814,147.434417724609 -1.99361109733582,147.44580078125 -2.00944471359253,147.448028564453 -2.01416683197021,147.447204589844 -2.0188889503479,147.439697265625 -2.06083345413208,147.437744140625 -2.06555557250977,147.426086425781 -2.06777811050415,147.275268554688 -2.1211109161377,147.255554199219 -2.14916658401489,147.239135742188 -2.16694450378418,147.22802734375 -2.17638874053955,147.212188720703 -2.18805551528931,147.207458496094 -2.19027757644653,147.201904296875 -2.19166660308838,146.980529785156 -2.1991662979126,146.893035888672 -2.18944406509399,146.8388671875 -2.18194437026978,146.798309326172 -2.16888904571533,146.793579101562 -2.16694450378418,146.726348876953 -2.16083335876465,146.571624755859 -2.23472213745117,146.568023681641 -2.23666667938232,146.563293457031 -2.23472213745117,146.5283203125 -2.20111131668091,146.524993896484 -2.19083309173584,146.518035888672 -2.1497220993042,146.518859863281 -2.14361143112183,146.578308105469 -2.00194454193115,146.580535888672 -1.99722218513489,146.583862304688 -1.99361109733582,146.638580322266 -1.97861099243164,146.844970703125 -1.95055556297302,146.857177734375 -1.94916653633118,146.869689941406 -1.94916653633118,147.093566894531 -1.96638870239258,147.099975585938 -1.96694445610046,147.118286132812 -1.96888875961304,147.164428710938 -1.98333311080933,147.203308105469 -2.003333568573,147.300811767578 -2.02527761459351,147.417755126953 -2.05055570602417,147.419982910156 -2.04583358764648,147.422760009766 -2.03472232818604,147.422760009766 -2.02916669845581,147.420532226562 -2.01083374023438,147.418579101562 -2.00583362579346,147.391937255859 -1.96083331108093)),((147.756927490234 -2.35249996185303,147.766662597656 -2.32388925552368,147.795532226562 -2.26500034332275,147.815246582031 -2.24361133575439,147.832458496094 -2.24555540084839,147.877746582031 -2.28944444656372,147.879119873047 -2.29361152648926,147.856353759766 -2.3313889503479,147.848297119141 -2.33666658401489,147.829132080078 -2.34555530548096,147.824127197266 -2.34777784347534,147.81884765625 -2.34916639328003,147.812469482422 -2.34972190856934,147.756927490234 -2.35249996185303)),((150.367736816406 -2.68666648864746,150.356353759766 -2.66805553436279,150.347473144531 -2.66333341598511,150.341064453125 -2.66249990463257,150.273315429688 -2.67277765274048,150.257476806641 -2.6777777671814,150.242462158203 -2.68305540084839,150.190521240234 -2.68583297729492,150.184143066406 -2.68527746200562,150.109405517578 -2.625,149.972473144531 -2.50111150741577,149.965789794922 -2.4941668510437,149.949127197266 -2.47638845443726,149.948577880859 -2.47166633605957,149.951354980469 -2.46749973297119,149.960784912109 -2.46000003814697,150.079956054688 -2.41416645050049,150.189697265625 -2.37722206115723,150.206085205078 -2.37444448471069,150.216369628906 -2.37777757644653,150.248016357422 -2.39000034332275,150.417205810547 -2.46055555343628,150.443298339844 -2.47583293914795,150.446075439453 -2.47972202301025,150.467193603516 -2.54472255706787,150.468017578125 -2.55777788162231,150.459686279297 -2.64833354949951,150.458312988281 -2.6536111831665,150.448852539062 -2.66472196578979,150.443298339844 -2.66611099243164,150.41943359375 -2.66249990463257,150.406921386719 -2.66388893127441,150.4013671875 -2.6652774810791,150.371887207031 -2.68388891220093,150.367736816406 -2.68666648864746)),((152.659423828125 -3.84277772903442,152.670837402344 -3.85989284515381,152.701080322266 -3.88305521011353,152.739685058594 -3.89611101150513,152.769714355469 -3.90027761459351,152.919128417969 -4.0041675567627,152.989685058594 -4.07583332061768,153.006927490234 -4.09361171722412,153.118560791016 -4.23916625976562,153.12939453125 -4.25555610656738,153.131622314453 -4.26027870178223,153.134429931641 -4.27138900756836,153.132171630859 -4.37861061096191,153.130798339844 -4.39083385467529,153.128021240234 -4.39500045776367,153.121337890625 -4.40194416046143,153.108856201172 -4.40999984741211,153.092468261719 -4.42083358764648,153.080810546875 -4.43000030517578,153.066375732422 -4.44277763366699,153.063018798828 -4.44638824462891,153.0546875 -4.45861148834229,153.04052734375 -4.48527717590332,153.039154052734 -4.49749946594238,153.039703369141 -4.50361156463623,153.041076660156 -4.5091667175293,153.043304443359 -4.51388931274414,153.046630859375 -4.51722240447998,153.059692382812 -4.52555561065674,153.066375732422 -4.53222274780273,153.077453613281 -4.54861068725586,153.079406738281 -4.58916664123535,153.077453613281 -4.60055541992188,152.980255126953 -4.7605562210083,152.974670410156 -4.76666641235352,152.910247802734 -4.82333374023438,152.891662597656 -4.82250022888184,152.743560791016 -4.67305564880371,152.735504150391 -4.66083335876465,152.733306884766 -4.6561107635498,152.693023681641 -4.55833339691162,152.681365966797 -4.5222225189209,152.664978027344 -4.4688892364502,152.662750244141 -4.4572229385376,152.666381835938 -4.45388889312744,152.678588867188 -4.44555473327637,152.681365966797 -4.44138813018799,152.692199707031 -4.39361190795898,152.69775390625 -4.36499977111816,152.69775390625 -4.35805511474609,152.694427490234 -4.19138813018799,152.693572998047 -4.18527698516846,152.691650390625 -4.18055534362793,152.603302001953 -4.00611114501953,152.581909179688 -3.96583318710327,152.538726806641 -3.90009546279907,152.512176513672 -3.8687310218811,152.491577148438 -3.85225462913513,152.374969482422 -3.7277774810791,152.359954833984 -3.70472240447998,152.357177734375 -3.69361114501953,152.356628417969 -3.6875,152.358001708984 -3.66166639328003,152.355224609375 -3.65055561065674,152.349700927734 -3.64249992370605,152.289428710938 -3.57944440841675,152.282470703125 -3.57277774810791,152.190521240234 -3.50888919830322,152.182464599609 -3.50361156463623,152.156372070312 -3.48861122131348,152.151641845703 -3.48638868331909,152.146087646484 -3.4850001335144,152.136657714844 -3.48916673660278,152.131072998047 -3.49055576324463,152.124969482422 -3.49000024795532,151.984405517578 -3.46444463729858,151.956359863281 -3.45833349227905,151.934967041016 -3.44555521011353,151.758331298828 -3.32444477081299,151.708862304688 -3.28055572509766,151.688293457031 -3.25305557250977,151.620513916016 -3.17722225189209,151.6171875 -3.17388916015625,151.608306884766 -3.16916656494141,151.574676513672 -3.1594443321228,151.532745361328 -3.14499998092651,151.493011474609 -3.13000011444092,151.483581542969 -3.12583303451538,151.462188720703 -3.11305570602417,151.455535888672 -3.1061110496521,151.452758789062 -3.10194444656372,151.450531005859 -3.09722232818604,151.449981689453 -3.08416652679443,151.448577880859 -3.07888889312744,151.44384765625 -3.06972217559814,151.438293457031 -3.06361103057861,151.417205810547 -3.05055570602417,151.369689941406 -3.02250003814697,151.281372070312 -2.97416639328003,151.237457275391 -2.95361137390137,151.214965820312 -2.94194412231445,151.150543212891 -2.89527797698975,151.122467041016 -2.86861085891724,151.119689941406 -2.86444473266602,151.113586425781 -2.8502779006958,151.110778808594 -2.84611082077026,151.106628417969 -2.84333324432373,151.004425048828 -2.78916692733765,150.999694824219 -2.78722238540649,150.930541992188 -2.76861095428467,150.923583984375 -2.76861095428467,150.903045654297 -2.77138900756836,150.876342773438 -2.77611112594604,150.861907958984 -2.78249979019165,150.832458496094 -2.78722238540649,150.819427490234 -2.7877779006958,150.754425048828 -2.77083349227905,150.750274658203 -2.76805543899536,150.729675292969 -2.74055576324463,150.730529785156 -2.7344446182251,150.733856201172 -2.7311110496521,150.747467041016 -2.71749973297119,150.752471923828 -2.71527767181396,150.763305664062 -2.7180552482605,150.824401855469 -2.71527767181396,150.874969482422 -2.71250009536743,150.88720703125 -2.71111106872559,150.891357421875 -2.70833349227905,150.894989013672 -2.70499992370605,150.896942138672 -2.70027780532837,150.885650634766 -2.6851110458374,150.884307861328 -2.67811107635498,150.876983642578 -2.65594434738159,150.875640869141 -2.65294456481934,150.873641967773 -2.65094447135925,150.867797851562 -2.64844417572021,150.861633300781 -2.64977788925171,150.856292724609 -2.65261125564575,150.853134155273 -2.65344452857971,150.838012695312 -2.64277791976929,150.831909179688 -2.64222240447998,150.822204589844 -2.6380558013916,150.792755126953 -2.61666631698608,150.805816650391 -2.56666660308838,150.807739257812 -2.56333351135254,150.811370849609 -2.55999994277954,150.817474365234 -2.559166431427,150.834686279297 -2.57083368301392,150.838012695312 -2.57416677474976,150.906524658203 -2.63594436645508,150.964691162109 -2.68722200393677,150.968841552734 -2.69000005722046,151.086639404297 -2.75027799606323,151.190246582031 -2.82611131668091,151.280822753906 -2.87083339691162,151.311370849609 -2.86999988555908,151.419128417969 -2.89805555343628,151.427185058594 -2.9036111831665,151.464416503906 -2.93499994277954,151.598022460938 -3.02750015258789,151.641937255859 -3.04805564880371,151.717742919922 -3.11555576324463,151.72607421875 -3.12805557250977,151.815246582031 -3.19777774810791,151.820526123047 -3.1991662979126,151.825531005859 -3.1972222328186,151.833587646484 -3.19166660308838,151.855529785156 -3.18611097335815,151.861907958984 -3.18694448471069,151.921905517578 -3.20333337783813,151.948852539062 -3.21083354949951,152.055816650391 -3.24777793884277,152.054412841797 -3.26000022888184,152.054412841797 -3.27361106872559,152.057739257812 -3.28388929367065,152.164703369141 -3.41111087799072,152.204406738281 -3.45444440841675,152.210510253906 -3.46055555343628,152.238006591797 -3.47833299636841,152.252471923828 -3.4844446182251,152.277191162109 -3.49472236633301,152.306640625 -3.50638914108276,152.327178955078 -3.51999998092651,152.355224609375 -3.54000043869019,152.361907958984 -3.54666709899902,152.367462158203 -3.55499982833862,152.392211914062 -3.59861087799072,152.411926269531 -3.63361120223999,152.488006591797 -3.64916658401489,152.493011474609 -3.64861106872559,152.496917724609 -3.65138864517212,152.503051757812 -3.6588888168335,152.511383056641 -3.67111110687256,152.553314208984 -3.74583339691162,152.556640625 -3.756667137146,152.555816650391 -3.76944446563721,152.549713134766 -3.78388929367065,152.546356201172 -3.79416704177856,152.549133300781 -3.79833364486694,152.573852539062 -3.8216667175293,152.577758789062 -3.82444477081299,152.582733154297 -3.82638883590698,152.603302001953 -3.83305549621582,152.659423828125 -3.84277772903442)),((149.6640625 -10.3398141860962,149.639434814453 -10.3413887023926,149.572204589844 -10.3413887023926,149.566925048828 -10.3413887023926,149.536651611328 -10.361665725708,149.335784912109 -10.307222366333,149.224975585938 -10.2761116027832,149.186645507812 -10.2600002288818,149.176361083984 -10.2563896179199,149.161102294922 -10.2511119842529,149.139984130859 -10.2449989318848,149.093292236328 -10.2341651916504,149.049407958984 -10.2424983978271,149.03857421875 -10.2449989318848,148.993835449219 -10.2605571746826,148.981628417969 -10.268611907959,148.934967041016 -10.2672233581543,148.79443359375 -10.2391662597656,148.723297119141 -10.1869449615479,148.680267333984 -10.1494445800781,148.677459716797 -10.1533336639404,148.642486572266 -10.1863880157471,148.637481689453 -10.1883344650269,148.468292236328 -10.2038879394531,148.462738037109 -10.2038879394531,148.4033203125 -10.2005558013916,148.372467041016 -10.1919441223145,148.3369140625 -10.1797218322754,148.332733154297 -10.176944732666,148.327178955078 -10.1688899993896,148.322479248047 -10.1599998474121,148.314971923828 -10.1405563354492,148.312194824219 -10.1363887786865,148.3046875 -10.130277633667,148.157562255859 -10.0737085342407,148.154418945312 -10.0791664123535,148.150543212891 -10.0952777862549,148.148315429688 -10.0999984741211,148.115509033203 -10.1216659545898,148.10302734375 -10.1297206878662,148.0888671875 -10.1358337402344,148.083312988281 -10.1372222900391,148.055236816406 -10.1433334350586,147.999694824219 -10.1519451141357,147.952453613281 -10.1458339691162,147.940795898438 -10.1211109161377,147.923034667969 -10.0980548858643,147.872192382812 -10.0475006103516,147.86328125 -10.0427780151367,147.857727050781 -10.0427780151367,147.781097412109 -10.0508327484131,147.775543212891 -10.0522232055664,147.766082763672 -10.0561103820801,147.619964599609 -9.9908332824707,147.612457275391 -9.98472213745117,147.601348876953 -9.97527694702148,147.574127197266 -9.94833374023438,147.51025390625 -9.87861061096191,147.504150390625 -9.87138748168945,147.501373291016 -9.86722183227539,147.499389648438 -9.85583305358887,147.501373291016 -9.85111045837402,147.503601074219 -9.83944320678711,147.503601074219 -9.8125,147.499389648438 -9.79638862609863,147.490509033203 -9.77138900756836,147.48828125 -9.76666641235352,147.386932373047 -9.63555717468262,147.316375732422 -9.55527877807617,147.296600341797 -9.53412532806396,147.248565673828 -9.50583457946777,147.12939453125 -9.44361114501953,147.080001831055 -9.43415546417236,147.099975585938 -9.44972229003906,147.102752685547 -9.45388793945312,147.102752685547 -9.48361015319824,147.101348876953 -9.48888778686523,147.09912109375 -9.49110984802246,147.094421386719 -9.49305534362793,147.0888671875 -9.49166679382324,147.062194824219 -9.47333335876465,147.055236816406 -9.46666526794434,147.008026123047 -9.39833450317383,147.001922607422 -9.3841667175293,146.926635742188 -9.28277778625488,146.91748046875 -9.28750038146973,146.911376953125 -9.28694534301758,146.901092529297 -9.28333282470703,146.896942138672 -9.28083419799805,146.893585205078 -9.27722358703613,146.891662597656 -9.27250099182129,146.888885498047 -9.1833324432373,146.905044555664 -9.13727760314941,146.905868530273 -9.13410949707031,146.907043457031 -9.13127708435059,146.909881591797 -9.13077735900879,146.915374755859 -9.13361072540283,146.918548583984 -9.13444423675537,146.969696044922 -9.09138870239258,146.977172851562 -9.07444381713867,146.981353759766 -9.05944442749023,146.981048583984 -9.05097389221191,146.974395751953 -9.03388977050781,146.972473144531 -9.02916717529297,146.969116210938 -9.02833366394043,146.951080322266 -9.03388977050781,146.94580078125 -9.04194450378418,146.944427490234 -9.04722213745117,146.94580078125 -9.05277824401855,146.951904296875 -9.06027793884277,146.954681396484 -9.06833267211914,146.953308105469 -9.07361030578613,146.925262451172 -9.09999847412109,146.91748046875 -9.10610961914062,146.844604492188 -9.09577751159668,146.840911865234 -9.09627723693848,146.83757019043 -9.09544467926025,146.630523681641 -9.0302791595459,146.621612548828 -9.02555656433105,146.586639404297 -8.99916648864746,146.578308105469 -8.9869441986084,146.55859375 -8.9416675567627,146.545532226562 -8.90250015258789,146.546081542969 -8.89777946472168,146.555816650391 -8.85972213745117,146.559143066406 -8.85638809204102,146.567474365234 -8.8075008392334,146.541351318359 -8.76361274719238,146.517486572266 -8.72500038146973,146.441345214844 -8.62472152709961,146.431915283203 -8.61388778686523,146.419982910156 -8.60499954223633,146.403594970703 -8.59444427490234,146.379104614258 -8.58470821380615,146.372192382812 -8.57805633544922,146.351623535156 -8.55777740478516,146.318572998047 -8.50889015197754,146.275543212891 -8.44305610656738,146.269439697266 -8.42888832092285,146.268035888672 -8.42361068725586,146.263305664062 -8.38750076293945,146.264709472656 -8.37527656555176,146.264709472656 -8.36861038208008,146.262481689453 -8.35972213745117,146.243286132812 -8.29472351074219,146.238555908203 -8.28583335876465,146.229675292969 -8.27444458007812,146.218566894531 -8.26472282409668,146.111083984375 -8.16388893127441,146.110229492188 -8.13472366333008,146.089691162109 -8.09111022949219,145.998016357422 -8.05444526672363,145.987731933594 -8.05111122131348,145.930816650391 -8.04111099243164,145.918579101562 -8.03972244262695,145.898590087891 -8.03888893127441,145.880798339844 -8.04166793823242,145.835510253906 -8.02805709838867,145.797760009766 -8.00777816772461,145.786376953125 -7.99888896942139,145.718292236328 -7.96777820587158,145.649993896484 -7.9597225189209,145.630798339844 -7.94472217559814,145.616912841797 -7.93777751922607,145.528045654297 -7.93777751922607,145.502471923828 -7.9399995803833,145.484130859375 -7.94861030578613,145.465515136719 -7.95083332061768,145.443572998047 -7.94944381713867,145.432739257812 -7.94805526733398,145.422485351562 -7.94472217559814,145.244110107422 -7.86861038208008,145.19807434082 -7.82955169677734,145.182723999023 -7.81383991241455,145.168106079102 -7.81822443008423,145.162994384766 -7.82626342773438,145.164459228516 -7.83649444580078,145.161529541016 -7.84489870071411,145.155685424805 -7.84599494934082,145.044967651367 -7.82041692733765,144.995513916016 -7.81555557250977,144.879669189453 -7.78250026702881,144.844696044922 -7.75722312927246,144.838562011719 -7.74972152709961,144.840515136719 -7.74499988555908,144.850250244141 -7.74111080169678,144.871337890625 -7.70777797698975,144.873565673828 -7.7030553817749,144.874114990234 -7.69694423675537,144.874114990234 -7.6899995803833,144.862457275391 -7.61055564880371,144.844696044922 -7.60777759552002,144.833862304688 -7.67722225189209,144.831085205078 -7.68111133575439,144.824127197266 -7.68805503845215,144.819427490234 -7.6899995803833,144.787750244141 -7.69138813018799,144.783599853516 -7.69138813018799,144.599395751953 -7.6602783203125,144.588287353516 -7.65750026702881,144.584411621094 -7.65472221374512,144.552185058594 -7.6119441986084,144.547210693359 -7.60305500030518,144.547210693359 -7.5963888168335,144.545806884766 -7.57472229003906,144.536376953125 -7.52694511413574,144.534973144531 -7.52166652679443,144.530822753906 -7.51222229003906,144.525268554688 -7.5038890838623,144.520538330078 -7.50194454193115,144.514984130859 -7.50194454193115,144.51025390625 -7.5038890838623,144.508880615234 -7.50944519042969,144.508331298828 -7.61472225189209,144.508331298828 -7.62138843536377,144.424682617188 -7.53305530548096,144.418579101562 -7.52583312988281,144.410247802734 -7.52027797698975,144.406921386719 -7.51944446563721,144.412200927734 -7.56583309173584,144.435516357422 -7.68000030517578,144.467742919922 -7.74305534362793,144.395812988281 -7.75583362579346,144.378021240234 -7.75333404541016,144.363006591797 -7.74777793884277,144.358856201172 -7.74499988555908,144.356628417969 -7.74027729034424,144.354125976562 -7.72944450378418,144.354125976562 -7.72277736663818,144.356628417969 -7.70499992370605,144.359680175781 -7.69416618347168,144.360229492188 -7.68249988555908,144.319122314453 -7.62083339691162,144.315795898438 -7.61749935150146,144.310791015625 -7.61666584014893,144.260803222656 -7.63777828216553,144.250549316406 -7.65472221374512,144.243560791016 -7.66694450378418,144.255249023438 -7.73416614532471,144.263031005859 -7.74027729034424,144.272491455078 -7.76749992370605,144.271911621094 -7.77361106872559,144.268310546875 -7.77694511413574,144.224395751953 -7.79333305358887,144.219116210938 -7.79472255706787,144.213012695312 -7.79527759552002,144.147216796875 -7.77888870239258,144.121612548828 -7.77166652679443,143.911926269531 -7.69694423675537,143.899719238281 -7.68861103057861,143.848037719727 -7.63533353805542,143.838531494141 -7.62833404541016,143.829193115234 -7.61733341217041,143.822525024414 -7.60766696929932,143.812713623047 -7.58883380889893,143.810211181641 -7.58316707611084,143.806549072266 -7.57049989700317,143.773040771484 -7.51555633544922,143.768310546875 -7.506667137146,143.758605957031 -7.50250053405762,143.664825439453 -7.46764850616455,143.691345214844 -7.51222229003906,143.755126953125 -7.58950042724609,143.839416503906 -7.71527767181396,143.845520019531 -7.73611068725586,143.852447509766 -7.77027797698975,143.85302734375 -7.78305530548096,143.851898193359 -7.79527759552002,143.85302734375 -7.80749988555908,143.854400634766 -7.81305503845215,143.896362304688 -7.88027763366699,143.901641845703 -7.88833332061768,143.9580078125 -7.97862243652344,143.957183837891 -7.98472213745117,143.955230712891 -7.9894437789917,143.893585205078 -8.03694534301758,143.889434814453 -8.03972244262695,143.884704589844 -8.04166793823242,143.847747802734 -8.04583358764648,143.833862304688 -8.04583358764648,143.755249023438 -8.04111099243164,143.750274658203 -8.03888893127441,143.743560791016 -8.03222274780273,143.738006591797 -8.02416801452637,143.724395751953 -8.01055717468262,143.719421386719 -8.00833511352539,143.661376953125 -7.99138832092285,143.631896972656 -7.98666667938232,143.618835449219 -7.98611068725586,143.597473144531 -7.99222183227539,143.588562011719 -7.99694442749023,143.568908691406 -8.0041675567627,143.56575012207 -8.00483322143555,143.546081542969 -8.00638961791992,143.501647949219 -7.9961109161377,143.485778808594 -7.99138832092285,143.481628417969 -7.98888874053955,143.474975585938 -7.98194408416748,143.473571777344 -7.97305583953857,143.460510253906 -7.93861103057861,143.454406738281 -7.92416667938232,143.444122314453 -7.91333389282227,143.439971923828 -7.91055583953857,143.435241699219 -7.90861129760742,143.424133300781 -7.90722274780273,143.362457275391 -7.8997220993042,143.358306884766 -7.90250015258789,143.356903076172 -7.90805530548096,143.356903076172 -7.91333389282227,143.360504150391 -7.91694450378418,143.446624755859 -7.98055553436279,143.538635253906 -8.05216693878174,143.541458129883 -8.05333423614502,143.543975830078 -8.05500030517578,143.547958374023 -8.05900001525879,143.628295898438 -8.19361114501953,143.630523681641 -8.19833374023438,143.632446289062 -8.20999908447266,143.631896972656 -8.21611022949219,143.629669189453 -8.22749900817871,143.625518798828 -8.2369441986084,143.622192382812 -8.24055480957031,143.611907958984 -8.24388885498047,143.56884765625 -8.24722099304199,143.554962158203 -8.24722099304199,143.512481689453 -8.2458324432373,143.469421386719 -8.24527740478516,143.382446289062 -8.25,143.373565673828 -8.25055694580078,143.338562011719 -8.2538890838623,143.234954833984 -8.27500152587891,143.178039550781 -8.28666687011719,143.080810546875 -8.30833435058594,143.069976806641 -8.31083297729492,143.049407958984 -8.31777763366699,143.034149169922 -8.32305526733398,143.023864746094 -8.3266658782959,143 -8.33666610717773,142.991058349609 -8.34138870239258,142.979949951172 -8.34416580200195,142.973297119141 -8.34416580200195,142.967193603516 -8.3436107635498,142.961639404297 -8.34222221374512,142.94580078125 -8.33749961853027,142.941070556641 -8.33527755737305,142.908874511719 -8.31916618347168,142.882171630859 -8.30500030517578,142.865509033203 -8.29416656494141,142.845794677734 -8.28666687011719,142.799987792969 -8.27500152587891,142.776641845703 -8.27083396911621,142.696350097656 -8.26749992370605,142.654693603516 -8.27361106872559,142.638031005859 -8.27777862548828,142.595794677734 -8.29000091552734,142.575256347656 -8.29666709899902,142.565521240234 -8.30083274841309,142.548309326172 -8.31083297729492,142.540802001953 -8.31694412231445,142.533874511719 -8.32388877868652,142.529968261719 -8.3266658782959,142.521087646484 -8.33138847351074,142.511383056641 -8.33527755737305,142.505828857422 -8.33666610717773,142.485229492188 -8.33666610717773,142.466918945312 -8.33611106872559,142.442749023438 -8.33277702331543,142.437469482422 -8.33138847351074,142.427764892578 -8.32722282409668,142.419708251953 -8.32194519042969,142.411926269531 -8.31583404541016,142.403213500977 -8.28638935089111,142.396194458008 -8.26155567169189,142.395050048828 -8.25055599212646,142.394195556641 -8.23922157287598,142.39453125 -8.23155498504639,142.394195556641 -8.2278881072998,142.386657714844 -8.19361114501953,142.383880615234 -8.18972206115723,142.379943847656 -8.18694496154785,142.338562011719 -8.16638946533203,142.327758789062 -8.16388893127441,142.316925048828 -8.16388893127441,142.221618652344 -8.1733341217041,142.2119140625 -8.17722320556641,142.140808105469 -8.22222137451172,142.13720703125 -8.22555541992188,142.13525390625 -8.23027801513672,142.135803222656 -8.23638725280762,142.144714355469 -8.23916625976562,142.155822753906 -8.24055480957031,142.163879394531 -8.23638725280762,142.172210693359 -8.23083305358887,142.182464599609 -8.22083282470703,142.186645507812 -8.21805572509766,142.195526123047 -8.21333312988281,142.223571777344 -8.20027732849121,142.228302001953 -8.19833374023438,142.309143066406 -8.18083381652832,142.314147949219 -8.18000030517578,142.324401855469 -8.1833324432373,142.338012695312 -8.19027709960938,142.355224609375 -8.19916725158691,142.361358642578 -8.20638847351074,142.374572753906 -8.26111125946045,142.377410888672 -8.2746114730835,142.377075195312 -8.28644466400146,142.377410888672 -8.29327774047852,142.382446289062 -8.31916618347168,142.388031005859 -8.32722282409668,142.408599853516 -8.34749984741211,142.439422607422 -8.37138748168945,142.44970703125 -8.37472152709961,142.466918945312 -8.37805557250977,142.473022460938 -8.37888717651367,142.486633300781 -8.37888717651367,142.493011474609 -8.37805557250977,142.512756347656 -8.37194442749023,142.522491455078 -8.36805534362793,142.5263671875 -8.36527633666992,142.540252685547 -8.35166549682617,142.548309326172 -8.34611129760742,142.556640625 -8.34083366394043,142.590240478516 -8.3266658782959,142.619689941406 -8.31500053405762,142.635528564453 -8.31027793884277,142.641662597656 -8.31083297729492,142.734680175781 -8.32250022888184,142.771636962891 -8.33194351196289,142.776641845703 -8.33388900756836,142.783325195312 -8.34083366394043,142.788879394531 -8.3488883972168,142.799133300781 -8.35916519165039,142.807464599609 -8.36444473266602,142.906097412109 -8.42361068725586,142.917205810547 -8.42611122131348,142.9580078125 -8.43166732788086,143.01025390625 -8.44111061096191,143.04443359375 -8.44777870178223,143.049987792969 -8.44916725158691,143.086364746094 -8.45999908447266,143.096618652344 -8.4636116027832,143.110229492188 -8.47027778625488,143.213012695312 -8.5494441986084,143.220520019531 -8.55555534362793,143.239135742188 -8.57138824462891,143.246063232422 -8.57805633544922,143.249389648438 -8.58138847351074,143.281646728516 -8.61861038208008,143.374664306641 -8.741943359375,143.392761230469 -8.77027893066406,143.395263671875 -8.7813892364502,143.406921386719 -8.96194458007812,143.405548095703 -8.96749877929688,143.403045654297 -8.97138786315918,143.384429931641 -8.99388885498047,143.3671875 -9.01083374023438,143.363006591797 -9.01361274719238,143.331634521484 -9.02833366394043,143.321899414062 -9.03250122070312,143.316650390625 -9.03388977050781,143.310241699219 -9.03305625915527,143.299407958984 -9.02361106872559,143.289154052734 -9.02027893066406,143.283050537109 -9.01972198486328,143.269989013672 -9.02027893066406,143.248016357422 -9.02555656433105,143.232177734375 -9.0302791595459,143.174133300781 -9.04861068725586,143.047210693359 -9.09000015258789,143.04248046875 -9.09194374084473,143.039154052734 -9.09527778625488,143.030822753906 -9.10750007629395,143.023864746094 -9.11416625976562,142.902770996094 -9.19750022888184,142.842468261719 -9.2327766418457,142.807464599609 -9.25222396850586,142.797760009766 -9.25638961791992,142.788299560547 -9.26027870178223,142.769134521484 -9.2672233581543,142.752471923828 -9.27138900756836,142.723846435547 -9.28333282470703,142.66552734375 -9.32055473327637,142.654693603516 -9.32999992370605,142.638885498047 -9.3347225189209,142.625244140625 -9.3347225189209,142.582733154297 -9.33083343505859,142.571624755859 -9.32805633544922,142.543029785156 -9.30916595458984,142.532470703125 -9.29888916015625,142.5244140625 -9.28694534301758,142.521087646484 -9.28333282470703,142.517486572266 -9.28000068664551,142.497741699219 -9.26527786254883,142.477172851562 -9.25166702270508,142.425811767578 -9.22805595397949,142.2099609375 -9.16500091552734,142.203033447266 -9.16500091552734,142.054412841797 -9.18722152709961,141.944702148438 -9.20694351196289,141.721343994141 -9.21444511413574,141.615783691406 -9.23611068725586,141.608856201172 -9.23611068725586,141.522491455078 -9.22111129760742,141.509429931641 -9.21388816833496,141.501922607422 -9.20777702331543,141.495788574219 -9.20027732849121,141.48828125 -9.19416618347168,141.460784912109 -9.17388916015625,141.448577880859 -9.16583442687988,141.429412841797 -9.15750122070312,141.388305664062 -9.14416694641113,141.375244140625 -9.14333343505859,141.323028564453 -9.14999961853027,141.312194824219 -9.15277862548828,141.307464599609 -9.15500068664551,141.294982910156 -9.16305541992188,141.284698486328 -9.17305564880371,141.266387939453 -9.18888854980469,141.226623535156 -9.21722221374512,141.213592529297 -9.22472190856934,141.176361083984 -9.23388862609863,141.160797119141 -9.23749923706055,141.122467041016 -9.23194313049316,141.117462158203 -9.22999954223633,141.109405517578 -9.22472190856934,141.090789794922 -9.20916557312012,141.033874511719 -9.15694427490234,141.013305664062 -9.13666725158691,141.007019042969 -9.12846755981445,141.006134033203 -6.90478563308716,141.006134033203 -6.89328384399414,140.998565673828 -6.89388942718506,140.990509033203 -6.89944458007812,140.983581542969 -6.9061107635498,140.978851318359 -6.90694427490234,140.949401855469 -6.9036111831665,140.902770996094 -6.85583305358887,140.875244140625 -6.79611110687256,140.871063232422 -6.7863883972168,140.859405517578 -6.72861099243164,140.858856201172 -6.6783332824707,140.863006591797 -6.63138866424561,140.891082763672 -6.60333347320557,140.895263671875 -6.60055541992188,140.898040771484 -6.59666728973389,140.947204589844 -6.5,140.951354980469 -6.48361110687256,140.950805664062 -6.47749996185303,140.948577880859 -6.47277736663818,140.94580078125 -6.4686107635498,140.928039550781 -6.45083332061768,140.932189941406 -6.43444442749023,140.963592529297 -6.3386116027832,140.967742919922 -6.33583354949951,140.973297119141 -6.33444499969482,140.985504150391 -6.33305549621582,141.006134033203 -6.33292484283447,141.006103515625 -6,141.006103515625 -4.90555477142334,141.006103515625 -2.61388921737671,141.002471923828 -2.60708522796631,141.029968261719 -2.59277772903442,141.034698486328 -2.59083318710327,141.039428710938 -2.59000015258789,141.046356201172 -2.59000015258789,141.199127197266 -2.61805534362793,141.204681396484 -2.61944437026978,141.214141845703 -2.62222194671631,141.270538330078 -2.64555549621582,141.273864746094 -2.65583324432373,141.278045654297 -2.6652774810791,141.284149169922 -2.67277765274048,141.345794677734 -2.70777797698975,141.369689941406 -2.7180552482605,141.380798339844 -2.72083330154419,141.410797119141 -2.72499990463257,141.426635742188 -2.72972202301025,141.436370849609 -2.73388910293579,141.568572998047 -2.79388904571533,141.608856201172 -2.8125,141.704132080078 -2.86250019073486,141.840515136719 -2.93694448471069,141.881622314453 -2.96444463729858,141.889984130859 -2.96999979019165,141.894714355469 -2.9719443321228,141.913879394531 -2.9719443321228,141.931091308594 -2.9686107635498,141.935791015625 -2.96638870239258,141.962463378906 -2.95888900756836,141.973571777344 -2.95611095428467,141.991912841797 -2.95416688919067,142.003601074219 -2.95611095428467,142.011932373047 -2.96166658401489,142.066070556641 -3.00833368301392,142.076904296875 -3.01777791976929,142.077758789062 -3.02055549621582,142.124969482422 -3.05944442749023,142.252471923828 -3.10472249984741,142.551910400391 -3.21833324432373,142.663604736328 -3.24777793884277,142.946624755859 -3.33249998092651,142.992462158203 -3.34833335876465,143.032745361328 -3.36277770996094,143.041076660156 -3.36416673660278,143.073181152344 -3.36020636558533,143.087738037109 -3.35583353042603,143.093841552734 -3.35500001907349,143.106079101562 -3.35388898849487,143.123840332031 -3.35388898849487,143.172760009766 -3.35722255706787,143.194702148438 -3.3600001335144,143.209686279297 -3.3652777671814,143.2138671875 -3.36805534362793,143.229400634766 -3.37972211837769,143.23828125 -3.38444471359253,143.255554199219 -3.3880558013916,143.336364746094 -3.40166664123535,143.346069335938 -3.40166664123535,143.370788574219 -3.40166664123535,143.384429931641 -3.40305519104004,143.408325195312 -3.40638875961304,143.442749023438 -3.41194438934326,143.516082763672 -3.43444442749023,143.520812988281 -3.43666648864746,143.529144287109 -3.44194412231445,143.536651611328 -3.44805526733398,143.569427490234 -3.47555541992188,143.598846435547 -3.51444482803345,143.602172851562 -3.5247220993042,143.605804443359 -3.54194450378418,143.609130859375 -3.54527807235718,143.61328125 -3.54805564880371,143.648864746094 -3.56722259521484,143.731079101562 -3.60416698455811,143.768310546875 -3.61083364486694,143.790802001953 -3.61083364486694,143.794982910156 -3.61222219467163,143.798858642578 -3.61500024795532,143.949127197266 -3.73333311080933,143.955230712891 -3.73944425582886,143.9580078125 -3.74361133575439,143.964691162109 -3.7572226524353,143.966064453125 -3.76277780532837,143.976348876953 -3.77972221374512,143.981903076172 -3.78805589675903,143.988861083984 -3.79500007629395,143.993011474609 -3.79777812957764,144.016937255859 -3.81055545806885,144.243011474609 -3.87277746200562,144.249114990234 -3.87361097335815,144.253875732422 -3.87138891220093,144.255249023438 -3.86611127853394,144.253875732422 -3.86194467544556,144.253875732422 -3.85500001907349,144.258026123047 -3.84555530548096,144.275268554688 -3.809166431427,144.278594970703 -3.80583333969116,144.284973144531 -3.80527782440186,144.338287353516 -3.80249977111816,144.375244140625 -3.80249977111816,144.511657714844 -3.82083368301392,144.515808105469 -3.82361125946045,144.532196044922 -3.84611082077026,144.534973144531 -3.8502779006958,144.549987792969 -3.87611103057861,144.552185058594 -3.88111114501953,144.547210693359 -3.8938889503479,144.545257568359 -3.90416669845581,144.54248046875 -3.93444442749023,144.543853759766 -3.95361137390137,144.547210693359 -3.96388912200928,144.551361083984 -3.9719443321228,144.571350097656 -3.99194431304932,144.591064453125 -4.00611114501953,144.608306884766 -4.0130558013916,144.613861083984 -4.01444530487061,144.653594970703 -4.0130558013916,144.673309326172 -4.01361179351807,144.678863525391 -4.01500034332275,144.729675292969 -4.0313892364502,144.766662597656 -4.04638862609863,144.850250244141 -4.09305572509766,144.858306884766 -4.09833335876465,144.876342773438 -4.11361122131348,144.978302001953 -4.22277736663818,144.981628417969 -4.22638893127441,144.986633300781 -4.23499965667725,144.991333007812 -4.24388885498047,144.994689941406 -4.25277805328369,144.996063232422 -4.26250076293945,145.004974365234 -4.28166675567627,145.033050537109 -4.33555603027344,145.036651611328 -4.33888912200928,145.054962158203 -4.35194396972656,145.089965820312 -4.37166595458984,145.094696044922 -4.37388896942139,145.157196044922 -4.38277721405029,145.228576660156 -4.3880558013916,145.253051757812 -4.37861061096191,145.293579101562 -4.37666606903076,145.305236816406 -4.37722206115723,145.333862304688 -4.38944435119629,145.338012695312 -4.39222240447998,145.451080322266 -4.49416637420654,145.459411621094 -4.50444507598877,145.527191162109 -4.59249973297119,145.614135742188 -4.70027828216553,145.620513916016 -4.70777797698975,145.675811767578 -4.76194477081299,145.679412841797 -4.76527786254883,145.69384765625 -4.77694511413574,145.735504150391 -4.80277729034424,145.780822753906 -4.92777729034424,145.813598632812 -5.06555557250977,145.813598632812 -5.07250022888184,145.786926269531 -5.23138904571533,145.765808105469 -5.26361179351807,145.738861083984 -5.30527782440186,145.724395751953 -5.41222190856934,145.723846435547 -5.42527770996094,145.725250244141 -5.430832862854,145.734130859375 -5.4491662979126,145.747741699219 -5.46972179412842,145.754699707031 -5.47638893127441,145.766387939453 -5.48527717590332,145.782745361328 -5.4894437789917,145.787750244141 -5.48999977111816,145.793029785156 -5.48999977111816,145.872467041016 -5.48611068725586,145.930816650391 -5.47722244262695,145.935516357422 -5.47638893127441,145.963592529297 -5.47305583953857,145.976623535156 -5.47638893127441,146.082183837891 -5.51250076293945,146.174682617188 -5.55138874053955,146.194702148438 -5.55888843536377,146.289154052734 -5.58888912200928,146.376342773438 -5.59916687011719,146.439971923828 -5.59861087799072,146.445526123047 -5.59861087799072,146.465240478516 -5.60472202301025,146.47021484375 -5.60666751861572,146.474090576172 -5.60944557189941,146.531188964844 -5.65468120574951,146.580535888672 -5.69472217559814,146.605224609375 -5.71777820587158,146.640808105469 -5.74388885498047,146.653045654297 -5.75194454193115,146.662750244141 -5.75611114501953,146.688873291016 -5.76416683197021,146.714691162109 -5.76972198486328,146.770782470703 -5.79138946533203,146.775787353516 -5.79361248016357,146.783843994141 -5.79889011383057,146.786071777344 -5.80388927459717,146.796310424805 -5.83441781997681,146.875213623047 -5.82555675506592,146.894958496094 -5.82888984680176,146.923004150391 -5.84194564819336,146.930511474609 -5.84805679321289,146.946319580078 -5.86638927459717,146.953826904297 -5.88611221313477,146.956604003906 -5.89027881622314,146.962707519531 -5.897780418396,146.992156982422 -5.91611289978027,147.014129638672 -5.92833518981934,147.041625976562 -5.94222354888916,147.046325683594 -5.94416904449463,147.102722167969 -5.96611404418945,147.112152099609 -5.96667003631592,147.228820800781 -5.97223472595215,147.234924316406 -5.97140216827393,147.24658203125 -5.96251487731934,147.269683837891 -5.93807125091553,147.274658203125 -5.93612670898438,147.284942626953 -5.93529415130615,147.423278808594 -5.96058177947998,147.466613769531 -5.97085952758789,147.476867675781 -5.97419261932373,147.484375 -5.98030376434326,147.573303222656 -6.05527782440186,147.590515136719 -6.07222270965576,147.641937255859 -6.13694477081299,147.786651611328 -6.30249977111816,147.826354980469 -6.3372220993042,147.830261230469 -6.34694480895996,147.850250244141 -6.41166687011719,147.863861083984 -6.45916652679443,147.866638183594 -6.47000026702881,147.869964599609 -6.65472221374512,147.869415283203 -6.66083335876465,147.866058349609 -6.67083358764648,147.845520019531 -6.69138813018799,147.838562011719 -6.69805526733398,147.819427490234 -6.71305561065674,147.810516357422 -6.71777820587158,147.770812988281 -6.72611141204834,147.759155273438 -6.72805595397949,147.568023681641 -6.75194454193115,147.416381835938 -6.73499965667725,147.305541992188 -6.74583339691162,147.219696044922 -6.74638843536377,147.199981689453 -6.74583339691162,147.188873291016 -6.74305534362793,147.180816650391 -6.74027729034424,147.174682617188 -6.73555564880371,147.166381835938 -6.72333335876465,147.160247802734 -6.71722221374512,147.149993896484 -6.71388912200928,147.0888671875 -6.71444511413574,146.971069335938 -6.74305534362793,146.961364746094 -6.74722194671631,146.948577880859 -6.79805564880371,146.944976806641 -6.81527709960938,146.943023681641 -6.84027767181396,146.941650390625 -6.90444469451904,146.944976806641 -6.95388889312744,146.946350097656 -6.95944499969482,146.948577880859 -6.96416664123535,146.955230712891 -6.97111129760742,147.0244140625 -7.03694438934326,147.037475585938 -7.04444408416748,147.130798339844 -7.20361137390137,147.140258789062 -7.22111129760742,147.144439697266 -7.23083305358887,147.146362304688 -7.24916648864746,147.145812988281 -7.26194477081299,147.141662597656 -7.27166652679443,147.140258789062 -7.27694511413574,147.137481689453 -7.29472255706787,147.139709472656 -7.32527828216553,147.1533203125 -7.38305473327637,147.154693603516 -7.38861179351807,147.178588867188 -7.46388912200928,147.210784912109 -7.49027729034424,147.216369628906 -7.49166679382324,147.297210693359 -7.5038890838623,147.303314208984 -7.50472259521484,147.320526123047 -7.50527858734131,147.332183837891 -7.50333404541016,147.3369140625 -7.50527858734131,147.418579101562 -7.56722259521484,147.457733154297 -7.5977783203125,147.641357421875 -7.77555561065674,147.666656494141 -7.79111099243164,147.670806884766 -7.79388904571533,147.693298339844 -7.82583332061768,147.696075439453 -7.83527755737305,147.701629638672 -7.87055492401123,147.701629638672 -7.8841667175293,147.700805664062 -7.89027786254883,147.701629638672 -7.90333366394043,147.703033447266 -7.90861129760742,147.710510253906 -7.92166614532471,147.715240478516 -7.92916679382324,147.718566894531 -7.93249988555908,147.731628417969 -7.9399995803833,147.741333007812 -7.94388866424561,147.756927490234 -7.94861030578613,147.776916503906 -7.93638801574707,147.782470703125 -7.93527698516846,147.804412841797 -7.93527698516846,147.854949951172 -7.93527698516846,147.866638183594 -7.93722152709961,147.876342773438 -7.94111061096191,147.888031005859 -7.94999980926514,147.911926269531 -7.96722221374512,147.935791015625 -7.98277759552002,147.939422607422 -7.98472213745117,147.974395751953 -7.99610900878906,147.979675292969 -8.03694534301758,147.982452392578 -8.04777908325195,147.985229492188 -8.05194473266602,147.9921875 -8.0586109161377,148.004425048828 -8.06666564941406,148.009979248047 -8.06666564941406,148.0263671875 -8.06277847290039,148.114685058594 -8.05527877807617,148.13525390625 -8.06611061096191,148.194976806641 -8.25194549560547,148.19970703125 -8.26749992370605,148.205810546875 -8.29527854919434,148.206634521484 -8.30138969421387,148.207183837891 -8.31083297729492,148.207183837891 -8.32055473327637,148.206634521484 -8.34000015258789,148.210784912109 -8.39305686950684,148.220245361328 -8.51027870178223,148.222198486328 -8.53388977050781,148.230529785156 -8.55972290039062,148.235229492188 -8.56861114501953,148.2421875 -8.57527732849121,148.271087646484 -8.59444427490234,148.300537109375 -8.61138916015625,148.318298339844 -8.60861015319824,148.327178955078 -8.60638809204102,148.331359863281 -8.60638809204102,148.347198486328 -8.61138916015625,148.351898193359 -8.61333274841309,148.376617431641 -8.62944412231445,148.443023681641 -8.67500114440918,148.44580078125 -8.67888832092285,148.478576660156 -8.73305511474609,148.479949951172 -8.73861122131348,148.479949951172 -8.75889015197754,148.489685058594 -8.84027671813965,148.494415283203 -8.86666488647461,148.530822753906 -8.99305534362793,148.534698486328 -9.00277900695801,148.536926269531 -9.00750160217285,148.5888671875 -9.07027816772461,148.604125976562 -9.08250045776367,148.614410400391 -9.0858325958252,148.695251464844 -9.10222244262695,148.719970703125 -9.10472106933594,148.725250244141 -9.10472106933594,148.753601074219 -9.10416603088379,148.782196044922 -9.10138893127441,148.842468261719 -9.09055519104004,149.067199707031 -9.04111099243164,149.071350097656 -9.03861236572266,149.137756347656 -9.00666809082031,149.221343994141 -8.99860954284668,149.255828857422 -8.99777793884277,149.259979248047 -8.99916648864746,149.309967041016 -9.01694488525391,149.314697265625 -9.01889038085938,149.316650390625 -9.02166748046875,149.322204589844 -9.03777885437012,149.338012695312 -9.12972068786621,149.328308105469 -9.15277862548828,149.325531005859 -9.15694427490234,149.316070556641 -9.16777801513672,149.311920166016 -9.17055511474609,149.291351318359 -9.18388938903809,149.181640625 -9.34916687011719,149.1796875 -9.35361099243164,149.178863525391 -9.35972213745117,149.178863525391 -9.37333297729492,149.181091308594 -9.38500022888184,149.184417724609 -9.39500045776367,149.208312988281 -9.45249938964844,149.219970703125 -9.47472190856934,149.227752685547 -9.48749923706055,149.231079101562 -9.49110984802246,149.234405517578 -9.49444389343262,149.243286132812 -9.49916648864746,149.266662597656 -9.51000022888184,149.271636962891 -9.5119457244873,149.2783203125 -9.5119457244873,149.28857421875 -9.50861167907715,149.301635742188 -9.50777816772461,149.307189941406 -9.5091667175293,149.348846435547 -9.52194595336914,149.437469482422 -9.57138824462891,149.439422607422 -9.59111022949219,149.440795898438 -9.59638786315918,149.444122314453 -9.59972190856934,149.454406738281 -9.60305404663086,149.662200927734 -9.60722160339355,149.739410400391 -9.60166549682617,149.746337890625 -9.60166549682617,149.758026123047 -9.6038875579834,149.764984130859 -9.60916519165039,149.771087646484 -9.61666488647461,149.775268554688 -9.61944389343262,149.780548095703 -9.6208324432373,149.874389648438 -9.6422233581543,149.880798339844 -9.64305686950684,149.9033203125 -9.64361190795898,149.910247802734 -9.64361190795898,149.94580078125 -9.6422233581543,149.956634521484 -9.63972282409668,149.960784912109 -9.6369457244873,149.982727050781 -9.63138771057129,150.008880615234 -9.63138771057129,150.049133300781 -9.67944526672363,150.051361083984 -9.68416595458984,150.053314208984 -9.68888854980469,150.056915283203 -9.70999908447266,150.056915283203 -9.71527671813965,150.055541992188 -9.72055435180664,150.051910400391 -9.72416687011719,149.988861083984 -9.75111198425293,149.926635742188 -9.76944541931152,149.863586425781 -9.78222274780273,149.857452392578 -9.78277778625488,149.852752685547 -9.78222274780273,149.841644287109 -9.77944564819336,149.835510253906 -9.77888870239258,149.808013916016 -9.7813892364502,149.769714355469 -9.7902774810791,149.764984130859 -9.79222297668457,149.739410400391 -9.80777740478516,149.727172851562 -9.81583404541016,149.720245361328 -9.82277679443359,149.717468261719 -9.8266658782959,149.716369628906 -9.83222198486328,149.717468261719 -9.83749961853027,149.721069335938 -9.84749984741211,149.723022460938 -9.85249900817871,149.76220703125 -9.90166664123535,149.873840332031 -10.0169448852539,149.914154052734 -10.0488891601562,149.926635742188 -10.0569438934326,149.935516357422 -10.0616655349731,149.982727050781 -10.081111907959,149.98828125 -10.0825004577637,149.994415283203 -10.0819444656372,150.003326416016 -10.0772228240967,150.013610839844 -10.0736103057861,150.019714355469 -10.073055267334,150.184143066406 -10.0933322906494,150.189147949219 -10.0952777862549,150.236358642578 -10.1283321380615,150.259704589844 -10.1527786254883,150.29052734375 -10.1830558776855,150.298583984375 -10.1883344650269,150.308319091797 -10.1924991607666,150.352752685547 -10.1999988555908,150.382171630859 -10.2047214508057,150.400268554688 -10.2072219848633,150.579681396484 -10.2411098480225,150.61328125 -10.2755565643311,150.618011474609 -10.2775001525879,150.63525390625 -10.280834197998,150.641357421875 -10.2813892364502,150.647491455078 -10.280834197998,150.775543212891 -10.2613906860352,150.780548095703 -10.2591667175293,150.803588867188 -10.2486095428467,150.815521240234 -10.2397212982178,150.81884765625 -10.2363872528076,150.824981689453 -10.2316665649414,150.829681396484 -10.2294454574585,150.844116210938 -10.2247219085693,150.862731933594 -10.2227764129639,150.869415283203 -10.2227764129639,150.877746582031 -10.2283334732056,150.878295898438 -10.2316665649414,150.870788574219 -10.2377777099609,150.861907958984 -10.2424983978271,150.727752685547 -10.3125,150.641937255859 -10.3494434356689,150.636383056641 -10.3508319854736,150.631072998047 -10.3508319854736,150.602172851562 -10.3502769470215,150.596069335938 -10.3494434356689,150.547485351562 -10.3355560302734,150.496063232422 -10.3186111450195,150.438568115234 -10.3036117553711,150.421905517578 -10.3011112213135,150.415802001953 -10.3002777099609,150.406372070312 -10.3044452667236,150.369110107422 -10.3219451904297,150.358306884766 -10.3313884735107,150.356353759766 -10.3361110687256,150.348571777344 -10.3758316040039,150.346618652344 -10.3875007629395,150.352172851562 -10.3952789306641,150.356903076172 -10.3975009918213,150.568572998047 -10.4627780914307,150.6494140625 -10.4755554199219,150.657745361328 -10.4811115264893,150.663299560547 -10.4891662597656,150.689971923828 -10.5502777099609,150.691925048828 -10.5550003051758,150.691345214844 -10.5611114501953,150.688568115234 -10.5652770996094,150.680267333984 -10.5774993896484,150.675537109375 -10.5794448852539,150.568023681641 -10.6219444274902,150.556365966797 -10.6238880157471,150.522766113281 -10.6191654205322,150.492736816406 -10.6191654205322,150.481628417969 -10.6219444274902,150.477447509766 -10.6244430541992,150.47412109375 -10.6277770996094,150.44384765625 -10.6588897705078,150.428314208984 -10.6877784729004,150.424133300781 -10.6905555725098,150.369964599609 -10.6872215270996,150.268585205078 -10.6886119842529,150.209686279297 -10.7005558013916,150.113006591797 -10.6674995422363,150.099975585938 -10.6575012207031,150.059417724609 -10.6258316040039,150.028045654297 -10.5894432067871,150.016937255859 -10.5733337402344,150.013031005859 -10.5705547332764,150.007476806641 -10.5691661834717,149.91552734375 -10.5577774047852,149.898590087891 -10.5597229003906,149.896362304688 -10.5625,149.893585205078 -10.5633344650269,149.888305664062 -10.5619449615479,149.862182617188 -10.5544452667236,149.852752685547 -10.5502777099609,149.850524902344 -10.5469455718994,149.875244140625 -10.5100002288818,149.878570556641 -10.5066680908203,149.883331298828 -10.5044460296631,149.901916503906 -10.5025005340576,149.942474365234 -10.5025005340576,149.964416503906 -10.5025005340576,149.968292236328 -10.5052795410156,149.971069335938 -10.5094451904297,149.97802734375 -10.5161113739014,149.989685058594 -10.5180568695068,150.016937255859 -10.5113906860352,150.022491455078 -10.5100002288818,150.031372070312 -10.5052795410156,150.039703369141 -10.5,150.078857421875 -10.4627780914307,150.064422607422 -10.4561100006104,149.990234375 -10.4372215270996,149.866363525391 -10.3980560302734,149.806091308594 -10.3677768707275,149.785522460938 -10.3583335876465,149.758026123047 -10.3461112976074,149.747741699219 -10.3427772521973,149.723846435547 -10.3394432067871,149.683868408203 -10.3380546569824,149.6640625 -10.3398141860962)),((152.004425048828 -2.67000007629395,151.972747802734 -2.66888904571533,151.961090087891 -2.66805553436279,151.957733154297 -2.66472196578979,151.955535888672 -2.65999984741211,151.953582763672 -2.64833354949951,151.954406738281 -2.64222240447998,151.958312988281 -2.63249969482422,151.972747802734 -2.60583353042603,151.979675292969 -2.59888887405396,151.983856201172 -2.59611082077026,151.995239257812 -2.59555530548096,152.000823974609 -2.5969443321228,152.010528564453 -2.60111141204834,152.018585205078 -2.60638904571533,152.022216796875 -2.6100001335144,152.035247802734 -2.63111114501953,152.037200927734 -2.63583326339722,152.038024902344 -2.64222240447998,152.029693603516 -2.66111087799072,152.026916503906 -2.6652774810791,152.022216796875 -2.66750001907349,152.004425048828 -2.67000007629395)),((151.959136962891 -2.84611082077026,151.946624755859 -2.84472227096558,151.941345214844 -2.84333324432373,151.937194824219 -2.8405556678772,151.931640625 -2.83249998092651,151.921905517578 -2.80777788162231,151.920806884766 -2.80222225189209,151.928863525391 -2.7186107635498,151.9296875 -2.71250009536743,151.932464599609 -2.70833349227905,151.939147949219 -2.70833349227905,151.944702148438 -2.70972204208374,151.985778808594 -2.72499990463257,151.989959716797 -2.72749996185303,151.996612548828 -2.7344446182251,152.006378173828 -2.74555540084839,152.009155273438 -2.74944448471069,152.009704589844 -2.75583362579346,152.011932373047 -2.79055595397949,152.011932373047 -2.81805562973022,152.009704589844 -2.82277774810791,152.002197265625 -2.82888889312744,151.959136962891 -2.84611082077026)),((152.063873291016 -3.00222253799438,152.059143066406 -3,152.035247802734 -2.98277759552002,152.0283203125 -2.97555541992188,151.960510253906 -2.88722229003906,151.959686279297 -2.8808331489563,151.959686279297 -2.86861085891724,151.960510253906 -2.86250019073486,151.963287353516 -2.85833358764648,151.973571777344 -2.84805536270142,151.978302001953 -2.84611082077026,151.984954833984 -2.84611082077026,152.072204589844 -2.92138910293579,152.078857421875 -2.9283332824707,152.083862304688 -2.93694448471069,152.087188720703 -2.9472222328186,152.089141845703 -2.95888900756836,152.088562011719 -2.96527767181396,152.086639404297 -2.96999979019165,152.073577880859 -2.99805545806885,152.069976806641 -3.00138902664185,152.063873291016 -3.00222253799438)),((150.773590087891 -2.98555564880371,150.768035888672 -2.9844446182251,150.766082763672 -2.97944402694702,150.773040771484 -2.97249984741211,150.788024902344 -2.96027803421021,150.795532226562 -2.95416688919067,150.870788574219 -2.91249990463257,150.879119873047 -2.9088888168335,150.903045654297 -2.90833330154419,150.908599853516 -2.90833330154419,150.913299560547 -2.91027784347534,150.941345214844 -2.9219446182251,151.021087646484 -2.96305561065674,151.023590087891 -2.96722221374512,151.021636962891 -2.9719443321228,151.003875732422 -2.98166656494141,150.999114990234 -2.98361110687256,150.992736816406 -2.9844446182251,150.882446289062 -2.9686107635498,150.872192382812 -2.96527767181396,150.855804443359 -2.9622220993042,150.838012695312 -2.95972204208374,150.831909179688 -2.96027803421021,150.773590087891 -2.98555564880371)),((152.640808105469 -3.23000001907349,152.636108398438 -3.2277774810791,152.605224609375 -3.20388889312744,152.577178955078 -3.17722225189209,152.538879394531 -3.1061110496521,152.537475585938 -3.10055589675903,152.537475585938 -3.09499979019165,152.539428710938 -3.09027767181396,152.553863525391 -3.07055568695068,152.558013916016 -3.06777811050415,152.590240478516 -3.05194425582886,152.599700927734 -3.04805564880371,152.606079101562 -3.04722261428833,152.640258789062 -3.04305553436279,152.644989013672 -3.04527807235718,152.648590087891 -3.04861116409302,152.667755126953 -3.12944412231445,152.668853759766 -3.14861106872559,152.668853759766 -3.15527772903442,152.667755126953 -3.16083335876465,152.654693603516 -3.21638870239258,152.6533203125 -3.22166633605957,152.646362304688 -3.22861099243164,152.640808105469 -3.23000001907349)),((153.343292236328 -3.41666650772095,153.265258789062 -3.40722227096558,153.262481689453 -3.40444421768188,153.263885498047 -3.39888906478882,153.269989013672 -3.39277791976929,153.301635742188 -3.36944437026978,153.333587646484 -3.37138891220093,153.337188720703 -3.375,153.346069335938 -3.38666677474976,153.348022460938 -3.39138889312744,153.347473144531 -3.39750003814697,153.345245361328 -3.41194438934326,153.343292236328 -3.41666650772095)),((154.818572998047 -3.53027772903442,154.795257568359 -3.44138860702515,154.794708251953 -3.43249988555908,154.796081542969 -3.4283332824707,154.799407958984 -3.42500019073486,154.825531005859 -3.4713888168335,154.830261230469 -3.48027753829956,154.833862304688 -3.50416707992554,154.833038330078 -3.51027822494507,154.818572998047 -3.53027772903442)),((153.242462158203 -3.49944448471069,153.237182617188 -3.49805545806885,153.211090087891 -3.48861122131348,153.206909179688 -3.48583316802979,153.192474365234 -3.47277736663818,153.19384765625 -3.4686107635498,153.197204589844 -3.46527767181396,153.220520019531 -3.44888877868652,153.22412109375 -3.4466667175293,153.22802734375 -3.44555521011353,153.233581542969 -3.4466667175293,153.239959716797 -3.45444440841675,153.255554199219 -3.47972202301025,153.259704589844 -3.48916673660278,153.26025390625 -3.49527788162231,153.258331298828 -3.49888896942139,153.242462158203 -3.49944448471069)),((153.639434814453 -4.14083385467529,153.634429931641 -4.13861179351807,153.588012695312 -4.10583305358887,153.585235595703 -4.10194396972656,153.584411621094 -4.09583377838135,153.585235595703 -4.08944416046143,153.587188720703 -4.0847225189209,153.602172851562 -4.05888843536377,153.629669189453 -4.0313892364502,153.633880615234 -4.0286111831665,153.653045654297 -4.02055549621582,153.658599853516 -4.01916694641113,153.662750244141 -4.02194499969482,153.664703369141 -4.02666664123535,153.671630859375 -4.08000087738037,153.672210693359 -4.08611106872559,153.671630859375 -4.10472202301025,153.670257568359 -4.10999965667725,153.650268554688 -4.1380558013916,153.645538330078 -4.14027786254883,153.639434814453 -4.14083385467529)),((145.057739257812 -4.13527774810791,145.050811767578 -4.13527774810791,145.041351318359 -4.13249969482422,145.037200927734 -4.13000011444092,145.031646728516 -4.12166595458984,145.027770996094 -4.11222171783447,145.0263671875 -4.10666656494141,145.022216796875 -4.07666683197021,145.0263671875 -4.06694507598877,145.031646728516 -4.05888843536377,145.036651611328 -4.05666637420654,145.06884765625 -4.04500007629395,145.079132080078 -4.04777812957764,145.095520019531 -4.05888843536377,145.101623535156 -4.06638813018799,145.107177734375 -4.07527828216553,145.110504150391 -4.09222221374512,145.109954833984 -4.09833335876465,145.094696044922 -4.12444400787354,145.092193603516 -4.12833309173584,145.088012695312 -4.13138866424561,145.083312988281 -4.13333320617676,145.057739257812 -4.13527774810791)),((150.74609375 -6.13554954528809,150.729675292969 -6.14666748046875,150.724975585938 -6.14861106872559,150.707183837891 -6.15555572509766,150.668853759766 -6.16833305358887,150.663879394531 -6.16916656494141,150.661102294922 -6.16499996185303,150.659149169922 -6.15333366394043,150.657196044922 -6.14861106872559,150.652191162109 -6.14666748046875,150.63525390625 -6.14861106872559,150.509704589844 -6.23499965667725,150.484954833984 -6.25833415985107,150.480255126953 -6.26722240447998,150.473571777344 -6.27388954162598,150.468566894531 -6.2761116027832,150.406372070312 -6.29305553436279,150.400268554688 -6.29361152648926,150.222747802734 -6.28833293914795,150.211639404297 -6.2761116027832,150.188293457031 -6.25833415985107,150.184143066406 -6.25555610656738,150.180816650391 -6.25500011444092,150.170532226562 -6.25694465637207,150.080810546875 -6.28000068664551,150.038879394531 -6.29916667938232,150.018310546875 -6.32361125946045,150.016387939453 -6.30388832092285,150.014434814453 -6.29916667938232,150.010803222656 -6.29583358764648,149.98828125 -6.27722263336182,149.984130859375 -6.2747220993042,149.978576660156 -6.27333354949951,149.972473144531 -6.27388954162598,149.894989013672 -6.29249954223633,149.889709472656 -6.29249954223633,149.847198486328 -6.29249954223633,149.844421386719 -6.29249954223633,149.842193603516 -6.29249954223633,149.686645507812 -6.30527782440186,149.634704589844 -6.30805492401123,149.609405517578 -6.29249954223633,149.605224609375 -6.28972244262695,149.574981689453 -6.26500034332275,149.571624755859 -6.26166725158691,149.555236816406 -6.22694492340088,149.539428710938 -6.19777774810791,149.510803222656 -6.15277767181396,149.489410400391 -6.12611103057861,149.482452392578 -6.11944389343262,149.467468261719 -6.10972213745117,149.444976806641 -6.09805583953857,149.341339111328 -6.06083297729492,149.335784912109 -6.05944442749023,149.311920166016 -6.05722236633301,149.289978027344 -6.06277751922607,149.163879394531 -6.11250019073486,149.138580322266 -6.14861106872559,149.131072998047 -6.15472221374512,149.119415283203 -6.15694427490234,149.069427490234 -6.16416645050049,149.063018798828 -6.16499996185303,149.056915283203 -6.16416645050049,149.052185058594 -6.16222190856934,149.049407958984 -6.15805530548096,149.048034667969 -6.15277767181396,149.048034667969 -6.14583396911621,149.050262451172 -6.14111137390137,149.054962158203 -6.13916683197021,149.061096191406 -6.13833332061768,149.067199707031 -6.14583396911621,149.071350097656 -6.14861106872559,149.075531005859 -6.14583396911621,149.079681396484 -6.13638877868652,149.078857421875 -6.11944389343262,149.071899414062 -6.09277820587158,149.055541992188 -6.04444408416748,149.039978027344 -6.03694438934326,148.983032226562 -6.01972198486328,148.942474365234 -6.00833415985107,148.920654296875 -6.00002384185791,148.882995605469 -5.98166465759277,148.878814697266 -5.94748497009277,148.876068115234 -5.9436616897583,148.764434814453 -5.86499118804932,148.704650878906 -5.84858131408691,148.699554443359 -5.84745788574219,148.589721679688 -5.82837104797363,148.528045654297 -5.82837104797363,148.401672363281 -5.78336238861084,148.391967773438 -5.77940940856934,148.3876953125 -5.77660369873047,148.366607666016 -5.75592136383057,148.359771728516 -5.74921321868896,148.339324951172 -5.7143726348877,148.330780029297 -5.69515228271484,148.323089599609 -5.67537689208984,148.321655273438 -5.66980838775635,148.316467285156 -5.62802600860596,148.354675292969 -5.50166702270508,148.358001708984 -5.49277782440186,148.359954833984 -5.48805522918701,148.370239257812 -5.4777774810791,148.378570556641 -5.47249984741211,148.428588867188 -5.45111179351807,148.450531005859 -5.45527839660645,148.504699707031 -5.48333263397217,148.511657714844 -5.48999977111816,148.519714355469 -5.50250053405762,148.618286132812 -5.50500011444092,148.883605957031 -5.49694442749023,148.961639404297 -5.47361087799072,148.973297119141 -5.47166633605957,148.985778808594 -5.47305583953857,149.000823974609 -5.47833347320557,149.122192382812 -5.52416706085205,149.126892089844 -5.5261116027832,149.189147949219 -5.55833339691162,149.209686279297 -5.57194519042969,149.2138671875 -5.57472229003906,149.216064453125 -5.57944488525391,149.220764160156 -5.60611152648926,149.270812988281 -5.59444427490234,149.310516357422 -5.58611106872559,149.425537109375 -5.56722259521484,149.549133300781 -5.53861141204834,149.566925048828 -5.52888870239258,149.581909179688 -5.52333354949951,149.611358642578 -5.51861095428467,149.668304443359 -5.51944446563721,149.680541992188 -5.55416679382324,149.680541992188 -5.561110496521,149.685516357422 -5.56305503845215,149.692199707031 -5.56305503845215,149.710784912109 -5.5625,149.875244140625 -5.5363883972168,149.880798339844 -5.53499984741211,149.887481689453 -5.53166675567627,149.916381835938 -5.51194477081299,149.928588867188 -5.50361156463623,149.956085205078 -5.47638893127441,149.964416503906 -5.46416664123535,149.981353759766 -5.4333324432373,149.984130859375 -5.42249965667725,149.983581542969 -5.41638851165771,149.981353759766 -5.41166687011719,149.97802734375 -5.40833377838135,149.973297119141 -5.4061107635498,149.954132080078 -5.40472221374512,149.950531005859 -5.40138912200928,149.923034667969 -5.36055564880371,149.917755126953 -5.35222244262695,149.918304443359 -5.34611129760742,149.928588867188 -5.31527709960938,149.934692382812 -5.30722236633301,150.002777099609 -5.16944408416748,150.015533447266 -5.05749988555908,150.019714355469 -5.04777812957764,150.029968261719 -5.03083324432373,150.034149169922 -5.02805614471436,150.0888671875 -5.00777816772461,150.095794677734 -5.00777816772461,150.121337890625 -5.00972270965576,150.126617431641 -5.01111125946045,150.154693603516 -5.02388954162598,150.181640625 -5.03888893127441,150.19384765625 -5.04722213745117,150.199401855469 -5.05527782440186,150.203582763672 -5.0649995803833,150.204956054688 -5.07055568695068,150.203582763672 -5.07583332061768,150.184143066406 -5.09833335876465,150.180816650391 -5.10194396972656,150.164428710938 -5.11277770996094,150.154693603516 -5.11694431304932,150.132720947266 -5.12222194671631,150.101348876953 -5.13194370269775,150.091644287109 -5.13583374023438,150.082733154297 -5.14138889312744,150.072479248047 -5.15166664123535,150.064422607422 -5.16388893127441,150.061645507812 -5.17472171783447,150.04248046875 -5.3086109161377,150.062194824219 -5.36388874053955,150.121337890625 -5.51250076293945,150.123291015625 -5.51722240447998,150.143859863281 -5.5377779006958,150.164428710938 -5.55138874053955,150.178863525391 -5.55749988555908,150.184143066406 -5.55888843536377,150.282196044922 -5.57055568695068,150.291076660156 -5.57055568695068,150.296630859375 -5.569167137146,150.300811767578 -5.56638813018799,150.306915283203 -5.55888843536377,150.318023681641 -5.54194450378418,150.319976806641 -5.53722190856934,150.323303222656 -5.53361129760742,150.326904296875 -5.53027820587158,150.345245361328 -5.51472282409668,150.412475585938 -5.45861148834229,150.422760009766 -5.45527839660645,150.488555908203 -5.44694423675537,150.511108398438 -5.4505558013916,150.574127197266 -5.47638893127441,150.578308105469 -5.47916698455811,150.595520019531 -5.4961109161377,150.601623535156 -5.51722240447998,150.611083984375 -5.54194450378418,150.61328125 -5.54666709899902,150.616058349609 -5.55083274841309,150.624114990234 -5.55611038208008,150.644134521484 -5.55694389343262,150.677917480469 -5.55129909515381,150.693298339844 -5.54749965667725,150.698852539062 -5.54611110687256,150.914154052734 -5.4908332824707,150.924407958984 -5.48722171783447,150.979125976562 -5.44499969482422,151.003051757812 -5.42111110687256,151.011383056641 -5.4088888168335,151.015533447266 -5.39944458007812,151.018859863281 -5.38916683197021,151.023040771484 -5.37277698516846,151.023040771484 -5.3658332824707,151.018310546875 -5.34333324432373,151.018310546875 -5.33666706085205,151.018859863281 -5.33027839660645,151.0244140625 -5.28805541992188,151.028594970703 -5.27166652679443,151.038879394531 -5.24111080169678,151.046936035156 -5.22194480895996,151.066070556641 -5.18583297729492,151.071075439453 -5.17694473266602,151.084686279297 -5.1563892364502,151.096923828125 -5.14277839660645,151.26220703125 -4.98638820648193,151.266387939453 -4.98388862609863,151.357452392578 -4.94749927520752,151.441070556641 -4.93666648864746,151.513610839844 -4.93805503845215,151.604675292969 -4.96805572509766,151.608856201172 -4.97083377838135,151.614959716797 -4.97000026702881,151.641082763672 -4.95499992370605,151.648590087891 -4.94888877868652,151.654144287109 -4.94083309173584,151.676086425781 -4.90805530548096,151.684417724609 -4.88890266418457,151.687744140625 -4.86499977111816,151.682189941406 -4.81444454193115,151.658325195312 -4.61638832092285,151.630798339844 -4.50638961791992,151.62744140625 -4.49749946594238,151.598022460938 -4.43805503845215,151.592468261719 -4.43000030517578,151.588287353516 -4.42722225189209,151.547210693359 -4.35999965667725,151.501373291016 -4.23916625976562,151.5 -4.23388862609863,151.5 -4.22694492340088,151.503326416016 -4.21666622161865,151.508331298828 -4.20777797698975,151.511657714844 -4.20444488525391,151.536926269531 -4.18194389343262,151.783050537109 -4.20583343505859,151.841918945312 -4.22472190856934,151.852172851562 -4.22833347320557,151.857727050781 -4.23638820648193,151.859680175781 -4.24111080169678,151.861083984375 -4.24666690826416,151.863861083984 -4.27138900756836,151.869964599609 -4.28555583953857,151.878295898438 -4.29805564880371,151.884429931641 -4.30555534362793,151.895263671875 -4.3149995803833,151.904144287109 -4.32000064849854,151.9638671875 -4.33555603027344,151.969421386719 -4.33694458007812,151.974975585938 -4.33694458007812,151.984405517578 -4.33277797698975,151.991912841797 -4.32666683197021,152.138580322266 -4.20444488525391,152.141357421875 -4.20027828216553,152.145538330078 -4.19083309173584,152.150817871094 -4.17555522918701,152.153594970703 -4.16472244262695,152.153594970703 -4.15777778625488,152.156372070312 -4.15388870239258,152.161926269531 -4.14833354949951,152.166076660156 -4.14555549621582,152.171356201172 -4.14416694641113,152.177764892578 -4.14500045776367,152.185241699219 -4.14888954162598,152.214691162109 -4.16611099243164,152.235229492188 -4.2072229385376,152.239410400391 -4.21666622161865,152.2421875 -4.2344446182251,152.2421875 -4.24111080169678,152.240783691406 -4.24666690826416,152.238006591797 -4.24805545806885,152.226898193359 -4.25083351135254,152.202453613281 -4.24666690826416,152.198303222656 -4.24388885498047,152.195526123047 -4.23999977111816,152.194122314453 -4.2344446182251,152.194122314453 -4.22749996185303,152.192749023438 -4.22222232818604,152.189971923828 -4.21805572509766,152.186645507812 -4.21472263336182,152.181640625 -4.21527767181396,152.176910400391 -4.21749973297119,152.172760009766 -4.22694492340088,152.16943359375 -4.24388885498047,152.170806884766 -4.28222274780273,152.171356201172 -4.28833293914795,152.172210693359 -4.29333305358887,152.174133300781 -4.29666709899902,152.1796875 -4.30472183227539,152.186645507812 -4.31166648864746,152.190521240234 -4.31444454193115,152.195526123047 -4.31638813018799,152.263885498047 -4.33500003814697,152.286651611328 -4.33972263336182,152.305236816406 -4.34166717529297,152.355804443359 -4.34305572509766,152.401641845703 -4.61083316802979,152.403045654297 -4.62305545806885,152.405242919922 -4.66888904571533,152.405822753906 -4.68888854980469,152.394989013672 -4.76111125946045,152.389434814453 -4.78305530548096,152.386108398438 -4.79333305358887,152.336090087891 -4.87527751922607,152.333312988281 -4.87916660308838,152.294128417969 -4.92916679382324,152.268035888672 -4.95777797698975,152.241333007812 -4.9844446182251,152.233306884766 -4.98999977111816,152.161102294922 -5.00694465637207,152.157196044922 -5.00694465637207,152.123565673828 -4.99944400787354,152.112457275391 -4.99666690826416,152.088562011719 -4.98638820648193,152.083038330078 -4.98499965667725,152.050262451172 -4.97972202301025,151.996612548828 -4.97277736663818,151.990509033203 -4.97222232818604,151.984954833984 -4.97361087799072,151.978302001953 -4.98027801513672,151.974975585938 -4.98388862609863,151.970794677734 -4.993332862854,151.968017578125 -5.0041675567627,151.966644287109 -5.02333354949951,151.964691162109 -5.10472202301025,151.969970703125 -5.14833354949951,151.97412109375 -5.15777778625488,151.979675292969 -5.16583347320557,151.993286132812 -5.17555522918701,152.069427490234 -5.23499965667725,152.07275390625 -5.23833274841309,152.118011474609 -5.29222202301025,152.124114990234 -5.29972171783447,152.129669189453 -5.30777740478516,152.144134521484 -5.34138870239258,152.145538330078 -5.34666728973389,152.147491455078 -5.36388874053955,152.144134521484 -5.37416648864746,152.131072998047 -5.40222263336182,152.123565673828 -5.41638851165771,152.096069335938 -5.4572229385376,151.972747802734 -5.53111171722412,151.968566894531 -5.53361129760742,151.841918945312 -5.59722232818604,151.825531005859 -5.60111141204834,151.818572998047 -5.60111141204834,151.808319091797 -5.5977783203125,151.779418945312 -5.58555603027344,151.771362304688 -5.58000087738037,151.759155273438 -5.55138874053955,151.752777099609 -5.54388904571533,151.748565673828 -5.54111099243164,151.705535888672 -5.53111171722412,151.699401855469 -5.53027820587158,151.491638183594 -5.52833366394043,151.473297119141 -5.53027820587158,151.467742919922 -5.53166675567627,151.459411621094 -5.53583335876465,151.454132080078 -5.54111099243164,151.44384765625 -5.58555603027344,151.444427490234 -5.59166717529297,151.402770996094 -5.75137805938721,151.384704589844 -5.80720043182373,151.317779541016 -5.84993076324463,151.165649414062 -5.95807075500488,151.003051757812 -6.02250003814697,150.940795898438 -6.0286111831665,150.855804443359 -6.04083347320557,150.811920166016 -6.07638931274414,150.812744140625 -6.08944416046143,150.793304443359 -6.11805534362793,150.775543212891 -6.13916683197021,150.771636962891 -6.14166736602783,150.74609375 -6.13554954528809)),((154.153869628906 -4.44222164154053,154.128570556641 -4.3841667175293,154.126617431641 -4.37944412231445,154.128021240234 -4.37388896942139,154.132720947266 -4.37166595458984,154.140808105469 -4.37055492401123,154.150543212891 -4.37444400787354,154.152770996094 -4.37944412231445,154.1533203125 -4.3855562210083,154.155242919922 -4.43805503845215,154.153869628906 -4.44222164154053)),((145.951354980469 -4.76444530487061,145.944427490234 -4.76444530487061,145.93359375 -4.76194477081299,145.918579101562 -4.75638961791992,145.898590087891 -4.74194431304932,145.891662597656 -4.73527717590332,145.875244140625 -4.69694423675537,145.873840332031 -4.69138813018799,145.872467041016 -4.67249965667725,145.873840332031 -4.66694450378418,145.892486572266 -4.6094446182251,145.8994140625 -4.59583377838135,145.904693603516 -4.58777809143066,145.914978027344 -4.57750034332275,145.966369628906 -4.53305530548096,145.970520019531 -4.53027820587158,145.975250244141 -4.52833366394043,145.981628417969 -4.52750015258789,146.011657714844 -4.5494441986084,146.026916503906 -4.56166648864746,146.053588867188 -4.5963888168335,146.055541992188 -4.60138893127441,146.054138183594 -4.66138935089111,146.04052734375 -4.70916652679443,146.037750244141 -4.71333408355713,146.027465820312 -4.72361087799072,146.019989013672 -4.72972202301025,145.994415283203 -4.74555492401123,145.961639404297 -4.76111125946045,145.951354980469 -4.76444530487061)),((159.513305664062 -4.58166694641113,159.511383056641 -4.57666683197021,159.515533447266 -4.53972244262695,159.518859863281 -4.5363883972168,159.522216796875 -4.55083274841309,159.523040771484 -4.56388854980469,159.519714355469 -4.57388973236084,159.516937255859 -4.57805633544922,159.513305664062 -4.58166694641113)),((149.552459716797 -4.72083377838135,149.546356201172 -4.72027778625488,149.475799560547 -4.71138954162598,149.470245361328 -4.71000003814697,149.465515136719 -4.70777797698975,149.461364746094 -4.70527839660645,149.457733154297 -4.70166683197021,149.455810546875 -4.69694423675537,149.454406738281 -4.68472194671631,149.455810546875 -4.67916679382324,149.468017578125 -4.66416645050049,149.506652832031 -4.64777851104736,149.512756347656 -4.64694499969482,149.518859863281 -4.64777851104736,149.529968261719 -4.65055561065674,149.540252685547 -4.65388870239258,149.543579101562 -4.65722274780273,149.549133300781 -4.66555595397949,149.559967041016 -4.68194389343262,149.563293457031 -4.69222164154053,149.564147949219 -4.70527839660645,149.562744140625 -4.71055603027344,149.560516357422 -4.71527767181396,149.557189941406 -4.7188892364502,149.552459716797 -4.72083377838135)),((146.240509033203 -4.85805511474609,146.234405517578 -4.85750007629395,146.215789794922 -4.85138893127441,146.2119140625 -4.84861087799072,146.201629638672 -4.83833312988281,146.199401855469 -4.83361148834229,146.198028564453 -4.82805633544922,146.200256347656 -4.81638813018799,146.202178955078 -4.81166648864746,146.215789794922 -4.79111099243164,146.219970703125 -4.78833293914795,146.232177734375 -4.78833293914795,146.238555908203 -4.79055595397949,146.241333007812 -4.79333305358887,146.256927490234 -4.81166648864746,146.262481689453 -4.81972217559814,146.263885498047 -4.82527828216553,146.263885498047 -4.83083343505859,146.261932373047 -4.83555603027344,146.250823974609 -4.85472202301025,146.246612548828 -4.85750007629395,146.240509033203 -4.85805511474609)),((149.152191162109 -4.92361068725586,149.133026123047 -4.91555595397949,149.128845214844 -4.9127779006958,149.122741699219 -4.90527820587158,149.118560791016 -4.89555549621582,149.118011474609 -4.88944435119629,149.119415283203 -4.8841667175293,149.122192382812 -4.88138866424561,149.156921386719 -4.86694431304932,149.161926269531 -4.86638832092285,149.165802001953 -4.86777782440186,149.175537109375 -4.87805557250977,149.178314208984 -4.88194370269775,149.181640625 -4.89222240447998,149.178863525391 -4.89638900756836,149.156921386719 -4.92305564880371,149.152191162109 -4.92361068725586)),((154.63720703125 -5.45861148834229,154.618011474609 -5.43138885498047,154.5869140625 -5.34472274780273,154.565795898438 -5.27666664123535,154.5302734375 -5.13388919830322,154.532196044922 -5.12222194671631,154.541076660156 -5.10388851165771,154.546630859375 -5.09555530548096,154.558319091797 -5.08000087738037,154.598846435547 -5.03083324432373,154.605529785156 -5.02388954162598,154.620513916016 -5.01861095428467,154.63916015625 -5.01638889312744,154.646087646484 -5.01638889312744,154.6513671875 -5.01777839660645,154.658874511719 -5.02388954162598,154.665802001953 -5.03083324432373,154.671356201172 -5.03888893127441,154.726898193359 -5.19722175598145,154.728302001953 -5.20277786254883,154.728302001953 -5.21638870239258,154.69384765625 -5.41833305358887,154.692474365234 -5.42388916015625,154.687194824219 -5.43194389343262,154.675537109375 -5.44083309173584,154.63720703125 -5.45861148834229)),((147.135528564453 -5.45111179351807,147.121887207031 -5.44444370269775,147.009979248047 -5.35499954223633,147.008026123047 -5.3502779006958,147.002471923828 -5.30388832092285,147.008026123047 -5.25888919830322,147.009979248047 -5.24722194671631,147.013610839844 -5.23833274841309,147.017761230469 -5.23555564880371,147.109405517578 -5.19333267211914,147.121063232422 -5.19111061096191,147.128570556641 -5.19194412231445,147.134979248047 -5.19527721405029,147.191070556641 -5.248610496521,147.211639404297 -5.26916694641113,147.228851318359 -5.36388874053955,147.229949951172 -5.42111110687256,147.224670410156 -5.42944431304932,147.220520019531 -5.43194389343262,147.158874511719 -5.44833278656006,147.1533203125 -5.44972133636475,147.135528564453 -5.45111179351807)),((147.596618652344 -5.36305522918701,147.591918945312 -5.36111068725586,147.567199707031 -5.33916664123535,147.563873291016 -5.33583354949951,147.561645507812 -5.33111190795898,147.560516357422 -5.31888961791992,147.561645507812 -5.31333351135254,147.563873291016 -5.3086109161377,147.57080078125 -5.30166625976562,147.583038330078 -5.29361152648926,147.591918945312 -5.2902774810791,147.602172851562 -5.28805541992188,147.609130859375 -5.28805541992188,147.620788574219 -5.2902774810791,147.625518798828 -5.29222202301025,147.628845214844 -5.29555511474609,147.640533447266 -5.31666660308838,147.642761230469 -5.3216667175293,147.643310546875 -5.32777786254883,147.642761230469 -5.33388900756836,147.640533447266 -5.3386116027832,147.626892089844 -5.35222244262695,147.602172851562 -5.3619441986084,147.596618652344 -5.36305522918701)),((148.114685058594 -5.4688892364502,148.087463378906 -5.45527839660645,148.079132080078 -5.44972133636475,148.077178955078 -5.44499969482422,148.073028564453 -5.43000030517578,148.071624755859 -5.4244441986084,148.072204589844 -5.41833305358887,148.084686279297 -5.38972282409668,148.090789794922 -5.38222217559814,148.099700927734 -5.3774995803833,148.117462158203 -5.3841667175293,148.122192382812 -5.38638877868652,148.136657714844 -5.39944458007812,148.139434814453 -5.40333366394043,148.143585205078 -5.41305541992188,148.144989013672 -5.41833305358887,148.145538330078 -5.43833255767822,148.143585205078 -5.44972133636475,148.138031005859 -5.45805549621582,148.133880615234 -5.46083354949951,148.125793457031 -5.4661111831665,148.120788574219 -5.46833324432373,148.114685058594 -5.4688892364502)),((155.404083251953 -6,155.41552734375 -6.07638931274414,155.418853759766 -6.08666706085205,155.428588867188 -6.11111068725586,155.430541992188 -6.1158332824707,155.432739257812 -6.12083339691162,155.477172851562 -6.16916656494141,155.490783691406 -6.18277740478516,155.499114990234 -6.18805503845215,155.562744140625 -6.21749973297119,155.577178955078 -6.22361087799072,155.582733154297 -6.22500038146973,155.5888671875 -6.22416687011719,155.614959716797 -6.22000026702881,155.767761230469 -6.35583305358887,155.772491455078 -6.35777759552002,155.795257568359 -6.36250019073486,155.809692382812 -6.36861038208008,155.813598632812 -6.37138843536377,155.832733154297 -6.39861106872559,155.909698486328 -6.51222229003906,155.917755126953 -6.52444458007812,155.921905517578 -6.53416633605957,155.965789794922 -6.70555591583252,155.967193603516 -6.71111106872559,155.967742919922 -6.71722221374512,155.966644287109 -6.72277736663818,155.948028564453 -6.77583312988281,155.940521240234 -6.78861141204834,155.918579101562 -6.80777740478516,155.913024902344 -6.80916595458984,155.909698486328 -6.80555534362793,155.908874511719 -6.7994441986084,155.890533447266 -6.77972221374512,155.860778808594 -6.77500057220459,155.854675292969 -6.77444458007812,155.848571777344 -6.77500057220459,155.823852539062 -6.77777767181396,155.816375732422 -6.78055572509766,155.775268554688 -6.81444454193115,155.748565673828 -6.84249973297119,155.742462158203 -6.84999942779541,155.719696044922 -6.875,155.713012695312 -6.88194370269775,155.707458496094 -6.88333320617676,155.69384765625 -6.88333320617676,155.623840332031 -6.868332862854,155.558868408203 -6.85249996185303,155.4921875 -6.83027839660645,155.47802734375 -6.82416725158691,155.444976806641 -6.80916595458984,155.342742919922 -6.74361133575439,155.3388671875 -6.74111080169678,155.335235595703 -6.73750019073486,155.239959716797 -6.62249946594238,155.192749023438 -6.56055545806885,155.201629638672 -6.53472232818604,155.207183837891 -6.53472232818604,155.2099609375 -6.53055572509766,155.216064453125 -6.51638889312744,155.224975585938 -6.47749996185303,155.232452392578 -6.44416618347168,155.233306884766 -6.43805503845215,155.233306884766 -6.4244441986084,155.230529785156 -6.36305522918701,155.226348876953 -6.34694480895996,155.218841552734 -6.32916736602783,155.214141845703 -6.32027816772461,155.204406738281 -6.3086109161377,155.190795898438 -6.29500007629395,155.187194824219 -6.29166698455811,155.174987792969 -6.28333282470703,155.127746582031 -6.2761116027832,155.101623535156 -6.27722263336182,155.063293457031 -6.25694561004639,154.994110107422 -6.21666622161865,154.981628417969 -6.20861148834229,154.972198486328 -6.19777774810791,154.969970703125 -6.19277763366699,154.888580322266 -6.07916736602783,154.880249023438 -6.07361125946045,154.823577880859 -6.02805614471436,154.755645751953 -5.95617389678955,154.746643066406 -5.94450378417969,154.744384765625 -5.93978023529053,154.700469970703 -5.78020095825195,154.698577880859 -5.76851844787598,154.699432373047 -5.7623987197876,154.71826171875 -5.6700611114502,154.753601074219 -5.51805591583252,154.79052734375 -5.47916698455811,154.794128417969 -5.48250007629395,154.882446289062 -5.54333305358887,154.920806884766 -5.54999923706055,154.961090087891 -5.54666709899902,154.967468261719 -5.54611110687256,155.073577880859 -5.56166648864746,155.162353515625 -5.73234081268311,155.216064453125 -5.86872386932373,155.268798828125 -5.88423919677734,155.277679443359 -5.88895511627197,155.365020751953 -5.95777797698975,155.371643066406 -5.96472263336182,155.400543212891 -5.99583339691162,155.404083251953 -6)),((147.990478515625 -5.85603713989258,147.983520507812 -5.82075119018555,147.982116699219 -5.81519317626953,147.974609375 -5.79546737670898,147.972381591797 -5.79074478149414,147.968475341797 -5.78796863555908,147.945220947266 -5.77992534637451,147.93359375 -5.7777099609375,147.927490234375 -5.77854824066162,147.922790527344 -5.78049659729004,147.865112304688 -5.74775314331055,147.802154541016 -5.67277145385742,147.793273925781 -5.66138458251953,147.769958496094 -5.62221908569336,147.766052246094 -5.61277484893799,147.765228271484 -5.60666275024414,147.761108398438 -5.52833366394043,147.761932373047 -5.5222225189209,147.7802734375 -5.49416637420654,147.783874511719 -5.4908332824707,147.814697265625 -5.48472213745117,147.841918945312 -5.48999977111816,147.852172851562 -5.49361133575439,148.008605957031 -5.57611179351807,148.020812988281 -5.58416652679443,148.040802001953 -5.59861087799072,148.044128417969 -5.60194396972656,148.065307617188 -5.62758445739746,148.074279785156 -5.64482402801514,148.078460693359 -5.65427875518799,148.080444335938 -5.66595458984375,148.078552246094 -5.69124603271484,148.076629638672 -5.70347595214844,148.072540283203 -5.72654151916504,148.067840576172 -5.74905109405518,148.061492919922 -5.77711772918701,148.057586669922 -5.78656482696533,148.017150878906 -5.84463882446289,148.000762939453 -5.85269927978516,147.990478515625 -5.85603713989258)),((149.048034667969 -6.09555530548096,149.043304443359 -6.09333324432373,149.043853759766 -6.0886116027832,149.045257568359 -6.0872220993042,149.054138183594 -6.08388900756836,149.058319091797 -6.08666706085205,149.057739257812 -6.09138870239258,149.053588867188 -6.09416675567627,149.048034667969 -6.09555530548096)),((143.994415283203 -7.82583332061768,143.984680175781 -7.8230562210083,143.943572998047 -7.80277729034424,143.934692382812 -7.79805564880371,143.923583984375 -7.78861141204834,143.91748046875 -7.78111171722412,143.914703369141 -7.77694511413574,143.877746582031 -7.7186107635498,143.875793457031 -7.71388912200928,143.877166748047 -7.7097225189209,143.88134765625 -7.70694446563721,143.886657714844 -7.70833396911621,143.959411621094 -7.74222183227539,143.966918945312 -7.74833297729492,143.979125976562 -7.76333427429199,144.000549316406 -7.78999996185303,144.008026123047 -7.80277729034424,144.009429931641 -7.80833339691162,144.008605957031 -7.81416606903076,144.006652832031 -7.819167137146,143.999694824219 -7.82444477081299,143.994415283203 -7.82583332061768)),((145.193572998047 -7.86722183227539,145.186645507812 -7.86722183227539,145.182464599609 -7.86444473266602,145.180541992188 -7.86111068725586,145.177764892578 -7.83666706085205,145.178314208984 -7.83055591583252,145.182464599609 -7.82777786254883,145.185241699219 -7.83055591583252,145.191345214844 -7.84083366394043,145.197479248047 -7.85499954223633,145.198852539062 -7.86055564880371,145.197479248047 -7.86444473266602,145.193572998047 -7.86722183227539)),((143.727752685547 -8.10222244262695,143.697479248047 -8.08444404602051,143.683319091797 -8.07833290100098,143.661376953125 -8.07277679443359,143.618011474609 -8.07222175598145,143.599700927734 -8.07416725158691,143.588562011719 -8.0716667175293,143.582458496094 -8.06416702270508,143.569427490234 -8.04305648803711,143.566070556641 -8.03277778625488,143.565246582031 -8.02000045776367,143.568023681641 -8.01583480834961,143.574127197266 -8.01388931274414,143.629669189453 -8.00638961791992,143.635803222656 -8.00583457946777,143.642761230469 -8.00583457946777,143.651092529297 -8.00833511352539,143.66943359375 -8.0172233581543,143.682464599609 -8.02472305297852,143.697479248047 -8.03694534301758,143.707733154297 -8.04722213745117,143.731079101562 -8.0716667175293,143.737182617188 -8.07888793945312,143.739959716797 -8.08305549621582,143.741333007812 -8.0886116027832,143.739410400391 -8.09333229064941,143.733306884766 -8.10083198547363,143.727752685547 -8.10222244262695)),((143.66552734375 -8.17611122131348,143.654968261719 -8.17250061035156,143.625518798828 -8.15416717529297,143.621612548828 -8.15166664123535,143.618835449219 -8.14750099182129,143.607727050781 -8.13055419921875,143.604949951172 -8.11972045898438,143.604400634766 -8.11361122131348,143.604949951172 -8.10888862609863,143.609130859375 -8.10610961914062,143.636657714844 -8.09249877929688,143.642211914062 -8.09055519104004,143.654968261719 -8.0897216796875,143.679138183594 -8.09333229064941,143.688568115234 -8.09722137451172,143.700256347656 -8.10610961914062,143.707183837891 -8.11277770996094,143.710510253906 -8.11638832092285,143.716064453125 -8.12444305419922,143.718841552734 -8.13527870178223,143.719421386719 -8.15500068664551,143.7119140625 -8.16111183166504,143.702453613281 -8.1652774810791,143.683319091797 -8.1733341217041,143.677764892578 -8.17472267150879,143.66552734375 -8.17611122131348)),((143.685791015625 -8.24722099304199,143.659973144531 -8.241943359375,143.654418945312 -8.24055480957031,143.650268554688 -8.23777770996094,143.648315429688 -8.23305511474609,143.648864746094 -8.22694396972656,143.651641845703 -8.19972229003906,143.666656494141 -8.19305610656738,143.726898193359 -8.17388916015625,143.733306884766 -8.17472267150879,143.737182617188 -8.17722320556641,143.755828857422 -8.20527839660645,143.756378173828 -8.20861053466797,143.755249023438 -8.21388816833496,143.752471923828 -8.21805572509766,143.7421875 -8.22833251953125,143.734680175781 -8.23444366455078,143.718841552734 -8.23916625976562,143.697479248047 -8.24527740478516,143.685791015625 -8.24722099304199)),((143.687194824219 -8.43972206115723,143.680541992188 -8.43972206115723,143.670257568359 -8.43638801574707,143.651641845703 -8.42749977111816,143.630523681641 -8.40722274780273,143.610504150391 -8.38611221313477,143.584411621094 -8.3577766418457,143.607177734375 -8.33277702331543,143.612731933594 -8.33388900756836,143.653045654297 -8.34222221374512,143.658599853516 -8.3436107635498,143.66552734375 -8.34749984741211,143.672210693359 -8.35444450378418,143.677764892578 -8.36249923706055,143.692199707031 -8.39583396911621,143.694976806641 -8.40666770935059,143.698303222656 -8.42361068725586,143.698303222656 -8.43027877807617,143.696929931641 -8.43555641174316,143.692749023438 -8.43833351135254,143.687194824219 -8.43972206115723)),((143.57275390625 -8.49388885498047,143.559143066406 -8.49388885498047,143.509155273438 -8.48250007629395,143.498016357422 -8.47972106933594,143.493286132812 -8.4777774810791,143.354949951172 -8.41805648803711,143.318572998047 -8.39305686950684,143.315795898438 -8.38888931274414,143.314422607422 -8.38361167907715,143.314422607422 -8.37666511535645,143.319427490234 -8.36916542053223,143.326904296875 -8.3630542755127,143.331634521484 -8.36111068725586,143.339141845703 -8.35833358764648,143.342742919922 -8.3577766418457,143.356353759766 -8.3577766418457,143.494689941406 -8.3630542755127,143.573577880859 -8.37194442749023,143.578308105469 -8.37388801574707,143.581085205078 -8.37805557250977,143.616058349609 -8.46277809143066,143.616058349609 -8.4688892364502,143.613861083984 -8.47360992431641,143.610504150391 -8.47694396972656,143.583862304688 -8.49138832092285,143.578857421875 -8.49333190917969,143.57275390625 -8.49388885498047)),((143.632446289062 -8.73444366455078,143.60107421875 -8.6924991607666,143.585784912109 -8.67972183227539,143.487731933594 -8.62888717651367,143.3671875 -8.54472351074219,143.278869628906 -8.51027870178223,143.269989013672 -8.50555610656738,143.252777099609 -8.49527740478516,143.240509033203 -8.48722076416016,143.182189941406 -8.42972183227539,143.180816650391 -8.42416763305664,143.18359375 -8.42000007629395,143.211639404297 -8.4152774810791,143.217742919922 -8.41611099243164,143.227447509766 -8.42611122131348,143.233032226562 -8.43444442749023,143.251373291016 -8.45666694641113,143.261657714844 -8.46694374084473,143.274688720703 -8.47444343566895,143.324676513672 -8.48583221435547,143.371337890625 -8.49388885498047,143.422760009766 -8.51083374023438,143.467193603516 -8.52777862548828,143.644134521484 -8.66472244262695,143.647491455078 -8.66805648803711,143.651641845703 -8.67777824401855,143.653045654297 -8.68305587768555,143.653594970703 -8.68916702270508,143.653045654297 -8.7005558013916,143.641357421875 -8.72972106933594,143.638031005859 -8.73305511474609,143.632446289062 -8.73444366455078)),((151.144439697266 -8.8305549621582,151.094970703125 -8.7711124420166,151.10107421875 -8.63888931274414,151.05859375 -8.55166625976562,151.052459716797 -8.55222320556641,151.034698486328 -8.55222320556641,151.029144287109 -8.55083274841309,151.003051757812 -8.54277801513672,150.999694824219 -8.53944396972656,150.997741699219 -8.53472328186035,150.996917724609 -8.52861213684082,150.997741699219 -8.52250099182129,151.024993896484 -8.46694374084473,151.033325195312 -8.45472145080566,151.054412841797 -8.43499946594238,151.062744140625 -8.42972183227539,151.076354980469 -8.42611122131348,151.118286132812 -8.42000007629395,151.124969482422 -8.42000007629395,151.124969482422 -8.42555618286133,151.123840332031 -8.62472152709961,151.103302001953 -8.72916603088379,151.102447509766 -8.741943359375,151.103851318359 -8.7541675567627,151.107177734375 -8.76444625854492,151.144439697266 -8.8305549621582)),((152.835510253906 -9.23555564880371,152.829956054688 -9.22333335876465,152.679962158203 -9.09055519104004,152.6533203125 -9.06972122192383,152.649139404297 -9.06694412231445,152.573028564453 -9.02027893066406,152.563598632812 -9.01611137390137,152.556640625 -9.01611137390137,152.540252685547 -9.02027893066406,152.499694824219 -9.02500152587891,152.497741699219 -9.02166748046875,152.5244140625 -8.99305534362793,152.527770996094 -8.98972129821777,152.532470703125 -8.98777770996094,152.619689941406 -8.96138954162598,152.625793457031 -8.96055603027344,152.647216796875 -8.96138954162598,152.8046875 -8.96944427490234,152.810241699219 -8.97083282470703,152.814971923828 -8.97277641296387,152.93359375 -9.04388999938965,152.937744140625 -9.04666709899902,152.952758789062 -9.05888938903809,153.017761230469 -9.11777687072754,153.020538330078 -9.12166595458984,153.019989013672 -9.12638854980469,153.002777099609 -9.16500091552734,152.997192382812 -9.17305564880371,152.993011474609 -9.17583274841309,152.98828125 -9.17777824401855,152.982177734375 -9.17722320556641,152.835510253906 -9.23555564880371)),((150.334411621094 -9.52666664123535,150.310241699219 -9.5261116027832,150.193023681641 -9.45388793945312,150.180816650391 -9.44555473327637,150.173858642578 -9.43888854980469,150.110778808594 -9.37277603149414,150.108306884766 -9.36861038208008,150.103302001953 -9.33694458007812,150.102752685547 -9.33083343505859,150.104125976562 -9.31861114501953,150.106903076172 -9.30777740478516,150.123291015625 -9.2630558013916,150.126068115234 -9.26027870178223,150.143859863281 -9.24555397033691,150.189147949219 -9.21111106872559,150.198028564453 -9.20777702331543,150.206909179688 -9.2055549621582,150.2138671875 -9.2055549621582,150.232177734375 -9.20777702331543,150.326904296875 -9.26916694641113,150.330810546875 -9.27194595336914,150.333038330078 -9.27666664123535,150.376892089844 -9.38333320617676,150.37744140625 -9.38944435119629,150.363006591797 -9.48749923706055,150.344696044922 -9.51666641235352,150.339141845703 -9.52472305297852,150.334411621094 -9.52666664123535)),((150.846923828125 -9.71805572509766,150.844116210938 -9.68555641174316,150.801635742188 -9.65861129760742,150.763305664062 -9.66250038146973,150.691345214844 -9.66333389282227,150.661102294922 -9.66333389282227,150.654968261719 -9.66250038146973,150.622741699219 -9.65388870239258,150.514434814453 -9.62333297729492,150.490509033203 -9.58361053466797,150.427459716797 -9.44083404541016,150.423309326172 -9.43138885498047,150.419982910156 -9.41472244262695,150.419982910156 -9.4011116027832,150.421905517578 -9.38944435119629,150.426086425781 -9.37666511535645,150.435791015625 -9.35916519165039,150.442474365234 -9.35499954223633,150.473571777344 -9.33888816833496,150.478851318359 -9.33749961853027,150.481628417969 -9.33694458007812,150.487731933594 -9.33749961853027,150.498840332031 -9.34027671813965,150.505554199219 -9.34222221374512,150.5302734375 -9.35166549682617,150.571350097656 -9.37055397033691,150.598022460938 -9.38500022888184,150.618011474609 -9.39777946472168,150.624969482422 -9.40444564819336,150.63525390625 -9.42194557189941,150.639434814453 -9.42472267150879,150.666656494141 -9.43833351135254,150.676910400391 -9.4416675567627,150.683044433594 -9.44083404541016,150.731903076172 -9.42805671691895,150.7421875 -9.42472267150879,150.746063232422 -9.42138862609863,150.748291015625 -9.41805648803711,150.754974365234 -9.40444564819336,150.760528564453 -9.40444564819336,150.765258789062 -9.4063892364502,150.777770996094 -9.41472244262695,150.804412841797 -9.43277740478516,150.828308105469 -9.45638847351074,150.885803222656 -9.52083396911621,150.888031005859 -9.52555656433105,150.931915283203 -9.64166831970215,150.932464599609 -9.64777946472168,150.930541992188 -9.65916633605957,150.921630859375 -9.67083358764648,150.906646728516 -9.68277740478516,150.901092529297 -9.68138885498047,150.896362304688 -9.67416763305664,150.893585205078 -9.67194557189941,150.888580322266 -9.67138862609863,150.876892089844 -9.67749977111816,150.873565673828 -9.68083381652832,150.846923828125 -9.71805572509766)),((151.229125976562 -10.2011108398438,151.19775390625 -10.1727771759033,151.190246582031 -10.1669454574585,151.148315429688 -10.1472234725952,151.143585205078 -10.1452789306641,151.086639404297 -10.1269435882568,151.075805664062 -10.1244430541992,151.025817871094 -10.1141662597656,151.001647949219 -10.1108322143555,150.994964599609 -10.1108322143555,150.983306884766 -10.1127777099609,150.970245361328 -10.1122207641602,150.958587646484 -10.1102771759033,150.94970703125 -10.1055545806885,150.91552734375 -10.0041675567627,150.877746582031 -9.92666625976562,150.826904296875 -9.83888816833496,150.762481689453 -9.80500030517578,150.758605957031 -9.80249977111816,150.750274658203 -9.74833297729492,150.748840332031 -9.73083305358887,150.757202148438 -9.71194458007812,150.759979248047 -9.70777702331543,150.763885498047 -9.70499992370605,150.769439697266 -9.70666694641113,150.788024902344 -9.71944427490234,150.803039550781 -9.73138809204102,150.821624755859 -9.74694442749023,150.900268554688 -9.81916618347168,150.931915283203 -9.8488883972168,150.938873291016 -9.85583305358887,150.962738037109 -9.89361190795898,151.030548095703 -9.98527717590332,151.039428710938 -9.99694442749023,151.059967041016 -10.0169448852539,151.073028564453 -10.0244445800781,151.111358642578 -10.0447244644165,151.116058349609 -10.046667098999,151.122467041016 -10.0475006103516,151.136657714844 -10.041389465332,151.147216796875 -10.0325012207031,151.149139404297 -10.0277786254883,151.149719238281 -10.0219459533691,151.147766113281 -10.0169448852539,151.143585205078 -10.0088901519775,151.140808105469 -10.0050010681152,151.136657714844 -10.0022239685059,151.134704589844 -9.99749946594238,151.134704589844 -9.9908332824707,151.138031005859 -9.98749923706055,151.184143066406 -9.94472312927246,151.192199707031 -9.93944358825684,151.200531005859 -9.93666648864746,151.26416015625 -9.91972160339355,151.281372070312 -9.9233341217041,151.284149169922 -9.92722320556641,151.298583984375 -9.95083236694336,151.299133300781 -9.96249961853027,151.296356201172 -9.97305488586426,151.271087646484 -10.0616655349731,151.252471923828 -10.0974998474121,151.246337890625 -10.1047210693359,151.243560791016 -10.1088886260986,151.234130859375 -10.1330547332764,151.221618652344 -10.1708335876465,151.221618652344 -10.1816673278809,151.222473144531 -10.1877784729004,151.223846435547 -10.1930561065674,151.229125976562 -10.2011108398438)),((150.880523681641 -10.6527786254883,150.856353759766 -10.6494445800781,150.794128417969 -10.6394443511963,150.785247802734 -10.6347236633301,150.769439697266 -10.6111106872559,150.767486572266 -10.6075000762939,150.788024902344 -10.5463886260986,150.790802001953 -10.5422229766846,150.794708251953 -10.539722442627,150.798858642578 -10.5383338928223,150.868835449219 -10.5383338928223,150.874969482422 -10.5388889312744,150.892211914062 -10.547779083252,150.900268554688 -10.5530548095703,150.904418945312 -10.5625,150.894989013672 -10.6466665267944,150.892211914062 -10.6508331298828,150.880523681641 -10.6527786254883)),((150.927185058594 -10.6838893890381,150.923034667969 -10.6825008392334,150.920257568359 -10.6783332824707,150.911926269531 -10.65944480896,150.909973144531 -10.6547222137451,150.909149169922 -10.6419448852539,150.909973144531 -10.6358337402344,150.91943359375 -10.6130542755127,150.922210693359 -10.6088886260986,150.9296875 -10.6030540466309,150.934692382812 -10.6008319854736,150.94970703125 -10.59694480896,151.016082763672 -10.5908336639404,151.064147949219 -10.5922222137451,151.066925048828 -10.5947227478027,151.06884765625 -10.5980548858643,151.069702148438 -10.6111106872559,151.063293457031 -10.6438903808594,151.049133300781 -10.6702785491943,151.042205810547 -10.676944732666,151.036651611328 -10.6783332824707,151.031372070312 -10.676944732666,151.009979248047 -10.6683330535889,151.008026123047 -10.6636123657227,151.003875732422 -10.6472234725952,151.001647949219 -10.6427783966064,150.994110107422 -10.6366672515869,150.988861083984 -10.6352787017822,150.941345214844 -10.6347236633301,150.936096191406 -10.6347236633301,150.929138183594 -10.6547222137451,150.927185058594 -10.6838893890381)),((152.744415283203 -10.7166652679443,152.702453613281 -10.7066669464111,152.686920166016 -10.7019443511963,152.573852539062 -10.6569442749023,152.564971923828 -10.6522235870361,152.544982910156 -10.6380558013916,152.541656494141 -10.6338901519775,152.540802001953 -10.6305541992188,152.542205810547 -10.6277770996094,152.555236816406 -10.6230554580688,152.562194824219 -10.6230554580688,152.573852539062 -10.6252765655518,152.614959716797 -10.6386127471924,152.690246582031 -10.6627788543701,152.693023681641 -10.6627788543701,152.759429931641 -10.6372222900391,152.784973144531 -10.6211109161377,152.790252685547 -10.6197204589844,152.814971923828 -10.6291656494141,152.870513916016 -10.6580562591553,152.873291015625 -10.6622219085693,152.873840332031 -10.6683330535889,152.873291015625 -10.6730556488037,152.870513916016 -10.676944732666,152.863586425781 -10.6825008392334,152.844970703125 -10.6952781677246,152.814971923828 -10.6966667175293,152.744415283203 -10.7166652679443)),((153.210510253906 -11.2858333587646,153.181640625 -11.2522239685059,153.143859863281 -11.2247219085693,153.13916015625 -11.2227764129639,153.120513916016 -11.2166652679443,153.114959716797 -11.2152767181396,153.106079101562 -11.2147216796875,153.093292236328 -11.2019443511963,153.091064453125 -11.1972217559814,153.093841552734 -11.1930561065674,153.102172851562 -11.1888885498047,153.112457275391 -11.1844444274902,153.123840332031 -11.1849994659424,153.12939453125 -11.1863880157471,153.198028564453 -11.2172222137451,153.2138671875 -11.2247219085693,153.222747802734 -11.2294454574585,153.251373291016 -11.2469444274902,153.250579833984 -11.25,153.25 -11.2522239685059,153.241058349609 -11.2688903808594,153.210510253906 -11.2858333587646)),((154.112182617188 -11.4397220611572,154.106628417969 -11.4397220611572,154.062744140625 -11.4330558776855,154.058013916016 -11.4308338165283,154.006652832031 -11.3872222900391,154.003326416016 -11.3838901519775,154.021087646484 -11.3488883972168,154.089691162109 -11.3152770996094,154.153869628906 -11.3141670227051,154.225250244141 -11.3194446563721,154.268310546875 -11.338888168335,154.276641845703 -11.344165802002,154.286376953125 -11.3605556488037,154.288299560547 -11.3649997711182,154.297760009766 -11.3919448852539,154.289703369141 -11.4108333587646,154.285522460938 -11.4136123657227,154.266387939453 -11.421667098999,154.263031005859 -11.4180555343628,154.26025390625 -11.4075012207031,154.256103515625 -11.4047222137451,154.250549316406 -11.4033336639404,154.190246582031 -11.3994445800781,154.137481689453 -11.3986110687256,154.134704589844 -11.4027786254883,154.112182617188 -11.4397220611572)),((153.566070556641 -11.6424999237061,153.522216796875 -11.602222442627,153.479125976562 -11.5733337402344,153.421356201172 -11.5686111450195,153.376068115234 -11.5672225952148,153.3671875 -11.557222366333,153.364410400391 -11.5530548095703,153.363861083984 -11.5472221374512,153.376068115234 -11.5269451141357,153.382446289062 -11.5197219848633,153.38720703125 -11.5108337402344,153.388580322266 -11.5055561065674,153.387756347656 -11.5008344650269,153.384429931641 -11.4974994659424,153.325531005859 -11.4752769470215,153.276916503906 -11.4624996185303,153.271911621094 -11.4605560302734,153.268585205078 -11.4572219848633,153.190521240234 -11.3730554580688,153.188293457031 -11.3683319091797,153.187194824219 -11.3536109924316,153.187194824219 -11.3497219085693,153.198028564453 -11.3241672515869,153.200805664062 -11.3199996948242,153.220520019531 -11.3274993896484,153.291931152344 -11.3569431304932,153.398040771484 -11.4047222137451,153.413879394531 -11.4161109924316,153.426910400391 -11.4302787780762,153.437744140625 -11.4397220611572,153.507751464844 -11.4724998474121,153.559143066406 -11.491943359375,153.570251464844 -11.494722366333,153.576354980469 -11.4955539703369,153.645538330078 -11.5150012969971,153.686645507812 -11.5269451141357,153.751098632812 -11.5644445419312,153.754425048828 -11.5680561065674,153.7763671875 -11.5974998474121,153.777770996094 -11.6027765274048,153.7763671875 -11.6080551147461,153.7744140625 -11.6130542755127,153.770812988281 -11.6163883209229,153.676361083984 -11.6283321380615,153.670257568359 -11.6277770996094,153.605804443359 -11.6174983978271,153.598846435547 -11.6174983978271,153.582458496094 -11.6283321380615,153.566070556641 -11.6424999237061))) MULTIPOLYGON(((144.520538330078 -1.12083339691162,144.516387939453 -1.12083339691162,144.514434814453 -1.11611104011536,144.514984130859 -1.10305547714233,144.517211914062 -1.09833335876465,144.521362304688 -1.09972214698792,144.522491455078 -1.10527777671814,144.523315429688 -1.11138892173767,144.522491455078 -1.11611104011536,144.520538330078 -1.12083339691162)),((149.731903076172 -1.60333347320557,149.715515136719 -1.57861113548279,149.7099609375 -1.57027792930603,149.703308105469 -1.56361126899719,149.699127197266 -1.56083345413208,149.681915283203 -1.55722236633301,149.680541992188 -1.56277775764465,149.681915283203 -1.57527780532837,149.681365966797 -1.5813889503479,149.678588867188 -1.58555555343628,149.673034667969 -1.58694458007812,149.663299560547 -1.58277773857117,149.659423828125 -1.58000016212463,149.558013916016 -1.50055575370789,149.533325195312 -1.469722032547,149.530548095703 -1.46555542945862,149.527770996094 -1.45444440841675,149.528594970703 -1.44833326339722,149.542755126953 -1.41472220420837,149.544982910156 -1.41000008583069,149.564147949219 -1.37027788162231,149.579956054688 -1.35527777671814,149.622467041016 -1.35944437980652,149.627166748047 -1.36138892173767,149.663299560547 -1.38666677474976,149.710784912109 -1.42166662216187,149.716918945312 -1.42916655540466,149.719696044922 -1.43333315849304,149.790252685547 -1.57666683197021,149.790802001953 -1.5813889503479,149.731903076172 -1.60333347320557)),((144.517761230469 -1.39833331108093,144.506103515625 -1.38944435119629,144.503326416016 -1.38555550575256,144.505554199219 -1.38055562973022,144.516387939453 -1.38194441795349,144.519989013672 -1.38555550575256,144.521911621094 -1.39555549621582,144.517761230469 -1.39833331108093)),((142.818298339844 -1.73333311080933,142.813598632812 -1.73277759552002,142.812194824219 -1.72722220420837,142.812744140625 -1.72111105918884,142.818298339844 -1.69972205162048,142.821075439453 -1.69583320617676,142.832183837891 -1.69361114501953,142.863006591797 -1.69444441795349,142.866363525391 -1.69777774810791,142.866912841797 -1.70944428443909,142.864410400391 -1.71361112594604,142.859405517578 -1.71555542945862,142.852752685547 -1.70861101150513,142.847198486328 -1.70722222328186,142.841644287109 -1.70861101150513,142.837463378906 -1.71138882637024,142.818298339844 -1.73333311080933)),((147.391937255859 -1.96083331108093,147.399993896484 -1.96638870239258,147.430816650391 -1.9902777671814,147.434417724609 -1.99361109733582,147.44580078125 -2.00944471359253,147.448028564453 -2.01416683197021,147.447204589844 -2.0188889503479,147.439697265625 -2.06083345413208,147.437744140625 -2.06555557250977,147.426086425781 -2.06777811050415,147.275268554688 -2.1211109161377,147.255554199219 -2.14916658401489,147.239135742188 -2.16694450378418,147.22802734375 -2.17638874053955,147.212188720703 -2.18805551528931,147.207458496094 -2.19027757644653,147.201904296875 -2.19166660308838,146.980529785156 -2.1991662979126,146.893035888672 -2.18944406509399,146.8388671875 -2.18194437026978,146.798309326172 -2.16888904571533,146.793579101562 -2.16694450378418,146.726348876953 -2.16083335876465,146.571624755859 -2.23472213745117,146.568023681641 -2.23666667938232,146.563293457031 -2.23472213745117,146.5283203125 -2.20111131668091,146.524993896484 -2.19083309173584,146.518035888672 -2.1497220993042,146.518859863281 -2.14361143112183,146.578308105469 -2.00194454193115,146.580535888672 -1.99722218513489,146.583862304688 -1.99361109733582,146.638580322266 -1.97861099243164,146.844970703125 -1.95055556297302,146.857177734375 -1.94916653633118,146.869689941406 -1.94916653633118,147.093566894531 -1.96638870239258,147.099975585938 -1.96694445610046,147.118286132812 -1.96888875961304,147.164428710938 -1.98333311080933,147.203308105469 -2.003333568573,147.300811767578 -2.02527761459351,147.417755126953 -2.05055570602417,147.419982910156 -2.04583358764648,147.422760009766 -2.03472232818604,147.422760009766 -2.02916669845581,147.420532226562 -2.01083374023438,147.418579101562 -2.00583362579346,147.391937255859 -1.96083331108093)),((147.756927490234 -2.35249996185303,147.766662597656 -2.32388925552368,147.795532226562 -2.26500034332275,147.815246582031 -2.24361133575439,147.832458496094 -2.24555540084839,147.877746582031 -2.28944444656372,147.879119873047 -2.29361152648926,147.856353759766 -2.3313889503479,147.848297119141 -2.33666658401489,147.829132080078 -2.34555530548096,147.824127197266 -2.34777784347534,147.81884765625 -2.34916639328003,147.812469482422 -2.34972190856934,147.756927490234 -2.35249996185303)),((150.367736816406 -2.68666648864746,150.356353759766 -2.66805553436279,150.347473144531 -2.66333341598511,150.341064453125 -2.66249990463257,150.273315429688 -2.67277765274048,150.257476806641 -2.6777777671814,150.242462158203 -2.68305540084839,150.190521240234 -2.68583297729492,150.184143066406 -2.68527746200562,150.109405517578 -2.625,149.972473144531 -2.50111150741577,149.965789794922 -2.4941668510437,149.949127197266 -2.47638845443726,149.948577880859 -2.47166633605957,149.951354980469 -2.46749973297119,149.960784912109 -2.46000003814697,150.079956054688 -2.41416645050049,150.189697265625 -2.37722206115723,150.206085205078 -2.37444448471069,150.216369628906 -2.37777757644653,150.248016357422 -2.39000034332275,150.417205810547 -2.46055555343628,150.443298339844 -2.47583293914795,150.446075439453 -2.47972202301025,150.467193603516 -2.54472255706787,150.468017578125 -2.55777788162231,150.459686279297 -2.64833354949951,150.458312988281 -2.6536111831665,150.448852539062 -2.66472196578979,150.443298339844 -2.66611099243164,150.41943359375 -2.66249990463257,150.406921386719 -2.66388893127441,150.4013671875 -2.6652774810791,150.371887207031 -2.68388891220093,150.367736816406 -2.68666648864746)),((152.659423828125 -3.84277772903442,152.670837402344 -3.85989284515381,152.701080322266 -3.88305521011353,152.739685058594 -3.89611101150513,152.769714355469 -3.90027761459351,152.919128417969 -4.0041675567627,152.989685058594 -4.07583332061768,153.006927490234 -4.09361171722412,153.118560791016 -4.23916625976562,153.12939453125 -4.25555610656738,153.131622314453 -4.26027870178223,153.134429931641 -4.27138900756836,153.132171630859 -4.37861061096191,153.130798339844 -4.39083385467529,153.128021240234 -4.39500045776367,153.121337890625 -4.40194416046143,153.108856201172 -4.40999984741211,153.092468261719 -4.42083358764648,153.080810546875 -4.43000030517578,153.066375732422 -4.44277763366699,153.063018798828 -4.44638824462891,153.0546875 -4.45861148834229,153.04052734375 -4.48527717590332,153.039154052734 -4.49749946594238,153.039703369141 -4.50361156463623,153.041076660156 -4.5091667175293,153.043304443359 -4.51388931274414,153.046630859375 -4.51722240447998,153.059692382812 -4.52555561065674,153.066375732422 -4.53222274780273,153.077453613281 -4.54861068725586,153.079406738281 -4.58916664123535,153.077453613281 -4.60055541992188,152.980255126953 -4.7605562210083,152.974670410156 -4.76666641235352,152.910247802734 -4.82333374023438,152.891662597656 -4.82250022888184,152.743560791016 -4.67305564880371,152.735504150391 -4.66083335876465,152.733306884766 -4.6561107635498,152.693023681641 -4.55833339691162,152.681365966797 -4.5222225189209,152.664978027344 -4.4688892364502,152.662750244141 -4.4572229385376,152.666381835938 -4.45388889312744,152.678588867188 -4.44555473327637,152.681365966797 -4.44138813018799,152.692199707031 -4.39361190795898,152.69775390625 -4.36499977111816,152.69775390625 -4.35805511474609,152.694427490234 -4.19138813018799,152.693572998047 -4.18527698516846,152.691650390625 -4.18055534362793,152.603302001953 -4.00611114501953,152.581909179688 -3.96583318710327,152.538726806641 -3.90009546279907,152.512176513672 -3.8687310218811,152.491577148438 -3.85225462913513,152.374969482422 -3.7277774810791,152.359954833984 -3.70472240447998,152.357177734375 -3.69361114501953,152.356628417969 -3.6875,152.358001708984 -3.66166639328003,152.355224609375 -3.65055561065674,152.349700927734 -3.64249992370605,152.289428710938 -3.57944440841675,152.282470703125 -3.57277774810791,152.190521240234 -3.50888919830322,152.182464599609 -3.50361156463623,152.156372070312 -3.48861122131348,152.151641845703 -3.48638868331909,152.146087646484 -3.4850001335144,152.136657714844 -3.48916673660278,152.131072998047 -3.49055576324463,152.124969482422 -3.49000024795532,151.984405517578 -3.46444463729858,151.956359863281 -3.45833349227905,151.934967041016 -3.44555521011353,151.758331298828 -3.32444477081299,151.708862304688 -3.28055572509766,151.688293457031 -3.25305557250977,151.620513916016 -3.17722225189209,151.6171875 -3.17388916015625,151.608306884766 -3.16916656494141,151.574676513672 -3.1594443321228,151.532745361328 -3.14499998092651,151.493011474609 -3.13000011444092,151.483581542969 -3.12583303451538,151.462188720703 -3.11305570602417,151.455535888672 -3.1061110496521,151.452758789062 -3.10194444656372,151.450531005859 -3.09722232818604,151.449981689453 -3.08416652679443,151.448577880859 -3.07888889312744,151.44384765625 -3.06972217559814,151.438293457031 -3.06361103057861,151.417205810547 -3.05055570602417,151.369689941406 -3.02250003814697,151.281372070312 -2.97416639328003,151.237457275391 -2.95361137390137,151.214965820312 -2.94194412231445,151.150543212891 -2.89527797698975,151.122467041016 -2.86861085891724,151.119689941406 -2.86444473266602,151.113586425781 -2.8502779006958,151.110778808594 -2.84611082077026,151.106628417969 -2.84333324432373,151.004425048828 -2.78916692733765,150.999694824219 -2.78722238540649,150.930541992188 -2.76861095428467,150.923583984375 -2.76861095428467,150.903045654297 -2.77138900756836,150.876342773438 -2.77611112594604,150.861907958984 -2.78249979019165,150.832458496094 -2.78722238540649,150.819427490234 -2.7877779006958,150.754425048828 -2.77083349227905,150.750274658203 -2.76805543899536,150.729675292969 -2.74055576324463,150.730529785156 -2.7344446182251,150.733856201172 -2.7311110496521,150.747467041016 -2.71749973297119,150.752471923828 -2.71527767181396,150.763305664062 -2.7180552482605,150.824401855469 -2.71527767181396,150.874969482422 -2.71250009536743,150.88720703125 -2.71111106872559,150.891357421875 -2.70833349227905,150.894989013672 -2.70499992370605,150.896942138672 -2.70027780532837,150.885650634766 -2.6851110458374,150.884307861328 -2.67811107635498,150.876983642578 -2.65594434738159,150.875640869141 -2.65294456481934,150.873641967773 -2.65094447135925,150.867797851562 -2.64844417572021,150.861633300781 -2.64977788925171,150.856292724609 -2.65261125564575,150.853134155273 -2.65344452857971,150.838012695312 -2.64277791976929,150.831909179688 -2.64222240447998,150.822204589844 -2.6380558013916,150.792755126953 -2.61666631698608,150.805816650391 -2.56666660308838,150.807739257812 -2.56333351135254,150.811370849609 -2.55999994277954,150.817474365234 -2.559166431427,150.834686279297 -2.57083368301392,150.838012695312 -2.57416677474976,150.906524658203 -2.63594436645508,150.964691162109 -2.68722200393677,150.968841552734 -2.69000005722046,151.086639404297 -2.75027799606323,151.190246582031 -2.82611131668091,151.280822753906 -2.87083339691162,151.311370849609 -2.86999988555908,151.419128417969 -2.89805555343628,151.427185058594 -2.9036111831665,151.464416503906 -2.93499994277954,151.598022460938 -3.02750015258789,151.641937255859 -3.04805564880371,151.717742919922 -3.11555576324463,151.72607421875 -3.12805557250977,151.815246582031 -3.19777774810791,151.820526123047 -3.1991662979126,151.825531005859 -3.1972222328186,151.833587646484 -3.19166660308838,151.855529785156 -3.18611097335815,151.861907958984 -3.18694448471069,151.921905517578 -3.20333337783813,151.948852539062 -3.21083354949951,152.055816650391 -3.24777793884277,152.054412841797 -3.26000022888184,152.054412841797 -3.27361106872559,152.057739257812 -3.28388929367065,152.164703369141 -3.41111087799072,152.204406738281 -3.45444440841675,152.210510253906 -3.46055555343628,152.238006591797 -3.47833299636841,152.252471923828 -3.4844446182251,152.277191162109 -3.49472236633301,152.306640625 -3.50638914108276,152.327178955078 -3.51999998092651,152.355224609375 -3.54000043869019,152.361907958984 -3.54666709899902,152.367462158203 -3.55499982833862,152.392211914062 -3.59861087799072,152.411926269531 -3.63361120223999,152.488006591797 -3.64916658401489,152.493011474609 -3.64861106872559,152.496917724609 -3.65138864517212,152.503051757812 -3.6588888168335,152.511383056641 -3.67111110687256,152.553314208984 -3.74583339691162,152.556640625 -3.756667137146,152.555816650391 -3.76944446563721,152.549713134766 -3.78388929367065,152.546356201172 -3.79416704177856,152.549133300781 -3.79833364486694,152.573852539062 -3.8216667175293,152.577758789062 -3.82444477081299,152.582733154297 -3.82638883590698,152.603302001953 -3.83305549621582,152.659423828125 -3.84277772903442)),((149.6640625 -10.3398141860962,149.639434814453 -10.3413887023926,149.572204589844 -10.3413887023926,149.566925048828 -10.3413887023926,149.536651611328 -10.361665725708,149.335784912109 -10.307222366333,149.224975585938 -10.2761116027832,149.186645507812 -10.2600002288818,149.176361083984 -10.2563896179199,149.161102294922 -10.2511119842529,149.139984130859 -10.2449989318848,149.093292236328 -10.2341651916504,149.049407958984 -10.2424983978271,149.03857421875 -10.2449989318848,148.993835449219 -10.2605571746826,148.981628417969 -10.268611907959,148.934967041016 -10.2672233581543,148.79443359375 -10.2391662597656,148.723297119141 -10.1869449615479,148.680267333984 -10.1494445800781,148.677459716797 -10.1533336639404,148.642486572266 -10.1863880157471,148.637481689453 -10.1883344650269,148.468292236328 -10.2038879394531,148.462738037109 -10.2038879394531,148.4033203125 -10.2005558013916,148.372467041016 -10.1919441223145,148.3369140625 -10.1797218322754,148.332733154297 -10.176944732666,148.327178955078 -10.1688899993896,148.322479248047 -10.1599998474121,148.314971923828 -10.1405563354492,148.312194824219 -10.1363887786865,148.3046875 -10.130277633667,148.157562255859 -10.0737085342407,148.154418945312 -10.0791664123535,148.150543212891 -10.0952777862549,148.148315429688 -10.0999984741211,148.115509033203 -10.1216659545898,148.10302734375 -10.1297206878662,148.0888671875 -10.1358337402344,148.083312988281 -10.1372222900391,148.055236816406 -10.1433334350586,147.999694824219 -10.1519451141357,147.952453613281 -10.1458339691162,147.940795898438 -10.1211109161377,147.923034667969 -10.0980548858643,147.872192382812 -10.0475006103516,147.86328125 -10.0427780151367,147.857727050781 -10.0427780151367,147.781097412109 -10.0508327484131,147.775543212891 -10.0522232055664,147.766082763672 -10.0561103820801,147.619964599609 -9.9908332824707,147.612457275391 -9.98472213745117,147.601348876953 -9.97527694702148,147.574127197266 -9.94833374023438,147.51025390625 -9.87861061096191,147.504150390625 -9.87138748168945,147.501373291016 -9.86722183227539,147.499389648438 -9.85583305358887,147.501373291016 -9.85111045837402,147.503601074219 -9.83944320678711,147.503601074219 -9.8125,147.499389648438 -9.79638862609863,147.490509033203 -9.77138900756836,147.48828125 -9.76666641235352,147.386932373047 -9.63555717468262,147.316375732422 -9.55527877807617,147.296600341797 -9.53412532806396,147.248565673828 -9.50583457946777,147.12939453125 -9.44361114501953,147.080001831055 -9.43415546417236,147.099975585938 -9.44972229003906,147.102752685547 -9.45388793945312,147.102752685547 -9.48361015319824,147.101348876953 -9.48888778686523,147.09912109375 -9.49110984802246,147.094421386719 -9.49305534362793,147.0888671875 -9.49166679382324,147.062194824219 -9.47333335876465,147.055236816406 -9.46666526794434,147.008026123047 -9.39833450317383,147.001922607422 -9.3841667175293,146.926635742188 -9.28277778625488,146.91748046875 -9.28750038146973,146.911376953125 -9.28694534301758,146.901092529297 -9.28333282470703,146.896942138672 -9.28083419799805,146.893585205078 -9.27722358703613,146.891662597656 -9.27250099182129,146.888885498047 -9.1833324432373,146.905044555664 -9.13727760314941,146.905868530273 -9.13410949707031,146.907043457031 -9.13127708435059,146.909881591797 -9.13077735900879,146.915374755859 -9.13361072540283,146.918548583984 -9.13444423675537,146.969696044922 -9.09138870239258,146.977172851562 -9.07444381713867,146.981353759766 -9.05944442749023,146.981048583984 -9.05097389221191,146.974395751953 -9.03388977050781,146.972473144531 -9.02916717529297,146.969116210938 -9.02833366394043,146.951080322266 -9.03388977050781,146.94580078125 -9.04194450378418,146.944427490234 -9.04722213745117,146.94580078125 -9.05277824401855,146.951904296875 -9.06027793884277,146.954681396484 -9.06833267211914,146.953308105469 -9.07361030578613,146.925262451172 -9.09999847412109,146.91748046875 -9.10610961914062,146.844604492188 -9.09577751159668,146.840911865234 -9.09627723693848,146.83757019043 -9.09544467926025,146.630523681641 -9.0302791595459,146.621612548828 -9.02555656433105,146.586639404297 -8.99916648864746,146.578308105469 -8.9869441986084,146.55859375 -8.9416675567627,146.545532226562 -8.90250015258789,146.546081542969 -8.89777946472168,146.555816650391 -8.85972213745117,146.559143066406 -8.85638809204102,146.567474365234 -8.8075008392334,146.541351318359 -8.76361274719238,146.517486572266 -8.72500038146973,146.441345214844 -8.62472152709961,146.431915283203 -8.61388778686523,146.419982910156 -8.60499954223633,146.403594970703 -8.59444427490234,146.379104614258 -8.58470821380615,146.372192382812 -8.57805633544922,146.351623535156 -8.55777740478516,146.318572998047 -8.50889015197754,146.275543212891 -8.44305610656738,146.269439697266 -8.42888832092285,146.268035888672 -8.42361068725586,146.263305664062 -8.38750076293945,146.264709472656 -8.37527656555176,146.264709472656 -8.36861038208008,146.262481689453 -8.35972213745117,146.243286132812 -8.29472351074219,146.238555908203 -8.28583335876465,146.229675292969 -8.27444458007812,146.218566894531 -8.26472282409668,146.111083984375 -8.16388893127441,146.110229492188 -8.13472366333008,146.089691162109 -8.09111022949219,145.998016357422 -8.05444526672363,145.987731933594 -8.05111122131348,145.930816650391 -8.04111099243164,145.918579101562 -8.03972244262695,145.898590087891 -8.03888893127441,145.880798339844 -8.04166793823242,145.835510253906 -8.02805709838867,145.797760009766 -8.00777816772461,145.786376953125 -7.99888896942139,145.718292236328 -7.96777820587158,145.649993896484 -7.9597225189209,145.630798339844 -7.94472217559814,145.616912841797 -7.93777751922607,145.528045654297 -7.93777751922607,145.502471923828 -7.9399995803833,145.484130859375 -7.94861030578613,145.465515136719 -7.95083332061768,145.443572998047 -7.94944381713867,145.432739257812 -7.94805526733398,145.422485351562 -7.94472217559814,145.244110107422 -7.86861038208008,145.19807434082 -7.82955169677734,145.182723999023 -7.81383991241455,145.168106079102 -7.81822443008423,145.162994384766 -7.82626342773438,145.164459228516 -7.83649444580078,145.161529541016 -7.84489870071411,145.155685424805 -7.84599494934082,145.044967651367 -7.82041692733765,144.995513916016 -7.81555557250977,144.879669189453 -7.78250026702881,144.844696044922 -7.75722312927246,144.838562011719 -7.74972152709961,144.840515136719 -7.74499988555908,144.850250244141 -7.74111080169678,144.871337890625 -7.70777797698975,144.873565673828 -7.7030553817749,144.874114990234 -7.69694423675537,144.874114990234 -7.6899995803833,144.862457275391 -7.61055564880371,144.844696044922 -7.60777759552002,144.833862304688 -7.67722225189209,144.831085205078 -7.68111133575439,144.824127197266 -7.68805503845215,144.819427490234 -7.6899995803833,144.787750244141 -7.69138813018799,144.783599853516 -7.69138813018799,144.599395751953 -7.6602783203125,144.588287353516 -7.65750026702881,144.584411621094 -7.65472221374512,144.552185058594 -7.6119441986084,144.547210693359 -7.60305500030518,144.547210693359 -7.5963888168335,144.545806884766 -7.57472229003906,144.536376953125 -7.52694511413574,144.534973144531 -7.52166652679443,144.530822753906 -7.51222229003906,144.525268554688 -7.5038890838623,144.520538330078 -7.50194454193115,144.514984130859 -7.50194454193115,144.51025390625 -7.5038890838623,144.508880615234 -7.50944519042969,144.508331298828 -7.61472225189209,144.508331298828 -7.62138843536377,144.424682617188 -7.53305530548096,144.418579101562 -7.52583312988281,144.410247802734 -7.52027797698975,144.406921386719 -7.51944446563721,144.412200927734 -7.56583309173584,144.435516357422 -7.68000030517578,144.467742919922 -7.74305534362793,144.395812988281 -7.75583362579346,144.378021240234 -7.75333404541016,144.363006591797 -7.74777793884277,144.358856201172 -7.74499988555908,144.356628417969 -7.74027729034424,144.354125976562 -7.72944450378418,144.354125976562 -7.72277736663818,144.356628417969 -7.70499992370605,144.359680175781 -7.69416618347168,144.360229492188 -7.68249988555908,144.319122314453 -7.62083339691162,144.315795898438 -7.61749935150146,144.310791015625 -7.61666584014893,144.260803222656 -7.63777828216553,144.250549316406 -7.65472221374512,144.243560791016 -7.66694450378418,144.255249023438 -7.73416614532471,144.263031005859 -7.74027729034424,144.272491455078 -7.76749992370605,144.271911621094 -7.77361106872559,144.268310546875 -7.77694511413574,144.224395751953 -7.79333305358887,144.219116210938 -7.79472255706787,144.213012695312 -7.79527759552002,144.147216796875 -7.77888870239258,144.121612548828 -7.77166652679443,143.911926269531 -7.69694423675537,143.899719238281 -7.68861103057861,143.848037719727 -7.63533353805542,143.838531494141 -7.62833404541016,143.829193115234 -7.61733341217041,143.822525024414 -7.60766696929932,143.812713623047 -7.58883380889893,143.810211181641 -7.58316707611084,143.806549072266 -7.57049989700317,143.773040771484 -7.51555633544922,143.768310546875 -7.506667137146,143.758605957031 -7.50250053405762,143.664825439453 -7.46764850616455,143.691345214844 -7.51222229003906,143.755126953125 -7.58950042724609,143.839416503906 -7.71527767181396,143.845520019531 -7.73611068725586,143.852447509766 -7.77027797698975,143.85302734375 -7.78305530548096,143.851898193359 -7.79527759552002,143.85302734375 -7.80749988555908,143.854400634766 -7.81305503845215,143.896362304688 -7.88027763366699,143.901641845703 -7.88833332061768,143.9580078125 -7.97862243652344,143.957183837891 -7.98472213745117,143.955230712891 -7.9894437789917,143.893585205078 -8.03694534301758,143.889434814453 -8.03972244262695,143.884704589844 -8.04166793823242,143.847747802734 -8.04583358764648,143.833862304688 -8.04583358764648,143.755249023438 -8.04111099243164,143.750274658203 -8.03888893127441,143.743560791016 -8.03222274780273,143.738006591797 -8.02416801452637,143.724395751953 -8.01055717468262,143.719421386719 -8.00833511352539,143.661376953125 -7.99138832092285,143.631896972656 -7.98666667938232,143.618835449219 -7.98611068725586,143.597473144531 -7.99222183227539,143.588562011719 -7.99694442749023,143.568908691406 -8.0041675567627,143.56575012207 -8.00483322143555,143.546081542969 -8.00638961791992,143.501647949219 -7.9961109161377,143.485778808594 -7.99138832092285,143.481628417969 -7.98888874053955,143.474975585938 -7.98194408416748,143.473571777344 -7.97305583953857,143.460510253906 -7.93861103057861,143.454406738281 -7.92416667938232,143.444122314453 -7.91333389282227,143.439971923828 -7.91055583953857,143.435241699219 -7.90861129760742,143.424133300781 -7.90722274780273,143.362457275391 -7.8997220993042,143.358306884766 -7.90250015258789,143.356903076172 -7.90805530548096,143.356903076172 -7.91333389282227,143.360504150391 -7.91694450378418,143.446624755859 -7.98055553436279,143.538635253906 -8.05216693878174,143.541458129883 -8.05333423614502,143.543975830078 -8.05500030517578,143.547958374023 -8.05900001525879,143.628295898438 -8.19361114501953,143.630523681641 -8.19833374023438,143.632446289062 -8.20999908447266,143.631896972656 -8.21611022949219,143.629669189453 -8.22749900817871,143.625518798828 -8.2369441986084,143.622192382812 -8.24055480957031,143.611907958984 -8.24388885498047,143.56884765625 -8.24722099304199,143.554962158203 -8.24722099304199,143.512481689453 -8.2458324432373,143.469421386719 -8.24527740478516,143.382446289062 -8.25,143.373565673828 -8.25055694580078,143.338562011719 -8.2538890838623,143.234954833984 -8.27500152587891,143.178039550781 -8.28666687011719,143.080810546875 -8.30833435058594,143.069976806641 -8.31083297729492,143.049407958984 -8.31777763366699,143.034149169922 -8.32305526733398,143.023864746094 -8.3266658782959,143 -8.33666610717773,142.991058349609 -8.34138870239258,142.979949951172 -8.34416580200195,142.973297119141 -8.34416580200195,142.967193603516 -8.3436107635498,142.961639404297 -8.34222221374512,142.94580078125 -8.33749961853027,142.941070556641 -8.33527755737305,142.908874511719 -8.31916618347168,142.882171630859 -8.30500030517578,142.865509033203 -8.29416656494141,142.845794677734 -8.28666687011719,142.799987792969 -8.27500152587891,142.776641845703 -8.27083396911621,142.696350097656 -8.26749992370605,142.654693603516 -8.27361106872559,142.638031005859 -8.27777862548828,142.595794677734 -8.29000091552734,142.575256347656 -8.29666709899902,142.565521240234 -8.30083274841309,142.548309326172 -8.31083297729492,142.540802001953 -8.31694412231445,142.533874511719 -8.32388877868652,142.529968261719 -8.3266658782959,142.521087646484 -8.33138847351074,142.511383056641 -8.33527755737305,142.505828857422 -8.33666610717773,142.485229492188 -8.33666610717773,142.466918945312 -8.33611106872559,142.442749023438 -8.33277702331543,142.437469482422 -8.33138847351074,142.427764892578 -8.32722282409668,142.419708251953 -8.32194519042969,142.411926269531 -8.31583404541016,142.403213500977 -8.28638935089111,142.396194458008 -8.26155567169189,142.395050048828 -8.25055599212646,142.394195556641 -8.23922157287598,142.39453125 -8.23155498504639,142.394195556641 -8.2278881072998,142.386657714844 -8.19361114501953,142.383880615234 -8.18972206115723,142.379943847656 -8.18694496154785,142.338562011719 -8.16638946533203,142.327758789062 -8.16388893127441,142.316925048828 -8.16388893127441,142.221618652344 -8.1733341217041,142.2119140625 -8.17722320556641,142.140808105469 -8.22222137451172,142.13720703125 -8.22555541992188,142.13525390625 -8.23027801513672,142.135803222656 -8.23638725280762,142.144714355469 -8.23916625976562,142.155822753906 -8.24055480957031,142.163879394531 -8.23638725280762,142.172210693359 -8.23083305358887,142.182464599609 -8.22083282470703,142.186645507812 -8.21805572509766,142.195526123047 -8.21333312988281,142.223571777344 -8.20027732849121,142.228302001953 -8.19833374023438,142.309143066406 -8.18083381652832,142.314147949219 -8.18000030517578,142.324401855469 -8.1833324432373,142.338012695312 -8.19027709960938,142.355224609375 -8.19916725158691,142.361358642578 -8.20638847351074,142.374572753906 -8.26111125946045,142.377410888672 -8.2746114730835,142.377075195312 -8.28644466400146,142.377410888672 -8.29327774047852,142.382446289062 -8.31916618347168,142.388031005859 -8.32722282409668,142.408599853516 -8.34749984741211,142.439422607422 -8.37138748168945,142.44970703125 -8.37472152709961,142.466918945312 -8.37805557250977,142.473022460938 -8.37888717651367,142.486633300781 -8.37888717651367,142.493011474609 -8.37805557250977,142.512756347656 -8.37194442749023,142.522491455078 -8.36805534362793,142.5263671875 -8.36527633666992,142.540252685547 -8.35166549682617,142.548309326172 -8.34611129760742,142.556640625 -8.34083366394043,142.590240478516 -8.3266658782959,142.619689941406 -8.31500053405762,142.635528564453 -8.31027793884277,142.641662597656 -8.31083297729492,142.734680175781 -8.32250022888184,142.771636962891 -8.33194351196289,142.776641845703 -8.33388900756836,142.783325195312 -8.34083366394043,142.788879394531 -8.3488883972168,142.799133300781 -8.35916519165039,142.807464599609 -8.36444473266602,142.906097412109 -8.42361068725586,142.917205810547 -8.42611122131348,142.9580078125 -8.43166732788086,143.01025390625 -8.44111061096191,143.04443359375 -8.44777870178223,143.049987792969 -8.44916725158691,143.086364746094 -8.45999908447266,143.096618652344 -8.4636116027832,143.110229492188 -8.47027778625488,143.213012695312 -8.5494441986084,143.220520019531 -8.55555534362793,143.239135742188 -8.57138824462891,143.246063232422 -8.57805633544922,143.249389648438 -8.58138847351074,143.281646728516 -8.61861038208008,143.374664306641 -8.741943359375,143.392761230469 -8.77027893066406,143.395263671875 -8.7813892364502,143.406921386719 -8.96194458007812,143.405548095703 -8.96749877929688,143.403045654297 -8.97138786315918,143.384429931641 -8.99388885498047,143.3671875 -9.01083374023438,143.363006591797 -9.01361274719238,143.331634521484 -9.02833366394043,143.321899414062 -9.03250122070312,143.316650390625 -9.03388977050781,143.310241699219 -9.03305625915527,143.299407958984 -9.02361106872559,143.289154052734 -9.02027893066406,143.283050537109 -9.01972198486328,143.269989013672 -9.02027893066406,143.248016357422 -9.02555656433105,143.232177734375 -9.0302791595459,143.174133300781 -9.04861068725586,143.047210693359 -9.09000015258789,143.04248046875 -9.09194374084473,143.039154052734 -9.09527778625488,143.030822753906 -9.10750007629395,143.023864746094 -9.11416625976562,142.902770996094 -9.19750022888184,142.842468261719 -9.2327766418457,142.807464599609 -9.25222396850586,142.797760009766 -9.25638961791992,142.788299560547 -9.26027870178223,142.769134521484 -9.2672233581543,142.752471923828 -9.27138900756836,142.723846435547 -9.28333282470703,142.66552734375 -9.32055473327637,142.654693603516 -9.32999992370605,142.638885498047 -9.3347225189209,142.625244140625 -9.3347225189209,142.582733154297 -9.33083343505859,142.571624755859 -9.32805633544922,142.543029785156 -9.30916595458984,142.532470703125 -9.29888916015625,142.5244140625 -9.28694534301758,142.521087646484 -9.28333282470703,142.517486572266 -9.28000068664551,142.497741699219 -9.26527786254883,142.477172851562 -9.25166702270508,142.425811767578 -9.22805595397949,142.2099609375 -9.16500091552734,142.203033447266 -9.16500091552734,142.054412841797 -9.18722152709961,141.944702148438 -9.20694351196289,141.721343994141 -9.21444511413574,141.615783691406 -9.23611068725586,141.608856201172 -9.23611068725586,141.522491455078 -9.22111129760742,141.509429931641 -9.21388816833496,141.501922607422 -9.20777702331543,141.495788574219 -9.20027732849121,141.48828125 -9.19416618347168,141.460784912109 -9.17388916015625,141.448577880859 -9.16583442687988,141.429412841797 -9.15750122070312,141.388305664062 -9.14416694641113,141.375244140625 -9.14333343505859,141.323028564453 -9.14999961853027,141.312194824219 -9.15277862548828,141.307464599609 -9.15500068664551,141.294982910156 -9.16305541992188,141.284698486328 -9.17305564880371,141.266387939453 -9.18888854980469,141.226623535156 -9.21722221374512,141.213592529297 -9.22472190856934,141.176361083984 -9.23388862609863,141.160797119141 -9.23749923706055,141.122467041016 -9.23194313049316,141.117462158203 -9.22999954223633,141.109405517578 -9.22472190856934,141.090789794922 -9.20916557312012,141.033874511719 -9.15694427490234,141.013305664062 -9.13666725158691,141.007019042969 -9.12846755981445,141.006134033203 -6.90478563308716,141.006134033203 -6.89328384399414,140.998565673828 -6.89388942718506,140.990509033203 -6.89944458007812,140.983581542969 -6.9061107635498,140.978851318359 -6.90694427490234,140.949401855469 -6.9036111831665,140.902770996094 -6.85583305358887,140.875244140625 -6.79611110687256,140.871063232422 -6.7863883972168,140.859405517578 -6.72861099243164,140.858856201172 -6.6783332824707,140.863006591797 -6.63138866424561,140.891082763672 -6.60333347320557,140.895263671875 -6.60055541992188,140.898040771484 -6.59666728973389,140.947204589844 -6.5,140.951354980469 -6.48361110687256,140.950805664062 -6.47749996185303,140.948577880859 -6.47277736663818,140.94580078125 -6.4686107635498,140.928039550781 -6.45083332061768,140.932189941406 -6.43444442749023,140.963592529297 -6.3386116027832,140.967742919922 -6.33583354949951,140.973297119141 -6.33444499969482,140.985504150391 -6.33305549621582,141.006134033203 -6.33292484283447,141.006103515625 -6,141.006103515625 -4.90555477142334,141.006103515625 -2.61388921737671,141.002471923828 -2.60708522796631,141.029968261719 -2.59277772903442,141.034698486328 -2.59083318710327,141.039428710938 -2.59000015258789,141.046356201172 -2.59000015258789,141.199127197266 -2.61805534362793,141.204681396484 -2.61944437026978,141.214141845703 -2.62222194671631,141.270538330078 -2.64555549621582,141.273864746094 -2.65583324432373,141.278045654297 -2.6652774810791,141.284149169922 -2.67277765274048,141.345794677734 -2.70777797698975,141.369689941406 -2.7180552482605,141.380798339844 -2.72083330154419,141.410797119141 -2.72499990463257,141.426635742188 -2.72972202301025,141.436370849609 -2.73388910293579,141.568572998047 -2.79388904571533,141.608856201172 -2.8125,141.704132080078 -2.86250019073486,141.840515136719 -2.93694448471069,141.881622314453 -2.96444463729858,141.889984130859 -2.96999979019165,141.894714355469 -2.9719443321228,141.913879394531 -2.9719443321228,141.931091308594 -2.9686107635498,141.935791015625 -2.96638870239258,141.962463378906 -2.95888900756836,141.973571777344 -2.95611095428467,141.991912841797 -2.95416688919067,142.003601074219 -2.95611095428467,142.011932373047 -2.96166658401489,142.066070556641 -3.00833368301392,142.076904296875 -3.01777791976929,142.077758789062 -3.02055549621582,142.124969482422 -3.05944442749023,142.252471923828 -3.10472249984741,142.551910400391 -3.21833324432373,142.663604736328 -3.24777793884277,142.946624755859 -3.33249998092651,142.992462158203 -3.34833335876465,143.032745361328 -3.36277770996094,143.041076660156 -3.36416673660278,143.073181152344 -3.36020636558533,143.087738037109 -3.35583353042603,143.093841552734 -3.35500001907349,143.106079101562 -3.35388898849487,143.123840332031 -3.35388898849487,143.172760009766 -3.35722255706787,143.194702148438 -3.3600001335144,143.209686279297 -3.3652777671814,143.2138671875 -3.36805534362793,143.229400634766 -3.37972211837769,143.23828125 -3.38444471359253,143.255554199219 -3.3880558013916,143.336364746094 -3.40166664123535,143.346069335938 -3.40166664123535,143.370788574219 -3.40166664123535,143.384429931641 -3.40305519104004,143.408325195312 -3.40638875961304,143.442749023438 -3.41194438934326,143.516082763672 -3.43444442749023,143.520812988281 -3.43666648864746,143.529144287109 -3.44194412231445,143.536651611328 -3.44805526733398,143.569427490234 -3.47555541992188,143.598846435547 -3.51444482803345,143.602172851562 -3.5247220993042,143.605804443359 -3.54194450378418,143.609130859375 -3.54527807235718,143.61328125 -3.54805564880371,143.648864746094 -3.56722259521484,143.731079101562 -3.60416698455811,143.768310546875 -3.61083364486694,143.790802001953 -3.61083364486694,143.794982910156 -3.61222219467163,143.798858642578 -3.61500024795532,143.949127197266 -3.73333311080933,143.955230712891 -3.73944425582886,143.9580078125 -3.74361133575439,143.964691162109 -3.7572226524353,143.966064453125 -3.76277780532837,143.976348876953 -3.77972221374512,143.981903076172 -3.78805589675903,143.988861083984 -3.79500007629395,143.993011474609 -3.79777812957764,144.016937255859 -3.81055545806885,144.243011474609 -3.87277746200562,144.249114990234 -3.87361097335815,144.253875732422 -3.87138891220093,144.255249023438 -3.86611127853394,144.253875732422 -3.86194467544556,144.253875732422 -3.85500001907349,144.258026123047 -3.84555530548096,144.275268554688 -3.809166431427,144.278594970703 -3.80583333969116,144.284973144531 -3.80527782440186,144.338287353516 -3.80249977111816,144.375244140625 -3.80249977111816,144.511657714844 -3.82083368301392,144.515808105469 -3.82361125946045,144.532196044922 -3.84611082077026,144.534973144531 -3.8502779006958,144.549987792969 -3.87611103057861,144.552185058594 -3.88111114501953,144.547210693359 -3.8938889503479,144.545257568359 -3.90416669845581,144.54248046875 -3.93444442749023,144.543853759766 -3.95361137390137,144.547210693359 -3.96388912200928,144.551361083984 -3.9719443321228,144.571350097656 -3.99194431304932,144.591064453125 -4.00611114501953,144.608306884766 -4.0130558013916,144.613861083984 -4.01444530487061,144.653594970703 -4.0130558013916,144.673309326172 -4.01361179351807,144.678863525391 -4.01500034332275,144.729675292969 -4.0313892364502,144.766662597656 -4.04638862609863,144.850250244141 -4.09305572509766,144.858306884766 -4.09833335876465,144.876342773438 -4.11361122131348,144.978302001953 -4.22277736663818,144.981628417969 -4.22638893127441,144.986633300781 -4.23499965667725,144.991333007812 -4.24388885498047,144.994689941406 -4.25277805328369,144.996063232422 -4.26250076293945,145.004974365234 -4.28166675567627,145.033050537109 -4.33555603027344,145.036651611328 -4.33888912200928,145.054962158203 -4.35194396972656,145.089965820312 -4.37166595458984,145.094696044922 -4.37388896942139,145.157196044922 -4.38277721405029,145.228576660156 -4.3880558013916,145.253051757812 -4.37861061096191,145.293579101562 -4.37666606903076,145.305236816406 -4.37722206115723,145.333862304688 -4.38944435119629,145.338012695312 -4.39222240447998,145.451080322266 -4.49416637420654,145.459411621094 -4.50444507598877,145.527191162109 -4.59249973297119,145.614135742188 -4.70027828216553,145.620513916016 -4.70777797698975,145.675811767578 -4.76194477081299,145.679412841797 -4.76527786254883,145.69384765625 -4.77694511413574,145.735504150391 -4.80277729034424,145.780822753906 -4.92777729034424,145.813598632812 -5.06555557250977,145.813598632812 -5.07250022888184,145.786926269531 -5.23138904571533,145.765808105469 -5.26361179351807,145.738861083984 -5.30527782440186,145.724395751953 -5.41222190856934,145.723846435547 -5.42527770996094,145.725250244141 -5.430832862854,145.734130859375 -5.4491662979126,145.747741699219 -5.46972179412842,145.754699707031 -5.47638893127441,145.766387939453 -5.48527717590332,145.782745361328 -5.4894437789917,145.787750244141 -5.48999977111816,145.793029785156 -5.48999977111816,145.872467041016 -5.48611068725586,145.930816650391 -5.47722244262695,145.935516357422 -5.47638893127441,145.963592529297 -5.47305583953857,145.976623535156 -5.47638893127441,146.082183837891 -5.51250076293945,146.174682617188 -5.55138874053955,146.194702148438 -5.55888843536377,146.289154052734 -5.58888912200928,146.376342773438 -5.59916687011719,146.439971923828 -5.59861087799072,146.445526123047 -5.59861087799072,146.465240478516 -5.60472202301025,146.47021484375 -5.60666751861572,146.474090576172 -5.60944557189941,146.531188964844 -5.65468120574951,146.580535888672 -5.69472217559814,146.605224609375 -5.71777820587158,146.640808105469 -5.74388885498047,146.653045654297 -5.75194454193115,146.662750244141 -5.75611114501953,146.688873291016 -5.76416683197021,146.714691162109 -5.76972198486328,146.770782470703 -5.79138946533203,146.775787353516 -5.79361248016357,146.783843994141 -5.79889011383057,146.786071777344 -5.80388927459717,146.796310424805 -5.83441781997681,146.875213623047 -5.82555675506592,146.894958496094 -5.82888984680176,146.923004150391 -5.84194564819336,146.930511474609 -5.84805679321289,146.946319580078 -5.86638927459717,146.953826904297 -5.88611221313477,146.956604003906 -5.89027881622314,146.962707519531 -5.897780418396,146.992156982422 -5.91611289978027,147.014129638672 -5.92833518981934,147.041625976562 -5.94222354888916,147.046325683594 -5.94416904449463,147.102722167969 -5.96611404418945,147.112152099609 -5.96667003631592,147.228820800781 -5.97223472595215,147.234924316406 -5.97140216827393,147.24658203125 -5.96251487731934,147.269683837891 -5.93807125091553,147.274658203125 -5.93612670898438,147.284942626953 -5.93529415130615,147.423278808594 -5.96058177947998,147.466613769531 -5.97085952758789,147.476867675781 -5.97419261932373,147.484375 -5.98030376434326,147.573303222656 -6.05527782440186,147.590515136719 -6.07222270965576,147.641937255859 -6.13694477081299,147.786651611328 -6.30249977111816,147.826354980469 -6.3372220993042,147.830261230469 -6.34694480895996,147.850250244141 -6.41166687011719,147.863861083984 -6.45916652679443,147.866638183594 -6.47000026702881,147.869964599609 -6.65472221374512,147.869415283203 -6.66083335876465,147.866058349609 -6.67083358764648,147.845520019531 -6.69138813018799,147.838562011719 -6.69805526733398,147.819427490234 -6.71305561065674,147.810516357422 -6.71777820587158,147.770812988281 -6.72611141204834,147.759155273438 -6.72805595397949,147.568023681641 -6.75194454193115,147.416381835938 -6.73499965667725,147.305541992188 -6.74583339691162,147.219696044922 -6.74638843536377,147.199981689453 -6.74583339691162,147.188873291016 -6.74305534362793,147.180816650391 -6.74027729034424,147.174682617188 -6.73555564880371,147.166381835938 -6.72333335876465,147.160247802734 -6.71722221374512,147.149993896484 -6.71388912200928,147.0888671875 -6.71444511413574,146.971069335938 -6.74305534362793,146.961364746094 -6.74722194671631,146.948577880859 -6.79805564880371,146.944976806641 -6.81527709960938,146.943023681641 -6.84027767181396,146.941650390625 -6.90444469451904,146.944976806641 -6.95388889312744,146.946350097656 -6.95944499969482,146.948577880859 -6.96416664123535,146.955230712891 -6.97111129760742,147.0244140625 -7.03694438934326,147.037475585938 -7.04444408416748,147.130798339844 -7.20361137390137,147.140258789062 -7.22111129760742,147.144439697266 -7.23083305358887,147.146362304688 -7.24916648864746,147.145812988281 -7.26194477081299,147.141662597656 -7.27166652679443,147.140258789062 -7.27694511413574,147.137481689453 -7.29472255706787,147.139709472656 -7.32527828216553,147.1533203125 -7.38305473327637,147.154693603516 -7.38861179351807,147.178588867188 -7.46388912200928,147.210784912109 -7.49027729034424,147.216369628906 -7.49166679382324,147.297210693359 -7.5038890838623,147.303314208984 -7.50472259521484,147.320526123047 -7.50527858734131,147.332183837891 -7.50333404541016,147.3369140625 -7.50527858734131,147.418579101562 -7.56722259521484,147.457733154297 -7.5977783203125,147.641357421875 -7.77555561065674,147.666656494141 -7.79111099243164,147.670806884766 -7.79388904571533,147.693298339844 -7.82583332061768,147.696075439453 -7.83527755737305,147.701629638672 -7.87055492401123,147.701629638672 -7.8841667175293,147.700805664062 -7.89027786254883,147.701629638672 -7.90333366394043,147.703033447266 -7.90861129760742,147.710510253906 -7.92166614532471,147.715240478516 -7.92916679382324,147.718566894531 -7.93249988555908,147.731628417969 -7.9399995803833,147.741333007812 -7.94388866424561,147.756927490234 -7.94861030578613,147.776916503906 -7.93638801574707,147.782470703125 -7.93527698516846,147.804412841797 -7.93527698516846,147.854949951172 -7.93527698516846,147.866638183594 -7.93722152709961,147.876342773438 -7.94111061096191,147.888031005859 -7.94999980926514,147.911926269531 -7.96722221374512,147.935791015625 -7.98277759552002,147.939422607422 -7.98472213745117,147.974395751953 -7.99610900878906,147.979675292969 -8.03694534301758,147.982452392578 -8.04777908325195,147.985229492188 -8.05194473266602,147.9921875 -8.0586109161377,148.004425048828 -8.06666564941406,148.009979248047 -8.06666564941406,148.0263671875 -8.06277847290039,148.114685058594 -8.05527877807617,148.13525390625 -8.06611061096191,148.194976806641 -8.25194549560547,148.19970703125 -8.26749992370605,148.205810546875 -8.29527854919434,148.206634521484 -8.30138969421387,148.207183837891 -8.31083297729492,148.207183837891 -8.32055473327637,148.206634521484 -8.34000015258789,148.210784912109 -8.39305686950684,148.220245361328 -8.51027870178223,148.222198486328 -8.53388977050781,148.230529785156 -8.55972290039062,148.235229492188 -8.56861114501953,148.2421875 -8.57527732849121,148.271087646484 -8.59444427490234,148.300537109375 -8.61138916015625,148.318298339844 -8.60861015319824,148.327178955078 -8.60638809204102,148.331359863281 -8.60638809204102,148.347198486328 -8.61138916015625,148.351898193359 -8.61333274841309,148.376617431641 -8.62944412231445,148.443023681641 -8.67500114440918,148.44580078125 -8.67888832092285,148.478576660156 -8.73305511474609,148.479949951172 -8.73861122131348,148.479949951172 -8.75889015197754,148.489685058594 -8.84027671813965,148.494415283203 -8.86666488647461,148.530822753906 -8.99305534362793,148.534698486328 -9.00277900695801,148.536926269531 -9.00750160217285,148.5888671875 -9.07027816772461,148.604125976562 -9.08250045776367,148.614410400391 -9.0858325958252,148.695251464844 -9.10222244262695,148.719970703125 -9.10472106933594,148.725250244141 -9.10472106933594,148.753601074219 -9.10416603088379,148.782196044922 -9.10138893127441,148.842468261719 -9.09055519104004,149.067199707031 -9.04111099243164,149.071350097656 -9.03861236572266,149.137756347656 -9.00666809082031,149.221343994141 -8.99860954284668,149.255828857422 -8.99777793884277,149.259979248047 -8.99916648864746,149.309967041016 -9.01694488525391,149.314697265625 -9.01889038085938,149.316650390625 -9.02166748046875,149.322204589844 -9.03777885437012,149.338012695312 -9.12972068786621,149.328308105469 -9.15277862548828,149.325531005859 -9.15694427490234,149.316070556641 -9.16777801513672,149.311920166016 -9.17055511474609,149.291351318359 -9.18388938903809,149.181640625 -9.34916687011719,149.1796875 -9.35361099243164,149.178863525391 -9.35972213745117,149.178863525391 -9.37333297729492,149.181091308594 -9.38500022888184,149.184417724609 -9.39500045776367,149.208312988281 -9.45249938964844,149.219970703125 -9.47472190856934,149.227752685547 -9.48749923706055,149.231079101562 -9.49110984802246,149.234405517578 -9.49444389343262,149.243286132812 -9.49916648864746,149.266662597656 -9.51000022888184,149.271636962891 -9.5119457244873,149.2783203125 -9.5119457244873,149.28857421875 -9.50861167907715,149.301635742188 -9.50777816772461,149.307189941406 -9.5091667175293,149.348846435547 -9.52194595336914,149.437469482422 -9.57138824462891,149.439422607422 -9.59111022949219,149.440795898438 -9.59638786315918,149.444122314453 -9.59972190856934,149.454406738281 -9.60305404663086,149.662200927734 -9.60722160339355,149.739410400391 -9.60166549682617,149.746337890625 -9.60166549682617,149.758026123047 -9.6038875579834,149.764984130859 -9.60916519165039,149.771087646484 -9.61666488647461,149.775268554688 -9.61944389343262,149.780548095703 -9.6208324432373,149.874389648438 -9.6422233581543,149.880798339844 -9.64305686950684,149.9033203125 -9.64361190795898,149.910247802734 -9.64361190795898,149.94580078125 -9.6422233581543,149.956634521484 -9.63972282409668,149.960784912109 -9.6369457244873,149.982727050781 -9.63138771057129,150.008880615234 -9.63138771057129,150.049133300781 -9.67944526672363,150.051361083984 -9.68416595458984,150.053314208984 -9.68888854980469,150.056915283203 -9.70999908447266,150.056915283203 -9.71527671813965,150.055541992188 -9.72055435180664,150.051910400391 -9.72416687011719,149.988861083984 -9.75111198425293,149.926635742188 -9.76944541931152,149.863586425781 -9.78222274780273,149.857452392578 -9.78277778625488,149.852752685547 -9.78222274780273,149.841644287109 -9.77944564819336,149.835510253906 -9.77888870239258,149.808013916016 -9.7813892364502,149.769714355469 -9.7902774810791,149.764984130859 -9.79222297668457,149.739410400391 -9.80777740478516,149.727172851562 -9.81583404541016,149.720245361328 -9.82277679443359,149.717468261719 -9.8266658782959,149.716369628906 -9.83222198486328,149.717468261719 -9.83749961853027,149.721069335938 -9.84749984741211,149.723022460938 -9.85249900817871,149.76220703125 -9.90166664123535,149.873840332031 -10.0169448852539,149.914154052734 -10.0488891601562,149.926635742188 -10.0569438934326,149.935516357422 -10.0616655349731,149.982727050781 -10.081111907959,149.98828125 -10.0825004577637,149.994415283203 -10.0819444656372,150.003326416016 -10.0772228240967,150.013610839844 -10.0736103057861,150.019714355469 -10.073055267334,150.184143066406 -10.0933322906494,150.189147949219 -10.0952777862549,150.236358642578 -10.1283321380615,150.259704589844 -10.1527786254883,150.29052734375 -10.1830558776855,150.298583984375 -10.1883344650269,150.308319091797 -10.1924991607666,150.352752685547 -10.1999988555908,150.382171630859 -10.2047214508057,150.400268554688 -10.2072219848633,150.579681396484 -10.2411098480225,150.61328125 -10.2755565643311,150.618011474609 -10.2775001525879,150.63525390625 -10.280834197998,150.641357421875 -10.2813892364502,150.647491455078 -10.280834197998,150.775543212891 -10.2613906860352,150.780548095703 -10.2591667175293,150.803588867188 -10.2486095428467,150.815521240234 -10.2397212982178,150.81884765625 -10.2363872528076,150.824981689453 -10.2316665649414,150.829681396484 -10.2294454574585,150.844116210938 -10.2247219085693,150.862731933594 -10.2227764129639,150.869415283203 -10.2227764129639,150.877746582031 -10.2283334732056,150.878295898438 -10.2316665649414,150.870788574219 -10.2377777099609,150.861907958984 -10.2424983978271,150.727752685547 -10.3125,150.641937255859 -10.3494434356689,150.636383056641 -10.3508319854736,150.631072998047 -10.3508319854736,150.602172851562 -10.3502769470215,150.596069335938 -10.3494434356689,150.547485351562 -10.3355560302734,150.496063232422 -10.3186111450195,150.438568115234 -10.3036117553711,150.421905517578 -10.3011112213135,150.415802001953 -10.3002777099609,150.406372070312 -10.3044452667236,150.369110107422 -10.3219451904297,150.358306884766 -10.3313884735107,150.356353759766 -10.3361110687256,150.348571777344 -10.3758316040039,150.346618652344 -10.3875007629395,150.352172851562 -10.3952789306641,150.356903076172 -10.3975009918213,150.568572998047 -10.4627780914307,150.6494140625 -10.4755554199219,150.657745361328 -10.4811115264893,150.663299560547 -10.4891662597656,150.689971923828 -10.5502777099609,150.691925048828 -10.5550003051758,150.691345214844 -10.5611114501953,150.688568115234 -10.5652770996094,150.680267333984 -10.5774993896484,150.675537109375 -10.5794448852539,150.568023681641 -10.6219444274902,150.556365966797 -10.6238880157471,150.522766113281 -10.6191654205322,150.492736816406 -10.6191654205322,150.481628417969 -10.6219444274902,150.477447509766 -10.6244430541992,150.47412109375 -10.6277770996094,150.44384765625 -10.6588897705078,150.428314208984 -10.6877784729004,150.424133300781 -10.6905555725098,150.369964599609 -10.6872215270996,150.268585205078 -10.6886119842529,150.209686279297 -10.7005558013916,150.113006591797 -10.6674995422363,150.099975585938 -10.6575012207031,150.059417724609 -10.6258316040039,150.028045654297 -10.5894432067871,150.016937255859 -10.5733337402344,150.013031005859 -10.5705547332764,150.007476806641 -10.5691661834717,149.91552734375 -10.5577774047852,149.898590087891 -10.5597229003906,149.896362304688 -10.5625,149.893585205078 -10.5633344650269,149.888305664062 -10.5619449615479,149.862182617188 -10.5544452667236,149.852752685547 -10.5502777099609,149.850524902344 -10.5469455718994,149.875244140625 -10.5100002288818,149.878570556641 -10.5066680908203,149.883331298828 -10.5044460296631,149.901916503906 -10.5025005340576,149.942474365234 -10.5025005340576,149.964416503906 -10.5025005340576,149.968292236328 -10.5052795410156,149.971069335938 -10.5094451904297,149.97802734375 -10.5161113739014,149.989685058594 -10.5180568695068,150.016937255859 -10.5113906860352,150.022491455078 -10.5100002288818,150.031372070312 -10.5052795410156,150.039703369141 -10.5,150.078857421875 -10.4627780914307,150.064422607422 -10.4561100006104,149.990234375 -10.4372215270996,149.866363525391 -10.3980560302734,149.806091308594 -10.3677768707275,149.785522460938 -10.3583335876465,149.758026123047 -10.3461112976074,149.747741699219 -10.3427772521973,149.723846435547 -10.3394432067871,149.683868408203 -10.3380546569824,149.6640625 -10.3398141860962)),((152.004425048828 -2.67000007629395,151.972747802734 -2.66888904571533,151.961090087891 -2.66805553436279,151.957733154297 -2.66472196578979,151.955535888672 -2.65999984741211,151.953582763672 -2.64833354949951,151.954406738281 -2.64222240447998,151.958312988281 -2.63249969482422,151.972747802734 -2.60583353042603,151.979675292969 -2.59888887405396,151.983856201172 -2.59611082077026,151.995239257812 -2.59555530548096,152.000823974609 -2.5969443321228,152.010528564453 -2.60111141204834,152.018585205078 -2.60638904571533,152.022216796875 -2.6100001335144,152.035247802734 -2.63111114501953,152.037200927734 -2.63583326339722,152.038024902344 -2.64222240447998,152.029693603516 -2.66111087799072,152.026916503906 -2.6652774810791,152.022216796875 -2.66750001907349,152.004425048828 -2.67000007629395)),((151.959136962891 -2.84611082077026,151.946624755859 -2.84472227096558,151.941345214844 -2.84333324432373,151.937194824219 -2.8405556678772,151.931640625 -2.83249998092651,151.921905517578 -2.80777788162231,151.920806884766 -2.80222225189209,151.928863525391 -2.7186107635498,151.9296875 -2.71250009536743,151.932464599609 -2.70833349227905,151.939147949219 -2.70833349227905,151.944702148438 -2.70972204208374,151.985778808594 -2.72499990463257,151.989959716797 -2.72749996185303,151.996612548828 -2.7344446182251,152.006378173828 -2.74555540084839,152.009155273438 -2.74944448471069,152.009704589844 -2.75583362579346,152.011932373047 -2.79055595397949,152.011932373047 -2.81805562973022,152.009704589844 -2.82277774810791,152.002197265625 -2.82888889312744,151.959136962891 -2.84611082077026)),((152.063873291016 -3.00222253799438,152.059143066406 -3,152.035247802734 -2.98277759552002,152.0283203125 -2.97555541992188,151.960510253906 -2.88722229003906,151.959686279297 -2.8808331489563,151.959686279297 -2.86861085891724,151.960510253906 -2.86250019073486,151.963287353516 -2.85833358764648,151.973571777344 -2.84805536270142,151.978302001953 -2.84611082077026,151.984954833984 -2.84611082077026,152.072204589844 -2.92138910293579,152.078857421875 -2.9283332824707,152.083862304688 -2.93694448471069,152.087188720703 -2.9472222328186,152.089141845703 -2.95888900756836,152.088562011719 -2.96527767181396,152.086639404297 -2.96999979019165,152.073577880859 -2.99805545806885,152.069976806641 -3.00138902664185,152.063873291016 -3.00222253799438)),((150.773590087891 -2.98555564880371,150.768035888672 -2.9844446182251,150.766082763672 -2.97944402694702,150.773040771484 -2.97249984741211,150.788024902344 -2.96027803421021,150.795532226562 -2.95416688919067,150.870788574219 -2.91249990463257,150.879119873047 -2.9088888168335,150.903045654297 -2.90833330154419,150.908599853516 -2.90833330154419,150.913299560547 -2.91027784347534,150.941345214844 -2.9219446182251,151.021087646484 -2.96305561065674,151.023590087891 -2.96722221374512,151.021636962891 -2.9719443321228,151.003875732422 -2.98166656494141,150.999114990234 -2.98361110687256,150.992736816406 -2.9844446182251,150.882446289062 -2.9686107635498,150.872192382812 -2.96527767181396,150.855804443359 -2.9622220993042,150.838012695312 -2.95972204208374,150.831909179688 -2.96027803421021,150.773590087891 -2.98555564880371)),((152.640808105469 -3.23000001907349,152.636108398438 -3.2277774810791,152.605224609375 -3.20388889312744,152.577178955078 -3.17722225189209,152.538879394531 -3.1061110496521,152.537475585938 -3.10055589675903,152.537475585938 -3.09499979019165,152.539428710938 -3.09027767181396,152.553863525391 -3.07055568695068,152.558013916016 -3.06777811050415,152.590240478516 -3.05194425582886,152.599700927734 -3.04805564880371,152.606079101562 -3.04722261428833,152.640258789062 -3.04305553436279,152.644989013672 -3.04527807235718,152.648590087891 -3.04861116409302,152.667755126953 -3.12944412231445,152.668853759766 -3.14861106872559,152.668853759766 -3.15527772903442,152.667755126953 -3.16083335876465,152.654693603516 -3.21638870239258,152.6533203125 -3.22166633605957,152.646362304688 -3.22861099243164,152.640808105469 -3.23000001907349)),((153.343292236328 -3.41666650772095,153.265258789062 -3.40722227096558,153.262481689453 -3.40444421768188,153.263885498047 -3.39888906478882,153.269989013672 -3.39277791976929,153.301635742188 -3.36944437026978,153.333587646484 -3.37138891220093,153.337188720703 -3.375,153.346069335938 -3.38666677474976,153.348022460938 -3.39138889312744,153.347473144531 -3.39750003814697,153.345245361328 -3.41194438934326,153.343292236328 -3.41666650772095)),((154.818572998047 -3.53027772903442,154.795257568359 -3.44138860702515,154.794708251953 -3.43249988555908,154.796081542969 -3.4283332824707,154.799407958984 -3.42500019073486,154.825531005859 -3.4713888168335,154.830261230469 -3.48027753829956,154.833862304688 -3.50416707992554,154.833038330078 -3.51027822494507,154.818572998047 -3.53027772903442)),((153.242462158203 -3.49944448471069,153.237182617188 -3.49805545806885,153.211090087891 -3.48861122131348,153.206909179688 -3.48583316802979,153.192474365234 -3.47277736663818,153.19384765625 -3.4686107635498,153.197204589844 -3.46527767181396,153.220520019531 -3.44888877868652,153.22412109375 -3.4466667175293,153.22802734375 -3.44555521011353,153.233581542969 -3.4466667175293,153.239959716797 -3.45444440841675,153.255554199219 -3.47972202301025,153.259704589844 -3.48916673660278,153.26025390625 -3.49527788162231,153.258331298828 -3.49888896942139,153.242462158203 -3.49944448471069)),((153.639434814453 -4.14083385467529,153.634429931641 -4.13861179351807,153.588012695312 -4.10583305358887,153.585235595703 -4.10194396972656,153.584411621094 -4.09583377838135,153.585235595703 -4.08944416046143,153.587188720703 -4.0847225189209,153.602172851562 -4.05888843536377,153.629669189453 -4.0313892364502,153.633880615234 -4.0286111831665,153.653045654297 -4.02055549621582,153.658599853516 -4.01916694641113,153.662750244141 -4.02194499969482,153.664703369141 -4.02666664123535,153.671630859375 -4.08000087738037,153.672210693359 -4.08611106872559,153.671630859375 -4.10472202301025,153.670257568359 -4.10999965667725,153.650268554688 -4.1380558013916,153.645538330078 -4.14027786254883,153.639434814453 -4.14083385467529)),((145.057739257812 -4.13527774810791,145.050811767578 -4.13527774810791,145.041351318359 -4.13249969482422,145.037200927734 -4.13000011444092,145.031646728516 -4.12166595458984,145.027770996094 -4.11222171783447,145.0263671875 -4.10666656494141,145.022216796875 -4.07666683197021,145.0263671875 -4.06694507598877,145.031646728516 -4.05888843536377,145.036651611328 -4.05666637420654,145.06884765625 -4.04500007629395,145.079132080078 -4.04777812957764,145.095520019531 -4.05888843536377,145.101623535156 -4.06638813018799,145.107177734375 -4.07527828216553,145.110504150391 -4.09222221374512,145.109954833984 -4.09833335876465,145.094696044922 -4.12444400787354,145.092193603516 -4.12833309173584,145.088012695312 -4.13138866424561,145.083312988281 -4.13333320617676,145.057739257812 -4.13527774810791)),((150.74609375 -6.13554954528809,150.729675292969 -6.14666748046875,150.724975585938 -6.14861106872559,150.707183837891 -6.15555572509766,150.668853759766 -6.16833305358887,150.663879394531 -6.16916656494141,150.661102294922 -6.16499996185303,150.659149169922 -6.15333366394043,150.657196044922 -6.14861106872559,150.652191162109 -6.14666748046875,150.63525390625 -6.14861106872559,150.509704589844 -6.23499965667725,150.484954833984 -6.25833415985107,150.480255126953 -6.26722240447998,150.473571777344 -6.27388954162598,150.468566894531 -6.2761116027832,150.406372070312 -6.29305553436279,150.400268554688 -6.29361152648926,150.222747802734 -6.28833293914795,150.211639404297 -6.2761116027832,150.188293457031 -6.25833415985107,150.184143066406 -6.25555610656738,150.180816650391 -6.25500011444092,150.170532226562 -6.25694465637207,150.080810546875 -6.28000068664551,150.038879394531 -6.29916667938232,150.018310546875 -6.32361125946045,150.016387939453 -6.30388832092285,150.014434814453 -6.29916667938232,150.010803222656 -6.29583358764648,149.98828125 -6.27722263336182,149.984130859375 -6.2747220993042,149.978576660156 -6.27333354949951,149.972473144531 -6.27388954162598,149.894989013672 -6.29249954223633,149.889709472656 -6.29249954223633,149.847198486328 -6.29249954223633,149.844421386719 -6.29249954223633,149.842193603516 -6.29249954223633,149.686645507812 -6.30527782440186,149.634704589844 -6.30805492401123,149.609405517578 -6.29249954223633,149.605224609375 -6.28972244262695,149.574981689453 -6.26500034332275,149.571624755859 -6.26166725158691,149.555236816406 -6.22694492340088,149.539428710938 -6.19777774810791,149.510803222656 -6.15277767181396,149.489410400391 -6.12611103057861,149.482452392578 -6.11944389343262,149.467468261719 -6.10972213745117,149.444976806641 -6.09805583953857,149.341339111328 -6.06083297729492,149.335784912109 -6.05944442749023,149.311920166016 -6.05722236633301,149.289978027344 -6.06277751922607,149.163879394531 -6.11250019073486,149.138580322266 -6.14861106872559,149.131072998047 -6.15472221374512,149.119415283203 -6.15694427490234,149.069427490234 -6.16416645050049,149.063018798828 -6.16499996185303,149.056915283203 -6.16416645050049,149.052185058594 -6.16222190856934,149.049407958984 -6.15805530548096,149.048034667969 -6.15277767181396,149.048034667969 -6.14583396911621,149.050262451172 -6.14111137390137,149.054962158203 -6.13916683197021,149.061096191406 -6.13833332061768,149.067199707031 -6.14583396911621,149.071350097656 -6.14861106872559,149.075531005859 -6.14583396911621,149.079681396484 -6.13638877868652,149.078857421875 -6.11944389343262,149.071899414062 -6.09277820587158,149.055541992188 -6.04444408416748,149.039978027344 -6.03694438934326,148.983032226562 -6.01972198486328,148.942474365234 -6.00833415985107,148.920654296875 -6.00002384185791,148.882995605469 -5.98166465759277,148.878814697266 -5.94748497009277,148.876068115234 -5.9436616897583,148.764434814453 -5.86499118804932,148.704650878906 -5.84858131408691,148.699554443359 -5.84745788574219,148.589721679688 -5.82837104797363,148.528045654297 -5.82837104797363,148.401672363281 -5.78336238861084,148.391967773438 -5.77940940856934,148.3876953125 -5.77660369873047,148.366607666016 -5.75592136383057,148.359771728516 -5.74921321868896,148.339324951172 -5.7143726348877,148.330780029297 -5.69515228271484,148.323089599609 -5.67537689208984,148.321655273438 -5.66980838775635,148.316467285156 -5.62802600860596,148.354675292969 -5.50166702270508,148.358001708984 -5.49277782440186,148.359954833984 -5.48805522918701,148.370239257812 -5.4777774810791,148.378570556641 -5.47249984741211,148.428588867188 -5.45111179351807,148.450531005859 -5.45527839660645,148.504699707031 -5.48333263397217,148.511657714844 -5.48999977111816,148.519714355469 -5.50250053405762,148.618286132812 -5.50500011444092,148.883605957031 -5.49694442749023,148.961639404297 -5.47361087799072,148.973297119141 -5.47166633605957,148.985778808594 -5.47305583953857,149.000823974609 -5.47833347320557,149.122192382812 -5.52416706085205,149.126892089844 -5.5261116027832,149.189147949219 -5.55833339691162,149.209686279297 -5.57194519042969,149.2138671875 -5.57472229003906,149.216064453125 -5.57944488525391,149.220764160156 -5.60611152648926,149.270812988281 -5.59444427490234,149.310516357422 -5.58611106872559,149.425537109375 -5.56722259521484,149.549133300781 -5.53861141204834,149.566925048828 -5.52888870239258,149.581909179688 -5.52333354949951,149.611358642578 -5.51861095428467,149.668304443359 -5.51944446563721,149.680541992188 -5.55416679382324,149.680541992188 -5.561110496521,149.685516357422 -5.56305503845215,149.692199707031 -5.56305503845215,149.710784912109 -5.5625,149.875244140625 -5.5363883972168,149.880798339844 -5.53499984741211,149.887481689453 -5.53166675567627,149.916381835938 -5.51194477081299,149.928588867188 -5.50361156463623,149.956085205078 -5.47638893127441,149.964416503906 -5.46416664123535,149.981353759766 -5.4333324432373,149.984130859375 -5.42249965667725,149.983581542969 -5.41638851165771,149.981353759766 -5.41166687011719,149.97802734375 -5.40833377838135,149.973297119141 -5.4061107635498,149.954132080078 -5.40472221374512,149.950531005859 -5.40138912200928,149.923034667969 -5.36055564880371,149.917755126953 -5.35222244262695,149.918304443359 -5.34611129760742,149.928588867188 -5.31527709960938,149.934692382812 -5.30722236633301,150.002777099609 -5.16944408416748,150.015533447266 -5.05749988555908,150.019714355469 -5.04777812957764,150.029968261719 -5.03083324432373,150.034149169922 -5.02805614471436,150.0888671875 -5.00777816772461,150.095794677734 -5.00777816772461,150.121337890625 -5.00972270965576,150.126617431641 -5.01111125946045,150.154693603516 -5.02388954162598,150.181640625 -5.03888893127441,150.19384765625 -5.04722213745117,150.199401855469 -5.05527782440186,150.203582763672 -5.0649995803833,150.204956054688 -5.07055568695068,150.203582763672 -5.07583332061768,150.184143066406 -5.09833335876465,150.180816650391 -5.10194396972656,150.164428710938 -5.11277770996094,150.154693603516 -5.11694431304932,150.132720947266 -5.12222194671631,150.101348876953 -5.13194370269775,150.091644287109 -5.13583374023438,150.082733154297 -5.14138889312744,150.072479248047 -5.15166664123535,150.064422607422 -5.16388893127441,150.061645507812 -5.17472171783447,150.04248046875 -5.3086109161377,150.062194824219 -5.36388874053955,150.121337890625 -5.51250076293945,150.123291015625 -5.51722240447998,150.143859863281 -5.5377779006958,150.164428710938 -5.55138874053955,150.178863525391 -5.55749988555908,150.184143066406 -5.55888843536377,150.282196044922 -5.57055568695068,150.291076660156 -5.57055568695068,150.296630859375 -5.569167137146,150.300811767578 -5.56638813018799,150.306915283203 -5.55888843536377,150.318023681641 -5.54194450378418,150.319976806641 -5.53722190856934,150.323303222656 -5.53361129760742,150.326904296875 -5.53027820587158,150.345245361328 -5.51472282409668,150.412475585938 -5.45861148834229,150.422760009766 -5.45527839660645,150.488555908203 -5.44694423675537,150.511108398438 -5.4505558013916,150.574127197266 -5.47638893127441,150.578308105469 -5.47916698455811,150.595520019531 -5.4961109161377,150.601623535156 -5.51722240447998,150.611083984375 -5.54194450378418,150.61328125 -5.54666709899902,150.616058349609 -5.55083274841309,150.624114990234 -5.55611038208008,150.644134521484 -5.55694389343262,150.677917480469 -5.55129909515381,150.693298339844 -5.54749965667725,150.698852539062 -5.54611110687256,150.914154052734 -5.4908332824707,150.924407958984 -5.48722171783447,150.979125976562 -5.44499969482422,151.003051757812 -5.42111110687256,151.011383056641 -5.4088888168335,151.015533447266 -5.39944458007812,151.018859863281 -5.38916683197021,151.023040771484 -5.37277698516846,151.023040771484 -5.3658332824707,151.018310546875 -5.34333324432373,151.018310546875 -5.33666706085205,151.018859863281 -5.33027839660645,151.0244140625 -5.28805541992188,151.028594970703 -5.27166652679443,151.038879394531 -5.24111080169678,151.046936035156 -5.22194480895996,151.066070556641 -5.18583297729492,151.071075439453 -5.17694473266602,151.084686279297 -5.1563892364502,151.096923828125 -5.14277839660645,151.26220703125 -4.98638820648193,151.266387939453 -4.98388862609863,151.357452392578 -4.94749927520752,151.441070556641 -4.93666648864746,151.513610839844 -4.93805503845215,151.604675292969 -4.96805572509766,151.608856201172 -4.97083377838135,151.614959716797 -4.97000026702881,151.641082763672 -4.95499992370605,151.648590087891 -4.94888877868652,151.654144287109 -4.94083309173584,151.676086425781 -4.90805530548096,151.684417724609 -4.88890266418457,151.687744140625 -4.86499977111816,151.682189941406 -4.81444454193115,151.658325195312 -4.61638832092285,151.630798339844 -4.50638961791992,151.62744140625 -4.49749946594238,151.598022460938 -4.43805503845215,151.592468261719 -4.43000030517578,151.588287353516 -4.42722225189209,151.547210693359 -4.35999965667725,151.501373291016 -4.23916625976562,151.5 -4.23388862609863,151.5 -4.22694492340088,151.503326416016 -4.21666622161865,151.508331298828 -4.20777797698975,151.511657714844 -4.20444488525391,151.536926269531 -4.18194389343262,151.783050537109 -4.20583343505859,151.841918945312 -4.22472190856934,151.852172851562 -4.22833347320557,151.857727050781 -4.23638820648193,151.859680175781 -4.24111080169678,151.861083984375 -4.24666690826416,151.863861083984 -4.27138900756836,151.869964599609 -4.28555583953857,151.878295898438 -4.29805564880371,151.884429931641 -4.30555534362793,151.895263671875 -4.3149995803833,151.904144287109 -4.32000064849854,151.9638671875 -4.33555603027344,151.969421386719 -4.33694458007812,151.974975585938 -4.33694458007812,151.984405517578 -4.33277797698975,151.991912841797 -4.32666683197021,152.138580322266 -4.20444488525391,152.141357421875 -4.20027828216553,152.145538330078 -4.19083309173584,152.150817871094 -4.17555522918701,152.153594970703 -4.16472244262695,152.153594970703 -4.15777778625488,152.156372070312 -4.15388870239258,152.161926269531 -4.14833354949951,152.166076660156 -4.14555549621582,152.171356201172 -4.14416694641113,152.177764892578 -4.14500045776367,152.185241699219 -4.14888954162598,152.214691162109 -4.16611099243164,152.235229492188 -4.2072229385376,152.239410400391 -4.21666622161865,152.2421875 -4.2344446182251,152.2421875 -4.24111080169678,152.240783691406 -4.24666690826416,152.238006591797 -4.24805545806885,152.226898193359 -4.25083351135254,152.202453613281 -4.24666690826416,152.198303222656 -4.24388885498047,152.195526123047 -4.23999977111816,152.194122314453 -4.2344446182251,152.194122314453 -4.22749996185303,152.192749023438 -4.22222232818604,152.189971923828 -4.21805572509766,152.186645507812 -4.21472263336182,152.181640625 -4.21527767181396,152.176910400391 -4.21749973297119,152.172760009766 -4.22694492340088,152.16943359375 -4.24388885498047,152.170806884766 -4.28222274780273,152.171356201172 -4.28833293914795,152.172210693359 -4.29333305358887,152.174133300781 -4.29666709899902,152.1796875 -4.30472183227539,152.186645507812 -4.31166648864746,152.190521240234 -4.31444454193115,152.195526123047 -4.31638813018799,152.263885498047 -4.33500003814697,152.286651611328 -4.33972263336182,152.305236816406 -4.34166717529297,152.355804443359 -4.34305572509766,152.401641845703 -4.61083316802979,152.403045654297 -4.62305545806885,152.405242919922 -4.66888904571533,152.405822753906 -4.68888854980469,152.394989013672 -4.76111125946045,152.389434814453 -4.78305530548096,152.386108398438 -4.79333305358887,152.336090087891 -4.87527751922607,152.333312988281 -4.87916660308838,152.294128417969 -4.92916679382324,152.268035888672 -4.95777797698975,152.241333007812 -4.9844446182251,152.233306884766 -4.98999977111816,152.161102294922 -5.00694465637207,152.157196044922 -5.00694465637207,152.123565673828 -4.99944400787354,152.112457275391 -4.99666690826416,152.088562011719 -4.98638820648193,152.083038330078 -4.98499965667725,152.050262451172 -4.97972202301025,151.996612548828 -4.97277736663818,151.990509033203 -4.97222232818604,151.984954833984 -4.97361087799072,151.978302001953 -4.98027801513672,151.974975585938 -4.98388862609863,151.970794677734 -4.993332862854,151.968017578125 -5.0041675567627,151.966644287109 -5.02333354949951,151.964691162109 -5.10472202301025,151.969970703125 -5.14833354949951,151.97412109375 -5.15777778625488,151.979675292969 -5.16583347320557,151.993286132812 -5.17555522918701,152.069427490234 -5.23499965667725,152.07275390625 -5.23833274841309,152.118011474609 -5.29222202301025,152.124114990234 -5.29972171783447,152.129669189453 -5.30777740478516,152.144134521484 -5.34138870239258,152.145538330078 -5.34666728973389,152.147491455078 -5.36388874053955,152.144134521484 -5.37416648864746,152.131072998047 -5.40222263336182,152.123565673828 -5.41638851165771,152.096069335938 -5.4572229385376,151.972747802734 -5.53111171722412,151.968566894531 -5.53361129760742,151.841918945312 -5.59722232818604,151.825531005859 -5.60111141204834,151.818572998047 -5.60111141204834,151.808319091797 -5.5977783203125,151.779418945312 -5.58555603027344,151.771362304688 -5.58000087738037,151.759155273438 -5.55138874053955,151.752777099609 -5.54388904571533,151.748565673828 -5.54111099243164,151.705535888672 -5.53111171722412,151.699401855469 -5.53027820587158,151.491638183594 -5.52833366394043,151.473297119141 -5.53027820587158,151.467742919922 -5.53166675567627,151.459411621094 -5.53583335876465,151.454132080078 -5.54111099243164,151.44384765625 -5.58555603027344,151.444427490234 -5.59166717529297,151.402770996094 -5.75137805938721,151.384704589844 -5.80720043182373,151.317779541016 -5.84993076324463,151.165649414062 -5.95807075500488,151.003051757812 -6.02250003814697,150.940795898438 -6.0286111831665,150.855804443359 -6.04083347320557,150.811920166016 -6.07638931274414,150.812744140625 -6.08944416046143,150.793304443359 -6.11805534362793,150.775543212891 -6.13916683197021,150.771636962891 -6.14166736602783,150.74609375 -6.13554954528809)),((154.153869628906 -4.44222164154053,154.128570556641 -4.3841667175293,154.126617431641 -4.37944412231445,154.128021240234 -4.37388896942139,154.132720947266 -4.37166595458984,154.140808105469 -4.37055492401123,154.150543212891 -4.37444400787354,154.152770996094 -4.37944412231445,154.1533203125 -4.3855562210083,154.155242919922 -4.43805503845215,154.153869628906 -4.44222164154053)),((145.951354980469 -4.76444530487061,145.944427490234 -4.76444530487061,145.93359375 -4.76194477081299,145.918579101562 -4.75638961791992,145.898590087891 -4.74194431304932,145.891662597656 -4.73527717590332,145.875244140625 -4.69694423675537,145.873840332031 -4.69138813018799,145.872467041016 -4.67249965667725,145.873840332031 -4.66694450378418,145.892486572266 -4.6094446182251,145.8994140625 -4.59583377838135,145.904693603516 -4.58777809143066,145.914978027344 -4.57750034332275,145.966369628906 -4.53305530548096,145.970520019531 -4.53027820587158,145.975250244141 -4.52833366394043,145.981628417969 -4.52750015258789,146.011657714844 -4.5494441986084,146.026916503906 -4.56166648864746,146.053588867188 -4.5963888168335,146.055541992188 -4.60138893127441,146.054138183594 -4.66138935089111,146.04052734375 -4.70916652679443,146.037750244141 -4.71333408355713,146.027465820312 -4.72361087799072,146.019989013672 -4.72972202301025,145.994415283203 -4.74555492401123,145.961639404297 -4.76111125946045,145.951354980469 -4.76444530487061)),((159.513305664062 -4.58166694641113,159.511383056641 -4.57666683197021,159.515533447266 -4.53972244262695,159.518859863281 -4.5363883972168,159.522216796875 -4.55083274841309,159.523040771484 -4.56388854980469,159.519714355469 -4.57388973236084,159.516937255859 -4.57805633544922,159.513305664062 -4.58166694641113)),((149.552459716797 -4.72083377838135,149.546356201172 -4.72027778625488,149.475799560547 -4.71138954162598,149.470245361328 -4.71000003814697,149.465515136719 -4.70777797698975,149.461364746094 -4.70527839660645,149.457733154297 -4.70166683197021,149.455810546875 -4.69694423675537,149.454406738281 -4.68472194671631,149.455810546875 -4.67916679382324,149.468017578125 -4.66416645050049,149.506652832031 -4.64777851104736,149.512756347656 -4.64694499969482,149.518859863281 -4.64777851104736,149.529968261719 -4.65055561065674,149.540252685547 -4.65388870239258,149.543579101562 -4.65722274780273,149.549133300781 -4.66555595397949,149.559967041016 -4.68194389343262,149.563293457031 -4.69222164154053,149.564147949219 -4.70527839660645,149.562744140625 -4.71055603027344,149.560516357422 -4.71527767181396,149.557189941406 -4.7188892364502,149.552459716797 -4.72083377838135)),((146.240509033203 -4.85805511474609,146.234405517578 -4.85750007629395,146.215789794922 -4.85138893127441,146.2119140625 -4.84861087799072,146.201629638672 -4.83833312988281,146.199401855469 -4.83361148834229,146.198028564453 -4.82805633544922,146.200256347656 -4.81638813018799,146.202178955078 -4.81166648864746,146.215789794922 -4.79111099243164,146.219970703125 -4.78833293914795,146.232177734375 -4.78833293914795,146.238555908203 -4.79055595397949,146.241333007812 -4.79333305358887,146.256927490234 -4.81166648864746,146.262481689453 -4.81972217559814,146.263885498047 -4.82527828216553,146.263885498047 -4.83083343505859,146.261932373047 -4.83555603027344,146.250823974609 -4.85472202301025,146.246612548828 -4.85750007629395,146.240509033203 -4.85805511474609)),((149.152191162109 -4.92361068725586,149.133026123047 -4.91555595397949,149.128845214844 -4.9127779006958,149.122741699219 -4.90527820587158,149.118560791016 -4.89555549621582,149.118011474609 -4.88944435119629,149.119415283203 -4.8841667175293,149.122192382812 -4.88138866424561,149.156921386719 -4.86694431304932,149.161926269531 -4.86638832092285,149.165802001953 -4.86777782440186,149.175537109375 -4.87805557250977,149.178314208984 -4.88194370269775,149.181640625 -4.89222240447998,149.178863525391 -4.89638900756836,149.156921386719 -4.92305564880371,149.152191162109 -4.92361068725586)),((154.63720703125 -5.45861148834229,154.618011474609 -5.43138885498047,154.5869140625 -5.34472274780273,154.565795898438 -5.27666664123535,154.5302734375 -5.13388919830322,154.532196044922 -5.12222194671631,154.541076660156 -5.10388851165771,154.546630859375 -5.09555530548096,154.558319091797 -5.08000087738037,154.598846435547 -5.03083324432373,154.605529785156 -5.02388954162598,154.620513916016 -5.01861095428467,154.63916015625 -5.01638889312744,154.646087646484 -5.01638889312744,154.6513671875 -5.01777839660645,154.658874511719 -5.02388954162598,154.665802001953 -5.03083324432373,154.671356201172 -5.03888893127441,154.726898193359 -5.19722175598145,154.728302001953 -5.20277786254883,154.728302001953 -5.21638870239258,154.69384765625 -5.41833305358887,154.692474365234 -5.42388916015625,154.687194824219 -5.43194389343262,154.675537109375 -5.44083309173584,154.63720703125 -5.45861148834229)),((147.135528564453 -5.45111179351807,147.121887207031 -5.44444370269775,147.009979248047 -5.35499954223633,147.008026123047 -5.3502779006958,147.002471923828 -5.30388832092285,147.008026123047 -5.25888919830322,147.009979248047 -5.24722194671631,147.013610839844 -5.23833274841309,147.017761230469 -5.23555564880371,147.109405517578 -5.19333267211914,147.121063232422 -5.19111061096191,147.128570556641 -5.19194412231445,147.134979248047 -5.19527721405029,147.191070556641 -5.248610496521,147.211639404297 -5.26916694641113,147.228851318359 -5.36388874053955,147.229949951172 -5.42111110687256,147.224670410156 -5.42944431304932,147.220520019531 -5.43194389343262,147.158874511719 -5.44833278656006,147.1533203125 -5.44972133636475,147.135528564453 -5.45111179351807)),((147.596618652344 -5.36305522918701,147.591918945312 -5.36111068725586,147.567199707031 -5.33916664123535,147.563873291016 -5.33583354949951,147.561645507812 -5.33111190795898,147.560516357422 -5.31888961791992,147.561645507812 -5.31333351135254,147.563873291016 -5.3086109161377,147.57080078125 -5.30166625976562,147.583038330078 -5.29361152648926,147.591918945312 -5.2902774810791,147.602172851562 -5.28805541992188,147.609130859375 -5.28805541992188,147.620788574219 -5.2902774810791,147.625518798828 -5.29222202301025,147.628845214844 -5.29555511474609,147.640533447266 -5.31666660308838,147.642761230469 -5.3216667175293,147.643310546875 -5.32777786254883,147.642761230469 -5.33388900756836,147.640533447266 -5.3386116027832,147.626892089844 -5.35222244262695,147.602172851562 -5.3619441986084,147.596618652344 -5.36305522918701)),((148.114685058594 -5.4688892364502,148.087463378906 -5.45527839660645,148.079132080078 -5.44972133636475,148.077178955078 -5.44499969482422,148.073028564453 -5.43000030517578,148.071624755859 -5.4244441986084,148.072204589844 -5.41833305358887,148.084686279297 -5.38972282409668,148.090789794922 -5.38222217559814,148.099700927734 -5.3774995803833,148.117462158203 -5.3841667175293,148.122192382812 -5.38638877868652,148.136657714844 -5.39944458007812,148.139434814453 -5.40333366394043,148.143585205078 -5.41305541992188,148.144989013672 -5.41833305358887,148.145538330078 -5.43833255767822,148.143585205078 -5.44972133636475,148.138031005859 -5.45805549621582,148.133880615234 -5.46083354949951,148.125793457031 -5.4661111831665,148.120788574219 -5.46833324432373,148.114685058594 -5.4688892364502)),((155.404083251953 -6,155.41552734375 -6.07638931274414,155.418853759766 -6.08666706085205,155.428588867188 -6.11111068725586,155.430541992188 -6.1158332824707,155.432739257812 -6.12083339691162,155.477172851562 -6.16916656494141,155.490783691406 -6.18277740478516,155.499114990234 -6.18805503845215,155.562744140625 -6.21749973297119,155.577178955078 -6.22361087799072,155.582733154297 -6.22500038146973,155.5888671875 -6.22416687011719,155.614959716797 -6.22000026702881,155.767761230469 -6.35583305358887,155.772491455078 -6.35777759552002,155.795257568359 -6.36250019073486,155.809692382812 -6.36861038208008,155.813598632812 -6.37138843536377,155.832733154297 -6.39861106872559,155.909698486328 -6.51222229003906,155.917755126953 -6.52444458007812,155.921905517578 -6.53416633605957,155.965789794922 -6.70555591583252,155.967193603516 -6.71111106872559,155.967742919922 -6.71722221374512,155.966644287109 -6.72277736663818,155.948028564453 -6.77583312988281,155.940521240234 -6.78861141204834,155.918579101562 -6.80777740478516,155.913024902344 -6.80916595458984,155.909698486328 -6.80555534362793,155.908874511719 -6.7994441986084,155.890533447266 -6.77972221374512,155.860778808594 -6.77500057220459,155.854675292969 -6.77444458007812,155.848571777344 -6.77500057220459,155.823852539062 -6.77777767181396,155.816375732422 -6.78055572509766,155.775268554688 -6.81444454193115,155.748565673828 -6.84249973297119,155.742462158203 -6.84999942779541,155.719696044922 -6.875,155.713012695312 -6.88194370269775,155.707458496094 -6.88333320617676,155.69384765625 -6.88333320617676,155.623840332031 -6.868332862854,155.558868408203 -6.85249996185303,155.4921875 -6.83027839660645,155.47802734375 -6.82416725158691,155.444976806641 -6.80916595458984,155.342742919922 -6.74361133575439,155.3388671875 -6.74111080169678,155.335235595703 -6.73750019073486,155.239959716797 -6.62249946594238,155.192749023438 -6.56055545806885,155.201629638672 -6.53472232818604,155.207183837891 -6.53472232818604,155.2099609375 -6.53055572509766,155.216064453125 -6.51638889312744,155.224975585938 -6.47749996185303,155.232452392578 -6.44416618347168,155.233306884766 -6.43805503845215,155.233306884766 -6.4244441986084,155.230529785156 -6.36305522918701,155.226348876953 -6.34694480895996,155.218841552734 -6.32916736602783,155.214141845703 -6.32027816772461,155.204406738281 -6.3086109161377,155.190795898438 -6.29500007629395,155.187194824219 -6.29166698455811,155.174987792969 -6.28333282470703,155.127746582031 -6.2761116027832,155.101623535156 -6.27722263336182,155.063293457031 -6.25694561004639,154.994110107422 -6.21666622161865,154.981628417969 -6.20861148834229,154.972198486328 -6.19777774810791,154.969970703125 -6.19277763366699,154.888580322266 -6.07916736602783,154.880249023438 -6.07361125946045,154.823577880859 -6.02805614471436,154.755645751953 -5.95617389678955,154.746643066406 -5.94450378417969,154.744384765625 -5.93978023529053,154.700469970703 -5.78020095825195,154.698577880859 -5.76851844787598,154.699432373047 -5.7623987197876,154.71826171875 -5.6700611114502,154.753601074219 -5.51805591583252,154.79052734375 -5.47916698455811,154.794128417969 -5.48250007629395,154.882446289062 -5.54333305358887,154.920806884766 -5.54999923706055,154.961090087891 -5.54666709899902,154.967468261719 -5.54611110687256,155.073577880859 -5.56166648864746,155.162353515625 -5.73234081268311,155.216064453125 -5.86872386932373,155.268798828125 -5.88423919677734,155.277679443359 -5.88895511627197,155.365020751953 -5.95777797698975,155.371643066406 -5.96472263336182,155.400543212891 -5.99583339691162,155.404083251953 -6)),((147.990478515625 -5.85603713989258,147.983520507812 -5.82075119018555,147.982116699219 -5.81519317626953,147.974609375 -5.79546737670898,147.972381591797 -5.79074478149414,147.968475341797 -5.78796863555908,147.945220947266 -5.77992534637451,147.93359375 -5.7777099609375,147.927490234375 -5.77854824066162,147.922790527344 -5.78049659729004,147.865112304688 -5.74775314331055,147.802154541016 -5.67277145385742,147.793273925781 -5.66138458251953,147.769958496094 -5.62221908569336,147.766052246094 -5.61277484893799,147.765228271484 -5.60666275024414,147.761108398438 -5.52833366394043,147.761932373047 -5.5222225189209,147.7802734375 -5.49416637420654,147.783874511719 -5.4908332824707,147.814697265625 -5.48472213745117,147.841918945312 -5.48999977111816,147.852172851562 -5.49361133575439,148.008605957031 -5.57611179351807,148.020812988281 -5.58416652679443,148.040802001953 -5.59861087799072,148.044128417969 -5.60194396972656,148.065307617188 -5.62758445739746,148.074279785156 -5.64482402801514,148.078460693359 -5.65427875518799,148.080444335938 -5.66595458984375,148.078552246094 -5.69124603271484,148.076629638672 -5.70347595214844,148.072540283203 -5.72654151916504,148.067840576172 -5.74905109405518,148.061492919922 -5.77711772918701,148.057586669922 -5.78656482696533,148.017150878906 -5.84463882446289,148.000762939453 -5.85269927978516,147.990478515625 -5.85603713989258)),((149.048034667969 -6.09555530548096,149.043304443359 -6.09333324432373,149.043853759766 -6.0886116027832,149.045257568359 -6.0872220993042,149.054138183594 -6.08388900756836,149.058319091797 -6.08666706085205,149.057739257812 -6.09138870239258,149.053588867188 -6.09416675567627,149.048034667969 -6.09555530548096)),((143.994415283203 -7.82583332061768,143.984680175781 -7.8230562210083,143.943572998047 -7.80277729034424,143.934692382812 -7.79805564880371,143.923583984375 -7.78861141204834,143.91748046875 -7.78111171722412,143.914703369141 -7.77694511413574,143.877746582031 -7.7186107635498,143.875793457031 -7.71388912200928,143.877166748047 -7.7097225189209,143.88134765625 -7.70694446563721,143.886657714844 -7.70833396911621,143.959411621094 -7.74222183227539,143.966918945312 -7.74833297729492,143.979125976562 -7.76333427429199,144.000549316406 -7.78999996185303,144.008026123047 -7.80277729034424,144.009429931641 -7.80833339691162,144.008605957031 -7.81416606903076,144.006652832031 -7.819167137146,143.999694824219 -7.82444477081299,143.994415283203 -7.82583332061768)),((145.193572998047 -7.86722183227539,145.186645507812 -7.86722183227539,145.182464599609 -7.86444473266602,145.180541992188 -7.86111068725586,145.177764892578 -7.83666706085205,145.178314208984 -7.83055591583252,145.182464599609 -7.82777786254883,145.185241699219 -7.83055591583252,145.191345214844 -7.84083366394043,145.197479248047 -7.85499954223633,145.198852539062 -7.86055564880371,145.197479248047 -7.86444473266602,145.193572998047 -7.86722183227539)),((143.727752685547 -8.10222244262695,143.697479248047 -8.08444404602051,143.683319091797 -8.07833290100098,143.661376953125 -8.07277679443359,143.618011474609 -8.07222175598145,143.599700927734 -8.07416725158691,143.588562011719 -8.0716667175293,143.582458496094 -8.06416702270508,143.569427490234 -8.04305648803711,143.566070556641 -8.03277778625488,143.565246582031 -8.02000045776367,143.568023681641 -8.01583480834961,143.574127197266 -8.01388931274414,143.629669189453 -8.00638961791992,143.635803222656 -8.00583457946777,143.642761230469 -8.00583457946777,143.651092529297 -8.00833511352539,143.66943359375 -8.0172233581543,143.682464599609 -8.02472305297852,143.697479248047 -8.03694534301758,143.707733154297 -8.04722213745117,143.731079101562 -8.0716667175293,143.737182617188 -8.07888793945312,143.739959716797 -8.08305549621582,143.741333007812 -8.0886116027832,143.739410400391 -8.09333229064941,143.733306884766 -8.10083198547363,143.727752685547 -8.10222244262695)),((143.66552734375 -8.17611122131348,143.654968261719 -8.17250061035156,143.625518798828 -8.15416717529297,143.621612548828 -8.15166664123535,143.618835449219 -8.14750099182129,143.607727050781 -8.13055419921875,143.604949951172 -8.11972045898438,143.604400634766 -8.11361122131348,143.604949951172 -8.10888862609863,143.609130859375 -8.10610961914062,143.636657714844 -8.09249877929688,143.642211914062 -8.09055519104004,143.654968261719 -8.0897216796875,143.679138183594 -8.09333229064941,143.688568115234 -8.09722137451172,143.700256347656 -8.10610961914062,143.707183837891 -8.11277770996094,143.710510253906 -8.11638832092285,143.716064453125 -8.12444305419922,143.718841552734 -8.13527870178223,143.719421386719 -8.15500068664551,143.7119140625 -8.16111183166504,143.702453613281 -8.1652774810791,143.683319091797 -8.1733341217041,143.677764892578 -8.17472267150879,143.66552734375 -8.17611122131348)),((143.685791015625 -8.24722099304199,143.659973144531 -8.241943359375,143.654418945312 -8.24055480957031,143.650268554688 -8.23777770996094,143.648315429688 -8.23305511474609,143.648864746094 -8.22694396972656,143.651641845703 -8.19972229003906,143.666656494141 -8.19305610656738,143.726898193359 -8.17388916015625,143.733306884766 -8.17472267150879,143.737182617188 -8.17722320556641,143.755828857422 -8.20527839660645,143.756378173828 -8.20861053466797,143.755249023438 -8.21388816833496,143.752471923828 -8.21805572509766,143.7421875 -8.22833251953125,143.734680175781 -8.23444366455078,143.718841552734 -8.23916625976562,143.697479248047 -8.24527740478516,143.685791015625 -8.24722099304199)),((143.687194824219 -8.43972206115723,143.680541992188 -8.43972206115723,143.670257568359 -8.43638801574707,143.651641845703 -8.42749977111816,143.630523681641 -8.40722274780273,143.610504150391 -8.38611221313477,143.584411621094 -8.3577766418457,143.607177734375 -8.33277702331543,143.612731933594 -8.33388900756836,143.653045654297 -8.34222221374512,143.658599853516 -8.3436107635498,143.66552734375 -8.34749984741211,143.672210693359 -8.35444450378418,143.677764892578 -8.36249923706055,143.692199707031 -8.39583396911621,143.694976806641 -8.40666770935059,143.698303222656 -8.42361068725586,143.698303222656 -8.43027877807617,143.696929931641 -8.43555641174316,143.692749023438 -8.43833351135254,143.687194824219 -8.43972206115723)),((143.57275390625 -8.49388885498047,143.559143066406 -8.49388885498047,143.509155273438 -8.48250007629395,143.498016357422 -8.47972106933594,143.493286132812 -8.4777774810791,143.354949951172 -8.41805648803711,143.318572998047 -8.39305686950684,143.315795898438 -8.38888931274414,143.314422607422 -8.38361167907715,143.314422607422 -8.37666511535645,143.319427490234 -8.36916542053223,143.326904296875 -8.3630542755127,143.331634521484 -8.36111068725586,143.339141845703 -8.35833358764648,143.342742919922 -8.3577766418457,143.356353759766 -8.3577766418457,143.494689941406 -8.3630542755127,143.573577880859 -8.37194442749023,143.578308105469 -8.37388801574707,143.581085205078 -8.37805557250977,143.616058349609 -8.46277809143066,143.616058349609 -8.4688892364502,143.613861083984 -8.47360992431641,143.610504150391 -8.47694396972656,143.583862304688 -8.49138832092285,143.578857421875 -8.49333190917969,143.57275390625 -8.49388885498047)),((143.632446289062 -8.73444366455078,143.60107421875 -8.6924991607666,143.585784912109 -8.67972183227539,143.487731933594 -8.62888717651367,143.3671875 -8.54472351074219,143.278869628906 -8.51027870178223,143.269989013672 -8.50555610656738,143.252777099609 -8.49527740478516,143.240509033203 -8.48722076416016,143.182189941406 -8.42972183227539,143.180816650391 -8.42416763305664,143.18359375 -8.42000007629395,143.211639404297 -8.4152774810791,143.217742919922 -8.41611099243164,143.227447509766 -8.42611122131348,143.233032226562 -8.43444442749023,143.251373291016 -8.45666694641113,143.261657714844 -8.46694374084473,143.274688720703 -8.47444343566895,143.324676513672 -8.48583221435547,143.371337890625 -8.49388885498047,143.422760009766 -8.51083374023438,143.467193603516 -8.52777862548828,143.644134521484 -8.66472244262695,143.647491455078 -8.66805648803711,143.651641845703 -8.67777824401855,143.653045654297 -8.68305587768555,143.653594970703 -8.68916702270508,143.653045654297 -8.7005558013916,143.641357421875 -8.72972106933594,143.638031005859 -8.73305511474609,143.632446289062 -8.73444366455078)),((151.144439697266 -8.8305549621582,151.094970703125 -8.7711124420166,151.10107421875 -8.63888931274414,151.05859375 -8.55166625976562,151.052459716797 -8.55222320556641,151.034698486328 -8.55222320556641,151.029144287109 -8.55083274841309,151.003051757812 -8.54277801513672,150.999694824219 -8.53944396972656,150.997741699219 -8.53472328186035,150.996917724609 -8.52861213684082,150.997741699219 -8.52250099182129,151.024993896484 -8.46694374084473,151.033325195312 -8.45472145080566,151.054412841797 -8.43499946594238,151.062744140625 -8.42972183227539,151.076354980469 -8.42611122131348,151.118286132812 -8.42000007629395,151.124969482422 -8.42000007629395,151.124969482422 -8.42555618286133,151.123840332031 -8.62472152709961,151.103302001953 -8.72916603088379,151.102447509766 -8.741943359375,151.103851318359 -8.7541675567627,151.107177734375 -8.76444625854492,151.144439697266 -8.8305549621582)),((152.835510253906 -9.23555564880371,152.829956054688 -9.22333335876465,152.679962158203 -9.09055519104004,152.6533203125 -9.06972122192383,152.649139404297 -9.06694412231445,152.573028564453 -9.02027893066406,152.563598632812 -9.01611137390137,152.556640625 -9.01611137390137,152.540252685547 -9.02027893066406,152.499694824219 -9.02500152587891,152.497741699219 -9.02166748046875,152.5244140625 -8.99305534362793,152.527770996094 -8.98972129821777,152.532470703125 -8.98777770996094,152.619689941406 -8.96138954162598,152.625793457031 -8.96055603027344,152.647216796875 -8.96138954162598,152.8046875 -8.96944427490234,152.810241699219 -8.97083282470703,152.814971923828 -8.97277641296387,152.93359375 -9.04388999938965,152.937744140625 -9.04666709899902,152.952758789062 -9.05888938903809,153.017761230469 -9.11777687072754,153.020538330078 -9.12166595458984,153.019989013672 -9.12638854980469,153.002777099609 -9.16500091552734,152.997192382812 -9.17305564880371,152.993011474609 -9.17583274841309,152.98828125 -9.17777824401855,152.982177734375 -9.17722320556641,152.835510253906 -9.23555564880371)),((150.334411621094 -9.52666664123535,150.310241699219 -9.5261116027832,150.193023681641 -9.45388793945312,150.180816650391 -9.44555473327637,150.173858642578 -9.43888854980469,150.110778808594 -9.37277603149414,150.108306884766 -9.36861038208008,150.103302001953 -9.33694458007812,150.102752685547 -9.33083343505859,150.104125976562 -9.31861114501953,150.106903076172 -9.30777740478516,150.123291015625 -9.2630558013916,150.126068115234 -9.26027870178223,150.143859863281 -9.24555397033691,150.189147949219 -9.21111106872559,150.198028564453 -9.20777702331543,150.206909179688 -9.2055549621582,150.2138671875 -9.2055549621582,150.232177734375 -9.20777702331543,150.326904296875 -9.26916694641113,150.330810546875 -9.27194595336914,150.333038330078 -9.27666664123535,150.376892089844 -9.38333320617676,150.37744140625 -9.38944435119629,150.363006591797 -9.48749923706055,150.344696044922 -9.51666641235352,150.339141845703 -9.52472305297852,150.334411621094 -9.52666664123535)),((150.846923828125 -9.71805572509766,150.844116210938 -9.68555641174316,150.801635742188 -9.65861129760742,150.763305664062 -9.66250038146973,150.691345214844 -9.66333389282227,150.661102294922 -9.66333389282227,150.654968261719 -9.66250038146973,150.622741699219 -9.65388870239258,150.514434814453 -9.62333297729492,150.490509033203 -9.58361053466797,150.427459716797 -9.44083404541016,150.423309326172 -9.43138885498047,150.419982910156 -9.41472244262695,150.419982910156 -9.4011116027832,150.421905517578 -9.38944435119629,150.426086425781 -9.37666511535645,150.435791015625 -9.35916519165039,150.442474365234 -9.35499954223633,150.473571777344 -9.33888816833496,150.478851318359 -9.33749961853027,150.481628417969 -9.33694458007812,150.487731933594 -9.33749961853027,150.498840332031 -9.34027671813965,150.505554199219 -9.34222221374512,150.5302734375 -9.35166549682617,150.571350097656 -9.37055397033691,150.598022460938 -9.38500022888184,150.618011474609 -9.39777946472168,150.624969482422 -9.40444564819336,150.63525390625 -9.42194557189941,150.639434814453 -9.42472267150879,150.666656494141 -9.43833351135254,150.676910400391 -9.4416675567627,150.683044433594 -9.44083404541016,150.731903076172 -9.42805671691895,150.7421875 -9.42472267150879,150.746063232422 -9.42138862609863,150.748291015625 -9.41805648803711,150.754974365234 -9.40444564819336,150.760528564453 -9.40444564819336,150.765258789062 -9.4063892364502,150.777770996094 -9.41472244262695,150.804412841797 -9.43277740478516,150.828308105469 -9.45638847351074,150.885803222656 -9.52083396911621,150.888031005859 -9.52555656433105,150.931915283203 -9.64166831970215,150.932464599609 -9.64777946472168,150.930541992188 -9.65916633605957,150.921630859375 -9.67083358764648,150.906646728516 -9.68277740478516,150.901092529297 -9.68138885498047,150.896362304688 -9.67416763305664,150.893585205078 -9.67194557189941,150.888580322266 -9.67138862609863,150.876892089844 -9.67749977111816,150.873565673828 -9.68083381652832,150.846923828125 -9.71805572509766)),((151.229125976562 -10.2011108398438,151.19775390625 -10.1727771759033,151.190246582031 -10.1669454574585,151.148315429688 -10.1472234725952,151.143585205078 -10.1452789306641,151.086639404297 -10.1269435882568,151.075805664062 -10.1244430541992,151.025817871094 -10.1141662597656,151.001647949219 -10.1108322143555,150.994964599609 -10.1108322143555,150.983306884766 -10.1127777099609,150.970245361328 -10.1122207641602,150.958587646484 -10.1102771759033,150.94970703125 -10.1055545806885,150.91552734375 -10.0041675567627,150.877746582031 -9.92666625976562,150.826904296875 -9.83888816833496,150.762481689453 -9.80500030517578,150.758605957031 -9.80249977111816,150.750274658203 -9.74833297729492,150.748840332031 -9.73083305358887,150.757202148438 -9.71194458007812,150.759979248047 -9.70777702331543,150.763885498047 -9.70499992370605,150.769439697266 -9.70666694641113,150.788024902344 -9.71944427490234,150.803039550781 -9.73138809204102,150.821624755859 -9.74694442749023,150.900268554688 -9.81916618347168,150.931915283203 -9.8488883972168,150.938873291016 -9.85583305358887,150.962738037109 -9.89361190795898,151.030548095703 -9.98527717590332,151.039428710938 -9.99694442749023,151.059967041016 -10.0169448852539,151.073028564453 -10.0244445800781,151.111358642578 -10.0447244644165,151.116058349609 -10.046667098999,151.122467041016 -10.0475006103516,151.136657714844 -10.041389465332,151.147216796875 -10.0325012207031,151.149139404297 -10.0277786254883,151.149719238281 -10.0219459533691,151.147766113281 -10.0169448852539,151.143585205078 -10.0088901519775,151.140808105469 -10.0050010681152,151.136657714844 -10.0022239685059,151.134704589844 -9.99749946594238,151.134704589844 -9.9908332824707,151.138031005859 -9.98749923706055,151.184143066406 -9.94472312927246,151.192199707031 -9.93944358825684,151.200531005859 -9.93666648864746,151.26416015625 -9.91972160339355,151.281372070312 -9.9233341217041,151.284149169922 -9.92722320556641,151.298583984375 -9.95083236694336,151.299133300781 -9.96249961853027,151.296356201172 -9.97305488586426,151.271087646484 -10.0616655349731,151.252471923828 -10.0974998474121,151.246337890625 -10.1047210693359,151.243560791016 -10.1088886260986,151.234130859375 -10.1330547332764,151.221618652344 -10.1708335876465,151.221618652344 -10.1816673278809,151.222473144531 -10.1877784729004,151.223846435547 -10.1930561065674,151.229125976562 -10.2011108398438)),((150.880523681641 -10.6527786254883,150.856353759766 -10.6494445800781,150.794128417969 -10.6394443511963,150.785247802734 -10.6347236633301,150.769439697266 -10.6111106872559,150.767486572266 -10.6075000762939,150.788024902344 -10.5463886260986,150.790802001953 -10.5422229766846,150.794708251953 -10.539722442627,150.798858642578 -10.5383338928223,150.868835449219 -10.5383338928223,150.874969482422 -10.5388889312744,150.892211914062 -10.547779083252,150.900268554688 -10.5530548095703,150.904418945312 -10.5625,150.894989013672 -10.6466665267944,150.892211914062 -10.6508331298828,150.880523681641 -10.6527786254883)),((150.927185058594 -10.6838893890381,150.923034667969 -10.6825008392334,150.920257568359 -10.6783332824707,150.911926269531 -10.65944480896,150.909973144531 -10.6547222137451,150.909149169922 -10.6419448852539,150.909973144531 -10.6358337402344,150.91943359375 -10.6130542755127,150.922210693359 -10.6088886260986,150.9296875 -10.6030540466309,150.934692382812 -10.6008319854736,150.94970703125 -10.59694480896,151.016082763672 -10.5908336639404,151.064147949219 -10.5922222137451,151.066925048828 -10.5947227478027,151.06884765625 -10.5980548858643,151.069702148438 -10.6111106872559,151.063293457031 -10.6438903808594,151.049133300781 -10.6702785491943,151.042205810547 -10.676944732666,151.036651611328 -10.6783332824707,151.031372070312 -10.676944732666,151.009979248047 -10.6683330535889,151.008026123047 -10.6636123657227,151.003875732422 -10.6472234725952,151.001647949219 -10.6427783966064,150.994110107422 -10.6366672515869,150.988861083984 -10.6352787017822,150.941345214844 -10.6347236633301,150.936096191406 -10.6347236633301,150.929138183594 -10.6547222137451,150.927185058594 -10.6838893890381)),((152.744415283203 -10.7166652679443,152.702453613281 -10.7066669464111,152.686920166016 -10.7019443511963,152.573852539062 -10.6569442749023,152.564971923828 -10.6522235870361,152.544982910156 -10.6380558013916,152.541656494141 -10.6338901519775,152.540802001953 -10.6305541992188,152.542205810547 -10.6277770996094,152.555236816406 -10.6230554580688,152.562194824219 -10.6230554580688,152.573852539062 -10.6252765655518,152.614959716797 -10.6386127471924,152.690246582031 -10.6627788543701,152.693023681641 -10.6627788543701,152.759429931641 -10.6372222900391,152.784973144531 -10.6211109161377,152.790252685547 -10.6197204589844,152.814971923828 -10.6291656494141,152.870513916016 -10.6580562591553,152.873291015625 -10.6622219085693,152.873840332031 -10.6683330535889,152.873291015625 -10.6730556488037,152.870513916016 -10.676944732666,152.863586425781 -10.6825008392334,152.844970703125 -10.6952781677246,152.814971923828 -10.6966667175293,152.744415283203 -10.7166652679443)),((153.210510253906 -11.2858333587646,153.181640625 -11.2522239685059,153.143859863281 -11.2247219085693,153.13916015625 -11.2227764129639,153.120513916016 -11.2166652679443,153.114959716797 -11.2152767181396,153.106079101562 -11.2147216796875,153.093292236328 -11.2019443511963,153.091064453125 -11.1972217559814,153.093841552734 -11.1930561065674,153.102172851562 -11.1888885498047,153.112457275391 -11.1844444274902,153.123840332031 -11.1849994659424,153.12939453125 -11.1863880157471,153.198028564453 -11.2172222137451,153.2138671875 -11.2247219085693,153.222747802734 -11.2294454574585,153.251373291016 -11.2469444274902,153.250579833984 -11.25,153.25 -11.2522239685059,153.241058349609 -11.2688903808594,153.210510253906 -11.2858333587646)),((154.112182617188 -11.4397220611572,154.106628417969 -11.4397220611572,154.062744140625 -11.4330558776855,154.058013916016 -11.4308338165283,154.006652832031 -11.3872222900391,154.003326416016 -11.3838901519775,154.021087646484 -11.3488883972168,154.089691162109 -11.3152770996094,154.153869628906 -11.3141670227051,154.225250244141 -11.3194446563721,154.268310546875 -11.338888168335,154.276641845703 -11.344165802002,154.286376953125 -11.3605556488037,154.288299560547 -11.3649997711182,154.297760009766 -11.3919448852539,154.289703369141 -11.4108333587646,154.285522460938 -11.4136123657227,154.266387939453 -11.421667098999,154.263031005859 -11.4180555343628,154.26025390625 -11.4075012207031,154.256103515625 -11.4047222137451,154.250549316406 -11.4033336639404,154.190246582031 -11.3994445800781,154.137481689453 -11.3986110687256,154.134704589844 -11.4027786254883,154.112182617188 -11.4397220611572)),((153.566070556641 -11.6424999237061,153.522216796875 -11.602222442627,153.479125976562 -11.5733337402344,153.421356201172 -11.5686111450195,153.376068115234 -11.5672225952148,153.3671875 -11.557222366333,153.364410400391 -11.5530548095703,153.363861083984 -11.5472221374512,153.376068115234 -11.5269451141357,153.382446289062 -11.5197219848633,153.38720703125 -11.5108337402344,153.388580322266 -11.5055561065674,153.387756347656 -11.5008344650269,153.384429931641 -11.4974994659424,153.325531005859 -11.4752769470215,153.276916503906 -11.4624996185303,153.271911621094 -11.4605560302734,153.268585205078 -11.4572219848633,153.190521240234 -11.3730554580688,153.188293457031 -11.3683319091797,153.187194824219 -11.3536109924316,153.187194824219 -11.3497219085693,153.198028564453 -11.3241672515869,153.200805664062 -11.3199996948242,153.220520019531 -11.3274993896484,153.291931152344 -11.3569431304932,153.398040771484 -11.4047222137451,153.413879394531 -11.4161109924316,153.426910400391 -11.4302787780762,153.437744140625 -11.4397220611572,153.507751464844 -11.4724998474121,153.559143066406 -11.491943359375,153.570251464844 -11.494722366333,153.576354980469 -11.4955539703369,153.645538330078 -11.5150012969971,153.686645507812 -11.5269451141357,153.751098632812 -11.5644445419312,153.754425048828 -11.5680561065674,153.7763671875 -11.5974998474121,153.777770996094 -11.6027765274048,153.7763671875 -11.6080551147461,153.7744140625 -11.6130542755127,153.770812988281 -11.6163883209229,153.676361083984 -11.6283321380615,153.670257568359 -11.6277770996094,153.605804443359 -11.6174983978271,153.598846435547 -11.6174983978271,153.582458496094 -11.6283321380615,153.566070556641 -11.6424999237061))) geos-3.4.2/tests/xmltester/tests/ticket/bug275.xml0000644000175000017500000002620212206417146021655 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/275 http://trac.osgeo.org/geos/ticket/275 MULTIPOLYGON (((97.4196581300587923 1391.7094503287939915, 1097.3929445351700451 1659.6432199333848985, 2097.6867783781326580 1391.5243492190379584, 2829.5979618286305595 659.3760732813996128, 3097.3929252677053228 -340.6343946513263745, 2829.3203546600025220 -1340.5704802618731719, 2566.4316545475776365 -1603.3983692935935323, 2589.9586987092807249 -1691.2539814346002913, 2550.3216026895242976 -1839.1041048139375107, 2582.0225141513105882 -1957.4828931887502677, 2523.0465473393464890 -2177.4688367911371643, 2361.9813735858801920 -2338.4967531528800464, 2141.9817920466971373 -2397.4218256316030420, 1921.9931199150225893 -2338.4560374338593647, 1915.5094890288899023 -2331.9715065100085667, 1790.8032356108271870 -2365.3730474120334293, 1773.3588004956532131 -2360.6972390794344392, 1755.9014460409671301 -2365.3730474120334293, 1535.9127739092928095 -2306.4072592142892972, 1470.0174606543544087 -2240.5027985744332000, 1267.8188705444704283 -2294.6600223925997852, 1145.5500718010853234 -2750.7342254735290226, 779.4928666591022193 -3116.7067547270667092, 279.4938285436001593 -3250.6273710942414255, -220.4804154644647269 -3116.6142190040254718, -276.8825358097809044 -3060.2042690896628301, -317.8708072633123720 -3042.4487397531365787, -317.0081043084857697 -3040.4572078632113517, -353.9188796380849453 -3025.9673133506230442, -481.8759722620623052 -2952.0780561800302166, -597.3916747239470624 -2859.9435764086629206, -697.8857092860117746 -2751.6218846962374300, -781.1133376604859677 -2629.5325659449085833, -845.2155017965442312 -2496.4027329581699632, -881.7734250743712892 -2377.8616075414415718, -883.2163026251768088 -2378.2274205979942963, -915.6765245378969666 -2250.1944686487954641, -958.6488338256679071 -2176.6893024190303549, -958.3104527203266798 -2176.4914793507796276, -961.3773376604859777 -2171.9925659449086197, -1025.4795017965443549 -2038.8627329581699996, -1069.0243497161841333 -1897.6661108397263433, -1091.0392188351402183 -1751.5566128059626863, -1091.0323623564322588 -1603.7978911310922285, -1089.6762878232161711 -1594.8034867385058533, -1104.6051239273215288 -1541.4387753320572756, -1142.1697554404233870 -1500.9481685832554376, -1144.1735018958338514 -1502.8286850026515822, -1237.9475018958337387 -1402.9096850026517131, -1235.9437554404232742 -1401.0291685832553412, -1283.8694719642787732 -1349.3704336840412452, -1284.3641704239839783 -1349.7723644815778243, -1285.2860836559341351 -1348.6376690100614724, -1338.3270735958196838 -1329.0603190321844522, -1337.4416005745254097 -1326.6613035542172838, -1425.0218796380850108 -1292.2803133506229187, -1552.9789722620623706 -1218.3910561800300911, -1668.4946747239471279 -1126.2565764086627951, -1679.3254791566805579 -1114.5821415641194108, -1680.0605373265407252 -1115.3491207030931491, -1702.7503708819851909 -1093.6036172334481762, -1770.9343685341837045 -1058.4171540195427497, -1770.1722772833329600 -1056.9403807575390601, -1874.5379722620623397 -996.6740561800301066, -1895.7478836933294133 -979.7571858838782646, -1896.7182978644157174 -981.0996960943623435, -2746.6499049371641377 -366.7388744659292570, -2763.2967822031337164 -362.2768436281256186, -2790.5987539714260492 -334.9710818839997160, -2790.5987539714260492 -334.9710818839996023, -2842.3952978644156246 -297.5306960943622698, -2841.4248836933293205 -296.1881858838783614, -2935.7306747239472315 -220.9705764086628506, -3036.2247092860116027 -112.6488846962375874, -3086.2207836436286925 -39.3080148699587753, -3129.2862482014747911 3.7634279033554208, -3145.0472131318642823 62.5968530737783055, -3145.0472131318642823 62.5968530737785258, -3183.5545017965441730 142.5702670418300499, -3227.0993497161844061 283.7668891602737631, -3249.1142188351404911 429.8763871940373633, -3249.1132358283407484 451.0604139114426516, -3263.2299989295852356 503.7562690975839246, -3249.1083453730552719 556.4508704679574294, -3249.1073623564325317 577.6351088689078779, -3227.0789334334317573 723.7425631523476568, -3183.5209817488726003 864.9351434214565870, -3145.0063950996932363 944.9047260716176879, -3129.2399803399048324 1003.7367132380807107, -3086.1705453954227778 1046.8041554447745511, -3036.1675038980588397 1120.1406209104106892, -2935.6634168207938274 1228.4529856651729460, -2820.1391641855243506 1320.5767444414277634, -2801.7930339334729979 1331.1685093202834196, -2763.2166432025555878 1369.7431151977043555, -2710.5214060758321466 1383.8623258961499687, -2692.1752147154593331 1394.4541260546511694, -2554.6299030180371119 1448.4349291985654418, -2410.5755828783944708 1481.3133830416004457, -2322.0627096881689795 1487.9463092123467050, -2263.2300000000000182 1503.7100000000000364, -2204.3990753125572155 1487.9409523895812981, -2115.7029639281322488 1481.2860169705504632, -1971.6547489328795564 1448.3808253636827885, -1834.1194591345197296 1394.3744929749309449, -1815.7587157038797159 1383.7697470828661608, -1763.0830830785189391 1369.6505646428263390, -1724.5137550381382425 1331.0687426030108327, -1706.1692244587284222 1320.4733608833789731, -1685.0325693031700212 1303.6117095115282609, -1684.0647021355841844 1304.9506960943622289, -798.3848875647835257 664.7497975144585780, -668.7086314658160973 597.8301540195427606, -669.4687336638634179 596.3572351253640136, -653.9962840476707697 587.4207017476531973, -634.6270161446395832 659.6966464095463607, 97.4196581300587923 1391.7094503287939915))) POLYGON ((-3138.9918179090095691 39.9929298181513317, -3195.9318721744207323 131.7765582775780331, -3194.3605115562841092 132.7513874532058367, -3212.0423376604862824 158.6894340550911124, -3276.1445017965443185 291.8192670418299599, -3319.6893497161845517 433.0158891602736730, -3341.7042188351406367 579.1253871940372164, -3341.7041685876552037 580.2082322725017320, -3341.7842797495400191 580.2023206768839145, -3358.7842797495400191 810.5783206768840046, -3358.7041685876552037 810.5842322725018221, -3358.6973623564326772 957.2601088689078779, -3336.6689334334319028 1103.3675631523476568, -3293.1109817488727458 1244.5601434214565870, -3260.5234971247000431 1312.2230153808816340, -3296.6374455479131029 1414.0631037763496352, -3294.8380822260414789 1414.7011836840215437, -3328.7143497161841879 1524.5468891602736221, -3349.7012648829327190 1663.8340056869151340, -3350.1912493926529351 1663.7938778131951949, -3510.7782493926529241 3624.6538778131953222, -3510.2882648829327081 3624.6940056869152613, -3511.3162188351402619 3631.5163871940371791, -3511.3093623564318477 3779.2751088689078642, -3489.2809334334315281 3925.3825631523477568, -3445.7229817488723711 4066.5751434214562323, -3381.6084625862131361 4199.6990267427599974, -3298.3695038980586105 4321.7806209104110167, -3197.8654168207931434 4430.0929856651728187, -3082.3411641855241214 4522.2167444414280908, -2954.3772147154591039 4596.0941260546514968, -2816.8319030180368827 4650.0749291985657692, -2672.7775828783942416 4682.9533830416003184, -2592.0441774584969608 4689.0033359847420797, -2592.2292272141212379 4691.7359415891232857, 464.5127727858784965 4898.7359415891232857, 464.6978225415029442 4896.0033359847420797, 531.3099999999999454 4900.9950805664066138, 678.8370360718679422 4889.9260169705503358, 822.8852510671204072 4857.0208253636828886, 832.4966505855577452 4853.2466926456381771, 832.7155347673275401 4853.9304792686480141, 3440.9455347673278993 4019.0204792686481596, 3440.7266505855582182 4018.3366926456378678, 3568.6505408654807070 3968.1044929749309631, 3696.6007755412720144 3894.2033608833789913, 3812.1079268348321420 3802.0581609104569907, 3912.5919080161379497 3693.7271431733465761, 3995.8082053600896870 3571.6301008898981308, 4059.8980139174327633 3438.4943193843760127, 4103.4297576971002854 3297.2936566327280161, 4111.9568486815251163 3240.6649172772094971, 4114.5449810944692217 3241.0993479430067055, 4438.8449810944684941 1309.0733479430066382, 4436.2568486815243887 1308.6389172772094298, 4449.7310668223972243 1219.1561161070862909, 4449.7104973863315536 1071.3973957048663124, 4427.6685088490185080 925.2919864301782127, 4384.0974537747060822 784.1034492265001745, 4319.9705801376658201 650.9855167172314623, 4236.7202918527709699 528.9116481847523801, 4136.2061531259496405 420.6086113205509491, 4020.6733513123099328 328.4955743328730478, 3892.7025460983149969 254.6300689133272499, 3755.1522252283625676 200.6620310892940324, 3611.0948543776285078 167.7969465530077287, 3463.7482473934069276 156.7689236912091246, 3316.4036898899316839 167.8242957839195242, 3172.3524217021254117 200.7161186505198884, 3034.8121203619148218 254.7096866493769767, 2920.2486381949101997 320.8647580300017808, 2829.5979618286305595 659.3760732813996128, 2485.1041348942267177 1003.9814942180254320, 2264.2788423241918281 2319.5541328332446938, 409.7273757065412383 2913.2071331414008455, -1458.2438853899545848 2786.7096887882385090, -1390.0104079583070416 1953.5395283355223910, -1308.4375544520867152 1723.5068962236503012, -1310.2333181418257482 1722.8700927968927772, -1276.3402423028999237 1612.9336566327281162, -1254.3389331776024846 1466.8221161070862308, -1254.3595026136681554 1319.0633957048662523, -1256.0639743336037100 1307.7652980846462469, -1255.2787938929561733 1307.6972329071288641, -1257.2316394637061876 1285.1697643588329356, -1227.2802423028999783 1188.0186566327281525, -1205.2789331776025392 1041.9071161070862672, -1205.2904919563829935 958.8756534762312640, -1684.0647021355841844 1304.9506960943622289, -1685.0325693031700212 1303.6117095115282609, -1706.1692244587284222 1320.4733608833789731, -1724.5137550381382425 1331.0687426030108327, -1763.0830830785189391 1369.6505646428263390, -1815.7587157038797159 1383.7697470828661608, -1834.1194591345197296 1394.3744929749309449, -1971.6547489328795564 1448.3808253636827885, -2115.7029639281322488 1481.2860169705504632, -2204.3990753125572155 1487.9409523895812981, -2263.2300000000000182 1503.7100000000000364, -2322.0627096881689795 1487.9463092123467050, -2410.5755828783944708 1481.3133830416004457, -2554.6299030180371119 1448.4349291985654418, -2692.1752147154593331 1394.4541260546511694, -2710.5214060758321466 1383.8623258961499687, -2763.2166432025555878 1369.7431151977043555, -2801.7930339334729979 1331.1685093202834196, -2820.1391641855243506 1320.5767444414277634, -2935.6634168207938274 1228.4529856651729460, -3036.1675038980588397 1120.1406209104106892, -3086.1705453954227778 1046.8041554447745511, -3129.2399803399048324 1003.7367132380807107, -3145.0063950996932363 944.9047260716176879, -3183.5209817488726003 864.9351434214565870, -3227.0789334334317573 723.7425631523476568, -3249.1073623564325317 577.6351088689078779, -3249.1083453730552719 556.4508704679574294, -3263.2299989295852356 503.7562690975839246, -3249.1132358283407484 451.0604139114426516, -3249.1142188351404911 429.8763871940373633, -3227.0993497161844061 283.7668891602737631, -3183.5545017965441730 142.5702670418300499, -3145.0472131318642823 62.5968530737785258, -3145.0472131318642823 62.5968530737783055, -3138.9918179090095691 39.9929298181513317)) true true 1.5e-08 geos-3.4.2/tests/xmltester/tests/ticket/bug350.xml0000644000175000017500000000412212206417146021644 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/350 http://trac.osgeo.org/geos/ticket/350 Original data, fails at noding after snapping 01060000000100000001030000000100000007000000000000005C3613C1000000000028A54000000000208D14C1000000000028A5C000000000A83F15C100000000C0A6D040981124BD63B414C1B82DC4EB7C969940CA5EE746E76814C120462E0E5B4A8A40323BFF843F4B14C1C77B5B2D590C9AC0000000005C3613C1000000000028A540 01060000000100000001030000000100000005000000EF2CF4FC0ED315C1F4792E801F82B6C0477F50A83BA313C12242DCE0BE81B2C0203301B73FCE13C14FB2744AB1EBD24029062D840ECE15C161DDB50E8D6BD140EF2CF4FC0ED315C1F4792E801F82B6C0 POLYGON ((-314775 2708, -322378.6881546058 830.7344192302963, -321742.91436957236 -4737.74561859717, -357571.7470252057 -5762.123049645208, -357251.62907800317 17838.204022852125, -324495.928715514 19374.77016942418, -322378.6881546058 830.7344192302967, -314775 2708)) POLYGON ((-314775 2708, -322378.6881546058 830.7344192302963, -322378.6881546058 830.7344192302967, -314775 2708)) http://trac.osgeo.org/geos/ticket/350 Pre-snapped version of the data. 0103000000010000000700000000000000E0B2E9C0000000000028A540000000008034F2C0000000000028A5C000000000A0FEF4C000000000C0A6D040604690F48ED1F2C0B82DC4EB7C969940287B9D1B9DA3F1C020462E0E5B4A8A40C8ECFC13FE2CF1C0C77B5B2D590C9AC000000000E0B2E9C0000000000028A540 01030000000100000005000000BCB3D0F33B4CF7C0F4792E801F82B6C038FA8342DD19EDC02242DCE0BE81B2C0009909B8FD71EEC04FB2744AB1EBD240A418B4103A38F7C061DDB50E8D6BD140BCB3D0F33B4CF7C0F4792E801F82B6C0 POLYGON ((-52631 2708, -60234.68815460579 830.7344192302963, -59598.91436957236 -4737.74561859717, -95427.7470252057 -5762.123049645208, -95107.62907800317 17838.204022852125, -62351.92871551402 19374.77016942418, -60234.68815460579 830.7344192302967, -52631 2708)) geos-3.4.2/tests/xmltester/tests/ticket/bug356.xml0000644000175000017500000000422312206417146021654 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/356 com.vividsolutions.jtstest.testrunner.BufferResultMatcher http://trac.osgeo.org/geos/ticket/356 multilinestring buffer artifacts MULTILINESTRING((1676339.95971128 4847443.67952346, 1676340.19 4847443.54, 1676338.44 4847440.65, 1676335.37 4847442.52, 1676337.12 4847445.4, 1676339.95971128 4847443.67952346)) POLYGON ((1676334.370908338 4847442.47738721, 1676334.381771572 4847442.672985536, 1676334.430559768 4847442.86271278, 1676334.515400594 4847443.039287834, 1676336.265400594 4847445.919287834, 1676336.383019845 4847446.075914382, 1676336.528914198 4847446.206608688, 1676336.697486246 4847446.306356514, 1676336.882268526 4847446.371330916, 1676337.07617165 4847446.399039078, 1676337.2717563 4847446.388417942, 1676337.461518643 4847446.339875002, 1676337.638178226 4847446.255272662, 1676340.477889498 4847444.534796128, 1676340.477889507 4847444.534796122, 1676340.708178227 4847444.395272662, 1676340.865054944 4847444.277767458, 1676340.995997551 4847444.13191887, 1676341.095975523 4847443.963330074, 1676341.16114793 4847443.778477878, 1676341.189010992 4847443.584463894, 1676341.178494273 4847443.388741704, 1676341.130001801 4847443.19883052, 1676341.04539655 4847443.022026312, 1676339.29539655 4847440.132026312, 1676339.177687757 4847439.974857962, 1676339.031535752 4847439.843721232, 1676338.862575756 4847439.743672394, 1676338.6773224 4847439.678569058, 1676338.482918545 4847439.650921426, 1676338.286859869 4847439.661795518, 1676338.096705855 4847439.710772058, 1676337.91978832 4847439.795962644, 1676334.84978832 4847441.665962642, 1676334.693269131 4847441.783769514, 1676334.56272065 4847441.92983049, 1676334.463152898 4847442.098540236, 1676334.398386959 4847442.283424222, 1676334.370908338 4847442.47738721), (1676338.816753609 4847443.202781668, 1676337.455985112 4847444.027221212, 1676336.743325995 4847442.854387922, 1676338.10393518 4847442.025612946, 1676338.816753609 4847443.202781668)) geos-3.4.2/tests/xmltester/tests/ticket/bug358.xml0000644000175000017500000031264712206417146021672 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/358 Invalid result from union http://trac.osgeo.org/geos/ticket/358 010300000001000000D60500000AD7A3306B4D39418FC2F598DE4B52410AD7A3B0794D39418FC2F5F8DC4B52410AD7A3B08E4D39418FC2F5B8DB4B52410AD7A3B0A34D39418FC2F5F8D94B52410AD7A330B24D39418FC2F558DA4B52410AD7A3B0C34D39418FC2F518DB4B52410AD7A3B0D24D39418FC2F578DA4B52410AD7A3B0E54D39418FC2F558D84B52410AD7A3B0F34D39418FC2F5F8D64B52410AD7A330044E39418FC2F5F8D34B52410AD7A330134E39418FC2F5F8D14B52410AD7A330334E39418FC2F598D04B52410AD7A3304D4E39418FC2F578CD4B52410AD7A3B05D4E39418FC2F558CA4B52410AD7A3306E4E39418FC2F518C84B52410AD7A330844E39418FC2F578C54B52410AD7A3309C4E39418FC2F5B8C24B52410AD7A330C74E39418FC2F5D8BB4B52410AD7A3B0DE4E39418FC2F578B74B52410AD7A3B0F04E39418FC2F598B34B52410AD7A330FF4E39418FC2F518B14B52410AD7A3B0154F39418FC2F558AD4B52410AD7A3B01F4F39418FC2F5F8AB4B52410AD7A3B0374F39418FC2F5B8A84B52410AD7A3B04F4F39418FC2F5B8A64B52410AD7A3B0774F39418FC2F578A44B52410AD7A3B0AA4F39418FC2F5F8A34B52410AD7A3B0C54F39418FC2F558A24B52410AD7A330DD4F39418FC2F5389C4B52410AD7A330055039418FC2F5188F4B52410AD7A3B00D5039418FC2F5F88B4B52410AD7A3B02B5039418FC2F578844B52410AD7A3B03A5039418FC2F558824B5241FDACC76E5E503941F86F7DA27F4B5241B43441705E5039411B0B79A27F4B524140A4DF6E5E503941DE718AA27F4B524140A4DF6E48503941DE718AE2814B5241D088D26E5E503941948785A27F4B52410CD7A3B03A50394190C2F558824B52410CD7A3B02B50394190C2F578844B52410CD7A3B00D50394190C2F5F88B4B52410CD7A3300550394190C2F5188F4B52410CD7A330DD4F394190C2F5389C4B52410CD7A3B0C54F394190C2F558A24B52410CD7A3B0AA4F394190C2F5F8A34B52410CD7A3B0774F394190C2F578A44B52410CD7A3B04F4F394190C2F5B8A64B52410CD7A3B0374F394190C2F5B8A84B52410CD7A3B01F4F394190C2F5F8AB4B52410CD7A3B0154F394190C2F558AD4B52410CD7A330FF4E394190C2F518B14B52410CD7A3B0F04E394190C2F598B34B52410CD7A3B0DE4E394190C2F578B74B52410CD7A330C74E394190C2F5D8BB4B52410CD7A3309C4E394190C2F5B8C24B52410CD7A330844E394190C2F578C54B52410CD7A3306E4E394190C2F518C84B52410CD7A3B05D4E394190C2F558CA4B52410CD7A3304D4E394190C2F578CD4B52410CD7A330334E394190C2F598D04B52410CD7A330134E394190C2F5F8D14B52410CD7A330044E394190C2F5F8D34B52410CD7A3B0F34D394190C2F5F8D64B52410CD7A3B0E54D394190C2F558D84B52410CD7A3B0D24D394190C2F578DA4B52410CD7A3B0C34D394190C2F518DB4B52410CD7A330B24D394190C2F558DA4B52410CD7A3B0A34D394190C2F5F8D94B5241E4F21FE2354E39419C559F87AD4C5241ACD85F063B4E39418EE4F25BAA4C52419CA22399334E394164AA60F0AE4C5241E461A126234E3941C039238AB64C5241ACFA5C2D234E3941DEE00B8BB64C5241D456EC0F234E394128ED0D96B64C524190C2F5E8224E3941703D0AC7B64C5241D456EC0F234E3941B88D06F8B64C5241B0BFEC7E234E3941287E8C21B74C524170810425244E394160984C3DB74C524190C2F5E8244E3941703D0A47B74C5241B003E7AC254E394160984C3DB74C52416CC5FE52264E3941287E8C21B74C5241708A8EA4264E3941029A0803B74C524138234AAB264E39412041F103B74C524138234A2B374E39412041F163AF4C52416C09F9904A4E3941F0F44AF1994D524144696FF0774E394192CB7F509A4D524198FF906E774E3941545227689C4D5241C442ADF96F4E39416C09F998A64D5241B003E70C704E3941D022DB99A64D524190C2F5E86F4E3941703D0AC7A64D5241D478E936704E3941923A0129A74D5241D4BCE314714E3941E0BE0E7CA74D524108CE1961724E3941E04F8DB3A74D524190C2F5E8734E3941703D0AC7A74D524118B7D170754E3941E04F8DB3A74D52414CC807BD764E3941E0BE0E7CA74D5241480C029B774E3941923A0129A74D5241708104C5774E3941105839F4A64D52415C423ED8774E394176711BF5A64D52415C423E587F4E394176711BB59C4D5241708104457F4E3941105839B49C4D5241143FC65C7F4E394140355E969C4D5241E45817677F4E3941022B87969C4D5241E4581767804E3941022B8776984D5241143FC65C804E394140355E76984D524128ED0D5E804E394110C7BA74984D5241B4A67967804E3941AC8BDB74984D524144D8F054814E3941DE718A2A944D524194A982D18B4E39412C431C0F914D5241B003E76C934E39413CDF4F25924D5241B4EA7375934E3941E00B9321924D5241884160C5934E3941441CEB2E924D52418C8EE4C2934E3941F0164830924D52418C8EE4C2A84E3941F0164890944D5241884160C5A84E3941441CEB8E944D524108CE19E1A84E3941E04F8D93944D5241F0D24D02A94E3941EA043495944D52410CE02D00A94E394176BE9F96944D524104E78C78D34E3941423EE895984D52416C09F970E64E3941E88C28759A4D5241580E2D72E64E39411E3867749A4D5241085F987CE74E39410CB5A6819A4D524168D5E77AE74E394196218E859A4D524168D5E7FAF94E394196218E059B4D5241085F98FCF94E39410CB5A6019B4D524190C2F568FA4E3941703D0A079B4D5241E8D9ACBAFB4E394112143FF69A4D524138D6C5BDFB4E394120B072F89A4D524138D6C5BD0C4F394120B07278994D5241E8D9ACBA0C4F394112143F76994D524118B7D1F00C4F3941E04F8D73994D524164EE5A520D4F394182954363994D52415CFE435A0D4F3941CE88D266994D52415CFE435A1F4F3941CE88D2E6964D524164EE5A521F4F3941829543E3964D52414CC8073D204F3941E0BE0EBC964D5241B88D06102C4F3941F2B050C7934D5241F8C2647A464F3941705F079E914D5241C4F528CC994F394154C1A8E08C4D52414082E2C7994F3941FC87F4DB8C4D524118B7D1709A4F3941E04F8DD38C4D5241D4DEE09B9A4F39411AC05BCC8C4D5241A0CDAA9F9A4F394164EE5ACE8C4D5241A0CDAA9FD44F394164EE5AEE854D5241D4DEE09BD44F39411AC05BEC854D52412497FF30D54F3941FC1873D3854D5241C4F5283CD54F394188855AD7854D5241D0F753B3E94F3941CCEEC92F824D5241D4096812055039410000001C804D52419C081B0E05503941FEF67518804D524118B7D17005503941E04F8D13804D5241283A929B05503941FA7E6A0C804D5241840D4F9F055039416666660E804D524190C2F5E82150394162A1D6B47C4D524190E4F2AF4F5039412E6EA3D9784D5241D0D556AC4F503941D8F0F4D6784D524118B7D1F04F503941E04F8DD3784D5241907571BB50503941EA73B5B1784D5241042B87C6505039416C787AB5784D5241042B8746675039416C787A95744D52419075713B67503941EA73B591744D52414CC807BD67503941E0BE0E7C744D5241E43FA4CF6750394108CE1975744D5241905CFED36750394152962176744D5241905CFE536F50394152962176724D5241E43FA44F6F50394108CE1975724D5241480C021B70503941923A0129724D5241240681357050394134A2B407724D5241BCB88D467050394162A1D608724D5241DCD781C37C503941C6FEB24B664D5241C46D34C0845039414C158C6E5F4D5241B47BF2B084503941D8A3706D5F4D5241448B6CC7845039410EBE30515F4D524168DE71DA84503941482EFF515F4D524168DE71DA88503941482EFF71594D5241448B6CC7885039410EBE3071594D524190C2F5E888503941703D0A47594D524178BE9FDA8850394100DE0235594D5241F44A59E688503941CCCCCC34594D5241F44A596687503941CCCCCCF4534D524178BE9F5A8750394100DE02F5534D5241480C021B875039414E4013A5534D5241C030999A865039414CC80775534D5241ECE236AA86503941A4703D72534D5241ECE2362A7F503941A4703DD2504D5241C030991A7F5039414CC807D5504D5241CC7F48EF7E50394118B7D1C4504D52412CB29DBF845039410EBE30854C4D524194D409B88450394128A089844C4D5241ECC039C384503941462575764C4D5241A8A44ED084503941840D4F774C4D524150FC18C38E503941DC4603E4424D52417CAEB6029250394150FC18EB404D5241587DAE36A0503941DE0209A23C4D5241708104B5AA50394170CE8882394D524158A835ADAA503941D4BCE380394D52414CA60AE6AA5039410AF9A06B394D5241F0D24DF2AA5039417268916D394D5241648863BDB65039414A9D80C2344D5241B8F3FD74C5503941FAA06753314D52415817B771C5503941022B8752314D5241DC460388C5503941849ECD4E314D524194438B9CC55039410A8A1F47314D5241A4923AA1C5503941EA263148314D524130DD2456CF503941D044D89C2E4D52416C09F9D0E1503941B6F3FDD02B4D524190C2F5A8F950394150AF9415294D5241ACCFD5A6F950394168226C14294D5241DC460388FA503941849ECDEE284D5241DCD781E3FA5039414ED191CC284D5241F41FD2EFFA503941DE718ACE284D5241F41FD2EF02513941DE718AAE254D5241DCD781E3025139414ED191AC254D5241684469FF02513941529621A2254D524188B0E109035139412A3A92A3254D52416029CBF00D513941907EFBAE204D524110A5BD5119513941D8A370D91C4D5241E461A14619513941401361D71C4D5241E4A59B641951394130992ACC1C4D52414060E57019513941764F1ECE1C4D5241DCD7819323513941F241CFD2184D5241840D4FAF2E513941B4C87616174D5241806ABCD43D513941CA32C4DD154D5241CC32C4D13D513941D85F76DB154D524140A4DF0E3E51394168226CD8154D524180FB3A303E513941F6B9DAD2154D5241C01726333E51394142F163D4154D5241C01726335351394142F16354134D524180FB3A3053513941F6B9DA52134D5241DC46030854513941849ECD2E134D5241F4FDD4385451394196438B1C134D52411C7C614254513941FC3A701E134D52411C7C61C261513941FC3A70DE0E4D5241CC3B4E71545139410C71AC0F134D524124B9FCF76A51394152B81E590E4D5241CCA145169151394116FBCB52094D524168226CC8E75139418A416041044D5241BC0512C4E7513941A223B93C044D5241345530CAE751394168226C3C044D5241081B9ECEE751394100DE0241044D5241C09F1A2F415239416CE7FBE1FE4C524100DE025976523941FEB27B8A014D5241B4847C30AB52394162A1D69C054D524194B20C91BB5239414872F907084D5241B88D0600C252394136AB3E97094D52418C1F63BED5523941B29DEFEB0F4D5241549FAB1DE05239410E4FAF7C134D52416891ED2CE0523941B0E1E979134D5241A401BC85E0523941E6D0229B134D5241504013F1E052394172F90FAD134D5241042B87E6E0523941FEF675B0134D5241A49BC440F25239410A46250D174D5241F4B0504BF25239418048BF09174D52417C832F2CF3523941840D4F2F174D5241809543CBF3523941ECC03937174D5241645DDCC6F35239413E0AD73B174D52411C5A641B0F533941CC5D4BDC184D52418004C51F0F5339417A14AED7184D5241BC7493081053394112F241E3184D524100B37B82105339417C6132DD184D5241B8FC8784105339418A4160E1184D52416C2BF6A720533941D6E76A63184D5241A4B437C81F533941ECE2365E184D5241C84B37C91F533941E04F8D5B184D5241444772E91E53394168226C50184D5241A8A44EF01D533941849ECD26184D52411895D4491D533941DCB584E8174D5241F4285C0F1D533941703D0A9F174D52411895D4491D53394104C58F55174D5241A8A44EF01D5339415EDC4617174D5241444772E91E5339417A58A8ED164D524140A4DFFE1F53394188F4DBDF164D5241F4285C0F20533941703D0ADF164D52412406815520533941022B87E2164D5241489D805620533941F697DDDF164D5241489D80D635533941F697DD5F174D5241240681D535533941022B8762174D52411826533536533941A8C64B67174D52414C59863836533941A6BDC163174D5241B8F3FDE454533941703D0A1F194D5241F4285C8F6F533941703D0A1F194D52416C567D1E705339410C242826194D5241CC3B4E2170533941DE718A22194D5241CC3B4E218F533941DE718AA21A4D52416C567D1E8F5339410C2428A61A4D5241A80A46B58F5339417A58A8AD1A4D5241E4C7980B905339412AA913BC1A4D5241AC605412905339417C6132B91A4D5241CCEEC9B3B3533941684469EB1F4D5241B88D0610C5533941C4D32B01214D5241B8AF0357D453394196900F5A214D5241CCA145A6D953394130DD24BA204D52414C6210A8D953394150FC18BB204D5241D0D556BCD953394134A2B4B7204D5241F0164880DA53394122FDF6AD204D52410044FA3DDB5339418AFD65B7204D5241FC3A703EDB5339419AE61DB7204D5241587DAE46DF53394186A7571E214D5241BC96908FE3533941CAC34215204D524114AE4791E3533941EA73B515204D524130FF217DE453394136CD3BEE1F4D5241986E122303543941FE43FAB91C4D52418841602503543941569FABB91C4D5241F4B0502B035439418A4160B91C4D52417C1D384703543941C6DCB5B41C4D5241A8C64B870354394170F085B11C4D5241C8E53F8403543941E6D022AF1C4D524174E09CC114543941BC0512501B4D5241F4B9DA4A1D54394144FAED4B194D52419CC420901D5439411AC05B40194D524110C7BA881D54394128ED0D3E194D524104C58FB131543941865AD330154D5241388941604154394144696F90114D5241287E8C294F5439414E6210A00D4D5241ACADD82F4F543941D8A370A10D4D52416C9A774C4F543941C898BB960D4D5241B09465884F543941A223B98C0D4D52414C3789814F543941304CA68A0D4D524104098AEF5C5439416C567DC20A4D524110C7BAE86B5439410EE02DA8034D524130772D016F54394194658803FF4C5241F4285C0F6F5439412E211F04FF4C524130772D316F543941E4839ED9FE4C5241A8F1D2AD6F543941907EFBAAFE4C5241A80A46A56F54394134EF38A9FE4C5241043411C67854394102BC05E2FB4C5241081B9ECE785439415E4BC8E3FB4C5241D83D79F8785439419CC420D4FB4C524140E8D9CC79543941E61DA7B0FB4C52415427A0C9795439410022FDAEFB4C52412831084C855439411C5A644BFA4C524114F2414F8554394104560E4DFA4C52414CEA047485543941D478E946FA4C5241FCCBEE9986543941CC5D4B38FA4C52414C158CAA8654394152B81E39FA4C524178BE9FAA86543941D0D55638FA4C5241341136EC9854394112A5BD51FA4C5241086822EC9854394194878552FA4C5241FC65F78499543941764F1E5AFA4C5241A4B43788995439419A779C56FA4C524110583954B3543941BE0E9CD3FB4C52416C09F950B35439410A8A1FD7FB4C524120166ACDB35439413CDF4FDDFB4C5241744694C6B45439412063EE06FC4C52412063EE5AB5543941FC3A703EFC4C5241E4361A60B5543941F4DBD73DFC4C524180FB3AB0BF543941FC1873CB014D524194A98241C7543941325530C6054D52411CA7E8F8C9543941643BDF33074D5241F0F44A69D4543941DCB584B0044D52418CFD6567D4543941B88D06B0044D5241789CA273D4543941FE43FAAD044D5241C039231AD5543941585BB16F044D5241982A1845D5543941C442AD39044D524170128350D554394190A0F839044D524170CE8872DA5439418E976ED2F74C5241287E8C49EC543941CAE53FD0F04C524110363C3DEC543941842F4CCEF04C52412085EB71EC543941E2E995BAF04C5241D066D577EC543941CC7F48BBF04C5241A8E8488EFF54394112363CA5E64C5241B0946588FF54394128A089A4E64C5241244A7B93FF543941D24D62A0E64C5241BCB88D96FF543941A223B9A0E64C5241E4A59BD40755394140A4DFF6E14C52414C3789D10755394170CE88F6E14C52410C71ACDB07553941A4DFBEF2E14C5241784F1E1608553941A60A46A9E14C5241784F1E16085539419AE61DFBD74C52413CBD52A624553941DC680017B74C5241DC460398245539415A863816B74C524118D9CEB7245539415CFE43EEB64C5241E4839EAD24553941464772E1B64C5241043411B62455394160984CE1B64C524198FF90CE205539417CF2B074A84C5241784F1EC62055394162A1D674A84C52414CEA04A4205539416CE7FB49A84C5241D0915CAE205539410EBE3049A84C5241AC6054921455394120F46C729E4C524198218E9507553941441CEB828F4C524138AB3E8707553941C6FEB2838F4C5241C0EC9E6C0755394136CD3B628F4C5241D46F5F57075539413845475A8F4C5241C8C3425D0755394150AF94598F4C5241840D4F5FF0543941DC460334834C5241D42B6559F05439413480B734834C52412C651942F0543941925CFE2B834C5241EC9E3C4CF0543941081B9E2A834C5241B09465F8CE543941E4141DCD734C524154E3A5EBC55439412CD49A4E6E4C5241A05E29EBC55439415A86384E6E4C52414C378971C5543941C6DCB5206E4C52414C158C7AC55439411CEBE21E6E4C52414C3789F1B6543941EEEBC0A1694C524158863846AE543941E8FBA931654C5241085F98DCAD543941C03923BA5F4C5241F4DBD711B2543941B4C876265C4C52412CD49A06B25439412E6EA3255C4C524194B20C31B25439415EBA49F05B4C5241287E8C09B254394176BE9FBE5B4C5241DC8AFD15B254394138D6C5BD5B4C5241F4FDD4C8B0543941F6065F8C5A4C524188635DBCB0543941C64B378D5A4C52418CB96BA9B05439411E166A755A4C524144AD693EB05439411C9E5E4D5A4C5241C84B3749B05439413E9B554B5A4C52417858A8759A543941CA32C40D534C52414060E5709E543941840D4F174B4C5241D000DEA298543941B6A6799B4A4C5241941804A68E543941666666C6494C52410C022BA7805439411895D459494C524194B20C81775439411895D459494C5241941804166F54394190A0F80D4B4C5241585BB1FF695439413C4ED1894C4C5241D8F0F4FA69543941CCCCCC884C4C5241B8F3FDE469543941DE2406914C4C5241C017266363543941DA1B7C314E4C5241905CFED362543941D42B65494E4C5241941804D6625439416ADE714A4E4C5241808CB9DB585439411A51DA7B4F4C5241345EBAD95854394116FBCB7A4F4C5241F0C9C3C2585439415405A37E4F4C5241703D0AB7585439417E1D387F4F4C5241D066D5B758543941EC2FBB7F4F4C5241686FF00536543941C2F528DC524C5241DCD7811327543941849ECD5A544C52418CDB68A01954394148BF7DC5564C52412C1895E410543941780B2494594C5241B0E1E9650E54394196438B585B4C524194A982610E543941545227585B4C52410868225C0E543941B2BFEC5E5B4C5241647FD94D0E54394114D044645B4C52413C4ED1510E5439417E6ABC645B4C5241D019516A0A543941388941745D4C5241F44A59660A5439415E4BC8735D4C5241A8A44E600A543941BA490C765D4C524198218E650A543941A067B3765D4C524174711BED06543941B2BFEC325F4C524188F4DBE706543941CAA145325F4C52414872F9CF065439413433333B5F4C524194D409D806543941D6C56D3C5F4C5241D4096812025439410EE02D30614C524140355E0A025439416A4DF32E614C524120B072D801543941C0CAA141614C5241341136DC01543941226C7842614C52411461C363FE5339413E79583C624C524100000060FE533941DCD7813B624C5241782D214FFE5339413C4ED141624C524170A301DCFD53394196B20C55624C5241E4361AE0FD53394140A4DF56624C5241A0D634EFF65339415CB1BF50634C52412C431CEBF6533941B2BFEC4E634C5241C07D1DB8F65339418E757157634C52418816D90EF653394188F4DB5F634C5241C09F1A0FF6533941923A0161634C524194B20CD1ED533941143FC67C634C52416029CBD0ED5339419C559F7B634C5241784F1EB6ED533941B27BF27C634C5241109C33F2EC533941A2D63473634C5241CCEEC9D3EC533941E4F21F6E634C524178E926D1EC53394120D26F6F634C5241C0172633DD533941EAB7AF7B614C52415C8FC235DD533941AED85F7A614C5241E07A14AEDC53394134A2B463614C5241B4A679A7DC53394112363C61614C5241F853E3A5DC53394176E09C61614C5241B0506B0AC1533941D656EC275A4C5241C486A787AF533941423EE845574C524198DD93379A533941C0EC9E80544C52414CEA047482533941EA26318C534C5241B072682162533941948785FA534C524178E92621625339413E575BF9534C5241784F1E0662533941A067B3FA534C5241A4BDC1B761533941849ECDF6534C5241CCA145B6615339412EFF21F9534C524140E8D91C41533941A245B6AF524C524108AC1C8A37533941B003E734534C52414C158C6A1E5339417E6ABCD4544C5241CC5D4B681E5339414C158CD2544C524188A757EA1D533941AA13D0D8544C5241A0D634BF1D5339417A36ABD6544C5241081B9EBE1D5339413E7958D8544C5241A0CDAA8F0E53394196B20C85544C5241388941900E533941D26F5F83544C524150FC18630E5339412EFF2181544C5241F8E461610E53394126C28683544C524160C3D33B02533941C6DCB5F8534C5241B8DA8A3D0253394160764FF6534C524164F7E4D10153394190C2F5F0534C5241984C159C01533941DACEF7E7534C524118D9CE97015339418638D6E9534C524170810485FB5239417E8CB90B534C5241F0F44A89FB523941D022DB09534C524100DE0219FB52394150FC18F7524C5241E00209AAFA523941E00B93CD524C5241345EBAA9FA523941AA8251CD524C524194CB7FD8F7523941DCD78117514C52412C90A058F752394140A4DF52514C5241D019517AE9523941705F0742584C5241E09C1175E95239418A416041584C52416C567D6EE9523941D066D543584C52411C2FDD74E9523941A0ABAD44584C524140575BE1E1523941728A8ED85B4C524140575BE1E152394104780BE45D4C524174B515DBE15239412041F1EB5D4C52411CC05BE0E1523941B88D06EC5D4C524180B74002E1523941DA3D7964614C5241201FF4FCE052394142F16364614C524160BA49DCE0523941FED4788D614C52411C0DE0BDE0523941D044D898614C5241806ABCC4E0523941A679C799614C5241DC68007FDE523941FA7E6AA4624C524194CB7FA8DF52394132C4B162644C5241E4F21F32E4523941D49AE6C9674C5241D83D7928EB5239419A779C32694C5241D0915C7EF252394152DA1BDC694C524140A4DFCEF75239415EBA49346A4C52415C4BC857FA523941F8E4614D684C5241905CFE13FC523941EA95B2F0644C524178E92661FD523941986E1203624C5241D4BCE304035339417C613209614C5241DC2406811353394132E6AEF95E4C5241B4A67997265339417E6ABC685F4C52412C1895442F53394116D9CEFF5D4C52418C28EDAD39533941827346C85D4C5241D088D29E405339417AC729EA5C4C5241BC270F5B42533941645DDC6E5E4C5241884160F544533941A223B940614C524198900F2A4A5339416EA3016C634C5241B459F5E958533941029A088B674C524164EE5AC2635339411C9E5E256A4C524134333313725339413E575BFD6B4C52413C9B558F82533941460378DB6C4C524138B4C8D68D5339412041F1A36C4C52419CC42040985339413C4ED19D6D4C5241D812F2C19E5339413433337F724C5241587DAE969C53394198BB9688754C5241F46C562D92533941F697DDB3774C524150FC18D3805339419C559FA7794C5241085F981C75533941E8D9AC167A4C52410C4625D569533941AEB662C3794C5241B459F5E958533941D881735A784C5241DCD781D3455339418E06F04A764C52415817B7F13753394160984C35754C5241E8B7AF5328533941D2DEE0DB754C524110363C3D1553394168446913764C5241ACFA5CAD00533941787AA574754C524130992AA8005339414ED19174754C52414803789B00533941BAFC8784754C524150B81EA5005339412497FF84754C524108CE1981FE5239411E166A4D784C52410CBE30A9FD523941F6B9DA927D4C5241842F4C260B533941E8482E5F854C52413C92CB5F1D533941E8482EC3884C5241D019515A1D533941DE2406C5884C524124287E6C1D533941E0BE0EC8884C524114AE47711D533941E2E995C6884C524108CE196149533941A4DFBEB6914C52410C24281E5F533941B29DEF4F934C5241FC87F41B5F533941CEAACF51934C524174E09C515F53394148E17A54934C5241EC2FBBF75F5339417EFB3A70934C52415CFE431A605339410A46257D934C52414060E520605339411A51DA7B934C524188A7577A6F53394150FC1863984C52410044FA8D855339413480B7409B4C5241EC0434E19C5339415C2041859D4C524144696FE09C53394112A5BD859D4C524170AC8BEB9C533941842F4C869D4C5241E86A2B369D5339418026C2929D4C5241D4E76A3B9D533941C6DCB5909D4C52413C4ED1B1B75339416E3480CBA14C524150D191ACB753394196218ECDA14C52414C621008B853394162A1D6DCA14C5241482EFF11B853394104E78CE0A14C5241F48E5314B85339416EA301E0A14C524128C286F7C353394130BB270FA54C52418C6CE7BBCC5339411804561AA64C5241FCCBEEB9CC53394164CC5D1BA64C52416007CE49CD5339418AFD6533A64C5241BC529681CD53394114D04448A64C5241A879C789CD53394166D5E746A64C5241A4923AD1D85339410E2DB281AA4C5241B86B09C9D85339412ACB1083AA4C524138894100D953394110E9B797AA4C52417C1D3827D9533941EA95B2C8AA4C524138894100D953394132E6AEF9AA4C5241900F7AF6D8533941621058FDAA4C5241641058F9D8533941E8FBA9FDAA4C52416C348077D25339411C0DE091AE4C52419C33A274D253394196218E91AE4C52417C36AB6ED25339415E4BC893AE4C5241B437F872D25339413A014D94AE4C5241C84B3719C8533941D24D62F8B34C524150AF9495C253394166886351B84C5241A423B9BCC15339415C8FC275BE4C52419C559F6BC6533941A01A2F81C24C52412041F163C653394112A5BD81C24C5241F41FD27FC6533941143FC6A4C24C5241F0A7C67BC6533941D022DBA9C24C52416844697FC6533941F853E3A9C24C52411CC05B10C653394124B9FC5FC54C5241A423B90CC6533941FC87F45FC54C52415CB1BFFCC553394126310874C54C5241ACD85F06C65339414A598674C54C524140A4DF1EC2533941C039233ACA4C5241EC7C3F15C25339419C11A539CA4C524154522710C253394104780B40CA4C52416419E218C253394152499D40CA4C5241BCC11706BC533941F697DD1BD04C5241ACFA5CFDBB533941166A4D1BD04C52414C7B83EFBB53394110C7BA2CD04C5241E0BE0E9CBB5339418EE4F24BD04C52415817B7A1BB533941E4141D4DD04C5241B0BFEC8EB553394108CE1925D24C524138674489B5533941B29DEF23D24C52418048BF6DB5533941A4703D2ED24C524108F9A0C7B4533941DA8AFD49D24C524138F8C2C4B45339417C3F354AD24C5241A8C64B77A95339414850FC70D34C5241D834EFF88753394190317775DC4C5241C876BE6F805339418E06F0C2DE4C524100BC05D27B53394180D93D39E24C5241186A4D4379533941E63FA46BE54C524194B20C01785339413C4ED1E1E84C5241943A016D7D533941164850C8ED4C5241F4DBD7718B533941903177D1F14C52419031776D8B533941B0506BD2F14C5241CC5D4BC88B5339418CDB68F4F14C5241B49DEFE78B53394130992A1CF24C5241D49AE6ED8B533941721B0D1CF24C52412063EE3A8D5339411C0DE08DF64C5241F875E07C8E533941B840826EFA4C524138B4C8C69653394134A2B46FFD4C5241F41FD2BF9C533941CAC34209FF4C524148BF7DBD9C5339416007CE09FF4C524170CE88229D5339412EB29D2FFF4C5241B8627F499D53394176029A60FF4C524148E17A449D5339418E06F066FF4C52416419E2489D5339416EC5FE66FF4C52416007CED99C533941CAA14592014D524140CF66D59C533941ECE23692014D524174E09CD19C53394122DBF996014D5241D83D79D89C533941782D2197014D524180B740A29B533941BEC11706054D524128C286D7A45339414C158C06074D52415CD3BCD3A4533941789CA207074D524174E09CF1A45339412E90A00C074D524198BB9660A55339419E802636074D524198DD9387A5533941E6D02267074D5241C4D32B75A5533941CAA1457E074D524114FBCB7EA55339415AF5B97E074D5241306EA331A4533941FCA9F13A094D524124B9FC27A4533941DCF97E3A094D52418838D625A453394134EF383D094D52416844692FA4533941365EBA3D094D5241244A7B73A2533941FAEDEB4C0B4D52414894F6069F53394178E926790F4D5241E43FA44F9F5339417EFB3A74124D5241C0CAA1C5AB5339417A58A845114D52415CFE435AB8533941AED85F1A0F4D5241CC32C441BC53394192CB7F200E4D52413480B770CB533941DA1B7C29084D5241884160A5D0533941B6627F51064D5241BC96905FE9533941F0F44AE5004D524198FF902EF15339414E401329FF4C5241F4285CDF065439415AF5B966FE4C524100917E5B175439414694F64AFE4C5241D0D556AC25543941AA825135FD4C524128C286973654394122DBF972FC4C524150AF94D53E543941B22E6E13FE4C5241E4D022FB4A543941C8293A4E024D5241B415FB4B5954394106F01620054D524110E9B7EF5E543941506B9A2F074D52413CBD52E65B5439414E6210D0084D524140A4DF9E50543941721B0DA80A4D52413C4ED1914054394192CB7F200E4D524164F7E4D131543941D2915CF2104D52418451493D25543941DEE00B4F144D524144D8F00413543941F4DBD789184D52416C567DEEFF533941E61DA7EC1A4D5241208E7581E8533941621058711C4D524160545267C85339412041F13F1B4D52417CD0B32994533941228E7559174D5241E02D907090533941D066D5CB174D52416C567D6E905339418026C2CA174D52418C06F0569053394132C4B1CE174D52416CC5FE928F533941B20C71D8174D524174F90F198F533941AED85FD2174D5241F441CF168F53394152499DD4174D52415C2041F182533941CAA14512174D5241DCD781F382533941B88D0610174D5241E895B2EC82533941EAB7AF0F174D5241B0506BEA825339411895D411174D524178BE9F6A65533941E27A141E154D5241F875E06C65533941B29DEF1B154D524128ED0D3E65533941083D9B19154D5241CCCCCC3C65533941B4C8761A154D5241806ABCC426533941B437F85A0F4D5241DC8AFDC526533941764F1E5A0F4D5241D42B65B92653394148BF7D590F4D5241AC8BDBB8265339418638D6590F4D5241ACD85F66F45239417CF2B05C0A4D5241D478E966F45239413E79585C0A4D524130BB275FF45239416A2BF65B0A4D5241C05B20E1F352394166D5E7460A4D524194438BDCF35239415EBA49480A4D524120166A1DD8523941C8BAB889044D5241E00B93B9C552394150FC18E7004D5241B09465289452394144D8F044FC4C524100DE021981523941BCE314A5FA4C5241CC10C71A81523941A835CDA3FA4C5241148C4AFA80523941325530A2FA4C524148E17AC4805239417C613299FA4C5241C46D34C0805239412ACB109BFA4C5241081B9EAE6B52394104E78C98F74C524174F90F393A5239419C11A5B9F34C5241A0ABAD381C52394192CB7F30F34C5241F853E3A5F9513941BCE314B9F34C52414CA60A26EC5139414E621084F54C52415405A322EC513941D8817382F54C5241C420B002EC513941CCEEC987F54C5241244A7B03EC5139415A423E88F54C5241DC240661D3513941C876BE3BF84C5241F875E0CCC9513941A4703D96F94C52410C022B57B4513941AE47E1EAFF4C5241580E2D52B4513941AAF1D2E9FF4C5241C030993AB45139415405A3F2FF4C5241083D9BA5B351394126C2860B004D52419CE61DA7B35139413E79580C004D52413CDF4FBDA25139412041F1FF014D5241B003E7DC94513941EC9E3CA0034D524158EC2FDB94513941F2B0509F034D524128C286C794513941BE3099A2034D5241C00E9C0394513941D0D556AC034D5241A0CDAA3F93513941BE3099A2034D524124E4833E93513941D40968A2034D52418CB96BF9835139418638D6C1044D52418CB96BF9945139418638D681034D52417C1D38F794513941DACEF77F034D5241B003E72C9551394160984C7D034D52416CC5FED295513941287E8C61034D5241482EFF4196513941B88D0638034D524190C2F56896513941703D0A07034D5241482EFF419651394128ED0DD6024D52416CC5FED295513941BAFC87AC024D5241B003E72C9551394182E2C790024D524130E42DB1945139411E55A18A024D5241984C150CA1513941B615FB17014D5241F063CC0DA1513941B003E718014D524160325510A151394148E17A18014D5241D088D20EA1513941302AA917014D52417CA52C93B1513941F0A7C62FFF4C52411483C0FAC6513941A8C64BDFF84C52418004C5FFC65139411AC05BE0F84C524160545217C751394172AC8BD7F84C5241E00B9389C7513941FEF675C4F84C5241FC5C6D85C751394176BE9FC2F84C524110E9B77FD1513941A089B059F74C5241F897DD83D151394126C2865BF74C524114FBCBAED15139411AC05B54F74C5241B8D100AED15139418C6CE753F74C52412CD49A56EA513941EC2FBB9FF44C5241448B6C27F8513941482EFFC9F24C52413C2CD42AF8513941506B9ACBF24C5241E8B7AF53F851394182E2C7C4F24C5241B09465F8F851394198BB96BCF24C524108F016F8F85139415EDC46BBF24C5241E4C7981B1C523941FEF67530F24C524144FAED1B1C523941CA32C431F24C5241A05E293B1C523941A2B43730F24C5241A0D6345F1C52394126750232F24C5241E43FA45F1C52394128A08930F24C5241B8DA8ABD3A523941F6285CBBF24C524130FF21BD3A523941865AD3BCF24C524190E4F22F3B523941DE718AC2F24C524100BC05323B5239416619E2C0F24C5241B4EA73156D523941D24D62A8F64C5241401361136D5239414CA60AAAF64C524144696F406D523941F01648ACF64C524114143F766D523941A60A46B5F64C52419487857A6D523941FAA067B3F64C5241CC32C491825239415AF5B9B6F94C5241443EE87995523941C8073D53FB4C5241780B247895523941DCB58454FB4C52411CEBE28695523941EE7C3F55FB4C5241DC4603889552394192CB7F54FB4C52419075716BC7523941F44A59FEFF4C5241D019516AC7523941BE9F1AFFFF4C5241E0BE0E7CC7523941B615FBFFFF4C524198BB96F0C7523941FC187313004D524130E6AEF5C75239418638D611004D5241BCE3149DDA523941CEAACFC1034D524124B9FC97DA523941448B6CC3034D524194A982A1DA52394100DE02C5034D5241BCC117A6DA5239410AF9A0C3034D5241107A362BF6523941A0F83176094D5241F87E6A2C285339415EDC466B0E4D5241F80FE98766533941780B2428144D52414CC807ED83533941E4F21F1A164D5241B415FB5B8F53394172F90FD1164D52417CAEB6D298533941AA6054AE154D52419C779C729B533941D40968E6134D5241F853E3059B5339413480B7700F4D5241780B24089B5339415839B4700F4D5241A401BC059B533941569FAB6D0F4D52416007CE199B533941B20C71540F4D52410CE02D109B5339418EE4F2530F4D52412C90A0889E53394178E926190B4D524180B740929E5339419C11A5190B4D5241F0C9C3929E53394100DE02190B4D524154302A899E533941006F81180B4D524110583944A0533941AED85F0A094D5241148C4A5AA1533941BE0E9C97074D52413CDF4F3D98533941B20C719C054D5241C05B20419853394188855A9B054D5241A44E402398533941D2915C96054D5241C8E53FB49753394162A1D66C054D52418451498D975339411A51DA3B054D5241784F1E9697533941CA54C130054D524114F2418F9753394176029A30054D5241283A92DB985339414E840D83014D52413C9B553F99533941F48E5390FF4C524144696FC093533941B6A67917FE4C5241F0C9C3C2935339412063EE16FE4C5241F0F44A9993533941448B6C07FE4C52415C20419193533941AA13D008FE4C52412C211FE48A533941C286A7E3FA4C52417C832FEC8A5339415CFE43E2FA4C524198BB96B08A533941DACEF7CBFA4C524110A5BD918A5339417C6132A5FA4C524138234A8B8A53394186C954A5FA4C52419C081B3E8953394196900FA2F64C5241708A8E4489533941FCCBEEA1F64C5241CCEEC94389533941B27BF2A0F64C5241F063CC3D8953394104560EA1F64C524104560EFD87533941A01A2F59F24C52411851DA1B7A533941168C4A5AEE4C5241388941207A533941F46C5659EE4C524140CF66C5795339411AE25837EE4C52419CA223B979533941D656EC27EE4C5241B47BF2B079533941B6847C28EE4C524110363C0D7453394198DD930FE94C524140CF661574533941B8AF030FE94C5241A067B3FA73533941228E75EDE84C5241CCEEC90374533941705F07E2E84C5241CCCCCCFC73533941AE69DEE1E84C52416CE7FB49755339417A58A84DE54C52416C09F950755339413C4ED14DE54C52414803785B755339412E90A040E54C52413C4ED15175533941780B2440E54C5241C4F528EC77533941ECC039FFE14C5241141DC9F57753394134A2B4FFE14C5241BC490C0278533941164850F0E14C52416C9A77FC775339411A51DAEFE14C52412C6519C27C533941E63FA45BDE4C5241C486A7C77C533941E2361A5CDE4C524114FBCBCE7C533941782D2153DE4C524140575B217D5339415A423E34DE4C524170AC8B1B7D533941BC270F33DE4C524104A392EA84533941388941D0DB4C52411CC05BF084533941D8A370D1DB4C5241E4F21F0285533941A857CACADB4C5241E43FA4FF845339417C3F35CADB4C5241DC8AFDD5A6533941DE0209AED24C5241D83D79D8A6533941081B9EAED24C5241C01726E3A653394176BE9FAAD24C524180D93D89A7533941AE47E18ED24C52410868228CA75339410C93A98ED24C5241A067B3CAB2533941D42B6569D14C52415CDC4643B8533941105839C0CF4C52413CBD5236BE53394106819503CA4C52411873D712C25339411C5A644BC54C5241B003E77CC2533941FA7E6AB4C24C52418C1F63CEBD533941F46C56A9BE4C5241BCC117D6BD53394182E2C7A8BE4C5241ECE236BABD53394112A5BD85BE4C5241102DB2BDBD5339413E575B81BE4C5241948785BABD53394186C95481BE4C52412C90A098BE53394126530537B84C5241A835CD9BBE533941DEE00B37B84C5241587DAEB6BE5339415C204115B84C5241388941B0BE5339415CB1BF14B84C5241905CFE53C453394120F46CA2B34C5241B0506B5AC45339412063EEA2B34C524128530563C45339419CC42098B34C5241F0C9C372C453394136CD3B92B34C5241B4C8766EC4533941C8BAB891B34C52416C787AD5CE5339415AF5B926AE4C5241F4285CDFD4533941006F81D4AA4C52412C211F84CA533941168C4AF2A64C5241B4A679E7C1533941D066D5EBA54C52418CB96BE9C1533941F241CFEAA54C5241287E8C59C1533941CC10C7D2A54C52412CB29D4FC1533941BC270FCFA54C52418451494DC1533941506B9ACFA54C5241847CD053B55339416C567D9AA24C52417C36AB3E9B533941C8073D6F9E4C5241DC240601845339413A70CE2C9C4C524184C0CA018453394186EB512C9C4C5241587DAEF6835339411461C32B9C4C524184C0CAD183533941083D9B259C4C52417C36ABCE83533941BE9F1A279C4C52418004C53F6D5339416C787A39994C52418C8EE4426D5339414872F937994C5241E8FBA9C16C5339418A1F6322994C5241782D219F6C533941FED47815994C524194CB7F986C533941EEC9C316994C5241585BB15F5D53394146B6F339944C5241ACFA5CDD475339414E4013A5924C5241BC9690DF47533941A2D634A3924C5241443EE8A947533941BAFC87A0924C524190ED7C2F47533941984C158C924C5241E8D9AC2A4753394104C58F8D924C5241088195F31A533941F831E68E894C5241E09C11550853394152DA1B18864C52414C158C5A085339415CFE4316864C5241E895B21C0853394144FAED0B864C5241580E2DB2075339412AA913E4854C52416029CBB007533941105839E4854C5241DC6800CFF9523941A089B0DD7D4C5241D44D62D0F9523941BADA8ADD7D4C52418C6CE7CBF9523941643BDFDB7D4C524144D8F0A4F95239411CEBE2AA7D4C52414850FCA8F95239416007CEA57D4C5241D0B359A5F952394138D6C5A57D4C52416CBC7483FA523941E00B9339784C5241E4581787FA523941083D9B39784C5241B0E1E995FA523941907EFB26784C5241A42C438CFA52394126E48326784C5241CC3B4EB1FC52394138F8C25C754C524174B515FBFD5239410E9C331A704C5241E8B7AF93FD5239411C0DE05D6C4C5241C48F3177F6523941900F7A266B4C5241482575E2EF52394114AE47B96A4C524180B740D2E652394150AF94B96D4C52418CDB6850E052394122DBF9C2704C5241D85F76BFE052394180B740EE724C524134333363E652394170F085F1764C5241DC8AFD75EC52394122FDF6697A4C5241B0B6627FEF523941C8BAB85D7C4C5241DC8AFD75EC5239412497FF887E4C5241CC3B4E41E75239415CB1BF7C804C52410C462525DE5239415CB1BF7C804C524164EE5A12D85239412C431C677F4C5241BC9690FFD152394112363C6D7E4C52414C621018CE5239415EBA49DC7E4C5241B84082F2C1523941666666BA7F4C524174E09C01BB523941E8D9AC167A4C524130992A58BF523941C8293A9E764C524110E9B7DFBB523941780B2410724C524188416045B9523941244A7B036B4C5241EC51B8AEC3523941F4DBD7ED694C52418048BF7DCB523941FC87F4CB6A4C5241081B9E6ED252394110E9B7E76A4C524120FDF695E05239411804563E684C52411CC05BD0DB523941E4F21FAA644C5241B0E1E9D5DB5239417A58A8A9644C5241489D80C6DB523941168C4A96644C524104560EBDDB523941C420B096644C5241643BDF6FDA5239418E06F0A2624C524164105879DA523941DE718AA2624C52411CA7E868DA52394166F7E48D624C52411CC9E58FDA5239411EA7E85C624C5241A8E848AEDA5239414C378951624C5241448B6CA7DA52394176029A50624C5241AC3E570BDD523941780B2438614C524140575BE1DD52394104780BE05D4C524140575BE1DD52394138F8C2B85B4C52413C795808DE523941F0A7C6875B4C5241ECC03923DE5239415817B77D5B4C524140E8D91CDE52394188D2DE7C5B4C52412C8716E9E5523941ECE236CE574C5241A4B437C8F3523941304CA6DE504C5241903177CDF3523941166A4DDF504C5241941804D6F3523941E2361ADC504C5241F4285CCFF3523941A2D634DB504C5241C854C1D8F6523941384547724F4C5241684469DFF65239417AA52C734F4C524194A98231F75239418E5374544F4C5241506B9AD7F75239415839B4384F4C52417C1D38F7F7523941E6D022374F4C5241DC8AFD55F8523941FCA9F10E4E4C5241E4C7987BF75239412653059B4B4C524164EE5A82F752394140A4DF9A4B4C5241482EFF81F752394120F46C9A4B4C5241D4E76A7BF7523941285C8F9A4B4C524144AD692EF652394102098AB3474C5241FCCBEEE9F4523941107A3637444C5241504013D1E3523941BC0512743B4C5241A05E297BDD523941B4C87672394C5241E4581777D6523941C0EC9E7C374C5241E4D0226BCD52394196900F9A364C524100917E9BBB52394152B81E39374C5241C898BB36AD5239415817B705394C5241D8F0F4BAA352394188635D6C3A4C5241F44A59B6A352394142AD696A3A4C5241B0506B7AA352394168226C743A4C52414060E540A3523941CC7F48773A4C5241C0172643A352394180D93D793A4C52414894F6269A52394162C3D31F3B4C5241806ABC249A523941AE69DE1D3B4C5241BC490C129A52394116FBCB1E3B4C5241807346149A52394172F90F213B4C52413CBD521683523941482EFF893C4C524174931814835239417E8CB9873C4C52416C4DF3EE82523941E00B93893C4C5241701283F0825239412041F18B3C4C52416419E22861523941388941F43D4C524194B20CC15C523941D0D556343E4C5241C0172613625239416C9A7720424C5241C017261362523941EC2FBB23464C524150FC187369523941FA7E6A80494C52415839B4386E523941705F07464E4C5241905CFE63705239414C37892D524C52410CB5A6C96D523941C420B052554C5241686FF02568523941D0D55690544C52415C2041F16252394168446927534C5241F80FE98758523941EEEBC0E9534C5241E0718A7E55523941EEEBC0E9534C524188855A93445239418AFD65FF544C524194A982113E5239418AFD65FF544C5241480C025B3252394182514921544C52415C6DC59E3052394198BB969C524C52410C93A922205239415452274C4D4C5241CC32C431195239411E3867584B4C52413C4ED1D11152394152B81E2D494C5241705F078E13523941E4839E45454C5241CC32C43119523941B615FB2F444C52416C348057295239411AC05BF4434C52410C93A92220523941B07268B1414C5241386744191D52394140355E6A3F4C524140A4DFDE215239419A779C763D4C52415CFE434A155239418A1F63BA3B4C5241744694460852394104780BF83A4C5241E00B93D9F05139415EBA4904394C52413C9B557FDF513941D26F5FC3354C52419CEFA726C8513941C264AA58304C5241C00E9C13B551394142F1636C2F4C524140CF66859B513941F831E6722E4C5241F441CF869B513941065F98702E4C52417C36AB0E9B51394176BE9F6A2E4C5241D0B359D59A51394196B20C612E4C5241A8C64B27735139419A081BA62C4C52412497FF109E5139419CA223852E4C52410C93A9129E513941A4DFBE822E4C524190C2F5689E513941703D0A872E4C5241B003E72C9F51394160984C7D2E4C52416CC5FED29F513941287E8C612E4C5241482EFF41A0513941B88D06382E4C524190C2F568A0513941703D0A072E4C5241482EFF41A051394128ED0DD62D4C52416CC5FED29F513941BAFC87AC2D4C5241057EE5429F513941AB9C74942D4C5241C07D1DB8B551394134A2B46F2E4C5241100BB5B6B5513941267502722E4C5241D01951CAB55139410022FD722E4C52417C832FCCB5513941BC7493702E4C5241E8FBA9B1D051394112A5BDBD2F4C52413C92CBAFD0513941545227C02F4C52413C014D14D151394178E926C52F4C5241C8073D3BD1513941C286A7CB2F4C524124E4833ED15139412C6519CA2F4C5241F441CFD6EA5139413AB4C826334C5241946588D3EA513941D0D55628334C52419C081BDEEA5139419A081B2A334C5241E4F21FE2EA51394116485028334C52413480B7001452394124287EE4384C524114143F562E523941F6B9DAB23B4C5241CC7F489F3B52394124B9FCFB3C4C5241D044D8B04D5239418C4AEA083E4C5241006F815460523941F263CCF93C4C52419CEFA75660523941E6AE25FC3C4C52414013617360523941EC51B8FA3C4C52413C4ED171605239411AC05BF83C4C524150B81E3582523941A2B437903B4C52418C06F0169952394100DE02293A4C5241C03099EAA1523941BE0E9C87394C524110363C3DAB523941029A0827384C5241F4DBD741AB5239414850FC28384C5241F4285C5FAB523941E0BE0E24384C52415CB1BF5CAB523941A4DFBE22384C5241787AA51CBA5239418026C24A364C524114F2411FBA523941BC05124C364C5241549FAB3DBA5239410022FD46364C524150DA1BBCBA5239415839B440364C5241F4B9DABABA523941900F7A3E364C524180B74062CD523941AE25E497354C5241DCD78163CD523941764F1E9A354C524100DE02A9CD5239410C93A996354C52418C8EE462CE5239418C6CE79F354C524108819563CE523941D85F769F354C52411C0DE05DD8523941F46C5699364C5241A01A2F5DD8523941141DC999364C524138AB3E67D8523941A8E8489A364C5241F46C560DD9523941705F07B6364C52418451491DD9523941925CFEBB364C524188D2DE20D952394156EC2FBB364C524118B7D180E0523941100BB5CA384C524110363C7DE0523941DCD781CB384C5241081B9E8EE052394102BC05D2384C524150B81E95E0523941EE0DBED0384C52418C06F016E7523941388941E03A4C5241FCF67510E75239414C3789E13A4C524150D1914CE7523941B88D06F83A4C52415C204151E7523941FC1873F73A4C524100917EABF8523941749318DC434C5241F441CFA6F85239413208ACDC434C52413C7958B8F85239415A643BE3434C5241588638D6F8523941F085C908444C524158A835DDF85239412E90A008444C5241F8C2642AFA52394162A1D69C474C5241F8A06723FA5239412497FF9C474C5241E8AE2524FA523941FCCBEE9D474C524158F5B92AFA523941F263CC9D474C524118D9CE77FB523941E09C11854B4C52418838D655FC523941684469034E4C52410412144FFC5239414EF38E034E4C52415C4BC857FC5239414A9D800E4E4C5241C876BE4FFC5239412A1895184E4C524130DD2456FC523941C6DCB5184E4C52413C4ED181FB5239417EFB3AB0504C524198999919FE52394136AB3E43524C52410022FD46035339412A189500534C524144AD69FE0E5339416C567D86534C524140A4DFBE1D533941684469D7534C5241F8A0679336533941D6C56D3C524C52417858A89536533941081B9E3E524C52411CA7E8A8365339417A58A83D524C5241ACCFD5A6365339415EDC463B524C5241C05B20A1405339418E5374B0514C5241343333A340533941AACFD5B2514C52411C0DE00D415339414C3789AD514C5241A42C435C4153394168006FB1514C52418048BF5D4153394150FC18AF514C52413480B720625339417AC729FA524C524104780B748253394162C3D38B524C52413C014D74825339414850FC8C524C52413C9B558F82533941E63FA48B524C52414C840DDF82533941BE0E9C8F524C5241E02D90E0825339413867448D524C5241C4FEB22B9B53394154742487534C52413455302A9B533941DA1B7C89534C52418C1F639E9B5339418295438F534C5241946588C39B53394190317795534C52419CEFA7C69B533941FC87F493534C5241FC187377B15339413C4ED165564C5241F48E5374B1533941CEF75367564C524120D26F9FB153394170CE886E564C524160A1D6A4B153394148E17A6C564C52415496216EC353394108AC1C5A594C524110C7BA68C3533941C2F5285C594C5241508D97BEC35339414A9D806A594C52417C6132C5C35339416C09F96C594C524138B4C8C6C3533941065F986C594C5241CCCCCC4CDF5339413208ACA0604C5241109C3322EE5339411AE2587B624C524174E09C61F55339418E06F062624C5241F4285C9FFB53394180B74082614C5241B4847CC0FE533941D634EFA0604C5241441CEB620354394198DD93BB5E4C5241A0D634CF0654394168006F055D4C52412C8716A90A543941E4141DFD5A4C524178BE9F3A0D54394188855A2B594C524194F6063F0D543941C876BE2B594C52411C3867440D5439416C09F924594C5241B88D06900D543941A0ABAD08594C5241F0F44A890D543941D26F5F07594C5241B4EA73A51654394112A5BD19564C52417C832FAC165439414E840D1B564C5241BC9690CF165439413C4ED10D564C5241AC1C5A1417543941AA605402564C524114FBCB0E1754394142F16300564C5241E02D90F0245439413C4ED181534C524130DD24F624543941A6BDC183534C5241B4A67957255439416E348073534C5241102DB25D2554394156EC2F73534C524110363C5D25543941D478E972534C52413411368C34543941ECE236EE514C5241787AA58C34543941DCF97EEE514C52419C802692345439415A8638EE514C524140575B9134543941EA73B5ED514C52410881953357543941A857CA924E4C5241BCE314CD6054394190C2F56C4D4C52416CC5FE0267543941244A7BDF4B4C5241B047E12A6C54394126E4835E4A4C52412CB29D2F6C5439419465885F4A4C524150AF94456C543941840D4F574A4C5241AC6054726C543941D066D54F4A4C52419031776D6C543941AA60544E4A4C52410CB5A6897554394186A75776484C524124E4838E75543941ACADD877484C524188F4DB077654394198DD9363484C5241A835CDCB765439411895D459484C5241043411C6805439411895D459484C5241C420B00281543941D044D85C484C5241E8B7AF03815439418026C25A484C5241B8FC87548F5439413C4ED1C9484C5241946588538F5439411EC9E5CB484C52410022FDB68F543941D044D8D0484C5241F4FDD4B88F5439416ABC74CF484C52417C36AB3E98543941A60A4685494C52415C6DC51E9E543941081B9E024A4C52413C7958589F54394152B81EB9454C524104098A4F9F543941FE65F7B8454C5241148C4A5A9F5439418E7571AB454C5241F0D24D429F54394114AE478D454C5241D44D62509F543941C6DCB58C454C5241A01A2F8D9A54394176711B353E4C5241C09F1A7F9A543941C442AD353E4C5241043411769A543941F44A592A3E4C5241105839849A543941287E8C293E4C5241686FF0F594543941D200DE02384C5241FC87F43B8C543941029A084B2E4C52411895D47987543941B6847CA4284C5241D4E76A6B87543941EE7C3FA5284C5241A879C759875439412ACB108F284C5241306EA361875439416666668E284C5241000000B07F54394184C0CAE1224C5241D4DEE0AB825439413E0AD77F1E4C5241D022DB298954394174B515DF1A4C5241D0D5560CA0543941B003E730124C5241B88D0600A054394140A4DF2E124C52410CD7A350A05439413480B710124C5241CC32C471A0543941986E12E7114C5241701B0D80A05439417A14AEE7114C5241306EA3E1A2543941567DAE6E0E4C5241401361D3A254394174D7126E0E4C5241E895B2ECA2543941A4703D4E0E4C524188A757EAA2543941A8C64B4B0E4C5241085F98ECA25439413A234A4B0E4C52410022FD86A25439415EBA49D8074C524138F8C284A2543941CC5D4BD8074C52412CD49A76A2543941B84082C6074C524148257582A2543941C4B12EC6074C5241AC8BDB289C543941E8482E63F94B5241943A011D9C543941DCD78163F94B52418451490D9C5439418204C54FF94B524170AC8B1B9C5439410022FD4EF94B52418C976EC297543941501E165EF44B5241AC8BDB3894543941BAB88DF6EE4B5241F853E34592543941029A086FE84B52415405A3129C543941645DDC8ED84B5241D49AE68DA554394190C2F5B8D34B52417C613245AC54394126530523D24B524184C95461B35439414C158C8ED04B524160BA495CB35439412EFF218DD04B52419C802682B3543941849ECD86D04B5241ECC03913B4543941BAFC8750D04B524154302A19B454394112363C51D04B5241283A92ABB75439415405A36ECE4B5241083D9BA5B7543941FCCBEE6DCE4B5241049A08BBB7543941B0E1E965CE4B5241C8293AD2B754394138F8C248CE4B524190E4F2DFB75439412CF69749CE4B5241D8CEF7D3BD543941A857CA22C84B5241588638C6BD543941B459F521C84B52413C7958E8BD543941986E12F7C74B5241FCD478E9BD543941986E12F7C74B524114FBCB4EBE5439411EA7E8B4BA4B5241482EFF11C154394166F7E431B44B524120F46C06C1543941BE529631B44B5241842F4C16C15439412E6EA31DB44B52414CF38EF3C0543941482EFFF1B34B5241B0726801C1543941C4D32BF1B34B5241ECEBC009BF543941F48E53E0B14B524180FB3A60B2543941D022DBF5A04B524100917E6BAE543941501E16C6964B524128A08960AE54394164EE5AC6964B52419C33A244AE5439413A234AA3964B52411CC9E54FAE543941B4C876A2964B5241B025E463A4543941460378338E4B5241E81DA758A4543941CC5D4B348E4B52412C90A048A454394130992A208E4B5241CCEEC9E3A3543941FC3A70FA8D4B5241E8482EEFA35439411AC05BF88D4B524138F8C2649C543941FC87F4638B4B5241D42B65599C543941DE0209668B4B5241E0E00B239C5439417CD0B3518B4B5241A401BC259C54394172F90F518B4B52412C87160986543941BEC1177E854B524188855A836F543941903177157E4B52415839B4786F54394192ED7C177E4B524130992A486F543941182653057E4B524140355E4A6F5439415E29CB047E4B5241E00B932966543941C68F31A37B4B5241D46F5F27665439417E8CB9A37B4B52410C24281E66543941827346A07B4B5241B8F3FD24655439419EEFA7767B4B5241C09F1AFF6354394196D409687B4B5241DC1B7CB15754394196D409687B4B5241D49AE69D57543941708104697B4B5241F063CC9D57543941E2361A687B4B5241F8A0672348543941240681817B4B5241DCD781234854394142AD69827B4B5241EC04341147543941E0BE0E907B4B5241A813D0F4465439415E29CB947B4B5241F0D24DF2465439416ABC74937B4B5241ECEBC039425439418E5374207C4B5241A01A2F3D3B54394134A2B45B7B4B524104A392FA3A5439413E9B551F7A4B5241480378CB3D54394188635DA0784B5241A045B6834254394174469476764B52418CB96B794254394132772D75764B5241703D0AA742543941C07D1D64764B52412C8716D9425439410EBE3025764B5241A8A44EE042543941F0F44A25764B5241B0E1E9454354394106F0165C744B524134C4B13E43543941925CFE5B744B5241E458174743543941D8A37051744B524198BB96204354394104560E21744B524120166A2D43543941C66D3420744B52419CE61D273E543941C07D1D646F4B5241701B0D10405439419EEFA7F2694B5241E895B23C445439412A1895A0664B5241B8F3FDC452543941DE938725604B5241C03923BA525439416EA30124604B5241C0EC9EEC52543941E4141D11604B5241E458172753543941E63FA4C75F4B52410868221C535439411C0DE0B95F4B5241E09C1125535439415817B7B95F4B5241182024C8525439411E143C7A5E4B52418838D6F56B5439414CC807655E4B5241CCAACFF56B543941C6DCB5645E4B52417C1D38776C543941CAA1455E5E4B5241FCD478796C543941F01648605E4B5241E81DA718835439418AB0E1C95C4B52416866661683543941643BDFC75C4B5241C8293A52835439414260E5C45C4B5241F016488083543941EA0434BD5C4B5241BC051284835439412063EEBE5C4B524140E8D98C98543941AA6054DE594B52412C87168998543941E4A59BDC594B5241C05B20019954394104E78CC8594B5241482EFF1199543941A4703DC2594B52415C8FC21599543941061214C3594B524190C2F5C8A5543941A0ABAD30564B52417C6132C5A55439413E0AD72F564B5241247502DAA5543941E0BE0E28564B52412497FFE0A5543941D42B6529564B52419C779C32B054394184C0CAC9524B5241E4C7982BB05439418E5374C8524B52418C4AEA74B0543941DE2406AD524B524130E6AE75B05439414E6210AC524B5241ACD85F76B05439410A6822AC524B5241F8C2646AB6543941623255004F4B5241C442AD69B6543941A62C43004F4B5241E0BE0E6CB6543941825149FD4E4B52415C6DC56EB6543941BADA8AFD4E4B5241FCA9F1E2BB5439414E840D634B4B52416CBC7453C4543941986E129B484B524138234A4BCF54394186EB5128464B524194D40948CF54394168446927464B5241905CFE53CF543941B0726825464B52418838D655CF543941D49AE625464B524120D26F9FDD543941842F4CC6424B52412CF6979DDD543941CEAACFC5424B5241FCCBEEA9DD543941361AC0C3424B524190C2F5F8DD543941C4B12EA6424B5241B88D0600DE54394130BB27A7424B5241083D9B55E654394146B6F3E13E4B524198FF904EE6543941DAACFAE03E4B524124E4836EE6543941DE2406D53E4B52415CD3BC73E6543941B4C876CE3E4B5241DC460378E65439418816D9CE3E4B5241083D9BD5EA5439418E7571BB3B4B524184C954D1EA5439412ACB10BB3B4B5241549FABEDEA543941FC1873973B4B524164EE5AF2EA5439414A7B83973B4B5241D0915CEEEC5439413CDF4F5D324B5241C442ADE9EC543941EE7C3F5D324B5241C09F1AEFEC543941FC3A7056324B5241C07D1DC8EC543941228E7525324B52419CA22359EC54394144FAEDFB314B5241285305B3EB5439417C832FE0314B5241C09F1AEFEA543941FC3A70D6314B5241A05E292BEA5439417C832FE0314B5241280F0B85E954394144FAEDFB314B524104341116E9543941228E7525324B5241006F81F4E8543941789CA24F324B5241F41FD2EFE85439412A3A924F324B524118D9CEF7E6543941CC7F48773B4B5241DC2406C1E2543941CEF7536F3E4B5241F44A59A6DA5439411C0DE019424B5241FC87F49BCC543941BAB88D6A454B524148E17A84C15439411AC05BE4474B5241A4BDC187C1543941A60A46E5474B5241D85F766FC154394186C954E9474B52415839B448C154394162C3D3F7474B5241BC529641C1543941FEB27BF6474B5241ACD85F86B8543941061214D74A4B5241004D848DB8543941D6C56DD84A4B5241A80A4645B85439416ABC74F34A4B52417A4EAB43B854394159FD76F54A4B5241A150AA44B8543941697C36F44A4B52414B0D4445B8543941C44375F34A4B5241DD478747B85439419C8B9CF24A4B524129CA4AFACB543941E4D53DEE3F4B52415CFD7DC5CC5439414A3CA4903B4B5241F596172FCB5439417E6FD763384B5241C263E44FD4543941B1A20AC42E4B5241F596170FDB543941E4D53DA3254B52415CFD7DD1C654394117097174234B524129CA4A0EC2543941170971E52A4B524129CA4A2AB45439417E6FD75B3C4B52418F30B1D8A95439417E6FD7D43F4B52415CFD7D299B5439417E6FD74B444B52415CFD7D418F543941E4D53DDE474B5241C263E4EB865439417E6FD73B4C4B524129CA4AA2785439414A3CA4E94E4B52418F30B1506E54394117097197514B5241F5961727505439417E6FD7AE524B5241F5961763325439414A3CA4E3514B52418F30B1FC18543941E4D53D4D504B52415CFD7D59045439411709719D4E4B5241C263E41FEE533941B1A20A0D4A4B52418F30B1B0BF53394117097134434B524129CA4A46A8533941170971BF3D4B5241F596179F955339414A3CA4903B4B5241F59617C7815339417E6FD761394B5241F596174344533941E4D53D00374B52415CFD7D092E533941170971CF354B5241C263E4DB11533941B1A20ABA334B5241C263E40BFA523941B1A20ABA334B524129CA4AC6E9523941B1A20A35364B52415CFD7DB5D8523941B1A20AA83C4B52418F30B19CCB5239414A3CA482424B52415CFD7D05B15239411709711E4E4B5241C263E4E38E523941B1A20AF1574B5241C263E4276D523941E4D53DB45C4B52415CFD7D0D2E5239414A3CA43E644B52415CFD7D91EC5139417E6FD701694B5241F596173FC9513941E4D53D966B4B5241F5961787A5513941170971DA6F4B52418F30B13482513941170971CC764B52410AD7A330645139418FC2F5387D4B52410AD7A3B0525139418FC2F5B8814B52410AD7A3B0425139418FC2F5B8844B52410AD7A330325139418FC2F5B8884B52410AD7A3B0275139418FC2F5988A4B52410AD7A330195139418FC2F5188B4B52410AD7A3300E5139418FC2F598894B52410AD7A3B0075139418FC2F578864B52410AD7A3B0035139418FC2F538824B52410AD7A3B0FC5039418FC2F5187E4B52410AD7A330F55039418FC2F5B87C4B52410AD7A330E25039418FC2F5187A4B52410AD7A3B0CB5039418FC2F5F8764B52410AD7A3B0B85039418FC2F558764B52410AD7A3309C5039418FC2F538764B52410AD7A3307F5039418FC2F578764B52410AD7A3306C5039418FC2F538764B52410AD7A3303E5039418FC2F578784B52410AD7A3B02A5039418FC2F5D87A4B52410AD7A3B0145039418FC2F5587E4B52410AD7A3B00B5039418FC2F538814B52410AD7A330FC4F39418FC2F598864B52410AD7A330F04F39418FC2F5388D4B52410AD7A330E24F39418FC2F5B8934B52410AD7A330D54F39418FC2F598974B52410AD7A3B0C24F39418FC2F5589A4B52410AD7A330AA4F39418FC2F5989D4B52410AD7A3B0894F39418FC2F5789F4B52410AD7A3305D4F39418FC2F598A14B52410AD7A3B02D4F39418FC2F5D8A44B52410AD7A330124F39418FC2F518A84B52410AD7A330FC4E39418FC2F578AB4B52410AD7A3B0E24E39418FC2F598AD4B52410AD7A330D84E39418FC2F558B14B52410AD7A3B0C44E39418FC2F538B54B52410AD7A330AB4E39418FC2F578BA4B52410AD7A3B08B4E39418FC2F5B8BE4B52410AD7A3B06A4E39418FC2F518C24B52410AD7A3305B4E39418FC2F578C34B52410AD7A3303F4E39418FC2F518C74B52410AD7A3302F4E39418FC2F558C84B52410AD7A3B0234E39418FC2F578C64B52410AD7A3301B4E39418FC2F5D8C14B52410AD7A330184E39418FC2F518BE4B52410AD7A3B0144E39418FC2F5F8B84B52410AD7A330F74D39418FC2F558B94B52410AD7A3B0FC4D39418FC2F5D8BF4B52410AD7A330F94D39418FC2F598C44B52410AD7A3B0E74D39418FC2F5B8C74B52410AD7A3B0D64D39418FC2F5D8CA4B52410AD7A330BC4D39418FC2F558CC4B52410AD7A3B0A74D39418FC2F518CE4B52410AD7A3308B4D39418FC2F538D04B52410AD7A3B0754D39418FC2F5F8D14B52410AD7A330614D39418FC2F578D54B52410AD7A330484D39418FC2F5F8D84B52410AD7A330314D39418FC2F518DC4B52410AD7A3B0444D39418FC2F5B8E34B52410AD7A3306B4D39418FC2F598DE4B5241 010300000001000000280300008C06F0569053394132C4B1CE174D52416C567D6E905339418026C2CA174D5241E02D907090533941D066D5CB174D524190C2F5489B5339417A36AB7E164D52411CEBE2469B5339412CF6977D164D5241FC5C6DD59B533941A679C765164D5241D8C56D449C5339413889413C164D524120B072489C533941A2D63437164D524160C3D34B9C533941B81E8537164D524134EF38559F5339416EA30128144D52413C4ED1519F533941585BB127144D5241F085C9749F533941A6BDC1FB134D52411C7C61729F533941A223B9F8134D52419C33A2749F533941C6DCB5F8134D52414894F6069F53394178E926790F4D5241244A7B73A2533941FAEDEB4C0B4D52416844692FA4533941365EBA3D094D52418838D625A453394134EF383D094D524124B9FC27A4533941DCF97E3A094D5241306EA331A4533941FCA9F13A094D524114FBCB7EA55339415AF5B97E074D5241C4D32B75A5533941CAA1457E074D524198DD9387A5533941E6D02267074D524198BB9660A55339419E802636074D524174E09CF1A45339412E90A00C074D52415CD3BCD3A4533941789CA207074D524128C286D7A45339414C158C06074D524180B740A29B533941BEC11706054D5241D83D79D89C533941782D2197014D524174E09CD19C53394122DBF996014D524140CF66D59C533941ECE23692014D52416007CED99C533941CAA14592014D52416419E2489D5339416EC5FE66FF4C524148E17A449D5339418E06F066FF4C5241B8627F499D53394176029A60FF4C524170CE88229D5339412EB29D2FFF4C524148BF7DBD9C5339416007CE09FF4C5241F41FD2BF9C533941CAC34209FF4C524138B4C8C69653394134A2B46FFD4C5241F875E07C8E533941B840826EFA4C52412063EE3A8D5339411C0DE08DF64C5241D49AE6ED8B533941721B0D1CF24C5241B49DEFE78B53394130992A1CF24C5241CC5D4BC88B5339418CDB68F4F14C52419031776D8B533941B0506BD2F14C5241F4DBD7718B533941903177D1F14C5241943A016D7D533941164850C8ED4C524194B20C01785339413C4ED1E1E84C5241186A4D4379533941E63FA46BE54C524100BC05D27B53394180D93D39E24C5241C876BE6F805339418E06F0C2DE4C5241D834EFF88753394190317775DC4C5241A8C64B77A95339414850FC70D34C524138F8C2C4B45339417C3F354AD24C524108F9A0C7B4533941DA8AFD49D24C52418048BF6DB5533941A4703D2ED24C524138674489B5533941B29DEF23D24C5241B0BFEC8EB553394108CE1925D24C52415817B7A1BB533941E4141D4DD04C5241E0BE0E9CBB5339418EE4F24BD04C52414C7B83EFBB53394110C7BA2CD04C5241ACFA5CFDBB533941166A4D1BD04C5241BCC11706BC533941F697DD1BD04C52416419E218C253394152499D40CA4C524154522710C253394104780B40CA4C5241EC7C3F15C25339419C11A539CA4C524140A4DF1EC2533941C039233ACA4C5241ACD85F06C65339414A598674C54C52415CB1BFFCC553394126310874C54C5241A423B90CC6533941FC87F45FC54C52411CC05B10C653394124B9FC5FC54C52416844697FC6533941F853E3A9C24C5241F0A7C67BC6533941D022DBA9C24C5241F41FD27FC6533941143FC6A4C24C52412041F163C653394112A5BD81C24C52419C559F6BC6533941A01A2F81C24C5241A423B9BCC15339415C8FC275BE4C524150AF9495C253394166886351B84C5241C84B3719C8533941D24D62F8B34C5241B437F872D25339413A014D94AE4C52417C36AB6ED25339415E4BC893AE4C52419C33A274D253394196218E91AE4C52416C348077D25339411C0DE091AE4C5241641058F9D8533941E8FBA9FDAA4C5241900F7AF6D8533941621058FDAA4C524138894100D953394132E6AEF9AA4C52417C1D3827D9533941EA95B2C8AA4C524138894100D953394110E9B797AA4C5241B86B09C9D85339412ACB1083AA4C5241A4923AD1D85339410E2DB281AA4C5241A879C789CD53394166D5E746A64C5241BC529681CD53394114D04448A64C52416007CE49CD5339418AFD6533A64C5241FCCBEEB9CC53394164CC5D1BA64C52418C6CE7BBCC5339411804561AA64C524128C286F7C353394130BB270FA54C5241F48E5314B85339416EA301E0A14C5241482EFF11B853394104E78CE0A14C52414C621008B853394162A1D6DCA14C524150D191ACB753394196218ECDA14C52413C4ED1B1B75339416E3480CBA14C5241D4E76A3B9D533941C6DCB5909D4C5241E86A2B369D5339418026C2929D4C524170AC8BEB9C533941842F4C869D4C524144696FE09C53394112A5BD859D4C5241EC0434E19C5339415C2041859D4C52410044FA8D855339413480B7409B4C524188A7577A6F53394150FC1863984C52414060E520605339411A51DA7B934C52415CFE431A605339410A46257D934C5241EC2FBBF75F5339417EFB3A70934C524174E09C515F53394148E17A54934C5241FC87F41B5F533941CEAACF51934C52410C24281E5F533941B29DEF4F934C524108CE196149533941A4DFBEB6914C524114AE47711D533941E2E995C6884C524124287E6C1D533941E0BE0EC8884C5241D019515A1D533941DE2406C5884C52413C92CB5F1D533941E8482EC3884C5241842F4C260B533941E8482E5F854C52410CBE30A9FD523941F6B9DA927D4C524108CE1981FE5239411E166A4D784C524150B81EA5005339412497FF84754C52414803789B00533941BAFC8784754C524130992AA8005339414ED19174754C5241ACFA5CAD00533941787AA574754C52414C158CFA0153394134113624704C5241D0B359F5015339410A682224704C524100917EFB0153394142F1631C704C5241C854C1F801533941B27BF218704C5241F4B050FB01533941D634EF18704C5241A42C438C01533941E8FBA9156C4C52417CD0B3890153394132E6AE156C4C52416C787A6501533941780B24E86B4C5241900F7AF6005339419A779CBE6B4C5241DC4603A800533941240681B16B4C5241746891AD00533941244A7BAF6B4C524190ED7C6FF8523941BAB88D466A4C5241B459F569F8523941BC7493486A4C5241F0D24D12F8523941FCCBEE396A4C5241C0EC9ECCF7523941226C78366A4C524140A4DFCEF75239415EBA49346A4C5241D0915C7EF252394152DA1BDC694C5241D83D7928EB5239419A779C32694C5241E4F21F32E4523941D49AE6C9674C524194CB7FA8DF52394132C4B162644C5241DC68007FDE523941FA7E6AA4624C5241806ABCC4E0523941A679C799614C52411C0DE0BDE0523941D044D898614C524160BA49DCE0523941FED4788D614C5241201FF4FCE052394142F16364614C524180B74002E1523941DA3D7964614C52411CC05BE0E1523941B88D06EC5D4C524174B515DBE15239412041F1EB5D4C524140575BE1E152394104780BE45D4C524140575BE1E1523941728A8ED85B4C52411C2FDD74E9523941A0ABAD44584C52416C567D6EE9523941D066D543584C5241E09C1175E95239418A416041584C5241D019517AE9523941705F0742584C52412C90A058F752394140A4DF52514C524194CB7FD8F7523941DCD78117514C5241345EBAA9FA523941AA8251CD524C5241E00209AAFA523941E00B93CD524C524100DE0219FB52394150FC18F7524C5241F0F44A89FB523941D022DB09534C524170810485FB5239417E8CB90B534C524118D9CE97015339418638D6E9534C5241984C159C01533941DACEF7E7534C524164F7E4D10153394190C2F5F0534C5241B8DA8A3D0253394160764FF6534C524160C3D33B02533941C6DCB5F8534C5241F8E461610E53394126C28683544C524150FC18630E5339412EFF2181544C5241388941900E533941D26F5F83544C5241A0CDAA8F0E53394196B20C85544C5241081B9EBE1D5339413E7958D8544C5241A0D634BF1D5339417A36ABD6544C524188A757EA1D533941AA13D0D8544C5241CC5D4B681E5339414C158CD2544C52414C158C6A1E5339417E6ABCD4544C524108AC1C8A37533941B003E734534C524140E8D91C41533941A245B6AF524C5241CCA145B6615339412EFF21F9534C5241A4BDC1B761533941849ECDF6534C5241784F1E0662533941A067B3FA534C524178E92621625339413E575BF9534C5241B072682162533941948785FA534C52414CEA047482533941EA26318C534C524198DD93379A533941C0EC9E80544C5241C486A787AF533941423EE845574C5241B0506B0AC1533941D656EC275A4C5241F853E3A5DC53394176E09C61614C5241B4A679A7DC53394112363C61614C5241E07A14AEDC53394134A2B463614C52415C8FC235DD533941AED85F7A614C5241C0172633DD533941EAB7AF7B614C524178E926D1EC53394120D26F6F634C5241CCEEC9D3EC533941E4F21F6E634C5241109C33F2EC533941A2D63473634C5241784F1EB6ED533941B27BF27C634C52416029CBD0ED5339419C559F7B634C524194B20CD1ED533941143FC67C634C5241C09F1A0FF6533941923A0161634C52418816D90EF653394188F4DB5F634C5241C07D1DB8F65339418E757157634C52412C431CEBF6533941B2BFEC4E634C5241A0D634EFF65339415CB1BF50634C5241E4361AE0FD53394140A4DF56624C524170A301DCFD53394196B20C55624C5241782D214FFE5339413C4ED141624C524100000060FE533941DCD7813B624C52411461C363FE5339413E79583C624C5241341136DC01543941226C7842614C524120B072D801543941C0CAA141614C524140355E0A025439416A4DF32E614C5241D4096812025439410EE02D30614C524194D409D806543941D6C56D3C5F4C52414872F9CF065439413433333B5F4C524188F4DBE706543941CAA145325F4C524174711BED06543941B2BFEC325F4C524198218E650A543941A067B3765D4C5241A8A44E600A543941BA490C765D4C5241F44A59660A5439415E4BC8735D4C5241D019516A0A543941388941745D4C52413C4ED1510E5439417E6ABC645B4C5241647FD94D0E54394114D044645B4C52410868225C0E543941B2BFEC5E5B4C524194A982610E543941545227585B4C5241B0E1E9650E54394196438B585B4C52412C1895E410543941780B2494594C52418CDB68A01954394148BF7DC5564C5241DCD7811327543941849ECD5A544C5241686FF00536543941C2F528DC524C5241D066D5B758543941EC2FBB7F4F4C5241703D0AB7585439417E1D387F4F4C5241F0C9C3C2585439415405A37E4F4C5241345EBAD95854394116FBCB7A4F4C5241808CB9DB585439411A51DA7B4F4C5241941804D6625439416ADE714A4E4C5241905CFED362543941D42B65494E4C5241C017266363543941DA1B7C314E4C5241B8F3FDE469543941DE2406914C4C5241D8F0F4FA69543941CCCCCC884C4C5241585BB1FF695439413C4ED1894C4C5241941804166F54394190A0F80D4B4C524194B20C81775439411895D459494C52410C022BA7805439411895D459494C5241941804A68E543941666666C6494C52412C90A0F89E543941081B9E224B4C524130DD2446AE543941D24D62A44E4C524184E2C748AE5439419ECDAAA34E4C5241A8C64BB7AE543941E4F21FB64E4C5241A03C2CB4AE5439410AF9A0B74E4C524150FC1843C55439415C2041A5514C524158863846C5543941361AC0A3514C524174B5156BC5543941B0E1E9A9514C52416007CE89C55439418E7571AB514C5241C07D1D88C5543941C264AAAC514C524140575BB1DE5439412041F1D7534C5241E0E00BB3DE543941EC51B8D6534C5241F0384527DF54394192CB7FDC534C5241BCB88D26DF543941AA6054DE534C5241ACADD8EFF05439416688634D544C5241E02D90F0F05439414EF38E4B544C52411CEBE206F1543941C264AA4C544C52419CEFA706F15439413C4ED14D544C5241905374F4F85439414A598668544C5241D409685201553941DCB58434554C524140CF66250D553941F44A597A584C524110C7BA280D5539419A999979584C5241605452370D553941BC270F7F584C524198DD93770D553941F263CC89584C5241BC490C720D5539410C71AC8B584C5241D812F2311C55394138D6C5415B4C5241B4A679371C5539411EC9E53F5B4C5241F46C569D1C5539411EA7E8505B4C5241CCCCCCDC1C5539414E6210545B4C52414C158CDA1C553941C03923565B4C52411C5A642B2B5539414AEA04505C4C52419C11A52D2B5539416A6FF04D5C4C5241F4B0508B2B553941BE3099525C4C52413C2CD48A2B553941E6AE25545C4C5241941804763C5539418E7571A75C4C5241489D80763C553941F853E3A55C4C52418451499D3C553941F21FD2A75C4C5241A4923A613D55394174D7129E5C4C5241605452073E553941AA6054825C4C5241842F4C763E553941CCCCCC585C4C52418451499D3E553941F21FD2275C4C5241842F4C763E553941AACFD5F65B4C5241605452073E553941CE3B4ECD5B4C5241A4923A613D55394104C58FB15B4C5241BC0512C43C5539418048BFA95B4C5241708A8EC43C55394158CA32A85B4C524188B0E1092C5539418638D6555B4C52413C0AD7431E553941FA5C6D655A4C5241DCF97EFA0F55394152B81EC5574C5241A4BDC1F70355394174D71272544C5241D8C56DF403553941CE88D272544C52418838D6E5035539413E575B6D544C524110E9B73F0355394176E09C51544C524108CE1931035539416619E250544C524174D712320355394138894150544C5241F853E315FA54394130DD2472534C524144D8F014FA5439415C6DC572534C5241148C4A7AF954394174B5156B534C52419487857AF9543941FCCBEE69534C52414082E247F1543941CE19514E534C5241BCC117C6DF543941923A01E1524C524170F085F9C6543941C8BAB8BD504C524130992AC8B05439417EFB3ADC4D4C5241984C155CA1543941D85F76534A4C52418CB96B59A15439417C832F544A4C52414CA60AC6A0543941BC96903B4A4C52419C8026A2A0543941A679C7394A4C52414CEA04A4A0543941D24D62384A4C5241F4FDD4B88F5439416ABC74CF484C52410022FDB68F543941D044D8D0484C5241946588538F5439411EC9E5CB484C5241B8FC87548F5439413C4ED1C9484C5241E8B7AF03815439418026C25A484C5241C420B00281543941D044D85C484C5241043411C6805439411895D459484C5241A835CDCB765439411895D459484C524188F4DB077654394198DD9363484C524124E4838E75543941ACADD877484C52410CB5A6897554394186A75776484C52419031776D6C543941AA60544E4A4C5241AC6054726C543941D066D54F4A4C524150AF94456C543941840D4F574A4C52412CB29D2F6C5439419465885F4A4C5241B047E12A6C54394126E4835E4A4C52416CC5FE0267543941244A7BDF4B4C5241BCE314CD6054394190C2F56C4D4C52410881953357543941A857CA924E4C524140575B9134543941EA73B5ED514C52419C802692345439415A8638EE514C5241787AA58C34543941DCF97EEE514C52413411368C34543941ECE236EE514C524110363C5D25543941D478E972534C5241102DB25D2554394156EC2F73534C5241B4A67957255439416E348073534C524130DD24F624543941A6BDC183534C5241E02D90F0245439413C4ED181534C524114FBCB0E1754394142F16300564C5241AC1C5A1417543941AA605402564C5241BC9690CF165439413C4ED10D564C52417C832FAC165439414E840D1B564C5241B4EA73A51654394112A5BD19564C5241F0F44A890D543941D26F5F07594C5241B88D06900D543941A0ABAD08594C52411C3867440D5439416C09F924594C524194F6063F0D543941C876BE2B594C524178BE9F3A0D54394188855A2B594C52412C8716A90A543941E4141DFD5A4C5241A0D634CF0654394168006F055D4C5241441CEB620354394198DD93BB5E4C5241B4847CC0FE533941D634EFA0604C5241F4285C9FFB53394180B74082614C524174E09C61F55339418E06F062624C5241109C3322EE5339411AE2587B624C5241CCCCCC4CDF5339413208ACA0604C524138B4C8C6C3533941065F986C594C52417C6132C5C35339416C09F96C594C5241508D97BEC35339414A9D806A594C524110C7BA68C3533941C2F5285C594C52415496216EC353394108AC1C5A594C524160A1D6A4B153394148E17A6C564C524120D26F9FB153394170CE886E564C5241F48E5374B1533941CEF75367564C5241FC187377B15339413C4ED165564C52419CEFA7C69B533941FC87F493534C5241946588C39B53394190317795534C52418C1F639E9B5339418295438F534C52413455302A9B533941DA1B7C89534C5241C4FEB22B9B53394154742487534C5241E02D90E0825339413867448D524C52414C840DDF82533941BE0E9C8F524C52413C9B558F82533941E63FA48B524C52413C014D74825339414850FC8C524C524104780B748253394162C3D38B524C52413480B720625339417AC729FA524C52418048BF5D4153394150FC18AF514C5241A42C435C4153394168006FB1514C52411C0DE00D415339414C3789AD514C5241343333A340533941AACFD5B2514C5241C05B20A1405339418E5374B0514C5241ACCFD5A6365339415EDC463B524C52411CA7E8A8365339417A58A83D524C52417858A89536533941081B9E3E524C5241F8A0679336533941D6C56D3C524C524140A4DFBE1D533941684469D7534C524144AD69FE0E5339416C567D86534C52410022FD46035339412A189500534C524198999919FE52394136AB3E43524C52413C4ED181FB5239417EFB3AB0504C524130DD2456FC523941C6DCB5184E4C5241C876BE4FFC5239412A1895184E4C52415C4BC857FC5239414A9D800E4E4C52410412144FFC5239414EF38E034E4C52418838D655FC523941684469034E4C524118D9CE77FB523941E09C11854B4C524158F5B92AFA523941F263CC9D474C5241E8AE2524FA523941FCCBEE9D474C5241F8A06723FA5239412497FF9C474C5241F8C2642AFA52394162A1D69C474C524158A835DDF85239412E90A008444C5241588638D6F8523941F085C908444C52413C7958B8F85239415A643BE3434C5241F441CFA6F85239413208ACDC434C524100917EABF8523941749318DC434C52415C204151E7523941FC1873F73A4C524150D1914CE7523941B88D06F83A4C5241FCF67510E75239414C3789E13A4C52418C06F016E7523941388941E03A4C524150B81E95E0523941EE0DBED0384C5241081B9E8EE052394102BC05D2384C524110363C7DE0523941DCD781CB384C524118B7D180E0523941100BB5CA384C524188D2DE20D952394156EC2FBB364C52418451491DD9523941925CFEBB364C5241F46C560DD9523941705F07B6364C524138AB3E67D8523941A8E8489A364C5241A01A2F5DD8523941141DC999364C52411C0DE05DD8523941F46C5699364C524108819563CE523941D85F769F354C52418C8EE462CE5239418C6CE79F354C524100DE02A9CD5239410C93A996354C5241DCD78163CD523941764F1E9A354C524180B74062CD523941AE25E497354C5241F4B9DABABA523941900F7A3E364C524150DA1BBCBA5239415839B440364C5241549FAB3DBA5239410022FD46364C524114F2411FBA523941BC05124C364C5241787AA51CBA5239418026C24A364C52415CB1BF5CAB523941A4DFBE22384C5241F4285C5FAB523941E0BE0E24384C5241F4DBD741AB5239414850FC28384C524110363C3DAB523941029A0827384C5241C03099EAA1523941BE0E9C87394C52418C06F0169952394100DE02293A4C524150B81E3582523941A2B437903B4C52413C4ED171605239411AC05BF83C4C52414013617360523941EC51B8FA3C4C52419CEFA75660523941E6AE25FC3C4C5241006F815460523941F263CCF93C4C5241D044D8B04D5239418C4AEA083E4C5241CC7F489F3B52394124B9FCFB3C4C524114143F562E523941F6B9DAB23B4C52413480B7001452394124287EE4384C5241E4F21FE2EA51394116485028334C52419C081BDEEA5139419A081B2A334C5241946588D3EA513941D0D55628334C5241F441CFD6EA5139413AB4C826334C524124E4833ED15139412C6519CA2F4C5241C8073D3BD1513941C286A7CB2F4C52413C014D14D151394178E926C52F4C52413C92CBAFD0513941545227C02F4C5241E8FBA9B1D051394112A5BDBD2F4C52417C832FCCB5513941BC7493702E4C5241D01951CAB55139410022FD722E4C5241100BB5B6B5513941267502722E4C5241C07D1DB8B551394134A2B46F2E4C5241D000DE429F5139418E5374942D4C52416CC5FED29F513941BAFC87AC2D4C5241482EFF41A051394128ED0DD62D4C524190C2F568A0513941703D0A072E4C5241482EFF41A0513941B88D06382E4C52416CC5FED29F513941287E8C612E4C5241B003E72C9F51394160984C7D2E4C524190C2F5689E513941703D0A872E4C52410C93A9129E513941A4DFBE822E4C52412497FF109E5139419CA223852E4C5241D0B359D59A51394196B20C612E4C52417C36AB0E9B51394176BE9F6A2E4C5241F441CF869B513941065F98702E4C524140CF66859B513941F831E6722E4C5241C00E9C13B551394142F1636C2F4C52419CEFA726C8513941C264AA58304C52413C9B557FDF513941D26F5FC3354C5241E00B93D9F05139415EBA4904394C5241744694460852394104780BF83A4C52415CFE434A155239418A1F63BA3B4C524140A4DFDE215239419A779C763D4C5241386744191D52394140355E6A3F4C52410C93A92220523941B07268B1414C52416C348057295239411AC05BF4434C5241C464AAC02F5239417CF2B0DC434C524130992AA833523941D42B6589434C524174F90F993A523941946588B7404C52416C787AD543523941BA6B097D3E4C524170AC8B3B4D5239416891ED083F4C5241C8BAB83D4D523941508D97063F4C52414C7B83AF4D5239413889410C3F4C52418816D91E4E523941EC51B8063F4C52412497FF204E523941E09C11093F4C52416419E22861523941388941F43D4C5241701283F0825239412041F18B3C4C52416C4DF3EE82523941E00B93893C4C524174931814835239417E8CB9873C4C52413CBD521683523941482EFF893C4C5241807346149A52394172F90F213B4C5241BC490C129A52394116FBCB1E3B4C5241806ABC249A523941AE69DE1D3B4C52414894F6269A52394162C3D31F3B4C5241C0172643A352394180D93D793A4C52414060E540A3523941CC7F48773A4C5241B0506B7AA352394168226C743A4C5241F44A59B6A352394142AD696A3A4C5241D8F0F4BAA352394188635D6C3A4C5241C898BB36AD5239415817B705394C524100917E9BBB52394152B81E39374C5241E4D0226BCD52394196900F9A364C5241E4581777D6523941C0EC9E7C374C5241A05E297BDD523941B4C87672394C5241504013D1E3523941BC0512743B4C5241FCCBEEE9F4523941107A3637444C524144AD692EF652394102098AB3474C5241D4E76A7BF7523941285C8F9A4B4C5241482EFF81F752394120F46C9A4B4C524164EE5A82F752394140A4DF9A4B4C5241E4C7987BF75239412653059B4B4C5241DC8AFD55F8523941FCA9F10E4E4C52417C1D38F7F7523941E6D022374F4C5241506B9AD7F75239415839B4384F4C524194A98231F75239418E5374544F4C5241684469DFF65239417AA52C734F4C5241C854C1D8F6523941384547724F4C5241F4285CCFF3523941A2D634DB504C5241941804D6F3523941E2361ADC504C5241903177CDF3523941166A4DDF504C5241A4B437C8F3523941304CA6DE504C52412C8716E9E5523941ECE236CE574C524140E8D91CDE52394188D2DE7C5B4C5241ECC03923DE5239415817B77D5B4C52413C795808DE523941F0A7C6875B4C524140575BE1DD52394138F8C2B85B4C524140575BE1DD52394104780BE05D4C5241AC3E570BDD523941780B2438614C5241448B6CA7DA52394176029A50624C5241A8E848AEDA5239414C378951624C52411CC9E58FDA5239411EA7E85C624C52411CA7E868DA52394166F7E48D624C524164105879DA523941DE718AA2624C5241643BDF6FDA5239418E06F0A2624C524104560EBDDB523941C420B096644C5241489D80C6DB523941168C4A96644C5241B0E1E9D5DB5239417A58A8A9644C52411CC05BD0DB523941E4F21FAA644C524120FDF695E05239411804563E684C524170AC8B9BE0523941AE69DE3D684C52410C93A9A2E05239411873D746684C5241E8FBA911E152394188635D70684C524144AD693EE15239413E0AD777684C5241287E8C39E152394162105879684C5241EC73B555EA52394186C954516A4C524104A3925AEA52394162C3D34F6A4C52412041F1D3EA523941E2361A646A4C52410CB5A619EB523941BC9690676A4C5241D46F5F17EB5239418048BF696A4C5241C48F3177F6523941900F7A266B4C5241E8B7AF93FD5239411C0DE05D6C4C524174B515FBFD5239410E9C331A704C5241CC3B4EB1FC52394138F8C25C754C5241A42C438CFA52394126E48326784C5241B0E1E995FA523941907EFB26784C5241E4581787FA523941083D9B39784C52416CBC7483FA523941E00B9339784C5241D0B359A5F952394138D6C5A57D4C52414850FCA8F95239416007CEA57D4C524144D8F0A4F95239411CEBE2AA7D4C52418C6CE7CBF9523941643BDFDB7D4C5241D44D62D0F9523941BADA8ADD7D4C5241DC6800CFF9523941A089B0DD7D4C52416029CBB007533941105839E4854C5241580E2DB2075339412AA913E4854C5241E895B21C0853394144FAED0B864C52414C158C5A085339415CFE4316864C5241E09C11550853394152DA1B18864C5241088195F31A533941F831E68E894C5241E8D9AC2A4753394104C58F8D924C524190ED7C2F47533941984C158C924C5241443EE8A947533941BAFC87A0924C5241BC9690DF47533941A2D634A3924C5241ACFA5CDD475339414E4013A5924C5241585BB15F5D53394146B6F339944C524194CB7F986C533941EEC9C316994C5241782D219F6C533941FED47815994C5241E8FBA9C16C5339418A1F6322994C52418C8EE4426D5339414872F937994C52418004C53F6D5339416C787A39994C52417C36ABCE83533941BE9F1A279C4C524184C0CAD183533941083D9B259C4C5241587DAEF6835339411461C32B9C4C524184C0CA018453394186EB512C9C4C5241DC240601845339413A70CE2C9C4C52417C36AB3E9B533941C8073D6F9E4C5241847CD053B55339416C567D9AA24C52418451494DC1533941506B9ACFA54C52412CB29D4FC1533941BC270FCFA54C5241287E8C59C1533941CC10C7D2A54C52418CB96BE9C1533941F241CFEAA54C5241B4A679E7C1533941D066D5EBA54C52412C211F84CA533941168C4AF2A64C5241F4285CDFD4533941006F81D4AA4C52416C787AD5CE5339415AF5B926AE4C5241B4C8766EC4533941C8BAB891B34C5241F0C9C372C453394136CD3B92B34C524128530563C45339419CC42098B34C5241B0506B5AC45339412063EEA2B34C5241905CFE53C453394120F46CA2B34C5241388941B0BE5339415CB1BF14B84C5241587DAEB6BE5339415C204115B84C5241A835CD9BBE533941DEE00B37B84C52412C90A098BE53394126530537B84C5241948785BABD53394186C95481BE4C5241102DB2BDBD5339413E575B81BE4C5241ECE236BABD53394112A5BD85BE4C5241BCC117D6BD53394182E2C7A8BE4C52418C1F63CEBD533941F46C56A9BE4C5241B003E77CC2533941FA7E6AB4C24C52411873D712C25339411C5A644BC54C52413CBD5236BE53394106819503CA4C52415CDC4643B8533941105839C0CF4C5241A067B3CAB2533941D42B6569D14C52410868228CA75339410C93A98ED24C524180D93D89A7533941AE47E18ED24C5241C01726E3A653394176BE9FAAD24C5241D83D79D8A6533941081B9EAED24C5241DC8AFDD5A6533941DE0209AED24C5241E43FA4FF845339417C3F35CADB4C5241E4F21F0285533941A857CACADB4C52411CC05BF084533941D8A370D1DB4C524104A392EA84533941388941D0DB4C524170AC8B1B7D533941BC270F33DE4C524140575B217D5339415A423E34DE4C524114FBCBCE7C533941782D2153DE4C5241C486A7C77C533941E2361A5CDE4C52412C6519C27C533941E63FA45BDE4C52416C9A77FC775339411A51DAEFE14C5241BC490C0278533941164850F0E14C5241141DC9F57753394134A2B4FFE14C5241C4F528EC77533941ECC039FFE14C52413C4ED15175533941780B2440E54C52414803785B755339412E90A040E54C52416C09F950755339413C4ED14DE54C52416CE7FB49755339417A58A84DE54C5241CCCCCCFC73533941AE69DEE1E84C5241CCEEC90374533941705F07E2E84C5241A067B3FA73533941228E75EDE84C524140CF661574533941B8AF030FE94C524110363C0D7453394198DD930FE94C5241B47BF2B079533941B6847C28EE4C52419CA223B979533941D656EC27EE4C524140CF66C5795339411AE25837EE4C5241388941207A533941F46C5659EE4C52411851DA1B7A533941168C4A5AEE4C524104560EFD87533941A01A2F59F24C5241F063CC3D8953394104560EA1F64C5241CCEEC94389533941B27BF2A0F64C5241708A8E4489533941FCCBEEA1F64C52419C081B3E8953394196900FA2F64C524138234A8B8A53394186C954A5FA4C524110A5BD918A5339417C6132A5FA4C524198BB96B08A533941DACEF7CBFA4C52417C832FEC8A5339415CFE43E2FA4C52412C211FE48A533941C286A7E3FA4C52415C20419193533941AA13D008FE4C5241F0F44A9993533941448B6C07FE4C5241F0C9C3C2935339412063EE16FE4C524144696FC093533941B6A67917FE4C52413C9B553F99533941F48E5390FF4C5241283A92DB985339414E840D83014D524114F2418F9753394176029A30054D5241784F1E9697533941CA54C130054D52418451498D975339411A51DA3B054D5241C8E53FB49753394162A1D66C054D5241A44E402398533941D2915C96054D5241C05B20419853394188855A9B054D52413CDF4F3D98533941B20C719C054D5241148C4A5AA1533941BE0E9C97074D524110583944A0533941AED85F0A094D524154302A899E533941006F81180B4D5241F0C9C3929E53394100DE02190B4D524180B740929E5339419C11A5190B4D52412C90A0889E53394178E926190B4D52410CE02D109B5339418EE4F2530F4D52416007CE199B533941B20C71540F4D5241A401BC059B533941569FAB6D0F4D5241780B24089B5339415839B4700F4D5241F853E3059B5339413480B7700F4D52419C779C729B533941D40968E6134D52417CAEB6D298533941AA6054AE154D5241B415FB5B8F53394172F90FD1164D52414CC807ED83533941E4F21F1A164D5241F80FE98766533941780B2428144D5241F87E6A2C285339415EDC466B0E4D5241107A362BF6523941A0F83176094D5241BCC117A6DA5239410AF9A0C3034D524194A982A1DA52394100DE02C5034D524124B9FC97DA523941448B6CC3034D5241BCE3149DDA523941CEAACFC1034D524130E6AEF5C75239418638D611004D524198BB96F0C7523941FC187313004D5241E0BE0E7CC7523941B615FBFFFF4C5241D019516AC7523941BE9F1AFFFF4C52419075716BC7523941F44A59FEFF4C5241DC4603889552394192CB7F54FB4C52411CEBE28695523941EE7C3F55FB4C5241780B247895523941DCB58454FB4C5241443EE87995523941C8073D53FB4C5241CC32C491825239415AF5B9B6F94C52419487857A6D523941FAA067B3F64C524114143F766D523941A60A46B5F64C524144696F406D523941F01648ACF64C5241401361136D5239414CA60AAAF64C5241B4EA73156D523941D24D62A8F64C524100BC05323B5239416619E2C0F24C524190E4F22F3B523941DE718AC2F24C524130FF21BD3A523941865AD3BCF24C5241B8DA8ABD3A523941F6285CBBF24C5241E43FA45F1C52394128A08930F24C5241A0D6345F1C52394126750232F24C5241A05E293B1C523941A2B43730F24C524144FAED1B1C523941CA32C431F24C5241E4C7981B1C523941FEF67530F24C524108F016F8F85139415EDC46BBF24C5241B09465F8F851394198BB96BCF24C5241E8B7AF53F851394182E2C7C4F24C52413C2CD42AF8513941506B9ACBF24C5241448B6C27F8513941482EFFC9F24C52412CD49A56EA513941EC2FBB9FF44C5241B8D100AED15139418C6CE753F74C524114FBCBAED15139411AC05B54F74C5241F897DD83D151394126C2865BF74C524110E9B77FD1513941A089B059F74C5241FC5C6D85C751394176BE9FC2F84C5241E00B9389C7513941FEF675C4F84C524160545217C751394172AC8BD7F84C52418004C5FFC65139411AC05BE0F84C52411483C0FAC6513941A8C64BDFF84C52417CA52C93B1513941F0A7C62FFF4C5241D088D20EA1513941302AA917014D524160325510A151394148E17A18014D5241F063CC0DA1513941B003E718014D5241984C150CA1513941B615FB17014D524130772DB194513941E461A18A024D5241B003E72C9551394182E2C790024D52416CC5FED295513941BAFC87AC024D5241482EFF419651394128ED0DD6024D524190C2F56896513941703D0A07034D5241482EFF4196513941B88D0638034D52416CC5FED295513941287E8C61034D5241B003E72C9551394160984C7D034D52417C1D38F794513941DACEF77F034D52418CB96BF9945139418638D681034D524124E4833E93513941D40968A2034D5241A0CDAA3F93513941BE3099A2034D5241C00E9C0394513941D0D556AC034D524128C286C794513941BE3099A2034D524158EC2FDB94513941F2B0509F034D5241B003E7DC94513941EC9E3CA0034D52413CDF4FBDA25139412041F1FF014D52419CE61DA7B35139413E79580C004D5241083D9BA5B351394126C2860B004D5241C030993AB45139415405A3F2FF4C5241580E2D52B4513941AAF1D2E9FF4C52410C022B57B4513941AE47E1EAFF4C5241F875E0CCC9513941A4703D96F94C5241DC240661D3513941C876BE3BF84C5241244A7B03EC5139415A423E88F54C5241C420B002EC513941CCEEC987F54C52415405A322EC513941D8817382F54C52414CA60A26EC5139414E621084F54C5241F853E3A5F9513941BCE314B9F34C5241A0ABAD381C52394192CB7F30F34C524174F90F393A5239419C11A5B9F34C5241081B9EAE6B52394104E78C98F74C5241C46D34C0805239412ACB109BFA4C524148E17AC4805239417C613299FA4C5241148C4AFA80523941325530A2FA4C5241CC10C71A81523941A835CDA3FA4C524100DE021981523941BCE314A5FA4C5241B09465289452394144D8F044FC4C5241E00B93B9C552394150FC18E7004D524120166A1DD8523941C8BAB889044D524194438BDCF35239415EBA49480A4D5241C05B20E1F352394166D5E7460A4D524130BB275FF45239416A2BF65B0A4D5241D478E966F45239413E79585C0A4D5241ACD85F66F45239417CF2B05C0A4D5241AC8BDBB8265339418638D6590F4D5241D42B65B92653394148BF7D590F4D5241DC8AFDC526533941764F1E5A0F4D5241806ABCC426533941B437F85A0F4D5241CCCCCC3C65533941B4C8761A154D524128ED0D3E65533941083D9B19154D5241F875E06C65533941B29DEF1B154D524178BE9F6A65533941E27A141E154D5241B0506BEA825339411895D411174D5241E895B2EC82533941EAB7AF0F174D5241DCD781F382533941B88D0610174D52415C2041F182533941CAA14512174D5241F441CF168F53394152499DD4174D524174F90F198F533941AED85FD2174D52416CC5FE928F533941B20C71D8174D52418C06F0569053394132C4B1CE174D5241 010300000007000000020300000AD7A330314D39418FC2F518DC4B52410AD7A3B0444D39418FC2F5B8E34B52410AD7A3306B4D39418FC2F598DE4B52410AD7A3B0794D39418FC2F5F8DC4B52410AD7A3B08E4D39418FC2F5B8DB4B52410AD7A3B0A34D39418FC2F5F8D94B52410AD7A330B24D39418FC2F558DA4B52410AD7A3B0C34D39418FC2F518DB4B52410AD7A3B0D24D39418FC2F578DA4B52410AD7A3B0E54D39418FC2F558D84B52410AD7A3B0F34D39418FC2F5F8D64B52410AD7A330044E39418FC2F5F8D34B52410AD7A330134E39418FC2F5F8D14B52410AD7A330334E39418FC2F598D04B52410AD7A3304D4E39418FC2F578CD4B52410AD7A3B05D4E39418FC2F558CA4B52410AD7A3306E4E39418FC2F518C84B52410AD7A330844E39418FC2F578C54B52410AD7A3309C4E39418FC2F5B8C24B52410AD7A330C74E39418FC2F5D8BB4B52410AD7A3B0DE4E39418FC2F578B74B52410AD7A3B0F04E39418FC2F598B34B52410AD7A330FF4E39418FC2F518B14B52410AD7A3B0154F39418FC2F558AD4B52410AD7A3B01F4F39418FC2F5F8AB4B52410AD7A3B0374F39418FC2F5B8A84B52410AD7A3B04F4F39418FC2F5B8A64B52410AD7A3B0774F39418FC2F578A44B52410AD7A3B0AA4F39418FC2F5F8A34B52410AD7A3B0C54F39418FC2F558A24B52410AD7A330DD4F39418FC2F5389C4B52410AD7A330055039418FC2F5188F4B52410AD7A3B00D5039418FC2F5F88B4B52410AD7A3B02B5039418FC2F578844B52410AD7A3B03A5039418FC2F558824B5241FDACC76E5E503941F86F7DA27F4B5241B43441705E5039411B0B79A27F4B524140A4DF6E5E503941DE718AA27F4B524140A4DF6E48503941DE718AE2814B5241D088D26E5E503941948785A27F4B52410CD7A3B03A50394190C2F558824B52410CD7A3B02B50394190C2F578844B52410CD7A3B00D50394190C2F5F88B4B52410CD7A3300550394190C2F5188F4B52410CD7A330DD4F394190C2F5389C4B52410CD7A3B0C54F394190C2F558A24B52410CD7A3B0AA4F394190C2F5F8A34B52410CD7A3B0774F394190C2F578A44B52410CD7A3B04F4F394190C2F5B8A64B52410CD7A3B0374F394190C2F5B8A84B52410CD7A3B01F4F394190C2F5F8AB4B52410CD7A3B0154F394190C2F558AD4B52410CD7A330FF4E394190C2F518B14B52410CD7A3B0F04E394190C2F598B34B52410CD7A3B0DE4E394190C2F578B74B52410CD7A330C74E394190C2F5D8BB4B52410CD7A3309C4E394190C2F5B8C24B52410CD7A330844E394190C2F578C54B52410CD7A3306E4E394190C2F518C84B52410CD7A3B05D4E394190C2F558CA4B52410CD7A3304D4E394190C2F578CD4B52410CD7A330334E394190C2F598D04B52410CD7A330134E394190C2F5F8D14B52410CD7A330044E394190C2F5F8D34B52410CD7A3B0F34D394190C2F5F8D64B52410CD7A3B0E54D394190C2F558D84B52410CD7A3B0D24D394190C2F578DA4B52410CD7A3B0C34D394190C2F518DB4B52410CD7A330B24D394190C2F558DA4B52410CD7A3B0A34D394190C2F5F8D94B5241E4F21FE2354E39419C559F87AD4C5241ACD85F063B4E39418EE4F25BAA4C52419CA22399334E394164AA60F0AE4C5241E461A126234E3941C039238AB64C5241ACFA5C2D234E3941DEE00B8BB64C5241D456EC0F234E394128ED0D96B64C524190C2F5E8224E3941703D0AC7B64C5241D456EC0F234E3941B88D06F8B64C5241B0BFEC7E234E3941287E8C21B74C524170810425244E394160984C3DB74C524190C2F5E8244E3941703D0A47B74C5241B003E7AC254E394160984C3DB74C52416CC5FE52264E3941287E8C21B74C5241708A8EA4264E3941029A0803B74C524138234AAB264E39412041F103B74C524138234A2B374E39412041F163AF4C52416C09F9904A4E3941F0F44AF1994D524144696FF0774E394192CB7F509A4D524198FF906E774E3941545227689C4D5241C442ADF96F4E39416C09F998A64D5241B003E70C704E3941D022DB99A64D524190C2F5E86F4E3941703D0AC7A64D5241D478E936704E3941923A0129A74D5241D4BCE314714E3941E0BE0E7CA74D524108CE1961724E3941E04F8DB3A74D524190C2F5E8734E3941703D0AC7A74D524118B7D170754E3941E04F8DB3A74D52414CC807BD764E3941E0BE0E7CA74D5241480C029B774E3941923A0129A74D5241708104C5774E3941105839F4A64D52415C423ED8774E394176711BF5A64D52415C423E587F4E394176711BB59C4D5241708104457F4E3941105839B49C4D5241143FC65C7F4E394140355E969C4D5241E45817677F4E3941022B87969C4D5241E4581767804E3941022B8776984D5241143FC65C804E394140355E76984D524128ED0D5E804E394110C7BA74984D5241B4A67967804E3941AC8BDB74984D524144D8F054814E3941DE718A2A944D524194A982D18B4E39412C431C0F914D5241B003E76C934E39413CDF4F25924D5241B4EA7375934E3941E00B9321924D5241884160C5934E3941441CEB2E924D52418C8EE4C2934E3941F0164830924D52418C8EE4C2A84E3941F0164890944D5241884160C5A84E3941441CEB8E944D524108CE19E1A84E3941E04F8D93944D5241F0D24D02A94E3941EA043495944D52410CE02D00A94E394176BE9F96944D524104E78C78D34E3941423EE895984D52416C09F970E64E3941E88C28759A4D5241580E2D72E64E39411E3867749A4D5241085F987CE74E39410CB5A6819A4D524168D5E77AE74E394196218E859A4D524168D5E7FAF94E394196218E059B4D5241085F98FCF94E39410CB5A6019B4D524190C2F568FA4E3941703D0A079B4D5241E8D9ACBAFB4E394112143FF69A4D524138D6C5BDFB4E394120B072F89A4D524138D6C5BD0C4F394120B07278994D5241E8D9ACBA0C4F394112143F76994D524118B7D1F00C4F3941E04F8D73994D524164EE5A520D4F394182954363994D52415CFE435A0D4F3941CE88D266994D52415CFE435A1F4F3941CE88D2E6964D524164EE5A521F4F3941829543E3964D52414CC8073D204F3941E0BE0EBC964D5241B88D06102C4F3941F2B050C7934D5241F8C2647A464F3941705F079E914D5241C4F528CC994F394154C1A8E08C4D52414082E2C7994F3941FC87F4DB8C4D524118B7D1709A4F3941E04F8DD38C4D5241D4DEE09B9A4F39411AC05BCC8C4D5241A0CDAA9F9A4F394164EE5ACE8C4D5241A0CDAA9FD44F394164EE5AEE854D5241D4DEE09BD44F39411AC05BEC854D52412497FF30D54F3941FC1873D3854D5241C4F5283CD54F394188855AD7854D5241D0F753B3E94F3941CCEEC92F824D5241D4096812055039410000001C804D52419C081B0E05503941FEF67518804D524118B7D17005503941E04F8D13804D5241283A929B05503941FA7E6A0C804D5241840D4F9F055039416666660E804D524190C2F5E82150394162A1D6B47C4D524190E4F2AF4F5039412E6EA3D9784D5241D0D556AC4F503941D8F0F4D6784D524118B7D1F04F503941E04F8DD3784D5241907571BB50503941EA73B5B1784D5241042B87C6505039416C787AB5784D5241042B8746675039416C787A95744D52419075713B67503941EA73B591744D52414CC807BD67503941E0BE0E7C744D5241E43FA4CF6750394108CE1975744D5241905CFED36750394152962176744D5241905CFE536F50394152962176724D5241E43FA44F6F50394108CE1975724D5241480C021B70503941923A0129724D5241240681357050394134A2B407724D5241BCB88D467050394162A1D608724D5241DCD781C37C503941C6FEB24B664D5241C46D34C0845039414C158C6E5F4D5241B47BF2B084503941D8A3706D5F4D5241448B6CC7845039410EBE30515F4D524168DE71DA84503941482EFF515F4D524168DE71DA88503941482EFF71594D5241448B6CC7885039410EBE3071594D524190C2F5E888503941703D0A47594D524178BE9FDA8850394100DE0235594D5241F44A59E688503941CCCCCC34594D5241F44A596687503941CCCCCCF4534D524178BE9F5A8750394100DE02F5534D5241480C021B875039414E4013A5534D5241C030999A865039414CC80775534D5241ECE236AA86503941A4703D72534D5241ECE2362A7F503941A4703DD2504D5241C030991A7F5039414CC807D5504D5241CC7F48EF7E50394118B7D1C4504D52412CB29DBF845039410EBE30854C4D524194D409B88450394128A089844C4D5241ECC039C384503941462575764C4D5241A8A44ED084503941840D4F774C4D524150FC18C38E503941DC4603E4424D52417CAEB6029250394150FC18EB404D5241587DAE36A0503941DE0209A23C4D5241708104B5AA50394170CE8882394D524158A835ADAA503941D4BCE380394D52414CA60AE6AA5039410AF9A06B394D5241F0D24DF2AA5039417268916D394D5241648863BDB65039414A9D80C2344D5241B8F3FD74C5503941FAA06753314D52415817B771C5503941022B8752314D5241DC460388C5503941849ECD4E314D524194438B9CC55039410A8A1F47314D5241A4923AA1C5503941EA263148314D524130DD2456CF503941D044D89C2E4D52416C09F9D0E1503941B6F3FDD02B4D524190C2F5A8F950394150AF9415294D5241ACCFD5A6F950394168226C14294D5241DC460388FA503941849ECDEE284D5241DCD781E3FA5039414ED191CC284D5241F41FD2EFFA503941DE718ACE284D5241F41FD2EF02513941DE718AAE254D5241DCD781E3025139414ED191AC254D5241684469FF02513941529621A2254D524188B0E109035139412A3A92A3254D52416029CBF00D513941907EFBAE204D524110A5BD5119513941D8A370D91C4D5241E461A14619513941401361D71C4D5241E4A59B641951394130992ACC1C4D52414060E57019513941764F1ECE1C4D5241DCD7819323513941F241CFD2184D5241840D4FAF2E513941B4C87616174D5241806ABCD43D513941CA32C4DD154D5241CC32C4D13D513941D85F76DB154D524140A4DF0E3E51394168226CD8154D524180FB3A303E513941F6B9DAD2154D5241C01726333E51394142F163D4154D5241C01726335351394142F16354134D524180FB3A3053513941F6B9DA52134D5241DC46030854513941849ECD2E134D5241F4FDD4385451394196438B1C134D52411C7C614254513941FC3A701E134D52411C7C61C261513941FC3A70DE0E4D5241CC3B4E71545139410C71AC0F134D524124B9FCF76A51394152B81E590E4D5241CCA145169151394116FBCB52094D524168226CC8E75139418A416041044D5241BC0512C4E7513941A223B93C044D5241345530CAE751394168226C3C044D5241081B9ECEE751394100DE0241044D5241C09F1A2F415239416CE7FBE1FE4C524100DE025976523941FEB27B8A014D5241B4847C30AB52394162A1D69C054D524194B20C91BB5239414872F907084D5241B88D0600C252394136AB3E97094D52418C1F63BED5523941B29DEFEB0F4D5241549FAB1DE05239410E4FAF7C134D52416891ED2CE0523941B0E1E979134D5241A401BC85E0523941E6D0229B134D5241504013F1E052394172F90FAD134D5241042B87E6E0523941FEF675B0134D5241A49BC440F25239410A46250D174D5241F4B0504BF25239418048BF09174D52417C832F2CF3523941840D4F2F174D5241809543CBF3523941ECC03937174D5241645DDCC6F35239413E0AD73B174D52411C5A641B0F533941CC5D4BDC184D52418004C51F0F5339417A14AED7184D5241BC7493081053394112F241E3184D524100B37B82105339417C6132DD184D5241B8FC8784105339418A4160E1184D52416C2BF6A720533941D6E76A63184D5241A4B437C81F533941ECE2365E184D5241C84B37C91F533941E04F8D5B184D5241444772E91E53394168226C50184D5241A8A44EF01D533941849ECD26184D52411895D4491D533941DCB584E8174D5241F4285C0F1D533941703D0A9F174D52411895D4491D53394104C58F55174D5241A8A44EF01D5339415EDC4617174D5241444772E91E5339417A58A8ED164D524140A4DFFE1F53394188F4DBDF164D5241F4285C0F20533941703D0ADF164D52412406815520533941022B87E2164D5241489D805620533941F697DDDF164D5241489D80D635533941F697DD5F174D5241240681D535533941022B8762174D52411826533536533941A8C64B67174D52414C59863836533941A6BDC163174D5241B8F3FDE454533941703D0A1F194D5241F4285C8F6F533941703D0A1F194D52416C567D1E705339410C242826194D5241CC3B4E2170533941DE718A22194D5241CC3B4E218F533941DE718AA21A4D52416C567D1E8F5339410C2428A61A4D5241A80A46B58F5339417A58A8AD1A4D5241E4C7980B905339412AA913BC1A4D5241AC605412905339417C6132B91A4D5241CCEEC9B3B3533941684469EB1F4D5241B88D0610C5533941C4D32B01214D5241B8AF0357D453394196900F5A214D5241CCA145A6D953394130DD24BA204D52414C6210A8D953394150FC18BB204D5241D0D556BCD953394134A2B4B7204D5241F0164880DA53394122FDF6AD204D52410044FA3DDB5339418AFD65B7204D5241FC3A703EDB5339419AE61DB7204D5241587DAE46DF53394186A7571E214D5241BC96908FE3533941CAC34215204D524114AE4791E3533941EA73B515204D524130FF217DE453394136CD3BEE1F4D5241986E122303543941FE43FAB91C4D52418841602503543941569FABB91C4D5241F4B0502B035439418A4160B91C4D52417C1D384703543941C6DCB5B41C4D5241A8C64B870354394170F085B11C4D5241C8E53F8403543941E6D022AF1C4D524174E09CC114543941BC0512501B4D5241F4B9DA4A1D54394144FAED4B194D52419CC420901D5439411AC05B40194D524110C7BA881D54394128ED0D3E194D524104C58FB131543941865AD330154D5241388941604154394144696F90114D5241287E8C294F5439414E6210A00D4D5241ACADD82F4F543941D8A370A10D4D52416C9A774C4F543941C898BB960D4D5241B09465884F543941A223B98C0D4D52414C3789814F543941304CA68A0D4D524104098AEF5C5439416C567DC20A4D524110C7BAE86B5439410EE02DA8034D524130772D016F54394194658803FF4C5241F4285C0F6F5439412E211F04FF4C524130772D316F543941E4839ED9FE4C5241A8F1D2AD6F543941907EFBAAFE4C5241A80A46A56F54394134EF38A9FE4C5241043411C67854394102BC05E2FB4C5241081B9ECE785439415E4BC8E3FB4C5241D83D79F8785439419CC420D4FB4C524140E8D9CC79543941E61DA7B0FB4C52415427A0C9795439410022FDAEFB4C52412831084C855439411C5A644BFA4C524114F2414F8554394104560E4DFA4C52414CEA047485543941D478E946FA4C5241FCCBEE9986543941CC5D4B38FA4C52414C158CAA8654394152B81E39FA4C524178BE9FAA86543941D0D55638FA4C5241341136EC9854394112A5BD51FA4C5241086822EC9854394194878552FA4C5241FC65F78499543941764F1E5AFA4C5241A4B43788995439419A779C56FA4C524110583954B3543941BE0E9CD3FB4C52416C09F950B35439410A8A1FD7FB4C524120166ACDB35439413CDF4FDDFB4C5241744694C6B45439412063EE06FC4C52412063EE5AB5543941FC3A703EFC4C5241E4361A60B5543941F4DBD73DFC4C524180FB3AB0BF543941FC1873CB014D524194A98241C7543941325530C6054D52411CA7E8F8C9543941643BDF33074D5241F0F44A69D4543941DCB584B0044D52418CFD6567D4543941B88D06B0044D5241789CA273D4543941FE43FAAD044D5241C039231AD5543941585BB16F044D5241982A1845D5543941C442AD39044D524170128350D554394190A0F839044D524170CE8872DA5439418E976ED2F74C5241287E8C49EC543941CAE53FD0F04C524110363C3DEC543941842F4CCEF04C52412085EB71EC543941E2E995BAF04C5241D066D577EC543941CC7F48BBF04C5241A8E8488EFF54394112363CA5E64C5241B0946588FF54394128A089A4E64C5241244A7B93FF543941D24D62A0E64C5241BCB88D96FF543941A223B9A0E64C5241E4A59BD40755394140A4DFF6E14C52414C3789D10755394170CE88F6E14C52410C71ACDB07553941A4DFBEF2E14C5241784F1E1608553941A60A46A9E14C5241784F1E16085539419AE61DFBD74C52413CBD52A624553941DC680017B74C5241DC460398245539415A863816B74C524118D9CEB7245539415CFE43EEB64C5241E4839EAD24553941464772E1B64C5241043411B62455394160984CE1B64C524198FF90CE205539417CF2B074A84C5241784F1EC62055394162A1D674A84C52414CEA04A4205539416CE7FB49A84C5241D0915CAE205539410EBE3049A84C5241AC6054921455394120F46C729E4C524198218E9507553941441CEB828F4C524138AB3E8707553941C6FEB2838F4C5241C0EC9E6C0755394136CD3B628F4C5241D46F5F57075539413845475A8F4C5241C8C3425D0755394150AF94598F4C5241840D4F5FF0543941DC460334834C5241D42B6559F05439413480B734834C52412C651942F0543941925CFE2B834C5241EC9E3C4CF0543941081B9E2A834C5241B09465F8CE543941E4141DCD734C524154E3A5EBC55439412CD49A4E6E4C5241A05E29EBC55439415A86384E6E4C52414C378971C5543941C6DCB5206E4C52414C158C7AC55439411CEBE21E6E4C52414C3789F1B6543941EEEBC0A1694C524158863846AE543941E8FBA931654C5241085F98DCAD543941C03923BA5F4C5241F4DBD711B2543941B4C876265C4C52412CD49A06B25439412E6EA3255C4C524194B20C31B25439415EBA49F05B4C5241287E8C09B254394176BE9FBE5B4C5241DC8AFD15B254394138D6C5BD5B4C5241F4FDD4C8B0543941F6065F8C5A4C524188635DBCB0543941C64B378D5A4C52418CB96BA9B05439411E166A755A4C524144AD693EB05439411C9E5E4D5A4C5241C84B3749B05439413E9B554B5A4C52417858A8759A543941CA32C40D534C52414060E5709E543941840D4F174B4C5241D000DEA298543941B6A6799B4A4C5241941804A68E543941666666C6494C52412C90A0F89E543941081B9E224B4C524130DD2446AE543941D24D62A44E4C524184E2C748AE5439419ECDAAA34E4C5241A8C64BB7AE543941E4F21FB64E4C5241A03C2CB4AE5439410AF9A0B74E4C524150FC1843C55439415C2041A5514C524158863846C5543941361AC0A3514C524174B5156BC5543941B0E1E9A9514C52416007CE89C55439418E7571AB514C5241C07D1D88C5543941C264AAAC514C524140575BB1DE5439412041F1D7534C5241E0E00BB3DE543941EC51B8D6534C5241F0384527DF54394192CB7FDC534C5241BCB88D26DF543941AA6054DE534C5241ACADD8EFF05439416688634D544C5241E02D90F0F05439414EF38E4B544C52411CEBE206F1543941C264AA4C544C52419CEFA706F15439413C4ED14D544C5241905374F4F85439414A598668544C5241D409685201553941DCB58434554C524140CF66250D553941F44A597A584C524110C7BA280D5539419A999979584C5241605452370D553941BC270F7F584C524198DD93770D553941F263CC89584C5241BC490C720D5539410C71AC8B584C5241D812F2311C55394138D6C5415B4C5241B4A679371C5539411EC9E53F5B4C5241F46C569D1C5539411EA7E8505B4C5241CCCCCCDC1C5539414E6210545B4C52414C158CDA1C553941C03923565B4C52411C5A642B2B5539414AEA04505C4C52419C11A52D2B5539416A6FF04D5C4C5241F4B0508B2B553941BE3099525C4C52413C2CD48A2B553941E6AE25545C4C5241941804763C5539418E7571A75C4C5241489D80763C553941F853E3A55C4C52418451499D3C553941F21FD2A75C4C5241A4923A613D55394174D7129E5C4C5241605452073E553941AA6054825C4C5241842F4C763E553941CCCCCC585C4C52418451499D3E553941F21FD2275C4C5241842F4C763E553941AACFD5F65B4C5241605452073E553941CE3B4ECD5B4C5241A4923A613D55394104C58FB15B4C5241BC0512C43C5539418048BFA95B4C5241708A8EC43C55394158CA32A85B4C524188B0E1092C5539418638D6555B4C52413C0AD7431E553941FA5C6D655A4C5241DCF97EFA0F55394152B81EC5574C5241A4BDC1F70355394174D71272544C5241D8C56DF403553941CE88D272544C52418838D6E5035539413E575B6D544C524110E9B73F0355394176E09C51544C524108CE1931035539416619E250544C524174D712320355394138894150544C5241F853E315FA54394130DD2472534C524144D8F014FA5439415C6DC572534C5241148C4A7AF954394174B5156B534C52419487857AF9543941FCCBEE69534C52414082E247F1543941CE19514E534C5241BCC117C6DF543941923A01E1524C524170F085F9C6543941C8BAB8BD504C524130992AC8B05439417EFB3ADC4D4C5241984C155CA1543941D85F76534A4C52418CB96B59A15439417C832F544A4C52414CA60AC6A0543941BC96903B4A4C52419C8026A2A0543941A679C7394A4C52414CEA04A4A0543941D24D62384A4C5241AEAFC51E9E543941E8329D024A4C52413C7958589F54394152B81EB9454C524104098A4F9F543941FE65F7B8454C5241148C4A5A9F5439418E7571AB454C5241F0D24D429F54394114AE478D454C5241D44D62509F543941C6DCB58C454C5241A01A2F8D9A54394176711B353E4C5241C09F1A7F9A543941C442AD353E4C5241043411769A543941F44A592A3E4C5241105839849A543941287E8C293E4C5241686FF0F594543941D200DE02384C5241FC87F43B8C543941029A084B2E4C52411895D47987543941B6847CA4284C5241D4E76A6B87543941EE7C3FA5284C5241A879C759875439412ACB108F284C5241306EA361875439416666668E284C5241000000B07F54394184C0CAE1224C5241D4DEE0AB825439413E0AD77F1E4C5241D022DB298954394174B515DF1A4C5241D0D5560CA0543941B003E730124C5241B88D0600A054394140A4DF2E124C52410CD7A350A05439413480B710124C5241CC32C471A0543941986E12E7114C5241701B0D80A05439417A14AEE7114C5241306EA3E1A2543941567DAE6E0E4C5241401361D3A254394174D7126E0E4C5241E895B2ECA2543941A4703D4E0E4C524188A757EAA2543941A8C64B4B0E4C5241085F98ECA25439413A234A4B0E4C52410022FD86A25439415EBA49D8074C524138F8C284A2543941CC5D4BD8074C52412CD49A76A2543941B84082C6074C524148257582A2543941C4B12EC6074C5241AC8BDB289C543941E8482E63F94B5241943A011D9C543941DCD78163F94B52418451490D9C5439418204C54FF94B524170AC8B1B9C5439410022FD4EF94B52418C976EC297543941501E165EF44B5241AC8BDB3894543941BAB88DF6EE4B5241F853E34592543941029A086FE84B52415405A3129C543941645DDC8ED84B5241D49AE68DA554394190C2F5B8D34B52417C613245AC54394126530523D24B524184C95461B35439414C158C8ED04B524160BA495CB35439412EFF218DD04B52419C802682B3543941849ECD86D04B5241ECC03913B4543941BAFC8750D04B524154302A19B454394112363C51D04B5241283A92ABB75439415405A36ECE4B5241083D9BA5B7543941FCCBEE6DCE4B5241049A08BBB7543941B0E1E965CE4B5241C8293AD2B754394138F8C248CE4B524190E4F2DFB75439412CF69749CE4B5241D8CEF7D3BD543941A857CA22C84B5241588638C6BD543941B459F521C84B52413C7958E8BD543941986E12F7C74B5241FCD478E9BD543941986E12F7C74B524114FBCB4EBE5439411EA7E8B4BA4B5241482EFF11C154394166F7E431B44B524120F46C06C1543941BE529631B44B5241842F4C16C15439412E6EA31DB44B52414CF38EF3C0543941482EFFF1B34B5241B0726801C1543941C4D32BF1B34B5241ECEBC009BF543941F48E53E0B14B524180FB3A60B2543941D022DBF5A04B524100917E6BAE543941501E16C6964B524128A08960AE54394164EE5AC6964B52419C33A244AE5439413A234AA3964B52411CC9E54FAE543941B4C876A2964B5241B025E463A4543941460378338E4B5241E81DA758A4543941CC5D4B348E4B52412C90A048A454394130992A208E4B5241CCEEC9E3A3543941FC3A70FA8D4B5241E8482EEFA35439411AC05BF88D4B524138F8C2649C543941FC87F4638B4B5241D42B65599C543941DE0209668B4B5241E0E00B239C5439417CD0B3518B4B5241A401BC259C54394172F90F518B4B52412C87160986543941BEC1177E854B524188855A836F543941903177157E4B52415839B4786F54394192ED7C177E4B524130992A486F543941182653057E4B524140355E4A6F5439415E29CB047E4B5241E00B932966543941C68F31A37B4B5241D46F5F27665439417E8CB9A37B4B52410C24281E66543941827346A07B4B5241B8F3FD24655439419EEFA7767B4B5241C09F1AFF6354394196D409687B4B5241DC1B7CB15754394196D409687B4B5241D49AE69D57543941708104697B4B5241F063CC9D57543941E2361A687B4B5241F8A0672348543941240681817B4B5241DCD781234854394142AD69827B4B5241EC04341147543941E0BE0E907B4B5241A813D0F4465439415E29CB947B4B5241F0D24DF2465439416ABC74937B4B5241ECEBC039425439418E5374207C4B5241A01A2F3D3B54394134A2B45B7B4B524104A392FA3A5439413E9B551F7A4B5241480378CB3D54394188635DA0784B5241A045B6834254394174469476764B52418CB96B794254394132772D75764B5241703D0AA742543941C07D1D64764B52412C8716D9425439410EBE3025764B5241A8A44EE042543941F0F44A25764B5241B0E1E9454354394106F0165C744B524134C4B13E43543941925CFE5B744B5241E458174743543941D8A37051744B524198BB96204354394104560E21744B524120166A2D43543941C66D3420744B52419CE61D273E543941C07D1D646F4B5241701B0D10405439419EEFA7F2694B5241E895B23C445439412A1895A0664B5241B8F3FDC452543941DE938725604B5241C03923BA525439416EA30124604B5241C0EC9EEC52543941E4141D11604B5241E458172753543941E63FA4C75F4B52410868221C535439411C0DE0B95F4B5241E09C1125535439415817B7B95F4B5241182024C8525439411E143C7A5E4B52418838D6F56B5439414CC807655E4B5241CCAACFF56B543941C6DCB5645E4B52417C1D38776C543941CAA1455E5E4B5241FCD478796C543941F01648605E4B5241E81DA718835439418AB0E1C95C4B52416866661683543941643BDFC75C4B5241C8293A52835439414260E5C45C4B5241F016488083543941EA0434BD5C4B5241BC051284835439412063EEBE5C4B524140E8D98C98543941AA6054DE594B52412C87168998543941E4A59BDC594B5241C05B20019954394104E78CC8594B5241482EFF1199543941A4703DC2594B52415C8FC21599543941061214C3594B524190C2F5C8A5543941A0ABAD30564B52417C6132C5A55439413E0AD72F564B5241247502DAA5543941E0BE0E28564B52412497FFE0A5543941D42B6529564B52419C779C32B054394184C0CAC9524B5241E4C7982BB05439418E5374C8524B52418C4AEA74B0543941DE2406AD524B524130E6AE75B05439414E6210AC524B5241ACD85F76B05439410A6822AC524B5241F8C2646AB6543941623255004F4B5241C442AD69B6543941A62C43004F4B5241E0BE0E6CB6543941825149FD4E4B52415C6DC56EB6543941BADA8AFD4E4B5241FCA9F1E2BB5439414E840D634B4B52416CBC7453C4543941986E129B484B524138234A4BCF54394186EB5128464B524194D40948CF54394168446927464B5241905CFE53CF543941B0726825464B52418838D655CF543941D49AE625464B524120D26F9FDD543941842F4CC6424B52412CF6979DDD543941CEAACFC5424B5241FCCBEEA9DD543941361AC0C3424B524190C2F5F8DD543941C4B12EA6424B5241B88D0600DE54394130BB27A7424B5241083D9B55E654394146B6F3E13E4B524198FF904EE6543941DAACFAE03E4B524124E4836EE6543941DE2406D53E4B52415CD3BC73E6543941B4C876CE3E4B5241DC460378E65439418816D9CE3E4B5241083D9BD5EA5439418E7571BB3B4B524184C954D1EA5439412ACB10BB3B4B5241549FABEDEA543941FC1873973B4B524164EE5AF2EA5439414A7B83973B4B5241D0915CEEEC5439413CDF4F5D324B5241C442ADE9EC543941EE7C3F5D324B5241C09F1AEFEC543941FC3A7056324B5241C07D1DC8EC543941228E7525324B52419CA22359EC54394144FAEDFB314B5241285305B3EB5439417C832FE0314B5241C09F1AEFEA543941FC3A70D6314B5241A05E292BEA5439417C832FE0314B5241280F0B85E954394144FAEDFB314B524104341116E9543941228E7525324B5241006F81F4E8543941789CA24F324B5241F41FD2EFE85439412A3A924F324B524118D9CEF7E6543941CC7F48773B4B5241DC2406C1E2543941CEF7536F3E4B5241F44A59A6DA5439411C0DE019424B5241FC87F49BCC543941BAB88D6A454B524148E17A84C15439411AC05BE4474B5241A4BDC187C1543941A60A46E5474B5241D85F766FC154394186C954E9474B52415839B448C154394162C3D3F7474B5241BC529641C1543941FEB27BF6474B5241ACD85F86B8543941061214D74A4B5241004D848DB8543941D6C56DD84A4B5241A80A4645B85439416ABC74F34A4B52417A4EAB43B854394159FD76F54A4B5241A150AA44B8543941697C36F44A4B52414B0D4445B8543941C44375F34A4B5241DD478747B85439419C8B9CF24A4B524129CA4AFACB543941E4D53DEE3F4B52415CFD7DC5CC5439414A3CA4903B4B5241F596172FCB5439417E6FD763384B5241C263E44FD4543941B1A20AC42E4B5241F596170FDB543941E4D53DA3254B52415CFD7DD1C654394117097174234B524129CA4A0EC2543941170971E52A4B524129CA4A2AB45439417E6FD75B3C4B52418F30B1D8A95439417E6FD7D43F4B52415CFD7D299B5439417E6FD74B444B52415CFD7D418F543941E4D53DDE474B5241C263E4EB865439417E6FD73B4C4B524129CA4AA2785439414A3CA4E94E4B52418F30B1506E54394117097197514B5241F5961727505439417E6FD7AE524B5241F5961763325439414A3CA4E3514B52418F30B1FC18543941E4D53D4D504B52415CFD7D59045439411709719D4E4B5241C263E41FEE533941B1A20A0D4A4B52418F30B1B0BF53394117097134434B524129CA4A46A8533941170971BF3D4B5241F596179F955339414A3CA4903B4B5241F59617C7815339417E6FD761394B5241F596174344533941E4D53D00374B52415CFD7D092E533941170971CF354B5241C263E4DB11533941B1A20ABA334B5241C263E40BFA523941B1A20ABA334B524129CA4AC6E9523941B1A20A35364B52415CFD7DB5D8523941B1A20AA83C4B52418F30B19CCB5239414A3CA482424B52415CFD7D05B15239411709711E4E4B5241C263E4E38E523941B1A20AF1574B5241C263E4276D523941E4D53DB45C4B52415CFD7D0D2E5239414A3CA43E644B52415CFD7D91EC5139417E6FD701694B5241F596173FC9513941E4D53D966B4B5241F5961787A5513941170971DA6F4B52418F30B13482513941170971CC764B52410AD7A330645139418FC2F5387D4B52410AD7A3B0525139418FC2F5B8814B52410AD7A3B0425139418FC2F5B8844B52410AD7A330325139418FC2F5B8884B52410AD7A3B0275139418FC2F5988A4B52410AD7A330195139418FC2F5188B4B52410AD7A3300E5139418FC2F598894B52410AD7A3B0075139418FC2F578864B52410AD7A3B0035139418FC2F538824B52410AD7A3B0FC5039418FC2F5187E4B52410AD7A330F55039418FC2F5B87C4B52410AD7A330E25039418FC2F5187A4B52410AD7A3B0CB5039418FC2F5F8764B52410AD7A3B0B85039418FC2F558764B52410AD7A3309C5039418FC2F538764B52410AD7A3307F5039418FC2F578764B52410AD7A3306C5039418FC2F538764B52410AD7A3303E5039418FC2F578784B52410AD7A3B02A5039418FC2F5D87A4B52410AD7A3B0145039418FC2F5587E4B52410AD7A3B00B5039418FC2F538814B52410AD7A330FC4F39418FC2F598864B52410AD7A330F04F39418FC2F5388D4B52410AD7A330E24F39418FC2F5B8934B52410AD7A330D54F39418FC2F598974B52410AD7A3B0C24F39418FC2F5589A4B52410AD7A330AA4F39418FC2F5989D4B52410AD7A3B0894F39418FC2F5789F4B52410AD7A3305D4F39418FC2F598A14B52410AD7A3B02D4F39418FC2F5D8A44B52410AD7A330124F39418FC2F518A84B52410AD7A330FC4E39418FC2F578AB4B52410AD7A3B0E24E39418FC2F598AD4B52410AD7A330D84E39418FC2F558B14B52410AD7A3B0C44E39418FC2F538B54B52410AD7A330AB4E39418FC2F578BA4B52410AD7A3B08B4E39418FC2F5B8BE4B52410AD7A3B06A4E39418FC2F518C24B52410AD7A3305B4E39418FC2F578C34B52410AD7A3303F4E39418FC2F518C74B52410AD7A3302F4E39418FC2F558C84B52410AD7A3B0234E39418FC2F578C64B52410AD7A3301B4E39418FC2F5D8C14B52410AD7A330184E39418FC2F518BE4B52410AD7A3B0144E39418FC2F5F8B84B52410AD7A330F74D39418FC2F558B94B52410AD7A3B0FC4D39418FC2F5D8BF4B52410AD7A330F94D39418FC2F598C44B52410AD7A3B0E74D39418FC2F5B8C74B52410AD7A3B0D64D39418FC2F5D8CA4B52410AD7A330BC4D39418FC2F558CC4B52410AD7A3B0A74D39418FC2F518CE4B52410AD7A3308B4D39418FC2F538D04B52410AD7A3B0754D39418FC2F5F8D14B52410AD7A330614D39418FC2F578D54B52410AD7A330484D39418FC2F5F8D84B52410AD7A330314D39418FC2F518DC4B52412F000000C0EC9ECCF7523941226C78366A4C524140A4DFCEF75239415EBA49346A4C52415C4BC857FA523941F8E4614D684C5241905CFE13FC523941EA95B2F0644C524178E92661FD523941986E1203624C5241D4BCE304035339417C613209614C5241DC2406811353394132E6AEF95E4C5241B4A67997265339417E6ABC685F4C52412C1895442F53394116D9CEFF5D4C52418C28EDAD39533941827346C85D4C5241D088D29E405339417AC729EA5C4C5241BC270F5B42533941645DDC6E5E4C5241884160F544533941A223B940614C524198900F2A4A5339416EA3016C634C5241B459F5E958533941029A088B674C524164EE5AC2635339411C9E5E256A4C524134333313725339413E575BFD6B4C52413C9B558F82533941460378DB6C4C524138B4C8D68D5339412041F1A36C4C52419CC42040985339413C4ED19D6D4C5241D812F2C19E5339413433337F724C5241587DAE969C53394198BB9688754C5241F46C562D92533941F697DDB3774C524150FC18D3805339419C559FA7794C5241085F981C75533941E8D9AC167A4C52410C4625D569533941AEB662C3794C5241B459F5E958533941D881735A784C5241DCD781D3455339418E06F04A764C52415817B7F13753394160984C35754C5241E8B7AF5328533941D2DEE0DB754C524110363C3D1553394168446913764C5241ACFA5CAD00533941787AA574754C52414C158CFA0153394134113624704C5241D0B359F5015339410A682224704C524100917EFB0153394142F1631C704C5241C854C1F801533941B27BF218704C5241F4B050FB01533941D634EF18704C5241A42C438C01533941E8FBA9156C4C52417CD0B3890153394132E6AE156C4C52416C787A6501533941780B24E86B4C5241900F7AF6005339419A779CBE6B4C5241DC4603A800533941240681B16B4C5241746891AD00533941244A7BAF6B4C524190ED7C6FF8523941BAB88D466A4C5241B459F569F8523941BC7493486A4C5241F0D24D12F8523941FCCBEE396A4C5241C0EC9ECCF7523941226C78366A4C524128000000E02D907090533941D066D5CB174D524190C2F5489B5339417A36AB7E164D52411CEBE2469B5339412CF6977D164D5241FC5C6DD59B533941A679C765164D5241D8C56D449C5339413889413C164D524120B072489C533941A2D63437164D524160C3D34B9C533941B81E8537164D524134EF38559F5339416EA30128144D52413C4ED1519F533941585BB127144D5241F085C9749F533941A6BDC1FB134D52411C7C61729F533941A223B9F8134D52419C33A2749F533941C6DCB5F8134D52414894F6069F53394178E926790F4D5241E43FA44F9F5339417EFB3A74124D5241C0CAA1C5AB5339417A58A845114D52415CFE435AB8533941AED85F1A0F4D5241CC32C441BC53394192CB7F200E4D52413480B770CB533941DA1B7C29084D5241884160A5D0533941B6627F51064D5241BC96905FE9533941F0F44AE5004D524198FF902EF15339414E401329FF4C5241F4285CDF065439415AF5B966FE4C524100917E5B175439414694F64AFE4C5241D0D556AC25543941AA825135FD4C524128C286973654394122DBF972FC4C524150AF94D53E543941B22E6E13FE4C5241E4D022FB4A543941C8293A4E024D5241B415FB4B5954394106F01620054D524110E9B7EF5E543941506B9A2F074D52413CBD52E65B5439414E6210D0084D524140A4DF9E50543941721B0DA80A4D52413C4ED1914054394192CB7F200E4D524164F7E4D131543941D2915CF2104D52418451493D25543941DEE00B4F144D524144D8F00413543941F4DBD789184D52416C567DEEFF533941E61DA7EC1A4D5241208E7581E8533941621058711C4D524160545267C85339412041F13F1B4D52417CD0B32994533941228E7559174D5241E02D907090533941D066D5CB174D52412100000088416045B9523941244A7B036B4C5241EC51B8AEC3523941F4DBD7ED694C52418048BF7DCB523941FC87F4CB6A4C5241081B9E6ED252394110E9B7E76A4C524120FDF695E05239411804563E684C524170AC8B9BE0523941AE69DE3D684C52410C93A9A2E05239411873D746684C5241E8FBA911E152394188635D70684C524144AD693EE15239413E0AD777684C5241287E8C39E152394162105879684C5241EC73B555EA52394186C954516A4C524104A3925AEA52394162C3D34F6A4C52412041F1D3EA523941E2361A646A4C52410CB5A619EB523941BC9690676A4C5241D46F5F17EB5239418048BF696A4C5241BEB574E2EF52394103D347B96A4C524180B740D2E652394150AF94B96D4C52418CDB6850E052394122DBF9C2704C5241D85F76BFE052394180B740EE724C524134333363E652394170F085F1764C5241DC8AFD75EC52394122FDF6697A4C5241B0B6627FEF523941C8BAB85D7C4C5241DC8AFD75EC5239412497FF887E4C5241CC3B4E41E75239415CB1BF7C804C52410C462525DE5239415CB1BF7C804C524164EE5A12D85239412C431C677F4C5241BC9690FFD152394112363C6D7E4C52414C621018CE5239415EBA49DC7E4C5241B84082F2C1523941666666BA7F4C524174E09C01BB523941E8D9AC167A4C524130992A58BF523941C8293A9E764C524110E9B7DFBB523941780B2410724C524188416045B9523941244A7B036B4C5241200000003C4ED1D11152394152B81E2D494C5241705F078E13523941E4839E45454C5241CC32C43119523941B615FB2F444C52416C348057295239411AC05BF4434C5241C464AAC02F5239417CF2B0DC434C524130992AA833523941D42B6589434C524174F90F993A523941946588B7404C52416C787AD543523941BA6B097D3E4C524170AC8B3B4D5239416891ED083F4C5241C8BAB83D4D523941508D97063F4C52414C7B83AF4D5239413889410C3F4C52418816D91E4E523941EC51B8063F4C52412497FF204E523941E09C11093F4C52416419E22861523941388941F43D4C524194B20CC15C523941D0D556343E4C5241C0172613625239416C9A7720424C5241C017261362523941EC2FBB23464C524150FC187369523941FA7E6A80494C52415839B4386E523941705F07464E4C5241905CFE63705239414C37892D524C52410CB5A6C96D523941C420B052554C5241686FF02568523941D0D55690544C52415C2041F16252394168446927534C5241F80FE98758523941EEEBC0E9534C5241E0718A7E55523941EEEBC0E9534C524188855A93445239418AFD65FF544C524194A982113E5239418AFD65FF544C5241480C025B3252394182514921544C52415C6DC59E3052394198BB969C524C52410C93A922205239415452274C4D4C5241CC32C431195239411E3867584B4C52413C4ED1D11152394152B81E2D494C5241040000008CB96BF9835139418638D6C1044D52418CB96BF9945139418638D681034D524124E4833E93513941D40968A2034D52418CB96BF9835139418638D6C1044D524104000000A8C64B27735139419A081BA62C4C52412497FF109E5139419CA223852E4C5241D0B359D59A51394196B20C612E4C5241A8C64B27735139419A081BA62C4C5241 geos-3.4.2/tests/xmltester/tests/ticket/bug360.xml0000644000175000017500000000436612206417146021657 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/360 Exception on CascadedUnion (JTS works!) http://trac.osgeo.org/geos/ticket/360 01060000000300000001030000000100000009000000CF94E7BC74493A4112BF8381EC1D5241719EA08059493A41D99596CB011E5241D39DCCCD7D493A41059D9A3FF51D5241045779D6A6493A41CA15FFA0E61D52415B9FCDB4AF493A41B0B05E38E31D52419C61B481AB493A4145F236A0E31D5241692E81C6A2493A4145F2361DE51D5241CF94E77E93493A41DF8BD07EE71D5241CF94E7BC74493A4112BF8381EC1D524101030000000200000009000000DF0CC8255B483A4162F13B3BE31D52419C8CC751B8483A4118E57CB8FD1D52417E74A8A5BA483A41B95FD389FF1D524144923055C1483A4131986045FD1D52413551951AB9483A41DAABCF0F001E524129DC7EE826493A41EA92F392181E52411544B4DDD8493A41E127AB26D61D52415922E39AF6493A412F2C7F40CB1D5241DF0CC8255B483A4162F13B3BE31D52410B000000CCA90B5654493A4124A21B12F11D5241A3955A9B46493A41C60FFAD6081E52413C25CEA346493A41CF8B0DD8081E5241D39DCCCD7D493A41059D9A3FF51D5241045779D6A6493A41CA15FFA0E61D52414E9FCDB4AF493A41B1B05E38E31D52419C61B481AB493A4145F236A0E31D5241692E81C6A2493A4145F2361DE51D5241CF94E77E93493A41DF8BD07EE71D5241CF94E7BC74493A4112BF8381EC1D5241CCA90B5654493A4124A21B12F11D5241010300000001000000060000009C8CC751B8483A4118E57CB8FD1D52413551951AB9483A41DAABCF0F001E52417E74A8A5BA483A41C45FD389FF1D52415374A8A5BA483A41C45FD389FF1D52417E74A8A5BA483A41B95FD389FF1D52419C8CC751B8483A4118E57CB8FD1D5241 01030000000400000007000000DF0CC8255B483A4162F13B3BE31D52419C8CC751B8483A4118E57CB8FD1D52413551951AB9483A41DAABCF0F001E524129DC7EE826493A41EA92F392181E52411544B4DDD8493A41E127AB26D61D52415922E39AF6493A412F2C7F40CB1D5241DF0CC8255B483A4162F13B3BE31D524107000000A3955A9B46493A41C60FFAD6081E5241CCA90B5654493A4124A21B12F11D5241CF94E7BC74493A4112BF8381EC1D5241719EA08059493A41D99596CB011E5241D39DCCCD7D493A41059D9A3FF51D52413C25CEA346493A41CF8B0DD8081E5241A3955A9B46493A41C60FFAD6081E5241050000005374A8A5BA483A41C45FD389FF1D52417E74A8A5BA483A41B95FD389FF1D524144923055C1483A4131986045FD1D52416174A8A5BA483A41C45FD389FF1D52415374A8A5BA483A41C45FD389FF1D5241040000009C61B481AB493A4145F236A0E31D52414D9FCDB4AF493A41B1B05E38E31D52414E9FCDB4AF493A41B1B05E38E31D52419C61B481AB493A4145F236A0E31D5241 geos-3.4.2/tests/xmltester/tests/ticket/bug366.xml0000644000175000017500000001501212206417146021653 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/366 Unable to find edge to compute depths at at -200016 249553 com.vividsolutions.jtstest.testrunner.BufferResultMatcher http://trac.osgeo.org/geos/ticket/366 010600000001000000010300000001000000430000000DD099A7C7BD05C10000000010770E41EBB1C54FEDCA05C1CCA26DE993F10D41AB1E6C42C2EF05C1D7671DD628780D41A75458319C6806C183FA179D57DB0D41FD31ACF35E0807C1F904B274BC300E41C5606C75B9B507C169C3D67252650E41643B759A4E6908C17C28D55402770E41253271484F6908C1D1B5CF70FF760E4196E03414516908C14FCABE34ED760E41105F5B3A5B6908C11996CABFCB760E414D3086B56B6908C142DC48EAAC760E41186E91E3816908C1186E91E391760E414A097E7F826908C1C9B79A6391760E414B097E7F826908C1C8B79A6391760E414F097E7F826908C1C5B79A6391760E4142DC48EA9C6908C14D3086B57B760E411996CABFBB6908C1105F5B3A6B760E414FCABE34DD6908C196E0341461760E4100000000006A08C10A25EBA65D760E41B13541CB226A08C196E0341461760E41E7693540446A08C1105F5B3A6B760E41BE23B715636A08C14D3086B57B760E41B1F681807D6A08C1C5B79A6391760E41B5F681807D6A08C1C8B79A6391760E41B6F681807D6A08C1C9B79A6391760E41E8916E1C7E6A08C1186E91E391760E41B3CF794A946A08C142DC48EAAC760E41F0A0A4C5A46A08C11996CABFCB760E416A1FCBEBAE6A08C14FCABE34ED760E415D4D7BFBB06A08C10B18742202770E41FBD26A0BB16A08C1866A376802770E416EE46313481E09C1F914B42452650E4109CC530CA1CB09C1CC05B274BC300E41926AA6CE636B0AC1437E199D57DB0D416DCB55E73DE40AC1AD54C55F29780D41154E3AB012090BC1C9A26DE993F10D41F32F665838160BC1FEFFFFFF0F770E41164E3AB012090BC1325D92168CFC0E414314D50E23E20AC128EF4FF6E67C0F41BFB02081E8A20AC17E3DB5DF31F30F414A06D995F3580AC16012EBD9A72610418E9F8F2620550AC11E07BCFEC72610414C907E56A83E0AC16309CCFE172710411CF8107737140AC1E773A4F2E32510412846506A97D909C11EA6DCE42B201041F36AD47C979A09C1B974C3DCBF141041A0BF52AC4F4609C110EDCEC737FC0F418A5C7FE1F7F408C12566D8E997C50F41685FCE0420A408C12DA67D03E08A0F4196A2521BB05208C1E0705D1328510F41DB5332BBDFFF07C1628480E23F1E0F41AB28C99197AA07C1D6FA3CEBAFF90E41F9BBEA76386C07C115B46616F0ED0E41DA4B8C67E03307C160CAD4FABFF00E41EEE724C7370C07C158AA2316F8FA0E41823F33E497F706C19548C90C00030F414F4A64F70FED06C141DC2704D8070F414240330A08E406C17D3A00FB3F0C0F41D85C1D1198D206C1B4CC22F747150F419EB0BDECFFB106C1E57C120CC0270F41AD41C30A488506C114E940F9C7430F411530CCF5BF5406C19BAF9406E8630F4166203B26D81106C14D0D57E70F8F0F410EFB351CDE0006C1F3284448F9980F41BEEB2AF1DCF105C12DEF4FF6E67C0F41EBB1C54FEDCA05C1365D92168CFC0E410DD099A7C7BD05C10000000010770E41 0103000000010000007E0000001F9B894E40160BC188CF42370F770E411F9B894E40160BC17830BDC810770E4163B25DA61A090BC1BC934FDF8CFC0E41E99D0A581A090BC1C11E13698EFC0E415F6BA5B62AE20AC15EB1D048E97C0F4136CE011D2AE20AC1F197BBBBEA7C0F41716D4D8FEFA20AC19DDE20A535F30F4150CD40B0EEA20AC1F007F2F236F30F41E920F9C4F9580AC1BA788963AA2610414792209CF8580AC1EF05C1F6AA2610412118AC3DF7580AC1E3C5C268AB26104177D036B8F5580AC19C44CEB4AB261041B914FC1BF4580AC1E232B8D7AB261041C2B0B2AC20550AC1012489FCCB2610410354825F20550AC1DEAB56FECB261041833C718FA83E0AC182A966FE1B2710411E5F8CE2A73E0AC1999427FD1B27104121CE1E0337140AC1840200F1E7251041AE0BE4EE35140AC17F40B1DFE72510414F5B23E295D909C1F672E9D12F2010415DAA2DB094D909C1EC6987A72F20104144CEB1C2949A09C1C3386E9FC31410416BDB8BB3939A09C1F4D7D062C314104160330AE34B4609C164B4E9D33EFC0F41DC5493364B4609C129D6046C3EFC0F41F3F1BF6BF3F408C11C4B0E8E9EC50F41E64AF32DF3F408C14068E2629EC50F41F713DF5A1BA408C1B7F18283E68A0F4199F5BDB1AB5208C1591EFFC02E510F4126016A0ADCFF07C18356BB01471E0F41B527923995AA07C16F43319EB7F90E41D9EA72EA376C07C171FCF51FF8ED0E41E905449DE13307C18929ECEDC7F00E411D75743C3A0C07C115EDE0B6FFFA0E41AE765E049BF706C10789FE6A07030F41A588676413ED06C1D120053FDF070F411D0247A20BE406C10FC9DA20470C0F41586C38E19BD206C1F4A8F8FF4E150F4189B1F10504B206C1ECF07CEBC6270F415EC603604C8506C12D5107B3CE430F41EE073C60C45406C1FE2955B2EE630F413FA1E84BC45406C139549DBFEE630F41B791577CDC1106C128BC5FA0168F0F41EACBD22EDC1106C1F4A8F8CF168F0F4142AACD24E20006C1A1CBE53000990F415F7CD1AEE00006C16A447ADB00990F4115504D1EDF0006C12E4CF03701990F41138A6383DD0006C1FD778E4201990F418FC6A1EEDB0006C15734E7FA00990F418D165670DA0006C11E7DDD6300990F41F211E717D90006C159E08683FF980F41969D34F3D70006C19AE4EC62FE980F419F42090ED70006C114D1AF0DFD980F41CA31FEE2D5F105C1F197BBBBEA7C0F41A1945A49D5F105C15EB1D048E97C0F411762F5A7E5CA05C1C11E13698EFC0E419D4DA259E5CA05C1BC934FDF8CFC0E41E16476B1BFBD05C17830BDC810770E41E16476B1BFBD05C188CF42370F770E419D4DA259E5CA05C1446CB02093F10D411762F5A7E5CA05C13FE1EC9691F10D4169C29B9ABAEF05C163A29C8326780D4119B03F34BBEF05C12C28B11025780D41DEE34C13BCEF05C17993DFC223780D41FFE7302FBDEF05C12408FCA622780D41A6DA027DBEEF05C10268EFC721780D41F997EEEFBFEF05C1621B4C2E21780D41BDF9B279C1EF05C18B9AF9DF20780D4194162E0BC3EF05C14B71FADF20780D41641AF294C4EF05C10CAD4E2E21780D413B29DD07C6EF05C1548CF3C721780D414A2AAE55C7EF05C1D99601A722780D415485ABA8A06806C152C202EE50DB0D41BCEC3207620807C15A2A6F07B5300E4193F5E506BBB507C1149678904A650E41EE822FD1476908C190F1D19FF9760E41D77D111E496908C10296016CEC760E41E584646C496908C1FE0A3EE2EA760E41930F8B92536908C14ECA496DC9760E41509F2E2C546908C127F15EFAC7760E41BD7559A7646908C11B2FDD24A9760E41DF156686656908C134130CD7A7760E41845671B47B6908C1BE9E54D08C760E41BE9E54D07C6908C1845671B48B760E410A3C416C7D6908C12C9E7A348B760E4134130CD7976908C1DF15668675760E411B2FDD24996908C1BD7559A774760E4127F15EFAB76908C1509F2E2C64760E414ECA496DB96908C1930F8B9263760E41FE0A3EE2DA6908C1E584646C59760E410296016CDC6908C1D77D111E59760E4188CF4237FF6908C1F4C0C7B055760E417830BDC8006A08C1F4C0C7B055760E41FE69FE93236A08C1D77D111E59760E4102F5C11D256A08C1E584646C59760E41B235B692466A08C1930F8B9263760E41D90EA105486A08C1509F2E2C64760E41E5D022DB666A08C1BD7559A774760E41CCECF328686A08C1DF15668675760E41F6C3BE93826A08C12C9E7A348B760E414261AB2F836A08C1845671B48B760E417CA98E4B846A08C1BE9E54D08C760E4121EA99799A6A08C134130CD7A7760E41438AA6589B6A08C11B2FDD24A9760E41B060D1D3AB6A08C127F15EFAC7760E416DF0746DAC6A08C14ECA496DC9760E411B7B9B93B66A08C1FE0A3EE2EA760E412982EEE1B66A08C10296016CEC760E4160A5D62FB86A08C169D837AAF9760E41D05FE881461E09C1455156424A650E41F049CCF89DCB09C1BA956F07B5300E41034356575F6B0AC17AA702EE50DB0D41D5FE18D438E40AC10234A53023780D412728EA213AE40AC1E093985122780D414F01D5943BE40AC12304F5B721780D41BF99981E3DE40AC1A9EFA16921780D41AFFA12B03EE40AC1A9EFA16921780D411F93D63940E40AC12304F5B721780D41466CC1AC41E40AC1E093985122780D41999592FA42E40AC10234A53023780D413FEB751644E40AC1A789884C24780D41608B82F544E40AC1FAB2599A25780D411D1B268F45E40AC1218C440D27780D41E99D0A581A090BC13FE1EC9691F10D4163B25DA61A090BC1446CB02093F10D411F9B894E40160BC188CF42370F770E41 geos-3.4.2/tests/xmltester/tests/ticket/bug392.xml0000644000175000017500000021026512206417146021661 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/392 http://trac.osgeo.org/geos/ticket/392 TopologyException: found non-noded intersection between LINESTRING (146.593 -37.2263, 146.593 -37.2263) and LINESTRING (146.593 -37.2263, 146.593 -37.2263) at 146.593 -37.2263 01050000000600000001020000000300000035BEE5A0FA486240785C548B887F42C00619B787F34962403A8D599B6B7A42C035BEE5A0FA486240785C548B887F42C0010200000014010000A5AE6B6A0F516240EE23B726DD9B42C06AB3FB9F0D516240B5F81400E39B42C01A530B800C5162405AE95A20E69B42C06BB933130C516240EFBC9EF9E69B42C0984979520B516240D6468666E89B42C07DCB9C2E0B516240CA3CA87AE89B42C083013A820A516240E80D9CD8E89B42C01820D1040A516240946B651DE99B42C09FCA694F0951624012D5004AE89B42C0E47107A00751624072593B40E69B42C0881E42A6065162404ACC58D9E39B42C09D9ACB0D065162408C930C4AE29B42C03909A52F045162409BF749FFDC9B42C0B159E48D025162401A738D85D79B42C00B7A6F0C01516240F2A32B22D49B42C0EB6F09C0FF5062403BA41820D19B42C02D3185BDFF506240DC9BDF30D19B42C059A725B1FF506240ADE93015D19B42C027744D37FF5062407BE35AA3D49B42C04562821AFE506240158843DBD69B42C0ED7E15E0FB5062404055E0BFD49B42C0B86EEFBFFA506240A654D33FD29B42C0575EF23FF950624011058E5FD39B42C0A74E513FF95062406403E962D39B42C039002C3CF950624022426D65D39B42C08CA262F7F85062409F8B2BD3D49B42C0041E1840F8506240F0355F80D89B42C03C878D0DF8506240857F6CEDD89B42C0E0BDFE7FF75062404F667220DA9B42C04333F4F4F650624018A99C9BDB9B42C0E4FF441BF6506240C48A64D9DD9B42C0B2423635F5506240F3C64961DE9B42C0E2CC0AA0F35062400518963FDF9B42C081BC0D20F250624057C80160E19B42C0266CE45FF050624047BAB07FE89B42C05D8B16A0ED5062400F0E51E0F89B42C0D81A0060EB5062406ED113E0059C42C03B3A0900E9506240F73361A0109C42C0676902A0E55062406E6704C01D9C42C052DCA799E450624071D014F0219C42C085121C4DE45062404DF4F928239C42C09164B1A8E3506240FE64E7C8259C42C0FA6B68B9E25062407389D981299C42C0ABCC94D6DF506240F9F8DFA52F9C42C09274CDE4DB50624090436914379C42C0029EB470D9506240838F77FD389C42C097491E99D85062400CFDB8A2399C42C01426E71FD8506240950ED6FF399C42C0A0038184D75062404DA48F543A9C42C08119F8F6D3506240C977842E3C9C42C0EB54F99ED1506240A68D34023B9C42C0FE55911BCF506240859BE7E3359C42C0D66C8A6CCC506240AD61D0532E9C42C04285D9BACA5062409745178A2A9C42C007E92972C850624074EB353D289C42C0264A8CAFC7506240FED478E9269C42C0C528BE90C45062407D6DA23B2D9C42C0D4EBBBC7BE506240EB556474409C42C08B0CBCA4BB506240F5E681D94E9C42C0D08547D1B95062408EB344C2529C42C025BE24DFB6506240A2C38DA5599C42C074925275B45062400B3AC6BA5D9C42C05A907758B2506240A0DFF76F5E9C42C0058DF4FDAF506240E6F516C5619C42C0081566EBAA506240D29B9B80709C42C02EA4688AA5506240443B5DCC859C42C06FF3C649A150624019575C1C959C42C09AACF6559E506240BAE70A009F9C42C028F5C0229A5062408D9B7521B19C42C0B04C09D2965062406DD5BF35C19C42C0B75D68AE9350624077D66EBBD09C42C098593AD5905062405D5727C2E19C42C0CFA67E398E5062402627C929F09C42C0C194DCBC8C50624097EB23A6FA9C42C0C19A14308B506240DE10F461079D42C09F292AD188506240F5DF394A149D42C0A0B998B08750624028DB1BD71A9D42C099428C7C83506240AC8FE2772E9D42C08E9DA68581506240A56D57433D9D42C02AE4A5F67D5062405930F147519D42C0178B95877B506240DA1F8370609D42C0AD6A49477950624055F08057709D42C0575EF23F79506240266CE45F709D42C042E504127950624060F426D0719D42C0FDD071DA785062407730BD58739D42C011001C7B765062404767AA71809D42C03521527875506240791AD58E879D42C0D9CAF044755062405494A69C8A9D42C0322DFBBF745062408014D09F919D42C0217DEE5F7450624093D629A09A9D42C00CEDF71F7450624083CB1940AE9D42C0924FD9FA7350624020915B38B59D42C06BB015D973506240BED29E37BA9D42C0577FDF1A7350624083C366DBC49D42C0A7FC10C0725062408712D2BFC99D42C016EF117B72506240CD9EBAA8CC9D42C05E73FD717150624056D3F544D79D42C025242DF07050624031D7FDBEDA9D42C0266CE45F70506240B2D7BB3FDE9D42C0BE535CB06F50624045B9347EE19D42C083B174F46E506240D89AADBCE49D42C0FDB0EFD46D5062402F5E3D38E99D42C0B05EFBB86C506240B7F3588EEB9D42C0D53A16806B5062406E3B2300EE9D42C002E264D16A506240A3BE767AEF9D42C0ACC1A0F169506240C6600F37F19D42C05F5B3FFD675062405A76D20CF39D42C0F199EC9F67506240E88CDE5FF39D42C0648918C065506240C52CC59FF29D42C0015CDABA65506240ADEAF6A3F29D42C0AE5D7FB765506240846B49A2F29D42C089B08630635062407DEA58A5F49D42C01E8D9EB661506240AAE683AFF99D42C07171546E62506240647DB905019E42C0A44808A062506240A5F04520039E42C0170912806450624013C25900099E42C0AABF14D466506240691D554D109E42C0EC0AC73D6750624032326DA4119E42C0C7A1D9D068506240B3FEE08D169E42C0E7F05A536A50624055C3D9081F9E42C094933FCE6A506240815DA857259E42C0DBFAE93F6B506240CC9A58E02B9E42C0D53A16806B5062401EDE7360399E42C06DDAD6606B506240C1BC1127419E42C0D81A00606B50624049A01C60419E42C0C66AF3FF6A50624069E21DE0499E42C08E7AE3FF695062402AF40BC0509E42C0B5A91501695062409356D7FC539E42C0A2F4E04966506240279AACF6559E42C0828E56B56450624099E5FC5E549E42C00839EFFF635062400B45BA9F539E42C0EBC6BB236350624041A66BDC519E42C0F2D1E28C61506240E34D7E8B4E9E42C0DE5E2DD25F506240A456F3774A9E42C0BAE70A005F5062403A92CB7F489E42C032970AE05C5062401281EA1F449E42C03C5409055B50624061527C7C429E42C0E6EB8DB55A50624061F65734429E42C0D83274475A5062409723BFD9419E42C04C16F71F595062405620C4DF409E42C0F609A018595062407F9F71E1409E42C085AD7E11595062406D6292DB409E42C0FDE6B45D57506240E436D032419E42C07ADD223056506240F581E49D439E42C0C586133D55506240280D350A499E42C0A2F8E75854506240A8774C384F9E42C013550960545062401950148D5A9E42C01355096054506240E333D93F4F9E42C04E250340555062402E122400499E42C08615134056506240B3C068A0439E42C0D67503605750624032303C40419E42C0F609A018595062407F9F71E1409E42C02207DB3E5A506240F02609D3419E42C0AB460AC05A50624085701640429E42C05DC0CB0C5B5062409C0E0984429E42C0867E5CD15C5062401281EA1F449E42C058BACCFA5E506240E793707C489E42C01F20A9CF5F506240921914724A9E42C054E8178061506240C0D3BF7F4E9E42C041D3122B63506240B81E85EB519E42C067583101645062400540CBA9539E42C005114EB0645062401C68F459549E42C08DA90540665062408CD5E6FF559E42C03B3A090069506240E7543200549E42C0B5A91501695062409356D7FC539E42C0D923D40C69506240C3DA73F4539E42C0A6D3BA0D6A506240FA6F6FC8509E42C00B3A6B016B506240EC6415DB499E42C0F36ACA5F6B506240449B2D6A419E42C0D81A00606B506240731FCA61419E42C0BDCA35606B50624014E97E4E419E42C0E749E3616B506240145F48E2409E42C0FEB9C3816B5062404E621058399E42C0AE84494C6B506240E9E115D22B9E42C00E034CCF6A506240CF561465259E42C0A02AF05F6A506240F0879FFF1E9E42C03E1AF3DF68506240D1459E7F169E42C0184D1D9A68506240782EE7AD159E42C0C5991540675062404A743BA0119E42C0C201E3CF665062401B24E93F109E42C08E812B8F645062405A88C4F3089E42C07DD756A262506240D574E217039E42C080A0377062506240C4B30419019E42C069780EC0615062409EAE939FF99D42C0CA880B4063506240006D50A0F49D42C0E70B10BB65506240ADEAF6A3F29D42C006CEBE97675062400C079D6BF39D42C095FBD3FC675062405A76D20CF39D42C08E7AE3FF695062402B9C4940F19D42C0E7919AD16A5062400EFF9F79EF9D42C08A66AF886B50624050F4650EEE9D42C0BC7FE2B66C5062409FB18A92EB9D42C0711B0DE06D5062406B1ACA3FE99D42C0C17BFDFF6E5062402B9908C0E49D42C01D739EB16F506240337C5578E19D42C08294336F7050624064DE4F32DE9D42C0ABB420EF70506240D7D3B3C5DA9D42C05B7C0A8071506240D955ED3FD79D42C0AAAEE87B72506240FC2257A0CC9D42C0309B00C372506240C2CE5EC7C99D42C04850FC18735062404835ECF7C49D42C0F75C01E0735062408F4E0240BA9D42C077FF0EFB73506240BB55212FB59D42C006E8082A74506240F4103235AE9D42C0D08C8F60745062400A4F43AF9A9D42C014E63DCE74506240F78CE9AE919D42C029BB4F4475506240B9CFE0A58A9D42C0568D14807550624002A2BB7F879D42C0A8CDEE7F765062402920ED7F809D42C02A5E1BE078506240B3EC4960739D42C042E504127950624060F426D0719D42C0AD6A49477950624055F08057709D42C05E3013A081506240E3C9C91F679D42C05F01F15F85506240D746E11F5B9D42C031F20DE0885062402222EB5F489D42C0B9420E008B50624079ED2D40369D42C04473F8FF8C5062404E250340159D42C0B73302E08E506240FCE1E7BF079D42C08EE4F21F9250624013BF1880FC9C42C0756506E0955062400CEDF71FF49C42C088BA0F40AA506240F1C5CD5FD79C42C0D32B0A60AF506240C9213DA0C79C42C05B7C0A80B1506240B63643609B9C42C0EE8B95E2B4506240C89EF3098F9C42C0BB270F0BB550624075E84F768E9C42C0B2AE1B00BB5062402D3E05C0789C42C0EB6F09C0BF5062408C68965F619C42C0D2C1FA3FC7506240F6F53240589C42C068A4EF7FD1506240DC61B8DF469C42C04B451960D5506240DBCE08803B9C42C01D818989D75062408F650B523A9C42C0D3646B22D8506240534D5A023A9C42C00EA8925CD95062408FC7670D399C42C0FAA6FADFDB506240B4BD2720379C42C0F5B704E0DF506240E7BB00A02F9C42C0BBB8E8BFE25062404A0A2C80299C42C0D63329AAE3506240EC2708C3259C42C07EC2D9ADE55062401A69A9BC1D9C42C02914330CE95062405C6F9BA9109C42C0D215116AEB5062408C18D1D1059C42C0EB45FEAAED5062404BCADDE7F89B42C052F98D65F0506240D0419770E89B42C0DAD6602BF2506240F28CC756E19B42C0002BD1A3F3506240E7D0D84DDF9B42C00E547C32F55062401D46F762DE9B42C07CCD1720F65062406B871AE0DD9B42C04333F4F4F650624018A99C9BDB9B42C0289B7285F750624025E7C41EDA9B42C04E098849F85062400E7D1C72D89B42C0CB55E2F0F8506240753A90F5D49B42C08CFE863FF95062406403E962D39B42C026BD14C3FA5062405F8E684CD29B42C0E14625D0FB506240FE9364C2D49B42C01CE3D418FE50624068869EDED69B42C04562821AFE506240158843DBD69B42C08D3FF61FFE50624092054CE0D69B42C0DC9FE63FFF50624028E5FF9FD49B42C02D3185BDFF506240DC9BDF30D19B42C0086C7308015162408D68F118D49B42C099000D80025162400936AE7FD79B42C01281EA1F045162402FB72000DD9B42C08641F4FF055162409298FB3FE29B42C0382EE3A606516240734B06DBE39B42C0B1C8659207516240C5579643E69B42C03D9D2B4A0951624000982144E89B42C08152FEFF0951624053AAE91FE99B42C01820D1040A516240946B651DE99B42C0A1BEC0070A516240E869C020E99B42C0E2EFCD250B51624047BAB07FE89B42C0CAF21A600B516240304AD05FE89B42C029F8B7150C516240723F96F4E69B42C035A3D57F0C5162407E63192CE69B42C09C5C9DAD0D516240B5F81400E39B42C010EF94690F516240AC623B29DD9B42C0DD7305800F516240184740E0DC9B42C0A5AE6B6A0F516240EE23B726DD9B42C001020000004601000073FB9B06FB5262400567953E199D42C06A72E778FB5262406CC8E479159D42C0169F0260FC52624075A334400E9D42C0169F0260FC526240E90E62670A9D42C0525B8F67FC5262404FB2309F079D42C0383C73C5FB5262400633011A009D42C071AB2006FA526240AA76F28EF89C42C0E5A210B7F9526240E08FEC5BF79C42C0F54DF5BFF7526240B5FB5580EF9C42C0CF9AC4C5F65262409FC5F76AEC9C42C01AB7E22CF6526240CFC59569EA9C42C0C8DB0022F3526240840CE4D9E59C42C0E4C40DAEEF52624081334289E09C42C0A026440AEF526240F8C500E4DF9C42C0287BF07FEC5262405F97E13FDD9C42C0121A1C80E852624053A7A89FDC9C42C0CD4AA47EE8526240E8667FA0DC9C42C09CDB847BE5526240B4A1AC29DA9C42C0DCAEE133E3526240993E856DD59C42C06BCB25FAE15262401EB97F76D19C42C03953324AE1526240B2B15C80C79C42C0E5F27A8BE2526240D08547D1B99C42C07F52488DE4526240AA80D657B29C42C0245D33F9E65262408C721F6FA89C42C011178046E9526240B4249B06A09C42C051F70148ED526240186BC9F4959C42C0DD297865F2526240D4D6E3198F9C42C0819B2045F8526240B95917128B9C42C0B9B59613FE52624090566B17899C42C0EE4FF39FFF52624001124DA0889C42C0780778D20253624054F60258899C42C0FDED57A604536240D1FD41C9899C42C069CB14CE095362403605323B8B9C42C01A530B800C536240D6E253008C9C42C0938ECDE90D536240D6C8AEB48C9C42C0DFEB5A31125362405D30B8E68E9C42C0102D681015536240F1A19F04919C42C028CA4A38195362406B216D88969C42C0D19D16721B536240CF3CCAD2989C42C03B037EE81D5362403ABF72CE999C42C0DDFF6C5020536240ED69E278999C42C09E5DBEF5215362404DEE1C6F979C42C0CA856F0624536240E0505326909C42C0B700D99024536240373FB445889C42C023168CA5235362405B40683D7C9C42C05F62878C22536240C5B99745729C42C093A1CFEC1F536240F4763A46689C42C08284CDA51D5362404BBB873A629C42C0D7E7209E1B5362406D0CF093599C42C0E61604A01B5362407916CE7F599C42C05EC6038019536240B45318004F9C42C0F9D51C20185362402A615C60459C42C01DC6A4BF1753624025F213BD429C42C089658E4017536240AAF644323F9C42C0242A54371753624010F0FF3E3E9C42C0C4C5F6FF16536240D71D41E0379C42C08C2E6F0E17536240270FB0FB339C42C02721472917536240B8AD2D3C2F9C42C079D1B249195362404BE88942269C42C0AD93E9861C5362403868AF3E1E9C42C073C57BC41E536240EE2AFFB5179C42C0405E59B31F53624019E42EC2149C42C05AA8EB3F21536240D4D347E00F9C42C0B5F8140023536240E822CF3F0B9C42C01518570123536240412619390B9C42C059E7CE02235362405968E7340B9C42C0473426692353624078CF81E5089C42C01AE9FB5F24536240D4D00660039C42C055B9F53F25536240FC4E3860FC9B42C046CF2D74255362402DCBD765F89B42C0F551FCCE2553624095A828A8F29B42C034C0609225536240D554BBCBEA9B42C06A49EC7F255362400CEAB69FE79B42C06A49EC7F25536240B5824B6CE39B42C031B2648E25536240F60604DFD99B42C0E3B55C472653624031D4BC3ECE9B42C0B76DCE7726536240B5EC5A8CCB9B42C0B3E908E026536240CAB1AB7FC69B42C01FFC1FBB26536240988EEF41BE9B42C04864C4AA26536240B949B148B89B42C00D912E9126536240CE28A787B29B42C0A239FC7F26536240013BEDDFAB9B42C0676902A025536240BE0864C0A39B42C09DFB613A235362407A5AD9999D9B42C08C344CC822536240EB2F606E9C9B42C0A72E2AF320536240F98D65B0989B42C00A48FB1F205362408F256200979B42C07F1711201E53624021E4BCFF8F9B42C0EB9FF18E1D536240549ADE0F899B42C03B061A221D5362409382B8BC839B42C01AF67B621D5362400F817E3A799B42C00BF5AA841D536240224ECC1F789B42C094A707601E53624078ACBE5F719B42C05A07ACC120536240AD122C0E679B42C0D7C633C321536240CDF5C7C5629B42C04AE9995E2253624058EB7A585E9B42C0F0C80EE0235362400B45BA9F539B42C052D90B6025536240CFE11060479B42C069183E2226536240F2D654713E9B42C0CEC6A58526536240EE3F321D3A9B42C0E3288AA12653624026378AAC359B42C0B3E908E0265362407D9BB45F2D9B42C05DC6A8C62653624045813E91279B42C016D22BAF2653624032EDF6B41E9B42C0EC246C8926536240C0E61C3C139B42C0A239FC7F26536240A583F57F0E9B42C08D92FC2D26536240DC60A8C30A9B42C0C9C452C92553624086E5CFB7059B42C0A625564623536240476A46ABFF9A42C0CD960744235362401EEB98A9FF9A42C0CA880B4023536240B9AF5EA0FF9A42C0E407F87F1F53624066FFF27FFD9A42C0EE0912DB1D5362408A9356D7FC9A42C0B75384E519536240F0A6B62FFB9A42C0EF33D362155362409320B7BAF79A42C0BB46263B1153624019A1E936F29A42C00D4059E70E536240D26AED22F19A42C005C314400C536240FC4BF7DFEF9A42C0C286A7570A536240FDDB65BFEE9A42C061DBA2CC06536240DAAF9696EC9A42C058C9C7EE025362403B2064B4E99A42C0F4F8BD4DFF5262400D38A682E59A42C051F932ACFD526240DBB28D89DE9A42C01A6B7F67FB52624035C703DBD29A42C02D697BAAF9526240E269430FC69A42C036AD1402F95262400E153EB6C09A42C02D3E05C0F85262409EEF0280BE9A42C007FE0120F8526240311BAE1FAC9A42C0915D0E60F65262406C58F89FA19A42C0D11CFE3FF352624005C655C0989A42C0EC55BF2DF35262403B21CF89989A42C04F47B6A9F0526240E569AFF4909A42C0773469AEEE526240AD557199899A42C0B0164449ED52624034C86EB0819A42C0106734A8EC526240A5D0C31A789A42C09348EC24EC526240149161156F9A42C01CE7DB27EC526240ADB0CF52689A42C0E643ABEEEC5262402E6695E35F9A42C0D3A46F2DEE526240FD42D9A5579A42C08297CFA8EF526240D28668194E9A42C084E4AE6FF1526240F581E49D439A42C0D4B7CCE9F25262401BB226BB3E9A42C00CEDF71FF4526240D0DECFDF3A9A42C0AC826275F552624038D6C56D349A42C0C908032AF75262403693CA6F2C9A42C080C6962FF95262408625D4C21B9A42C026E88AADFB526240729648580A9A42C007CC43A6FC5262405268B4B0029A42C0554FE61FFD526240C52F0620FF9942C0D41F065FFD52624090508E5DFD9942C0C2C8810DFE526240C847E6ECF89942C01B6A6F4BFF5262404EB4AB90F29942C0C4FBBB880053624062314514EE9942C0387A466C01536240BFD6A546E89942C0F6B8CA6E015362407A0E76D4E29942C0F47F5880005362404CF8A57EDE9942C06616FC91FD526240944E7F51DD9942C0274D83A2F9526240C8DF0731E19942C0704D70A0F6526240FC427EECE49942C06A1D0BC0F5526240AEB9A3FFE59942C06B65C22FF5526240307E1AF7E69942C0D1EEEB1BF35262401DBF0177EA9942C046A7F809F15262407A4501ECED9942C0F96B0D00F0526240CD6B36A0EF9942C0A6FD20DCEE5262401FDA22C4F09942C0008E3D7BEE526240FBE99A24F19942C00F4D8F5CED526240BF9D9F3DF29942C0D4207134EC52624037D43950F19942C0BA63B14DEA5262400E5BC4C1EF9942C04273428DE7526240EC489AE4EC9942C04B862D87E75262403F47F5E7EC9942C0DA290C80E7526240048B68E0EC9942C0676902A0E55262403F5B62C0ED9942C0417452A9E3526240D75537CDF19942C02C29779FE3526240A2CCABDFF19942C07A281B20E2526240DD9CA5BFF29942C02DA814E0E052624072ECEA9FF19942C0E0247266E0526240CBD58F4DF29942C043B40C27DF5262409574DE10F49942C0D75DEA31DB5262403A652431F79942C0388600E0D8526240277E3100F99942C0ACC8433AD752624027367A90F99942C0B771D586D4526240B504CF73FA9942C011D77B3BD3526240A3C7EF6DFA9942C08B040940D2526240C10EAD5FFA9942C05803EF3FCD526240277E3100F99942C046820420C9526240186D9F9FF39942C0D57036C2C7526240A85BD141F29942C071AE6186C6526240907B5F01F19942C0251D8AA7C3526240FCC1C073EF9942C009FCE1E7BF526240398ABD61EC9942C080327CFABE52624058BD0D7BEB9942C02B2FF99FBC52624053AAE91FE99942C08C6E1860BA526240142928A0E49942C007FE0120B85262407707C25FDD9942C08D77EC0CB852624018755204DD9942C0EAA5738FB6526240875DCAAFD59942C09149A187B5526240F6A79E16CD9942C05C4DE83FB5526240C2E2CB9FCA9942C01D9D0480B4526240CD3F55E0BF9942C01D9D0480B452624013DD6921B79942C0F72B5382B4526240690712CAB19942C091D6732DB5526240824CD7B8A39942C07610E099B55262404533AA679C9942C0F66DD27EB552624096027745959942C05F5BE443B5526240265305A3929942C0BB1006F9B4526240B583B641929942C01853FA53B45262403EDD8A0E929942C0BCB77DEAB35262405B66C7FC929942C07702AB34B35262402A60F18A969942C0B0822914B3526240B678C25C9C9942C0A54DD53DB25262407B832F4CA69942C0B365AF2DB252624063F9A9E0A69942C05E5CF45FB152624053EB5800AE9942C096804EF7B0526240DB807456B09942C02891E975B05262405768D608B39942C0A68AF381AE526240E645DC52BD9942C04138B066AE5262402DF2A1FABD9942C04BDB0940AD52624018B14F00C59942C0FB7A1920AC526240FC2257A0CC9942C0ECAAF69FAB52624024343800D19942C034153D4BAB526240632BC313D59942C0016C9B3DAB526240335F6FACD59942C0F02EBC37AB52624074345882D69942C0C66AF3FFAA52624053A7A89FDC9942C013EBF93FAC526240828AAA5FE99942C01B125212AD526240E5852AEBED9942C01EBEF15AAE5262406532C115F59942C0ED1C14DEAF526240DE077B6EFC9942C081EDBB7DB15262400E959059079A42C0CC1D47BDB1526240FC993050089A42C0EE04FBAFB35262404B4C61EF0F9A42C041A49531B4526240080FE4EA119A42C0217DEE5FB45262409DB415A0129A42C07FAD0100B652624032970AE01C9A42C0E39DE85FB75262405DC94400269A42C018AE0E80B8526240364B13002D9A42C0922EEC1FBA526240F3AB3940309A42C02E0FE37FBC52624046EC1340319A42C013BF1880BC52624046EC1340319A42C003E0E9DFBF5262400B1C1A60309A42C0A344A6D7C15262406B589DE62E9A42C09CE0F65FC2526240D009A1832E9A42C0E98E0FC4C3526240E24680892E9A42C09B36E334C45262405F06088B2F9A42C0D11B936AC4526240D5085806309A42C04AE4277AC55262401C0B0A83329A42C05FB939F0C552624066F2CD36379A42C05F5A796EC65262401CB85E2E3D9A42C094111780C65262408D3FF61F3E9A42C097F10060C65262406110FD7F419A42C0748E4B66C6526240A2410A9E429A42C053399270C652624082BA922E479A42C0ACAF09C4C6526240C25B316D499A42C0C111EEDFC6526240C8A29F5F4A9A42C0E751F17FC75262409CE337E04E9A42C0F901FEDFC752624026D6F37F589A42C0DEB133E0C7526240BB95CA80589A42C0E1911DC0C75262407D51CC8B5D9A42C0B8150CF8C65262404184132C699A42C065BE28E6C552624072A7CF69719A42C095174FF3C4526240F211E797779A42C01661D4FFC3526240959460167F9A42C010035DFBC2526240C4BF19468B9A42C058288870C2526240FC71FBE5939A42C085E6DFD3C152624053B4CDE8A29A42C0C1D31A39C15262408946D2C9AD9A42C0BB44F5D6C0526240A8120AB6B69A42C0A9F00CBFC05262407E8D2441B89A42C053CDACA5C0526240593B40E6B99A42C032D7B331C052624068EA758BC09A42C0CDE33098BF5262409FE40E9BC89A42C0B323D577BE526240665710B9CF9A42C08D11E4FBBD526240D590B8C7D29A42C066FFF27FBD5262407B25DA9FD59A42C0E057F66EBD526240B094C041D69A42C07FA31D37BC526240CABD65F3DD9A42C0D3A7B0ADBA526240D2F1E20EE59A42C0E089B4E8B85262406AE67FA8EA9A42C03C4272D7B752624078F1D995F19A42C0C6CCF401B7526240F783CB74F99A42C01FCDA2C1B7526240D57A1A8B019B42C0E0A0BDFAB85262405070B1A2069B42C0001E51A1BA5262405890C1E50C9B42C0ED7E15E0BB526240B524F6BF129B42C0169F0260BC526240C4C5F6FF169B42C040BFEFDFBC5262400447B87F1B9B42C0A1CFEC5FBE52624013584AE0209B42C072906B9EBE5262406BB180AE229B42C0A7A32DF8BE5262403AC54F88259B42C006F1811DBF5262403B4ACA822E9B42C0C52F0620BF526240A06B5F402F9B42C0ADED3724BF526240E7A15B54309B42C00F327F3BBF5262407286E28E379B42C0FA87E3AFBF526240B177352F3D9B42C0EB6F09C0BF52624075CF15003E9B42C011B00C60C0526240EF906280449B42C049A01C60C15262400ED363004D9B42C05E3013A0C152624035E44460519B42C05E3013A0C1526240B4E6C75F5A9B42C03DF262BCC1526240ACE9D55B5E9B42C0C0A26CDBC1526240B56B425A639B42C073C009E0C15262402A3410CB669B42C073C009E0C1526240CF7A42C06B9B42C049A01C60C1526240849CF7FF719B42C03BD0F9DFC05262402D3E05C0789B42C01490F63FC05262405900AEBF809B42C000000000C05262402D414640859B42C003E0E9DFBF5262408F2221808A9B42C000000000C05262402DD4F59F909B42C011B00C60C052624015F7C4DF9B9B42C0CDF79D70C0526240AF9BAD179E9B42C0A994E876C0526240F5132928A09B42C0B2A7D370C052624072BF4351A09B42C0DC9FE63FBF5262401DC9E53FA49B42C05DE6CF12BF526240A04BDD3AA49B42C05491651CBE52624064613E0FA49B42C00417D0B0BD5262400573AA6BA39B42C03AFF1B20BD526240A728F27FA29B42C0DEAEF25FBB52624040964FA0999B42C007FE0120B8526240E613C31F8F9B42C07EECE4C2B752624087F71C588E9B42C02B39DD68B652624012B985538B9B42C0D4FCE71FB352624055E2957F889B42C0EA9BEA7FAF526240FEF0F3DF839B42C0593F0B9EAD5262409DE4954F809B42C001020000009D000000E23362A581526240000000E04F9D42C0C30C8D2782526240BF153F7C4F9D42C072A02C2184526240A891F1834E9D42C0C1E677F5855262406083CF204F9D42C09CF0B7E287526240DBFF5B24489D42C0E412471E88526240FEB220393E9D42C0430477FB8752624031F378B5379D42C0853BBC8C875262408D3CB59F319D42C0C4398F2F86526240076B52C02C9D42C089552877845262400392B06F279D42C0BC0166BE835262400B896A00259D42C09F477B728352624030E186CE219D42C081D2AB5C83526240BA5A385A1F9D42C03A0C416983526240BD440603199D42C0E946585484526240755B7DD00E9D42C0DC0BCC0A85526240D2EC702A089D42C04DD87E3286526240339C7CC4F99C42C0447DDCC8865262407AE9DCA3ED9C42C008371955865262409663682BE59C42C056BD570886526240128A085ADC9C42C021938C9C855262408CA438A2D69C42C0C4AF58C385526240D634947FD29C42C02B4CDF6B88526240B3D771B2C39C42C071659AFA8A526240D6E65A0FBA9C42C02540A8E68D52624059F047F6AD9C42C08CD99255915262402F7C8ED9A39C42C033A7261C95526240F7C374C69C9C42C02971C2299852624022F36D66999C42C0BC7DB1529C526240A8E96976939C42C0317491E79F52624064DFBA078D9C42C00CC050D1A25262404527F0F3849C42C099B3E32BA65262400A26A36F779C42C0B98C9B1AA8526240E65AB4006D9C42C00B57AC86A952624043064DA6659C42C0B1A94E62AB526240827E95325F9C42C0486E4DBAAD526240793073CB589C42C0163A6524B1526240E3A9A2D34E9C42C089E0C9B8B35262405FFE5426469C42C0C776082DB5526240DC8C89833A9C42C0F0DB10E3B552624092DF47DA329C42C0DB8D999FB6526240B926EEC2209C42C0A2F611AEB6526240ED7DAA0A0D9C42C01CBFA6BDB7526240711706D1FF9B42C04877C6ADB852624036864A6DF39B42C030044A54B95262409F55664AEB9B42C0F45B2A25BA5262404C0C1357DF9B42C09D6340F6BA5262405D3A41F6D59B42C0A09F4E1EBB526240C2EB4493D59B42C0DE639FB6BC526240298F13CBD29B42C004FD2A65BE526240AAE8B413CA9B42C0A7751BD4BE52624085CFD6C1C19B42C0892E5EE2BE526240A01518B2BA9B42C089CF9D60BF52624032E8DF89B49B42C0A31CCC26C0526240941C661EAF9B42C0D843FB58C15262402CC0D254AA9B42C076FC1708C2526240586BCDFBA49B42C096C4FE57C2526240A83462669F9B42C06D2E4844C252624033B44B659B9B42C0C3B068DFC1526240579B5A11909B42C037ED73C6C1526240E8537D9D8A9B42C017AFC3E2C1526240201DC308869B42C05BC3561AC2526240466172FE819B42C0D8F8A7AFC2526240C1C991297A9B42C04C040539C3526240BF243A70739B42C054CF38C3C3526240E09D7C7A6C9B42C09C95A3B6C3526240B50F1E12639B42C072D1DA7EC3526240EF46301F5A9B42C075DFD682C352624071E888D7509B42C016647039C3526240569F06674B9B42C0DB4E5B23C2526240EA077591429B42C0ACFB6C89C152624088E41A553C9B42C0F6459D14C1526240CC75BFAF369B42C035E213FCC0526240EE08A7052F9B42C0B528FDCEC05262407CE82741249B42C01B50CAFFBF526240A3F08FAD1D9B42C039F9E3ACBE5262409F877F7D199B42C0333CAC26BE5262407E4D7BEF149B42C08A79B18BBD5262400F90D4E70F9B42C02E9CB525BC526240D18A146F099B42C035D5EEB2BA526240D4884FF0039B42C0B58E05E0BA526240929B3CC0EE9A42C0ACD73E2EBB526240F810F9D3EB9A42C034A1A41BBC5262400C885AE4E89A42C01C87B0D0BD5262407BB889FFE09A42C0FD1F1620C05262408E401768D29A42C06D03D259C1526240519DB3AACA9A42C0CFFF6101C2526240B48185DDC19A42C07BD058A0C2526240C50BD8C4B89A42C055E9DD0EC35262407D5061B6AE9A42C0E35B0EAAC3526240CA4054D0A39A42C0AA65C636C45262400CBD0F51969A42C0F6211400C8526240B37CB83F729A42C0DF8211A0CB526240DF180280639A42C0F885FCD8C9526240E17261495E9A42C0E603029DC9526240CA4A38995D9A42C0FE73E2BCC9526240850C3F93589A42C0C2A04CA3C95262400C231862509A42C08B57B494C7526240D79FC4E74E9A42C0171E45E7C6526240F2214D614A9A42C0760F75C4C6526240165A8C70499A42C094111780C6526240A0015020479A42C0748E4B66C652624090042B98429A42C09AFFFC63C6526240858ABB8B419A42C0E80F7283C6526240B0B9B42B3E9A42C0440AAF6EC6526240DBF6E2303D9A42C08641F4FFC5526240CC2D0840379A42C05C210780C5526240C80CAF7F329A42C03C5CBC69C452624017CAD303309A42C0B6FC76C8C3526240E24680892E9A42C0E98E0FC4C3526240E24680892E9A42C0E68013C0C35262407D0B46802E9A42C09CE0F65FC25262407D0B46802E9A42C0E40522D5C152624094D74AE82E9A42C027439FD9BF526240CF5F8D58309A42C073DE5A81BC52624034AF343A319A42C0DC195C29BA5262405EEC623F309A42C0F54A5986B8526240DD47C9062D9A42C0D277126CB7526240D4415E0F269A42C0BA698E07B6526240389CF9D51C9A42C05C397B67B45262402C6FFDAA129A42C0B1E485CFB1526240D276A796089A42C05B7C0A80B1526240B5914660079A42C0FC4BF7DFAF526240FC4E3860FC9942C09B3BFA5FAE5262405F2DD21FF59942C012E85D06AD52624062A70EA8ED9942C066E95443AC52624053060E68E99942C0F913950DAB5262402A28FB9DDC9942C00A7F8637AB52624003EF3F8DD69942C0DBFAE93FAB5262407B25DA9FD59942C0FE74A84BAB5262407B6D910FD59942C08786C5A8AB526240D035DDFCD09942C09F69D322AC5262404A1CC3ADCC9942C09ED96443AD52624018B14F00C59942C04A4B9B60AE526240C2DF8A1FBE9942C0985B1080AE526240343F4860BD9942C0228CFA7FB052624086EC7200B39942C096804EF7B0526240DB807456B09942C02ED85768B1526240D66D50FBAD9942C01FA6D82CB252624033750DE9A69942C0992CEE3FB2526240C3499A3FA69942C044DD0720B55262407B6649809A9942C044DD0720B5526240BE0864C0A39942C01D9D0480B45262406F0C01C0B19942C01D9D0480B452624013DD6921B79942C0003F3E7CB452624038807EDFBF9942C0DFCFDF3AB55262405DA79196CA9942C0E1390087B5526240792A9611CD9942C0A8CDEE7FB65262407B25DA9FD59942C057D7570DB8526240D6B3D606DD9942C04BCD7921B85262407102D369DD9942C01A12F758BA5262401A2E1796E49942C064C68091BC5262407D299721E99942C08C5363F8BE526240997E8978EB9942C003E0E9DFBF526240100B1060EC9942C0E960FD9FC3526240B5FB5580EF9942C094111780C652624067FCB1FFF09942C0D57036C2C7526240A85BD141F29942C0010200000002000000D57036C2C7526240A85BD141F29942C046820420C9526240186D9F9FF39942C00102000000B7000000D57036C2C7526240A85BD141F29942C0C50D0929C9526240FA25E2ADF39942C0F0B9B832CD52624051FDDE01F99942C079DE324CD2526240BB09BE69FA9942C061C7DA3AD3526240A3C7EF6DFA9942C02BC5E97FD45262406E3E6480FA9942C0BE1C2C52D7526240EB79ED88F99942C0F3B688DED8526240CE7AE706F99942C0191F662FDB52624064E4D132F79942C0D257EB1FDF5262400CEDF71FF49942C0AE92D96AE0526240B998B047F29942C07B8A77DBE052624043684EA8F19942C04B8D7516E2526240BF55E8CDF29942C0539A289DE35262401F4AB4E4F19942C04779419FE3526240378C82E0F19942C0DC3818A0E3526240A2CCABDFF19942C050A335ABE3526240EF9705C9F19942C03AF361ACE552624062D520CCED9942C066D6F786E75262403F47F5E7EC9942C088BA0F40EA526240E4DB16C0EF9942C0DD4A6540EC52624031CF4A5AF19942C0A1FE6959ED5262407EDC2340F29942C02A9D595CED526240BF9D9F3DF29942C0634BEA5FED5262407EDC2340F29942C0B8C7D287EE52624043B00518F19942C0058DF4FDEF5262405B261EABEF9942C007DD6FFEF0526240D97B4CFFED9942C0D4FCE71FF352624082FA3B80EA9942C0B2423635F5526240CB42E0EDE69942C0AFEC82C1F5526240D7385101E69942C0E1928895F6526240493CEAF9E49942C0680EFF9FF95262403F582140E19942C0631F09A0FD5262407707C25FDD9942C02920ED7F0053624076775380DE9942C064F0E65F015362409E8834E0E29942C064F0E65F0153624018DAEF3FE89942C02920ED7F0053624086AB0320EE9942C0DC9FE63FFF526240C52CC59FF29942C075CF1500FE5262400F0E51E0F89942C0D41F065FFD52624090508E5DFD9942C0F221A81AFD52624048B2FD1AFF9942C067EB85A7FC526240ED2C7AA7029A42C0F33EE99FFB526240AD52D55F0A9A42C03FEE1120F9526240C8E64FC01B9A42C0CF0DF21FF75262402B5BDA5F2C9A42C032135674F5526240B553CE72349A42C071112917F45262406BA395D63A9A42C078A686ECF2526240B676ECB13E9A42C05E5CF45FF1526240B3C068A0439A42C0E7BB00A0EF52624079831E204E9A42C086AB0320EE526240EB05FA9F579A42C0392BFDDFEC526240DB673AE05F9A42C016CBE31FEC526240FAA93B60689A42C016CBE31FEC526240A34B49206F9A42C0249B06A0EC526240224ECC1F789A42C04BDB0940ED52624040005FC0819A42C0AFCBF09FEE526240545227A0899A42C01FAC10A0F052624009E46D00919A42C0FD929E33F35262400598439C989A42C0394F2B3BF3526240B8CCE9B2989A42C00EC40D53F6526240B31E6393A19A42C075351E11F85262409C5BD71EAC9A42C06FFF80BDF85262406F6B6688BE9A42C0A1ED3D01F9526240681888AFC09A42C0680EFF9FF95262406BF12900C69A42C0DEAEF25FFB526240B2440CE0D29A42C0631F09A0FD52624076775380DE9A42C0DC9FE63FFF5262404FF92180E59A42C0ABB019E0025362405E9A22C0E99A42C0A9A10DC0065362403FEBD09FEC9A42C0F7263C570A536240FDDB65BFEE9A42C0EF13515D0A53624050DAC0C2EE9A42C0A99AC5300C536240FC4BF7DFEF9A42C001F15FC50E536240C632FD12F19A42C05314F93F115362407EDC2340F29A42C04B45196015536240109EBFBFF79A42C0707610E019536240FCDEA63FFB9A42C0BE8575E31D536240DE91B1DAFC9A42C0DBF40C861F53624060FA038AFD9A42C0E8E6D143235362401EEB98A9FF9A42C0648918C025536240566133C0059B42C00702092F26536240959A3DD00A9B42C0AB4CE77926536240873C388E0E9B42C0077536892653624020EF552B139B42C09F5912A026536240C0A7DEBF1E9B42C05DC6A8C626536240987F9994279B42C0B9EEF7D526536240001EAC5A2D9B42C0AD88F5A1265362405BC0159A359B42C0A239FC7F26536240AC7EB61F3A9B42C05AE95A2026536240E6CC76853E9B42C07F4FAC5325536240881BA66C479B42C056ED3FD723536240F907DB99539B42C05C26796422536240B2C0B22D5E9B42C069780EC021536240BBB8E8BF629B42C0755776C12053624042D2020F679B42C07F5C2C561E53624090EE8C5B719B42C06B14ED851D5362409393E414789B42C05CB7F75F1D53624021BE5D40799B42C0472701201D536240E68013C0839B42C0A9DE75911D536240438B112E899B42C061B94A1C1E53624027E9ABF58F9B42C01F7CCD172053624083ED71F0969B42C09CB11EAD205362402355CA21989B42C0BBB8E8BF2253624009771D609C9B42C029A84D4123536240AF1177AB9D9B42C06D6EF195255362407642F9CCA39B42C0B45FD27326536240543948E3AB9B42C00D912E91265362407B2A4C84B29B42C09F5912A026536240E9CD4D40B89B42C01FFC1FBB26536240690A534ABE9B42C0D130C6D126536240AC6AEE8DC69B42C04B2DA5782653624092729C80CB9B42C08DA9054026536240C693933FCE9B42C06A49EC7F255362408AC6DADFD99B42C06A49EC7F25536240B5824B6CE39B42C08DACA1792553624054B02193E79B42C034C0609225536240ABD50DCAEA9B42C0648918C025536240C52CC59FF29B42C0611FF873255362401689096AF89B42C0E14ED83425536240618A7269FC9B42C04F89905F245362400455A357039C42C080E2B66C2353624084D95FD1089C42C094FF7F52235362402B8E5E68099C42C02F68210123536240D6E5EF390B9C42C015D9733E21536240AA549ADE0F9C42C013FFC1D11F5362403DD4B661149C42C0A65714C01E536240E82510C0179C42C021E7FD7F1C53624061E75C401E9C42C049360D40195362408DA90540269C42C0C1E50C2017536240A06B5F402F9C42C0A77E390E17536240210AC105349C42C06EB99FF816536240AE9E93DE379C42C08F6A7D36175362405DBB59283E9C42C0D955ED3F17536240F7EFB03F3F9C42C02CF587C11753624072EB7FCA429C42C06516461F18536240651DE967459C42C01FFC7A74195362404813EF004F9C42C0ADF545421B536240EB8F300C589C42C0D7E7209E1B5362406D0CF093599C42C026D6F37F1853624074FE37407A9C42C0F9D51C20185362405C210780859C42C05105ED1F15536240742497FF909C42C08B04094012536240B73302E08E9C42C0FFB7EDD60D536240708D74AB8C9C42C02982EE810C53624083E4F8FC8B9C42C08432E8DF09536240B3823A408B9C42C021510DA0045362406CC207C0899C42C03A3DEFC60253624096B77E55899C42C03C32569BFF5262401F590A92889C42C04562821AFE526240D117E714899C42C0554FE61FFD52624025726660899C42C0BD5DE5BFF6526240E68013C0839C42C0392BFDDFEC526240BF6F32607F9C42C07BF9F8DFE5526240FA3F2C40809C42C0BDC7F4DFDE52624001124DA0889C42C07356FABFD952624030F54E60959C42C023F609A0D85262408DD13AAA9A9C42C09E85F35FD65262407009C03FA59C42C0B524F6BFD2526240AA6FAAFFBD9C42C0B524F6BFD2526240AE934440CF9C42C0756506E0D5526240861854C0E29C42C00E661360D85262405B79C9FFE49C42C0BAE70A00DF52624020A9CF1FE49C42C0B2FAD97EE8526240E8667FA0DC9C42C068267387E852624024230CA8DC9C42C063207475EC526240C4D21B49DD9C42C0C17BFDFFEE526240FECAEFD9DF9C42C0E7BB00A0EF5262401CF80780E09C42C0D4FCE71FF35262409649C3DFE59C42C07CCD1720F65262406A8A5B60EA9C42C0B44AFAC5F65262403385CE6BEC9C42C0483547B1F7526240DF7A0382EF9C42C050E339B6F95262408D919158F79C42C07ABE0B00FA52624033FED87FF89C42C0F05EFFBFFB5262401870E01F009D42C0169F0260FC526240E47107A0079D42C0169F0260FC526240E90E62670A9D42C037F4BB55FC526240FE2A1B310E9D42C01A828879FB5262405A8B0574159D42C0B2AE1B00FB5262402EE64240199D42C0B86EEFBFFA52624056F723A01D9D42C0350DE59FF45262401F6BA1BF2B9D42C02CAFD096E0526240000000E04F9D42C0 true 01050000007B00000001020000000200000035BEE5A0FA486240785C548B887F42C00619B787F34962403A8D599B6B7A42C0010200000002000000A5AE6B6A0F516240EE23B726DD9B42C025AA5D670F516240B165B130DD9B42C001020000000400000025AA5D670F516240B165B130DD9B42C06AB3FB9F0D516240B5F81400E39B42C01A530B800C5162405AE95A20E69B42C01236CF150C5162401D566AF4E69B42C00102000000030000001236CF150C5162401D566AF4E69B42C06BB933130C516240EFBC9EF9E69B42C062B933130C51624001BD9EF9E69B42C001020000000500000062B933130C51624001BD9EF9E69B42C0984979520B516240D6468666E89B42C07DCB9C2E0B516240CA3CA87AE89B42C083013A820A516240E80D9CD8E89B42C01820D1040A516240946B651DE99B42C001020000000A0000001820D1040A516240946B651DE99B42C09FCA694F0951624012D5004AE89B42C0E47107A00751624072593B40E69B42C0881E42A6065162404ACC58D9E39B42C09D9ACB0D065162408C930C4AE29B42C03909A52F045162409BF749FFDC9B42C0B159E48D025162401A738D85D79B42C00B7A6F0C01516240F2A32B22D49B42C0EB6F09C0FF5062403BA41820D19B42C02D3185BDFF506240DC9BDF30D19B42C00102000000040000002D3185BDFF506240DC9BDF30D19B42C059A725B1FF506240ADE93015D19B42C027744D37FF5062407BE35AA3D49B42C04562821AFE506240158843DBD69B42C001020000000B0000004562821AFE506240158843DBD69B42C0ED7E15E0FB5062404055E0BFD49B42C0B86EEFBFFA506240A654D33FD29B42C0575EF23FF950624011058E5FD39B42C0A74E513FF95062406403E962D39B42C039002C3CF950624022426D65D39B42C08CA262F7F85062409F8B2BD3D49B42C0041E1840F8506240F0355F80D89B42C03C878D0DF8506240857F6CEDD89B42C0E0BDFE7FF75062404F667220DA9B42C04333F4F4F650624018A99C9BDB9B42C00102000000350000004333F4F4F650624018A99C9BDB9B42C0E4FF441BF6506240C48A64D9DD9B42C0B2423635F5506240F3C64961DE9B42C0E2CC0AA0F35062400518963FDF9B42C081BC0D20F250624057C80160E19B42C0266CE45FF050624047BAB07FE89B42C05D8B16A0ED5062400F0E51E0F89B42C0D81A0060EB5062406ED113E0059C42C03B3A0900E9506240F73361A0109C42C0676902A0E55062406E6704C01D9C42C052DCA799E450624071D014F0219C42C085121C4DE45062404DF4F928239C42C09164B1A8E3506240FE64E7C8259C42C0FA6B68B9E25062407389D981299C42C0ABCC94D6DF506240F9F8DFA52F9C42C09274CDE4DB50624090436914379C42C0029EB470D9506240838F77FD389C42C097491E99D85062400CFDB8A2399C42C01426E71FD8506240950ED6FF399C42C0A0038184D75062404DA48F543A9C42C08119F8F6D3506240C977842E3C9C42C0EB54F99ED1506240A68D34023B9C42C0FE55911BCF506240859BE7E3359C42C0D66C8A6CCC506240AD61D0532E9C42C04285D9BACA5062409745178A2A9C42C007E92972C850624074EB353D289C42C0264A8CAFC7506240FED478E9269C42C0C528BE90C45062407D6DA23B2D9C42C0D4EBBBC7BE506240EB556474409C42C08B0CBCA4BB506240F5E681D94E9C42C0D08547D1B95062408EB344C2529C42C025BE24DFB6506240A2C38DA5599C42C074925275B45062400B3AC6BA5D9C42C05A907758B2506240A0DFF76F5E9C42C0058DF4FDAF506240E6F516C5619C42C0081566EBAA506240D29B9B80709C42C02EA4688AA5506240443B5DCC859C42C06FF3C649A150624019575C1C959C42C09AACF6559E506240BAE70A009F9C42C028F5C0229A5062408D9B7521B19C42C0B04C09D2965062406DD5BF35C19C42C0B75D68AE9350624077D66EBBD09C42C098593AD5905062405D5727C2E19C42C0CFA67E398E5062402627C929F09C42C0C194DCBC8C50624097EB23A6FA9C42C0C19A14308B506240DE10F461079D42C09F292AD188506240F5DF394A149D42C0A0B998B08750624028DB1BD71A9D42C099428C7C83506240AC8FE2772E9D42C08E9DA68581506240A56D57433D9D42C02AE4A5F67D5062405930F147519D42C0178B95877B506240DA1F8370609D42C0AD6A49477950624055F08057709D42C0010200000003000000AD6A49477950624055F08057709D42C0575EF23F79506240266CE45F709D42C042E504127950624060F426D0719D42C001020000001400000042E504127950624060F426D0719D42C0FDD071DA785062407730BD58739D42C011001C7B765062404767AA71809D42C03521527875506240791AD58E879D42C0D9CAF044755062405494A69C8A9D42C0322DFBBF745062408014D09F919D42C0217DEE5F7450624093D629A09A9D42C00CEDF71F7450624083CB1940AE9D42C0924FD9FA7350624020915B38B59D42C06BB015D973506240BED29E37BA9D42C0577FDF1A7350624083C366DBC49D42C0A7FC10C0725062408712D2BFC99D42C016EF117B72506240CD9EBAA8CC9D42C05E73FD717150624056D3F544D79D42C025242DF07050624031D7FDBEDA9D42C0266CE45F70506240B2D7BB3FDE9D42C0BE535CB06F50624045B9347EE19D42C083B174F46E506240D89AADBCE49D42C0FDB0EFD46D5062402F5E3D38E99D42C03A9702B96C5062400BBE498EEB9D42C00102000000030000003A9702B96C5062400BBE498EEB9D42C0B05EFBB86C506240B7F3588EEB9D42C0BC7FE2B66C5062409FB18A92EB9D42C0010200000003000000BC7FE2B66C5062409FB18A92EB9D42C0D53A16806B5062406E3B2300EE9D42C0C68DB8D36A5062405EB86C75EF9D42C0010200000003000000C68DB8D36A5062405EB86C75EF9D42C002E264D16A506240A3BE767AEF9D42C05ED945CF6A506240E4AFAD7EEF9D42C00102000000030000005ED945CF6A506240E4AFAD7EEF9D42C0ACC1A0F169506240C6600F37F19D42C0A478A4056850624056DAF004F39D42C0010200000003000000A478A4056850624056DAF004F39D42C05F5B3FFD675062405A76D20CF39D42C0AD0008F56750624017362214F39D42C0010200000012000000AD0008F56750624017362214F39D42C0F199EC9F67506240E88CDE5FF39D42C0648918C065506240C52CC59FF29D42C0015CDABA65506240ADEAF6A3F29D42C0AE5D7FB765506240846B49A2F29D42C089B08630635062407DEA58A5F49D42C01E8D9EB661506240AAE683AFF99D42C07171546E62506240647DB905019E42C0A44808A062506240A5F04520039E42C0170912806450624013C25900099E42C0AABF14D466506240691D554D109E42C0EC0AC73D6750624032326DA4119E42C0C7A1D9D068506240B3FEE08D169E42C0E7F05A536A50624055C3D9081F9E42C094933FCE6A506240815DA857259E42C0DBFAE93F6B506240CC9A58E02B9E42C0D53A16806B5062401EDE7360399E42C027B284626B50624019BD1ABC409E42C001020000000300000027B284626B50624019BD1ABC409E42C06DDAD6606B506240C1BC1127419E42C0240012606B50624012B85B5B419E42C0010200000005000000240012606B50624012B85B5B419E42C0D81A00606B50624049A01C60419E42C0C66AF3FF6A50624069E21DE0499E42C08E7AE3FF695062402AF40BC0509E42C0B5A91501695062409356D7FC539E42C001020000000E000000B5A91501695062409356D7FC539E42C0A2F4E04966506240279AACF6559E42C0828E56B56450624099E5FC5E549E42C00839EFFF635062400B45BA9F539E42C0EBC6BB236350624041A66BDC519E42C0F2D1E28C61506240E34D7E8B4E9E42C0DE5E2DD25F506240A456F3774A9E42C0BAE70A005F5062403A92CB7F489E42C032970AE05C5062401281EA1F449E42C03C5409055B50624061527C7C429E42C0E6EB8DB55A50624061F65734429E42C0D83274475A5062409723BFD9419E42C04C16F71F595062405620C4DF409E42C0F609A018595062407F9F71E1409E42C001020000000C000000F609A018595062407F9F71E1409E42C085AD7E11595062406D6292DB409E42C0FDE6B45D57506240E436D032419E42C07ADD223056506240F581E49D439E42C0C586133D55506240280D350A499E42C0A2F8E75854506240A8774C384F9E42C013550960545062401950148D5A9E42C01355096054506240E333D93F4F9E42C04E250340555062402E122400499E42C08615134056506240B3C068A0439E42C0D67503605750624032303C40419E42C0F609A018595062407F9F71E1409E42C001020000000E000000F609A018595062407F9F71E1409E42C02207DB3E5A506240F02609D3419E42C0AB460AC05A50624085701640429E42C05DC0CB0C5B5062409C0E0984429E42C0867E5CD15C5062401281EA1F449E42C058BACCFA5E506240E793707C489E42C01F20A9CF5F506240921914724A9E42C054E8178061506240C0D3BF7F4E9E42C041D3122B63506240B81E85EB519E42C067583101645062400540CBA9539E42C005114EB0645062401C68F459549E42C08DA90540665062408CD5E6FF559E42C03B3A090069506240E7543200549E42C0B5A91501695062409356D7FC539E42C0010200000007000000B5A91501695062409356D7FC539E42C0D923D40C69506240C3DA73F4539E42C0A6D3BA0D6A506240FA6F6FC8509E42C00B3A6B016B506240EC6415DB499E42C0F36ACA5F6B506240449B2D6A419E42C0D81A00606B506240731FCA61419E42C0240012606B50624012B85B5B419E42C0010200000004000000240012606B50624012B85B5B419E42C0BDCA35606B50624014E97E4E419E42C0E749E3616B506240145F48E2409E42C027B284626B50624019BD1ABC409E42C001020000001100000027B284626B50624019BD1ABC409E42C0FEB9C3816B5062404E621058399E42C0AE84494C6B506240E9E115D22B9E42C00E034CCF6A506240CF561465259E42C0A02AF05F6A506240F0879FFF1E9E42C03E1AF3DF68506240D1459E7F169E42C0184D1D9A68506240782EE7AD159E42C0C5991540675062404A743BA0119E42C0C201E3CF665062401B24E93F109E42C08E812B8F645062405A88C4F3089E42C07DD756A262506240D574E217039E42C080A0377062506240C4B30419019E42C069780EC0615062409EAE939FF99D42C0CA880B4063506240006D50A0F49D42C0E70B10BB65506240ADEAF6A3F29D42C006CEBE97675062400C079D6BF39D42C0AD0008F56750624017362214F39D42C0010200000003000000AD0008F56750624017362214F39D42C095FBD3FC675062405A76D20CF39D42C0A478A4056850624056DAF004F39D42C0010200000003000000A478A4056850624056DAF004F39D42C08E7AE3FF695062402B9C4940F19D42C05ED945CF6A506240E4AFAD7EEF9D42C00102000000030000005ED945CF6A506240E4AFAD7EEF9D42C0E7919AD16A5062400EFF9F79EF9D42C0C68DB8D36A5062405EB86C75EF9D42C0010200000003000000C68DB8D36A5062405EB86C75EF9D42C08A66AF886B50624050F4650EEE9D42C0BC7FE2B66C5062409FB18A92EB9D42C0010200000002000000BC7FE2B66C5062409FB18A92EB9D42C03A9702B96C5062400BBE498EEB9D42C00102000000140000003A9702B96C5062400BBE498EEB9D42C0711B0DE06D5062406B1ACA3FE99D42C0C17BFDFF6E5062402B9908C0E49D42C01D739EB16F506240337C5578E19D42C08294336F7050624064DE4F32DE9D42C0ABB420EF70506240D7D3B3C5DA9D42C05B7C0A8071506240D955ED3FD79D42C0AAAEE87B72506240FC2257A0CC9D42C0309B00C372506240C2CE5EC7C99D42C04850FC18735062404835ECF7C49D42C0F75C01E0735062408F4E0240BA9D42C077FF0EFB73506240BB55212FB59D42C006E8082A74506240F4103235AE9D42C0D08C8F60745062400A4F43AF9A9D42C014E63DCE74506240F78CE9AE919D42C029BB4F4475506240B9CFE0A58A9D42C0568D14807550624002A2BB7F879D42C0A8CDEE7F765062402920ED7F809D42C02A5E1BE078506240B3EC4960739D42C042E504127950624060F426D0719D42C001020000000200000042E504127950624060F426D0719D42C0AD6A49477950624055F08057709D42C0010200000024000000AD6A49477950624055F08057709D42C05E3013A081506240E3C9C91F679D42C05F01F15F85506240D746E11F5B9D42C031F20DE0885062402222EB5F489D42C0B9420E008B50624079ED2D40369D42C04473F8FF8C5062404E250340159D42C0B73302E08E506240FCE1E7BF079D42C08EE4F21F9250624013BF1880FC9C42C0756506E0955062400CEDF71FF49C42C088BA0F40AA506240F1C5CD5FD79C42C0D32B0A60AF506240C9213DA0C79C42C05B7C0A80B1506240B63643609B9C42C0EE8B95E2B4506240C89EF3098F9C42C0BB270F0BB550624075E84F768E9C42C0B2AE1B00BB5062402D3E05C0789C42C0EB6F09C0BF5062408C68965F619C42C0D2C1FA3FC7506240F6F53240589C42C068A4EF7FD1506240DC61B8DF469C42C04B451960D5506240DBCE08803B9C42C01D818989D75062408F650B523A9C42C0D3646B22D8506240534D5A023A9C42C00EA8925CD95062408FC7670D399C42C0FAA6FADFDB506240B4BD2720379C42C0F5B704E0DF506240E7BB00A02F9C42C0BBB8E8BFE25062404A0A2C80299C42C0D63329AAE3506240EC2708C3259C42C07EC2D9ADE55062401A69A9BC1D9C42C02914330CE95062405C6F9BA9109C42C0D215116AEB5062408C18D1D1059C42C0EB45FEAAED5062404BCADDE7F89B42C052F98D65F0506240D0419770E89B42C0DAD6602BF2506240F28CC756E19B42C0002BD1A3F3506240E7D0D84DDF9B42C00E547C32F55062401D46F762DE9B42C07CCD1720F65062406B871AE0DD9B42C04333F4F4F650624018A99C9BDB9B42C00102000000090000004333F4F4F650624018A99C9BDB9B42C0289B7285F750624025E7C41EDA9B42C04E098849F85062400E7D1C72D89B42C0CB55E2F0F8506240753A90F5D49B42C08CFE863FF95062406403E962D39B42C026BD14C3FA5062405F8E684CD29B42C0E14625D0FB506240FE9364C2D49B42C01CE3D418FE50624068869EDED69B42C04562821AFE506240158843DBD69B42C00102000000040000004562821AFE506240158843DBD69B42C08D3FF61FFE50624092054CE0D69B42C0DC9FE63FFF50624028E5FF9FD49B42C02D3185BDFF506240DC9BDF30D19B42C001020000000A0000002D3185BDFF506240DC9BDF30D19B42C0086C7308015162408D68F118D49B42C099000D80025162400936AE7FD79B42C01281EA1F045162402FB72000DD9B42C08641F4FF055162409298FB3FE29B42C0382EE3A606516240734B06DBE39B42C0B1C8659207516240C5579643E69B42C03D9D2B4A0951624000982144E89B42C08152FEFF0951624053AAE91FE99B42C01820D1040A516240946B651DE99B42C00102000000050000001820D1040A516240946B651DE99B42C0A1BEC0070A516240E869C020E99B42C0E2EFCD250B51624047BAB07FE89B42C0CAF21A600B516240304AD05FE89B42C062B933130C51624001BD9EF9E69B42C001020000000300000062B933130C51624001BD9EF9E69B42C029F8B7150C516240723F96F4E69B42C01236CF150C5162401D566AF4E69B42C00102000000040000001236CF150C5162401D566AF4E69B42C035A3D57F0C5162407E63192CE69B42C09C5C9DAD0D516240B5F81400E39B42C025AA5D670F516240B165B130DD9B42C001020000000400000025AA5D670F516240B165B130DD9B42C010EF94690F516240AC623B29DD9B42C0DD7305800F516240184740E0DC9B42C0A5AE6B6A0F516240EE23B726DD9B42C0010200000009000000D57036C2C7526240A85BD141F29942C0C50D0929C9526240FA25E2ADF39942C0F0B9B832CD52624051FDDE01F99942C079DE324CD2526240BB09BE69FA9942C061C7DA3AD3526240A3C7EF6DFA9942C02BC5E97FD45262406E3E6480FA9942C0BE1C2C52D7526240EB79ED88F99942C0F3B688DED8526240CE7AE706F99942C07D879512DB526240FAED9149F79942C00102000000030000007D879512DB526240FAED9149F79942C0191F662FDB52624064E4D132F79942C09737634FDB5262408DBADC19F79942C00102000000090000009737634FDB5262408DBADC19F79942C0D257EB1FDF5262400CEDF71FF49942C0AE92D96AE0526240B998B047F29942C07B8A77DBE052624043684EA8F19942C04B8D7516E2526240BF55E8CDF29942C0539A289DE35262401F4AB4E4F19942C04779419FE3526240378C82E0F19942C0DC3818A0E3526240A2CCABDFF19942C0927F37A7E3526240AC7128D1F19942C0010200000003000000927F37A7E3526240AC7128D1F19942C050A335ABE3526240EF9705C9F19942C09B6053AFE3526240964FD5C0F19942C00102000000090000009B6053AFE3526240964FD5C0F19942C03AF361ACE552624062D520CCED9942C066D6F786E75262403F47F5E7EC9942C088BA0F40EA526240E4DB16C0EF9942C0DD4A6540EC52624031CF4A5AF19942C0A1FE6959ED5262407EDC2340F29942C02A9D595CED526240BF9D9F3DF29942C0634BEA5FED5262407EDC2340F29942C03AB9027DEE526240F7B4D722F19942C00102000000030000003AB9027DEE526240F7B4D722F19942C0B8C7D287EE52624043B00518F19942C0308A808AEE5262409DD76815F19942C0010200000010000000308A808AEE5262409DD76815F19942C0058DF4FDEF5262405B261EABEF9942C007DD6FFEF0526240D97B4CFFED9942C0D4FCE71FF352624082FA3B80EA9942C0B2423635F5526240CB42E0EDE69942C0AFEC82C1F5526240D7385101E69942C0E1928895F6526240493CEAF9E49942C0680EFF9FF95262403F582140E19942C0631F09A0FD5262407707C25FDD9942C02920ED7F0053624076775380DE9942C064F0E65F015362409E8834E0E29942C064F0E65F0153624018DAEF3FE89942C02920ED7F0053624086AB0320EE9942C0DC9FE63FFF526240C52CC59FF29942C075CF1500FE5262400F0E51E0F89942C0D41F065FFD52624090508E5DFD9942C0010200000003000000D41F065FFD52624090508E5DFD9942C0F221A81AFD52624048B2FD1AFF9942C0A36B13A8FC526240F8A11DA3029A42C0010200000003000000A36B13A8FC526240F8A11DA3029A42C067EB85A7FC526240ED2C7AA7029A42C0A05FB9A5FC526240FCFCF6B4029A42C0010200000025000000A05FB9A5FC526240FCFCF6B4029A42C0F33EE99FFB526240AD52D55F0A9A42C03FEE1120F9526240C8E64FC01B9A42C0CF0DF21FF75262402B5BDA5F2C9A42C032135674F5526240B553CE72349A42C071112917F45262406BA395D63A9A42C078A686ECF2526240B676ECB13E9A42C05E5CF45FF1526240B3C068A0439A42C0E7BB00A0EF52624079831E204E9A42C086AB0320EE526240EB05FA9F579A42C0392BFDDFEC526240DB673AE05F9A42C016CBE31FEC526240FAA93B60689A42C016CBE31FEC526240A34B49206F9A42C0249B06A0EC526240224ECC1F789A42C04BDB0940ED52624040005FC0819A42C0AFCBF09FEE526240545227A0899A42C01FAC10A0F052624009E46D00919A42C0FD929E33F35262400598439C989A42C0394F2B3BF3526240B8CCE9B2989A42C00EC40D53F6526240B31E6393A19A42C075351E11F85262409C5BD71EAC9A42C06FFF80BDF85262406F6B6688BE9A42C0A1ED3D01F9526240681888AFC09A42C0680EFF9FF95262406BF12900C69A42C0DEAEF25FFB526240B2440CE0D29A42C0631F09A0FD52624076775380DE9A42C0DC9FE63FFF5262404FF92180E59A42C0ABB019E0025362405E9A22C0E99A42C0A9A10DC0065362403FEBD09FEC9A42C0F7263C570A536240FDDB65BFEE9A42C0EF13515D0A53624050DAC0C2EE9A42C0A99AC5300C536240FC4BF7DFEF9A42C001F15FC50E536240C632FD12F19A42C05314F93F115362407EDC2340F29A42C04B45196015536240109EBFBFF79A42C0707610E019536240FCDEA63FFB9A42C0623B08DB1D5362403B7A52D7FC9A42C0010200000003000000623B08DB1D5362403B7A52D7FC9A42C0BE8575E31D536240DE91B1DAFC9A42C0CDEABBE31D536240C40DCFDAFC9A42C0010200000017000000CDEABBE31D536240C40DCFDAFC9A42C0DBF40C861F53624060FA038AFD9A42C0E8E6D143235362401EEB98A9FF9A42C0648918C025536240566133C0059B42C00702092F26536240959A3DD00A9B42C0AB4CE77926536240873C388E0E9B42C0077536892653624020EF552B139B42C09F5912A026536240C0A7DEBF1E9B42C05DC6A8C626536240987F9994279B42C0B9EEF7D526536240001EAC5A2D9B42C0AD88F5A1265362405BC0159A359B42C0A239FC7F26536240AC7EB61F3A9B42C05AE95A2026536240E6CC76853E9B42C07F4FAC5325536240881BA66C479B42C056ED3FD723536240F907DB99539B42C05C26796422536240B2C0B22D5E9B42C069780EC021536240BBB8E8BF629B42C0755776C12053624042D2020F679B42C07F5C2C561E53624090EE8C5B719B42C06B14ED851D5362409393E414789B42C05CB7F75F1D53624021BE5D40799B42C0472701201D536240E68013C0839B42C0C1BA9F8C1D536240FA9BD0F2889B42C0010200000003000000C1BA9F8C1D536240FA9BD0F2889B42C0A9DE75911D536240438B112E899B42C02B15B7931D536240D293414A899B42C00102000000060000002B15B7931D536240D293414A899B42C061B94A1C1E53624027E9ABF58F9B42C01F7CCD172053624083ED71F0969B42C09CB11EAD205362402355CA21989B42C0BBB8E8BF2253624009771D609C9B42C0A642BB3823536240F2B483959D9B42C0010200000003000000A642BB3823536240F2B483959D9B42C029A84D4123536240AF1177AB9D9B42C041DD7F432353624027003EB19D9B42C001020000000400000041DD7F432353624027003EB19D9B42C06D6EF195255362407642F9CCA39B42C0B45FD27326536240543948E3AB9B42C014C1199126536240AA35997FB29B42C001020000000300000014C1199126536240AA35997FB29B42C00D912E91265362407B2A4C84B29B42C033824391265362403ADE5C8CB29B42C001020000000800000033824391265362403ADE5C8CB29B42C09F5912A026536240E9CD4D40B89B42C01FFC1FBB26536240690A534ABE9B42C0D130C6D126536240AC6AEE8DC69B42C04B2DA5782653624092729C80CB9B42C08DA9054026536240C693933FCE9B42C06A49EC7F255362408AC6DADFD99B42C06A49EC7F25536240B5824B6CE39B42C00102000000030000006A49EC7F25536240B5824B6CE39B42C08DACA1792553624054B02193E79B42C028C8389225536240B5B2DCC4EA9B42C001020000000300000028C8389225536240B5B2DCC4EA9B42C034C0609225536240ABD50DCAEA9B42C06903899225536240DE36F4D0EA9B42C00102000000030000006903899225536240DE36F4D0EA9B42C0648918C025536240C52CC59FF29B42C0547336742553624095F14B65F89B42C0010200000003000000547336742553624095F14B65F89B42C0611FF873255362401689096AF89B42C0A2FEEF73255362406D4F8D6AF89B42C0010200000004000000A2FEEF73255362406D4F8D6AF89B42C0E14ED83425536240618A7269FC9B42C04F89905F245362400455A357039C42C05770EB7223536240C4AE8EAD089C42C00102000000030000005770EB7223536240C4AE8EAD089C42C080E2B66C2353624084D95FD1089C42C035909A532353624032FB0262099C42C001020000001200000035909A532353624032FB0262099C42C094FF7F52235362402B8E5E68099C42C02F68210123536240D6E5EF390B9C42C015D9733E21536240AA549ADE0F9C42C013FFC1D11F5362403DD4B661149C42C0A65714C01E536240E82510C0179C42C021E7FD7F1C53624061E75C401E9C42C049360D40195362408DA90540269C42C0C1E50C2017536240A06B5F402F9C42C0A77E390E17536240210AC105349C42C06EB99FF816536240AE9E93DE379C42C08F6A7D36175362405DBB59283E9C42C0D955ED3F17536240F7EFB03F3F9C42C02CF587C11753624072EB7FCA429C42C06516461F18536240651DE967459C42C01FFC7A74195362404813EF004F9C42C0ADF545421B536240EB8F300C589C42C0D7E7209E1B5362406D0CF093599C42C0010200000006000000D7E7209E1B5362406D0CF093599C42C026D6F37F1853624074FE37407A9C42C0F9D51C20185362405C210780859C42C05105ED1F15536240742497FF909C42C08B04094012536240B73302E08E9C42C0C6FCE9F90D536240D4AFF2BC8C9C42C0010200000003000000C6FCE9F90D536240D4AFF2BC8C9C42C0FFB7EDD60D536240708D74AB8C9C42C0D45A0BC90D5362405DD659A48C9C42C0010200000005000000D45A0BC90D5362405DD659A48C9C42C02982EE810C53624083E4F8FC8B9C42C08432E8DF09536240B3823A408B9C42C021510DA0045362406CC207C0899C42C07BB540D70253624075632B59899C42C00102000000030000007BB540D70253624075632B59899C42C03A3DEFC60253624096B77E55899C42C06AE186C20253624061FA6E54899C42C001020000001A0000006AE186C20253624061FA6E54899C42C03C32569BFF5262401F590A92889C42C04562821AFE526240D117E714899C42C0554FE61FFD52624025726660899C42C0BD5DE5BFF6526240E68013C0839C42C0392BFDDFEC526240BF6F32607F9C42C07BF9F8DFE5526240FA3F2C40809C42C0BDC7F4DFDE52624001124DA0889C42C07356FABFD952624030F54E60959C42C023F609A0D85262408DD13AAA9A9C42C09E85F35FD65262407009C03FA59C42C0B524F6BFD2526240AA6FAAFFBD9C42C0B524F6BFD2526240AE934440CF9C42C0756506E0D5526240861854C0E29C42C00E661360D85262405B79C9FFE49C42C0BAE70A00DF52624020A9CF1FE49C42C0B2FAD97EE8526240E8667FA0DC9C42C068267387E852624024230CA8DC9C42C063207475EC526240C4D21B49DD9C42C0C17BFDFFEE526240FECAEFD9DF9C42C0E7BB00A0EF5262401CF80780E09C42C0D4FCE71FF35262409649C3DFE59C42C07CCD1720F65262406A8A5B60EA9C42C0B44AFAC5F65262403385CE6BEC9C42C0483547B1F7526240DF7A0382EF9C42C07DD236B6F95262403BAB8558F79C42C00102000000030000007DD236B6F95262403BAB8558F79C42C050E339B6F95262408D919158F79C42C0E5A210B7F9526240E08FEC5BF79C42C0010200000005000000E5A210B7F9526240E08FEC5BF79C42C07ABE0B00FA52624033FED87FF89C42C0F05EFFBFFB5262401870E01F009D42C0169F0260FC526240E47107A0079D42C0169F0260FC526240E90E62670A9D42C0010200000007000000169F0260FC526240E90E62670A9D42C037F4BB55FC526240FE2A1B310E9D42C01A828879FB5262405A8B0574159D42C0B2AE1B00FB5262402EE64240199D42C0B86EEFBFFA52624056F723A01D9D42C0350DE59FF45262401F6BA1BF2B9D42C02CAFD096E0526240000000E04F9D42C001020000006E000000E23362A581526240000000E04F9D42C0C30C8D2782526240BF153F7C4F9D42C072A02C2184526240A891F1834E9D42C0C1E677F5855262406083CF204F9D42C09CF0B7E287526240DBFF5B24489D42C0E412471E88526240FEB220393E9D42C0430477FB8752624031F378B5379D42C0853BBC8C875262408D3CB59F319D42C0C4398F2F86526240076B52C02C9D42C089552877845262400392B06F279D42C0BC0166BE835262400B896A00259D42C09F477B728352624030E186CE219D42C081D2AB5C83526240BA5A385A1F9D42C03A0C416983526240BD440603199D42C0E946585484526240755B7DD00E9D42C0DC0BCC0A85526240D2EC702A089D42C04DD87E3286526240339C7CC4F99C42C0447DDCC8865262407AE9DCA3ED9C42C008371955865262409663682BE59C42C056BD570886526240128A085ADC9C42C021938C9C855262408CA438A2D69C42C0C4AF58C385526240D634947FD29C42C02B4CDF6B88526240B3D771B2C39C42C071659AFA8A526240D6E65A0FBA9C42C02540A8E68D52624059F047F6AD9C42C08CD99255915262402F7C8ED9A39C42C033A7261C95526240F7C374C69C9C42C02971C2299852624022F36D66999C42C0BC7DB1529C526240A8E96976939C42C0317491E79F52624064DFBA078D9C42C00CC050D1A25262404527F0F3849C42C099B3E32BA65262400A26A36F779C42C0B98C9B1AA8526240E65AB4006D9C42C00B57AC86A952624043064DA6659C42C0B1A94E62AB526240827E95325F9C42C0486E4DBAAD526240793073CB589C42C0163A6524B1526240E3A9A2D34E9C42C089E0C9B8B35262405FFE5426469C42C0C776082DB5526240DC8C89833A9C42C0F0DB10E3B552624092DF47DA329C42C0DB8D999FB6526240B926EEC2209C42C0A2F611AEB6526240ED7DAA0A0D9C42C01CBFA6BDB7526240711706D1FF9B42C04877C6ADB852624036864A6DF39B42C030044A54B95262409F55664AEB9B42C0F45B2A25BA5262404C0C1357DF9B42C09D6340F6BA5262405D3A41F6D59B42C0A09F4E1EBB526240C2EB4493D59B42C0DE639FB6BC526240298F13CBD29B42C004FD2A65BE526240AAE8B413CA9B42C0A7751BD4BE52624085CFD6C1C19B42C0892E5EE2BE526240A01518B2BA9B42C089CF9D60BF52624032E8DF89B49B42C0A31CCC26C0526240941C661EAF9B42C0D843FB58C15262402CC0D254AA9B42C076FC1708C2526240586BCDFBA49B42C096C4FE57C2526240A83462669F9B42C06D2E4844C252624033B44B659B9B42C0C3B068DFC1526240579B5A11909B42C037ED73C6C1526240E8537D9D8A9B42C017AFC3E2C1526240201DC308869B42C05BC3561AC2526240466172FE819B42C0D8F8A7AFC2526240C1C991297A9B42C04C040539C3526240BF243A70739B42C054CF38C3C3526240E09D7C7A6C9B42C09C95A3B6C3526240B50F1E12639B42C072D1DA7EC3526240EF46301F5A9B42C075DFD682C352624071E888D7509B42C016647039C3526240569F06674B9B42C0DB4E5B23C2526240EA077591429B42C0ACFB6C89C152624088E41A553C9B42C0F6459D14C1526240CC75BFAF369B42C035E213FCC0526240EE08A7052F9B42C0B528FDCEC05262407CE82741249B42C01B50CAFFBF526240A3F08FAD1D9B42C039F9E3ACBE5262409F877F7D199B42C0333CAC26BE5262407E4D7BEF149B42C08A79B18BBD5262400F90D4E70F9B42C02E9CB525BC526240D18A146F099B42C035D5EEB2BA526240D4884FF0039B42C0B58E05E0BA526240929B3CC0EE9A42C0ACD73E2EBB526240F810F9D3EB9A42C034A1A41BBC5262400C885AE4E89A42C01C87B0D0BD5262407BB889FFE09A42C0FD1F1620C05262408E401768D29A42C06D03D259C1526240519DB3AACA9A42C0CFFF6101C2526240B48185DDC19A42C07BD058A0C2526240C50BD8C4B89A42C055E9DD0EC35262407D5061B6AE9A42C0E35B0EAAC3526240CA4054D0A39A42C0AA65C636C45262400CBD0F51969A42C0F6211400C8526240B37CB83F729A42C0DF8211A0CB526240DF180280639A42C0F885FCD8C9526240E17261495E9A42C0E603029DC9526240CA4A38995D9A42C0FE73E2BCC9526240850C3F93589A42C0C2A04CA3C95262400C231862509A42C08B57B494C7526240D79FC4E74E9A42C0171E45E7C6526240F2214D614A9A42C0760F75C4C6526240165A8C70499A42C094111780C6526240A0015020479A42C0748E4B66C652624090042B98429A42C09AFFFC63C6526240858ABB8B419A42C0E80F7283C6526240B0B9B42B3E9A42C0440AAF6EC6526240DBF6E2303D9A42C08641F4FFC5526240CC2D0840379A42C05C210780C5526240C80CAF7F329A42C03C5CBC69C452624017CAD303309A42C0B6FC76C8C3526240E24680892E9A42C0E98E0FC4C3526240E24680892E9A42C0010200000019000000E98E0FC4C3526240E24680892E9A42C0E68013C0C35262407D0B46802E9A42C09CE0F65FC25262407D0B46802E9A42C0E40522D5C152624094D74AE82E9A42C027439FD9BF526240CF5F8D58309A42C073DE5A81BC52624034AF343A319A42C0DC195C29BA5262405EEC623F309A42C0F54A5986B8526240DD47C9062D9A42C0D277126CB7526240D4415E0F269A42C0BA698E07B6526240389CF9D51C9A42C05C397B67B45262402C6FFDAA129A42C0B1E485CFB1526240D276A796089A42C05B7C0A80B1526240B5914660079A42C0FC4BF7DFAF526240FC4E3860FC9942C09B3BFA5FAE5262405F2DD21FF59942C012E85D06AD52624062A70EA8ED9942C066E95443AC52624053060E68E99942C0F913950DAB5262402A28FB9DDC9942C00A7F8637AB52624003EF3F8DD69942C0DBFAE93FAB5262407B25DA9FD59942C0FE74A84BAB5262407B6D910FD59942C08786C5A8AB526240D035DDFCD09942C09F69D322AC5262404A1CC3ADCC9942C09ED96443AD52624018B14F00C59942C01E8BE95DAE526240F4112D30BE9942C00102000000030000001E8BE95DAE526240F4112D30BE9942C04A4B9B60AE526240C2DF8A1FBE9942C00CDD9867AE526240D44A0AF5BD9942C00102000000040000000CDD9867AE526240D44A0AF5BD9942C0985B1080AE526240343F4860BD9942C0228CFA7FB052624086EC7200B39942C096804EF7B0526240DB807456B09942C001020000000800000096804EF7B0526240DB807456B09942C02ED85768B1526240D66D50FBAD9942C01FA6D82CB252624033750DE9A69942C0992CEE3FB2526240C3499A3FA69942C044DD0720B55262407B6649809A9942C044DD0720B5526240BE0864C0A39942C01D9D0480B45262406F0C01C0B19942C01D9D0480B452624013DD6921B79942C001020000000A0000001D9D0480B452624013DD6921B79942C0003F3E7CB452624038807EDFBF9942C0DFCFDF3AB55262405DA79196CA9942C0E1390087B5526240792A9611CD9942C0A8CDEE7FB65262407B25DA9FD59942C057D7570DB8526240D6B3D606DD9942C04BCD7921B85262407102D369DD9942C01A12F758BA5262401A2E1796E49942C064C68091BC5262407D299721E99942C0E324EAE8BE52624054FD7669EB9942C0010200000003000000E324EAE8BE52624054FD7669EB9942C08C5363F8BE526240997E8978EB9942C02A8F5209BF52624037BA7889EB9942C00102000000050000002A8F5209BF52624037BA7889EB9942C003E0E9DFBF526240100B1060EC9942C0E960FD9FC3526240B5FB5580EF9942C094111780C652624067FCB1FFF09942C0D57036C2C7526240A85BD141F29942C001020000000400000073FB9B06FB5262400567953E199D42C06A72E778FB5262406CC8E479159D42C0169F0260FC52624075A334400E9D42C0169F0260FC526240E90E62670A9D42C0010200000005000000169F0260FC526240E90E62670A9D42C0525B8F67FC5262404FB2309F079D42C0383C73C5FB5262400633011A009D42C071AB2006FA526240AA76F28EF89C42C0E5A210B7F9526240E08FEC5BF79C42C0010200000002000000E5A210B7F9526240E08FEC5BF79C42C07DD236B6F95262403BAB8558F79C42C00102000000180000007DD236B6F95262403BAB8558F79C42C0F54DF5BFF7526240B5FB5580EF9C42C0CF9AC4C5F65262409FC5F76AEC9C42C01AB7E22CF6526240CFC59569EA9C42C0C8DB0022F3526240840CE4D9E59C42C0E4C40DAEEF52624081334289E09C42C0A026440AEF526240F8C500E4DF9C42C0287BF07FEC5262405F97E13FDD9C42C0121A1C80E852624053A7A89FDC9C42C0CD4AA47EE8526240E8667FA0DC9C42C09CDB847BE5526240B4A1AC29DA9C42C0DCAEE133E3526240993E856DD59C42C06BCB25FAE15262401EB97F76D19C42C03953324AE1526240B2B15C80C79C42C0E5F27A8BE2526240D08547D1B99C42C07F52488DE4526240AA80D657B29C42C0245D33F9E65262408C721F6FA89C42C011178046E9526240B4249B06A09C42C051F70148ED526240186BC9F4959C42C0DD297865F2526240D4D6E3198F9C42C0819B2045F8526240B95917128B9C42C0B9B59613FE52624090566B17899C42C0EE4FF39FFF52624001124DA0889C42C06AE186C20253624061FA6E54899C42C00102000000030000006AE186C20253624061FA6E54899C42C0780778D20253624054F60258899C42C07BB540D70253624075632B59899C42C00102000000050000007BB540D70253624075632B59899C42C0FDED57A604536240D1FD41C9899C42C069CB14CE095362403605323B8B9C42C01A530B800C536240D6E253008C9C42C0D45A0BC90D5362405DD659A48C9C42C0010200000003000000D45A0BC90D5362405DD659A48C9C42C0938ECDE90D536240D6C8AEB48C9C42C0C6FCE9F90D536240D4AFF2BC8C9C42C001020000000F000000C6FCE9F90D536240D4AFF2BC8C9C42C0DFEB5A31125362405D30B8E68E9C42C0102D681015536240F1A19F04919C42C028CA4A38195362406B216D88969C42C0D19D16721B536240CF3CCAD2989C42C03B037EE81D5362403ABF72CE999C42C0DDFF6C5020536240ED69E278999C42C09E5DBEF5215362404DEE1C6F979C42C0CA856F0624536240E0505326909C42C0B700D99024536240373FB445889C42C023168CA5235362405B40683D7C9C42C05F62878C22536240C5B99745729C42C093A1CFEC1F536240F4763A46689C42C08284CDA51D5362404BBB873A629C42C0D7E7209E1B5362406D0CF093599C42C0010200000013000000D7E7209E1B5362406D0CF093599C42C0E61604A01B5362407916CE7F599C42C05EC6038019536240B45318004F9C42C0F9D51C20185362402A615C60459C42C01DC6A4BF1753624025F213BD429C42C089658E4017536240AAF644323F9C42C0242A54371753624010F0FF3E3E9C42C0C4C5F6FF16536240D71D41E0379C42C08C2E6F0E17536240270FB0FB339C42C02721472917536240B8AD2D3C2F9C42C079D1B249195362404BE88942269C42C0AD93E9861C5362403868AF3E1E9C42C073C57BC41E536240EE2AFFB5179C42C0405E59B31F53624019E42EC2149C42C05AA8EB3F21536240D4D347E00F9C42C0B5F8140023536240E822CF3F0B9C42C01518570123536240412619390B9C42C059E7CE02235362405968E7340B9C42C035909A532353624032FB0262099C42C001020000000300000035909A532353624032FB0262099C42C0473426692353624078CF81E5089C42C05770EB7223536240C4AE8EAD089C42C00102000000040000005770EB7223536240C4AE8EAD089C42C01AE9FB5F24536240D4D00660039C42C055B9F53F25536240FC4E3860FC9B42C0A2FEEF73255362406D4F8D6AF89B42C0010200000003000000A2FEEF73255362406D4F8D6AF89B42C046CF2D74255362402DCBD765F89B42C0547336742553624095F14B65F89B42C0010200000003000000547336742553624095F14B65F89B42C0F551FCCE2553624095A828A8F29B42C06903899225536240DE36F4D0EA9B42C00102000000030000006903899225536240DE36F4D0EA9B42C034C0609225536240D554BBCBEA9B42C028C8389225536240B5B2DCC4EA9B42C001020000000300000028C8389225536240B5B2DCC4EA9B42C06A49EC7F255362400CEAB69FE79B42C06A49EC7F25536240B5824B6CE39B42C00102000000080000006A49EC7F25536240B5824B6CE39B42C031B2648E25536240F60604DFD99B42C0E3B55C472653624031D4BC3ECE9B42C0B76DCE7726536240B5EC5A8CCB9B42C0B3E908E026536240CAB1AB7FC69B42C01FFC1FBB26536240988EEF41BE9B42C04864C4AA26536240B949B148B89B42C033824391265362403ADE5C8CB29B42C001020000000300000033824391265362403ADE5C8CB29B42C00D912E9126536240CE28A787B29B42C014C1199126536240AA35997FB29B42C001020000000400000014C1199126536240AA35997FB29B42C0A239FC7F26536240013BEDDFAB9B42C0676902A025536240BE0864C0A39B42C041DD7F432353624027003EB19D9B42C001020000000300000041DD7F432353624027003EB19D9B42C09DFB613A235362407A5AD9999D9B42C0A642BB3823536240F2B483959D9B42C0010200000006000000A642BB3823536240F2B483959D9B42C08C344CC822536240EB2F606E9C9B42C0A72E2AF320536240F98D65B0989B42C00A48FB1F205362408F256200979B42C07F1711201E53624021E4BCFF8F9B42C02B15B7931D536240D293414A899B42C00102000000030000002B15B7931D536240D293414A899B42C0EB9FF18E1D536240549ADE0F899B42C0C1BA9F8C1D536240FA9BD0F2889B42C0010200000019000000C1BA9F8C1D536240FA9BD0F2889B42C03B061A221D5362409382B8BC839B42C01AF67B621D5362400F817E3A799B42C00BF5AA841D536240224ECC1F789B42C094A707601E53624078ACBE5F719B42C05A07ACC120536240AD122C0E679B42C0D7C633C321536240CDF5C7C5629B42C04AE9995E2253624058EB7A585E9B42C0F0C80EE0235362400B45BA9F539B42C052D90B6025536240CFE11060479B42C069183E2226536240F2D654713E9B42C0CEC6A58526536240EE3F321D3A9B42C0E3288AA12653624026378AAC359B42C0B3E908E0265362407D9BB45F2D9B42C05DC6A8C62653624045813E91279B42C016D22BAF2653624032EDF6B41E9B42C0EC246C8926536240C0E61C3C139B42C0A239FC7F26536240A583F57F0E9B42C08D92FC2D26536240DC60A8C30A9B42C0C9C452C92553624086E5CFB7059B42C0A625564623536240476A46ABFF9A42C0CD960744235362401EEB98A9FF9A42C0CA880B4023536240B9AF5EA0FF9A42C0E407F87F1F53624066FFF27FFD9A42C0CDEABBE31D536240C40DCFDAFC9A42C0010200000003000000CDEABBE31D536240C40DCFDAFC9A42C0EE0912DB1D5362408A9356D7FC9A42C0623B08DB1D5362403B7A52D7FC9A42C0010200000024000000623B08DB1D5362403B7A52D7FC9A42C0B75384E519536240F0A6B62FFB9A42C0EF33D362155362409320B7BAF79A42C0BB46263B1153624019A1E936F29A42C00D4059E70E536240D26AED22F19A42C005C314400C536240FC4BF7DFEF9A42C0C286A7570A536240FDDB65BFEE9A42C061DBA2CC06536240DAAF9696EC9A42C058C9C7EE025362403B2064B4E99A42C0F4F8BD4DFF5262400D38A682E59A42C051F932ACFD526240DBB28D89DE9A42C01A6B7F67FB52624035C703DBD29A42C02D697BAAF9526240E269430FC69A42C036AD1402F95262400E153EB6C09A42C02D3E05C0F85262409EEF0280BE9A42C007FE0120F8526240311BAE1FAC9A42C0915D0E60F65262406C58F89FA19A42C0D11CFE3FF352624005C655C0989A42C0EC55BF2DF35262403B21CF89989A42C04F47B6A9F0526240E569AFF4909A42C0773469AEEE526240AD557199899A42C0B0164449ED52624034C86EB0819A42C0106734A8EC526240A5D0C31A789A42C09348EC24EC526240149161156F9A42C01CE7DB27EC526240ADB0CF52689A42C0E643ABEEEC5262402E6695E35F9A42C0D3A46F2DEE526240FD42D9A5579A42C08297CFA8EF526240D28668194E9A42C084E4AE6FF1526240F581E49D439A42C0D4B7CCE9F25262401BB226BB3E9A42C00CEDF71FF4526240D0DECFDF3A9A42C0AC826275F552624038D6C56D349A42C0C908032AF75262403693CA6F2C9A42C080C6962FF95262408625D4C21B9A42C026E88AADFB526240729648580A9A42C0A05FB9A5FC526240FCFCF6B4029A42C0010200000003000000A05FB9A5FC526240FCFCF6B4029A42C007CC43A6FC5262405268B4B0029A42C0A36B13A8FC526240F8A11DA3029A42C0010200000003000000A36B13A8FC526240F8A11DA3029A42C0554FE61FFD526240C52F0620FF9942C0D41F065FFD52624090508E5DFD9942C0010200000011000000D41F065FFD52624090508E5DFD9942C0C2C8810DFE526240C847E6ECF89942C01B6A6F4BFF5262404EB4AB90F29942C0C4FBBB880053624062314514EE9942C0387A466C01536240BFD6A546E89942C0F6B8CA6E015362407A0E76D4E29942C0F47F5880005362404CF8A57EDE9942C06616FC91FD526240944E7F51DD9942C0274D83A2F9526240C8DF0731E19942C0704D70A0F6526240FC427EECE49942C06A1D0BC0F5526240AEB9A3FFE59942C06B65C22FF5526240307E1AF7E69942C0D1EEEB1BF35262401DBF0177EA9942C046A7F809F15262407A4501ECED9942C0F96B0D00F0526240CD6B36A0EF9942C0A6FD20DCEE5262401FDA22C4F09942C0308A808AEE5262409DD76815F19942C0010200000002000000308A808AEE5262409DD76815F19942C03AB9027DEE526240F7B4D722F19942C001020000000A0000003AB9027DEE526240F7B4D722F19942C0008E3D7BEE526240FBE99A24F19942C00F4D8F5CED526240BF9D9F3DF29942C0D4207134EC52624037D43950F19942C0BA63B14DEA5262400E5BC4C1EF9942C04273428DE7526240EC489AE4EC9942C04B862D87E75262403F47F5E7EC9942C0DA290C80E7526240048B68E0EC9942C0676902A0E55262403F5B62C0ED9942C09B6053AFE3526240964FD5C0F19942C00102000000030000009B6053AFE3526240964FD5C0F19942C0417452A9E3526240D75537CDF19942C0927F37A7E3526240AC7128D1F19942C0010200000007000000927F37A7E3526240AC7128D1F19942C02C29779FE3526240A2CCABDFF19942C07A281B20E2526240DD9CA5BFF29942C02DA814E0E052624072ECEA9FF19942C0E0247266E0526240CBD58F4DF29942C043B40C27DF5262409574DE10F49942C09737634FDB5262408DBADC19F79942C00102000000030000009737634FDB5262408DBADC19F79942C0D75DEA31DB5262403A652431F79942C07D879512DB526240FAED9149F79942C00102000000080000007D879512DB526240FAED9149F79942C0388600E0D8526240277E3100F99942C0ACC8433AD752624027367A90F99942C0B771D586D4526240B504CF73FA9942C011D77B3BD3526240A3C7EF6DFA9942C08B040940D2526240C10EAD5FFA9942C05803EF3FCD526240277E3100F99942C046820420C9526240186D9F9FF39942C001020000000200000046820420C9526240186D9F9FF39942C0D57036C2C7526240A85BD141F29942C0010200000005000000D57036C2C7526240A85BD141F29942C071AE6186C6526240907B5F01F19942C0251D8AA7C3526240FCC1C073EF9942C009FCE1E7BF526240398ABD61EC9942C02A8F5209BF52624037BA7889EB9942C00102000000030000002A8F5209BF52624037BA7889EB9942C080327CFABE52624058BD0D7BEB9942C0E324EAE8BE52624054FD7669EB9942C001020000000A000000E324EAE8BE52624054FD7669EB9942C02B2FF99FBC52624053AAE91FE99942C08C6E1860BA526240142928A0E49942C007FE0120B85262407707C25FDD9942C08D77EC0CB852624018755204DD9942C0EAA5738FB6526240875DCAAFD59942C09149A187B5526240F6A79E16CD9942C05C4DE83FB5526240C2E2CB9FCA9942C01D9D0480B4526240CD3F55E0BF9942C01D9D0480B452624013DD6921B79942C001020000000F0000001D9D0480B452624013DD6921B79942C0F72B5382B4526240690712CAB19942C091D6732DB5526240824CD7B8A39942C07610E099B55262404533AA679C9942C0F66DD27EB552624096027745959942C05F5BE443B5526240265305A3929942C0BB1006F9B4526240B583B641929942C01853FA53B45262403EDD8A0E929942C0BCB77DEAB35262405B66C7FC929942C07702AB34B35262402A60F18A969942C0B0822914B3526240B678C25C9C9942C0A54DD53DB25262407B832F4CA69942C0B365AF2DB252624063F9A9E0A69942C05E5CF45FB152624053EB5800AE9942C096804EF7B0526240DB807456B09942C001020000000400000096804EF7B0526240DB807456B09942C02891E975B05262405768D608B39942C0A68AF381AE526240E645DC52BD9942C00CDD9867AE526240D44A0AF5BD9942C00102000000030000000CDD9867AE526240D44A0AF5BD9942C04138B066AE5262402DF2A1FABD9942C01E8BE95DAE526240F4112D30BE9942C001020000001B0000001E8BE95DAE526240F4112D30BE9942C04BDB0940AD52624018B14F00C59942C0FB7A1920AC526240FC2257A0CC9942C0ECAAF69FAB52624024343800D19942C034153D4BAB526240632BC313D59942C0016C9B3DAB526240335F6FACD59942C0F02EBC37AB52624074345882D69942C0C66AF3FFAA52624053A7A89FDC9942C013EBF93FAC526240828AAA5FE99942C01B125212AD526240E5852AEBED9942C01EBEF15AAE5262406532C115F59942C0ED1C14DEAF526240DE077B6EFC9942C081EDBB7DB15262400E959059079A42C0CC1D47BDB1526240FC993050089A42C0EE04FBAFB35262404B4C61EF0F9A42C041A49531B4526240080FE4EA119A42C0217DEE5FB45262409DB415A0129A42C07FAD0100B652624032970AE01C9A42C0E39DE85FB75262405DC94400269A42C018AE0E80B8526240364B13002D9A42C0922EEC1FBA526240F3AB3940309A42C02E0FE37FBC52624046EC1340319A42C013BF1880BC52624046EC1340319A42C003E0E9DFBF5262400B1C1A60309A42C0A344A6D7C15262406B589DE62E9A42C09CE0F65FC2526240D009A1832E9A42C0E98E0FC4C3526240E24680892E9A42C0010200000053000000E98E0FC4C3526240E24680892E9A42C09B36E334C45262405F06088B2F9A42C0D11B936AC4526240D5085806309A42C04AE4277AC55262401C0B0A83329A42C05FB939F0C552624066F2CD36379A42C05F5A796EC65262401CB85E2E3D9A42C094111780C65262408D3FF61F3E9A42C097F10060C65262406110FD7F419A42C0748E4B66C6526240A2410A9E429A42C053399270C652624082BA922E479A42C0ACAF09C4C6526240C25B316D499A42C0C111EEDFC6526240C8A29F5F4A9A42C0E751F17FC75262409CE337E04E9A42C0F901FEDFC752624026D6F37F589A42C0DEB133E0C7526240BB95CA80589A42C0E1911DC0C75262407D51CC8B5D9A42C0B8150CF8C65262404184132C699A42C065BE28E6C552624072A7CF69719A42C095174FF3C4526240F211E797779A42C01661D4FFC3526240959460167F9A42C010035DFBC2526240C4BF19468B9A42C058288870C2526240FC71FBE5939A42C085E6DFD3C152624053B4CDE8A29A42C0C1D31A39C15262408946D2C9AD9A42C0BB44F5D6C0526240A8120AB6B69A42C0A9F00CBFC05262407E8D2441B89A42C053CDACA5C0526240593B40E6B99A42C032D7B331C052624068EA758BC09A42C0CDE33098BF5262409FE40E9BC89A42C0B323D577BE526240665710B9CF9A42C08D11E4FBBD526240D590B8C7D29A42C066FFF27FBD5262407B25DA9FD59A42C0E057F66EBD526240B094C041D69A42C07FA31D37BC526240CABD65F3DD9A42C0D3A7B0ADBA526240D2F1E20EE59A42C0E089B4E8B85262406AE67FA8EA9A42C03C4272D7B752624078F1D995F19A42C0C6CCF401B7526240F783CB74F99A42C01FCDA2C1B7526240D57A1A8B019B42C0E0A0BDFAB85262405070B1A2069B42C0001E51A1BA5262405890C1E50C9B42C0ED7E15E0BB526240B524F6BF129B42C0169F0260BC526240C4C5F6FF169B42C040BFEFDFBC5262400447B87F1B9B42C0A1CFEC5FBE52624013584AE0209B42C072906B9EBE5262406BB180AE229B42C0A7A32DF8BE5262403AC54F88259B42C006F1811DBF5262403B4ACA822E9B42C0C52F0620BF526240A06B5F402F9B42C0ADED3724BF526240E7A15B54309B42C00F327F3BBF5262407286E28E379B42C0FA87E3AFBF526240B177352F3D9B42C0EB6F09C0BF52624075CF15003E9B42C011B00C60C0526240EF906280449B42C049A01C60C15262400ED363004D9B42C05E3013A0C152624035E44460519B42C05E3013A0C1526240B4E6C75F5A9B42C03DF262BCC1526240ACE9D55B5E9B42C0C0A26CDBC1526240B56B425A639B42C073C009E0C15262402A3410CB669B42C073C009E0C1526240CF7A42C06B9B42C049A01C60C1526240849CF7FF719B42C03BD0F9DFC05262402D3E05C0789B42C01490F63FC05262405900AEBF809B42C000000000C05262402D414640859B42C003E0E9DFBF5262408F2221808A9B42C000000000C05262402DD4F59F909B42C011B00C60C052624015F7C4DF9B9B42C0CDF79D70C0526240AF9BAD179E9B42C0A994E876C0526240F5132928A09B42C0B2A7D370C052624072BF4351A09B42C0DC9FE63FBF5262401DC9E53FA49B42C05DE6CF12BF526240A04BDD3AA49B42C05491651CBE52624064613E0FA49B42C00417D0B0BD5262400573AA6BA39B42C03AFF1B20BD526240A728F27FA29B42C0DEAEF25FBB52624040964FA0999B42C007FE0120B8526240E613C31F8F9B42C07EECE4C2B752624087F71C588E9B42C02B39DD68B652624012B985538B9B42C0D4FCE71FB352624055E2957F889B42C0EA9BEA7FAF526240FEF0F3DF839B42C0593F0B9EAD5262409DE4954F809B42C0 geos-3.4.2/tests/xmltester/tests/ticket/bug398.xml0000644000175000017500000000344412206417146021666 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/398 MULTIPOLYGON (((60.0 6.5105151320986412, 44.0044859469790026 11.6931320480208569, 0.0 25.9507790663861222, 0.0 26.8608278557796467, 0.0 29.8387923019253307, 60.0 10.3985283676378408, 60.0 7.8021345594223774, 60.0000000000000000 6.6570998796460161, 60.0 6.5105151320986412)), ((43.3161197496508308 0.0, 0.0 0.0, 0.0 14.0346133423735822, 0.0 17.9226661292310787, 0.0 21.5874865260243638, 34.0258524396557860 6.8981402622972743, 55.3161197496508308 0.0, 50.0044466166182886 0.0, 43.3161197496508308 0.0)), ((13.4455725323347899 36.0, 60.0 36.0, 60.0 16.7944518298098018, 60.0 16.3644011555093201, 60.0 14.0439960304547569, 2.9187843276549756 36.0, 11.8945390820010992 36.0, 13.4455725323347899 36.0))) POLYGON ((50.0044466166182886 0.0, 0.0 21.5874865260243638, 0.0 35.7392139719321804, 60.0 13.1838946818537934, 60.0 0.0, 50.0044466166182886 0.0)) MULTIPOLYGON (((0 25.950779066386122, 0 26.860827855779647, 0 29.83879230192533, 0 35.73921397193218, 60 13.183894681853793, 60 10.39852836763784, 60 7.802134559422377, 60 6.657099879646016, 60 6.510515132098641, 60 0, 55.31611974965083 0, 50.00444661661829 0, 43.31611974965083 0, 0 0, 0 14.034613342373582, 0 17.92266612923108, 0 21.587486526024364, 0 25.950779066386122), (0 21.587486526024364, 34.025852439655786 6.898140262297274, 34.02585243965579 6.898140262297273, 0 21.587486526024364)), ((13.44557253233479 36, 60 36, 60 16.794451829809802, 60 16.36440115550932, 60 14.043996030454757, 2.9187843276549756 36, 11.8945390820011 36, 13.44557253233479 36))) geos-3.4.2/tests/xmltester/tests/ticket/bug434.xml0000644000175000017500000001145012206417146021651 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/434 com.vividsolutions.jtstest.testrunner.BufferResultMatcher http://trac.osgeo.org/geos/ticket/434 010300000001000000260000000000000012E136C100000000584704C17CCA693DFB9437C15F3458D7B8CA0AC17CCA693DFB9437C15E3458D7B8CA0AC1A15FFC2B329E37C1BBC9994706040BC1A15FFC2B329E37C1BCC9994706040BC10000000005AD37C10000000070BE04C100000000371438C1000000003074FEC0000000004DAF38C100000000A0DFE7C000000000DA3D39C10000000000289DC000000000121639C1000000000005E54000000000900A39C100000000404AF74000000000C33B39C100000000D84A034100000000878538C10000000098A10141C50E55840D0238C1504578023004FF4028952472DBE037C1EFD75A166897FD40B301719AFEDB37C115B828D1D1A5FD40240E3BD05F0537C1FAC38571278CF740322F8AA7A60437C146F1AC8AA08BF7406F06AC4CCD0237C1A29F2ECC947EF74091E37943ACB336C1E9D63E5D7FEBF74000000000B6C435C10000000020F1F840000000000E1E35C100000000209EFA4000000000BCBB33C1000000008815014100000000CAEF33C1000000002032F74000000000EE5134C10000000000F1DB40000000008ADD34C1000000008099CBC0E42825B8ED4F35C13972434F3048EEC079DE4959ABE935C1B7656ADAE51FE0C051400DD809C635C1001FCAB19AC1AA4023302240A30436C144723E9FFB13E0C0A98D3A4CC8A436C1F7F77487DBB2DFC06E7AF552B50036C1D559460AE05EE2C07870019EB07335C1681A197BE5D2F0C0DCC23BB59DA135C1BFEB4186272FFDC014961A1FF69D35C1CDEE1C7F6F09FEC0D4BA81C7E60236C186226939A60305C10FAF8B543D0536C15716FC2B2C0D05C10000000012E136C100000000584704C1 POLYGON ((-1565260.6206011446 111732.66899895086, -1512637.4197541769 87800.91348955338, -1511887.9553205783 87542.9550616941, -1511879.1656611576 87539.07911020475, -1510380.224568009 87022.64683612906, -1508816.2815230151 86762.62982427831, -1507230.8751184365 86766.26668522462, -1487056.6518885682 88501.80293939149, -1425965.3129563173 92682.16829688638, -1425104.6790447247 92780.63793183706, -1382440.6790447247 99644.63793183706, -1380883.552616635 100032.3964705434, -1307581.025805522 125025.53084629907, -1315580.6801167233 98046.05735775629, -1340013.0573368135 33475.88610080863, -1374723.4937759638 -8035.814646773755, -1375540.3966797974 -9173.749061246888, -1399420.6762844694 -48224.22717737771, -1425311.2385910228 -29150.93862345213, -1417736.1160114263 1117.9654269575603, -1417462.389107992 2977.2656135774496, -1417559.9528732277 4854.072719633237, -1418024.990767285 6674.969026049172, -1418839.3112448766 8368.723955607617, -1419971.0593796924 9869.080500222728, -1421375.9629786243 11117.347090073301, -1422999.064439784 12064.693514782575, -1424776.8706067775 12674.06108384778, -1426639.8365203394 12921.612303871138, -1428515.0859069047 12797.663363516955, -1430329.261982915 12307.062948861332, -1432011.397055914 11469.00257047849, -1433495.6886681858 10316.265821967412, -1434724.073684598 8893.945937735312, -1435648.499630413 7257.681817144551, -1449143.4561333996 -23354.810616285424, -1483867.7348210595 -22958.05034354897, -1485776.6295743138 -23129.542180347664, -1487612.279399581 -23680.612364703436, -1489300.0024860846 -24588.84108720258, -1490771.1352932872 -25817.277855075656, -1491965.8260670996 -27315.944790741232, -1492835.4698562517 -29023.869938128897, -1493344.6859623056 -30871.56785348871, -1493472.7573724887 -32783.86656001538, -1493214.473613273 -34682.965854105925, -1492580.3427339422 -36491.60253873035, -1491596.1637957809 -38136.19380915876, -1490301.9772597842 -39549.830905140276, -1488750.4359754561 -40675.00123540831, -1487004.6630455877 -41465.928227252676, -1485135.683717921 -41890.43370642135, -1446007.6029769813 -46700.584262917684, -1416423.8835601667 -72339.85858975082, -1426885.4130973895 -117389.06894304338, -1427130.3703204703 -119697.9017421352, -1426824.687619137 -121878.75478429934, -1448107.0131300709 -162332.10613743018, -1498347.8261209533 -156680.5537782484, -1500189.4513298413 -156653.02325111572, -1502001.7906441302 -156981.3029334265, -1503716.7500390832 -157653.05855387077, -1505269.8942919231 -158643.0506092964, -1506602.8679708943 -159914.08267462972, -1539977.4973322283 -198577.71596101607, -1542144.8124445549 -169234.09042439144, -1542547.1855037627 -167113.735032329, -1543417.6618736198 -165138.87251636875, -1569723.593278455 -120135.5955899725, -1609322.6038058014 -44486.34486061129, -1610234.1160785698 -43067.65041476705, -1643974.2956479487 411.9052427339163, -1634783.2308133794 40946.81156439988, -1634563.0113663338 42514.09863767898, -1631617.0113663338 94862.09863767898, -1631788.403045867 97268.87409831762, -1641289.145133498 144525.1654491555, -1610591.364441635 135570.87839490557, -1578279.3072280572 118874.10762665431, -1570270.8915449486 113373.9089381907, -1568640.3591467661 112475.31692187724, -1566865.9081669166 111911.91011199991, -1565260.6206011446 111732.66899895086)) geos-3.4.2/tests/xmltester/tests/ticket/bug459.xml0000644000175000017500000000312412206417146021657 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/459 0102000000080000003C0AD7E32D4E3A4152B81E250A4452412085EB91284A3A417A14AE2719445241285C8F42354A3A41A4703D6A1E445241CCCCCC0C474A3A415C8FC2851E445241C4F5289C4B4A3A415C8FC2C52B445241BE08DEAE534E3A41B1B518AB1F44524100000000604E3A419A9999C9064452413C0AD7E32D4E3A4152B81E250A445241 010200000009000000B89C2EFE364A3A41DFC087291F445241545C8F42354A3A41A4703D6A1E4452418CEC6D6F354A3A41FE7E44D31D44524136C80FA4394A3A412D7F89121D445241409B06043D4A3A415860C1CC1C445241360D6849404A3A4136B46EC91C445241FC25CB4B474A3A41B72FD41F1D445241CDCCCC0C474A3A415C8FC2851E445241181E3474434A3A4116CE6F471F445241 0105000000060000000102000000040000003C0AD7E32D4E3A4152B81E250A4452412085EB91284A3A417A14AE2719445241285C8F42354A3A41A4703D6A1E445241545C8F42354A3A41A4703D6A1E445241010200000002000000545C8F42354A3A41A4703D6A1E445241CDCCCC0C474A3A415C8FC2851E445241010200000005000000CDCCCC0C474A3A415C8FC2851E445241C4F5289C4B4A3A415C8FC2C52B445241BE08DEAE534E3A41B1B518AB1F44524100000000604E3A419A9999C9064452413C0AD7E32D4E3A4152B81E250A445241010200000002000000B89C2EFE364A3A41DFC087291F445241545C8F42354A3A41A4703D6A1E445241010200000007000000545C8F42354A3A41A4703D6A1E4452418CEC6D6F354A3A41FE7E44D31D44524136C80FA4394A3A412D7F89121D445241409B06043D4A3A415860C1CC1C445241360D6849404A3A4136B46EC91C445241FC25CB4B474A3A41B72FD41F1D445241CDCCCC0C474A3A415C8FC2851E445241010200000002000000CDCCCC0C474A3A415C8FC2851E445241181E3474434A3A4116CE6F471F445241 geos-3.4.2/tests/xmltester/tests/ticket/bug488.xml0000644000175000017500000002301212206417146021657 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/488 TopologyException unioning two valid polygons. Cause is very high precision causing almost-coincident line segments. This causes robustness failures in noding in JTS 1.12. Reduced version. 01060000000100000001030000000100000005000000DF52A140EC490340251EBD88237048404F7F9BC7814D0340D9C5653E1270484041B01B9F1C4C0340A9FB014212704840002EF0471C4C0340EC39718803704840DF52A140EC490340251EBD8823704840 01060000000200000001030000000100000004000000EF54EBB0384B03403FC50B78F36F484040B01B9F1C4C0340A9FB0142127048404F7F9BC7814D0340D9C5653E12704840EF54EBB0384B03403FC50B78F36F4840010300000001000000040000008D246CEE344E034016CFC66D597048404F7F9BC7814D0340D9C5653E1270484041B01B9F1C4C0340A9FB0142127048408D246CEE344E034016CFC66D59704840 01030000000100000007000000DF52A140EC490340251EBD8823704840E66E8AF0484C034079579A23187048408D246CEE344E034016CFC66D597048404F7F9BC7814D0340D9C5653E12704840EF54EBB0384B03403FC50B78F36F484032DCBFEACF4B034080B385E507704840DF52A140EC490340251EBD8823704840 TopologyException unioning two valid polygons. Cause is very high precision causing almost-coincident line segments. This causes robustness failures in noding in JTS 1.12. Full version, using UnaryUnion. 01070000000800000001030000000100000017000000655E3A27EC4703406906F11FE66F48407285047CEC4703400D8482D9F46F484029EB1855874603407741FDDCF46F4840409518A987460340F4658E9603704840B888AA59BD43034025CD6A9D03704840D8D514ACBD4303404A9AFB5612704840806492835842034008445D5A127048408858D22659420340B8D07DCD2F704840F888EA50BE4303404E231CCA2F704840FCEE55A3BE43034025DFAB833E704840AFA238CE23450340B2D241803E7048401F486F21244503408B31D1394D704840CCCD75A45349034040D7602F4D7048406A9947F952490340C5C941BC2F704840F56B8977824D03401F3486B12F7048404F7F9BC7814D0340D9C5653E1270484041B01B9F1C4C0340A9FB014212704840002EF0471C4C0340EC397188037048401ADA3A20B74A0340A210058C037048402798DAC9B64A0340E1F173D2F46F48406022AF17814D03403BEB43CBF46F4840CB89B9BF804D03405375B211E66F4840655E3A27EC4703406906F11FE66F4840010300000002000000160000005A59B2EB13530340E0CCA41CAB6F48405AC5D14614530340D2A637D6B96F4840E03957FF495003403886AADDB96F48400F5AE1584A50034036093D97C86F48406384CF0F804D034067788E9EC86F48404F7F9BC7814D0340D9C5653E1270484041B01B9F1C4C0340A9FB0142127048408A9547F61C4C0340516292FB2070484078A940254D5003408D53C4633E7048402D5DCE7E4D500340E8A2531D4D7048400E3B22D617530340FC9AE0154D704840D919463118530340228B6FCF5B70484063CDDE9B775B0340CD31DC716A704840F24C3EADAA580340574EC66603704840169AEFD40F5A034042D4DE620370484086DEF9DC735B03402ED93A32D76F4840F92E99273E5E03405720422AD76F4840F0AB1DAC07610340ED7A03AFB96F484068C81149076103404DB670F5AA6F48405AC22326A25F0340CEF481F9AA6F484025CD6488A25F0340A0BB14B3B96F48405A59B2EB13530340E0CCA41CAB6F484005000000BCF099184C500340C3421437127048403F7326724C50034076A3A4F020704840DF8DDC48E74E0340949551F42070484070EA1AF0E64E0340E032C13A12704840BCF099184C500340C3421437127048400103000000010000000500000016D36D62BC4303405943B670D76F48405807D7B4BC430340A921482AE66F48402E83F8DA214503405620DE26E66F48406F73C48721450340E3434C6DD76F484016D36D62BC4303405943B670D76F4840010300000002000000170000006A9947F952490340C5C941BC2F704840CCCD75A45349034040D7602F4D704840167F1C4D89460340FFC55E364D704840C1651EA189460340D4C7EDEF5B704840F71F96CDEE4703402BFD72EC5B704840AB496322EF470340F0A101A66A7048402387A54F5449034021787EA26A704840AAF53DA554490340CABF0C5C7970484060B64AD3B94A0340CD368158797048408A6BAE29BA4A03405C210F1288704840570D33B6E94E0340C9503A078870484009A86E5DE94E03401F6CAC4D797048402CD0AB71485703403F00213779704840E474261448570340A4CC927D6A7048402B536441AD580340F4A0B3796A704840947E14E3AC5803404A1425C05B704840D919463118530340228B6FCF5B7048400E3B22D617530340FC9AE0154D7048402D5DCE7E4D500340E8A2531D4D70484077A940254D5003408D53C4633E7048403E0361FAE74E0340AC4971673E70484023969EA1E74E0340329DE1AD2F7048406A9947F952490340C5C941BC2F704840050000002EF880CF824D034094E2156B3E70484057E87827834D0340EC35A5244D7048409097CDFB1D4C0340957341284D7048403089A0A41D4C0340491EB26E3E7048402EF880CF824D034094E2156B3E70484001030000000100000015000000F2AB10721F3E0340743421EB496E484097F444C11F3E034025AEBCA4586E4840CCF603D2843F0340765174A1586E4840835D0322853F0340C36E0F5B676E484032977910203E034040CD575E676E4840C193AE5F203E0340B791F217766E4840131F0372853F03406E31AA14766E4840803B03C2853F0340759944CE846E484078CC40E84F42034052BF9AC7846E4840EA326D8B504203401D78CE3AA26E48403A6ED4B41A450340E2230334A26E4840477DA8611A4503408878697A936E4840FEC590757F4603403745F776936E4840B66C9A217F4603400C415DBD846E4840458FB734E4470340F1B2E2B9846E4840E76F368BE34703406B9EAD46676E484031E12668194503406C569A4D676E4840156AFC14194503407040FF93586E4840B1D83E04B4430340A00F6997586E48403A83DFB1B34303402A9DCDDD496E4840F2AB10721F3E0340743421EB496E48400103000000020000000F000000C039DB99564203405A14F300BA6F484021D5163D57420340B6E51774D76F48408DB20FCD273E0340559E0A7ED76F4840676279928D3F0340BA7FE5EDF46F484016998B6B283E03406C0E2EF1F46F4840B5E7080A293E03404612506412704840D8D514ACBD4303404A9AFB5612704840B888AA59BD43034025CD6A9D037048403F9518A987460340F4658E9603704840655E3A27EC4703406906F11FE66F4840CA89B9BF804D03405375B211E66F4840380346EB1A4C034069A42AA2C86F4840C0D831A25049034034E549A9C86F4840F7F89D4C504903406558B7EFB96F4840C039DB99564203405A14F300BA6F4840050000006E73C48721450340E3434C6DD76F48402E83F8DA214503405620DE26E66F48405807D7B4BC430340A921482AE66F484016D36D62BC4303405943B670D76F48406E73C48721450340E3434C6DD76F4840010300000001000000050000009351D4474949034027C85FB6846E48406F38609D4949034086C8F96F936E48405C6047B1AE4A0340227F6E6C936E4840B7B2F05AAE4A0340B480D4B2846E48409351D4474949034027C85FB6846E4840010300000001000000050000002798DAC9B64A0340E1F173D2F46F484040B01B9F1C4C0340A9FB0142127048404F7F9BC7814D0340D9C5653E127048405F22AF17814D03403BEB43CBF46F48402798DAC9B64A0340E1F173D2F46F4840 01060000000300000001030000000100000015000000F2AB10721F3E0340743421EB496E484097F444C11F3E034025AEBCA4586E4840CCF603D2843F0340765174A1586E4840835D0322853F0340C36E0F5B676E484032977910203E034040CD575E676E4840C193AE5F203E0340B791F217766E4840131F0372853F03406E31AA14766E4840803B03C2853F0340759944CE846E484078CC40E84F42034052BF9AC7846E4840EA326D8B504203401D78CE3AA26E48403A6ED4B41A450340E2230334A26E4840477DA8611A4503408878697A936E4840FEC590757F4603403745F776936E4840B66C9A217F4603400C415DBD846E4840458FB734E4470340F1B2E2B9846E4840E76F368BE34703406B9EAD46676E484031E12668194503406C569A4D676E4840156AFC14194503407040FF93586E4840B1D83E04B4430340A00F6997586E48403A83DFB1B34303402A9DCDDD496E4840F2AB10721F3E0340743421EB496E4840010300000001000000050000009351D4474949034027C85FB6846E48406F38609D4949034086C8F96F936E48405C6047B1AE4A0340227F6E6C936E4840B7B2F05AAE4A0340B480D4B2846E48409351D4474949034027C85FB6846E484001030000000800000033000000C039DB99564203405A14F300BA6F484021D5163D57420340B6E51774D76F48408DB20FCD273E0340559E0A7ED76F4840676279928D3F0340BA7FE5EDF46F484016998B6B283E03406C0E2EF1F46F4840B5E7080A293E03404612506412704840D8D514ACBD4303404A9AFB5612704840806492835842034008445D5A127048408858D22659420340B8D07DCD2F704840F888EA50BE4303404E231CCA2F704840FCEE55A3BE43034025DFAB833E704840AFA238CE23450340B2D241803E7048401F486F21244503408B31D1394D704840CCCD75A45349034040D7602F4D704840167F1C4D89460340FFC55E364D704840C1651EA189460340D4C7EDEF5B704840F71F96CDEE4703402BFD72EC5B704840AB496322EF470340F0A101A66A7048402387A54F5449034021787EA26A704840AAF53DA554490340CABF0C5C7970484060B64AD3B94A0340CD368158797048408A6BAE29BA4A03405C210F1288704840570D33B6E94E0340C9503A078870484009A86E5DE94E03401F6CAC4D797048402CD0AB71485703403F00213779704840E474261448570340A4CC927D6A7048402B536441AD580340F4A0B3796A7048407B7FF321AD5803401C780B916570484063CDDE9B775B0340CD31DC716A704840F24C3EADAA580340574EC66603704840169AEFD40F5A034042D4DE620370484086DEF9DC735B03402ED93A32D76F4840F92E99273E5E03405720422AD76F4840F0AB1DAC07610340ED7A03AFB96F484068C81149076103404DB670F5AA6F48405AC22326A25F0340CEF481F9AA6F484025CD6488A25F0340A0BB14B3B96F48405A59B2EB13530340E0CCA41CAB6F48405AC5D14614530340D2A637D6B96F4840E03957FF495003403886AADDB96F48400F5AE1584A50034036093D97C86F48406384CF0F804D034067788E9EC86F48404F7F9BC7814D0340D9C5653E127048406022AF17814D03403BEB43CBF46F4840CB89B9BF804D03405375B211E66F4840655E3A27EC4703406906F11FE66F4840CA89B9BF804D03405375B211E66F4840380346EB1A4C034069A42AA2C86F4840C0D831A25049034034E549A9C86F4840F7F89D4C504903406558B7EFB96F4840C039DB99564203405A14F300BA6F484004000000655E3A27EC4703406906F11FE66F48407285047CEC4703400D8482D9F46F4840485227E839470340C4E33FDBF46F4840655E3A27EC4703406906F11FE66F484004000000B888AA59BD43034025CD6A9D037048403F9518A987460340F4658E9603704840409518A987460340F4658E9603704840B888AA59BD43034025CD6A9D03704840040000002798DAC9B64A0340E1F173D2F46F4840EF4C7DB4694B03403D243B8A037048401ADA3A20B74A0340A210058C037048402798DAC9B64A0340E1F173D2F46F48400400000024BB365A824D0340CBF1F0C82A7048402AB8160E354E0340DF9EADAF2F70484002218977824D034056A879B12F70484024BB365A824D0340CBF1F0C82A70484004000000925A34BFE74E034062EC56963470484077A940254D5003408D53C4633E7048403E0361FAE74E0340AC4971673E704840925A34BFE74E034062EC56963470484005000000BCF099184C500340C3421437127048403F7326724C50034076A3A4F020704840DF8DDC48E74E0340949551F42070484070EA1AF0E64E0340E032C13A12704840BCF099184C500340C342143712704840050000002EF880CF824D034094E2156B3E70484057E87827834D0340EC35A5244D7048409097CDFB1D4C0340957341284D7048403089A0A41D4C0340491EB26E3E7048402EF880CF824D034094E2156B3E704840 geos-3.4.2/tests/xmltester/tests/ticket/bug527.xml0000644000175000017500000000153212206417146021654 0ustar frankiefrankie Bogus noding http://trac.osgeo.org/geos/ticket/527 LINESTRING( 1725063 4819121, 1725064.14183882 4819094.70208557, 1725064.13656044 4819094.70235069, 1725064.14210362 4819094.70227252, 1725064.13656043 4819094.70235069, 1725063 4819121 ) MULTILINESTRING((1725063 4819121,1725064.14183054 4819094.70227637),(1725064.14183054 4819094.70227637,1725064.14183882 4819094.70208557,1725064.13656044 4819094.70235069),(1725064.13656044 4819094.70235069,1725064.14183054 4819094.70227637),(1725064.14183054 4819094.70227637,1725064.14210362 4819094.70227252,1725064.14183054 4819094.70227637),(1725064.13656044 4819094.70235069,1725064.13656043 4819094.70235069,1725063 4819121)) geos-3.4.2/tests/xmltester/tests/ticket/bug582.xml0000644000175000017500000000041212206417146021651 0ustar frankiefrankie GC - overlapping polygons MULTIPOLYGON(EMPTY,((0 0,1 0,1 1,0 1, 0 0))) POINT (0.5 0.5) geos-3.4.2/tests/xmltester/tests/ticket/bug586.xml0000644000175000017500000004357512206417146021676 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/586 01060000000100000001030000000100000007000000FC9C4034A1C957C029FEFB19D9684A40F1502ADE523F56C061588FDD786C4C40417FBC44E19552C0D08D9DDB067C464089A1316892B753C02DCD95C08B6E4540BB379A190BBD54C058F25D2DADFE4440314E4AB97BC857C0C042B6CF69B74840FC9C4034A1C957C029FEFB19D9684A40 0102000020E61000001A0000009D11A5BDC19754C005172B6A305D454008944DB9C29754C0A1B94E232D5D454044FAEDEBC09754C07099D365315D45409D11A5BDC19754C05A0D897B2C5D454012DA722EC59754C07099D365315D4540793BC269C19754C07EE36BCF2C5D454008944DB9C29754C0936FB6B9315D4540C0E78711C29754C03012DA722E5D454020240B98C09754C0459E245D335D4540E4BD6A65C29754C0697407B1335D45409D11A5BDC19754C03012DA722E5D45408481E7DEC39754C0B745990D325D4540793BC269C19754C03012DA722E5D45402B6A300DC39754C04CC3F011315D454020240B98C09754C0697407B1335D454008944DB9C29754C0DA1B7C61325D454020240B98C09754C0A1B94E232D5D45402B6A300DC39754C0B745990D325D45409D11A5BDC19754C0C58F31772D5D4540D97745F0BF9754C0B745990D325D4540C0E78711C29754C04CC3F011315D4540793BC269C19754C01361C3D32B5D4540FD4D2844C09754C0BE6A65C22F5D454008944DB9C29754C0B745990D325D454020240B98C09754C03737A6272C5D4540C0E78711C29754C077BE9F1A2F5D4540 0105000000C6000000010200000003000000A72D26D9C09754C07C4791C32D5D4540FD4D2844C09754C0BE6A65C22F5D45401D9292AFC09754C06B77A626305D4540010200000003000000B336AFDEC09754C0C6DE96B02D5D454020240B98C09754C0A1B94E232D5D4540A72D26D9C09754C07C4791C32D5D4540010200000003000000D1DF4401C19754C074634670335D454020240B98C09754C0697407B1335D4540F1DB3BDBC09754C0B5055C69335D45400102000000030000000CE30A0DC19754C00FB5A5112D5D454020240B98C09754C03737A6272C5D4540AC7885FEC09754C04D216F432D5D45400102000000030000006E25D927C19754C06944CB7D315D4540D97745F0BF9754C0B745990D325D45401D9292AFC09754C06B77A626305D45400102000000030000006E25D927C19754C06944CB7D315D454020240B98C09754C0459E245D335D4540F1DB3BDBC09754C0B5055C69335D4540010200000003000000ADF7A63BC19754C0652B64A9305D454044FAEDEBC09754C07099D365315D4540C8F3D611C19754C0E3C05D82305D4540010200000003000000C5B7DC8EC19754C0E54297FC2C5D4540793BC269C19754C01361C3D32B5D45400CE30A0DC19754C00FB5A5112D5D4540010200000003000000FDF7C694C19754C08EA6BD702D5D4540793BC269C19754C07EE36BCF2C5D4540C5B7DC8EC19754C0E54297FC2C5D454001020000000300000027C48C03C29754C0F6A517A2305D4540C0E78711C29754C04CC3F011315D4540C4995FCDC19754C099D36531315D45400102000000030000004D93640BC29754C0CFD54F872E5D45409D11A5BDC19754C0C58F31772D5D4540798753A6C19754C08EC08CB22D5D45400102000000030000008EE0D019C29754C0EEED469C2E5D4540C0E78711C29754C03012DA722E5D45404D93640BC29754C0CFD54F872E5D4540010200000003000000DE327644C29754C0C71C63A9325D4540E4BD6A65C29754C0697407B1335D4540D1DF4401C19754C074634670335D4540010200000003000000AD4CEB75C29754C0C35E27FC2F5D45408481E7DEC39754C0B745990D325D4540A328DC48C29754C07E60725E2F5D4540010200000003000000B1406982C29754C067C45DDA315D454008944DB9C29754C0DA1B7C61325D4540DE327644C29754C0C71C63A9325D454001020000000300000036D7BD86C29754C01103D19A2D5D45409D11A5BDC19754C05A0D897B2C5D4540E060DFA3C19754C057322B162D5D4540010200000003000000E707068FC29754C06C5F8498315D454008944DB9C29754C0B745990D325D4540B1406982C29754C067C45DDA315D45400102000000030000001FA80991C29754C0A77686A92D5D454008944DB9C29754C0A1B94E232D5D454036D7BD86C29754C01103D19A2D5D45400102000000030000001FA80991C29754C0A77686A92D5D454012DA722EC59754C07099D365315D4540EA20F971C29754C062E412112E5D4540010200000003000000E0C165ACC29754C088542F79315D454008944DB9C29754C0936FB6B9315D45401E5D0CA9C29754C023E2C17C315D4540010200000003000000A9DB14D6C29754C0AAD2B84C315D45402B6A300DC39754C0B745990D325D4540456C20BBC29754C0EB497969315D4540010200000003000000A9DB14D6C29754C0AAD2B84C315D45402B6A300DC39754C04CC3F011315D454050C7BC88C29754C04F8B043E305D4540010200000002000000B336AFDEC09754C0C6DE96B02D5D4540A72D26D9C09754C07C4791C32D5D4540010200000002000000AC7885FEC09754C04D216F432D5D4540B336AFDEC09754C0C6DE96B02D5D4540010200000002000000D1DF4401C19754C074634670335D4540F1DB3BDBC09754C0B5055C69335D45400102000000020000000CE30A0DC19754C00FB5A5112D5D4540AC7885FEC09754C04D216F432D5D4540010200000002000000C8F3D611C19754C0E3C05D82305D45401D9292AFC09754C06B77A626305D4540010200000002000000ADF7A63BC19754C0652B64A9305D4540C8F3D611C19754C0E3C05D82305D454001020000000200000036EC0E3EC19754C04992F5BB2E5D45401D9292AFC09754C06B77A626305D454001020000000200000036EC0E3EC19754C04992F5BB2E5D4540A72D26D9C09754C07C4791C32D5D4540010200000002000000DF48EA4EC19754C01E030D912E5D4540B336AFDEC09754C0C6DE96B02D5D4540010200000002000000DF48EA4EC19754C01E030D912E5D454036EC0E3EC19754C04992F5BB2E5D454001020000000200000010E96754C19754C0A600F8F22E5D4540C8F3D611C19754C0E3C05D82305D454001020000000200000010E96754C19754C0A600F8F22E5D454036EC0E3EC19754C04992F5BB2E5D45400102000000020000005C55F65DC19754C057FA69C9305D45406E25D927C19754C06944CB7D315D45400102000000020000005C55F65DC19754C057FA69C9305D4540ADF7A63BC19754C0652B64A9305D4540010200000002000000B5E0455FC19754C0CA32C4B12E5D4540DF48EA4EC19754C01E030D912E5D4540010200000002000000B5E0455FC19754C0CA32C4B12E5D454010E96754C19754C0A600F8F22E5D45400102000000020000006663CC63C19754C063BFE45B2E5D4540AC7885FEC09754C04D216F432D5D45400102000000020000006663CC63C19754C063BFE45B2E5D4540DF48EA4EC19754C01E030D912E5D4540010200000002000000793BC269C19754C03012DA722E5D4540B5E0455FC19754C0CA32C4B12E5D4540010200000002000000C79B7E6AC19754C0E8D06F6E2E5D45406663CC63C19754C063BFE45B2E5D4540010200000002000000C79B7E6AC19754C0E8D06F6E2E5D4540793BC269C19754C03012DA722E5D4540010200000002000000526EB66EC19754C0C9181E7A2E5D4540793BC269C19754C03012DA722E5D4540010200000002000000526EB66EC19754C0C9181E7A2E5D4540C79B7E6AC19754C0E8D06F6E2E5D4540010200000002000000CD0C476FC19754C0C094AE7B2E5D4540793BC269C19754C03012DA722E5D4540010200000002000000CD0C476FC19754C0C094AE7B2E5D4540526EB66EC19754C0C9181E7A2E5D454001020000000200000067DECB74C19754C09F40A0302E5D45406663CC63C19754C063BFE45B2E5D454001020000000200000067DECB74C19754C09F40A0302E5D4540C79B7E6AC19754C0E8D06F6E2E5D454001020000000200000002F1BA7EC19754C0FAD005F52D5D45400CE30A0DC19754C00FB5A5112D5D454001020000000200000002F1BA7EC19754C0FAD005F52D5D454067DECB74C19754C09F40A0302E5D45400102000000020000003EAD4786C19754C071491F042E5D454067DECB74C19754C09F40A0302E5D45400102000000020000003EAD4786C19754C071491F042E5D454002F1BA7EC19754C0FAD005F52D5D4540010200000002000000FDF7C694C19754C08EA6BD702D5D454002F1BA7EC19754C0FAD005F52D5D45400102000000020000002691B199C19754C0950F3E532D5D4540C5B7DC8EC19754C0E54297FC2C5D45400102000000020000002691B199C19754C0950F3E532D5D4540FDF7C694C19754C08EA6BD702D5D4540010200000002000000D34324A3C19754C0B4A5C7B42F5D4540ADF7A63BC19754C0652B64A9305D4540010200000002000000D34324A3C19754C0B4A5C7B42F5D454010E96754C19754C0A600F8F22E5D4540010200000002000000E060DFA3C19754C057322B162D5D4540C5B7DC8EC19754C0E54297FC2C5D4540010200000002000000E060DFA3C19754C057322B162D5D45402691B199C19754C0950F3E532D5D4540010200000002000000BBF0F8A4C19754C0240B79AD2D5D4540FDF7C694C19754C08EA6BD702D5D4540010200000002000000BBF0F8A4C19754C0240B79AD2D5D45402691B199C19754C0950F3E532D5D454001020000000200000028D9C7A5C19754C0FA4DF0B32D5D45403EAD4786C19754C071491F042E5D454001020000000200000028D9C7A5C19754C0FA4DF0B32D5D4540BBF0F8A4C19754C0240B79AD2D5D4540010200000002000000798753A6C19754C08EC08CB22D5D4540BBF0F8A4C19754C0240B79AD2D5D4540010200000002000000798753A6C19754C08EC08CB22D5D454028D9C7A5C19754C0FA4DF0B32D5D45400102000000020000009FFF15ABC19754C09EC255C82F5D45405C55F65DC19754C057FA69C9305D45400102000000020000009FFF15ABC19754C09EC255C82F5D4540D34324A3C19754C0B4A5C7B42F5D45400102000000020000009D11A5BDC19754C03012DA722E5D45403EAD4786C19754C071491F042E5D45400102000000020000009D11A5BDC19754C03012DA722E5D454028D9C7A5C19754C0FA4DF0B32D5D45400102000000020000002A7664BFC19754C0B55D01722F5D4540B5E0455FC19754C0CA32C4B12E5D45400102000000020000002A7664BFC19754C0B55D01722F5D4540D34324A3C19754C0B4A5C7B42F5D4540010200000002000000FF3EE3C2C19754C05FEFFE782F5D45409FFF15ABC19754C09EC255C82F5D4540010200000002000000FF3EE3C2C19754C05FEFFE782F5D45402A7664BFC19754C0B55D01722F5D4540010200000002000000D6BB28C4C19754C0C615BD662F5D4540CD0C476FC19754C0C094AE7B2E5D4540010200000002000000D6BB28C4C19754C0C615BD662F5D45402A7664BFC19754C0B55D01722F5D45400102000000020000001DD474C6C19754C0CBA8196D2F5D4540FF3EE3C2C19754C05FEFFE782F5D45400102000000020000001DD474C6C19754C0CBA8196D2F5D4540D6BB28C4C19754C0C615BD662F5D4540010200000002000000C4995FCDC19754C099D36531315D45406E25D927C19754C06944CB7D315D4540010200000002000000C4995FCDC19754C099D36531315D45405C55F65DC19754C057FA69C9305D454001020000000200000057F379D0C19754C0012081092F5D4540526EB66EC19754C0C9181E7A2E5D454001020000000200000057F379D0C19754C0012081092F5D45409D11A5BDC19754C03012DA722E5D45400102000000020000006F39B0D1C19754C0C43C5B27305D45409FFF15ABC19754C09EC255C82F5D45400102000000020000006F39B0D1C19754C0C43C5B27305D45409D11A5BDC19754C005172B6A305D454001020000000200000026C79DD2C19754C0892991442F5D4540D6BB28C4C19754C0C615BD662F5D454001020000000200000026C79DD2C19754C0892991442F5D45401DD474C6C19754C0CBA8196D2F5D454001020000000200000026C79DD2C19754C077BE9F1A2F5D4540CD0C476FC19754C0C094AE7B2E5D454001020000000200000026C79DD2C19754C077BE9F1A2F5D454057F379D0C19754C0012081092F5D45400102000000020000007E3251D6C19754C03B193B382F5D454026C79DD2C19754C0892991442F5D45400102000000020000007E3251D6C19754C03B193B382F5D454026C79DD2C19754C077BE9F1A2F5D454001020000000200000023D8A9D6C19754C0F146003B2F5D454026C79DD2C19754C0892991442F5D454001020000000200000023D8A9D6C19754C0F146003B2F5D45407E3251D6C19754C03B193B382F5D454001020000000200000016481EDBC19754C096263A282F5D454026C79DD2C19754C077BE9F1A2F5D454001020000000200000016481EDBC19754C096263A282F5D45407E3251D6C19754C03B193B382F5D454001020000000200000084C232DDC19754C0901D8E2B2F5D454023D8A9D6C19754C0F146003B2F5D454001020000000200000084C232DDC19754C0901D8E2B2F5D454016481EDBC19754C096263A282F5D4540010200000002000000F36444DEC19754C0861BBB1D2F5D454057F379D0C19754C0012081092F5D4540010200000002000000F36444DEC19754C0861BBB1D2F5D454016481EDBC19754C096263A282F5D4540010200000002000000DE0033DFC19754C01D739EB12F5D4540FF3EE3C2C19754C05FEFFE782F5D4540010200000002000000DE0033DFC19754C01D739EB12F5D45401DD474C6C19754C0CBA8196D2F5D4540010200000002000000B77C37E1C19754C0E6930E222F5D454084C232DDC19754C0901D8E2B2F5D4540010200000002000000B77C37E1C19754C0E6930E222F5D4540F36444DEC19754C0861BBB1D2F5D4540010200000002000000AF7C96E7C19754C0BE6A65C22F5D454023D8A9D6C19754C0F146003B2F5D4540010200000002000000AF7C96E7C19754C0BE6A65C22F5D4540DE0033DFC19754C01D739EB12F5D4540010200000002000000394BD2E8C19754C084DE43CC2F5D4540DE0033DFC19754C01D739EB12F5D4540010200000002000000394BD2E8C19754C084DE43CC2F5D4540AF7C96E7C19754C0BE6A65C22F5D45400102000000020000007D190EEAC19754C0BC5122D62F5D45406F39B0D1C19754C0C43C5B27305D45400102000000020000007D190EEAC19754C0BC5122D62F5D4540394BD2E8C19754C084DE43CC2F5D45400102000000020000007CCA1CEBC19754C0EF039CD22F5D4540394BD2E8C19754C084DE43CC2F5D45400102000000020000007CCA1CEBC19754C0EF039CD22F5D45407D190EEAC19754C0BC5122D62F5D454001020000000200000011AAD4ECC19754C082C5E1CC2F5D4540AF7C96E7C19754C0BE6A65C22F5D454001020000000200000011AAD4ECC19754C082C5E1CC2F5D45407CCA1CEBC19754C0EF039CD22F5D4540010200000002000000D0879AF0C19754C0900117C92E5D4540798753A6C19754C08EC08CB22D5D4540010200000002000000D0879AF0C19754C0900117C92E5D45409D11A5BDC19754C03012DA722E5D454001020000000200000073D712F2C19754C0DC9DB5DB2E5D45409D11A5BDC19754C03012DA722E5D454001020000000200000073D712F2C19754C0DC9DB5DB2E5D4540F36444DEC19754C0861BBB1D2F5D4540010200000002000000FC8CECF3C19754C0B5958AD52E5D4540D0879AF0C19754C0900117C92E5D4540010200000002000000FC8CECF3C19754C0B5958AD52E5D454073D712F2C19754C0DC9DB5DB2E5D4540010200000002000000299548F5C19754C0D27A02D12E5D4540D0879AF0C19754C0900117C92E5D4540010200000002000000299548F5C19754C0D27A02D12E5D4540FC8CECF3C19754C0B5958AD52E5D4540010200000002000000636910F9C19754C0BCC1B0E92E5D4540B77C37E1C19754C0E6930E222F5D4540010200000002000000636910F9C19754C0BCC1B0E92E5D454073D712F2C19754C0DC9DB5DB2E5D4540010200000002000000200035F9C19754C06B455AE92E5D4540FC8CECF3C19754C0B5958AD52E5D4540010200000002000000200035F9C19754C06B455AE92E5D4540636910F9C19754C0BCC1B0E92E5D4540010200000002000000C73C90F9C19754C08368B0EA2E5D4540636910F9C19754C0BCC1B0E92E5D4540010200000002000000C73C90F9C19754C08368B0EA2E5D4540200035F9C19754C06B455AE92E5D4540010200000002000000F95F92FDC19754C0A13409DF2E5D4540299548F5C19754C0D27A02D12E5D4540010200000002000000F95F92FDC19754C0A13409DF2E5D4540200035F9C19754C06B455AE92E5D454001020000000200000027C48C03C29754C0F6A517A2305D45406F39B0D1C19754C0C43C5B27305D454001020000000200000027C48C03C29754C0F6A517A2305D45407D190EEAC19754C0BC5122D62F5D4540010200000002000000304D7608C29754C01BFBC6702F5D454084C232DDC19754C0901D8E2B2F5D4540010200000002000000304D7608C29754C01BFBC6702F5D454011AAD4ECC19754C082C5E1CC2F5D45400102000000020000004D93640BC29754C0CFD54F872E5D4540299548F5C19754C0D27A02D12E5D4540010200000002000000E3DBDE0CC29754C0CF1F15622F5D4540B77C37E1C19754C0E6930E222F5D4540010200000002000000E3DBDE0CC29754C0CF1F15622F5D4540304D7608C29754C01BFBC6702F5D4540010200000002000000C0E78711C29754C077BE9F1A2F5D4540C73C90F9C19754C08368B0EA2E5D4540010200000002000000FF318113C29754C03A00F84B2F5D4540C73C90F9C19754C08368B0EA2E5D4540010200000002000000FF318113C29754C03A00F84B2F5D4540E3DBDE0CC29754C0CF1F15622F5D45400102000000020000007543C814C29754C0F2BD2CA82E5D4540F95F92FDC19754C0A13409DF2E5D45400102000000020000007543C814C29754C0F2BD2CA82E5D45404D93640BC29754C0CFD54F872E5D45400102000000020000008EE0D019C29754C0EEED469C2E5D45407543C814C29754C0F2BD2CA82E5D45400102000000020000008FFBFB1EC29754C04B62917D315D4540C4995FCDC19754C099D36531315D45400102000000020000008FFBFB1EC29754C04B62917D315D454027C48C03C29754C0F6A517A2305D4540010200000002000000D56B7321C29754C01D5944802F5D4540E3DBDE0CC29754C0CF1F15622F5D4540010200000002000000D56B7321C29754C01D5944802F5D4540FF318113C29754C03A00F84B2F5D4540010200000002000000DB64CB21C29754C0BB01561C2F5D4540F95F92FDC19754C0A13409DF2E5D4540010200000002000000DB64CB21C29754C0BB01561C2F5D4540FF318113C29754C03A00F84B2F5D4540010200000002000000D4FF202CC29754C0EF51E3F92E5D45407543C814C29754C0F2BD2CA82E5D4540010200000002000000D4FF202CC29754C0EF51E3F92E5D4540DB64CB21C29754C0BB01561C2F5D45400102000000020000005BDA5F2CC29754C035CF11F92E5D45408EE0D019C29754C0EEED469C2E5D45400102000000020000005BDA5F2CC29754C035CF11F92E5D4540D4FF202CC29754C0EF51E3F92E5D45400102000000020000006DB6D72CC29754C04B70FCAA2F5D4540304D7608C29754C01BFBC6702F5D45400102000000020000006DB6D72CC29754C04B70FCAA2F5D4540D56B7321C29754C01D5944802F5D4540010200000002000000392F7E2DC29754C04577A9FE2E5D4540D4FF202CC29754C0EF51E3F92E5D4540010200000002000000392F7E2DC29754C04577A9FE2E5D45405BDA5F2CC29754C035CF11F92E5D45400102000000020000008542232FC29754C05598CBFE315D4540F1DB3BDBC09754C0B5055C69335D45400102000000020000008542232FC29754C05598CBFE315D45408FFBFB1EC29754C04B62917D315D4540010200000002000000E107733CC29754C0D1B271492F5D4540DB64CB21C29754C0BB01561C2F5D4540010200000002000000E107733CC29754C0D1B271492F5D4540392F7E2DC29754C04577A9FE2E5D4540010200000002000000DE327644C29754C0C71C63A9325D4540D1DF4401C19754C074634670335D4540010200000002000000DE327644C29754C0C71C63A9325D45408542232FC29754C05598CBFE315D4540010200000002000000A328DC48C29754C07E60725E2F5D4540392F7E2DC29754C04577A9FE2E5D4540010200000002000000A328DC48C29754C07E60725E2F5D4540E107733CC29754C0D1B271492F5D454001020000000200000065122C57C29754C0DCE60ECF2F5D4540D56B7321C29754C01D5944802F5D454001020000000200000065122C57C29754C0DCE60ECF2F5D4540E107733CC29754C0D1B271492F5D4540010200000002000000EA6DA85EC29754C05D428FF92D5D4540E060DFA3C19754C057322B162D5D4540010200000002000000EA6DA85EC29754C05D428FF92D5D45408EE0D019C29754C0EEED469C2E5D454001020000000200000001847B60C29754C046209CFD2F5D45406DB6D72CC29754C04B70FCAA2F5D454001020000000200000001847B60C29754C046209CFD2F5D454065122C57C29754C0DCE60ECF2F5D4540010200000002000000EC913668C29754C0B732EAC1315D45408FFBFB1EC29754C04B62917D315D4540010200000002000000EC913668C29754C0B732EAC1315D45408542232FC29754C05598CBFE315D4540010200000002000000EA20F971C29754C062E412112E5D45405BDA5F2CC29754C035CF11F92E5D4540010200000002000000EA20F971C29754C062E412112E5D4540EA6DA85EC29754C05D428FF92D5D4540010200000002000000C27F8F73C29754C05A9BCFB5315D454027C48C03C29754C0F6A517A2305D4540010200000002000000C27F8F73C29754C05A9BCFB5315D4540EC913668C29754C0B732EAC1315D4540010200000002000000AD4CEB75C29754C0C35E27FC2F5D4540A328DC48C29754C07E60725E2F5D4540010200000002000000AD4CEB75C29754C0C35E27FC2F5D454065122C57C29754C0DCE60ECF2F5D4540010200000002000000B1406982C29754C067C45DDA315D4540EC913668C29754C0B732EAC1315D4540010200000002000000B1406982C29754C067C45DDA315D4540C27F8F73C29754C05A9BCFB5315D454001020000000200000036D7BD86C29754C01103D19A2D5D4540EA6DA85EC29754C05D428FF92D5D454001020000000200000050C7BC88C29754C04F8B043E305D454001847B60C29754C046209CFD2F5D454001020000000200000050C7BC88C29754C04F8B043E305D4540AD4CEB75C29754C0C35E27FC2F5D45400102000000020000005B3E5E89C29754C016EEF405315D454011AAD4ECC19754C082C5E1CC2F5D45400102000000020000005B3E5E89C29754C016EEF405315D45406DB6D72CC29754C04B70FCAA2F5D4540010200000002000000E707068FC29754C06C5F8498315D45407CCA1CEBC19754C0EF039CD22F5D4540010200000002000000E707068FC29754C06C5F8498315D4540C27F8F73C29754C05A9BCFB5315D45400102000000020000001FA80991C29754C0A77686A92D5D4540EA20F971C29754C062E412112E5D45400102000000020000001FA80991C29754C0A77686A92D5D454036D7BD86C29754C01103D19A2D5D45400102000000020000008F4C579DC29754C07E0AE72D315D454001847B60C29754C046209CFD2F5D45400102000000020000008F4C579DC29754C07E0AE72D315D45405B3E5E89C29754C016EEF405315D45400102000000020000001E5D0CA9C29754C023E2C17C315D45405B3E5E89C29754C016EEF405315D45400102000000020000001E5D0CA9C29754C023E2C17C315D4540E707068FC29754C06C5F8498315D4540010200000002000000E0C165ACC29754C088542F79315D45408F4C579DC29754C07E0AE72D315D4540010200000002000000E0C165ACC29754C088542F79315D45401E5D0CA9C29754C023E2C17C315D4540010200000002000000456C20BBC29754C0EB497969315D45408F4C579DC29754C07E0AE72D315D4540010200000002000000456C20BBC29754C0EB497969315D4540E0C165ACC29754C088542F79315D4540010200000002000000A9DB14D6C29754C0AAD2B84C315D454050C7BC88C29754C04F8B043E305D4540010200000002000000A9DB14D6C29754C0AAD2B84C315D4540456C20BBC29754C0EB497969315D4540 geos-3.4.2/tests/xmltester/tests/ticket/bug599.xml0000644000175000017500000001123412206417146021665 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/599 http://trac.osgeo.org/geos/ticket/599 010200000020000000CE89E2FA1C04ED3F908BC5CAC37649407D2B6DCC4602ED3FE0C4EB55BF7649407A765490FA06ED3FCF28A787B2764940533AA28C020EED3F6FC6C4419D7649400949B0822914ED3F79A40BFB877649402C1B310E8916ED3F69E9656F847649404DD070146A17ED3F650A8CAB80764940016B7AF59617ED3FCD71135A7B76494048663F9CD120ED3F46A22B6C61764940C63FC7A24426ED3F1086F01E56764940EC7E5F6DD62AED3FE64581994A7649404ADD29786532ED3F89BC40A43A76494012E22593AE34ED3F6946F58C337649406F23AF18BF3AED3F4AD6E1E82A764940EBC2B414353DED3F2E3F709527764940EBC2B414353DED3F1D7E92962576494066283806AE3CED3F8FB5752623764940A61EB3FD7538ED3FDC8BC3F418764940F90A1C1A6030ED3FAC5AD2510E76494094EB5C07BD2DED3F96B4E21B0A76494092B1DAFCBF2AED3F763E970403764940F579D67FE728ED3FDD9FE63FFF754940F43F5475EA25ED3F04159F4CED7549409F7EABD09B25ED3F4EEDB199E87549405842D2020F27ED3FBD378600E075494042DFCC9EBA28ED3F9DBB0276DA754940D5C78D6CF827ED3FD40E7F4DD6754940F050B92EA127ED3FDBBD816ED4754940D4C78D6CF827ED3FD40E7F4DD6754940D5C78D6CF827ED3FD40E7F4DD6754940650FA3D6EA21ED3F22A98592C9754940883F790E1B1BED3FEF8A85C6B8754940 01020000001D000000CE89E2FA1C04ED3F908BC5CAC37649407D2B6DCC4602ED3FE0C4EB55BF7649407A765490FA06ED3FCF28A787B2764940533AA28C020EED3F6FC6C4419D7649400949B0822914ED3F79A40BFB877649402C1B310E8916ED3F69E9656F847649404DD070146A17ED3F650A8CAB80764940016B7AF59617ED3FCD71135A7B76494048663F9CD120ED3F46A22B6C61764940C63FC7A24426ED3F1086F01E56764940EC7E5F6DD62AED3FE64581994A7649404ADD29786532ED3F89BC40A43A76494012E22593AE34ED3F6946F58C337649406F23AF18BF3AED3F4AD6E1E82A764940EBC2B414353DED3F2E3F709527764940EBC2B414353DED3F1D7E92962576494066283806AE3CED3F8FB5752623764940A61EB3FD7538ED3FDC8BC3F418764940F90A1C1A6030ED3FAC5AD2510E76494094EB5C07BD2DED3F96B4E21B0A76494092B1DAFCBF2AED3F763E970403764940F579D67FE728ED3FDD9FE63FFF754940F43F5475EA25ED3F04159F4CED7549409F7EABD09B25ED3F4EEDB199E87549405842D2020F27ED3FBD378600E075494042DFCC9EBA28ED3F9DBB0276DA754940D4C78D6CF827ED3FD40E7F4DD6754940650FA3D6EA21ED3F22A98592C9754940883F790E1B1BED3FEF8A85C6B8754940 true true 01050000001D000000010200000002000000CD89E2FA1C04ED3F908BC5CAC37649407D2B6DCC4602ED3FE0C4EB55BF7649400102000000020000007D2B6DCC4602ED3FE0C4EB55BF7649407A765490FA06ED3FCF28A787B27649400102000000020000007A765490FA06ED3FCF28A787B2764940543AA28C020EED3F6FC6C4419D764940010200000002000000543AA28C020EED3F6FC6C4419D7649400949B0822914ED3F79A40BFB877649400102000000020000000949B0822914ED3F79A40BFB877649402D1B310E8916ED3F69E9656F847649400102000000020000002D1B310E8916ED3F69E9656F847649404DD070146A17ED3F650A8CAB807649400102000000020000004DD070146A17ED3F650A8CAB80764940006B7AF59617ED3FCD71135A7B764940010200000002000000006B7AF59617ED3FCD71135A7B76494047663F9CD120ED3F46A22B6C6176494001020000000200000047663F9CD120ED3F46A22B6C61764940C73FC7A24426ED3F1086F01E56764940010200000002000000C73FC7A24426ED3F1086F01E56764940EC7E5F6DD62AED3FE64581994A764940010200000002000000EC7E5F6DD62AED3FE64581994A76494049DD29786532ED3F89BC40A43A76494001020000000200000049DD29786532ED3F89BC40A43A76494012E22593AE34ED3F6946F58C3376494001020000000200000012E22593AE34ED3F6946F58C337649406F23AF18BF3AED3F4AD6E1E82A7649400102000000020000006F23AF18BF3AED3F4AD6E1E82A764940EBC2B414353DED3F2E3F709527764940010200000002000000EBC2B414353DED3F2E3F709527764940EBC2B414353DED3F1D7E929625764940010200000002000000EBC2B414353DED3F1D7E92962576494065283806AE3CED3F8FB575262376494001020000000200000065283806AE3CED3F8FB5752623764940A61EB3FD7538ED3FDC8BC3F418764940010200000002000000A61EB3FD7538ED3FDC8BC3F418764940F90A1C1A6030ED3FAC5AD2510E764940010200000002000000F90A1C1A6030ED3FAC5AD2510E76494093EB5C07BD2DED3F96B4E21B0A76494001020000000200000093EB5C07BD2DED3F96B4E21B0A76494092B1DAFCBF2AED3F763E97040376494001020000000200000092B1DAFCBF2AED3F763E970403764940F579D67FE728ED3FDD9FE63FFF754940010200000002000000F579D67FE728ED3FDD9FE63FFF754940F33F5475EA25ED3F04159F4CED754940010200000002000000F33F5475EA25ED3F04159F4CED7549409E7EABD09B25ED3F4EEDB199E87549400102000000020000009E7EABD09B25ED3F4EEDB199E87549405842D2020F27ED3FBD378600E07549400102000000020000005842D2020F27ED3FBD378600E075494041DFCC9EBA28ED3F9DBB0276DA75494001020000000200000041DFCC9EBA28ED3F9DBB0276DA754940D4C78D6CF827ED3FD40E7F4DD6754940010200000002000000D4C78D6CF827ED3FD40E7F4DD6754940F150B92EA127ED3FDBBD816ED4754940010200000002000000D4C78D6CF827ED3FD40E7F4DD6754940640FA3D6EA21ED3F22A98592C9754940010200000002000000640FA3D6EA21ED3F22A98592C9754940893F790E1B1BED3FEF8A85C6B8754940 geos-3.4.2/tests/xmltester/tests/ticket/bug605.xml0000644000175000017500000001147212206417146021655 0ustar frankiefrankie http://trac.osgeo.org/geos/ticket/605 com.vividsolutions.jtstest.testrunner.BufferResultMatcher http://trac.osgeo.org/geos/ticket/605 LINESTRING(365851.11860 6133776.04159, 366074.92430 6134077.56523, 375141.31010 6138794.83236, 373718.87248 6137668.49630, 373346.64754 6137433.71166638, 366752.52700 6134568.10150, 360775.41757 6127074.35479, 360762.97098 6127054.06482, 365851.11862 6133776.04159, 366074.92434 6134077.56523, 366360.99154 6134339.22803, 366752.52702 6134568.10150, 373346.64754 6137433.71166638, 373718.87248 6137668.49630, 375295.49858 6138886.92620, 373718.87248 6137668.49630, 373346.64754 6137433.71166, 366826.15047 6134600.68215, 366384.17707 6134356.53424, 365851.11862 6133776.04159, 364105.70077 6130589.54564, 360283.95054 6126559.51325, 356917.60143 6124368.97007, 360279.79015 6126555.44586, 364105.70077 6130589.54564, 365851.11862 6133776.04159, 364105.70077 6130589.54564, 360283.95054 6126559.51325) POLYGON ((355917.6765000000013970 6124381.2275999998673797, 355939.2774000000208616 6124576.0504000000655651, 355998.4679999999934807 6124762.9166000001132488, 356092.9739999999874271 6124934.6463999999687076, 356219.1641999999992549 6125084.6414999999105930, 356372.1902000000118278 6125207.1387000000104308, 359638.8080733100068755 6127332.7850270699709654, 360038.8583028200082481 6127754.6042146598920226, 360042.8382790799951181 6127759.5940738096833229, 365050.9408594800042920 6134375.8229583799839020, 365271.9468999999808148 6134673.5746999997645617, 365399.9925999999977648 6134815.4453999996185303, 365686.0597999999881722 6135077.1081999996677041, 365731.3817567800288089 6135110.4964476702734828, 365766.0731999999843538 6135142.6305999998003244, 365855.4125532599864528 6135201.8687370792031288, 365856.3346000000019558 6135202.5480000004172325, 365857.1991783700068481 6135203.0533924298360944, 365900.6434000000008382 6135231.8598999995738268, 366006.7428950199973769 6135290.4697156799957156, 366247.8701000000000931 6135431.4215000001713634, 366353.9645000000018626 6135485.2427000002935529, 366417.4646187499747612 6135512.8379774494096637, 366427.6574000000255182 6135517.8535000002011657, 367936.5907135099987499 6136173.4557738900184631, 374679.7457999999751337 6139681.9391999999061227, 374708.2528112199506722 6139693.3706018300727010, 374850.1265000000130385 6139782.2717000003904104, 375033.3573999999789521 6139851.9556999998167157, 375226.6623000000254251 6139884.5542000001296401, 375422.6124999999883585 6139878.8142999997362494, 375613.6778000000049360 6139834.9567999998107553, 375792.5156999999890104 6139754.6668999996036291, 375952.2534999999916181 6139641.0302999997511506, 376086.7525000000023283 6139498.4139000000432134, 376190.8440999999875203 6139332.2982999999076128, 376260.5280999999959022 6139149.0674000000581145, 376293.1266000000177883 6138955.7625000001862645, 376287.3866999999736436 6138759.8123000003397465, 376243.5291999999899417 6138568.7470000004395843, 376163.2393000000156462 6138389.9090999998152256, 376049.6026999999885447 6138230.1712999995797873, 375906.9862999999895692 6138095.6722999997437000, 374330.3601999999955297 6136877.2423999998718500, 374252.3702000000048429 6136822.6947999997064471, 373880.1452000000281259 6136587.9101999998092651, 373745.2100000000209548 6136516.5705000003799796, 368792.5121412900043651 6134364.2741611804813147, 367214.0061748400330544 6133542.9728815201669931, 366095.5620286299963482 6132140.7336761802434921, 364982.7469999999739230 6130109.1394999995827675, 364831.3095999999786727 6129901.4380999999120831, 361566.4569188400055282 6126458.6538448799401522, 361560.3061999999918044 6126450.5280999997630715, 361431.7930000000051223 6126310.6421999996528029, 361412.6469055399647914 6126296.4613223504275084, 361009.5593000000226311 6125871.4057999998331070, 361007.8637289800099097 6125869.9373341500759125, 361005.3717000000178814 6125867.3097000000998378, 360991.3914410999859683 6125855.6713483100757003, 360861.3738000000012107 6125743.0683000003919005, 360844.7993283700197935 6125733.6356567097827792, 360824.9630999999935739 6125717.1222999999299645, 357462.7742999999900348 6123530.6464999997988343, 357288.7666999999783002 6123440.4033000003546476, 357100.4979000000166707 6123385.8378999996930361, 356905.2017999999807216 6123369.0470000002533197, 356710.3820999999879859 6123390.6755999997258186, 356523.5242999999900348 6123449.8926999997347593, 356351.8079000000143424 6123544.4231000002473593, 356201.8306999999913387 6123670.6347000002861023, 356079.3552999999956228 6123823.6780000003054738, 355989.0873000000137836 6123997.6728999996557832, 355934.4952000000048429 6124185.9338999995961785, 355917.6765000000013970 6124381.2275999998673797)) geos-3.4.2/tests/xmltester/tests/ticket/bug615.xml0000644000175000017500000001256612206417146021663 0ustar frankiefrankie See http://trac.osgeo.org/geos/ticket/615 01060000000500000001030000000100000004000000239CFA9F7F9230401ABADB203141474018601F9DBA92304062D68BA19C40474027361FD7869230408D62B9A5D5404740239CFA9F7F9230401ABADB203141474001030000000100000004000000125901C0739230408653A0054F41474043CA4FAA7D923040DB5548F949414740239CFA9F7F9230401ABADB2031414740125901C0739230408653A0054F4147400103000000010000000B0000005EA791E509923040D3DDAD7E594247408BFD65F7E4913040CBA65CE15D4247406F2F698CD69130400A850838844247401A34F44F70913040D947A7AE7C424740B745990D329130400AA2EE0390424740454C89247A913040D8817346944247407E74EACA679130406E3997E2AA424740A81DFE9AAC913040CA8E8D40BC4247400C410E4A9891304074EFE192E342474036B05582C5913040E5ED08A7054347405EA791E509923040D3DDAD7E5942474001030000000100000005000000125901C0739230408653A0054F4147400DAB7823F3903040FD1873D712424740A73FFB9122923040367BA01518424740773A98D22192304096FAA9431D424740125901C0739230408653A0054F414740010300000001000000040000005EA791E509923040D3DDAD7E59424740C4D32B651992304027C286A757424740773A98D22192304096FAA9431D4247405EA791E509923040D3DDAD7E59424740 0106000000050000000103000000010000000800000019C9CCC7889230401D2A92141A41474018601F9DBA92304062D68BA19C40474026361FD7869230408D62B9A5D5404740B48EAA26889230408CB96B09F9404740C3D8429083923040B0AC34290541474098DD938785923040C5387F130A41474026361FD786923040704221020E41474019C9CCC7889230401D2A92141A4147400103000000010000000700000035F1A79473923040BDB5C0724F41474043CA4FAA7D923040DA5548F94941474098DD938785923040F0C4AC174341474018EC866D8B9230400C59DDEA39414740A64412BD8C923040FEF15EB53241474019C9CCC7889230401D2A92141A41474035F1A79473923040BDB5C0724F414740010300000001000000130000005EA791E509923040D3DDAD7E594247408BFD65F7E4913040CAA65CE15D4247406F2F698CD69130400A85083884424740D252793BC29130401FF46C567D4247409A999999999130402D5BEB8B844247401A34F44F70913040D847A7AE7C424740B745990D329130400AA2EE0390424740459E245D33913040D881734694424740378E588B4F91304018096D3997424740444C89247A913040D8817346944247407E74EACA679130406D3997E2AA424740A81DFE9AAC913040C98E8D40BC424740E17F2BD9B19130406D73637AC24247400B410E4A9891304074EFE192E3424740280F0BB5A691304097E2AAB2EF424740D252793BC29130402D6002B7EE424740A81DFE9AAC9130400282397AFC42474036B05582C5913040E5ED08A7054347405EA791E509923040D3DDAD7E594247400103000000010000000E00000035F1A79473923040BDB5C0724F4147408A3C49BA66923040211FF46C5641474036CD3B4ED1913040C4B12E6EA3414740C47762D68B91304076374F75C8414740D3BCE3141D913040EE940ED6FF4147408CF337A110913040042159C0044247402979758E01913040F5D6C05609424740450DA661F8903040A0E062450D4247400DAB7823F3903040FC1873D71242474029965B5A0D91304020EF552B1342474099F04BFDBC913040834C327216424740A73FFB9122923040357BA01518424740773A98D22192304097FAA9431D42474035F1A79473923040BDB5C0724F414740010300000001000000040000005EA791E509923040D3DDAD7E59424740C3D32B651992304027C286A757424740773A98D22192304097FAA9431D4247405EA791E509923040D3DDAD7E59424740 01060000000C0000000103000000010000000C00000043CA4FAA7D923040DA5548F94941474098DD938785923040F0C4AC174341474018EC866D8B9230400C59DDEA39414740A64412BD8C923040FEF15EB53241474019C9CCC7889230401D2A92141A41474026361FD786923040704221020E41474098DD938785923040C5387F130A414740C3D8429083923040B0AC342905414740B48EAA26889230408CB96B09F940474026361FD7869230408D62B9A5D5404740239CFA9F7F9230401ABADB203141474043CA4FAA7D923040DA5548F9494147400103000000010000000A00000071D9271D0C91304001823120064247408CF337A110913040042159C004424740D3BCE3141D913040EE940ED6FF414740C47762D68B91304076374F75C841474036CD3B4ED1913040C4B12E6EA34147408A3C49BA66923040211FF46C5641474035F1A79473923040BDB5C0724F41474043CA4FAA7D923040DA5548F949414740125901C0739230408653A0054F41474071D9271D0C913040018231200642474001030000000100000005000000B745990D329130400AA2EE0390424740459E245D33913040D881734694424740378E588B4F91304018096D3997424740444C89247A913040D881734694424740B745990D329130400AA2EE0390424740010300000001000000050000000DAB7823F3903040FC1873D71242474071D9271D0C91304001823120064247402979758E01913040F5D6C05609424740450DA661F8903040A0E062450D4247400DAB7823F3903040FC1873D7124247400103000000010000000400000077459ECBAC91304054D11324814247406F2F698CD69130400A85083884424740D252793BC29130401FF46C567D42474077459ECBAC91304054D113248142474001030000000100000004000000A81DFE9AAC9130400282397AFC42474036B05582C5913040E5ED08A705434740B0C6C481B391304014A2E915F8424740A81DFE9AAC9130400282397AFC42474001030000000100000004000000D675324DA8913040353117A4EF424740B0C6C481B391304014A2E915F8424740D252793BC29130402D6002B7EE424740D675324DA8913040353117A4EF424740010300000001000000040000000B410E4A9891304074EFE192E3424740E17F2BD9B19130406D73637AC2424740A81DFE9AAC913040C98E8D40BC4247400B410E4A9891304074EFE192E3424740010300000001000000040000000B410E4A9891304074EFE192E3424740280F0BB5A691304097E2AAB2EF424740D675324DA8913040353117A4EF4247400B410E4A9891304074EFE192E3424740010300000001000000040000001A34F44F70913040D847A7AE7C4247409A999999999130402D5BEB8B8442474077459ECBAC91304054D11324814247401A34F44F70913040D847A7AE7C424740010300000001000000040000003893A64068913040B2A17BDD1442474099F04BFDBC913040834C327216424740A73FFB9122923040357BA015184247403893A64068913040B2A17BDD14424740010300000001000000040000000DAB7823F3903040FC1873D7124247403893A64068913040B2A17BDD1442474029965B5A0D91304020EF552B134247400DAB7823F3903040FC1873D712424740 geos-3.4.2/tests/xmltester/tinyxml/0000755000175000017500000000000012206417242017172 5ustar frankiefrankiegeos-3.4.2/tests/xmltester/tinyxml/tinystr.cpp0000644000175000017500000000505212206417147021420 0ustar frankiefrankie/* www.sourceforge.net/projects/tinyxml Original file by Yves Berquin. This software is provided 'as-is', without any express or implied warranty. In no event will the authors 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. */ /* * THIS FILE WAS ALTERED BY Tyge Løvset, 7. April 2005. */ #ifndef TIXML_USE_STL #include "tinystr.h" // Error value for find primitive const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); // Null rep. TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; void TiXmlString::reserve (size_type cap) { if (cap > capacity()) { TiXmlString tmp; tmp.init(length(), cap); memcpy(tmp.start(), data(), length()); swap(tmp); } } TiXmlString& TiXmlString::assign(const char* str, size_type len) { size_type cap = capacity(); if (len > cap || cap > 3*(len + 8)) { TiXmlString tmp; tmp.init(len); memcpy(tmp.start(), str, len); swap(tmp); } else { memmove(start(), str, len); set_size(len); } return *this; } TiXmlString& TiXmlString::append(const char* str, size_type len) { size_type newsize = length() + len; if (newsize > capacity()) { reserve (newsize + capacity()); } memmove(finish(), str, len); set_size(newsize); return *this; } TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) { TiXmlString tmp; tmp.reserve(a.length() + b.length()); tmp += a; tmp += b; return tmp; } TiXmlString operator + (const TiXmlString & a, const char* b) { TiXmlString tmp; TiXmlString::size_type b_len = static_cast( strlen(b) ); tmp.reserve(a.length() + b_len); tmp += a; tmp.append(b, b_len); return tmp; } TiXmlString operator + (const char* a, const TiXmlString & b) { TiXmlString tmp; TiXmlString::size_type a_len = static_cast( strlen(a) ); tmp.reserve(a_len + b.length()); tmp.append(a, a_len); tmp += b; return tmp; } #endif // TIXML_USE_STL geos-3.4.2/tests/xmltester/tinyxml/tinystr.h0000644000175000017500000002111712206417147021065 0ustar frankiefrankie/* www.sourceforge.net/projects/tinyxml Original file by Yves Berquin. This software is provided 'as-is', without any express or implied warranty. In no event will the authors 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. */ /* * THIS FILE WAS ALTERED BY Tyge Lovset, 7. April 2005. * * - completely rewritten. compact, clean, and fast implementation. * - sizeof(TiXmlString) = pointer size (4 bytes on 32-bit systems) * - fixed reserve() to work as per specification. * - fixed buggy compares operator==(), operator<(), and operator>() * - fixed operator+=() to take a const ref argument, following spec. * - added "copy" constructor with length, and most compare operators. * - added swap(), clear(), size(), capacity(), operator+(). */ #ifndef TIXML_USE_STL #ifndef TIXML_STRING_INCLUDED #define TIXML_STRING_INCLUDED #include #include /* The support for explicit isn't that universal, and it isn't really required - it is used to check that the TiXmlString class isn't incorrectly used. Be nice to old compilers and macro it here: */ #if defined(_MSC_VER) && (_MSC_VER >= 1200 ) // Microsoft visual studio, version 6 and higher. #define TIXML_EXPLICIT explicit #elif defined(__GNUC__) && (__GNUC__ >= 3 ) // GCC version 3 and higher.s #define TIXML_EXPLICIT explicit #else #define TIXML_EXPLICIT #endif /* TiXmlString is an emulation of a subset of the std::string template. Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. Only the member functions relevant to the TinyXML project have been implemented. The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase a string and there's no more room, we allocate a buffer twice as big as we need. */ class TiXmlString { public : // The size type used typedef size_t size_type; // Error value for find primitive static const size_type npos; // = -1; // TiXmlString empty constructor TiXmlString () : rep_(&nullrep_) { } // TiXmlString copy constructor TiXmlString ( const TiXmlString & copy) : rep_(0) { init(copy.length()); memcpy(start(), copy.data(), length()); } // TiXmlString constructor, based on a string TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) { init( static_cast( strlen(copy) )); memcpy(start(), copy, length()); } // TiXmlString constructor, based on a string TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) { init(len); memcpy(start(), str, len); } // TiXmlString destructor ~TiXmlString () { quit(); } // = operator TiXmlString& operator = (const char * copy) { return assign( copy, (size_type)strlen(copy)); } // = operator TiXmlString& operator = (const TiXmlString & copy) { return assign(copy.start(), copy.length()); } // += operator. Maps to append TiXmlString& operator += (const char * suffix) { return append(suffix, static_cast( strlen(suffix) )); } // += operator. Maps to append TiXmlString& operator += (char single) { return append(&single, 1); } // += operator. Maps to append TiXmlString& operator += (const TiXmlString & suffix) { return append(suffix.data(), suffix.length()); } // Convert a TiXmlString into a null-terminated char * const char * c_str () const { return rep_->str; } // Convert a TiXmlString into a char * (need not be null terminated). const char * data () const { return rep_->str; } // Return the length of a TiXmlString size_type length () const { return rep_->size; } // Alias for length() size_type size () const { return rep_->size; } // Checks if a TiXmlString is empty bool empty () const { return rep_->size == 0; } // Return capacity of string size_type capacity () const { return rep_->capacity; } // single char extraction const char& at (size_type index) const { assert( index < length() ); return rep_->str[ index ]; } // [] operator char& operator [] (size_type index) const { assert( index < length() ); return rep_->str[ index ]; } // find a char in a string. Return TiXmlString::npos if not found size_type find (char lookup) const { return find(lookup, 0); } // find a char in a string from an offset. Return TiXmlString::npos if not found size_type find (char tofind, size_type offset) const { if (offset >= length()) return npos; for (const char* p = c_str() + offset; *p != '\0'; ++p) { if (*p == tofind) return static_cast< size_type >( p - c_str() ); } return npos; } void clear () { //Lee: //The original was just too strange, though correct: // TiXmlString().swap(*this); //Instead use the quit & re-init: quit(); init(0,0); } /* Function to reserve a big amount of data when we know we'll need it. Be aware that this function DOES NOT clear the content of the TiXmlString if any exists. */ void reserve (size_type cap); TiXmlString& assign (const char* str, size_type len); TiXmlString& append (const char* str, size_type len); void swap (TiXmlString& other) { Rep* r = rep_; rep_ = other.rep_; other.rep_ = r; } private: void init(size_type sz) { init(sz, sz); } void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } char* start() const { return rep_->str; } char* finish() const { return rep_->str + rep_->size; } struct Rep { size_type size, capacity; char str[1]; }; void init(size_type sz, size_type cap) { if (cap) { // Lee: the original form: // rep_ = static_cast(operator new(sizeof(Rep) + cap)); // doesn't work in some cases of new being overloaded. Switching // to the normal allocation, although use an 'int' for systems // that are overly picky about structure alignment. const size_type bytesNeeded = sizeof(Rep) + cap; const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); rep_ = reinterpret_cast( new int[ intsNeeded ] ); rep_->str[ rep_->size = sz ] = '\0'; rep_->capacity = cap; } else { rep_ = &nullrep_; } } void quit() { if (rep_ != &nullrep_) { // The rep_ is really an array of ints. (see the allocator, above). // Cast it back before delete, so the compiler won't incorrectly call destructors. delete [] ( reinterpret_cast( rep_ ) ); } } Rep * rep_; static Rep nullrep_; } ; inline bool operator == (const TiXmlString & a, const TiXmlString & b) { return ( a.length() == b.length() ) // optimization on some platforms && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare } inline bool operator < (const TiXmlString & a, const TiXmlString & b) { return strcmp(a.c_str(), b.c_str()) < 0; } inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); TiXmlString operator + (const TiXmlString & a, const char* b); TiXmlString operator + (const char* a, const TiXmlString & b); /* TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. Only the operators that we need for TinyXML have been developped. */ class TiXmlOutStream : public TiXmlString { public : // TiXmlOutStream << operator. TiXmlOutStream & operator << (const TiXmlString & in) { *this += in; return *this; } // TiXmlOutStream << operator. TiXmlOutStream & operator << (const char * in) { *this += in; return *this; } } ; #endif // TIXML_STRING_INCLUDED #endif // TIXML_USE_STL geos-3.4.2/tests/xmltester/tinyxml/tinyxml.cpp0000644000175000017500000011014212206417147021405 0ustar frankiefrankie/* www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors 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 #ifdef TIXML_USE_STL #include #include #endif #include "tinyxml.h" bool TiXmlBase::condenseWhiteSpace = true; // Microsoft compiler security FILE* TiXmlFOpen( const char* filename, const char* mode ) { #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) FILE* fp = 0; errno_t err = fopen_s( &fp, filename, mode ); if ( !err && fp ) return fp; return 0; #else return fopen( filename, mode ); #endif } void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) { int i=0; while( i<(int)str.length() ) { unsigned char c = (unsigned char) str[i]; if ( c == '&' && i < ( (int)str.length() - 2 ) && str[i+1] == '#' && str[i+2] == 'x' ) { // Hexadecimal character reference. // Pass through unchanged. // © -- copyright symbol, for example. // // The -1 is a bug fix from Rob Laveaux. It keeps // an overflow from happening if there is no ';'. // There are actually 2 ways to exit this loop - // while fails (error case) and break (semicolon found). // However, there is no mechanism (currently) for // this function to return an error. while ( i<(int)str.length()-1 ) { outString->append( str.c_str() + i, 1 ); ++i; if ( str[i] == ';' ) break; } } else if ( c == '&' ) { outString->append( entity[0].str, entity[0].strLength ); ++i; } else if ( c == '<' ) { outString->append( entity[1].str, entity[1].strLength ); ++i; } else if ( c == '>' ) { outString->append( entity[2].str, entity[2].strLength ); ++i; } else if ( c == '\"' ) { outString->append( entity[3].str, entity[3].strLength ); ++i; } else if ( c == '\'' ) { outString->append( entity[4].str, entity[4].strLength ); ++i; } else if ( c < 32 ) { // Easy pass at non-alpha/numeric/symbol // Below 32 is symbolic. char buf[ 32 ]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); #else sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); #endif //*ME: warning C4267: convert 'size_t' to 'int' //*ME: Int-Cast to make compiler happy ... outString->append( buf, (int)strlen( buf ) ); ++i; } else { //char realc = (char) c; //outString->append( &realc, 1 ); *outString += (char) c; // somewhat more efficient function call. ++i; } } } TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() { parent = 0; type = _type; firstChild = 0; lastChild = 0; prev = 0; next = 0; } TiXmlNode::~TiXmlNode() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } } void TiXmlNode::CopyTo( TiXmlNode* target ) const { target->SetValue (value.c_str() ); target->userData = userData; } void TiXmlNode::Clear() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } firstChild = 0; lastChild = 0; } TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) { assert( node->parent == 0 || node->parent == this ); assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); if ( node->Type() == TiXmlNode::DOCUMENT ) { delete node; if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } node->parent = this; node->prev = lastChild; node->next = 0; if ( lastChild ) lastChild->next = node; else firstChild = node; // it was an empty list. lastChild = node; return node; } TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) { if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; return LinkEndChild( node ); } TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) { if ( !beforeThis || beforeThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->next = beforeThis; node->prev = beforeThis->prev; if ( beforeThis->prev ) { beforeThis->prev->next = node; } else { assert( firstChild == beforeThis ); firstChild = node; } beforeThis->prev = node; return node; } TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) { if ( !afterThis || afterThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->prev = afterThis; node->next = afterThis->next; if ( afterThis->next ) { afterThis->next->prev = node; } else { assert( lastChild == afterThis ); lastChild = node; } afterThis->next = node; return node; } TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) { if ( replaceThis->parent != this ) return 0; TiXmlNode* node = withThis.Clone(); if ( !node ) return 0; node->next = replaceThis->next; node->prev = replaceThis->prev; if ( replaceThis->next ) replaceThis->next->prev = node; else lastChild = node; if ( replaceThis->prev ) replaceThis->prev->next = node; else firstChild = node; delete replaceThis; node->parent = this; return node; } bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) { if ( removeThis->parent != this ) { assert( 0 ); return false; } if ( removeThis->next ) removeThis->next->prev = removeThis->prev; else lastChild = removeThis->prev; if ( removeThis->prev ) removeThis->prev->next = removeThis->next; else firstChild = removeThis->next; delete removeThis; return true; } const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const { const TiXmlNode* node; for ( node = firstChild; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const { const TiXmlNode* node; for ( node = lastChild; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild(); } else { assert( previous->parent == this ); return previous->NextSibling(); } } const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild( val ); } else { assert( previous->parent == this ); return previous->NextSibling( val ); } } const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const { const TiXmlNode* node; for ( node = next; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const { const TiXmlNode* node; for ( node = prev; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } void TiXmlElement::RemoveAttribute( const char * name ) { #ifdef TIXML_USE_STL TIXML_STRING str( name ); TiXmlAttribute* node = attributeSet.Find( str ); #else TiXmlAttribute* node = attributeSet.Find( name ); #endif if ( node ) { attributeSet.Remove( node ); delete node; } } const TiXmlElement* TiXmlNode::FirstChildElement() const { const TiXmlNode* node; for ( node = FirstChild(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const { const TiXmlNode* node; for ( node = FirstChild( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement() const { const TiXmlNode* node; for ( node = NextSibling(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const { const TiXmlNode* node; for ( node = NextSibling( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlDocument* TiXmlNode::GetDocument() const { const TiXmlNode* node; for( node = this; node; node = node->parent ) { if ( node->ToDocument() ) return node->ToDocument(); } return 0; } TiXmlElement::TiXmlElement (const char * _value) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; value = _value; } #ifdef TIXML_USE_STL TiXmlElement::TiXmlElement( const std::string& _value ) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; value = _value; } #endif TiXmlElement::TiXmlElement( const TiXmlElement& copy) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; copy.CopyTo( this ); } void TiXmlElement::operator=( const TiXmlElement& base ) { ClearThis(); base.CopyTo( this ); } TiXmlElement::~TiXmlElement() { ClearThis(); } void TiXmlElement::ClearThis() { Clear(); while( attributeSet.First() ) { TiXmlAttribute* node = attributeSet.First(); attributeSet.Remove( node ); delete node; } } const char* TiXmlElement::Attribute( const char* name ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return node->Value(); return 0; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return &node->ValueStr(); return 0; } #endif const char* TiXmlElement::Attribute( const char* name, int* i ) const { const char* s = Attribute( name ); if ( i ) { if ( s ) { *i = atoi( s ); } else { *i = 0; } } return s; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const { const std::string* s = Attribute( name ); if ( i ) { if ( s ) { *i = atoi( s->c_str() ); } else { *i = 0; } } return s; } #endif const char* TiXmlElement::Attribute( const char* name, double* d ) const { const char* s = Attribute( name ); if ( d ) { if ( s ) { *d = atof( s ); } else { *d = 0; } } return s; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const { const std::string* s = Attribute( name ); if ( d ) { if ( s ) { *d = atof( s->c_str() ); } else { *d = 0; } } return s; } #endif int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryIntValue( ival ); } #ifdef TIXML_USE_STL int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryIntValue( ival ); } #endif int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryDoubleValue( dval ); } #ifdef TIXML_USE_STL int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; return node->QueryDoubleValue( dval ); } #endif void TiXmlElement::SetAttribute( const char * name, int val ) { char buf[64]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%d", val ); #else sprintf( buf, "%d", val ); #endif SetAttribute( name, buf ); } #ifdef TIXML_USE_STL void TiXmlElement::SetAttribute( const std::string& name, int val ) { std::ostringstream oss; oss << val; SetAttribute( name, oss.str() ); } #endif void TiXmlElement::SetDoubleAttribute( const char * name, double val ) { char buf[256]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%f", val ); #else sprintf( buf, "%f", val ); #endif SetAttribute( name, buf ); } void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) { #ifdef TIXML_USE_STL TIXML_STRING _name( cname ); TIXML_STRING _value( cvalue ); #else const char* _name = cname; const char* _value = cvalue; #endif TiXmlAttribute* node = attributeSet.Find( _name ); if ( node ) { node->SetValue( _value ); return; } TiXmlAttribute* attrib = new TiXmlAttribute( cname, cvalue ); if ( attrib ) { attributeSet.Add( attrib ); } else { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); } } #ifdef TIXML_USE_STL void TiXmlElement::SetAttribute( const std::string& name, const std::string& _value ) { TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) { node->SetValue( _value ); return; } TiXmlAttribute* attrib = new TiXmlAttribute( name, _value ); if ( attrib ) { attributeSet.Add( attrib ); } else { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN ); } } #endif void TiXmlElement::Print( FILE* cfile, int depth ) const { int i; assert( cfile ); for ( i=0; iNext() ) { fprintf( cfile, " " ); attrib->Print( cfile, depth ); } // There are 3 different formatting approaches: // 1) An element without children is printed as a node // 2) An element with only a text child is printed as text // 3) An element with children is printed on multiple lines. TiXmlNode* node; if ( !firstChild ) { fprintf( cfile, " />" ); } else if ( firstChild == lastChild && firstChild->ToText() ) { fprintf( cfile, ">" ); firstChild->Print( cfile, depth + 1 ); fprintf( cfile, "", value.c_str() ); } else { fprintf( cfile, ">" ); for ( node = firstChild; node; node=node->NextSibling() ) { if ( !node->ToText() ) { fprintf( cfile, "\n" ); } node->Print( cfile, depth+1 ); } fprintf( cfile, "\n" ); for( i=0; i", value.c_str() ); } } void TiXmlElement::CopyTo( TiXmlElement* target ) const { // superclass: TiXmlNode::CopyTo( target ); // Element class: // Clone the attributes, then clone the children. const TiXmlAttribute* attribute = 0; for( attribute = attributeSet.First(); attribute; attribute = attribute->Next() ) { target->SetAttribute( attribute->Name(), attribute->Value() ); } TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this, attributeSet.First() ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } TiXmlNode* TiXmlElement::Clone() const { TiXmlElement* clone = new TiXmlElement( Value() ); if ( !clone ) return 0; CopyTo( clone ); return clone; } const char* TiXmlElement::GetText() const { const TiXmlNode* child = this->FirstChild(); if ( child ) { const TiXmlText* childText = child->ToText(); if ( childText ) { return childText->Value(); } } return 0; } TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; ClearError(); } TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } #ifdef TIXML_USE_STL TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } #endif TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::DOCUMENT ) { copy.CopyTo( this ); } void TiXmlDocument::operator=( const TiXmlDocument& copy ) { Clear(); copy.CopyTo( this ); } bool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) { // See STL_STRING_BUG below. //StringToBuffer buf( value ); return LoadFile( Value(), encoding ); } bool TiXmlDocument::SaveFile() const { // See STL_STRING_BUG below. // StringToBuffer buf( value ); // // if ( buf.buffer && SaveFile( buf.buffer ) ) // return true; // // return false; return SaveFile( Value() ); } bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) { // There was a really terrifying little bug here. The code: // value = filename // in the STL case, cause the assignment method of the std::string to // be called. What is strange, is that the std::string had the same // address as it's c_str() method, and so bad things happen. Looks // like a bug in the Microsoft STL implementation. // Add an extra string to avoid the crash. TIXML_STRING filename( _filename ); value = filename; // reading in binary mode so that tinyxml can normalize the EOL FILE* file = TiXmlFOpen( value.c_str (), "rb" ); if ( file ) { bool result = LoadFile( file, encoding ); fclose( file ); return result; } else { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } } bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) { if ( !file ) { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // Delete the existing data: Clear(); location.Clear(); // Get the file size, so we can pre-allocate the string. HUGE speed impact. long length = 0; fseek( file, 0, SEEK_END ); length = ftell( file ); fseek( file, 0, SEEK_SET ); // Strange case, but good to handle up front. if ( length <= 0 ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // If we have a file, assume it is all one big XML file, and read it in. // The document parser may decide the document ends sooner than the entire file, however. TIXML_STRING data; data.reserve( length ); // Subtle bug here. TinyXml did use fgets. But from the XML spec: // 2.11 End-of-Line Handling // // // ...the XML processor MUST behave as if it normalized all line breaks in external // parsed entities (including the document entity) on input, before parsing, by translating // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to // a single #xA character. // // // It is not clear fgets does that, and certainly isn't clear it works cross platform. // Generally, you expect fgets to translate from the convention of the OS to the c/unix // convention, and not work generally. /* while( fgets( buf, sizeof(buf), file ) ) { data += buf; } */ char* buf = new char[ length+1 ]; buf[0] = 0; if ( fread( buf, length, 1, file ) != 1 ) { delete [] buf; SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } const char* lastPos = buf; const char* p = buf; buf[length] = 0; while( *p ) { assert( p < (buf+length) ); if ( *p == 0xa ) { // Newline character. No special rules for this. Append all the characters // since the last string, and include the newline. data.append( lastPos, (p-lastPos+1) ); // append, include the newline ++p; // move past the newline lastPos = p; // and point to the new buffer (may be 0) assert( p <= (buf+length) ); } else if ( *p == 0xd ) { // Carriage return. Append what we have so far, then // handle moving forward in the buffer. if ( (p-lastPos) > 0 ) { data.append( lastPos, p-lastPos ); // do not add the CR } data += (char)0xa; // a proper newline if ( *(p+1) == 0xa ) { // Carriage return - new line sequence p += 2; lastPos = p; assert( p <= (buf+length) ); } else { // it was followed by something else...that is presumably characters again. ++p; lastPos = p; assert( p <= (buf+length) ); } } else { ++p; } } // Handle any left over characters. if ( p-lastPos ) { data.append( lastPos, p-lastPos ); } delete [] buf; buf = 0; Parse( data.c_str(), 0, encoding ); if ( Error() ) return false; else return true; } bool TiXmlDocument::SaveFile( const char * filename ) const { // The old c stuff lives on... FILE* fp = TiXmlFOpen( filename, "w" ); if ( fp ) { bool result = SaveFile( fp ); fclose( fp ); return result; } return false; } bool TiXmlDocument::SaveFile( FILE* fp ) const { if ( useMicrosoftBOM ) { const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; fputc( TIXML_UTF_LEAD_0, fp ); fputc( TIXML_UTF_LEAD_1, fp ); fputc( TIXML_UTF_LEAD_2, fp ); } Print( fp, 0 ); return (ferror(fp) == 0); } void TiXmlDocument::CopyTo( TiXmlDocument* target ) const { TiXmlNode::CopyTo( target ); target->error = error; target->errorId = errorId; target->errorDesc = errorDesc; target->tabsize = tabsize; target->errorLocation = errorLocation; target->useMicrosoftBOM = useMicrosoftBOM; TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } TiXmlNode* TiXmlDocument::Clone() const { TiXmlDocument* clone = new TiXmlDocument(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlDocument::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { node->Print( cfile, depth ); fprintf( cfile, "\n" ); } } bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } const TiXmlAttribute* TiXmlAttribute::Next() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } /* TiXmlAttribute* TiXmlAttribute::Next() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } */ const TiXmlAttribute* TiXmlAttribute::Previous() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } /* TiXmlAttribute* TiXmlAttribute::Previous() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } */ void TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { TIXML_STRING n, v; EncodeString( name, &n ); EncodeString( value, &v ); if (value.find ('\"') == TIXML_STRING::npos) { if ( cfile ) { fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; } } else { if ( cfile ) { fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; } } } int TiXmlAttribute::QueryIntValue( int* ival ) const { if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } int TiXmlAttribute::QueryDoubleValue( double* dval ) const { if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } void TiXmlAttribute::SetIntValue( int _value ) { char buf [64]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); #else sprintf (buf, "%d", _value); #endif SetValue (buf); } void TiXmlAttribute::SetDoubleValue( double _value ) { char buf [256]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%f", _value); #else sprintf (buf, "%f", _value); #endif SetValue (buf); } int TiXmlAttribute::IntValue() const { return atoi (value.c_str ()); } double TiXmlAttribute::DoubleValue() const { return atof (value.c_str ()); } TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::COMMENT ) { copy.CopyTo( this ); } void TiXmlComment::operator=( const TiXmlComment& base ) { Clear(); base.CopyTo( this ); } void TiXmlComment::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( int i=0; i", value.c_str() ); } void TiXmlComment::CopyTo( TiXmlComment* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlComment::Clone() const { TiXmlComment* clone = new TiXmlComment(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlText::Print( FILE* cfile, int depth ) const { assert( cfile ); if ( cdata ) { int i; fprintf( cfile, "\n" ); for ( i=0; i\n", value.c_str() ); // unformatted output } else { TIXML_STRING buffer; EncodeString( value, &buffer ); fprintf( cfile, "%s", buffer.c_str() ); } } void TiXmlText::CopyTo( TiXmlText* target ) const { TiXmlNode::CopyTo( target ); target->cdata = cdata; } bool TiXmlText::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlText::Clone() const { TiXmlText* clone = 0; clone = new TiXmlText( "" ); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlDeclaration::TiXmlDeclaration( const char * _version, const char * _encoding, const char * _standalone ) : TiXmlNode( TiXmlNode::DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } #ifdef TIXML_USE_STL TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ) : TiXmlNode( TiXmlNode::DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } #endif TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) : TiXmlNode( TiXmlNode::DECLARATION ) { copy.CopyTo( this ); } void TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) { Clear(); copy.CopyTo( this ); } void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { if ( cfile ) fprintf( cfile, "" ); if ( str ) (*str) += "?>"; } void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const { TiXmlNode::CopyTo( target ); target->version = version; target->encoding = encoding; target->standalone = standalone; } bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlDeclaration::Clone() const { TiXmlDeclaration* clone = new TiXmlDeclaration(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlUnknown::Print( FILE* cfile, int depth ) const { for ( int i=0; i", value.c_str() ); } void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlUnknown::Clone() const { TiXmlUnknown* clone = new TiXmlUnknown(); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlAttributeSet::TiXmlAttributeSet() { sentinel.next = &sentinel; sentinel.prev = &sentinel; } TiXmlAttributeSet::~TiXmlAttributeSet() { assert( sentinel.next == &sentinel ); assert( sentinel.prev == &sentinel ); } void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) { #ifdef TIXML_USE_STL assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. #else assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. #endif addMe->next = &sentinel; addMe->prev = sentinel.prev; sentinel.prev->next = addMe; sentinel.prev = addMe; } void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) { TiXmlAttribute* node; for( node = sentinel.next; node != &sentinel; node = node->next ) { if ( node == removeMe ) { node->prev->next = node->next; node->next->prev = node->prev; node->next = 0; node->prev = 0; return; } } assert( 0 ); // we tried to remove a non-linked attribute. } #ifdef TIXML_USE_STL const TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const { for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->name == name ) return node; } return 0; } /* TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->name == name ) return node; } return 0; } */ #endif const TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const { for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( strcmp( node->name.c_str(), name ) == 0 ) return node; } return 0; } /* TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( strcmp( node->name.c_str(), name ) == 0 ) return node; } return 0; } */ #ifdef TIXML_USE_STL std::istream& operator>> (std::istream & in, TiXmlNode & base) { TIXML_STRING tag; tag.reserve( 8 * 1000 ); base.StreamIn( &in, &tag ); base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); return in; } #endif #ifdef TIXML_USE_STL std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out << printer.Str(); return out; } std::string& operator<< (std::string& out, const TiXmlNode& base ) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out.append( printer.Str() ); return out; } #endif TiXmlHandle TiXmlHandle::FirstChild() const { if ( node ) { TiXmlNode* child = node->FirstChild(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const { if ( node ) { TiXmlNode* child = node->FirstChild( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement() const { if ( node ) { TiXmlElement* child = node->FirstChildElement(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const { if ( node ) { TiXmlElement* child = node->FirstChildElement( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild(); for ( i=0; child && iNextSibling(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild( value ); for ( i=0; child && iNextSibling( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement(); for ( i=0; child && iNextSiblingElement(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement( value ); for ( i=0; child && iNextSiblingElement( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } bool TiXmlPrinter::VisitEnter( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitExit( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) { DoIndent(); buffer += "<"; buffer += element.Value(); for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) { buffer += " "; attrib->Print( 0, 0, &buffer ); } if ( !element.FirstChild() ) { buffer += " />"; DoLineBreak(); } else { buffer += ">"; if ( element.FirstChild()->ToText() && element.LastChild() == element.FirstChild() && element.FirstChild()->ToText()->CDATA() == false ) { simpleTextPrint = true; // no DoLineBreak()! } else { DoLineBreak(); } } ++depth; return true; } bool TiXmlPrinter::VisitExit( const TiXmlElement& element ) { --depth; if ( !element.FirstChild() ) { // nothing. } else { if ( simpleTextPrint ) { simpleTextPrint = false; } else { DoIndent(); } buffer += ""; DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlText& text ) { if ( text.CDATA() ) { DoIndent(); buffer += ""; DoLineBreak(); } else if ( simpleTextPrint ) { TIXML_STRING str; TiXmlBase::EncodeString( text.ValueTStr(), &str ); buffer += str; } else { DoIndent(); TIXML_STRING str; TiXmlBase::EncodeString( text.ValueTStr(), &str ); buffer += str; DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration ) { DoIndent(); declaration.Print( 0, 0, &buffer ); DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlComment& comment ) { DoIndent(); buffer += ""; DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlUnknown& unknown ) { DoIndent(); buffer += "<"; buffer += unknown.Value(); buffer += ">"; DoLineBreak(); return true; } geos-3.4.2/tests/xmltester/tinyxml/tinyxml.h0000644000175000017500000017607612206417147021074 0ustar frankiefrankie/* www.sourceforge.net/projects/tinyxml Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors 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. */ #ifndef TINYXML_INCLUDED #define TINYXML_INCLUDED #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4530 ) #pragma warning( disable : 4786 ) #endif #include #include #include #include #include // Help out windows: #if defined( _DEBUG ) && !defined( DEBUG ) #define DEBUG #endif #ifdef TIXML_USE_STL #include #include #include #define TIXML_STRING std::string #else #include "tinystr.h" #define TIXML_STRING TiXmlString #endif // Deprecated library function hell. Compilers want to use the // new safe versions. This probably doesn't fully address the problem, // but it gets closer. There are too many compilers for me to fully // test. If you get compilation troubles, undefine TIXML_SAFE #define TIXML_SAFE #ifdef TIXML_SAFE #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) // Microsoft visual studio, version 2005 and higher. #define TIXML_SNPRINTF _snprintf_s #define TIXML_SNSCANF _snscanf_s #define TIXML_SSCANF sscanf_s #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) // Microsoft visual studio, version 6 and higher. //#pragma message( "Using _sn* functions." ) #define TIXML_SNPRINTF _snprintf #define TIXML_SNSCANF _snscanf #define TIXML_SSCANF sscanf #elif defined(__GNUC__) && (__GNUC__ >= 3 ) // GCC version 3 and higher.s //#warning( "Using sn* functions." ) #define TIXML_SNPRINTF snprintf #define TIXML_SNSCANF snscanf #define TIXML_SSCANF sscanf #else #define TIXML_SSCANF sscanf #endif #endif class TiXmlDocument; class TiXmlElement; class TiXmlComment; class TiXmlUnknown; class TiXmlAttribute; class TiXmlText; class TiXmlDeclaration; class TiXmlParsingData; const int TIXML_MAJOR_VERSION = 2; const int TIXML_MINOR_VERSION = 5; const int TIXML_PATCH_VERSION = 3; /* Internal structure for tracking location of items in the XML file. */ struct TiXmlCursor { TiXmlCursor() { Clear(); } void Clear() { row = col = -1; } int row; // 0 based. int col; // 0 based. }; /** If you call the Accept() method, it requires being passed a TiXmlVisitor class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves are simple called with Visit(). If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its sibilings will be Visited. All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you. Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. You should never change the document from a callback. @sa TiXmlNode::Accept() */ class TiXmlVisitor { public: virtual ~TiXmlVisitor() {} /// Visit a document. virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } /// Visit a document. virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } /// Visit an element. virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } /// Visit an element. virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } /// Visit a declaration virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } /// Visit a text node virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } /// Visit a comment node virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } /// Visit an unknow node virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } }; // Only used by Attribute::Query functions enum { TIXML_SUCCESS, TIXML_NO_ATTRIBUTE, TIXML_WRONG_TYPE }; // Used by the parsing routines. enum TiXmlEncoding { TIXML_ENCODING_UNKNOWN, TIXML_ENCODING_UTF8, TIXML_ENCODING_LEGACY }; const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; /** TiXmlBase is a base class for every class in TinyXml. It does little except to establish that TinyXml classes can be printed and provide some utility functions. In XML, the document and elements can contain other elements and other types of nodes. @verbatim A Document can contain: Element (container or leaf) Comment (leaf) Unknown (leaf) Declaration( leaf ) An Element can contain: Element (container or leaf) Text (leaf) Attributes (not on tree) Comment (leaf) Unknown (leaf) A Decleration contains: Attributes (not on tree) @endverbatim */ class TiXmlBase { friend class TiXmlNode; friend class TiXmlElement; friend class TiXmlDocument; public: TiXmlBase() : userData(0) {} virtual ~TiXmlBase() {} /** All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.) Either or both cfile and str can be null. This is a formatted print, and will insert tabs and newlines. (For an unformatted stream, use the << operator.) */ virtual void Print( FILE* cfile, int depth ) const = 0; /** The world does not agree on whether white space should be kept or not. In order to make everyone happy, these global, static functions are provided to set whether or not TinyXml will condense all white space into a single space or not. The default is to condense. Note changing this value is not thread safe. */ static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } /// Return the current white space setting. static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } /** Return the position, in the original source file, of this node or attribute. The row and column are 1-based. (That is the first row and first column is 1,1). If the returns values are 0 or less, then the parser does not have a row and column value. Generally, the row and column value will be set when the TiXmlDocument::Load(), TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set when the DOM was created from operator>>. The values reflect the initial load. Once the DOM is modified programmatically (by adding or changing nodes and attributes) the new values will NOT update to reflect changes in the document. There is a minor performance cost to computing the row and column. Computation can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. @sa TiXmlDocument::SetTabSize() */ int Row() const { return location.row + 1; } int Column() const { return location.col + 1; } ///< See Row() void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. // Table that returs, for a given lead byte, the total number of bytes // in the UTF-8 sequence. static const int utf8ByteTable[256]; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, or they will be transformed into entities! */ static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); enum { TIXML_NO_ERROR = 0, TIXML_ERROR, TIXML_ERROR_OPENING_FILE, TIXML_ERROR_OUT_OF_MEMORY, TIXML_ERROR_PARSING_ELEMENT, TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, TIXML_ERROR_READING_ELEMENT_VALUE, TIXML_ERROR_READING_ATTRIBUTES, TIXML_ERROR_PARSING_EMPTY, TIXML_ERROR_READING_END_TAG, TIXML_ERROR_PARSING_UNKNOWN, TIXML_ERROR_PARSING_COMMENT, TIXML_ERROR_PARSING_DECLARATION, TIXML_ERROR_DOCUMENT_EMPTY, TIXML_ERROR_EMBEDDED_NULL, TIXML_ERROR_PARSING_CDATA, TIXML_ERROR_DOCUMENT_TOP_ONLY, TIXML_ERROR_STRING_COUNT }; protected: static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); inline static bool IsWhiteSpace( char c ) { return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); } inline static bool IsWhiteSpace( int c ) { if ( c < 256 ) return IsWhiteSpace( (char) c ); return false; // Again, only truly correct for English/Latin...but usually works. } #ifdef TIXML_USE_STL static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); #endif /* Reads an XML name into the string provided. Returns a pointer just past the last character of the name, or 0 if the function has an error. */ static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); /* Reads text. Returns a pointer past the given end tag. Wickedly complex options, but it keeps the (sensitive) code in one place. */ static const char* ReadText( const char* in, // where to start TIXML_STRING* text, // the string read bool ignoreWhiteSpace, // whether to keep the white space const char* endTag, // what ends this text bool ignoreCase, // whether to ignore case in the end tag TiXmlEncoding encoding ); // the current encoding // If an entity has been found, transform it into a character. static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); // Get a character, while interpreting entities. // The length can be from 0 to 4 bytes. inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) { assert( p ); if ( encoding == TIXML_ENCODING_UTF8 ) { *length = utf8ByteTable[ *((const unsigned char*)p) ]; assert( *length >= 0 && *length < 5 ); } else { *length = 1; } if ( *length == 1 ) { if ( *p == '&' ) return GetEntity( p, _value, length, encoding ); *_value = *p; return p+1; } else if ( *length ) { //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), // and the null terminator isn't needed for( int i=0; p[i] && i<*length; ++i ) { _value[i] = p[i]; } return p + (*length); } else { // Not valid text. return 0; } } // Return true if the next characters in the stream are any of the endTag sequences. // Ignore case only works for english, and should only be relied on when comparing // to English words: StringEqual( p, "version", true ) is fine. static bool StringEqual( const char* p, const char* endTag, bool ignoreCase, TiXmlEncoding encoding ); static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; TiXmlCursor location; /// Field containing a generic user pointer void* userData; // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); inline static int ToLower( int v, TiXmlEncoding encoding ) { if ( encoding == TIXML_ENCODING_UTF8 ) { if ( v < 128 ) return tolower( v ); return v; } else { return tolower( v ); } } static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); private: TiXmlBase( const TiXmlBase& ); // not implemented. void operator=( const TiXmlBase& base ); // not allowed. struct Entity { const char* str; unsigned int strLength; char chr; }; enum { NUM_ENTITY = 5, MAX_ENTITY_LENGTH = 6 }; static Entity entity[ NUM_ENTITY ]; static bool condenseWhiteSpace; }; /** The parent class for everything in the Document Object Model. (Except for attributes). Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a TiXmlNode can be queried, and it can be cast to its more defined type. */ class TiXmlNode : public TiXmlBase { friend class TiXmlDocument; friend class TiXmlElement; public: #ifdef TIXML_USE_STL /** An input stream operator, for every class. Tolerant of newlines and formatting, but doesn't expect them. */ friend std::istream& operator >> (std::istream& in, TiXmlNode& base); /** An output stream operator, for every class. Note that this outputs without any newlines or formatting, as opposed to Print(), which includes tabs and new lines. The operator<< and operator>> are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines. But reading is not as well defined. (As it always is.) If you create a TiXmlElement (for example) and read that from an input stream, the text needs to define an element or junk will result. This is true of all input streams, but it's worth keeping in mind. A TiXmlDocument will read nodes until it reads a root element, and all the children of that root element. */ friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); /// Appends the XML node or attribute to a std::string. friend std::string& operator<< (std::string& out, const TiXmlNode& base ); #endif /** The types of XML nodes supported by TinyXml. (All the unsupported types are picked up by UNKNOWN.) */ enum NodeType { DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, DECLARATION, TYPECOUNT }; virtual ~TiXmlNode(); /** The meaning of 'value' changes for the specific type of TiXmlNode. @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim The subclasses will wrap this function. */ const char *Value() const { return value.c_str (); } #ifdef TIXML_USE_STL /** Return Value() as a std::string. If you only use STL, this is more efficient than calling Value(). Only available in STL mode. */ const std::string& ValueStr() const { return value; } #endif const TIXML_STRING& ValueTStr() const { return value; } /** Changes the value of the node. Defined as: @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim */ void SetValue(const char * _value) { value = _value;} #ifdef TIXML_USE_STL /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } #endif /// Delete all the children of this node. Does not affect 'this'. void Clear(); /// One step up the DOM. TiXmlNode* Parent() { return parent; } const TiXmlNode* Parent() const { return parent; } const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. TiXmlNode* FirstChild() { return firstChild; } const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. /// The first child of this node with the matching 'value'. Will be null if none found. TiXmlNode* FirstChild( const char * _value ) { // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) // call the method, cast the return back to non-const. return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); } const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. TiXmlNode* LastChild() { return lastChild; } const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. TiXmlNode* LastChild( const char * _value ) { return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); } #ifdef TIXML_USE_STL const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. #endif /** An alternate way to walk the children of a node. One way to iterate over nodes is: @verbatim for( child = parent->FirstChild(); child; child = child->NextSibling() ) @endverbatim IterateChildren does the same thing with the syntax: @verbatim child = 0; while( child = parent->IterateChildren( child ) ) @endverbatim IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done. */ const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); } /// This flavor of IterateChildren searches for children with a particular 'value' const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); } #ifdef TIXML_USE_STL const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. #endif /** Add a new node related to this. Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child past the LastChild. NOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions. @sa InsertEndChild */ TiXmlNode* LinkEndChild( TiXmlNode* addThis ); /** Add a new node related to this. Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); /** Replace a child of this node. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); /// Delete a child of this node. bool RemoveChild( TiXmlNode* removeThis ); /// Navigate to a sibling node. const TiXmlNode* PreviousSibling() const { return prev; } TiXmlNode* PreviousSibling() { return prev; } /// Navigate to a sibling node. const TiXmlNode* PreviousSibling( const char * ) const; TiXmlNode* PreviousSibling( const char *_prev ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); } #ifdef TIXML_USE_STL const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. #endif /// Navigate to a sibling node. const TiXmlNode* NextSibling() const { return next; } TiXmlNode* NextSibling() { return next; } /// Navigate to a sibling node with the given 'value'. const TiXmlNode* NextSibling( const char * ) const; TiXmlNode* NextSibling( const char* _next ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement() const; TiXmlElement* NextSiblingElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement( const char * ) const; TiXmlElement* NextSiblingElement( const char *_next ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); } #ifdef TIXML_USE_STL const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. #endif /// Convenience function to get through elements. const TiXmlElement* FirstChildElement() const; TiXmlElement* FirstChildElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); } /// Convenience function to get through elements. const TiXmlElement* FirstChildElement( const char * _value ) const; TiXmlElement* FirstChildElement( const char * _value ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); } #ifdef TIXML_USE_STL const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. #endif /** Query the type (as an enumerated value, above) of this node. The possible types are: DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, and DECLARATION. */ int Type() const { return type; } /** Return a pointer to the Document this node lives in. Returns null if not in a document. */ const TiXmlDocument* GetDocument() const; TiXmlDocument* GetDocument() { return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); } /// Returns true if this node has no children. bool NoChildren() const { return !firstChild; } virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. /** Create an exact duplicate of this node and return it. The memory must be deleted by the caller. */ virtual TiXmlNode* Clone() const = 0; /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface. This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML is unchanged by using this interface versus any other.) The interface has been based on ideas from: - http://www.saxproject.org/ - http://c2.com/cgi/wiki?HierarchicalVisitorPattern Which are both good references for "visiting". An example of using Accept(): @verbatim TiXmlPrinter printer; tinyxmlDoc.Accept( &printer ); const char* xmlcstr = printer.CStr(); @endverbatim */ virtual bool Accept( TiXmlVisitor* visitor ) const = 0; protected: TiXmlNode( NodeType _type ); // Copy to the allocated object. Shared functionality between Clone, Copy constructor, // and the assignment operator. void CopyTo( TiXmlNode* target ) const; #ifdef TIXML_USE_STL // The real work of the input operator. virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; #endif // Figure out what is at *p, and parse it. Returns null if it is not an xml node. TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); TiXmlNode* parent; NodeType type; TiXmlNode* firstChild; TiXmlNode* lastChild; TIXML_STRING value; TiXmlNode* prev; TiXmlNode* next; private: TiXmlNode( const TiXmlNode& ); // not implemented. void operator=( const TiXmlNode& base ); // not allowed. }; /** An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name. @note The attributes are not TiXmlNodes, since they are not part of the tinyXML document object model. There are other suggested ways to look at this problem. */ class TiXmlAttribute : public TiXmlBase { friend class TiXmlAttributeSet; public: /// Construct an empty attribute. TiXmlAttribute() : TiXmlBase() { document = 0; prev = next = 0; } #ifdef TIXML_USE_STL /// std::string constructor. TiXmlAttribute( const std::string& _name, const std::string& _value ) { name = _name; value = _value; document = 0; prev = next = 0; } #endif /// Construct an attribute with a name and value. TiXmlAttribute( const char * _name, const char * _value ) { name = _name; value = _value; document = 0; prev = next = 0; } const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. #ifdef TIXML_USE_STL const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. #endif int IntValue() const; ///< Return the value of this attribute, converted to an integer. double DoubleValue() const; ///< Return the value of this attribute, converted to a double. // Get the tinyxml string representation const TIXML_STRING& NameTStr() const { return name; } /** QueryIntValue examines the value string. It is an alternative to the IntValue() method with richer error checking. If the value is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. A specialized but useful call. Note that for success it returns 0, which is the opposite of almost all other TinyXml calls. */ int QueryIntValue( int* _value ) const; /// QueryDoubleValue examines the value string. See QueryIntValue(). int QueryDoubleValue( double* _value ) const; void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. void SetValue( const char* _value ) { value = _value; } ///< Set the value. void SetIntValue( int _value ); ///< Set the value from an integer. void SetDoubleValue( double _value ); ///< Set the value from a double. #ifdef TIXML_USE_STL /// STL std::string form. void SetName( const std::string& _name ) { name = _name; } /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } #endif /// Get the next sibling attribute in the DOM. Returns null at end. const TiXmlAttribute* Next() const; TiXmlAttribute* Next() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); } /// Get the previous sibling attribute in the DOM. Returns null at beginning. const TiXmlAttribute* Previous() const; TiXmlAttribute* Previous() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); } bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } /* Attribute parsing starts: first letter of the name returns: the next char after the value end quote */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); // Prints this Attribute to a FILE stream. virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; // [internal use] // Set the document pointer so the attribute can report errors. void SetDocument( TiXmlDocument* doc ) { document = doc; } private: TiXmlAttribute( const TiXmlAttribute& ); // not implemented. void operator=( const TiXmlAttribute& base ); // not allowed. TiXmlDocument* document; // A pointer back to a document, for error reporting. TIXML_STRING name; TIXML_STRING value; TiXmlAttribute* prev; TiXmlAttribute* next; }; /* A class used to manage a group of attributes. It is only used internally, both by the ELEMENT and the DECLARATION. The set can be changed transparent to the Element and Declaration classes that use it, but NOT transparent to the Attribute which has to implement a next() and previous() method. Which makes it a bit problematic and prevents the use of STL. This version is implemented with circular lists because: - I like circular lists - it demonstrates some independence from the (typical) doubly linked list. */ class TiXmlAttributeSet { public: TiXmlAttributeSet(); ~TiXmlAttributeSet(); void Add( TiXmlAttribute* attribute ); void Remove( TiXmlAttribute* attribute ); const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } const TiXmlAttribute* Find( const char* _name ) const; TiXmlAttribute* Find( const char* _name ) { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); } #ifdef TIXML_USE_STL const TiXmlAttribute* Find( const std::string& _name ) const; TiXmlAttribute* Find( const std::string& _name ) { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) ); } #endif private: //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), //*ME: this class must be also use a hidden/disabled copy-constructor !!! TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) TiXmlAttribute sentinel; }; /** The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes. */ class TiXmlElement : public TiXmlNode { public: /// Construct an element. TiXmlElement (const char * in_value); #ifdef TIXML_USE_STL /// std::string constructor. TiXmlElement( const std::string& _value ); #endif TiXmlElement( const TiXmlElement& ); void operator=( const TiXmlElement& base ); virtual ~TiXmlElement(); /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. */ const char* Attribute( const char* name ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an integer, the integer value will be put in the return 'i', if 'i' is non-null. */ const char* Attribute( const char* name, int* i ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an double, the double value will be put in the return 'd', if 'd' is non-null. */ const char* Attribute( const char* name, double* d ) const; /** QueryIntAttribute examines the attribute - it is an alternative to the Attribute() method with richer error checking. If the attribute is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. If the attribute does not exist, then TIXML_NO_ATTRIBUTE is returned. */ int QueryIntAttribute( const char* name, int* _value ) const; /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). int QueryDoubleAttribute( const char* name, double* _value ) const; /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). int QueryFloatAttribute( const char* name, float* _value ) const { double d; int result = QueryDoubleAttribute( name, &d ); if ( result == TIXML_SUCCESS ) { *_value = (float)d; } return result; } #ifdef TIXML_USE_STL /** Template form of the attribute query which will try to read the attribute into the specified type. Very easy, very powerful, but be careful to make sure to call this with the correct type. NOTE: This method doesn't work correctly for 'string' types. @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE */ template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; std::stringstream sstream( node->ValueStr() ); sstream >> *outValue; if ( !sstream.fail() ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } /* This is - in theory - a bug fix for "QueryValueAtribute returns truncated std::string" but template specialization is hard to get working cross-compiler. Leaving the bug for now. // The above will fail for std::string because the space character is used as a seperator. // Specialize for strings. Bug [ 1695429 ] QueryValueAtribute returns truncated std::string template<> int QueryValueAttribute( const std::string& name, std::string* outValue ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; *outValue = node->ValueStr(); return TIXML_SUCCESS; } */ #endif /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char* name, const char * _value ); #ifdef TIXML_USE_STL const std::string* Attribute( const std::string& name ) const; const std::string* Attribute( const std::string& name, int* i ) const; const std::string* Attribute( const std::string& name, double* d ) const; int QueryIntAttribute( const std::string& name, int* _value ) const; int QueryDoubleAttribute( const std::string& name, double* _value ) const; /// STL std::string form. void SetAttribute( const std::string& name, const std::string& _value ); ///< STL std::string form. void SetAttribute( const std::string& name, int _value ); #endif /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char * name, int value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetDoubleAttribute( const char * name, double value ); /** Deletes an attribute with the given name. */ void RemoveAttribute( const char * name ); #ifdef TIXML_USE_STL void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. #endif const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } /** Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the TiXmlText child and accessing it directly. If the first child of 'this' is a TiXmlText, the GetText() returns the character string of the Text node, else null is returned. This is a convenient method for getting the text of simple contained text: @verbatim This is text const char* str = fooElement->GetText(); @endverbatim 'str' will be a pointer to "This is text". Note that this function can be misleading. If the element foo was created from this XML: @verbatim This is text @endverbatim then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: @verbatim This is text @endverbatim GetText() will return "This is ". WARNING: GetText() accesses a child node - don't become confused with the similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are safe type casts on the referenced node. */ const char* GetText() const; /// Creates a new Element and returns it - the returned element is a copy. virtual TiXmlNode* Clone() const; // Print the Element to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribtue parsing starts: next char past '<' returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlElement* target ) const; void ClearThis(); // like clear, but initializes 'this' object as well // Used to be public [internal use] #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif /* [internal use] Reads the "value" of the element -- another element, or text. This should terminate with the current end tag. */ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); private: TiXmlAttributeSet attributeSet; }; /** An XML comment. */ class TiXmlComment : public TiXmlNode { public: /// Constructs an empty comment. TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {} /// Construct a comment from text. TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::COMMENT ) { SetValue( _value ); } TiXmlComment( const TiXmlComment& ); void operator=( const TiXmlComment& base ); virtual ~TiXmlComment() {} /// Returns a copy of this Comment. virtual TiXmlNode* Clone() const; // Write this Comment to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribtue parsing starts: at the ! of the !-- returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlComment* target ) const; // used to be public #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif // virtual void StreamOut( TIXML_OSTREAM * out ) const; private: }; /** XML text. A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with SetCDATA() and query it with CDATA(). */ class TiXmlText : public TiXmlNode { friend class TiXmlElement; public: /** Constructor for text element. By default, it is treated as normal, encoded text. If you want it be output as a CDATA text element, set the parameter _cdata to 'true' */ TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) { SetValue( initValue ); cdata = false; } virtual ~TiXmlText() {} #ifdef TIXML_USE_STL /// Constructor. TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) { SetValue( initValue ); cdata = false; } #endif TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) { copy.CopyTo( this ); } void operator=( const TiXmlText& base ) { base.CopyTo( this ); } // Write this text object to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /// Queries whether this represents text using a CDATA section. bool CDATA() const { return cdata; } /// Turns on or off a CDATA representation of text. void SetCDATA( bool _cdata ) { cdata = _cdata; } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : /// [internal use] Creates a new Element and returns it. virtual TiXmlNode* Clone() const; void CopyTo( TiXmlText* target ) const; bool Blank() const; // returns true if all white space and new lines // [internal use] #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: bool cdata; // true if this should be input and output as a CDATA style text element }; /** In correct XML the declaration is the first entry in the file. @verbatim @endverbatim TinyXml will happily read or write files without a declaration, however. There are 3 possible attributes to the declaration: version, encoding, and standalone. Note: In this version of the code, the attributes are handled as special cases, not generic attributes, simply because there can only be at most 3 and they are always the same. */ class TiXmlDeclaration : public TiXmlNode { public: /// Construct an empty declaration. TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {} #ifdef TIXML_USE_STL /// Constructor. TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ); #endif /// Construct. TiXmlDeclaration( const char* _version, const char* _encoding, const char* _standalone ); TiXmlDeclaration( const TiXmlDeclaration& copy ); void operator=( const TiXmlDeclaration& copy ); virtual ~TiXmlDeclaration() {} /// Version. Will return an empty string if none was found. const char *Version() const { return version.c_str (); } /// Encoding. Will return an empty string if none was found. const char *Encoding() const { return encoding.c_str (); } /// Is this a standalone document? const char *Standalone() const { return standalone.c_str (); } /// Creates a copy of this Declaration and returns it. virtual TiXmlNode* Clone() const; // Print this declaration to a FILE stream. virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlDeclaration* target ) const; // used to be public #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: TIXML_STRING version; TIXML_STRING encoding; TIXML_STRING standalone; }; /** Any tag that tinyXml doesn't recognize is saved as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved. DTD tags get thrown into TiXmlUnknowns. */ class TiXmlUnknown : public TiXmlNode { public: TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {} virtual ~TiXmlUnknown() {} TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::UNKNOWN ) { copy.CopyTo( this ); } void operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); } /// Creates a copy of this Unknown and returns it. virtual TiXmlNode* Clone() const; // Print this Unknown to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected: void CopyTo( TiXmlUnknown* target ) const; #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: }; /** Always the top level node. A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen. The 'value' of a document node is the xml file name. */ class TiXmlDocument : public TiXmlNode { public: /// Create an empty document, that has no name. TiXmlDocument(); /// Create a document with a name. The name of the document is also the filename of the xml. TiXmlDocument( const char * documentName ); #ifdef TIXML_USE_STL /// Constructor. TiXmlDocument( const std::string& documentName ); #endif TiXmlDocument( const TiXmlDocument& copy ); void operator=( const TiXmlDocument& copy ); virtual ~TiXmlDocument() {} /** Load a file using the current document value. Returns true if successful. Will delete any existing document data before loading. */ bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given filename. Returns true if successful. bool SaveFile( const char * filename ) const; /** Load a file using the given FILE*. Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current file location. Streaming may be added in the future. */ bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given FILE*. Returns true if successful. bool SaveFile( FILE* ) const; #ifdef TIXML_USE_STL bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. { // StringToBuffer f( filename ); // return ( f.buffer && LoadFile( f.buffer, encoding )); return LoadFile( filename.c_str(), encoding ); } bool SaveFile( const std::string& filename ) const ///< STL std::string version. { // StringToBuffer f( filename ); // return ( f.buffer && SaveFile( f.buffer )); return SaveFile( filename.c_str() ); } #endif /** Parse the given null terminated block of xml data. Passing in an encoding to this method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml to use that encoding, regardless of what TinyXml might otherwise try to detect. */ virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /** Get the root element -- the only top level element -- of the document. In well formed XML, there should only be one. TinyXml is tolerant of multiple elements at the document level. */ const TiXmlElement* RootElement() const { return FirstChildElement(); } TiXmlElement* RootElement() { return FirstChildElement(); } /** If an error occurs, Error will be set to true. Also, - The ErrorId() will contain the integer identifier of the error (not generally useful) - The ErrorDesc() method will return the name of the error. (very useful) - The ErrorRow() and ErrorCol() will return the location of the error (if known) */ bool Error() const { return error; } /// Contains a textual (english) description of the error if one occurs. const char * ErrorDesc() const { return errorDesc.c_str (); } /** Generally, you probably want the error string ( ErrorDesc() ). But if you prefer the ErrorId, this function will fetch it. */ int ErrorId() const { return errorId; } /** Returns the location (if known) of the error. The first column is column 1, and the first row is row 1. A value of 0 means the row and column wasn't applicable (memory errors, for example, have no row/column) or the parser lost the error. (An error in the error reporting, in that case.) @sa SetTabSize, Row, Column */ int ErrorRow() const { return errorLocation.row+1; } int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to report the correct values for row and column. It does not change the output or input in any way. By calling this method, with a tab size greater than 0, the row and column of each node and attribute is stored when the file is loaded. Very useful for tracking the DOM back in to the source file. The tab size is required for calculating the location of nodes. If not set, the default of 4 is used. The tabsize is set per document. Setting the tabsize to 0 disables row/column tracking. Note that row and column tracking is not supported when using operator>>. The tab size needs to be enabled before the parse or load. Correct usage: @verbatim TiXmlDocument doc; doc.SetTabSize( 8 ); doc.Load( "myfile.xml" ); @endverbatim @sa Row, Column */ void SetTabSize( int _tabsize ) { tabsize = _tabsize; } int TabSize() const { return tabsize; } /** If you have handled the error, it can be reset with this call. The error state is automatically cleared if you Parse a new XML block. */ void ClearError() { error = false; errorId = 0; errorDesc = ""; errorLocation.row = errorLocation.col = 0; //errorLocation.last = 0; } /** Write the document to standard out using formatted printing ("pretty print"). */ void Print() const { Print( stdout, 0 ); } /* Write the document to a string using formatted printing ("pretty print"). This will allocate a character array (new char[]) and return it as a pointer. The calling code pust call delete[] on the return char* to avoid a memory leak. */ //char* PrintToMemory() const; /// Print this Document to a FILE stream. virtual void Print( FILE* cfile, int depth = 0 ) const; // [internal use] void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : // [internal use] virtual TiXmlNode* Clone() const; #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: void CopyTo( TiXmlDocument* target ) const; bool error; int errorId; TIXML_STRING errorDesc; int tabsize; TiXmlCursor errorLocation; bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. }; /** A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml DOM structure. It is a separate utility class. Take an example: @verbatim @endverbatim Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like: @verbatim TiXmlElement* root = document.FirstChildElement( "Document" ); if ( root ) { TiXmlElement* element = root->FirstChildElement( "Element" ); if ( element ) { TiXmlElement* child = element->FirstChildElement( "Child" ); if ( child ) { TiXmlElement* child2 = child->NextSiblingElement( "Child" ); if ( child2 ) { // Finally do something useful. @endverbatim And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use: @verbatim TiXmlHandle docHandle( &document ); TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); if ( child2 ) { // do something useful @endverbatim Which is MUCH more concise and useful. It is also safe to copy handles - internally they are nothing more than node pointers. @verbatim TiXmlHandle handleCopy = handle; @endverbatim What they should not be used for is iteration: @verbatim int i=0; while ( true ) { TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); if ( !child ) break; // do something ++i; } @endverbatim It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer: @verbatim TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); for( child; child; child=child->NextSiblingElement() ) { // do something } @endverbatim */ class TiXmlHandle { public: /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } /// Copy constructor TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } TiXmlHandle operator=( const TiXmlHandle& ref ) { this->node = ref.node; return *this; } /// Return a handle to the first child node. TiXmlHandle FirstChild() const; /// Return a handle to the first child node with the given name. TiXmlHandle FirstChild( const char * value ) const; /// Return a handle to the first child element. TiXmlHandle FirstChildElement() const; /// Return a handle to the first child element with the given name. TiXmlHandle FirstChildElement( const char * value ) const; /** Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc. */ TiXmlHandle Child( const char* value, int index ) const; /** Return a handle to the "index" child. The first child is 0, the second 1, etc. */ TiXmlHandle Child( int index ) const; /** Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( const char* value, int index ) const; /** Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( int index ) const; #ifdef TIXML_USE_STL TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } #endif /** Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* ToNode() const { return node; } /** Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } /** Return the handle as a TiXmlText. This may return null. */ TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } /** Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } /** @deprecated use ToNode. Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* Node() const { return ToNode(); } /** @deprecated use ToElement. Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* Element() const { return ToElement(); } /** @deprecated use ToText() Return the handle as a TiXmlText. This may return null. */ TiXmlText* Text() const { return ToText(); } /** @deprecated use ToUnknown() Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* Unknown() const { return ToUnknown(); } private: TiXmlNode* node; }; /** Print to memory functionality. The TiXmlPrinter is useful when you need to: -# Print to memory (especially in non-STL mode) -# Control formatting (line endings, etc.) When constructed, the TiXmlPrinter is in its default "pretty printing" mode. Before calling Accept() you can call methods to control the printing of the XML document. After TiXmlNode::Accept() is called, the printed document can be accessed via the CStr(), Str(), and Size() methods. TiXmlPrinter uses the Visitor API. @verbatim TiXmlPrinter printer; printer.SetIndent( "\t" ); doc.Accept( &printer ); fprintf( stdout, "%s", printer.CStr() ); @endverbatim */ class TiXmlPrinter : public TiXmlVisitor { public: TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), buffer(), indent( " " ), lineBreak( "\n" ) {} virtual bool VisitEnter( const TiXmlDocument& doc ); virtual bool VisitExit( const TiXmlDocument& doc ); virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); virtual bool VisitExit( const TiXmlElement& element ); virtual bool Visit( const TiXmlDeclaration& declaration ); virtual bool Visit( const TiXmlText& text ); virtual bool Visit( const TiXmlComment& comment ); virtual bool Visit( const TiXmlUnknown& unknown ); /** Set the indent characters for printing. By default 4 spaces but tab (\t) is also useful, or null/empty string for no indentation. */ void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } /// Query the indention string. const char* Indent() { return indent.c_str(); } /** Set the line breaking string. By default set to newline (\n). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation. */ void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } /// Query the current line breaking string. const char* LineBreak() { return lineBreak.c_str(); } /** Switch over to "stream printing" which is the most dense formatting without linebreaks. Common when the XML is needed for network transmission. */ void SetStreamPrinting() { indent = ""; lineBreak = ""; } /// Return the result. const char* CStr() { return buffer.c_str(); } /// Return the length of the result string. size_t Size() { return buffer.size(); } #ifdef TIXML_USE_STL /// Return the result. const std::string& Str() { return buffer; } #endif private: void DoIndent() { for( int i=0; i #include #include "tinyxml.h" //#define DEBUG_PARSER #if defined( DEBUG_PARSER ) # if defined( DEBUG ) && defined( _MSC_VER ) # include # define TIXML_LOG OutputDebugString # else # define TIXML_LOG printf # endif #endif // Note tha "PutString" hardcodes the same list. This // is less flexible than it appears. Changing the entries // or order will break putstring. TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = { { "&", 5, '&' }, { "<", 4, '<' }, { ">", 4, '>' }, { """, 6, '\"' }, { "'", 6, '\'' } }; // Bunch of unicode info at: // http://www.unicode.org/faq/utf_bom.html // Including the basic of this table, which determines the #bytes in the // sequence from the lead byte. 1 placed for invalid sequences -- // although the result will be junk, pass it through as much as possible. // Beware of the non-characters in UTF-8: // ef bb bf (Microsoft "lead bytes") // ef bf be // ef bf bf const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; const int TiXmlBase::utf8ByteTable[256] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid }; void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) { const unsigned long BYTE_MASK = 0xBF; const unsigned long BYTE_MARK = 0x80; const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; if (input < 0x80) *length = 1; else if ( input < 0x800 ) *length = 2; else if ( input < 0x10000 ) *length = 3; else if ( input < 0x200000 ) *length = 4; else { *length = 0; return; } // This code won't covert this correctly anyway. output += *length; // Scary scary fall throughs. switch (*length) { case 4: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 3: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 2: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 1: --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); } } /*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalpha( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalpha( anyByte ); // } } /*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alhabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalnum( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalnum( anyByte ); // } } class TiXmlParsingData { friend class TiXmlDocument; public: void Stamp( const char* now, TiXmlEncoding encoding ); const TiXmlCursor& Cursor() { return cursor; } private: // Only used by the document! TiXmlParsingData( const char* start, int _tabsize, int row, int col ) { assert( start ); stamp = start; tabsize = _tabsize; cursor.row = row; cursor.col = col; } TiXmlCursor cursor; const char* stamp; int tabsize; }; void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) { assert( now ); // Do nothing if the tabsize is 0. if ( tabsize < 1 ) { return; } // Get the current row, column. int row = cursor.row; int col = cursor.col; const char* p = stamp; assert( p ); while ( p < now ) { // Treat p as unsigned, so we have a happy compiler. const unsigned char* pU = (const unsigned char*)p; // Code contributed by Fletcher Dunn: (modified by lee) switch (*pU) { case 0: // We *should* never get here, but in case we do, don't // advance past the terminating null character, ever return; case '\r': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \r\n sequence, and treat this as a single character if (*p == '\n') { ++p; } break; case '\n': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \n\r sequence, and treat this as a single // character. (Yes, this bizarre thing does occur still // on some arcane platforms...) if (*p == '\r') { ++p; } break; case '\t': // Eat the character ++p; // Skip to next tab stop col = (col / tabsize + 1) * tabsize; break; case TIXML_UTF_LEAD_0: if ( encoding == TIXML_ENCODING_UTF8 ) { if ( *(p+1) && *(p+2) ) { // In these cases, don't advance the column. These are // 0-width spaces. if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) p += 3; else { p +=3; ++col; } // A normal character. } } else { ++p; ++col; } break; default: if ( encoding == TIXML_ENCODING_UTF8 ) { // Eat the 1 to 4 byte utf8 character. int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; if ( step == 0 ) step = 1; // Error case from bad encoding, but handle gracefully. p += step; // Just advance one column, of course. ++col; } else { ++p; ++col; } break; } } cursor.row = row; cursor.col = col; assert( cursor.row >= -1 ); assert( cursor.col >= -1 ); stamp = p; assert( stamp ); } const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) { if ( !p || !*p ) { return 0; } if ( encoding == TIXML_ENCODING_UTF8 ) { while ( *p ) { const unsigned char* pU = (const unsigned char*)p; // Skip the stupid Microsoft UTF-8 Byte order marks if ( *(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbeU ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbfU ) { p += 3; continue; } if ( IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' ) // Still using old rules for white space. ++p; else break; } } else { while ( *p && (IsWhiteSpace( *p ) || *p == '\n' || *p =='\r') ) ++p; } return p; } #ifdef TIXML_USE_STL /*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) { for( ;; ) { if ( !in->good() ) return false; int c = in->peek(); // At this scope, we can't get to a document. So fail silently. if ( !IsWhiteSpace( c ) || c <= 0 ) return true; *tag += (char) in->get(); } } /*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) { //assert( character > 0 && character < 128 ); // else it won't work in utf-8 while ( in->good() ) { int c = in->peek(); if ( c == character ) return true; if ( c <= 0 ) // Silent failure: can't get document at this scope return false; in->get(); *tag += (char) c; } return false; } #endif // One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The // "assign" optimization removes over 10% of the execution time. // const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) { // Oddly, not supported on some comilers, //name->clear(); // So use this: *name = ""; assert( p ); // Names start with letters or underscores. // Of course, in unicode, tinyxml has no idea what a letter *is*. The // algorithm is generous. // // After that, they can be letters, underscores, numbers, // hyphens, or colons. (Colons are valid ony for namespaces, // but tinyxml can't tell namespaces from names.) if ( p && *p && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) { const char* start = p; while( p && *p && ( IsAlphaNum( (unsigned char ) *p, encoding ) || *p == '_' || *p == '-' || *p == '.' || *p == ':' ) ) { //(*name) += *p; // expensive ++p; } if ( p-start > 0 ) { name->assign( start, p-start ); } return p; } return 0; } const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) { // Presume an entity, and pull it out. TIXML_STRING ent; int i; *length = 0; if ( *(p+1) && *(p+1) == '#' && *(p+2) ) { unsigned long ucs = 0; ptrdiff_t delta = 0; unsigned mult = 1; if ( *(p+2) == 'x' ) { // Hexadecimal. if ( !*(p+3) ) return 0; const char* q = p+3; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != 'x' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else if ( *q >= 'a' && *q <= 'f' ) ucs += mult * (*q - 'a' + 10); else if ( *q >= 'A' && *q <= 'F' ) ucs += mult * (*q - 'A' + 10 ); else return 0; mult *= 16; --q; } } else { // Decimal. if ( !*(p+2) ) return 0; const char* q = p+2; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != '#' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else return 0; mult *= 10; --q; } } if ( encoding == TIXML_ENCODING_UTF8 ) { // convert the UCS to UTF-8 ConvertUTF32ToUTF8( ucs, value, length ); } else { *value = (char)ucs; *length = 1; } return p + delta + 1; } // Now try to match it. for( i=0; iappend( cArr, len ); } } else { bool whitespace = false; // Remove leading white space: p = SkipWhiteSpace( p, encoding ); while ( p && *p && !StringEqual( p, endTag, caseInsensitive, encoding ) ) { if ( *p == '\r' || *p == '\n' ) { whitespace = true; ++p; } else if ( IsWhiteSpace( *p ) ) { whitespace = true; ++p; } else { // If we've found whitespace, add it before the // new character. Any whitespace just becomes a space. if ( whitespace ) { (*text) += ' '; whitespace = false; } int len; char cArr[4] = { 0, 0, 0, 0 }; p = GetChar( p, cArr, &len, encoding ); if ( len == 1 ) (*text) += cArr[0]; // more efficient else text->append( cArr, len ); } } } if ( p ) p += strlen( endTag ); return p; } #ifdef TIXML_USE_STL void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) { // The basic issue with a document is that we don't know what we're // streaming. Read something presumed to be a tag (and hope), then // identify it, and call the appropriate stream method on the tag. // // This "pre-streaming" will never read the closing ">" so the // sub-tag can orient itself. if ( !StreamTo( in, '<', tag ) ) { SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } while ( in->good() ) { int tagIndex = (int) tag->length(); while ( in->good() && in->peek() != '>' ) { int c = in->get(); if ( c <= 0 ) { SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); break; } (*tag) += (char) c; } if ( in->good() ) { // We now have something we presume to be a node of // some sort. Identify it, and call the node to // continue streaming. TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); if ( node ) { node->StreamIn( in, tag ); bool isElement = node->ToElement() != 0; delete node; node = 0; // If this is the root element, we're done. Parsing will be // done by the >> operator. if ( isElement ) { return; } } else { SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } } } // We should have returned sooner. SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); } #endif const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) { ClearError(); // Parse away, at the document level. Since a document // contains nothing but other tags, most of what happens // here is skipping white space. if ( !p || !*p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } // Note that, for a document, this needs to come // before the while space skip, so that parsing // starts from the pointer we are given. location.Clear(); if ( prevData ) { location.row = prevData->cursor.row; location.col = prevData->cursor.col; } else { location.row = 0; location.col = 0; } TiXmlParsingData data( p, TabSize(), location.row, location.col ); location = data.Cursor(); if ( encoding == TIXML_ENCODING_UNKNOWN ) { // Check for the Microsoft UTF-8 lead bytes. const unsigned char* pU = (const unsigned char*)p; if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) { encoding = TIXML_ENCODING_UTF8; useMicrosoftBOM = true; } } p = SkipWhiteSpace( p, encoding ); if ( !p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } while ( p && *p ) { TiXmlNode* node = Identify( p, encoding ); if ( node ) { p = node->Parse( p, &data, encoding ); LinkEndChild( node ); } else { break; } // Did we get encoding info? if ( encoding == TIXML_ENCODING_UNKNOWN && node->ToDeclaration() ) { TiXmlDeclaration* dec = node->ToDeclaration(); const char* enc = dec->Encoding(); assert( enc ); if ( *enc == 0 ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice else encoding = TIXML_ENCODING_LEGACY; } p = SkipWhiteSpace( p, encoding ); } // Was this empty? if ( !firstChild ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); return 0; } // All is well. return p; } void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) { // The first error in a chain is more accurate - don't set again! if ( error ) return; assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); error = true; errorId = err; errorDesc = errorString[ errorId ]; errorLocation.Clear(); if ( pError && data ) { data->Stamp( pError, encoding ); errorLocation = data->Cursor(); } } TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) { TiXmlNode* returnNode = 0; p = SkipWhiteSpace( p, encoding ); if( !p || !*p || *p != '<' ) { return 0; } TiXmlDocument* doc = GetDocument(); p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { return 0; } // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: "; if ( !StringEqual( p, startTag, false, encoding ) ) { document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); return 0; } p += strlen( startTag ); // [ 1475201 ] TinyXML parses entities in comments // Oops - ReadText doesn't work, because we don't want to parse the entities. // p = ReadText( p, &value, false, endTag, false, encoding ); // // from the XML spec: /* [Definition: Comments may appear anywhere in a document outside other markup; in addition, they may appear within the document type declaration at places allowed by the grammar. They are not part of the document's character data; an XML processor MAY, but need not, make it possible for an application to retrieve the text of comments. For compatibility, the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity references MUST NOT be recognized within comments. An example of a comment: */ value = ""; // Keep all the white space. while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) { value.append( p, 1 ); ++p; } if ( p ) p += strlen( endTag ); return p; } const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) return 0; // int tabsize = 4; // if ( document ) // tabsize = document->TabSize(); if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } // Read the name, the '=' and the value. const char* pErr = p; p = ReadName( p, &name, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); return 0; } p = SkipWhiteSpace( p, encoding ); if ( !p || !*p || *p != '=' ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } ++p; // skip '=' p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } const char* end; const char SINGLE_QUOTE = '\''; const char DOUBLE_QUOTE = '\"'; if ( *p == SINGLE_QUOTE ) { ++p; end = "\'"; // single quote in string p = ReadText( p, &value, false, end, false, encoding ); } else if ( *p == DOUBLE_QUOTE ) { ++p; end = "\""; // double quote in string p = ReadText( p, &value, false, end, false, encoding ); } else { // All attribute values should be in single or double quotes. // But this is such a common error that the parser will try // its best, even without them. value = ""; while ( p && *p // existence && !IsWhiteSpace( *p ) && *p != '\n' && *p != '\r' // whitespace && *p != '/' && *p != '>' ) // tag end { if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { // [ 1451649 ] Attribute values with trailing quotes not handled correctly // We did not have an opening quote but seem to have a // closing one. Give up and throw an error. if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } value += *p; ++p; } } return p; } #ifdef TIXML_USE_STL void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->peek(); if ( !cdata && (c == '<' ) ) { return; } if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; in->get(); // "commits" the peek made above if ( cdata && c == '>' && tag->size() >= 3 ) { size_t len = tag->size(); if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { // terminator of cdata. return; } } } } #endif const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { value = ""; TiXmlDocument* document = GetDocument(); if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } const char* const startTag = ""; if ( cdata || StringEqual( p, startTag, false, encoding ) ) { cdata = true; if ( !StringEqual( p, startTag, false, encoding ) ) { document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); return 0; } p += strlen( startTag ); // Keep all the white space, ignore the encoding, etc. while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) { value += *p; ++p; } TIXML_STRING dummy; p = ReadText( p, &dummy, false, endTag, false, encoding ); return p; } else { bool ignoreWhite = true; const char* end = "<"; p = ReadText( p, &value, ignoreWhite, end, false, encoding ); if ( p ) return p-1; // don't truncate the '<' return 0; } } #ifdef TIXML_USE_STL void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->get(); if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; if ( c == '>' ) { // All is well. return; } } } #endif const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) { p = SkipWhiteSpace( p, _encoding ); // Find the beginning, find the end, and look for // the stuff in-between. TiXmlDocument* document = GetDocument(); if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); return 0; } if ( data ) { data->Stamp( p, _encoding ); location = data->Cursor(); } p += 5; version = ""; encoding = ""; standalone = ""; while ( p && *p ) { if ( *p == '>' ) { ++p; return p; } p = SkipWhiteSpace( p, _encoding ); if ( StringEqual( p, "version", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); version = attrib.Value(); } else if ( StringEqual( p, "encoding", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); encoding = attrib.Value(); } else if ( StringEqual( p, "standalone", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); standalone = attrib.Value(); } else { // Read over whatever it is. while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) ++p; } } return 0; } bool TiXmlText::Blank() const { for ( unsigned i=0; i # # This is free software; you can redistribute and/or modify it under # the terms of the GNU Lesser General Public Licence as published # by the Free Software Foundation. # See the COPYING file for more information. # ################################################################################# if(UNIX) if(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK AND GEOS_ENABLE_MACOSX_FRAMEWORK_UNIXCOMPAT) set(installdest GEOS.framework/Versions/${VERSION_MAJOR}/unix/bin) set(prefix ${CMAKE_INSTALL_PREFIX}/GEOS.framework/Versions/${VERSION_MAJOR}/unix) elseif(APPLE AND GEOS_ENABLE_MACOSX_FRAMEWORK) # just a dummy so installdest not set # want geos-config only for Mac unix build or framework+unixcompat else() set(installdest bin) set(prefix ${CMAKE_INSTALL_PREFIX}) endif() set(exec_prefix ${prefix}/bin) set(libdir ${prefix}/lib) if(installdest) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/geos-config.in ${CMAKE_CURRENT_BINARY_DIR}/geos-config @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/geos-config DESTINATION ${installdest} PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif() endif() geos-3.4.2/tools/Makefile.am0000644000175000017500000000022012206417146015466 0ustar frankiefrankie# # This file is part of project GEOS (http://trac.osgeo.org/geos/) bin_SCRIPTS = geos-config EXTRA_DIST = CMakeLists.txt svn_repo_revision.sh geos-3.4.2/tools/Makefile.in0000644000175000017500000003414012206417166015511 0ustar frankiefrankie# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/geos-config.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/macros/ac_pkg_swig.m4 \ $(top_srcdir)/macros/ac_python_devel.m4 \ $(top_srcdir)/macros/libtool.m4 \ $(top_srcdir)/macros/ltoptions.m4 \ $(top_srcdir)/macros/ltsugar.m4 \ $(top_srcdir)/macros/ltversion.m4 \ $(top_srcdir)/macros/lt~obsolete.m4 \ $(top_srcdir)/macros/python.m4 $(top_srcdir)/macros/ruby.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/config.h \ $(top_builddir)/include/geos/platform.h CONFIG_CLEAN_FILES = geos-config CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(bindir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAPI_INTERFACE_AGE = @CAPI_INTERFACE_AGE@ CAPI_INTERFACE_CURRENT = @CAPI_INTERFACE_CURRENT@ CAPI_INTERFACE_REVISION = @CAPI_INTERFACE_REVISION@ CAPI_VERSION = @CAPI_VERSION@ CAPI_VERSION_MAJOR = @CAPI_VERSION_MAJOR@ CAPI_VERSION_MINOR = @CAPI_VERSION_MINOR@ CAPI_VERSION_PATCH = @CAPI_VERSION_PATCH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INLINE_FLAGS = @INLINE_FLAGS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTERFACE_AGE = @INTERFACE_AGE@ INTERFACE_CURRENT = @INTERFACE_CURRENT@ INTERFACE_REVISION = @INTERFACE_REVISION@ JTS_PORT = @JTS_PORT@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PHP = @PHP@ PHPUNIT = @PHPUNIT@ PHP_CONFIG = @PHP_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ RUBY = @RUBY@ RUBY_BIN_DIR = @RUBY_BIN_DIR@ RUBY_EXTENSION_DIR = @RUBY_EXTENSION_DIR@ RUBY_INCLUDE_DIR = @RUBY_INCLUDE_DIR@ RUBY_LIB_DIR = @RUBY_LIB_DIR@ RUBY_SHARED_LIB = @RUBY_SHARED_LIB@ RUBY_SITE_ARCH = @RUBY_SITE_ARCH@ RUBY_SO_NAME = @RUBY_SO_NAME@ RUBY_VERSION = @RUBY_VERSION@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_PATCH = @VERSION_PATCH@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # This file is part of project GEOS (http://trac.osgeo.org/geos/) bin_SCRIPTS = geos-config EXTRA_DIST = CMakeLists.txt svn_repo_revision.sh all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): geos-config: $(top_builddir)/config.status $(srcdir)/geos-config.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-binSCRIPTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: geos-3.4.2/tools/geos-config.in0000644000175000017500000000232012206417146016165 0ustar frankiefrankie#!/bin/sh prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ usage() { cat <&2 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix) echo ${prefix} ;; --version) echo @VERSION@ ;; --cflags) echo -I${prefix}/include ;; --libs) # TODO: make an alias for --clibs # see http://trac.osgeo.org/geos/ticket/497 echo -L${libdir} -lgeos ;; --clibs) echo -L${libdir} -lgeos_c ;; --cclibs) echo -L${libdir} -lgeos ;; --static-clibs) echo -L${libdir} -lgeos_c -lgeos -m ;; --static-cclibs) echo -L${libdir} -lgeos -m ;; --ldflags) echo -L${libdir} ;; --includes) echo ${prefix}/include ;; --jtsport) echo @JTS_PORT@ ;; *) usage 1 1>&2 ;; esac shift done geos-3.4.2/tools/svn_repo_revision.sh0000755000175000017500000000376612206417146017564 0ustar frankiefrankie#!/bin/sh LC_ALL="C" # what for ? [ -z "$top_srcdir" ] && top_srcdir="." rev_file=$top_srcdir'/geos_svn_revision.h' read_rev() { if test -d $top_srcdir"/.svn"; then read_rev_svn elif test -d $top_srcdir"/.git"; then read_rev_git else echo "Can't fetch local revision (neither .svn nor .git found)" >&2 echo 0 fi } read_rev_git() { # TODO: test on old systems, I think I saw some `which` # implementations returning "nothing found" or something # like that, making the later if ( ! $svn_exe ) always false # git_exe=`which git`; if test -z "$git_exe"; then echo "Can't fetch SVN revision: no git executable found" >&2 echo 0; fi rev=`${git_exe} log --grep=git-svn -1 | grep git-svn | cut -d@ -f2 | cut -d' ' -f1` if test -z "$rev"; then echo "Can't fetch SVN revision from git log" >&2 echo 0 else echo $rev fi } read_rev_svn() { # TODO: test on old systems, I think I saw some `which` # implementations returning "nothing found" or something # like that, making the later if ( ! $svn_exe ) always false # svn_exe=`which svn` if test -z "$svn_exe"; then echo "Can't fetch SVN revision: no svn executable found" >&2 echo 0; fi svn_info=`"${svn_exe}" info | grep 'Last Changed Rev:' | cut -d: -f2` if test -z "$svn_info"; then echo "Can't fetch SVN revision with `svn info`" >&2 echo 0 else echo ${svn_info} fi } write_defn() { rev=$1 oldrev=0 # Do not override the file if new detected # revision isn't zero nor different from the existing one if test -f $rev_file; then oldrev=`grep GEOS_SVN_REVISION ${rev_file} | awk '{print $2}'` if test "$rev" = 0 -o "$rev" = "$oldrev"; then echo "Not updating existing rev file at $oldrev" >&2 return; fi fi echo "#define GEOS_SVN_REVISION $rev" | tee $rev_file echo "Wrote rev '$rev' in file '$rev_file'" >&2 } # Read the svn revision number svn_rev=`read_rev` # Write it write_defn $svn_rev